уведомление о броске гранаты

Hollya

❤ GIRL SCRIPTER ❤
Сообщения
128
Реакции
32
Здрасте, помогите с плагином)
Мне нужно сделать чтобы он еще показывал команду кто бросает гранату..
При использование PrintToChatAll в чате уведомление показывается Два раза, как это исправить?
И как добавить доп.проверку КТ или Т бросает, чтобы тоже в чат писало где ник.

C-подобный:
#include <sdkhooks>

new const String:StandartClassname[][] =
{
    "flashbang",
    "hegrenade",
    "smokegrenade",
    "incgrenade",
    "molotov"
};

new const String:TranslateClassname[][] =
{
    "Флешка!",
    "Боевая!",
    "Дымовую!",
    "Ложная!",
    "Молотов!"
};


public OnEntityCreated(entity, const String:classname[])
{
    if (StrContains(classname, "_projectile") != -1 && entity != -1) SDKHook(entity, SDKHook_SpawnPost, SpawnGrenades);
}

public SpawnGrenades(entity)
{
    if (entity != -1)
    {
        new client = GetEntPropEnt(entity, Prop_Send, "m_hOwnerEntity");
        if (0 < client <= MaxClients)
        {
            decl String:classname[50], i;
            GetEdictClassname(entity, classname, sizeof(classname));
            classname[strlen(classname) - 11] = 0;
            for (i = 0; i < sizeof(TranslateClassname); ++i)
            {
                if (ReplaceStringEx(classname, sizeof(classname), StandartClassname[i], TranslateClassname[i]) != -1) break;
            }
            for (i = 1; i <= MaxClients; ++i)
            {
                if (IsClientInGame(i))
                PrintToChatAll("[T/CT] %N Кинул %s", client, classname);
            }
        }
    }
}
 

Hollya

❤ GIRL SCRIPTER ❤
Сообщения
128
Реакции
32
Зачем под циклом PrintToChatAll? Он отправляет сообщение ВСЕМ
C-подобный:
public SpawnGrenades(entity)
{
    if (entity != -1)
    {
        new client = GetEntPropEnt(entity, Prop_Send, "m_hOwnerEntity");
        if (0 < client <= MaxClients)
        {
            decl String:classname[50], i;
            GetEdictClassname(entity, classname, sizeof(classname));
            classname[strlen(classname) - 11] = 0;
            for (i = 0; i < sizeof(TranslateClassname); ++i)
            {
                if (ReplaceStringEx(classname, sizeof(classname), StandartClassname[i], TranslateClassname[i]) != -1) break;
            }
            {
                PrintToChatAll("[T/CT] %N Кинул %s", client, classname);
            }
        }
    }
}
Вот та работает. но не получается сделать вывод команды кто кидает.
 

inklesspen

Не пишу модули под LSD :с
Сообщения
1,775
Реакции
967
{ PrintToChatAll("[T/CT] %N Кинул %s", client, classname); }
...
Что за скобки и зачем?
Тебе лишь его команде надо отобразить?
PHP:
int iTeam = GetClientTeam(client)
for(int i = 1;i<=MaxClients;i++)
{
if(IsClientInGame(i) && GetClientTeam(i) == iTeam) PrintToChat(i, "HREN %N thrown a %s", client, classname)
}
 

Someone

Участник
Сообщения
1,933
Реакции
1,653
Здрасте, помогите с плагином)
Мне нужно сделать чтобы он еще показывал команду кто бросает гранату..
При использование PrintToChatAll в чате уведомление показывается Два раза, как это исправить?
И как добавить доп.проверку КТ или Т бросает, чтобы тоже в чат писало где ник.

C-подобный:
#include <sdkhooks>

new const String:StandartClassname[][] =
{
    "flashbang",
    "hegrenade",
    "smokegrenade",
    "incgrenade",
    "molotov"
};

new const String:TranslateClassname[][] =
{
    "Флешка!",
    "Боевая!",
    "Дымовую!",
    "Ложная!",
    "Молотов!"
};


public OnEntityCreated(entity, const String:classname[])
{
    if (StrContains(classname, "_projectile") != -1 && entity != -1) SDKHook(entity, SDKHook_SpawnPost, SpawnGrenades);
}

public SpawnGrenades(entity)
{
    if (entity != -1)
    {
        new client = GetEntPropEnt(entity, Prop_Send, "m_hOwnerEntity");
        if (0 < client <= MaxClients)
        {
            decl String:classname[50], i;
            GetEdictClassname(entity, classname, sizeof(classname));
            classname[strlen(classname) - 11] = 0;
            for (i = 0; i < sizeof(TranslateClassname); ++i)
            {
                if (ReplaceStringEx(classname, sizeof(classname), StandartClassname[i], TranslateClassname[i]) != -1) break;
            }
            for (i = 1; i <= MaxClients; ++i)
            {
                if (IsClientInGame(i))
                PrintToChatAll("[T/CT] %N Кинул %s", client, classname);
            }
        }
    }
}

Как вариант.

PHP:
public void OnPluginStart()
{
    LoadTranslations("grenades.phrases");
}

