Помогите со скриптом запрета скорострелок

neon060794

Участник
Сообщения
12
Реакции
1
Доброго времени суток, вот скрипт запрета скорострелок, строчки, выделенные красным, пишутся в чат, когда удаляются скорострелки с карты, но например на карте fy_pool_day_reloaded всего 4 ентити-скорострелок, но в чат пишется аж 8 строк этих сообщений, хотя "kill" срабатывает всего 4 раза, можно как-то переписать, чтобы при удалении писалось всего один раз - "Все скорострелки удалены.", причем при срабатывании 'AcceptEntityInput(weapon, "kill");'?

#pragma semicolon 1
#include <sdktools>

public OnMapStart()
{
HookEvent("round_start", Event_RoundStart, EventHookMode_PostNoCopy);
PrecacheSound("buttons/weapon_cant_buy.wav", true);​
}

public Action:Event_RoundStart(Handle:event, const String:name[], bool:dontBroadcast)
{
new weapon = -1;
while((weapon = FindEntityByClassname(weapon, "weapon_g3sg1")) != -1)
{
AcceptEntityInput(weapon, "kill");
PrintToChatAll("\x04[\x03AntiNOOB\x04] \x01Скорострельная винтовка\x03G3SG1 \x01удалена!");
}
while((weapon = FindEntityByClassname(weapon, "weapon_sg550")) != -1)
{
AcceptEntityInput(weapon, "kill");
PrintToChatAll("\x04[\x03AntiNOOB\x04] \x01Скорострельная винтовка\x03SG550 \x01удалена!");
}​
}

public Action:CS_OnBuyCommand(client, const String:weapon[])
{
if (strcmp(weapon, "g3sg1") == 0 || strcmp(weapon, "sg550") == 0)
{
new String:name[32];
GetClientName (client, name, sizeof(name));
PrintToChatAll("\x04[\x03AntiNOOB\x04] %s \x01хотел купить \x03скорострельную винтовку\x01! На нашем сервере «скорострелки» \x03ЗАПРЕЩЕНЫ\x01!", name);
EmitSoundToClient (client, "buttons/weapon_cant_buy.wav");
return Plugin_Handled;
}
return Plugin_Continue;​
}
 
Последнее редактирование:

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
как-то так
PHP:
#pragma semicolon 1
#include <sdktools>

public OnMapStart()
{
    HookEvent("round_start", Event_RoundStart, EventHookMode_PostNoCopy);
    PrecacheSound("buttons/weapon_cant_buy.wav", true);
}

public Action:Event_RoundStart(Handle:event, const String:name[], bool:dontBroadcast)
{
    new weapon = MaxClients + 1, num;
    while((weapon = FindEntityByClassname(weapon, "weapon_g3sg1")) != -1)
    {
        if(AcceptEntityInput(weapon, "kill")) num++;
    }
    weapon = MaxClients + 1;
    while((weapon = FindEntityByClassname(weapon, "weapon_sg550")) != -1)
    {
        if(AcceptEntityInput(weapon, "kill")) num++;
    }

    if(num) PrintToChatAll("\x04[\x03AntiNOOB\x04] \x01Удалено \x03%i \x01скорострельных винтовок!", num);
}

public Action:CS_OnBuyCommand(client, const String:weapon[])
{
    if (0 < client <= MaxClients && IsClientConnected(client) && (!strcmp(weapon, "g3sg1") || !strcmp(weapon, "sg550")))
    {
        PrintToChatAll("\x04[\x03AntiNOOB\x04] %N \x01хотел купить \x03скорострельную винтовку\x01! На нашем сервере «скорострелки» \x03ЗАПРЕЩЕНЫ\x01!", client);
        EmitSoundToClient (client, "buttons/weapon_cant_buy.wav");
        return Plugin_Handled;
    }
    return Plugin_Continue;
}
 

neon060794

Участник
Сообщения
12
Реакции
1
как-то так
PHP:
#pragma semicolon 1
#include <sdktools>

public OnMapStart()
{
    HookEvent("round_start", Event_RoundStart, EventHookMode_PostNoCopy);
    PrecacheSound("buttons/weapon_cant_buy.wav", true);
}

public Action:Event_RoundStart(Handle:event, const String:name[], bool:dontBroadcast)
{
    new weapon = MaxClients + 1, num;
    while((weapon = FindEntityByClassname(weapon, "weapon_g3sg1")) != -1)
    {
        if(AcceptEntityInput(weapon, "kill")) num++;
    }
    weapon = MaxClients + 1;
    while((weapon = FindEntityByClassname(weapon, "weapon_sg550")) != -1)
    {
        if(AcceptEntityInput(weapon, "kill")) num++;
    }

    if(num) PrintToChatAll("\x04[\x03AntiNOOB\x04] \x01Удалено \x03%i \x01скорострельных винтовок!", num);
}

