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

Help Cdbgameplayer + getserver

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

  1. Bio Ньюфаг

    Сообщения:
    21
    Спасибы:
    0
    Дата начала использования бота:
    21.03.2013
    Добрый вечер.
    Столкнулся с такой проблемой: при автобане User заносится в БанЛист но без Сервера на котором он получил бан, из-за этого его пускает в лобби игры.
    При ручном добавлении IP сервера, бан вроде работает.
    Следственно, я решил изменить в game.cpp:
    CGame :: ~CGame( )
    {
    uint32_t timehasleft;
    uint32_t endtime = GetTime();
    for( vector<CDBGamePlayer *> :: iterator i = m_DBGamePlayers.begin( ); i != m_DBGamePlayers.end( ); i++ ) {
    if (IsAutoBanned((*i)->GetName()))
    {
    timehasleft = (*i)->GetLeavingTime();
    if (endtime>timehasleft+m_GHost->m_AutoBanGameEndMins*60)
    {
    string Reason = CustomReason( timehasleft, string(), (*i)->GetName() );
    Reason = "Autobanned"+Reason;
    CONSOLE_Print( "[AUTOBAN: " + m_GameName + "] Autobanning " + (*i)->GetName( ) + " (" + Reason +")" );

    m_GHost->m_Callables.push_back(m_GHost->m_DB->ThreadedBanAdd( (*i)->GetSpoofedRealm(), (*i)->GetName( ), (*i)->GetIP(), m_GameName, "AUTOBAN", Reason, m_GHost->m_AutoBanTime, 0 ));
    }
    }
    }

    Вместо (*i)->GetSpoofedRealm() вот это (*i)->GetServer()

    Для этого мне понадобилось добавить следующие:
    в ghostdb.h
    в class CDBGamePlayer
    private:
    string m_Server;
    public:
    CDBGamePlayer( string nServer, ............
    string GetServer( ){ return m_Server; }

    в ghostdb.cpp
    в CDBGamePlayer :: CDBGamePlayer( string nServer, ............
    m_Server = nServer;

    При компилировании возникла 1 ошибка в game.cpp
    Строка
    m_DBGamePlayers.push_back( new CDBGamePlayer( 0, 0, player->GetName( ), player->GetExternalIPString( ), player->GetSpoofed( ) ? 1 : 0, player->GetSpoofedRealm( ), player->GetReserved( ) ? 1 : 0, player->GetFinishedLoading( ) ? player->GetFinishedLoadingTicks( ) - m_StartedLoadingTicks : 0, m_GameTicks / 1000, player->GetLeftReason( ), Team, Colour, SID, player->GetCountry(), GetTime(), m_Team1, m_Team2,LeftEarly ) );

    В начале добавил 0.
    Соответственно ошибка исчезла.
    Вроде бы всё нормально, но понятно что скрытые ошибки есть. Как и следовало ожидать, они не заставили себя долго ждать) В игре, когда игрок теряет соединение:
    Игрок потерял соединение (ошибка соединения - ECONNABORTED).
    Бот крашится, без вывода каких либо ошибок. Зависает и всё...
    Прошу помощи в решении данной проблемы. Может быть вы сталкивались с этим или можете предложить другое решение проблемы с автобаном.
  2. Sparko_Dima Старожила

    Сообщения:
    744
    Спасибы:
    104
    Сборка бота GHost:
    Ghost Sparko
    Дата начала использования бота:
    10.10.09
    ты хотел сказать что у тебя с гарены игроки заходят?-
  3. Bio Ньюфаг

    Сообщения:
    21
    Спасибы:
    0
    Дата начала использования бота:
    21.03.2013
    Игра проходит в Bnet. Игроки из Bnet.
    P.S. GhostOne
  4. Sparko_Dima Старожила

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

    Сообщения:
    744
    Спасибы:
    104
    Сборка бота GHost:
    Ghost Sparko
    Дата начала использования бота:
    10.10.09
    найди у себя bnet.cpp
    Код:
    CDBBan *CBNET :: IsBannedName( string name )
    замени на ту что ниже может поможет
    CDBBan *CBNET :: IsBannedName( string name )
    {
        transform( name.begin( ), name.end( ), name.begin( ), (int(*)(int))tolower );
     
        for( vector<CDBBan *> :: iterator i = m_Bans.begin( ); i != m_Bans.end( ); i++ )
        {
            if( (*i)->GetName( ) == name )
                return *i;
        }
     
        return NULL;
    }
    Bio нравится это.
  6. Bio Ньюфаг

    Сообщения:
    21
    Спасибы:
    0
    Дата начала использования бота:
    21.03.2013
    Там в закомментированных строках был код который ты дал. Попробую сделать как ты посоветовал, но если честно, думаю результата не будет. МБ я что-то не так понял, но в автобане идёт vector<CDBGamePlayer *>
    а уже в простой команде <бан> идёт vector<CBNET *>
    О результатах отпишусь, спасибо.
  7. Bio Ньюфаг

    Сообщения:
    21
    Спасибы:
    0
    Дата начала использования бота:
    21.03.2013
    Ну как я и ожидал) В базу также заносится без IPсервера и бан можно сказать не работает. -cbs выдаёт нет забаненных игроков на этом сервере, так как IP сервера не указан в бане.

    [IMG]

    Потом в ручную указал IPсервера:

    [IMG]

    Соответственно -cbs выдало 1-го забаненного игрока.
    Если ты имел ввиду что на IPсервера бот прекратит обращать внимание, то при заходе в игру он всё-равно пускает.
    И всё-таки я думаю что лучше будет сделать как я попытался, но ещё до-исправить недочёты.
  8. Sparko_Dima Старожила

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

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

    Сообщения:
    21
    Спасибы:
    0
    Дата начала использования бота:
    21.03.2013
    А толку от рефрешов, если при перезапуске бота таже фигня. К тому же простой бан нормально работает.
  11. Sparko_Dima Старожила

    Сообщения:
    744
    Спасибы:
    104
    Сборка бота GHost:
    Ghost Sparko
    Дата начала использования бота:
    10.10.09
    КАКОЙ БОТ?
  12. Bio Ньюфаг

    Сообщения:
    21
    Спасибы:
    0
    Дата начала использования бота:
    21.03.2013
  13. Bio Ньюфаг

    Сообщения:
    21
    Спасибы:
    0
    Дата начала использования бота:
    21.03.2013
    С этими банами млин, напасть какая-то...
    Временно вместо (*i)->GetSpoofedRealm() вписал строку с IP, ну так как играю на 1 сервере.
    Зато теперь не фиксирует последний бан, хотя он с IP сервера, -cbs засчитывает этот бан, НО -cb показывает что игрок не забанен. (именно последний бан).
    Провёл эксперемент, забанил игрока <test> в то время как последний в БанЛисте был <gamer>, но -cb всё-равно не распознало игрока <gamer>, к тому же если -cb не распознало игрока, то я его могу банить сколько угодно.
    При перезапуске бота -cb наконец-то распознало игрока <gamer>, но последняя строка с баном, там уже находится игрок <test> осталась в баге.
  14. Sparko_Dima Старожила

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

    Сообщения:
    673
    Спасибы:
    117
    Сборка бота GHost:
    Ghost++ 17.1 by w3gh
    Дата начала использования бота:
    12.07.2011
    к проверке ников в бане добавить проверку сервера, и переработать кик при бане... проблем то. правда лень это зло :)
  16. Bio Ньюфаг

    Сообщения:
    21
    Спасибы:
    0
    Дата начала использования бота:
    21.03.2013
    Так-то это так. Но проверка сервера при бане и так вроде работает, если сервак не указан, пишет не забанен, получается фурычит. А кик при бане переработать можно. А что на счёт первого моего поста, чтобы добавить в класс Cdbgameplayer аргумент getserver, дабы добавить GetServer в строку автобана? Ладно, сейчас нужно найти ту саму проверку и кик при бане. СпС за идею, ну и как говорится лень - всегда зло :D P.S. Последний строку в БанЛисте -cbs засчитывает но -cb считает его не забаненным, не сталкивался?
  17. Suicider Старожила

    Сообщения:
    673
    Спасибы:
    117
    Сборка бота GHost:
    Ghost++ 17.1 by w3gh
    Дата начала использования бота:
    12.07.2011
    сделал бы за тебя все, но мешают 2 фактора... лень и отсутствие компа с компилятором