[JAIL]Указание причины при убийстве. LOCAL CHAT

ExtaSpeed

Гл.админ BestGames.RU
Сообщения
27
Реакции
2
Хочешь, чтобы правили за тебя - плати. А "Дарёному коню в зубы не заглядывают!". Оффтоп
ExtaSpeed, всё, второй твой плагин теперь на халяву писать не хочу. :-D

А я тебе предлагал деньги !) А тебе же всё лень :lol:
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
Оффтоп
Вообще, версия
говорит о том, что это скорее сырой релиз ("нечто" после beta'ки). Написано относительно просто и "по-быстрому". Оффтоп
 

Primo

типа серьёзный тип
Сообщения
1,532
Реакции
759
Как минимум 2: выпадение меню при тимкилле и при суициде. Второй я пофиксил, с первым загвоздка пока в силу определённых обстоятельств конкретного сервера.
Это всё решается 1 проверкой :)

Я лет 5 уже в разработчиках GM на SAMP, IVMP и M2MP, не знаю как у вас тут, только начал вникать, но там разрывают на месте за такие дела, если у вас тут свойственно такое крысятничество - обидно.
Вы простите меня, но какое крысятничество вы тут увидели? Вы заявили, что плагин баганный, тем самым назвав его "плохим", и после этого говорите что-то вроде "Не нужны мне ваши подачки, сам решу все свои проблемы", в итоге паришься часами над простыми проблемами.

AlmazON не смотрит ни на кого свысока, он лишь заявляет о том, что ТС не должен без ведома автора распространять плагин, а вы бессмысленный дебош насчёт багов устроили.

А это:
А так вам и надо! Плагин "приватный", так что, все баги ТС будет править)
как не трудо догадаться, "месть" за слив приватного, как посчитал автор, плагина. В таком случае, исправляйте баги сами, сударь.
 

Anokian

Участник
Сообщения
12
Реакции
3
Это всё решается 1 проверкой
Решил двумя.

Вы заявили, что плагин баганный, тем самым назвав его "плохим"
Я не заявил, я перечислил конкретные баги, что бы те кто будут качать плагин не удивлялись, и автор хотя бы знал о том что они есть, исправлять никто не заставлял и даже не просил. Я привык к тому, что авторы скриптов благодарны тем, кто указывает на баги, а не брызжат слюной в ответ мол: "Пишите сами всё раз у меня баги11!1!"
Видимо геймдев ГТА и КС слишком рознится, мне не понять этой агрессии.

а вы бессмысленный дебош насчёт багов устроили.
Дебош никто не устраивал, я просто нашёл баги, и сообщил о них, ничего более, дебош устроили мне в ответ, мол я совсем охерел, о багах говорить вздумал, окаянный.

как не трудо догадаться, "месть" за слив приватного, как посчитал автор, плагина. В таком случае, исправляйте баги сами, сударь.
Я то уже исправил всё. Не трудно догадаться, что у автора плагина просто припекло, что кто-то нашёл в его плагине баги, да и ещё священный код править собрался. Если бы его так беспокоила приватность плагина, он бы в паблике уже давно не лежал.

Спор считаю исчерпанным.
Плагин пофикшен и доработан. Если никто не будет возражать - выложу сюда, если нет - так тому и быть.
 

ExtaSpeed

Гл.админ BestGames.RU
Сообщения
27
Реакции
2
Оффтоп

Не, это ТС так пожелал. Потом сам всем подряд слил, а один из таких вообще зачем-то слил сюда, когда ему никто не разрешал. Оффтоп

Я вообще-то только 1 дал. А он сюда выложил. Я не хотел давать :P
 

Primo

типа серьёзный тип
Сообщения
1,532
Реакции
759
Anokian, вы не увидели "исток" сей сложившейся ситуации. AlmazON, вкратце говоря, заявил, что сами исправляйте баги, раз ТС без ведома автора распространяет плагин.
 

ExtaSpeed

Гл.админ BestGames.RU
Сообщения
27
Реакции
2
Решил двумя.


Я не заявил, я перечислил конкретные баги, что бы те кто будут качать плагин не удивлялись, и автор хотя бы знал о том что они есть, исправлять никто не заставлял и даже не просил. Я привык к тому, что авторы скриптов благодарны тем, кто указывает на баги, а не брызжат слюной в ответ мол: "Пишите сами всё раз у меня баги11!1!"
Видимо геймдев ГТА и КС слишком рознится, мне не понять этой агрессии.


Дебош никто не устраивал, я просто нашёл баги, и сообщил о них, ничего более, дебош устроили мне в ответ, мол я совсем охерел, о багах говорить вздумал, окаянный.


Я то уже исправил всё. Не трудно догадаться, что у автора плагина просто припекло, что кто-то нашёл в его плагине баги, да и ещё священный код править собрался. Если бы его так беспокоила приватность плагина, он бы в паблике уже давно не лежал.

Спор считаю исчерпанным.
Плагин пофикшен и доработан. Если никто не будет возражать - выложу сюда, если нет - так тому и быть.