public Action:CS_OnBuyCommand(client, const String:weapon[])
{
    if (0 < client <= MaxClients && IsClientConnected(client) && (!strcmp(weapon, "g3sg1") || !strcmp(weapon, "sg550")))
    {
        PrintToChatAll("\x04[\x03AntiNOOB\x04] %N \x01хотел купить \x03скорострельную винтовку\x01! На нашем сервере «скорострелки» \x03ЗАПРЕЩЕНЫ\x01!", client);
        EmitSoundToClient (client, "buttons/weapon_cant_buy.wav");
        return Plugin_Handled;
    }
    return Plugin_Continue;
}

Огромное спасибо)
--- Добавлено позже ---
как-то так
PHP:
#pragma semicolon 1
#include <sdktools>

public OnMapStart()
{
    HookEvent("round_start", Event_RoundStart, EventHookMode_PostNoCopy);
    PrecacheSound("buttons/weapon_cant_buy.wav", true);
}

public Action:Event_RoundStart(Handle:event, const String:name[], bool:dontBroadcast)
{
    new weapon = MaxClients + 1, num;
    while((weapon = FindEntityByClassname(weapon, "weapon_g3sg1")) != -1)
    {
        if(AcceptEntityInput(weapon, "kill")) num++;
    }
    weapon = MaxClients + 1;
    while((weapon = FindEntityByClassname(weapon, "weapon_sg550")) != -1)
    {
        if(AcceptEntityInput(weapon, "kill")) num++;
    }

    if(num) PrintToChatAll("\x04[\x03AntiNOOB\x04] \x01Удалено \x03%i \x01скорострельных винтовок!", num);
}

public Action:CS_OnBuyCommand(client, const String:weapon[])
{
    if (0 < client <= MaxClients && IsClientConnected(client) && (!strcmp(weapon, "g3sg1") || !strcmp(weapon, "sg550")))
    {
        PrintToChatAll("\x04[\x03AntiNOOB\x04] %N \x01хотел купить \x03скорострельную винтовку\x01! На нашем сервере «скорострелки» \x03ЗАПРЕЩЕНЫ\x01!", client);
        EmitSoundToClient (client, "buttons/weapon_cant_buy.wav");
        return Plugin_Handled;
    }
    return Plugin_Continue;
}

Немного доработал, ото два раза писалось - Удалено 4 скорострельных винтовки!:
--- Добавлено позже ---
как-то так
PHP:
#pragma semicolon 1
#include <sdktools>

public OnMapStart()
{
    HookEvent("round_start", Event_RoundStart, EventHookMode_PostNoCopy);
    PrecacheSound("buttons/weapon_cant_buy.wav", true);
}

public Action:Event_RoundStart(Handle:event, const String:name[], bool:dontBroadcast)
{
    new weapon = MaxClients + 1, num;
    while((weapon = FindEntityByClassname(weapon, "weapon_g3sg1")) != -1)
    {
        if(AcceptEntityInput(weapon, "kill")) num++;
    }
    weapon = MaxClients + 1;
    while((weapon = FindEntityByClassname(weapon, "weapon_sg550")) != -1)
    {
        if(AcceptEntityInput(weapon, "kill")) num++;
    }

    if(num) PrintToChatAll("\x04[\x03AntiNOOB\x04] \x01Удалено \x03%i \x01скорострельных винтовок!", num);
}

public Action:CS_OnBuyCommand(client, const String:weapon[])
{
    if (0 < client <= MaxClients && IsClientConnected(client) && (!strcmp(weapon, "g3sg1") || !strcmp(weapon, "sg550")))
    {
        PrintToChatAll("\x04[\x03AntiNOOB\x04] %N \x01хотел купить \x03скорострельную винтовку\x01! На нашем сервере «скорострелки» \x03ЗАПРЕЩЕНЫ\x01!", client);
        EmitSoundToClient (client, "buttons/weapon_cant_buy.wav");
        return Plugin_Handled;
    }
    return Plugin_Continue;
}

Ааа, вот в чем дело - число надписей в чате увеличиваются в 2 раза после смены карты, странно) ну да ладно, спасибо)
 

Вложения

  • no_g3sg1_and_sg550.sp
    1.5 КБ · Просмотры: 16
Последнее редактирование:

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
@neon060794, видимо событие 2 раза подряд вызывается и каждый раз создаются эти винтовки на карте

А для чего таймер делал-то? О_о
Вот так можно же:
PHP:
#pragma semicolon 1

#include <sdktools>

public OnMapStart()
{
    HookEvent("round_start", Event_RoundStart, EventHookMode_PostNoCopy);
    PrecacheSound("buttons/weapon_cant_buy.wav", true);
}

public Action:Event_RoundStart(Handle:event, const String:name[], bool:dontBroadcast)
{
    new weapon = MaxClients + 1, num;
    while((weapon = FindEntityByClassname(weapon, "weapon_g3sg1")) != -1)
    {
        if(AcceptEntityInput(weapon, "kill")) num++;
    }
    if(num) PrintToChatAll("\x04[\x03AntiNOOB\x04] \x01Удалено \x03%i \x01скорострельных винтовок \x03G3SG1\x01!", num);
    weapon = MaxClients + 1;
    num = 0;
    while((weapon = FindEntityByClassname(weapon, "weapon_sg550")) != -1)
    {
        if(AcceptEntityInput(weapon, "kill")) num++;
    }
    if(num) PrintToChatAll("\x04[\x03AntiNOOB\x04] \x01Удалено \x03%i \x01скорострельных винтовок \x03SG550\x01!", num);
}

