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

-=|УЧЕНИК|=-

вся жизнь,сплошной цирк.
Сообщения
876
Реакции
212
Установить 100
C-подобный:
public void OnPluginStart()
{
    RegConsoleCmd("sm_armur", Armor);
}

public Action Armor(int client, int args)
{
    SetEntProp(client, Prop_Send, "m_ArmorValue", 100);
    return Plugin_Handled;
}

Прибавить 100
C-подобный:
public void OnPluginStart()
{
    RegConsoleCmd("sm_armur", Armor);
}

public Action Armor(int client, int args)
{
    SetEntProp(client, Prop_Send, "m_ArmorValue", GetEntProp(client, Prop_Data, "m_ArmorValue")+100);
    return Plugin_Handled;
}
Подскажи еще пожалуйста,можно нет сделать так,чтоб команду можно было использовать только раз за раунд?
То-есть чтоб даже потом в чате не писало<что человек прописывает команду)
То-есть прописал один раз команду и все,потом только в следующим раунде можно.
Ну это не только к этому плагину относится,а ваше к любому где идут какие то прописи.
Просто бывает пишут без конца,такое как медик,вип или админ.
Вот хотелось узнать,можно нет как то блокировать команды один раз за раунд.
Чтоб не было лишнего спама от игроков в чате.
Погуглил,не че такого не нашел чтоб самому потестить)
 

Palonez

бб братки
Сообщения
3,035
Реакции
1,837
Подскажи еще пожалуйста,можно нет сделать так,чтоб команду можно было использовать только раз за раунд?
То-есть чтоб даже потом в чате не писало<что человек прописывает команду)
То-есть прописал один раз команду и все,потом только в следующим раунде можно.
Ну это не только к этому плагину относится,а ваше к любому где идут какие то прописи.
Просто бывает пишут без конца,такое как медик,вип или админ.
Вот хотелось узнать,можно нет как то блокировать команды один раз за раунд.
Чтоб не было лишнего спама от игроков в чате.
Погуглил,не че такого не нашел чтоб самому потестить)
Можно через HookUserMessage блокировать отображение, а через массив буллов запрещать выполнять повторно команду
Сообщения автоматически склеены:

Подскажи еще пожалуйста,можно нет сделать так,чтоб команду можно было использовать только раз за раунд?
То-есть чтоб даже потом в чате не писало<что человек прописывает команду)
То-есть прописал один раз команду и все,потом только в следующим раунде можно.
Ну это не только к этому плагину относится,а ваше к любому где идут какие то прописи.
Просто бывает пишут без конца,такое как медик,вип или админ.
Вот хотелось узнать,можно нет как то блокировать команды один раз за раунд.
Чтоб не было лишнего спама от игроков в чате.
Погуглил,не че такого не нашел чтоб самому потестить)
что-то типо того
C-подобный:
bool bActive[MAXPLAYERS+1];

public void OnClientPostAdminCheck(int client)
{
    bActive[client] = true;
}

public void OnClientDisconnect(int client)
{
    bActive[client] = true;
}

public void OnPluginStart()
{
    HookEvent("round_start", EVRS);
    
    RegConsoleCmd("sm_armur", Armor);
    
    HookUserMessage(GetUserMessageId("TextMsg"), HOOK, true);
}

public void EVRS(Event hEvent, const char[] sEvent, bool bdb)
{
    for(int i = 0; i <= MaxClients; i++)
        if(IsClientInGame(i) && !IsFakeClient(i))
            if(!bActive[i])
                bActive[i] = true;
}

public Action HOOK(UserMsg msg_id, Protobuf msg, const int[] players, int playersNum, bool reliable, bool init)
{
    char mes[256];
    msg.ReadString("params", mes, sizeof(mes));
    if(!StrEqual("sm_armur", mes) && !StrEqual("!armur", mes))
        return Plugin_Continue;

    for(int i = 0; i < playersNum; i++)
        if(IsClientInGame(players[i]) && !IsFakeClient(players[i]))
            if(!bActive[players[i]])
                return Plugin_Handled;
                
    return Plugin_Continue;
}

