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

Mod Очередной ряд нубских вопросов)

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

  1. fenlod Наш человек

    Сообщения:
    104
    Спасибы:
    3
    Дата начала использования бота:
    12.12.2008
    1.Подскажите плз как вывести в !check, voucher`a (ну чтобы при чеке показывало кто дал вип)
    2.Ну вот хотелось бы сделать что бы когда игроков с определенным кол игр заходит на канал бот ему автоматом админку выдавал
    ghost one,
    с меня спасибки)
  2. MuP .

    Сообщения:
    653
    Спасибы:
    202
    Сборка бота GHost:
    Ghost++ rev 579
    Дата начала использования бота:
    00.00.0000
    1. Легко,там вроде он их сохраняет в вектор.
    2. А у тебя включено при заходе игрока показывать его стату?
    fenlod нравится это.
  3. fenlod Наш человек

    Сообщения:
    104
    Спасибы:
    3
    Дата начала использования бота:
    12.12.2008
    1 подскажи)
    2 да показывает
  4. MuP .

    Сообщения:
    653
    Спасибы:
    202
    Сборка бота GHost:
    Ghost++ rev 579
    Дата начала использования бота:
    00.00.0000
    #1 Команда check работает в игре, значит холд может быть выдан 4 способами, 1 - сейфлист, 2 - через hold, 3 - в конфиге врубить резерв для друзей бота, 4 - в конфиге врубить резерв клана, 5 - админ, 6 - рутадмин. Получение ваучера возможно только для 1 случая. Я глянул, в принципе ничего сложного, вечером кину набросок.

    #2 Заход на канал считаю неправильным событием, т.к. можно так бота напрягать долго и безсполезно, представь что 20-30 людей без перерыва заходят на канал, для каждого бот будет стату смотреть. Ляжет либо проц, либо mysql сервак( кстати какой тип БД используешь?), либо в играх будут страшные тормоза. Оно тебе надо?
    Давай прицепим выдачу админки к команде .stats?
    fenlod нравится это.
  5. fenlod Наш человек

    Сообщения:
    104
    Спасибы:
    3
    Дата начала использования бота:
    12.12.2008
    Ну можно к статс )mysql база
    Хм тогда можно связать что бы он выдал по играем и проценту прибывания?)
  6. MuP .

    Сообщения:
    653
    Спасибы:
    202
    Сборка бота GHost:
    Ghost++ rev 579
    Дата начала использования бота:
    00.00.0000
    Код:
                //
                // !CHECK
                //
     
                if( Command == "check" )
                {
                    if( !Payload.empty( ) )
                    {
                        CGamePlayer *LastMatch = NULL;
                        uint32_t Matches = GetPlayerFromNamePartial( Payload, &LastMatch );
     
                        if( Matches == 0 )
                            SendAllChat( m_GHost->m_Language->UnableToCheckPlayerNoMatchesFound( Payload ) );
                        else if( Matches == 1 ){
                            bool isAdmin = false;
                            bool isSafe = false;
                            string Vouch = string();
                            for( vector<CBNET *> :: iterator i = m_GHost->m_BNETs.begin( ); i != m_GHost->m_BNETs.end( ); i++ )
                            {
                                if( (*i)->GetServer( ) == LastMatch->GetSpoofedRealm())
                                {
                                    isAdmin = (*i)->IsAdmin( LastMatch->GetName());
                                    isSafe = (*i)->IsSafe( LastMatch->GetName() );
                                    Vouch = (*i)->Voucher( LastMatch->GetName() );
                                    break;
                                }
                            }
                            if( isSafe && !isAdmin )
                                SendAllChat( m_GHost->m_Language->CheckedPlayer( LastMatch->GetName( ), LastMatch->GetNumPings( ) > 0 ? UTIL_ToString( LastMatch->GetPing( m_GHost->m_LCPings ) ) + "ms" : "N/A", LastMatch->GetCountry(), "No", IsOwner( LastMatch->GetName( ) ) ? "Yes" : "No", "Yes", LastMatch->GetSpoofedRealm( ), Vouch.empty() ? "Yes, выдано рутом" : "Yes, выдано " + Vouch ) );
                            else
                                SendAllChat( m_GHost->m_Language->CheckedPlayer( LastMatch->GetName( ), LastMatch->GetNumPings( ) > 0 ? UTIL_ToString( LastMatch->GetPing( m_GHost->m_LCPings ) ) + "ms" : "N/A", LastMatch->GetCountry(), isAdmin || IsRootAdmin( LastMatch->GetName() ) ? "Yes" : "No", IsOwner( LastMatch->GetName( ) ) ? "Yes" : "No", LastMatch->GetSpoofed( ) ? "Yes" : "No", LastMatch->GetSpoofedRealm( ).empty( ) ? "N/A" : LastMatch->GetSpoofedRealm( ), LastMatch->GetReserved( ) ? "Yes" : "No" ) );
                        }else
                            SendAllChat( m_GHost->m_Language->UnableToCheckPlayerFoundMoreThanOneMatch( Payload ) );
                    }
                    else
                    {
                        bool isAdmin = false;
                        bool isSafe = false;
                        string Vouch = string();
     
                        for( vector<CBNET *> :: iterator i = m_GHost->m_BNETs.begin( ); i != m_GHost->m_BNETs.end( ); i++ )
                        {
                            if( (*i)->GetServer( ) == m_Server )
                            {
                                isAdmin = (*i)->IsAdmin( User );
                                isSafe = (*i)->IsSafe( User );
                                Vouch = (*i)->Voucher( User );
                                break;
                            }
                        }
                        if( isSafe && !isAdmin )
                            SendAllChat( m_GHost->m_Language->CheckedPlayer( User, player->GetNumPings( ) > 0 ? UTIL_ToString( player->GetPing( m_GHost->m_LCPings ) ) + "ms" : "N/A", m_GHost->m_DBLocal->FromCheck( UTIL_ByteArrayToUInt32( player->GetExternalIP( ), true ) ), "No", "Yes", player->GetSpoofed( ) ? "Yes" : "No", player->GetSpoofedRealm( ).empty( ) ? "N/A" : player->GetSpoofedRealm( ), Vouch.empty() ? "Yes, выдано рутом" : "Yes, выдано " + Vouch ) );
                        else
                            SendAllChat( m_GHost->m_Language->CheckedPlayer( User, player->GetNumPings( ) > 0 ? UTIL_ToString( player->GetPing( m_GHost->m_LCPings ) ) + "ms" : "N/A", m_GHost->m_DBLocal->FromCheck( UTIL_ByteArrayToUInt32( player->GetExternalIP( ), true ) ), isAdmin || RootAdminCheck ? "Yes" : "No", IsOwner( User ) ? "Yes" : "No", player->GetSpoofed( ) ? "Yes" : "No", player->GetSpoofedRealm( ).empty( ) ? "N/A" : player->GetSpoofedRealm( ), player->GetReserved( ) ? "Yes" : "No" ) );
                    }
                }
    Вот тебе про check, компилируй, тестируй*
    fenlod нравится это.
  7. fenlod Наш человек

    Сообщения:
    104
    Спасибы:
    3
    Дата начала использования бота:
    12.12.2008
    Эм спасибо щас затестим)А сделаеш 2?)
  8. MuP .

    Сообщения:
    653
    Спасибы:
    202
    Сборка бота GHost:
    Ghost++ rev 579
    Дата начала использования бота:
    00.00.0000
    Затестишь, отпишись. Только после этого ко 2 части пойдем
  9. fenlod Наш человек

    Сообщения:
    104
    Спасибы:
    3
    Дата начала использования бота:
    12.12.2008
    дал вип на левый ник зашёл !checkme ваучера не выдало компиляция ошибок не дала()
  10. MuP .

    Сообщения:
    653
    Спасибы:
    202
    Сборка бота GHost:
    Ghost++ rev 579
    Дата начала использования бота:
    00.00.0000
    хм, а у тебя спуфчек включен? Просто если и заработает, то цель должна пройти спуфчек. Там я сделал так, чтобы не заморачиваться.
    Ну и лог желательно выдать
    пойду у себя потестирую
    UPD: у себя не получится, у меня 1.38 либ нету
  11. MuP .

    Сообщения:
    653
    Спасибы:
    202
    Сборка бота GHost:
    Ghost++ rev 579
    Дата начала использования бота:
    00.00.0000
    Попробуй заменить
    Код:
    if( (*i)->GetServer( ) == LastMatch->GetSpoofedRealm())
    на
    Код:
    if( (*i)->GetServer( ) == LastMatch->GetJoinedRealm())
    Тогда спуфчек не скажется, хотя это не всегда тру(спуферы не спят)
  12. fenlod Наш человек

    Сообщения:
    104
    Спасибы:
    3
    Дата начала использования бота:
    12.12.2008
    Блин я затупок, му делал чек а не чек ме)))Сори всё работает)
  13. MuP .

    Сообщения:
    653
    Спасибы:
    202
    Сборка бота GHost:
    Ghost++ rev 579
    Дата начала использования бота:
    00.00.0000
    Ай, яй, яй. не хорошо вводить людей в заблуждение.
    Какой % пребывания в игре и сколько игр необходимо для получения админки? Или только по играм?
    fenlod нравится это.
  14. fenlod Наш человек

    Сообщения:
    104
    Спасибы:
    3
    Дата начала использования бота:
    12.12.2008
    Блин главное вышел друга с автобуса встречать понял))
    ну хотелось бы код что бы игры и процент самому делать ну если анреал)
    То от 200 игр)
  15. rost Гуру

    Сообщения:
    1.258
    Спасибы:
    150
    Сборка бота GHost:
    LtG
    Дата начала использования бота:
    01.11.2010
    Skype:
    Мой статус
    пусть процент берет с конфига, вывести несложно.
  16. fenlod Наш человек

    Сообщения:
    104
    Спасибы:
    3
    Дата начала использования бота:
    12.12.2008
    рост решил постебатся)
  17. MuP .

    Сообщения:
    653
    Спасибы:
    202
    Сборка бота GHost:
    Ghost++ rev 579
    Дата начала использования бота:
    00.00.0000
    Код завтра скину, тему перекинул, т.к. уже кодинг пошел
    fenlod нравится это.
  18. MuP .

    Сообщения:
    653
    Спасибы:
    202
    Сборка бота GHost:
    Ghost++ rev 579
    Дата начала использования бота:
    00.00.0000
    В bnet.cpp, 512 строка
    Код:
                if( GamePlayerSummary )
                    QueueChatCommand( m_GHost->m_Language->HasPlayedGamesWithThisBot( i->second->GetName( ), GamePlayerSummary->GetFirstGameDateTime( ), GamePlayerSummary->GetLastGameDateTime( ), UTIL_ToString( GamePlayerSummary->GetTotalGames( ) ), UTIL_ToString( (float)GamePlayerSummary->GetAvgLoadingTime( ) / 1000, 2 ), UTIL_ToString( GamePlayerSummary->GetAvgLeftPercent( ) ) ), i->first, !i->first.empty( ) );
                else
                    QueueChatCommand( m_GHost->m_Language->HasntPlayedGamesWithThisBot( i->second->GetName( ) ), i->first, !i->first.empty( ) );
    меняем на
    Код:
                if( GamePlayerSummary ){
                    QueueChatCommand( m_GHost->m_Language->HasPlayedGamesWithThisBot( i->second->GetName( ), GamePlayerSummary->GetFirstGameDateTime( ), GamePlayerSummary->GetLastGameDateTime( ), UTIL_ToString( GamePlayerSummary->GetTotalGames( ) ), UTIL_ToString( (float)GamePlayerSummary->GetAvgLoadingTime( ) / 1000, 2 ), UTIL_ToString( GamePlayerSummary->GetAvgLeftPercent( ) ) ), i->first, !i->first.empty( ) );
                    if ( !IsAdmin( i->second->GetName() ) && GamePlayerSummary->GetTotalGames( ) > m_GHost->"свой параметр" && GamePlayerSummary->GetAvgLeftPercent( ) > m_GHost->"свой параметр #2" )
                        m_GHost->m_Callables.push_back( m_GHost->m_DB->AdminAdd( m_Server, i->second->GetName() ));
                }else
                    QueueChatCommand( m_GHost->m_Language->HasntPlayedGamesWithThisBot( i->second->GetName( ) ), i->first, !i->first.empty( ) );
    Ну и добавить свои параметры в ghost.cpp/h. Там тебе нужно объявить в ghost.h 2 переменные uint32_t, с названиями переменных сам разберешься. В ghost.cpp сделаешь забор этих значений из конфига, там увидишь как это делается.
    Работать будет только в Battle.net, на канале или при написании в личку боту команды .stats
    p.s. Если сильно влом вместо m_GHost->"свой параметр" и m_GHost->"свой параметр #2" впиши сразу циферки. первое - кол-во игр, второе - процент пребывания в игре
    p.p.s. ну само собой протестишь - отпишись
    fenlod нравится это.
  19. rost Гуру

    Сообщения:
    1.258
    Спасибы:
    150
    Сборка бота GHost:
    LtG
    Дата начала использования бота:
    01.11.2010
    Skype:
    Мой статус
    Ghost.h
    после
    Код:
     uint32_t m_TBanLastTime; 
    вставь
    Код:
     uint32_t m_WinToAdm; 
    Ghost.cpp
    после
    Код:
     m_TBanLastTime = CFG->GetInt( "bot_tbanlasttime", 30 ); 
    вставь
    Код:
     m_WinToAdm = CFG->GetInt( "bot_wintoadm", 0 ); 
    В Ghost.cfg вставь куда тебе хочетсо
    Код:
    # процент побед для выдачи админки, 0 - выключено
    bot_wintoadm = 0
    В Game.cpp
    находишь
    Код:
    for( vector<CBNET *> :: iterator it = m_GHost->m_BNETs.begin( ); it != m_GHost->m_BNETs.end( ); it++ )
    {
     
    if ( (*it)->IsRootAdmin( i->second->GetName() ) )
    {
    isRootAdmin = true;
    break;
    }
     
    if( (*it)->IsAdmin( i->second->GetName() ) )
    {
    isAdmin = true;
    break;
    }
      }
    ниже добавляешь
    Код:
    string Usr = i->second->GetName();
    CGamePlayer *pla = GetPlayerFromName( i->second->GetName(), true );
    if(!isAdmin && !isRootAdmin && m_GHost->m_WinToAdm != 0 && m_GHost->m_WinToAdm < (DotAPlayerSummary->GetTotalWins()/DotAPlayerSummary->GetTotalGames()*100))
    string Payloadd = "INSERT into admins(name,server) VALUES('" + i->second->GetName() + "','" + pla->GetJoinedRealm() + "')";
    m_RunQueries.push_back(m_GHost->m_DB->ThreadedRunQuery(Payloadd));
    
    Нетестировал код. Отпишись. Написал еще вчера, но свет вырубили...





    ---------
    зы: ой, уже дали))
    fenlod нравится это.
  20. MuP .

    Сообщения:
    653
    Спасибы:
    202
    Сборка бота GHost:
    Ghost++ rev 579
    Дата начала использования бота:
    00.00.0000
    Рост, а откуда бот поймет
    Код:
    DotAPlayerSummary->GetTotalWins()/DotAPlayerSummary->GetTotalGames()*10