Плагин в студию , пожалуйста. :beer:
 

The End Is Near...

Russian Roulette
Сообщения
874
Реакции
691
PHP:
#include <sourcemod>

#define FILE "addons/sourcemod/configs/reasons_kill.cfg"
#define TAG_MESSAGE "\x01\x05[SM] \x01"

new Handle:hKeyValues = INVALID_HANDLE,
    Handle:hGlobalMenu = INVALID_HANDLE;

new String:hClientKill[MAXPLAYERS + 1][32];

public OnPluginStart()
{
    hKeyValues = CreateKeyValues("reasons_kill");

    HookEvent("player_death", Event_OnPlayerDeath);
}

public OnMapStart()
{
    if (!FileToKeyValues(hKeyValues, FILE)) 
    { 
        SetFailState("Could not open file '%s'", FILE);
    }
    else
    {
        if (hGlobalMenu != INVALID_HANDLE)
        {
            CloseHandle(hGlobalMenu);
        }

        hGlobalMenu = CreateMenu(MenuHandler);
        SetMenuTitle(hGlobalMenu, "Укажите причину убийства");

        if (KvGotoFirstSubKey(hKeyValues))
        {
            decl String:buffer[128];
            do
            {
                if (KvGetSectionName(hKeyValues, buffer, 128))
                {
                    KvGetString(hKeyValues, "reason", buffer, 128);
                    AddMenuItem(hGlobalMenu, buffer, buffer);
                }
            }
            while (KvGotoNextKey(hKeyValues));
        }
        else
        {
            SetFailState("File is empty");
        }
    }
}

public Event_OnPlayerDeath(Handle:event, const String:name[], bool:silent)
{
    new attacker = GetClientOfUserId(GetEventInt(event, "attacker"));
    if (attacker > 0)
    {
        new client = GetClientOfUserId(GetEventInt(event, "userid"));
        if (client > 0)
        {
            new team = GetClientTeam(attacker);
            if (team == 3)
            {
                if (team != GetClientTeam(client))
                {
                    FormatEx(hClientKill[attacker], 32, "%N", client);
                    DisplayMenu(hGlobalMenu, attacker, MENU_TIME_FOREVER);
                }
            }
        }
    }
}

public MenuHandler(Handle:menu, MenuAction:action, param1, param2)
{
    if (param1 > 0)
    {
        decl String:buffer[128];
        switch (action)
        {
            case MenuAction_Select:
            {
                GetMenuItem(menu, param2, buffer, 128);
            }
            default:
            {
                strcopy(buffer, 128, "Не указано");
            }
        }

        PrintToChatAll("%s Охранник %N убил %s. Причина: %s", TAG_MESSAGE, param1, hClientKill[param1], buffer);
    }
}
PHP:
// Пример файла
"reasons_kill"
{
    "0"
    {
        "reason"    "Случайно"
    }

    "1"
    {
        "reason"    "Причина 1"
    }

    "2"
    {
        "reason"    "Причина 2"
    }

    "3"
    {
        "reason"    "Причина 3"
    }

    "4"
    {
        "reason"    "Причина 4"
    }

    "5"
    {
        "reason"    "Причина 5"
    }
}
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755

ExtaSpeed

Гл.админ BestGames.RU
Сообщения
27
Реакции
2
Плагин странно отображает текст. Просто ромбы с вопросами. Алмазон был прав , впрочем как всегда.
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
ромбы с вопросами
Нет, это ты уже сам виноват) Надо сохранять в кодировке UTF-8 без BOM и sp, и reasons_kill.cfg.
The End Is Near..., лучше бы LOCAL CHAT написал, а не мерялся, у кого лучше выйдет)
 

Anokian

Участник
Сообщения
12
Реакции
3
Это ты так "попросил" поправить плагин?!
Я тебя ни разу не просил ничего править, повторяю уже раз пятый, не знаю как тебе ещё написать, что бы ты понял.

Заметь, самих багов не перечислил нормально.
Я 2 бага конкретно описал, если ты читаешь между строк - не мои проблемы.

Он там себе направил ещё, кроме багов. У тебя потом текст перестанет влезать - зря ты) Да и написано будет опять же, абы как...
Полнейшее пустословие и опять таки взгляд свысока. Скриптер всея Руси? Думаешь никто не способен выдать нормальный код кроме тебя? У тебя банально припекает, остынь.
 

Anokian

Участник
Сообщения
12
Реакции
3
И так, дырки залатаны, свистелко-перделки прикручены:
1) При тимкилле и суициде меню не вылезает
2) Убитому Т выдаётся hinttext (в центре экрана) с причиной килла
3) Причина килла Т в чат теперь выдаётся всем игрокам
4) При убийстве одновременно 2 и более Т открывается меню с причинами массового килла. Очень часто на джаилах сносят сразу с десяток Т, каждый из которых потом начинает верещать "За шо?!", а причину килла в плагине можно указать только последнему убитому, поэтому счёл данную опцию крайне необходимой.
5) При массовом килле всем так же выдаётся сообщение в чат и hint
6) Прочие мелкие исправления

