1. Phantom Команда форума

    Регистрация:
    27.02.15
    Сообщения:
    1.691
    Симпатии:
    796
    Пол:
    Мужской
    Telegram:
    ph4nt0m
    Disconnect Reason 0.6
    Автор - Bugsy
    Описание:
    плагин уведомляет игроков в чат и консоль о причине, по которой игрок отключился от сервера, например: Timed out, Client sent 'drop'. Kicked. При этом стандартное консольное сообщение Player dropped/Player left the game в консоле выводиться не будет. В плагине всего один квар - dr_enabled (1/0), позволяющий включить или же отключить вывод сообщения в чат и консоль с причиной о дисконнекте игрока
    [​IMG]
    [​IMG]
    [​IMG]
    PHP:
    new const DisconnectMessages[ReasonCodes][] =
    {
        
    "Timed out",
        
    "Client sent 'drop'",
        
    "Kicked",
        
    "Dropping fakeclient on level change",
        
    ""
    };
    В этом участке кода, находящимся в исходнике, можно подредактировать вывод причины дисконнекта игрока, хотя тут и редактировать нечего
    Требуемые дополнительные модули: Orpheu
    Установка:
    1. Скопируйте исходник disconnect_reason.sma в папку scriptings
    2. Скомпилируйте исходник
    3. Скомпилированный плагин disconnect_reason.amxx поместите в папку plugins
    4. Файл SV_DropClient, находящийся в папке [signature]SV_DropClient, скопируйте в директорию amxmodx/configs/orpheu/functions
    5. Пропишите в plugins.ini название плагина
     

    Вложения:

    gudaus нравится это.
  2. VkriterT VIP user

    Регистрация:
    02.06.15
    Сообщения:
    428
    Симпатии:
    125
    Пол:
    Мужской
    Как сделать что бы не выводило сообщение в чат а только изменяла его в консоли ?
     
  3. Bloo Кснетовский Bloo

    Регистрация:
    10.03.15
    Сообщения:
    176
    Симпатии:
    43
    Пол:
    Мужской
    VkriterT, удали
    Код:
    public fw_MsgTextMsg(iMsgID, iMsgDest, iMsgArgs)
    {
        static szMessage[19];
        return(g_bEnabled && get_msg_arg_string(2, szMessage, charsmax(szMessage)) && equal(szMessage, "#Game_disconnected")) ? PLUGIN_HANDLED : PLUGIN_CONTINUE;
    }
    
    ChatNotify(iDisconnectID)
    {
        static szMessage[100], iMsgSayText;
        formatex(szMessage, charsmax(szMessage), "^1* ^3%s ^1has disconnected - Reason [ ^4%s ^1]", g_szName[iDisconnectID], g_DisconnectInfo[ReasonMessage]);
       
        emessage_begin(MSG_BROADCAST, iMsgSayText ? iMsgSayText : (iMsgSayText = get_user_msgid("SayText")), _, 0);
        ewrite_byte(iDisconnectID);       
        ewrite_string(szMessage);
        emessage_end();
    }
    
     
    VkriterT нравится это.
  4. VkriterT VIP user

    Регистрация:
    02.06.15
    Сообщения:
    428
    Симпатии:
    125
    Пол:
    Мужской
    Compiling disconnect_reason.sma ...terminate called after throwing an instance of 'std::bad_alloc'
    what(): St9bad_alloc
    /home/vkritert/Desktop/comp/compile.sh: line 22: 5890 Aborted $pc $sourcefile -ocompiled/$amxxfile >> temp.txt
    done
     
  5. Bloo Кснетовский Bloo

    Регистрация:
    10.03.15
    Сообщения:
    176
    Симпатии:
    43
    Пол:
    Мужской
    VkriterT, тогда так:
    Код:
    #include <amxmodx>
    #include <amxmisc>
    #include <orpheu>
    
    new const Version[] = "0.6";
    
    enum ReasonCodes
    {
        DR_TIMEDOUT,
        DR_DROPPED,
        DR_KICKED,
        DR_LEVELCHANGE,
        DR_OTHER
    }
    new const DisconnectMessages[ReasonCodes][] =
    {
        "Timed out",
        "Client sent 'drop'",
        "Kicked",
        "Dropping fakeclient on level change",
        ""
    };
    enum DisconnectData
    {
        ReasonCode,
        ReasonMessage[50]
    }
    
    new g_pEnabled, bool:g_bEnabled, g_szName[33][33], g_DisconnectInfo[DisconnectData], g_iFwdDisconnect;
    
    public plugin_init()
    {
        register_plugin("Disconnect Reason", Version, "bugsy");
       
        g_pEnabled = register_cvar("dr_enabled", "1");
        register_cvar("disconnectreason_version", Version, (FCVAR_SERVER | FCVAR_SPONLY));
       
        OrpheuRegisterHook(OrpheuGetFunction("SV_DropClient"), "SV_DropClient");
       
        register_message(get_user_msgid("TextMsg"), "fw_MsgTextMsg");
       
        g_iFwdDisconnect = CreateMultiForward("client_disconnect_reason", ET_CONTINUE, FP_CELL, FP_CELL, FP_STRING);
    }
    
    public client_putinserver(id)
        get_user_name(id, g_szName[id], charsmax(g_szName[]));
    
    public OrpheuHookReturn:SV_DropClient(a, b, const szMessage[])
    {   
        if((g_bEnabled = bool:!!get_pcvar_num(g_pEnabled)))
        {
            copy(g_DisconnectInfo[ReasonMessage], charsmax(g_DisconnectInfo[ReasonMessage]), szMessage);
           
            new ReasonCodes:rcReason;
            for(rcReason = DR_TIMEDOUT ; rcReason < ReasonCodes ; rcReason++)
            {
                if(equal(szMessage, DisconnectMessages[rcReason]))
                    break;
            }
           
            g_DisconnectInfo[ReasonCode] = _:rcReason;
        }
    }
    
    public client_disconnect(id)
    {       
        new iReturn;
        ExecuteForward(g_iFwdDisconnect, iReturn, id, g_DisconnectInfo[ReasonCode], g_DisconnectInfo[ReasonMessage]);
       
        if(g_bEnabled)
        {
            console_print(0, "* %s has disconnected - Reason [%s]", g_szName[id], g_DisconnectInfo[ReasonMessage]);
        }
    }
    
    public fw_MsgTextMsg(iMsgID, iMsgDest, iMsgArgs)
    {
        static szMessage[19];
        return(g_bEnabled && get_msg_arg_string(2, szMessage, charsmax(szMessage)) && equal(szMessage, "#Game_disconnected")) ? PLUGIN_HANDLED : PLUGIN_CONTINUE;
    }
    
    /* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
    *{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1033\\ f0\\ fs16 \n\\ par }
    */
    
     
  6. VkriterT VIP user

    Регистрация:
    02.06.15
    Сообщения:
    428
    Симпатии:
    125
    Пол:
    Мужской
    У меня плагин весит 200кб (, мож плз скинуть .амхх.
     
  7. Bloo Кснетовский Bloo

    Регистрация:
    10.03.15
    Сообщения:
    176
    Симпатии:
    43
    Пол:
    Мужской
    Держи
     

    Вложения:

    VkriterT нравится это.