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

GhostOne бан лист в базе

Тема в разделе 'Запуск и Поддержка', создана пользователем ELITE, 6 дек 2012.

  1. ELITE Гуру

    Сообщения:
    252
    Спасибы:
    23
    Дата начала использования бота:
    00.00.2012
    я хостую одновременно несколько батлнет сервером и гарену
    и заметил, что в базу пишет одинаковые записи по числу подключенных бнет серверов

    подскажите как это исправить - надо чтобы была только одна запись
    Код:
                12    1    playground.ru    grinja88    19.22.40.25    2012-12-05 00:00:00    Goblin Survival 0.9.9k    ELITE83    после 0m в "Goblin Survival 0.9.9k"  10*v0 ...    2        0
                11    1    217.76.183.77    grinja88    19.22.40.25    2012-12-05 00:00:00    Goblin Survival 0.9.9k    ELITE83    после 0m в "Goblin Survival 0.9.9k"  10*v0 ...    2        0
                10    1    83.167.24.209    grinja88    19.22.40.25    2012-12-05 00:00:00    Goblin Survival 0.9.9k    ELITE83    после 0m в "Goblin Survival 0.9.9k"  10*v0 ...    2        0
                9    1    warcraft3.eu    grinja88    19.22.40.25    2012-12-05 00:00:00    Goblin Survival 0.9.9k    ELITE83    после 0m в "Goblin Survival 0.9.9k"  10*v0 ...    2        0
  2. ELITE Гуру

    Сообщения:
    252
    Спасибы:
    23
    Дата начала использования бота:
    00.00.2012
    этот баг только на игроков из локальной сети
    если игрок с батлнета - то банит только 1 раз и только для того сервера, с какого он подключен

    тоесть надо както локальную сеть внести как будто это тоже 1 из серверов
    кто знает как это сделать ??
  3. rost Гуру

    Сообщения:
    1.258
    Спасибы:
    150
    Сборка бота GHost:
    LtG
    Дата начала использования бота:
    01.11.2010
    Skype:
    Мой статус
    Просто поправить функцию бана.

    Вот из команды !ban я нашел с game.cpp

    Код:
    for( vector<PairedBanAdd> :: iterator i = m_PairedBanAdds.begin( ); i != m_PairedBanAdds.end( ); )
        {
            if( i->second->GetReady( ) )
            {
                if( i->second->GetResult( ) )
                {
                    for( vector<CBNET *> :: iterator j = m_GHost->m_BNETs.begin( ); j != m_GHost->m_BNETs.end( ); j++ )
                    {
                        string sDate = string();
                        if (i->second->GetExpireDayTime()>0)
                        {
                            struct tm * timeinfo;
                            char buffer [80];
                            time_t Now = time( NULL );
                            Now += 3600*24*i->second->GetExpireDayTime();
                            timeinfo = localtime( &Now );
                            strftime (buffer,80,"%d-%m-%Y",timeinfo);
                            sDate = buffer;
                        }
     
                        if( (*j)->GetServer( ) == i->second->GetServer( ) )
                            (*j)->AddBan( i->second->GetUser( ), i->second->GetIP( ), i->second->GetGameName( ), i->second->GetAdmin( ), i->second->GetReason( ), sDate );
                    }
        }
    Замени на

    Код:
    for( vector<PairedBanAdd> :: iterator i = m_PairedBanAdds.begin( ); i != m_PairedBanAdds.end( ); )
        {
            if( i->second->GetReady( ) )
            {
                if( i->second->GetResult( ) )
                {
                    bool banned = false;
                    for( vector<CBNET *> :: iterator j = m_GHost->m_BNETs.begin( ); j != m_GHost->m_BNETs.end( ); j++ )
                    {
                        string sDate = string();
                        if (i->second->GetExpireDayTime()>0)
                        {
                            struct tm * timeinfo;
                            char buffer [80];
                            time_t Now = time( NULL );
                            Now += 3600*24*i->second->GetExpireDayTime();
                            timeinfo = localtime( &Now );
                            strftime (buffer,80,"%d-%m-%Y",timeinfo);
                            sDate = buffer;
                        }
     
                        if( (*j)->GetServer( ) == i->second->GetServer( ) && !banned)
                              {
                                 (*j)->AddBan( i->second->GetUser( ), i->second->GetIP( ), i->second->GetGameName( ), i->second->GetAdmin( ), i->second->GetReason( ), sDate );
                                  banned = true;
                              } 
                    }
        }
  4. ELITE Гуру

    Сообщения:
    252
    Спасибы:
    23
    Дата начала использования бота:
    00.00.2012
    не помогло
    как я понимаю, он просто не может определить откуда и банит для всех доступных
    вместо того, чтобы просто запанить без указания сервера (точнее вместо сервера написать "гарена"
    я думаю тут надо не бан редактировать, а код, отвечающий за определение откуда игрок подключился