1. Соблюдайте Правила форума и проявляйте уважение к другим участникам беседы.

Help Антиспам

Тема в разделе 'Кодинг/Собственные решения', создана пользователем pusha1999, 26 сен 2013.

?

АХТУНГ ИЛИ НЕ АХТУНГ

АХТУНГ 14 голосов 66,7%
НЕ АХТУНГ 7 голосов 33,3%
  1. Guard Старожила

    Сообщения:
    473
    Спасибы:
    47
    Сборка бота GHost:
    Ghost++ RAKAL Edition
    Дата начала использования бота:
    00.00.2009
    Skype:
    Мой статус
    Я еще удивляюсь, почему меня не заварнили.

    p.s.но гифку я поищу
  2. Sky Наш человек

    Сообщения:
    84
    Спасибы:
    18
    Сборка бота GHost:
    LOL_BOT
    Дата начала использования бота:
    12.08.2013
    Skype:
    Мой статус
    мб мне свой вариант антиспама выложить?
  3. ıIıIİıİIıımusic Можно доверять

    Сообщения:
    134
    Спасибы:
    2
    Сборка бота GHost:
    Ghost One 1.7.266
    Дата начала использования бота:
    01.01.2013
    Skype:
    Мой статус
    Валяй своё добро)))
  4. Suicider Старожила

    Сообщения:
    673
    Спасибы:
    117
    Сборка бота GHost:
    Ghost++ 17.1 by w3gh
    Дата начала использования бота:
    12.07.2011
    :eek: что за херня тут творится? o_O
  5. ıIıIİıİIıımusic Можно доверять

    Сообщения:
    134
    Спасибы:
    2
    Сборка бота GHost:
    Ghost One 1.7.266
    Дата начала использования бота:
    01.01.2013
    Skype:
    Мой статус

    Человек хочет поделиться своим кодом "антиспам":avtoradolf:...:D
  6. Sky Наш человек

    Сообщения:
    84
    Спасибы:
    18
    Сборка бота GHost:
    LOL_BOT
    Дата начала использования бота:
    12.08.2013
    Skype:
    Мой статус
    да не ссы выложу проста нет возможности пока что в боте копаться
  7. Sky Наш человек

    Сообщения:
    84
    Спасибы:
    18
    Сборка бота GHost:
    LOL_BOT
    Дата начала использования бота:
    12.08.2013
    Skype:
    Мой статус
    я сделал вот так
    в game_base.cpp
    вставляем
    Код:
    //Flood
                        if(player->GetLastMsgTime() == 0){
                            player->SetLastMsgTime(GetTime());
                            player->SetPlayerMsgCount(player->GetPlayerMsgCount()+1);
                        } else {
                            if(GetTime() - player->GetLastMsgTime() <=3){
                                player->SetPlayerMsgCount(player->GetPlayerMsgCount()+1);
                                if(player->GetPlayerMsgCount() >= 5){
                                    AddToFloodMuted(player->GetName());
                                    player->SetLastMsgTime(0);
                                    player->SetPlayerMsgCount(0);
                                }
                            } else {
                                player->SetLastMsgTime(GetTime());
                                player->SetPlayerMsgCount(0);
                                player->SetPlayerMsgCount(player->GetPlayerMsgCount()+1);
                            }
                        }
    перед
    Код:
    if  (msg2!=msg && m_GHost->m_CensorMute && m_GameLoaded)
                        {
                            bool ok = true;
                            if (isAdmin && !m_GHost->m_CensorMuteAdmins)
                                ok = false;
                            if (isRootAdmin)
                                ok = false;
                            if (ok)
                                AddToCensorMuted(player->GetName());
                        }
                    }
            }
    вставляем
    Код:
    //Flood
    void CBaseGame :: AddToFloodMuted( string name)
    {
        transform( name.begin( ), name.end( ), name.begin( ), (int(*)(int))tolower );
     
        // check that the user is not already muted
     
        for( vector<string> :: iterator i = m_CensorMuted.begin( ); i != m_CensorMuted.end( ); i++ )
        {
            if( *i == name )
            {
                return;
            }
        }
     
        m_CensorMuted.push_back( name );
     
        unsigned long secs = 0;
        CGamePlayer *Player = GetPlayerFromName(name, false);
        Player->SetCensors(Player->GetCensors()+1);
        if (Player->GetCensors()==1)
            secs = m_GHost->m_CensorMuteFirstSeconds;
        if (Player->GetCensors()==2)
            secs = m_GHost->m_CensorMuteSecondSeconds;
        if (Player->GetCensors()>2)
            secs = m_GHost->m_CensorMuteExcessiveSeconds;
     
        m_CensorMutedSeconds.push_back( secs);
        m_CensorMutedTime.push_back( GetTime());
        AddToMuted(name);
        SendAllChat(m_GHost->m_Language->PlayerMutedForBeingFloodMouthed(name, UTIL_ToString(secs)));
    }
    после
    Код:
    void CBaseGame :: AddToMuted( string name)
    {
        transform( name.begin( ), name.end( ), name.begin( ), (int(*)(int))tolower );
     
        // check that the user is not already muted
     
        for( vector<string> :: iterator i = m_Muted.begin( ); i != m_Muted.end( ); i++ )
        {
            if( *i == name )
            {
                return;
            }
        }
     
        m_Muted.push_back( name );
    }
    в gameplayer.cpp всталяем
    Код:
    m_LastMsgTime = 0;
        m_PlayerMsgCount = 0;
    после
    Код:
    m_JoinTime = GetTime( );
    вставляем
    Код:
    m_LastMsgTime = 0;
        m_PlayerMsgCount = 0;
    после
    Код:
    m_JoinTime = GetTime( );
    в gameplayer.h всталяем
    Код:
    uint32_t GetLastMsgTime( )                    { return m_LastMsgTime; }
        uint32_t GetPlayerMsgCount( )                { return m_PlayerMsgCount; }
    перед
    Код:
    uint32_t GetJoinTime( )                        { return m_JoinTime; }
    вставялем
    Код:
    uint32_t m_LastMsgTime;
        uint32_t m_PlayerMsgCount;
    после
    Код:
    uint32_t m_JoinTime;
    вставляем
    Код:
    void SetLastMsgTime( uint32_t nLastMsgTime )                                    { m_LastMsgTime = nLastMsgTime; }
        void SetPlayerMsgCount( uint32_t nPlayerMsgCount )                                { m_PlayerMsgCount = nPlayerMsgCount; }
    после
    Код:
    void SetSyncCounter( uint32_t nSyncCounter )                                    { m_SyncCounter = nSyncCounter; }
    в game_base.h
    вставляем
    Код:
    virtual void AddToFloodMuted( string name); //Flood
    после
    Код:
    virtual void AddToCensorMuted( string name);
    в language.cpp
    вставляем
    Код:
    string CLanguage :: PlayerMutedForBeingFloodMouthed(string user, string time)
    {
        string Out = m_CFG->GetString( "lang_1007", "lang_1007" );
        Replace( Out, "$USER$", user );
        Replace( Out, "$TIME$", time );
        return Out;
    }
    в language.h
    вставляем
    Код:
    string PlayerMutedForBeingFloodMouthed ( string user, string time);
    в language.cfg добавляем lang_1007 = $USER$ улетает в мут на $TIME$сек. за флуд.
    значения мутов берутся из этих строк
    # молчанка игроку на X секунд при первом нарушении
    bot_censormutefirstseconds = 30
    # молчанка игроку на X секунд при втором нарушении
    bot_censormutesecondseconds = 60
    # молчанка игроку на X секунд при 3 и более нарушениях
    bot_censormuteexcessiveseconds = 120
    вроде бы ничего не забыл
    p.s. ещё не тестил но должно работать
    Begzod, iCCup и Thomas_Nsk нравится это.
  8. Guard Старожила

    Сообщения:
    473
    Спасибы:
    47
    Сборка бота GHost:
    Ghost++ RAKAL Edition
    Дата начала использования бота:
    00.00.2009
    Skype:
    Мой статус
    Патч антифлуда чуть переделанный мною:
    Index: default.cfg
    ===================================================================
    --- default.cfg (revision 585)
    +++ default.cfg (working copy)
    @@ -2,6 +2,26 @@
    # BOT CONFIGURATION #
    #####################

    +### On\off function SpamControl.
    +
    +bot_spamcontrol = 1
    +
    +### SpamControl left reason.
    +
    +bot_spamcontrolleftreason = spam
    +
    +### "Banned by...". Who gives a ban
    +
    +bot_spamcontrolbanname = SpamControl
    +
    +### SpamControl ban reason.
    +
    +bot_spamcontrolbanreason = spamming
    +
    +### Time for unmute (s).
    +
    +bot_spamcontrolunmutetime = 30
    +
    ### the log file

    bot_log = ghost.log
    Index: ghost/game.cpp
    ===================================================================
    --- ghost/game.cpp (revision 585)
    +++ ghost/game.cpp (working copy)
    @@ -1841,3 +1841,18 @@
    CONSOLE_Print( "[GAME: " + m_GameName + "] saving game data to database" );
    m_CallableGameAdd = m_GHost->m_DB->ThreadedGameAdd( m_GHost->m_BNETs.size( ) == 1 ? m_GHost->m_BNETs[0]->GetServer( ) : string( ), m_DBGame->GetMap( ), m_GameName, m_OwnerName, m_GameTicks / 1000, m_GameState, m_CreatorName, m_CreatorServer );
    }
    +
    +void CGame :: BanPlayer( CGamePlayer *p )
    +{
    + if( !p->GetSpoofedRealm( ).empty( ) )
    + {
    + // the user was spoof checked, ban only on the spoofed realm.
    + m_PairedBanAdds.push_back( PairedBanAdd( "", m_GHost->m_DB->ThreadedBanAdd( p->GetSpoofedRealm( ), p->GetName( ), p->GetExternalIPString( ), m_GameName, m_GHost->m_SpamControlBanName, m_GHost->m_SpamControlBanReason ) ) );
    + }
    + else
    + {
    + // the user wasn't spoof checked, ban on every realm.
    + for( vector<CBNET *> :: iterator i = m_GHost->m_BNETs.begin( ); i != m_GHost->m_BNETs.end( ); i++ )
    + m_PairedBanAdds.push_back( PairedBanAdd( "", m_GHost->m_DB->ThreadedBanAdd( (*i)->GetServer( ), p->GetName( ), p->GetExternalIPString( ), m_GameName, m_GHost->m_SpamControlBanName, m_GHost->m_SpamControlBanReason ) ) );
    + }
    +}
    \ No newline at end of file
    Index: ghost/game.h
    ===================================================================
    --- ghost/game.h (revision 585)
    +++ ghost/game.h (working copy)
    @@ -65,6 +65,8 @@
    virtual void EventGameStarted( );
    virtual bool IsGameDataSaved( );
    virtual void SaveGameData( );
    +
    + void BanPlayer(CGamePlayer* p);
    };

    #endif
    Index: ghost/game_base.h
    ===================================================================
    --- ghost/game_base.h (revision 585)
    +++ ghost/game_base.h (working copy)
    @@ -269,6 +269,7 @@
    virtual void DeleteVirtualHost( );
    virtual void CreateFakePlayer( );
    virtual void DeleteFakePlayer( );
    + virtual void BanPlayer(CGamePlayer* p) {}
    };

    #endif
    Index: ghost/gameplayer.cpp
    ===================================================================
    --- ghost/gameplayer.cpp (revision 585)
    +++ ghost/gameplayer.cpp (working copy)
    @@ -188,7 +188,7 @@
    m_PID( nPID ), m_Name( nName ), m_InternalIP( nInternalIP ), m_JoinedRealm( nJoinedRealm ), m_TotalPacketsSent( 0 ), m_TotalPacketsReceived( 0 ), m_LeftCode( PLAYERLEAVE_LOBBY ), m_LoginAttempts( 0 ), m_SyncCounter( 0 ), m_JoinTime( GetTime( ) ),
    m_LastMapPartSent( 0 ), m_LastMapPartAcked( 0 ), m_StartedDownloadingTicks( 0 ), m_FinishedLoadingTicks( 0 ), m_StartedLaggingTicks( 0 ), m_StatsSentTime( 0 ), m_StatsDotASentTime( 0 ), m_LastGProxyWaitNoticeSentTime( 0 ), m_Score( -100000.0 ),
    m_LoggedIn( false ), m_Spoofed( false ), m_Reserved( nReserved ), m_WhoisShouldBeSent( false ), m_WhoisSent( false ), m_DownloadAllowed( false ), m_DownloadStarted( false ), m_DownloadFinished( false ), m_FinishedLoading( false ), m_Lagging( false ),
    -m_DropVote( false ), m_KickVote( false ), m_Muted( false ), m_LeftMessageSent( false ), m_GProxy( false ), m_GProxyDisconnectNoticeSent( false ), m_GProxyReconnectKey( rand( ) ), m_LastGProxyAckTime( 0 )
    +m_DropVote( false ), m_KickVote( false ), m_Muted( false ), m_LeftMessageSent( false ), m_MTCursor( 0 ), m_WarnTime( 0 ), m_GProxy( false ), m_GProxyDisconnectNoticeSent( false ), m_GProxyReconnectKey( rand( ) ), m_LastGProxyAckTime( 0 )
    {

    }
    @@ -197,7 +197,7 @@
    m_PID( nPID ), m_Name( nName ), m_InternalIP( nInternalIP ), m_JoinedRealm( nJoinedRealm ), m_TotalPacketsSent( 0 ), m_TotalPacketsReceived( 1 ), m_LeftCode( PLAYERLEAVE_LOBBY ), m_LoginAttempts( 0 ), m_SyncCounter( 0 ), m_JoinTime( GetTime( ) ),
    m_LastMapPartSent( 0 ), m_LastMapPartAcked( 0 ), m_StartedDownloadingTicks( 0 ), m_FinishedLoadingTicks( 0 ), m_StartedLaggingTicks( 0 ), m_StatsSentTime( 0 ), m_StatsDotASentTime( 0 ), m_LastGProxyWaitNoticeSentTime( 0 ), m_Score( -100000.0 ),
    m_LoggedIn( false ), m_Spoofed( false ), m_Reserved( nReserved ), m_WhoisShouldBeSent( false ), m_WhoisSent( false ), m_DownloadAllowed( false ), m_DownloadStarted( false ), m_DownloadFinished( false ), m_FinishedLoading( false ), m_Lagging( false ),
    -m_DropVote( false ), m_KickVote( false ), m_Muted( false ), m_LeftMessageSent( false ), m_GProxy( false ), m_GProxyDisconnectNoticeSent( false ), m_GProxyReconnectKey( rand( ) ), m_LastGProxyAckTime( 0 )
    +m_DropVote( false ), m_KickVote( false ), m_Muted( false ), m_LeftMessageSent( false ), m_MTCursor( 0 ), m_WarnTime( 0 ), m_GProxy( false ), m_GProxyDisconnectNoticeSent( false ), m_GProxyReconnectKey( rand( ) ), m_LastGProxyAckTime( 0 )
    {
    // todotodo: properly copy queued packets to the new player, this just discards them
    // this isn't a big problem because official Warcraft III clients don't send any packets after the join request until they receive a response
    @@ -212,7 +212,8 @@

    CGamePlayer :: ~CGamePlayer( )
    {
    -
    +for (int i = 0; i < MTNUM; i++)
    + m_MessageTimes = 0;
    }

    string CGamePlayer :: GetNameTerminated( )
    @@ -283,6 +284,13 @@
    // if we don't receive anything from a player for 30 seconds we can assume they've dropped
    // this works because in the lobby we send pings every 5 seconds and expect a response to each one
    // and in the game the Warcraft 3 client sends keepalives frequently (at least once per second it looks like)
    +
    + if( m_Muted && m_WarnTime != 0 && GetTime() - m_WarnTime >= m_Game->m_GHost->m_SpamControlUnmuteTime )
    + {
    + m_Muted = false;
    + m_WarnTime = 0;
    + m_Game->SendAllChat( m_Game->m_GHost->m_Language->SpamControlUnmuteTime( GetName() ) );
    + }

    if( m_Socket && GetTime( ) - m_Socket->GetLastRecv( ) >= 30 )
    m_Game->EventPlayerDisconnectTimedOut( this );
    @@ -450,8 +458,49 @@
    case CGameProtocol :: W3GS_CHAT_TO_HOST:
    ChatPlayer = m_Protocol->RECEIVE_W3GS_CHAT_TO_HOST( Packet->GetData( ) );

    - if( ChatPlayer )
    + if( ChatPlayer )
    + {
    + if ( m_Game->m_GHost->m_SpamControl && ChatPlayer->GetType( ) == CIncomingChatPlayer :: CTH_MESSAGE || ChatPlayer->GetType( ) == CIncomingChatPlayer :: CTH_MESSAGEEXTRA )
    + {
    + m_MTCursor++;
    + m_MTCursor %= MTNUM;
    +
    + m_MessageTimes[m_MTCursor] = GetTicks();
    +
    + if (m_MessageTimes[(1 + m_MTCursor)%MTNUM] != 0)
    + {
    + uint32_t dif = m_MessageTimes[m_MTCursor] - m_MessageTimes[(1 + m_MTCursor)%MTNUM];
    +
    + if ( dif < 3000 ) // 3 seconds
    + {
    + if (!m_Muted)
    + {
    + m_Game->SendAllChat( m_Game->m_GHost->m_Language->SpamControlMute( GetName() ) );
    + m_Game->SendChat( this, m_Game->m_GHost->m_Language->SpamControlMuteWarn( GetName() ) );
    + m_WarnTime = GetTime();
    +
    + for (int i = 0; i < MTNUM; i++)
    + m_MessageTimes = 0;
    +
    + m_Muted = true;
    + }
    +
    + else if ( m_Muted && m_WarnTime != 0 )
    + {
    + m_Game->SendAllChat( m_Game->m_GHost->m_Language->SpamControlKickAndBan( GetName() ) );
    + m_Game->BanPlayer( this );
    + SetDeleteMe( true );
    + SetLeftReason( m_Game->m_GHost->m_SpamControlLeftReason );
    + SetLeftCode( PLAYERLEAVE_LOBBY );
    + m_Game->OpenSlot( m_Game->GetSIDFromPID( GetPID( ) ), false );
    + }
    + }
    + }
    + }
    +
    m_Game->EventPlayerChatToHost( this, ChatPlayer );
    + }
    +

    delete ChatPlayer;
    ChatPlayer = NULL;
    Index: ghost/gameplayer.h
    ===================================================================
    --- ghost/gameplayer.h (revision 585)
    +++ ghost/gameplayer.h (working copy)
    @@ -104,6 +104,7 @@
    uint32_t m_StartedLaggingTicks; // GetTicks when the player started lagging
    uint32_t m_StatsSentTime; // GetTime when we sent this player's stats to the chat (to prevent players from spamming !stats)
    uint32_t m_StatsDotASentTime; // GetTime when we sent this player's dota stats to the chat (to prevent players from spamming !statsdota)
    + uint32_t m_WarnTime; // GetTime when we warn this player for spamming
    uint32_t m_LastGProxyWaitNoticeSentTime;
    queue<BYTEARRAY> m_LoadInGameData; // queued data to be sent when the player finishes loading when using "load in game"
    double m_Score; // the player's generic "score" for the matchmaking algorithm
    @@ -121,6 +122,10 @@
    bool m_KickVote; // if the player voted to kick a player or not
    bool m_Muted; // if the player is muted or not
    bool m_LeftMessageSent; // if the playerleave message has been sent or not
    +
    + #define MTNUM 6
    + uint32_t m_MessageTimes[MTNUM]; // ticks of the last MTNUM messages sent by the user
    + char m_MTCursor; // cursor for MessageTimes[MTNUM]
    bool m_GProxy; // if the player is using GProxy++
    bool m_GProxyDisconnectNoticeSent; // if a disconnection notice has been sent or not when using GProxy++
    queue<BYTEARRAY> m_GProxyBuffer;
    Index: ghost/ghost.cpp
    ===================================================================
    --- ghost/ghost.cpp (revision 585)
    +++ ghost/ghost.cpp (working copy)
    @@ -1384,6 +1384,13 @@
    m_LocalAdminMessages = CFG->GetInt( "bot_localadminmessages", 1 ) == 0 ? false : true;
    m_TCPNoDelay = CFG->GetInt( "tcp_nodelay", 0 ) == 0 ? false : true;
    m_MatchMakingMethod = CFG->GetInt( "bot_matchmakingmethod", 1 );
    +
    + m_SpamControl = CFG->GetInt( "bot_spamcontrol", 1 ) == 0 ? false : true;
    + m_SpamControlLeftReason = CFG->GetString( "bot_spamcontrolleftreason", "spam" );
    + m_SpamControlBanName = CFG->GetString( "bot_spamcontrolbanname", "SpamControl" );
    + m_SpamControlBanReason = CFG->GetString( "bot_spamcontrolbanreason", "spamming" );
    + m_SpamControlUnmuteTime = CFG->GetInt( "bot_spamcontrolunmutetime", 30 );
    +
    }

    void CGHost :: ExtractScripts( )
    Index: ghost/ghost.h
    ===================================================================
    --- ghost/ghost.h (revision 585)
    +++ ghost/ghost.h (working copy)
    @@ -134,6 +134,12 @@
    bool m_TCPNoDelay; // config value: use Nagle's algorithm or not
    uint32_t m_MatchMakingMethod; // config value: the matchmaking method

    + string m_SpamControlLeftReason; // config value: Set Left Reason is SpamControl - spam
    + string m_SpamControlBanName; // config value: Give ban - SpamControl
    + string m_SpamControlBanReason; // config value: spam control ban reason - spamming
    + uint32_t m_SpamControlUnmuteTime; // config value: 30s - time for unmute player after spamcontrol
    + uint32_t m_SpamControl; // config value: allow SpamControl or not
    +
    CGHost( CConfig *CFG );
    ~CGHost( );

    Index: ghost/language.cpp
    ===================================================================
    --- ghost/language.cpp (revision 585)
    +++ ghost/language.cpp (working copy)
    @@ -1533,3 +1533,30 @@
    UTIL_Replace( Out, "$NAME$", name );
    return Out;
    }
    +string CLanguage :: SpamControlUnmuteTime( string name )
    +{
    + string Out = m_CFG->GetString( "lang_9000", "lang_9000" );
    + UTIL_Replace( Out, "$NAME$", name );
    + return Out;
    +}
    +
    +string CLanguage :: SpamControlKickAndBan( string name )
    +{
    + string Out = m_CFG->GetString( "lang_9001", "lang_9001" );
    + UTIL_Replace( Out, "$NAME$", name );
    + return Out;
    +}
    +
    +string CLanguage :: SpamControlMute( string name )
    +{
    + string Out = m_CFG->GetString( "lang_9002", "lang_9002" );
    + UTIL_Replace( Out, "$NAME$", name );
    + return Out;
    +}
    +
    +string CLanguage :: SpamControlMuteWarn( string name )
    +{
    + string Out = m_CFG->GetString( "lang_9003", "lang_9003" );
    + UTIL_Replace( Out, "$NAME$", name );
    + return Out;
    +}
    \ No newline at end of file
    Index: ghost/language.h
    ===================================================================
    --- ghost/language.h (revision 585)
    +++ ghost/language.h (working copy)
    @@ -254,6 +254,10 @@
    string WaitForReconnectSecondsRemain( string seconds );
    string WasUnrecoverablyDroppedFromGProxy( );
    string PlayerReconnectedWithGProxy( string name );
    + string SpamControlUnmuteTime( string name );
    + string SpamControlKickAndBan( string name );
    + string SpamControlMute( string name );
    + string SpamControlMuteWarn( string name );
    };

    #endif
    Index: language.cfg
    ===================================================================
    --- language.cfg (revision 585)
    +++ language.cfg (working copy)
    @@ -222,3 +222,7 @@
    lang_0218 = Please wait for me to reconnect ($SECONDS$ seconds remain).
    lang_0219 = was unrecoverably dropped from GProxy++
    lang_0220 = Player [$NAME$] reconnected with GProxy++!
    +lang_9000 = Player [$NAME$] has been unmuted after auto mute due to spamming.
    +lang_9001 = Player [$NAME$] has been kicked and banned for spamming!
    +lang_9002 = Player [$NAME$] has been muted due to spamming!
    +lang_9003 = $NAME$, if you continue to spam you will be kicked and banned!
    Index: language_russian.cfg
    ===================================================================
    --- language_russian.cfg (revision 585)
    +++ language_russian.cfg (working copy)
    @@ -221,4 +221,8 @@
    lang_0217 = потерял соединение (соединение закрыто удалённым хостом), но может перезайти, используя GProxy++
    lang_0218 = Пожалуйста ожидайте переподключения ($SECONDS$ секунд осталось).
    lang_0219 = был безвозвратно выкинут с GProxy++
    -lang_0220 = Игрок - $NAME$ переподключился используя GProxy++!
    \ No newline at end of file
    +lang_0220 = Игрок - $NAME$ переподключился используя GProxy++!
    +lang_9000 = Снят мут с [$NAME$] за спам...
    +lang_9001 = Игрок [$NAME$] был выкинут и забанен за спам.
    +lang_9002 = Игрок [$NAME$] получил временный мут за спам.
    +lang_9003 = $NAME$, kick и ban - наказание за спам.

  9. Sky Наш человек

    Сообщения:
    84
    Спасибы:
    18
    Сборка бота GHost:
    LOL_BOT
    Дата начала использования бота:
    12.08.2013
    Skype:
    Мой статус
    з.ы. за оформление не ругать писал в 1раз
  10. Sparko_Dima Старожила

    Сообщения:
    744
    Спасибы:
    104
    Сборка бота GHost:
    Ghost Sparko
    Дата начала использования бота:
    10.10.09
    чет я не понял добавить в конфиг??? а че добавлять то? если там нету ввывода в конфиг
  11. Sky Наш человек

    Сообщения:
    84
    Спасибы:
    18
    Сборка бота GHost:
    LOL_BOT
    Дата начала использования бота:
    12.08.2013
    Skype:
    Мой статус
    lang_1007 = $USER$ улетает в мут на $TIME$сек. за флуд.
    добавляем в language.cfg
    а время мутов берутся от сюда
    # молчанка игроку на X секунд при первом нарушении
    bot_censormutefirstseconds = 30
    # молчанка игроку на X секунд при втором нарушении
    bot_censormutesecondseconds = 60
    # молчанка игроку на X секунд при 3 и более нарушениях
    bot_censormuteexcessiveseconds = 120
  12. Sparko_Dima Старожила

    Сообщения:
    744
    Спасибы:
    104
    Сборка бота GHost:
    Ghost Sparko
    Дата начала использования бота:
    10.10.09
    лол как бы в ghost.h ghost.cpp там в конфиг ввыводить
  13. Sparko_Dima Старожила

    Сообщения:
    744
    Спасибы:
    104
    Сборка бота GHost:
    Ghost Sparko
    Дата начала использования бота:
    10.10.09
    без этих строчек нету смысла ввыводить в конфиг не рабочий))) он будет код
  14. Sky Наш человек

    Сообщения:
    84
    Спасибы:
    18
    Сборка бота GHost:
    LOL_BOT
    Дата начала использования бота:
    12.08.2013
    Skype:
    Мой статус
    поделился давай тести
  15. ıIıIİıİIıımusic Можно доверять

    Сообщения:
    134
    Спасибы:
    2
    Сборка бота GHost:
    Ghost One 1.7.266
    Дата начала использования бота:
    01.01.2013
    Skype:
    Мой статус
    Поделиться то поделился... Спасибо огромное...
    Вот только у него такие же функции как у дотерока?
    Отключает способность давать команды(например пишет фф, а там "ты в муте знач сиди тихо")
    Прыгать с слота на слот?
    Ты просто запросто некоторые функции своей команды... Обязательно протестирую...
  16. Sky Наш человек

    Сообщения:
    84
    Спасибы:
    18
    Сборка бота GHost:
    LOL_BOT
    Дата начала использования бота:
    12.08.2013
    Skype:
    Мой статус
    у меня фф нету мне этого хватает
  17. Begzod Гуру

    Сообщения:
    141
    Спасибы:
    4
    Сборка бота GHost:
    Ghost One 1.7.266
    Дата начала использования бота:
    10.06.2010
    Я еще раз попробовал получилось спс за код!
  18. ___ROB___ Гуру

    Сообщения:
    256
    Спасибы:
    45
    Сборка бота GHost:
    Ghost One 1.7.266
    Дата начала использования бота:
    1.1.1991
    да какая разница текен или не текен.
    есть ghost++, а него уже все остальное вешают (GHostOne, BRT).
    а текен там пару строк изменено и все говорят что *атый бот.
  19. Sparko_Dima Старожила

    Сообщения:
    744
    Спасибы:
    104
    Сборка бота GHost:
    Ghost Sparko
    Дата начала использования бота:
    10.10.09
    помойму кроме фф там и рекламы нечего не добавляли
  20. Sparko_Dima Старожила

    Сообщения:
    744
    Спасибы:
    104
    Сборка бота GHost:
    Ghost Sparko
    Дата начала использования бота:
    10.10.09
    из ghost one Делали брт остальное