public Action Armor(int client, int args)
{
    SetEntProp(client, Prop_Send, "m_ArmorValue", 100);
    return Plugin_Handled;
}
 
Последнее редактирование:

alexmy

Участник
Сообщения
284
Реакции
13
Всем привет, парни поделитесь плагином. Чтоб через определённое время админку удалял у игрока
 

-=|УЧЕНИК|=-

вся жизнь,сплошной цирк.
Сообщения
876
Реакции
212
Можно через HookUserMessage блокировать отображение, а через массив буллов запрещать выполнять повторно команду
Сообщения автоматически склеены:


что-то типо того
C-подобный:
bool bActive[MAXPLAYERS+1];

public void OnClientPostAdminCheck(int client)
{
    bActive[client] = true;
}

public void OnClientDisconnect(int client)
{
    bActive[client] = true;
}

public void OnPluginStart()
{
    HookEvent("round_start", EVRS);
   
    RegConsoleCmd("sm_armur", Armor);
   
    HookUserMessage(GetUserMessageId("TextMsg"), HOOK, true);
}

public void EVRS(Event hEvent, const char[] sEvent, bool bdb)
{
    for(int i = 0; i <= MaxClients; i++)
        if(IsClientInGame(i) && !IsFakeClient(i))
            if(!bActive[i])
                bActive[i] = true;
}

public Action HOOK(UserMsg msg_id, Protobuf msg, const int[] players, int playersNum, bool reliable, bool init)
{
    char mes[256];
    msg.ReadString("params", mes, sizeof(mes));
    if(!StrEqual("sm_armur", mes) && !StrEqual("!armur", mes))
        return Plugin_Continue;

    for(int i = 0; i < playersNum; i++)
        if(IsClientInGame(players[i]) && !IsFakeClient(players[i]))
            if(!bActive[players[i]])
                return Plugin_Handled;
               
    return Plugin_Continue;
}

public Action Armor(int client, int args)
{
    SetEntProp(client, Prop_Send, "m_ArmorValue", 100);
    return Plugin_Handled;
}
Спасибо,проверю.
 

NightHunter

Участник
Сообщения
25
Реакции
2
Всем привет, парни поделитесь плагином. Чтоб через определённое время админку удалял у игрока
 

-=|УЧЕНИК|=-

вся жизнь,сплошной цирк.
Сообщения
876
Реакции
212
Ну скорее всего человек не использует это)
Вот и просит именно плагин)
 

danil253467

💘Italo-Disco & Neon One Love💘
Сообщения
90
Реакции
52
Всем привет, парни поделитесь плагином. Чтоб через определённое время админку удалял у игрока
 

alexmy

Участник
Сообщения
284
Реакции
13
Посущественней есть подобные плагины?
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
что-то типо того
скорее типа этого:
C-подобный:
#pragma semicolon 1
#pragma newdecls required

bool bUsed[MAXPLAYERS+1];

public void OnPluginStart()
{
    HookEvent("round_freeze_end", Event_Start, EventHookMode_PostNoCopy);

    RegConsoleCmd("sm_armor", Cmd_Armor);
}

public void OnClientDisconnect(int client)
{
    bUsed[client] = false;
}

public void Event_Start(Event event, const char[] name, bool dontBroadcast)
{
    for(int i = 1; i <= MaxClients; i++) bUsed[i] = false;
}

public Action Cmd_Armor(int client, int args)
{
    if(client && IsClientInGame(client) && GetClientTeam(client) > 1 && IsPlayerAlive(client) && !bUsed[client])
    {
        bUsed[client] = true;
        SetEntProp(client, Prop_Send, "m_ArmorValue", 100);
    }
    return Plugin_Handled;
}
 

