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

GhostOne Бан по нику

Тема в разделе 'Основные вопросы', создана пользователем hakersoft, 21 фев 2014.

  1. hakersoft Гуру

    Сообщения:
    91
    Спасибы:
    54
    Сборка бота GHost:
    Ghost++ own edition
    Дата начала использования бота:
    20.03.13
    Подскажите, кто знает-Как сделать бан сугубо по нику, без проверки сервера?
    В коде пошарил, но нашел много зависимостей+работа с бд, а что делают те или иные запросы, не совсем понимаю, не хочу напартачить.Есть ли какой-то простой путь?Баны планирую однодневные, а проблема заключается в том - что не кикает игроков с гарены, им присваивается мой внешний ip.GCBI +дополнения пытался поставить, но учитывая что в коде я изменил уже кучу всего, пропатчить не удалось, а вручную патчить крайне проблематично.
    Бд-mysql.
    Также если кто знает, подскажите-как сделать так, когда фулл - кикало не последнего зашедшего игрока при заходе админа\сейфлист, а тех , кто является обычным игроком.Часто бывает что лобби фул, последний зашедший-сейфлист, и при заходе админа кикает именно последнего зашедшего сейфа, а не обычных игроков, которых в лобби тоже достаточно.
    Заранее спасибо.
  2. Doterok Старожила

    Сообщения:
    923
    Спасибы:
    171
    Сборка бота GHost:
    Ghost ++ 17.2
    Дата начала использования бота:
    2011
    Кикает игрока с 10 слота.
    Если хочешь сделать бан по нику вырежи проверку в game_base.cpp
    hakersoft нравится это.
  3. hakersoft Гуру

    Сообщения:
    91
    Спасибы:
    54
    Сборка бота GHost:
    Ghost++ own edition
    Дата начала использования бота:
    20.03.13
    По поводу бана.
    Я не могу найти проверку по серверу, нашел только по ip.Искал в EventPlayerJoined.Вот вырезка:

    // check if the new player's name is banned
    if (m_GHost->m_Banning != 0)
    if (!Reserved)
    if (!m_ScoreCheckChecked)
    for( vector<CBNET *> :: iterator i = m_GHost->m_BNETs.begin( ); i != m_GHost->m_BNETs.end( ); i++ )
    {
    CDBBan *Ban = (*i)->IsBannedName( joinPlayer->GetName( ) );

    if( Ban )
    {
    string sIP = Ban->GetIP();
    if (false)
    // if (sIP==string() && m_GHost->DBType == "mysql")
    if (sIP==string() && m_GHost->DBType == "mysql")
    m_BanUpdates.push_back( m_GHost->m_DB->ThreadedBanUpdate( joinPlayer->GetName(), sIP ) );

    string sReason = Ban->GetReason();
    string sAdmin = Ban->GetAdmin();
    CONSOLE_Print( "[GAME: " + m_GameName + "] player [" + joinPlayer->GetName( ) + "|" + potential->GetExternalIPString( ) + "] is trying to join the game but is banned by name" );
    /* string n=joinPlayer->GetName();
    string s(16-n.length(),' ');
    n=s+n;*/
    if (m_GHost->m_Verbose)
    if ( m_AnnouncedPlayer != joinPlayer->GetName() )
    {
    m_AnnouncedPlayer = joinPlayer->GetName();

    // string sBan = joinPlayer->GetName()+"("+potential->GetExternalIPString()+") is banned by "+sAdmin;
    string sBan = joinPlayer->GetName()+" is banned by "+sAdmin;
    string sBReason = sBan + ", "+sReason;

    if (m_GHost->m_Banning == 2)
    if (sReason=="")
    SendAllChat( sBan );
    else
    {
    if (sBReason.length()<250 && !m_GHost->m_TwoLinesBanAnnouncement)
    SendAllChat( sBReason );
    else
    {
    SendAllChat( sBan );
    SendAllChat( "Ban reason: " + sReason );
    }
    }

    // string s= m_GHost->m_Language->TryingToJoinTheGameButBanned( joinPlayer->GetName() + "|" + potential->GetExternalIPString( ), Ban->GetAdmin() );
    string s= m_GHost->m_Language->TryingToJoinTheGameButBanned( joinPlayer->GetName(), Ban->GetAdmin() );
    string sr = s+", "+sReason;

    if (m_GHost->m_Banning != 2)
    if (sReason=="")
    {
    SendAllChat(s);
    } else
    {
    if (sr.length()<250)
    SendAllChat(sr);
    else
    {
    SendAllChat(s);
    SendAllChat("Ban reason: "+sReason);
    }
    }
    }
    // let banned players "join" the game with an arbitrary PID then immediately close the connection
    // this causes them to be kicked back to the chat channel on battle.net

    if (m_Bans)
    {
    vector<CGameSlot> Slots = m_Map->GetSlots( );
    potential->Send( m_Protocol->SEND_W3GS_SLOTINFOJOIN( 1, potential->GetSocket( )->GetPort( ), potential->GetExternalIP( ), Slots, 0, m_Map->GetMapGameType( ) == GAMETYPE_CUSTOM ? 3 : 0, m_Map->GetMapNumPlayers( ) ) );
    potential->SetDeleteMe( true );
    return;
    }

    /*
    potential->Send( m_Protocol->SEND_W3GS_REJECTJOIN( REJECTJOIN_FULL ) );
    potential->SetDeleteMe( true );
    return;
    */
    }
    }

    // check if the new player's ip is banned
    if (!Reserved)
    if (!m_ScoreCheckChecked)
    if (!potential->IsLAN())
    if (m_GHost->m_IPBanning!=0)
    for( vector<CBNET *> :: iterator i = m_GHost->m_BNETs.begin( ); i != m_GHost->m_BNETs.end( ); i++ )
    {
    CDBBan *IPBan = (*i)->IsBannedIP(potential->GetExternalIPString( ) );

    if( IPBan )
    {
    string sReason = IPBan->GetReason();
    string sName = IPBan->GetName();
    string sAdmin = IPBan->GetAdmin();
    CONSOLE_Print( "[GAME: " + m_GameName + "] player [" + joinPlayer->GetName( ) +"("+potential->GetExternalIPString()+")"+ "] is trying to join the game but is IP banned" );
    /*
    string n=Player->GetName();
    string s(16-n.length(),' ');
    n=s+n;*/
    if (m_GHost->m_IPBanning==1)
    if (m_GHost->m_Verbose)
    {
    SendAllChat( m_GHost->m_Language->TryingToJoinTheGameButBanned( joinPlayer->GetName(), IPBan->GetAdmin()) );
    // SendAllChat( m_GHost->m_Language->TryingToJoinTheGameButBanned( joinPlayer->GetName()+"("+potential->GetExternalIPString()+")", IPBan->GetAdmin()) );
    if (sReason!="")
    // SendAllChat ( sName +"("+potential->GetExternalIPString()+") ban reason: "+sReason);
    SendAllChat ( "Ban reason: "+sReason);
    // else
    // SendAllChat ( sName +"("+potential->GetExternalIPString()+")");

    }
    if (m_GHost->m_IPBanning==1 && m_Bans)
    {
    // let banned players "join" the game with an arbitrary PID then immediately close the connection
    // this causes them to be kicked back to the chat channel on battle.net

    vector<CGameSlot> Slots = m_Map->GetSlots( );
    potential->Send( m_Protocol->SEND_W3GS_SLOTINFOJOIN( 1, potential->GetSocket( )->GetPort( ), potential->GetExternalIP( ), Slots, 0, m_Map->GetMapGameType( ) == GAMETYPE_CUSTOM ? 3 : 0, m_Map->GetMapNumPlayers( ) ) );
    potential->SetDeleteMe( true );
    return;

    /*
    potential->Send( m_Protocol->SEND_W3GS_REJECTJOIN( REJECTJOIN_FULL ) );
    potential->SetDeleteMe( true );
    return;
    */
    }
    if (m_GHost->m_IPBanning==2)
    {
    string sBan = joinPlayer->GetName()+"(IP banned as "+sName+") by "+sAdmin;
    // string sBan = joinPlayer->GetName()+"("+potential->GetExternalIPString()+") is IP banned by "+sAdmin;
    string sBReason = sBan + ", "+sReason;

    if (sReason=="")
    SendAllChat( sBan );
    else
    {
    if (sBReason.length()<220 && !m_GHost->m_TwoLinesBanAnnouncement)
    SendAllChat( sBReason );
    else
    {
    SendAllChat( sBan );
    SendAllChat( "Ban reason: " + sReason );
    }
    }
    }
    }
    }

    Вот скрин с бд.
    [IMG]
    Там где сервер 127.0.0.1-это айкап, с ним баны работают отлично, там где server пустой-это гарена, баны не работают, и в качестве ip игроков им присваивается мой внешний ip.
    Вопрос в том, что при заходе проверяет таки на сервер или на ip игрока?Или искать надо не EventPlayerJoined?
  4. Doterok Старожила

    Сообщения:
    923
    Спасибы:
    171
    Сборка бота GHost:
    Ghost ++ 17.2
    Дата начала использования бота:
    2011
    Судя по коду у тебя и идет проверка на бан чисто по нику
    в ghostbdmysql.cpp
    Найди блок
    После этих строк
    Код:
                mysql_free_result( Result );
            }
            else
                *error = mysql_error( (MYSQL *)conn );
        }
    добавь
    В ghost.cfg добавь новый сервер и обозначь его как гарена

    типа
    Ещё можно строчку
    Заменить на
    ZeratuL1986, bic и hakersoft нравится это.
  5. hakersoft Гуру

    Сообщения:
    91
    Спасибы:
    54
    Сборка бота GHost:
    Ghost++ own edition
    Дата начала использования бота:
    20.03.13
    Doterok, спасибо тебе огромное, человечище!Все получилось.Единственное что это
    Ещё можно строчку
    if (m_GHost->m_IPBanning!=0)
    Заменить на
    if (m_GHost->m_IPBanning!=0 && JoinedRealm != "garena")

    было лишним,с этим изменением не работало,поставил на дефоулт-заработало.
  6. Doterok Старожила

    Сообщения:
    923
    Спасибы:
    171
    Сборка бота GHost:
    Ghost ++ 17.2
    Дата начала использования бота:
    2011
    Странно, но и ладно)
    Это фикс что бы не чекал айпишник для игроков с гарены
    по доброму и админки должны на гарену даваться, только в поле сервер указавыть как garena, проверь)
  7. hakersoft Гуру

    Сообщения:
    91
    Спасибы:
    54
    Сборка бота GHost:
    Ghost++ own edition
    Дата начала использования бота:
    20.03.13
    Админки у меня уже давно даются, нашел мелкий фикс на codelain
    One way you could do this would be to allow LAN users with the same username as an admin on a realm that the bot is connected to (in your case, I guess eurobattle?).
    To do that, you can go to game.cpp and change
    Code:
    if( (*i)->GetServer( ) == player->GetSpoofedRealm( ) && (*i)->IsAdmin( User ) )
    to
    Code:
    if( ( (*i)->GetServer( ) == player->GetSpoofedRealm( ) || player->GetJoinedRealm( ).empty( ) ) && (*i)->IsAdmin( User ) )
    ZeratuL1986 нравится это.
  8. ___ROB___ Гуру

    Сообщения:
    256
    Спасибы:
    43
    Сборка бота GHost:
    Ghost One 1.7.266
    Дата начала использования бота:
    1.1.1991
    Код:
    bnet_server = garena
    bnet_serveralias = Garena
    bnet_cdkeyroc = FFFFFFFFFFFFFFFFFFFFFFFFFF
    bnet_cdkeytft = FFFFFFFFFFFFFFFFFFFFFFFFFF
    bnet_username = da
    bnet_password = da
    економим байты -_-
  9. ___ROB___ Гуру

    Сообщения:
    256
    Спасибы:
    43
    Сборка бота GHost:
    Ghost One 1.7.266
    Дата начала использования бота:
    1.1.1991
    соль в том, что переменная "JoinedRealm" по умолчанию равна пустоте, можно сделать еще проще.
    обьявить её как-то так
    Код:
    string JoinedRealm = "garena";
    тем самым все пользователи которые будут заходить будут иметь сервер гарены, а затем дальнейшие проверки будут назначать уже реальный сервер.
    короче некуда^
    ZeratuL1986 нравится это.
  10. ___ROB___ Гуру

    Сообщения:
    256
    Спасибы:
    43
    Сборка бота GHost:
    Ghost One 1.7.266
    Дата начала использования бота:
    1.1.1991
  11. Suicider Старожила

    Сообщения:
    672
    Спасибы:
    116
    Сборка бота GHost:
    Ghost++ 17.1 by w3gh
    Дата начала использования бота:
    12.07.2011
    Skype:
    Мой статус
    Хватит квотить посты...
  12. Doterok Старожила

    Сообщения:
    923
    Спасибы:
    171
    Сборка бота GHost:
    Ghost ++ 17.2
    Дата начала использования бота:
    2011
    Все ответы есть, если ты их не понимаешь тебе не помогут, человеку который регает 4-5 аккаунт на форуме я помогать не буду
  13. ___ROB___ Гуру

    Сообщения:
    256
    Спасибы:
    43
    Сборка бота GHost:
    Ghost One 1.7.266
    Дата начала использования бота:
    1.1.1991
    так ето же fun2mass :D
    Sky нравится это.
  14. Sky Наш человек

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