Написание плагинов

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
@AlmazON, ну... С MenuHandler'ами у меня вечная проблема. Всё ещё никак не вкурю, когда хандл Menu ещё существует, а когда нет.
Иногда обезопасиваюсь лишний раз, и получаю в логах "Invalid handle" в том месте, где он закрываться должен по идее.
В коде вправил.
 

Djgadzilla

Участник
Сообщения
14
Реакции
0
В плагине баг мут на чат не работает (то есть даешь мутчата а наделе его нет) можно как то исправить?
 

Вложения

  • Army_Rank.rar
    710.5 КБ · Просмотры: 3

Rodion1488

Участник
Сообщения
151
Реакции
4
@AlmazON, ну... С MenuHandler'ами у меня вечная проблема. Всё ещё никак не вкурю, когда хандл Menu ещё существует, а когда нет.
Иногда обезопасиваюсь лишний раз, и получаю в логах "Invalid handle" в том месте, где он закрываться должен по идее.
В коде вправил.
Спасибо,все отлично работает,а можно спросить как создать категорию,например: "Снаряжения" "Гранаты" "Оружия"
 

Steammer

Участник
Сообщения
443
Реакции
187
Идея для плагина (SVMG):
!admin -> Управление голосованиями -> Мини-игры (команда sm_start_vote_mg 0/1)(Флаг: "p").
[Когда 1 - в чате пишет: "[MG] Доступно голосование за мини-игру. Введите !mg"]
[Когда 0 - в чате пишет: "[MG] Возможность голосования за мини-игру отключена."]

!mg -> Меню:
Выберите мини-игру:
1. [5] Оборонаᅠᅠᅠᅠᅠᅠ1. [0] Заморозка
2. [1] Зомби
3. [3] Прятки
4. [4] Охота
5. [6] Электрошокеры
6. [2] Горячая картошка

[Если возможно - чтобы пункты при каждом новом вводе команды тасовались]
[Конфиг "mg_list.txt", в котором список мини игр]
[Запоминание двух последних игр, чтобы за них нельзя было голосовать]

Конфиг "svmg.cfg", переменные:
svmg_flag
- флаг администратора, который может запускать голосование.
svmg_remember - сколько игр запоминать(Чтобы нельзя было за них голосовать).
svmg_advert - писать ли объявление о включении sm_start_vote_mg 1.
svmg_msg - писать ли сообщение в чат, когда игрок проголосовал за мини-игру.

При голосовании, сообщение в чат:
"[MG] Игрок (x) проголосовал за мини-игру (c). Введите !mg чтобы проголосовать за мини-игру."

Результаты собираются в течении 3-х раундов, после чего автоматически пишется в чат:
"[MG] Наибольшее количество голосов набрала мини-игра (a)."
(После этого "sm_start_vote_mg" стаёт на "0")

Если голосование не запущено, и игрок вводит !mg:
"[MG] Голосование не запущено. Прошлая игра: (d)."

Если голосование прошло, и в течении 10 минут игрок ввел !mg:
"[MG] Голосование не запущено. Прошлая игра: (d).
[MG] Последняя игра получившая наибольшее количество голосов: (e)."


Если голосование не запущено, и игрок вводит !mg и на данной карте ещё не играли в мини-игру:
"[MG] Голосование не запущено. "

[n] - количество голосов. (x) - ник проголосовавшего игрока. (c) - мини-игра, за которую проголосовали.
(a) - мини-игра, которая набрала наибольшее количество голосов. (d) - прошла мини-игра. (e) - последняя игра, получившая наибольшее количество голосов.
_____________________________________________________________________________
Желательно для CS:GO
Плагин будет полезен для тех, кто использует jwp_mg, jail_games и myjailbreak.
(У меня, например, только администраторы с флагом "p" могут запускать игры, этот плагин очень бы помог. )
Хух, написал. Вряд ли кто станет писать это бесплатно, ну а может кто и напишет, идею я свою дал.
Спасибо за внимание.
 
Последнее редактирование:

Rodion1488

Участник
Сообщения
151
Реакции
4
@AlmazON, ну... С MenuHandler'ами у меня вечная проблема. Всё ещё никак не вкурю, когда хандл Menu ещё существует, а когда нет.
Иногда обезопасиваюсь лишний раз, и получаю в логах "Invalid handle" в том месте, где он закрываться должен по идее.
В коде вправил.
Можно ли как то запретить,что б на пистолетке нельзя было брать?:)
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
@Rodion1488, первораунд на карте?
PHP:
#include <sourcemod>
#include <events>
#include <sdktools>