Palonez

бб братки
Сообщения
3,035
Реакции
1,837
скорее типа этого:
C-подобный:
#pragma semicolon 1
#pragma newdecls required

bool bUsed[MAXPLAYERS+1];

public void OnPluginStart()
{
    HookEvent("round_freeze_end", Event_Start, EventHookMode_PostNoCopy);

    RegConsoleCmd("sm_armor", Cmd_Armor);
}

public void OnClientDisconnect(int client)
{
    bUsed[client] = false;
}

public void Event_Start(Event event, const char[] name, bool dontBroadcast)
{
    for(int i = 1; i <= MaxClients; i++) bUsed[i] = false;
}

public Action Cmd_Armor(int client, int args)
{
    if(client && IsClientInGame(client) && GetClientTeam(client) > 1 && IsPlayerAlive(client) && !bUsed[client])
    {
        bUsed[client] = true;
        SetEntProp(client, Prop_Send, "m_ArmorValue", 100);
    }
    return Plugin_Handled;
}
разве команда не выведется в чате, если ее хендлить? я прост не замечал особо. Кмк, она просто не выполнится, но отобразится
 
Последнее редактирование:

-=|УЧЕНИК|=-

вся жизнь,сплошной цирк.
Сообщения
876
Реакции
212
разве команда не выведется в чате, даже если ее хендлить? я прост не замечал особо. Кмк, она просто не выполнится, но отобразится
ну команду конечно можно хоть сколько вводить,она и будет в чате отображаться.
Добавил текст при вводе команды,то текст отображает один раз всего при пополнение брони.
 

Туник

Участник
Сообщения
1,281
Реакции
263
Помогите реализовать меню.
Надо сделать открытие и закрытие меню на кнопку G (drop)
PHP:
new const
    String:sCommand[][] = {"!knife", "!ws", "!gl"},
    String:sDisplay[][] = {"Выбрать нож", "Выбрать скин", "Выбрать перчи"};

public Plugin:myinfo =
{
    name = "Menu Basic Commands",
    author = "AlmazON",
    description = "Меню Основных Команд",
    version = "1.0.0",
    url = "http://www.hlmod.ru"
}

new Handle:hMBC;
public OnPluginStart()
{
    SetMenuTitle(hMBC=CreateMenu(MC), "Меню игрока:\n \n");
    new i;
    do AddMenuItem(hMBC, "", sDisplay[i], sCommand[i][0] ? ITEMDRAW_DEFAULT:ITEMDRAW_DISABLED);
    while(++i<sizeof(sDisplay));
}

public Action:OnClientSayCommand(C, const String:N[], const String:T[])
{
    if(strcmp(T[1], "menu",false) && strcmp(T[1], "меню")) return Plugin_Continue;
    DisplayMenu(hMBC, C,60);
    return Plugin_Handled;
}

public MC(Handle:M, MenuAction:A, C, O) if(A==MenuAction_Select) FakeClientCommand(C, "say \"%s\"", sCommand[O]);

public OnClientPostAdminCheck(client)
{
    if (!IsFakeClient(client)) FakeClientCommand(client, "");
}
 

Palonez

бб братки
Сообщения
3,035
Реакции
1,837
Помогите реализовать меню.
Надо сделать открытие и закрытие меню на кнопку G (drop)
PHP:
new const
    String:sCommand[][] = {"!knife", "!ws", "!gl"},
    String:sDisplay[][] = {"Выбрать нож", "Выбрать скин", "Выбрать перчи"};

public Plugin:myinfo =
{
    name = "Menu Basic Commands",
    author = "AlmazON",
    description = "Меню Основных Команд",
    version = "1.0.0",
    url = "http://www.hlmod.ru"
}

new Handle:hMBC;
public OnPluginStart()
{
    SetMenuTitle(hMBC=CreateMenu(MC), "Меню игрока:\n \n");
    new i;
    do AddMenuItem(hMBC, "", sDisplay[i], sCommand[i][0] ? ITEMDRAW_DEFAULT:ITEMDRAW_DISABLED);
    while(++i<sizeof(sDisplay));
}

