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

Kruzya

Raspberry Pi 4
Команда форума
Меценат
Сообщения
10,550
Реакции
8,726
@Nekro, она по сути глобальная, просто недоступна нигде, кроме этой функции.
 

RusJJ

Вкусно пахну
Сообщения
2,020
Реакции
666
про локальную можно на пальцах?
Выделена память для неё, которая не удаляется и сохраняется. Грубо говоря, если в команде объявить static int a = 0;, то a всегда равно 0. Но если при каком-либо условии ВНУТРИ блока команды (Action Cmd_Test(...) например) изменить a на 1, то в следующих случаях a = 1. Тяжело как-то объяснить xD
Так легче понять:
C-подобный:
public void OnPluginStart()
{
    RegConsoleCmd("sm_statictest", Command_StaticTest);
}

Action Command_StaticTest(int client, int args)
{
    static int a = 0;

    if(args > 0)
    {
        char arg1[8];
        GetCmdArg(1, arg1, sizeof(arg1));
        a = StringToInt(arg1);
        return Plugin_Handled;
    }

    ReplyToCommand(client, "Значение a = %d", a);
    return Plugin_Handled;
}
a будет как бы глобальной переменной. Просто доступна в одной области определения (память под неё не выделяется, используется та же самая).
 

SIRIUS

Поставщик мусорного контента 🚮
Сообщения
456
Реакции
213
C-подобный:
#define DELAY 9

public Action OnPlayerRunCmd(int iClient, int& iButtons, int& impulse, float vel[3], float angles[3], int& weapon, int& subtype, int& cmdnum, int& tickcount, int& seed, int mouse[2])
{
    static int iBtn[MAXPLAYERS + 1], iTime[MAXPLAYERS + 1];
  
    if(iButtons & IN_USE && !(iBtn[iClient] & IN_USE))
    {
        if(tickcount <= iTime[iClient] + DELAY)
        {
            //....
        }
      
        iTime[iClient] = tickcount;
    }
  
    iBtn[iClient] = iButtons;
}
Код не работает так как надо, срабатывает от первого нажатия, а не двойного.
 

zAntibot

Участник
Сообщения
81
Реакции
34
Требуется выводить сообщения с сайта в hud на сервере + проигрывать звук вместе с сообщением и картинку.

Контакты:
ЛС

Оплата:
Договорная (не могу оценить стоимость работы)
 

Troyanskaya

Участник
Сообщения
445
Реакции
30
Здравствуйте. Нужна помощь.
Подружить плагин allchat с ccp.
Проблема: Живые игроки видят сообщения мертвых игроков стандартные( не окрашеные)
Игра: css ob
Не бесплатно
 

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

Участник
Сообщения
263
Реакции
32
Всем вечер добрый,можно сделать так,чтоб админы не бегали с диглами?
А то обычные игроки без диглов,а у кого стоят флаги,то-есть админы,бегают с диглами.
Заранее благодарю
 

Вложения

  • no_deagles_awp_map.sp
    1 КБ · Просмотры: 7

Nekro

Терра инкогнита
Сообщения
1,873
Реакции
667
Всем вечер добрый,можно сделать так,чтоб админы не бегали с диглами?
А то обычные игроки без диглов,а у кого стоят флаги,то-есть админы,бегают с диглами.
Заранее благодарю
А точно именно этот плагин установлен? Там нет ничего о админах
 

Nekro

Терра инкогнита
Сообщения
1,873
Реакции
667
тоже ничего не нашёл,админам выдает что то другое диглы,такой же модуль от вип на авто закупку
Согласен, небось он отрабатывает, а потом какой-то плагин определённым игрокам (видимо с флагом) выдаёт диглы
 

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

Участник
Сообщения
263
Реакции
32
@-=|УЧЕНИК|=-, а с чего такая уверенность, что именно этот плагин? Не шарю...
Ну это же на запрет диглов,на авп карте,обычные игроки бегают без диглов,а админы с диглами,вот и подумал,что может можно,добавить какую то проверку,что и у кого флаги,тоже запрещал
 

Grey83

Ленивая и невнимательная жопа
Сообщения
4,828
Реакции
2,837
@-=|УЧЕНИК|=-, вот так любые диглы нельзя будет заюзать, кроме тех, у которых кастомный класс (да и то смотря как изменено его имя):
C-подобный:
#include <sdkhooks>
#include <sdktools_entinput>

bool bLate, bEnable;

public Plugin myinfo =
{
    name = "No deagles on awp_* maps"
}

public APLRes AskPluginLoad2(Handle myself, bool late, char[] error, int err_max)
{
    bLate = late;
}