public Action:CS_OnBuyCommand(client, const String:weapon[])
{
    if (0 < client <= MaxClients && IsClientConnected(client) && (!strcmp(weapon, "g3sg1") || !strcmp(weapon, "sg550")))
    {
        PrintToChatAll("\x04[\x03AntiNOOB\x04] %N \x01хотел купить \x03скорострельную винтовку\x01! На нашем сервере «скорострелки» \x03ЗАПРЕЩЕНЫ\x01!", client);
        EmitSoundToClient (client, "buttons/weapon_cant_buy.wav");
        return Plugin_Handled;
    }
    return Plugin_Continue;
}
 
Последнее редактирование:

neon060794

Участник
Сообщения
12
Реакции
1
как-то так
PHP:
#pragma semicolon 1
#include <sdktools>

public OnMapStart()
{
    HookEvent("round_start", Event_RoundStart, EventHookMode_PostNoCopy);
    PrecacheSound("buttons/weapon_cant_buy.wav", true);
}

public Action:Event_RoundStart(Handle:event, const String:name[], bool:dontBroadcast)
{
    new weapon = MaxClients + 1, num;
    while((weapon = FindEntityByClassname(weapon, "weapon_g3sg1")) != -1)
    {
        if(AcceptEntityInput(weapon, "kill")) num++;
    }
    weapon = MaxClients + 1;
    while((weapon = FindEntityByClassname(weapon, "weapon_sg550")) != -1)
    {
        if(AcceptEntityInput(weapon, "kill")) num++;
    }

    if(num) PrintToChatAll("\x04[\x03AntiNOOB\x04] \x01Удалено \x03%i \x01скорострельных винтовок!", num);
}

public Action:CS_OnBuyCommand(client, const String:weapon[])
{
    if (0 < client <= MaxClients && IsClientConnected(client) && (!strcmp(weapon, "g3sg1") || !strcmp(weapon, "sg550")))
    {
        PrintToChatAll("\x04[\x03AntiNOOB\x04] %N \x01хотел купить \x03скорострельную винтовку\x01! На нашем сервере «скорострелки» \x03ЗАПРЕЩЕНЫ\x01!", client);
        EmitSoundToClient (client, "buttons/weapon_cant_buy.wav");
        return Plugin_Handled;
    }
    return Plugin_Continue;
}

Немного доработал, ото два раза писалось уда:
Огромное спасибо)
--- Добавлено позже ---


Немного доработал, ото два раза писалось - Удалено 4 скорострельных винтовки!:

Число надписей в чате увеличиваются в 3 раза после смены карты, странно) ну да ладно, спасибо)
@neon060794, видимо событие 2 раза подряд вызывается и каждый раз создаются эти винтовки на карте

А для чего таймер делал-то? О_о
Вот так можно же:
PHP:
#pragma semicolon 1

#include <sdktools>

public OnMapStart()
{
    HookEvent("round_start", Event_RoundStart, EventHookMode_PostNoCopy);
    PrecacheSound("buttons/weapon_cant_buy.wav", true);
}

public Action:Event_RoundStart(Handle:event, const String:name[], bool:dontBroadcast)
{
    new weapon = MaxClients + 1, num;
    while((weapon = FindEntityByClassname(weapon, "weapon_g3sg1")) != -1)
    {
        if(AcceptEntityInput(weapon, "kill")) num++;
    }
    if(num) PrintToChatAll("\x04[\x03AntiNOOB\x04] \x01Удалено \x03%i \x01скорострельных винтовок \x03G3SG1\x01!", num);
    weapon = MaxClients + 1;
    num = 0;
    while((weapon = FindEntityByClassname(weapon, "weapon_sg550")) != -1)
    {
        if(AcceptEntityInput(weapon, "kill")) num++;
    }
    if(num) PrintToChatAll("\x04[\x03AntiNOOB\x04] \x01Удалено \x03%i \x01скорострельных винтовок \x03SG550\x01!", num);
}

public Action:CS_OnBuyCommand(client, const String:weapon[])
{
    if (0 < client <= MaxClients && IsClientConnected(client) && (!strcmp(weapon, "g3sg1") || !strcmp(weapon, "sg550")))
    {
        PrintToChatAll("\x04[\x03AntiNOOB\x04] %N \x01хотел купить \x03скорострельную винтовку\x01! На нашем сервере «скорострелки» \x03ЗАПРЕЩЕНЫ\x01!", client);
        EmitSoundToClient (client, "buttons/weapon_cant_buy.wav");
        return Plugin_Handled;
    }
    return Plugin_Continue;
}

Ну да :D, заморочился что-то, да лучше уж без надписей тогда оставить килятор, спасибо за оказанную помощь ;)
 

Primo

типа серьёзный тип
Сообщения
1,532
Реакции
759
А то, что вы делаете хук в OnMapStart, а не в OnPluginStart вас никак не смущает?
 
Сверху Снизу