#pragma semicolon 1
#pragma newdecls required

public Plugin myinfo = {
    url         = "http://www.sourcemod.net/",
    name        = "Give Weapon",
    author      = "Kiske & AlmazON edition",
    version     = "1.0myself",
    description = "Give a weapon to a player from a command"
};

static const char g_szClassWeapons[][] = {
    "ak47", "aug", "bizon", "deagle", "decoy", "elite", "famas", "fiveseven", "flashbang", "g3sg1", "galilar", "glock", "hegrenade", "hkp2000", "incgrenade",
    "knife", "m249", "m4a1", "mac10", "mag7", "molotov", "mp7", "mp9", "negev", "nova", "p250", "p90", "sawedoff", "scar20", "sg556", "smokegrenade", "ssg08",
    "taser", "tec9", "ump45", "xm1014", "awp", "m4a1_silencer", "knifegg"
};

static const char g_szDrawWeapons[][] = {
    "AK-47", "AUG", "Бизон", "Desert Eagle", "Decoy", "Elite", "Famas", "Five Seven", "Световая граната", "G3SG1", "Galil-AR", "Glock", "Граната", "HKP2000", "IncGrenade",
    "Нож", "M249", "M4A1", "Mac10", "Mag7", "Коктейль Молотова", "MP7", "MP9", "Negev", "Nova", "P250", "P90", "SawedOff", "Scar20", "SG556", "Дымовая граната", "SSG08",
    "Тазер", "Tec 9", "UMP-45", "XM1014", "AWP", "M4A1 с глушителем", "Нож (???)"
};

int iRounds;

public void OnPluginStart() {
    RegAdminCmd("sm_weapon", smWeapon, ADMFLAG_CUSTOM3);
    HookEvent("round_end", Event_RoundEnd, EventHookMode_PostNoCopy);
}

public void OnMapStart() {
    iRounds = 0;
}

public void Event_RoundEnd(Event hEvent, const char[] szEventName, bool dontBroadcast) {
    iRounds++;
}

public Action smWeapon(int iClient, int iArgs) {
    if (iClient && iRounds) {
        Menu hMenu = new Menu(MenuHndl);
        hMenu.SetTitle("Выберите оружие:\n ");

        for (int i = 0; i < sizeof(g_szDrawWeapons); i++)
            hMenu.AddItem(g_szClassWeapons[i], g_szDrawWeapons[i], ITEMDRAW_DEFAULT);

        hMenu.Display(iClient, 0);
    } else {
        ReplyToCommand(iClient, "[SM] Use this command in-game!");
    }
    return Plugin_Handled;
}

public int MenuHndl(Menu menu, MenuAction action, int iClient, int iSelectedItem) {
    if (action == MenuAction_Select) {
        char szClassName[32];
        char szDisplayName[48];
        menu.GetItem(iSelectedItem, szClassName, sizeof(szClassName), _, szDisplayName, sizeof(szDisplayName));
        Format(szClassName, sizeof(szClassName), "weapon_%s", szClassName);

        if (GivePlayerItem(iClient, szClassName) == -1) {
            PrintToChat(iClient, "[SM] Оружие %s не поддерживается текущей игрой.", szDisplayName);
        }
    } else if (action == MenuAction_End) {
        delete menu;
    }
}
 

Rodion1488

Участник
Сообщения
151
Реакции
4
@Rodion1488, первораунд на карте?
PHP:
#include <sourcemod>
#include <events>
#include <sdktools>

#pragma semicolon 1
#pragma newdecls required

public Plugin myinfo = {
    url         = "http://www.sourcemod.net/",
    name        = "Give Weapon",
    author      = "Kiske & AlmazON edition",
    version     = "1.0myself",
    description = "Give a weapon to a player from a command"
};

static const char g_szClassWeapons[][] = {
    "ak47", "aug", "bizon", "deagle", "decoy", "elite", "famas", "fiveseven", "flashbang", "g3sg1", "galilar", "glock", "hegrenade", "hkp2000", "incgrenade",
    "knife", "m249", "m4a1", "mac10", "mag7", "molotov", "mp7", "mp9", "negev", "nova", "p250", "p90", "sawedoff", "scar20", "sg556", "smokegrenade", "ssg08",
    "taser", "tec9", "ump45", "xm1014", "awp", "m4a1_silencer", "knifegg"
};

