Запрет c4 при отсутствии минимум x игроков

Yooki

Добрая душа
Сообщения
473
Реакции
169
Привет всем!
Такой вопрос уже здесь задавался и ответом был плагин, который сделал WS очень давно для css, и конечно сейчас он (плагин) не работает.
Если сейчас плагин, который запрещает брать c4/получать, если нет нужного кол-ва игроков?
 

suremiur

♂ overlay master ♂
Сообщения
538
Реакции
588
Плохо такое говорить, но попроси Грея ( @Grey83 ) написать. ;)
Он обычно сидит в теме написания плагинов. Хотя когда я его тэгнул, он сам вероятно сюда заглянет.

Прости, Грей, что скидываю тебе ещё больше работы!
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,560
Реакции
5,063
ну как-то так
PHP:
#include <sdkhooks>

static int iLimit = 5;    // минимальное количество игроков для возможности использовать c4

bool bLate;
int iNum;

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

public void OnPluginStart()
{
    if(!bLate) return;

    for(int i = 1; i <= MaxClients; i++) if(IsClientInGame(i))
    {
        iNum++;
        SDKHook(i, SDKHook_WeaponCanUse, OnWeaponCanUse);
    }
    bLate = false;
}

public void OnMapStart()
{
    if(!bLate) iNum = 0;
}

public void OnClientConnected(int client)
{
    iNum++;
    SDKHook(client, SDKHook_WeaponCanUse, OnWeaponCanUse);
}

public void OnClientDisconnect_Post(int client)
{
    iNum--;
}

public Action OnWeaponCanUse(int client, int wpn)
{
    if(iLimit <= iNum || !IsValidEdict(wpn) || GetClientTeam(client) != 2) return Plugin_Continue;

    static char class[16];
    GetEdictClassname(wpn, class, sizeof(class));
    if(StrContains(class, "weapon_c4", false)) return Plugin_Continue;
// здесь можно добавить вывод сообщения о невозможности использовать бомбу
    return Plugin_Handled;
}
 

Вложения

  • c4restrict.sp
    1.1 КБ · Просмотры: 5
  • c4restrict.smx
    4.2 КБ · Просмотры: 2

Yooki

Добрая душа
Сообщения
473
Реакции
169
ну как-то так
PHP:
#include <sdkhooks>

static int iLimit = 5;    // минимальное количество игроков для возможности использовать c4

bool bLate;
int iNum;

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

public void OnPluginStart()
{
    if(!bLate) return;

    for(int i = 1; i <= MaxClients; i++) if(IsClientInGame(i))
    {
        iNum++;
        SDKHook(i, SDKHook_WeaponCanUse, OnWeaponCanUse);
    }
    bLate = false;
}

public void OnMapStart()
{
    if(!bLate) iNum = 0;
}

public void OnClientConnected(int client)
{
    iNum++;
    SDKHook(client, SDKHook_WeaponCanUse, OnWeaponCanUse);
}

public void OnClientDisconnect_Post(int client)
{
    iNum--;
}

public Action OnWeaponCanUse(int client, int wpn)
{
    if(iLimit <= iNum || !IsValidEdict(wpn) || GetClientTeam(client) != 2) return Plugin_Continue;

    static char class[16];
    GetEdictClassname(wpn, class, sizeof(class));
    if(StrContains(class, "weapon_c4", false)) return Plugin_Continue;
// здесь можно добавить вывод сообщения о невозможности использовать бомбу
    return Plugin_Handled;
}
спасибо большое:)
--- Добавлено позже ---
ну как-то так
PHP:
#include <sdkhooks>

static int iLimit = 5;    // минимальное количество игроков для возможности использовать c4

bool bLate;
int iNum;

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

public void OnPluginStart()
{
    if(!bLate) return;

    for(int i = 1; i <= MaxClients; i++) if(IsClientInGame(i))
    {
        iNum++;
        SDKHook(i, SDKHook_WeaponCanUse, OnWeaponCanUse);
    }
    bLate = false;
}

public void OnMapStart()
{
    if(!bLate) iNum = 0;
}

public void OnClientConnected(int client)
{
    iNum++;
    SDKHook(client, SDKHook_WeaponCanUse, OnWeaponCanUse);
}

public void OnClientDisconnect_Post(int client)
{
    iNum--;
}

public Action OnWeaponCanUse(int client, int wpn)
{
    if(iLimit <= iNum || !IsValidEdict(wpn) || GetClientTeam(client) != 2) return Plugin_Continue;

    static char class[16];
    GetEdictClassname(wpn, class, sizeof(class));
    if(StrContains(class, "weapon_c4", false)) return Plugin_Continue;
// здесь можно добавить вывод сообщения о невозможности использовать бомбу
    return Plugin_Handled;
}
Только недавно заметил, что выдает ошибочку:
L 02/01/2018 - 17:15:01: Info (map "de_dust2") (file "errors_20180201.log")
L 02/01/2018 - 17:15:01: [SM] Exception reported: Entity 2 is invalid
L 02/01/2018 - 17:15:01: [SM] Blaming: c4restrict.smx
L 02/01/2018 - 17:15:01: [SM] Call stack trace:
L 02/01/2018 - 17:15:01: [SM] [0] SDKHook
L 02/01/2018 - 17:15:01: [SM] [1] Line 34, Z:\c4restrict.sp::OnClientConnected
L 02/01/2018 - 18:19:09: Error log file session closed.
 
Последнее редактирование:
Сверху Снизу