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

Не кикаются спуферщики

Тема в разделе 'Кодинг/Собственные решения', создана пользователем StafiloKOK, 25 фев 2011.

  1. StafiloKOK Ньюфаг

    Сообщения:
    19
    Спасибы:
    0
    Сегодня наблюдал такую картину: игра была забита полностью, и один из игроков был под спуфером (это было явно видно, т.к. ник был "Открыто"). Из-за этого бот каждые неск. секунд писал "Players not yet spoof checked: Открыто", и естественно игра не начиналась, а что самое странное, сам спуферщик не кикался. :spy:

    Игра была создана через команду .autohost
    В конфиге бота стоит:
    bot_spoofchecks = 1
    bot_requirespoofchecks = 1

    На самом деле глядя в game_base.cpp я ваще не вижу никакого "кика":
    Код:
    void CBaseGame :: StartCountDownAuto( bool requireSpoofChecks )
    Вот кусок (код стандартный), который за это по идее должен отвечать:
    Код:
    	// check if everyone is spoof checked
    
    	string NotSpoofChecked;
    
    	if( m_GHost->m_RequireSpoofChecks )
    	{
    		for( vector<CGamePlayer *> :: iterator i = m_Players.begin( ); i != m_Players.end( ); i++ )
    		{
    			if( !(*i)->GetSpoofed( ) )
    			{
    				if( NotSpoofChecked.empty( ) )
    					NotSpoofChecked = (*i)->GetName( );
    				else
    					NotSpoofChecked += ", " + (*i)->GetName( );
    			}
    		}
    
    		if( !NotSpoofChecked.empty( ) )
    			SendAllChat( m_GHost->m_Language->PlayersNotYetSpoofChecked( NotSpoofChecked ) );
    	}
    В чём подвох-то?
  2. festival Старожила

    Сообщения:
    368
    Спасибы:
    0
    Через 20 секунд не было автоКика?

    Вот автоКик автоХоста game_base.cpp ~853
    Код:
    	// kick players who don't spoof check within 20 seconds when spoof checks are required and the game is autohosted
    
    	if( !m_CountDownStarted && m_GHost->m_RequireSpoofChecks && m_GameState == GAME_PUBLIC && !m_GHost->m_AutoHostGameName.empty( ) && m_GHost->m_AutoHostMaximumGames != 0 && m_GHost->m_AutoHostAutoStartPlayers != 0 && m_AutoStartPlayers != 0 )
    	{
    		for( vector<CGamePlayer *> :: iterator i = m_Players.begin( ); i != m_Players.end( ); i++ )
    		{
    			if( !(*i)->GetSpoofed( ) && GetTime( ) - (*i)->GetJoinTime( ) >= 20 )
    			{
    				(*i)->SetDeleteMe( true );
    				(*i)->SetLeftReason( m_GHost->m_Language->WasKickedForNotSpoofChecking( ) );
    				(*i)->SetLeftCode( PLAYERLEAVE_LOBBY );
    				OpenSlot( GetSIDFromPID( (*i)->GetPID( ) ), false );
    			}
    		}
    	}
    Можно сделать спуфчек и пинг за 2 сек и автокик через 3 секунды.
  3. StafiloKOK Ньюфаг

    Сообщения:
    19
    Спасибы:
    0
    Не было. Я смотрел на него достаточно долго. За это время прошло много сообщений "Players not yet spoof checked: Открыто"..
  4. StafiloKOK Ньюфаг

    Сообщения:
    19
    Спасибы:
    0
    На самом деле щас появилась мысль, что причина может быть в условии

    Выделил жирным.
    Т.е. это же параметр bot_autohostmaximumgames из конфига, и у меня он стоит равным 0.
    Хотя логики я не понимаю, я же не юзаю автохост (который сам включается при запуске бота), я юзаю только "принудительную" команду .autohost

    Зачем это условие туда засунуто, вообще не ясно.
  5. fake Старожила

    Сообщения:
    1.624
    Спасибы:
    19
    Дата начала использования бота:
    11.11.11
    в команде автохост ты указываеш этот параметр
  6. StafiloKOK Ньюфаг

    Сообщения:
    19
    Спасибы:
    0
    Короче я был прав. Проблема отпала когда изменил условие на это:
    Код:
    if( !m_CountDownStarted && m_GHost->m_RequireSpoofChecks && m_GameState == GAME_PUBLIC && m_AutoStartPlayers != 0 )
    Теперь спуферщики кикаются во всех автохостных играх.