public void OnEntityCreated(int iEnt, const char[] classname)
{
    if (StrContains(classname, "_projectile") != -1)
    {
        int client;
        if ((client = GetEntPropEnt(iEnt, Prop_Send, "m_hOwnerEntity")) > 0 && client <= MaxClients)
        {
            PrintToChatAll("[%s] %N кинул %t!", GetClientTeam(client) == 3 ? "CT":"T", classname);
        }
    }
}


C-подобный:
"Phrases"
{
    "flashbang_projectile"
    {
        "ru"        "флешку"
    }
 
    "hegrenade_projectile"
    {
        "ru"        "осколочную"
    }
 
    "smokegrenade_projectile"
    {
        "ru"        "дымовую"
    }
 
    "incgrenade_projectile"
    {
        "ru"        "зажигателюную"
    }
 
    "molotov_projectile"
    {
        "ru"        "молотов"
    }
}
 

Hollya

❤ GIRL SCRIPTER ❤
Сообщения
128
Реакции
32
Как вариант.

PHP:
public void OnPluginStart()
{
    LoadTranslations("grenades.phrases");
}

public void OnEntityCreated(int iEnt, const char[] classname)
{
    if (StrContains(classname, "_projectile") != -1)
    {
        int client;
        if ((client = GetEntPropEnt(iEnt, Prop_Send, "m_hOwnerEntity")) > 0 && client <= MaxClients)
        {
            PrintToChatAll("[%s] %N кинул %t!", GetClientTeam(client) == 3 ? "CT":"T", classname);
        }
    }
}


C-подобный:
"Phrases"
{
    "flashbang_projectile"
    {
        "ru"        "флешку"
    }
 
    "hegrenade_projectile"
    {
        "ru"        "осколочную"
    }
 
    "smokegrenade_projectile"
    {
        "ru"        "дымовую"
    }
 
    "incgrenade_projectile"
    {
        "ru"        "зажигателюную"
    }
 
    "molotov_projectile"
    {
        "ru"        "молотов"
    }
}
А можно без файла перевода?
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,569
Реакции
5,071
А можно без файла перевода?
только если использовать 1 язык
PHP:
static const char sGrenadeName[][] = {
    "ложную гранату",        // Decoy
    "светошумовую гранату",    // FlashBang
    "осколочную гранату",    // High Explosive Fragmentation
    "зажигательную гранату",// Incendary
    "коктейль Молотова",    // Molotov
    "дымовую гранату",        // Smoke
    "тактическую гранату"    // Tactical Awareness
};

public void OnEntityCreated(int ent, const char[] class)
{
    if(StrContains(class, "_projectile") < 0)
        return;

    static int client;
    if(!(0 < (client = GetEntPropEnt(ent, Prop_Send, "m_hOwnerEntity")) <= MaxClients) || !IsClientInGame(client))
        return;

    static int team;
    if((team = GetClientTeam(client)) < 2)
        return;

    static int id;
    switch(class[0])
    {
        case 'd':    id = 0;
        case 'f':    id = 1;
        case 'h':    id = 2;
        case 'i':    id = 3;
        case 'm':    id = 4;
        case 's':    id = 5;
        case 't':    id = 6;
        default:    return;
    }

    static int i;
    for(i = 1; i <= MaxClients; i++)
    {
        if(!IsClientInGame(i) || GetClientTeam(i) != team) continue;
        PrintToChat(i, "%N кинул %s!", client, sGrenadeName[id]);
    }
}
 

Вложения

  • grenade_notification.sp
    1.2 КБ · Просмотры: 9
  • grenade_notification.smx
    4.1 КБ · Просмотры: 7
Последнее редактирование:

Hollya

❤ GIRL SCRIPTER ❤
Сообщения
128
Реакции
32
только если использовать 1 язык
PHP:
static const char sGrenadeName[][] = {
    "ложную гранату",        // Decoy
    "светошумовую гранату",    // FlashBang
    "осколочную гранату",    // High Explosive Fragmentation
    "зажигательную гранату",// Incendary
    "коктейль Молотова",    // Molotov
    "дымовую гранату",        // Smoke
    "тактическую гранату"    // Tactical Awareness
};

public void OnEntityCreated(int ent, const char[] class)
{
    if(StrContains(class, "_projectile") < 0)
        return;

    static int client;
    if(!(0 < (client = GetEntPropEnt(ent, Prop_Send, "m_hOwnerEntity")) <= MaxClients) || !IsClientInGame(client))
        return;

    static int team;
    if((team = GetClientTeam(client)) < 2)
        return;

    static int id;
    switch(class[0])
    {
        case 'd':    id = 0;
        case 'f':    id = 1;
        case 'h':    id = 2;
        case 'i':    id = 3;
        case 'm':    id = 4;
        case 's':    id = 5;
        case 't':    id = 6;
        default:    return;
    }

    static int i;
    for(i = 1; i <= MaxClients; i++)
    {
        if(!IsClientInGame(i) || GetClientTeam(i) != team) continue;
        PrintToChat(i, "%N кинул %s!", client, sGrenadeName[id]);
    }
}
Спасибо.
 
Сверху Снизу