public Action:OnClientSayCommand(C, const String:N[], const String:T[])
{
    if(strcmp(T[1], "menu",false) && strcmp(T[1], "меню")) return Plugin_Continue;
    DisplayMenu(hMBC, C,60);
    return Plugin_Handled;
}

public MC(Handle:M, MenuAction:A, C, O) if(A==MenuAction_Select) FakeClientCommand(C, "say \"%s\"", sCommand[O]);

public OnClientPostAdminCheck(client)
{
    if (!IsFakeClient(client)) FakeClientCommand(client, "");
}
в 100% случае это не будет работать, т.к. нельзя привязывать отдельные кнопки, а только те, на который стоят дефолтные привязки. Но человек может менять эту привязку
 

Туник

Участник
Сообщения
1,281
Реакции
263
в 100% случае это не будет работать, т.к. нельзя привязывать отдельные кнопки, а только те, на который стоят дефолтные привязки. Но человек может менять эту привязку
// C:\Users\Desktop\Menu.sp(2) : error 001: expected token: "-identifier-", but found "new"
// C:\Users\Desktop\Menu.sp(2) : warning 203: symbol is never used: "__unknown__"
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
@Туник, попробуй так (не уверен что эта команда отлавливается):
C-подобный:
#pragma semicolon 1
#pragma newdecls required

static const char
    CMDS[][][]    =
{
    {"!knife",    "Выбрать нож"},
    {"!ws",        "Выбрать скин"},
    {"!gl",        "Выбрать перчатки"}
};

Menu hMenu;

public void OnPluginStart()
{
    AddCommandListener(Cmd_Drop, "drop");

    hMenu = new Menu(Handler_Menu);
    hMenu.SetTitle("Меню игрока:\n ");
    int i = -1;
    while(++i < sizeof(CMDS)) hMenu.AddItem("", CMDS[i][1]);
}

public Action Cmd_Drop(int client, const char[] cmd, int argc)
{
    if(client && IsClientInGame(client)) hMenu.Display(client, MENU_TIME_FOREVER);
    return Plugin_Continue;
}

public int Handler_Menu(Menu menu, MenuAction action, int client, int param)
{
    if(action == MenuAction_Select) FakeClientCommand(client, "say_team \"%s\"", CMDS[param][0]);
    return 0;
}
 

Туник

Участник
Сообщения
1,281
Реакции
263
@Туник, попробуй так (не уверен что эта команда отлавливается):
C-подобный:
#pragma semicolon 1
#pragma newdecls required

static const char
    CMDS[][][]    =
{
    {"!knife",    "Выбрать нож"},
    {"!ws",        "Выбрать скин"},
    {"!gl",        "Выбрать перчатки"}
};

Menu hMenu;

public void OnPluginStart()
{
    AddCommandListener(Cmd_Drop, "drop");

    hMenu = new Menu(Handler_Menu);
    hMenu.SetTitle("Меню игрока:\n ");
    int i = -1;
    while(++i < sizeof(CMDS)) hMenu.AddItem("", CMDS[i][1]);
}

public Action Cmd_Drop(int client, const char[] cmd, int argc)
{
    if(client && IsClientInGame(client)) hMenu.Display(client, MENU_TIME_FOREVER);
    return Plugin_Continue;
}

public int Handler_Menu(Menu menu, MenuAction action, int client, int param)
{
    if(action == MenuAction_Select) FakeClientCommand(client, "say_team \"%s\"", CMDS[param][0]);
    return 0;
}
Выкидывает оружие, при повторном нажатии не закрывает меню, можно реализовать допусти нажал на G 1 раз открылось меню, оружие можно выкинуть если 2 раза нажимаешь на G.
 
Сверху Снизу