static const char g_szDrawWeapons[][] = {
    "AK-47", "AUG", "Бизон", "Desert Eagle", "Decoy", "Elite", "Famas", "Five Seven", "Световая граната", "G3SG1", "Galil-AR", "Glock", "Граната", "HKP2000", "IncGrenade",
    "Нож", "M249", "M4A1", "Mac10", "Mag7", "Коктейль Молотова", "MP7", "MP9", "Negev", "Nova", "P250", "P90", "SawedOff", "Scar20", "SG556", "Дымовая граната", "SSG08",
    "Тазер", "Tec 9", "UMP-45", "XM1014", "AWP", "M4A1 с глушителем", "Нож (???)"
};

int iRounds;

public void OnPluginStart() {
    RegAdminCmd("sm_weapon", smWeapon, ADMFLAG_CUSTOM3);
    HookEvent("round_end", Event_RoundEnd, EventHookMode_PostNoCopy);
}

public void OnMapStart() {
    iRounds = 0;
}

public void Event_RoundEnd(Event hEvent, const char[] szEventName, bool dontBroadcast) {
    iRounds++;
}

public Action smWeapon(int iClient, int iArgs) {
    if (iClient && iRounds > 0) {
        Menu hMenu = new Menu(MenuHndl);
        hMenu.SetTitle("Выберите оружие:\n ");

        for (int i = 0; i < sizeof(g_szDrawWeapons); i++)
            hMenu.AddItem(g_szClassWeapons[i], g_szDrawWeapons[i], ITEMDRAW_DEFAULT);

        hMenu.Display(iClient, 0);
    } else {
        ReplyToCommand(iClient, "[SM] Use this command in-game!");
    }
    return Plugin_Handled;
}

public int MenuHndl(Menu menu, MenuAction action, int iClient, int iSelectedItem) {
    if (action == MenuAction_Select) {
        char szClassName[32];
        char szDisplayName[48];
        menu.GetItem(iSelectedItem, szClassName, sizeof(szClassName), _, szDisplayName, sizeof(szDisplayName));
        Format(szClassName, sizeof(szClassName), "weapon_%s", szClassName);

        if (GivePlayerItem(iClient, szClassName) == -1) {
            PrintToChat(iClient, "[SM] Оружие %s не поддерживается текущей игрой.", szDisplayName);
        }
    } else if (action == MenuAction_End) {
        delete menu;
    }
}
Да,то есть первый раз,что б нельзя было брать,ибо имболанс не много))
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
@Rodion1488, я скинул выше. Но он считает раунды с момента своего запуска. Можно заюзать CS_GetTeamScore() для получения кол-ва выйгранных раундов у каждой команды, но я не юзал ни разу функции из cstrike.inc, потому не уверен в правильности.
 

Shyt1990

Участник
Сообщения
3
Реакции
0
Можно ли сделать какой то плагин css v34 для дыма. Что бы дым был как на css steam или cs go?
 

[[[[KaZaK]]]]

Участник
Сообщения
107
Реакции
72
Думаю можно изменить спрайт дыма, тогда скорее всего получится
 

Shyt1990

Участник
Сообщения
3
Реакции
0
Последнее редактирование:

acik_traiks

Что нибудь напишем?)
Сообщения
770
Реакции
627
@Tony, IsClientInGame не проверил, да и наверно бы ошибку кинул еще
 
F

FBI

Люди есть ли у кого плагин, пример такой когда остаются 2 игрока, и оба отказались от ножевого поединка, нужно чтоб на них вешался маяк, так как на картах аим дигл или подобных где много ящиков, им трудно искать друг - друга!
Может кто написать подобное?
--- Добавлено позже ---
Так кто поможет собрать плагин?
 
Последнее редактирование модератором:
F

FBI

@AlmazON,

Описание плагина:
Когда зомби заразят всех людей на сервере, кроме одного, который уцелевший на нем появится маяк и зомби найдут его по маяку и по звуку!!

Настроки для сервера:
blt_time "25" - через какое время будет запущен маяк на последнего из выживших.

Его можно будет переделать под ксго, только чтоб работал на 2х последних игроках,а не на одного.
 

Вложения

  • beaconlasthuman.sp
    2.5 КБ · Просмотры: 4

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
чтоб работал на 2х последних игроках,а не на одного
оба отказались от ножевого поединка, нужно чтоб на них вешался маяк
Если писать отдельным плагином, то маяк получится сразу или с задержкой, независимо от того, что было нажато. А в ножевом поединке их тогда аж два будет: от нового плагина и собственный.
 
Сверху Снизу