Сам плагин скину позже если кому нужен, есть мелкие косяки по пунктуации и в коде творческий беспорядок.
i7913498

i7913499
 

The End Is Near...

Russian Roulette
Сообщения
874
Реакции
691
The End Is Near..., лучше бы LOCAL CHAT написал, а не мерялся, у кого лучше выйдет)

Плагин не проверен, го дорабатывать, если нужно, только пиши не запудренным кодом:-D
PHP:
#include <sourcemod>

new hClientUsedChat[MAXPLAYERS + 1] = {-1, ...};

public OnPluginStart()
{
    AddCommandListener(ACL_Callback, "say");
    AddCommandListener(ACL_Callback, "say_team");

    RegAdminCmd("local_chat", RAC_Callback, ADMFLAG_BAN);
}

public OnClientDisconnect(client)
{
    if (hClientUsedChat[client] != -1)
    {
        hClientUsedChat[hClientUsedChat[client]] = -1;
        PrintToChat(hClientUsedChat[client], "[SM] Клиент отключился. Диалог недоступен.");

        hClientUsedChat[client] = -1;
    }
}

public Action:ACL_Callback(client, const String:message[], args)
{
    if (client > 0)
    {
        if (hClientUsedChat[client] != -1)
        {
            decl String:buffer[256];
            GetCmdArgString(buffer, 256);
            TrimString(buffer);

            Format(buffer, 256, "\x01\x05%N\x01: %s", client, buffer);
            PrintToChat(client, buffer);
            PrintToChat(hClientUsedChat[client], buffer);
        }
    }

    return Plugin_Handled;
}

public Action:RAC_Callback(client, args)
{
    if (client > 0)
    {
        new Handle:menu = CreateMenu(MenuHandler);
        SetMenuTitle(menu, "Выберите игрока");
        
        decl String:userid[16], String:name[32];
        if (hClientUsedChat[client] != -1)
        {
            AddMenuItem(menu, "close", "Закрыть активный диалог");
            GetClientName(hClientUsedChat[client], name, 32);
            AddMenuItem(menu, "0", name, ITEMDRAW_DISABLED);
        }

        for (new i = 1; i <= MaxClients; i++)
        {
            if (IsClientInGame(i) && !IsFakeClient(i) && hClientUsedChat[i] == -1 && client != i)
            {
                IntToString(GetClientUserId(i), userid, 16);
                GetClientName(i, name, 32);
                AddMenuItem(menu, userid, name);
            }
        }
    }

    return Plugin_Handled;
}

public MenuHandler(Handle:menu, MenuAction:action, param1, param2)
{
    switch (action)
    {
        case MenuAction_Select:
        {
            decl String:buffer[16];
            GetMenuItem(menu, param2, buffer, 16);

            new client = GetClientOfUserId(StringToInt(buffer));
            if (client > 0)
            {
                if (strcmp(buffer, "close", false) == 0)
                {
                    hClientUsedChat[param1] = hClientUsedChat[client] = -1;
                    PrintToChat(param1, "\x01\x05[SM] \x01Выключен диалог с \x05%N\x01.", client);
                    PrintToChat(client, "\x01\x05[SM] \x01Выключен диалог с \x05%N\x01.", param1);
                }
                else
                {
                    hClientUsedChat[param1] = client;
                    hClientUsedChat[client] = param1;

                    PrintToChat(param1, "\x01\x05[SM] \x01Включен диалог с \x05%N\x01.", client);
                    PrintToChat(client, "\x01\x05[SM] \x01Включен диалог с \x05%N\x01.", param1);
                }
            }
            else
            {
                PrintToChat(param1, "\x01\x05[SM] \x01Клиент недоступен.", client);
            }

            
        }
        case MenuAction_Cancel, MenuCancel_ExitBack:
        {
            CloseHandle(menu);
        }
    }
}
 

ExtaSpeed

Гл.админ BestGames.RU
Сообщения
27
Реакции
2
Да хватит уже одно и тоже писать . Локал чат лучше напишите , пожалуйста.
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
[CS:GO/CS:S/TF2] Local Chat Admin v1.0.0

го дорабатывать
Нашёл пару-тройку существенных ошибок, в частности, в коде так и не отсылалось меню клиенту.
В общем, исправил всё и завершил с достаточной оптимизацией. Оффтоп
Команда для вызова в чате (требуется флаг "бана"): !lc (видна всем) или /lc (скрыто ото всех), либо в консоли клиента: sm_lc
Меню не откроется, если нет никого из живых игроков, кроме админа.
 

Вложения

  • LocalChatAdmin_v1.0.0.sp
    2.9 КБ · Просмотры: 48
Последнее редактирование:

ExtaSpeed

Гл.админ BestGames.RU
Сообщения
27
Реакции
2
Ну я толком плагин не знаю , но когда игрок пишет в обычный чат (не командный) , то сообщения отправляются в Локальный чат. А вот на счет админа не знаю.
 
Сверху Снизу