public void OnMapStart()
{
    char map[128]
    GetCurrentMap(map, sizeof(map));
    GetMapDisplayName(map, map, sizeof(map));
    map[4] = 0;
    bEnable = !strcmp(map, "awp_", false);
    if(!bLate) return;

    bLate = false;
    if(!bEnable) return;

    char cls[16];
    for(int i = MaxClients+1, max = GetMaxEntities(); i <= max; i++) if(GetEntityClassname(i, cls, sizeof(cls)))
    {
        cls[13] = 0;
        OnEntityCreated(i, cls);
    }
}

public void OnEntityCreated(int ent, const char[] cls)
{
    if(bEnable && ent > MaxClients && !strcmp(cls, "weapon_deagle", false)) AcceptEntityInput(ent, "kill");
}

public void OnClientPutInServer(int client)
{
    if(!IsFakeClient(client)) SDKHook(client, SDKHook_WeaponEquip, OnEquip);
}

public Action OnEquip(int client, int wpn)
{
    static char cls[16];
    if(!bEnable || !IsValidEntity(wpn) || !GetEntityClassname(wpn, cls, sizeof(cls)) || strcmp(cls, "weapon_deagle", false))
        return Plugin_Continue;

    AcceptEntityInput(wpn, "kill");
    return Plugin_Handled;
}
 
Последнее редактирование:

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

Участник
Сообщения
263
Реакции
32
@-=|УЧЕНИК|=-, вот так любые диглы нельзя будет заюзать, кроме тех, у которых кастомный класс (да и то смотря как изменено его имя):
C-подобный:
#include <sdkhooks>
#include <sdktools_entinput>

bool bLate, bEnable;

public Plugin myinfo =
{
    name = "No deagles on awp_* maps"
}

public APLRes AskPluginLoad2(Handle myself, bool late, char[] error, int err_max)
{
    bLate = late;
}

public void OnMapStart()
{
    char map[128]
    GetCurrentMap(map, sizeof(map));
    GetMapDisplayName(map, map, sizeof(map));
    map[4] = 0;
    bEnable = !strcmp(map, "awp_", false);
    if(!bLate) return;

    bLate = false;
    if(!bEnable) return;

    char cls[16];
    for(int i = MaxClients+1, max = GetMaxEntities(); i <= max; i++) if(GetEntityClassname(i, cls, sizeof(cls)))
    {
        cls[13] = 0;
        OnEntityCreated(i, cls);
    }
}

public void OnEntityCreated(int ent, const char[] cls)
{
    if(bEnable && ent > MaxClients && !cls[13] && !strcmp(cls, "weapon_deagle", false)) AcceptEntityInput(ent, "kill");
}

public void OnClientPutInServer(int client)
{
    if(!IsFakeClient(client)) SDKHook(client, SDKHook_WeaponEquip, OnEquip);
}

public Action OnEquip(int client, int wpn)
{
    static char cls[16];
    if(!bEnable || !IsValidEntity(wpn) || !GetEntityClassname(wpn, cls, sizeof(cls)) || strcmp(cls, "weapon_deagle", false))
        return Plugin_Continue;

    AcceptEntityInput(wpn, "kill");
    return Plugin_Handled;
}
Да все четко,от души.
А то у меня с тем плагином,админы и випы гоняли с диглами)
Сообщения автоматически склеены:

Да все четко,от души.
А то у меня с тем плагином,админы и випы гоняли с диглами)
только ошибками сыпит чет)

L 03/31/2021 - 00:58:24: [SM] Call stack trace:
L 03/31/2021 - 00:58:24: [SM] [1] Line 38, C:\Users\dddd\Desktop\no_deagles_awp_map.sp::OnEntityCreated
L 03/31/2021 - 00:58:24: [SM] Exception reported: Invalid memory access
L 03/31/2021 - 00:58:24: [SM] Blaming: no_deagles_awp_map.smx
 
Последнее редактирование:

SIRIUS

Поставщик мусорного контента 🚮
Сообщения
456
Реакции
213
Да все четко,от души.
А то у меня с тем плагином,админы и випы гоняли с диглами)
Сообщения автоматически склеены:


только ошибками сыпит чет)

L 03/31/2021 - 00:58:24: [SM] Call stack trace:
L 03/31/2021 - 00:58:24: [SM] [1] Line 38, C:\Users\dddd\Desktop\no_deagles_awp_map.sp::OnEntityCreated
L 03/31/2021 - 00:58:24: [SM] Exception reported: Invalid memory access
L 03/31/2021 - 00:58:24: [SM] Blaming: no_deagles_awp_map.smx
В name = "No deagles on awp_* maps" - свое название карты вставь.
 

Grey83

Ленивая и невнимательная жопа
Сообщения
4,828
Реакции
2,837
@-=|УЧЕНИК|=-, убери в той строке && !cls[13]. Видимо встречаются энтити с именем класса короче 13 символов
Сообщения автоматически склеены:

В том сообщении я код поправил
 
Сверху