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

!ss

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

Статус темы:
Закрыта.
  1. zazulya Ньюфаг

    Сообщения:
    80
    Спасибы:
    0
    что сделать, чтобы вместо ника можно было номер слота поставить. например, чтоб !ss 2 и выводилась статистика игрока на втором слоте. а то заходят и уже по привычке пишут, а ник писать лень им )
    где-то видел по-моему подобную тему здесь, но не нашел (
  2. zazulya Ньюфаг

    Сообщения:
    80
    Спасибы:
    0
    если по-другому вопрос задать ))
    payload - это то что идет после команды, так? т.е.например !ss 1, то payload =="1"?
    дальше нужно вытащить ник игрока, такая команда сойдет?
    Код:
    CGamePlayer *Player = m_GHost->m_CurrentGame->GetPlayerFromSID( sid );
    правильно?
    sid у нас типа unsigned char;
    вопрос, как в sid прочитать payload, который имеет тип string?

    такие нубские вопросы задаю потому что в с++ не шарю, сори
  3. dev Ньюфаг

    Сообщения:
    51
    Спасибы:
    0
    Сборка бота GHost:
    0.0
    Код:
    CGamePlayer *Player = m_GHost->m_CurrentGame->GetPlayerFromSID( UTIL_ToUInt16(Payload) );
    
    if (Player)
    {
         // ......
    }
  4. zazulya Ньюфаг

    Сообщения:
    80
    Спасибы:
    0
    вообщем еще раз все обдумав сделал такую вещь
    bnet.cpp
    Код:
    //
    //!SS
    //
    if( (Command == "ss") && (GetTime()-m_LastStats>=5) && !m_GHost->m_nostatsdota)
    {
         m_LastStats = GetTime();
         string StatsUser = User;
         if (!Payload.empty())
         {
             stringstream tt;
             tt << Payload;
             while (!tt.eof())
             {
                  uint32_t SID;
                  tt >> SID;
                  if (tt.fail())
                  {
                     CONSOLE_Print( "Bad input to show stats command" );
                     break;	
                  }
                 else
                 {
                 string Usr;
                 Usr = Whisper ? User : string( );
                 if (m_GHost->m_WhisperAllMessages)
                 Usr = User;
                 CGamePlayer *Player = m_GHost->m_CurrentGame->GetPlayerFromSID (SID - 1);
                 StatsUser = Player->GetName();
                 if( !StatsUser.empty( ) && StatsUser.size( ) < 16 && StatsUser[0] != '/' )
                   m_PairedDPSChecks.push_back( PairedDPSCheck( Usr, m_GHost->m_DB->ThreadedDotAPlayerSummaryCheck( StatsUser, m_GHost->m_ScoreFormula, m_GHost->m_ScoreMinGames, string() ) ) );
                 StatsUser.clear();
                }
            }
     }
    else
    {
    string Usr;
    Usr = Whisper ? User : string( );
    if (m_GHost->m_WhisperAllMessages)
    	Usr = User;
    StatsUser = User;
    if( !StatsUser.empty( ) && StatsUser.size( ) < 16 && StatsUser[0] != '/' )
    m_PairedDPSChecks.push_back( PairedDPSCheck( Usr, m_GHost->m_DB->ThreadedDotAPlayerSummaryCheck( StatsUser, m_GHost->m_ScoreFormula, m_GHost->m_ScoreMinGames, string() ) ) );
    StatsUser.clear();
    }
    }
    game.cpp
    Код:
    	//
    	//!SS
    	//
    	
    	if( Command == "ss" && GetTime( ) >= player->GetStatsDotASentTime( ) + 5 && !m_GHost->m_nostatsdota )
    	{
    		string StatsUser = User;
    		if (!Payload.empty())
    		{
    			stringstream tt;
    			tt << Payload;
    			while (!tt.eof())
    			{
    				uint32_t SID;
    				tt >> SID;
    				if (tt.fail())
    				{
    					CONSOLE_Print( "Bad input to show stats command" );
    					break;	
    				}
    				else
    				{
    					CGamePlayer *Player = m_GHost->m_CurrentGame->GetPlayerFromSID (SID - 1);
    					StatsUser = Player->GetName();
    					m_PairedDPSChecks.push_back( PairedDPSCheck( User, m_GHost->m_DB->ThreadedDotAPlayerSummaryCheck( StatsUser, m_GHost->m_ScoreFormula, m_GHost->m_ScoreMinGames, string() ) ) );
    					StatsUser.clear();
    				}
    			}
    		}
    		else
    		{
    			StatsUser = User;
    			//if( !StatsUser.empty( ) && StatsUser.size( ) < 16 && StatsUser[0] != '/' )
    			m_PairedDPSChecks.push_back( PairedDPSCheck( User, m_GHost->m_DB->ThreadedDotAPlayerSummaryCheck( StatsUser, m_GHost->m_ScoreFormula, m_GHost->m_ScoreMinGames, string() ) ) );
    			StatsUser.clear();
    		}
    		player->SetStatsDotASentTime( GetTime( ) );
    	}
    чувствую что очень рядом к истине =)
    команда частично работает ) на канале пишу !ss, показывает мою стату, ладно хорошо
    пишу еще раз, молчание, еще раз, молчание, еще раз, пишет мою стату, здесь думаю надо чета где подчистить после использования команды.
    в лобби пишу команду, ну практически тоже самое, и даже работает если написать !ss 1 2 3 4 5
    показывает всех пятерых стату, это хорошо, но также то молчит, то пишет
    потом в итоге если в лобби много раз писать, выкидывает и бот зависает
    вот, кто что скажет, пожайлуста
  5. dev Ньюфаг

    Сообщения:
    51
    Спасибы:
    0
    Сборка бота GHost:
    0.0
    // bnet.cpp

    Код:
    //
    //!SS
    //
    if ( (Command == "ss") && ( GetTime() - m_LastStats >=5 ) && !m_GHost->m_nostatsdota )
    {
         m_LastStats = GetTime();
         string StatsUser = User;
    
         string Usr = Whisper ? User : string( );
    
         if (m_GHost->m_WhisperAllMessages)
    		Usr = User;
    
         if (!Payload.empty())
         {
             stringstream tt;
             tt << Payload;
             while (!tt.eof())
             {
                  uint32_t SID;
                  tt >> SID;
                  if (tt.fail())
                  {
                     CONSOLE_Print( "Bad input to show stats command" );
                     break;   
                  }
                 else
                 {
    
                 CGamePlayer *Player = m_GHost->m_CurrentGame->GetPlayerFromSID (SID - 1);
    
    			 if (Player)
    			 {
    				 StatsUser = Player->GetName();
    
    				 if( !StatsUser.empty( ) && StatsUser.size( ) < 16 && StatsUser[0] != '/' )
    				   m_PairedDPSChecks.push_back( PairedDPSCheck( Usr, m_GHost->m_DB->ThreadedDotAPlayerSummaryCheck( StatsUser, m_GHost->m_ScoreFormula, m_GHost->m_ScoreMinGames, string() ) ) );
    			 }
    
                }
    		}
    	 }
    	else if( !User.empty( ) && User.size( ) < 16 && User[0] != '/' )
    			m_PairedDPSChecks.push_back( PairedDPSCheck( Usr, m_GHost->m_DB->ThreadedDotAPlayerSummaryCheck( User, m_GHost->m_ScoreFormula, m_GHost->m_ScoreMinGames, string() ) ) );
    }
    // game.cpp

    Код:
       //
       //!SS
       //
       
       if( Command == "ss" && GetTime( ) >= player->GetStatsDotASentTime( ) + 5 && !m_GHost->m_nostatsdota )
       {
          string StatsUser = User;
    
          if (!Payload.empty())
          {
             stringstream tt;
             tt << Payload;
             while (!tt.eof())
             {
                uint32_t SID;
                tt >> SID;
                if (tt.fail())
                {
                   CONSOLE_Print( "Bad input to show stats command" );
                   break;   
                }
                else
                {
                   CGamePlayer *Player = GetPlayerFromSID (SID - 1);
    
    			   if ( Player )
    			   {
    					StatsUser = Player->GetName();
    					m_PairedDPSChecks.push_back( PairedDPSCheck( User, m_GHost->m_DB->ThreadedDotAPlayerSummaryCheck( StatsUser, m_GHost->m_ScoreFormula, m_GHost->m_ScoreMinGames, string() ) ) );
    			   }
                }
             }
          }
    		else if( !User.empty( ) && User.size( ) < 16 && User[0] != '/' )
    			 m_PairedDPSChecks.push_back( PairedDPSCheck( User, m_GHost->m_DB->ThreadedDotAPlayerSummaryCheck( User, m_GHost->m_ScoreFormula, m_GHost->m_ScoreMinGames, string() ) ) );
    
          player->SetStatsDotASentTime( GetTime( ) );
       }
    Просто миллион ошибок, даже комментировать не когда.

    П.С
    Возможно что-то упустил, набросал на быструю руку
    По поводу времени вывода команды, эта строчка
    Код:
    GetTime()-m_LastStats>=5
    Разрешает вывод команды не чаще чем в 5 секунд.
  6. zazulya Ньюфаг

    Сообщения:
    80
    Спасибы:
    0
    работает, ура!!! )
    вот только теперь другая команда не работает, в ней проверка идет
    Код:
    if (!m_Stats)
    hidecommand;
    
    видимо из-за внесеных изменений
  7. zazulya Ньюфаг

    Сообщения:
    80
    Спасибы:
    0
    блин это не из-за новой команды, где-то еще чета поправил, капец, и не вспомнить
    подскажите как сравнить код на изменения, на свн как то можно сделать?
  8. zazulya Ньюфаг

    Сообщения:
    80
    Спасибы:
    0
    помогите пожалуйста вообще уже запарился, бота скачал уже с исходников, а та команда не работает, капец
    там проверка if (!m_Stats), это вообще что проверяет, что может быть запущено, как я понял с форума, если функцию какую-нибудь вызвать, например CGame *Player, то выделяется память под m_Stats,еще есть m_Ghost, вместе они не могут быть вызваны.
    команда работала точно 100%, как вообще случилось, что перестала работать, хз, уже мозг кипит, как так вообще
  9. zazulya Ньюфаг

    Сообщения:
    80
    Спасибы:
    0
    вообщем аномальное явление какое-то =)
    вот код команды !end
    Код:
    			if( Command == "end" && m_GameLoaded )
    			{
    				bool access = CMDCheck(CMD_end, AdminAccess); 
    
    				string winnerString = "";
    				uint32_t RequestedWinner = 0;
    				if (!Payload.empty())
    				{
    					if ( !m_Stats )
    					{
    						SendChat(player->GetPID(), m_GHost->m_Language->GetLang("lang_1208"));
    						return HideCommand;
    					}
    и вот код каманды !FF
    Код:
    	else if( Command == "ff" && !player->GetFFVote( ) && m_GameLoaded && m_GHost->m_EnableForfeiting)
    	{
    		if ( !m_Stats )
    		{
    			SendChat(player->GetPID(), m_GHost->m_Language->GetLang("lang_1208"));
    			return HideCommand;
    		}
    какого х***на одна и та же проверка в начале этих команд (!m_Stats) по разному себя ведет, пишу команду !FF, вылазит строчка lang_1208, тут же пишу !end, тикают 5 секунд и игра заканчивается. как так?
    ну народ подскажите, что может быть
  10. zazulya Ньюфаг

    Сообщения:
    80
    Спасибы:
    0
    вобщем таки догнал я в чем проблема была :metal: оказалось когда старый конфиг карты случайно удалил, то в новом конфиге не указал тип карты, вобщем, тупень я
    спасибо, dev, команда !ss работает на ура :avtoradolf:
    теперь буду еще ченить придумывать и :stenka: ))
  11. Trn151195 Ньюфаг

    Сообщения:
    5
    Спасибы:
    0
    Код:
    1>Компиляция...
    1>bnet.cpp
    1>.\bnet.cpp(6854) : error C2059: синтаксическая ошибка: if
    1>.\bnet.cpp(6855) : error C2143: синтаксическая ошибка: отсутствие ";" перед "{"
    1>.\bnet.cpp(6855) : error C2447: {: отсутствует заголовок функции (возможно, используется формальный список старого типа)
    1>game.cpp
    1>.\game.cpp(6133) : error C2059: синтаксическая ошибка: if
    1>.\game.cpp(6134) : error C2143: синтаксическая ошибка: отсутствие ";" перед "{"
    1>.\game.cpp(6134) : error C2447: {: отсутствует заголовок функции (возможно, используется формальный список старого типа)
    1>Журнал построения был сохранен в "file://d:\Games\WarCraft III The Frozen Throne\GHostOne\ghost\Release MySQL\BuildLog.htm"
    1>ghost - ошибок 6, предупреждений 0
    ========== Построение: успешно: 0, с ошибками: 1, без изменений: 2, пропущено: 0 ==========
    
    хелп плиз, а то я не шарю в этом =)
  12. zazulya Ньюфаг

    Сообщения:
    80
    Спасибы:
    0
    ты какие изменения вносил то, по логу у тебя синтаксические ошибки, не хватает знака } или ;
  13. Trn151195 Ньюфаг

    Сообщения:
    5
    Спасибы:
    0
    я вот написал то что dev написал или может я не туда написал?
    там bnet.cpp норм все а в game.cpp ошибкка, я раза 3 компилировал, пытался эту ; поставить не получалось =(
  14. zazulya Ньюфаг

    Сообщения:
    80
    Спасибы:
    0
    Код:
    	//
    	//!SS
    	//
    	
    	if( Command == "ss" && GetTime( ) >= player->GetStatsDotASentTime( ) + 5 && !m_GHost->m_nostatsdota )
    	{
    		string StatsUser = User;
    		if (!Payload.empty())
    		{
    			stringstream tt;
    			tt << Payload;
    			while (!tt.eof())
    			{
    				uint32_t SID;
    				tt >> SID;
    				if (tt.fail())
    				{
    					CONSOLE_Print( "Bad input to show stats command" );
    					break;
    				}
    				else
    				{
    					CGamePlayer *Player = GetPlayerFromSID (SID - 1);
    
    					if (Player)
    					{
    					StatsUser = Player->GetName();
    					m_PairedDPSChecks.push_back( PairedDPSCheck( User, m_GHost->m_DB->ThreadedDotAPlayerSummaryCheck( StatsUser, m_GHost->m_ScoreFormula, m_GHost->m_ScoreMinGames, string() ) ) );
    					}
    				}
    			}
    		}
    		else if( !User.empty( ) && User.size( ) < 16 && User[0] != '/' )
    			m_PairedDPSChecks.push_back( PairedDPSCheck( User, m_GHost->m_DB->ThreadedDotAPlayerSummaryCheck( StatsUser, m_GHost->m_ScoreFormula, m_GHost->m_ScoreMinGames, string() ) ) );
    		
    		player->SetStatsDotASentTime( GetTime( ) );
    
    		m_Stats = 0;	
    	}
    вот это вставь в game.cpp вместо того что уже есть, у меня норм все
  15. Trn151195 Ньюфаг

    Сообщения:
    5
    Спасибы:
    0
    ыва, а ты можешь еще плз на bnet.cpp плз скинуть? заранее спс, а то у мну оказывается в нем ошибка :facepalm:
  16. fake Старожила

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

    Сообщения:
    80
    Спасибы:
    0
    bnet.cpp
    Код:
    				//
    				//!SS
    				//
    
    				if( (Command == "ss") && (GetTime()-m_LastStats>=5) && !m_GHost->m_nostatsdota)
    				{
    					m_LastStats = GetTime();
    					string StatsUser = User;
    					
    					string Usr = Whisper ? User : string( );
    					if (m_GHost->m_WhisperAllMessages)
    						Usr = User;
    
    					if (!Payload.empty())
    					{
    						stringstream tt;
    						tt << Payload;
    						while (!tt.eof())
    						{
    							uint32_t SID;
    							tt >> SID;
    							if (tt.fail())
    							{
    								CONSOLE_Print( "Bad input to show stats command" );
    								//HideCommand;
    								break;
    							}
    							else
    							{
    								CGamePlayer *Player = m_GHost->m_CurrentGame->GetPlayerFromSID (SID - 1);
    								if (Player)
    								{
    								StatsUser = Player->GetName();
    								if( !StatsUser.empty( ) && StatsUser.size( ) < 16 && StatsUser[0] != '/' )
    									m_PairedDPSChecks.push_back( PairedDPSCheck( Usr, m_GHost->m_DB->ThreadedDotAPlayerSummaryCheck( StatsUser, m_GHost->m_ScoreFormula, m_GHost->m_ScoreMinGames, string() ) ) );
    								}
    							}
    						}
    					}
    					else if( !User.empty( ) && User.size( ) < 16 && User[0] != '/' )
    						m_PairedDPSChecks.push_back( PairedDPSCheck( Usr, m_GHost->m_DB->ThreadedDotAPlayerSummaryCheck( StatsUser, m_GHost->m_ScoreFormula, m_GHost->m_ScoreMinGames, string() ) ) );
    				
    				}
  18. Trn151195 Ньюфаг

    Сообщения:
    5
    Спасибы:
    0
    спасибо большое! :rickroll: :prayy:
  19. Apx Ньюфаг

    Сообщения:
    165
    Спасибы:
    0
    Команда крашит бота. Точно не знаю из-за чего, может из-за !ss 1 2 3 4 5, может из-за /w <botname> !ss 1 2 3 4 5, может просто !ss, может зависит от частоты использования, а может от ников игроков кто пишет команду. Короч какая-то из вариаций этой команды крашит бота.

    pS гхост1 .266
  20. zazulya Ньюфаг

    Сообщения:
    80
    Спасибы:
    0
    чем проявляется краш? у меня все нормально, и !ss 1 2 3 4 5 6 7 8 9 10 и просто !ss и в лс боту все норм.
    п.с. то что я написал - да приводило к выкидывнию бота, но изменения внесенные dev'ом все исправили
Статус темы:
Закрыта.