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

Solved !server

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

  1. Fruttty Ньюфаг

    Сообщения:
    14
    Спасибы:
    0
    Народ вот очень интересно возможно ли такое?
    Вот например пишешь тот же !ping !from а если уже есть настроенный бот под разные сервера можно ли сделать такое чтобы писал он сервера кто с какого? :prayy: :prayy: :spydance: :alequate:


    не указал((( GhostOne 1.7.266 :facepalm:
  2. Aloha_Hawaii Старожила

    Сообщения:
    314
    Спасибы:
    33
    Сборка бота GHost:
    Ghost One 1.7.266
    :buba: ХОРОШАЯ ИДЕЯ
  3. slik Наш человек

    Сообщения:
    81
    Спасибы:
    0
    оригинальный ответ, как в лужу пернул :lol: :jump:
  4. slik Наш человек

    Сообщения:
    81
    Спасибы:
    0
  5. notingemius Парнишка с небывалым умом

    Сообщения:
    50
    Спасибы:
    0
  6. Aloha_Hawaii Старожила

    Сообщения:
    314
    Спасибы:
    33
    Сборка бота GHost:
    Ghost One 1.7.266
    он имел в виду команду, которую пишешь в игре и тебе выводит "vasek:pg, buba:garena..."
  7. rost Гуру

    Сообщения:
    1.258
    Спасибы:
    150
    Сборка бота GHost:
    LtG
    Дата начала использования бота:
    01.11.2010
    Skype:
    Мой статус
    !realm - вроде так
    хотя у всех по разному...
  8. barraka Ньюфаг

    Сообщения:
    14
    Спасибы:
    0
    Две версии, для админов и для пользователей. Можно использовать одновременно.

    Для администрации.
    Код:
    !server <NAME>
    Вывод в общий чат
    Код:
    NAME: SERVER
    Где NAME - имя пользователя, SERVER - сервер с которого зашел пользователь.

    Если часть NAME отсутствует, то выводит в чат список всех пользователей в лобби с указанием серверов.
    Код:
    NAME1: SERVER1, NAME2: SERVER2, NAME3: SERVER3,..., NAMEn: SERVERn
    Вставить в game.cpp строка ~3943
    Код:
    //
    // !SERVER
    //
    
    if( Command == "server" )
    {
    	string ServerUser;
    
    	if( !Payload.empty( ) )
    	{
    		CGamePlayer *LastMatch = NULL;
    
    		uint32_t Matches = GetPlayerFromNamePartial( Payload , &LastMatch );
    		if (Matches == 1)
    		{
    			ServerUser = LastMatch->GetName( );
    			ServerUser += ": ";
    			ServerUser += LastMatch->GetSpoofedReal( );
    		}
    		else
    			ServeUser = "Error. Player not found.";
    
    		SendAllChat( ServerUser );
    	}
    	else
    	{
    		for( vector<CGamePlayer *> :: iterator i = m_Players.begin( ); i != m_Players.end( ); i++ )
    		{
    			if ( i == m_Players.begin( ) )
    				ServerUser = (*i)->GetName( );
    			else
    				ServerUser += (*i)->GetName( );
    
    			ServerUser += ": ";
    			ServerUser += (*i)->GetSpoofedRealm( );
    
    			if( i != m_Players.end( ) - 1 )
    				ServerUser += ", ";
    		}
    
    		SendAllChat( ServerUser );
    	}
    }
    Для пользователей.
    Код:
    !server <NAME>
    Вывод в общий чат
    Код:
    NAME: SERVER
    Где NAME - имя пользователя, SERVER - сервер с которого зашел пользователь.

    Если часть NAME отсутствует, то посылает сообщение пользователю, написавшему команду, с указанием сервера, с которого он зашел.
    Код:
    SERVER
    Вставить в game.cpp строка ~5553
    Код:
    if( Command == "server" )
    {
       if( !Payload.empty( ) )
       {
          string ServerUser;
    
          CGamePlayer *LastMatch = NULL;
    
          uint32_t Matches = GetPlayerFromNamePartial( Payload , &LastMatch );
          if (Matches == 1)
          {
             ServerUser = LastMatch->GetName( );
             ServerUser += ": ";
             ServerUser += LastMatch->GetSpoofedReal( );
          }
          else
             ServeUser = "Error. Player not found.";
    
          SendAllChat( ServerUser );
       }
       else
    	   SendChat( player,  player->GetSpoofedRealm( ) );
    }

    Что бы всё это использовать надо скомпилировать отредактированные исходники. Про компиляцию смотри в соответствующем разделе.
    P.S. Просто набросал, сам не проверял, но должно работать)
  9. rost Гуру

    Сообщения:
    1.258
    Спасибы:
    150
    Сборка бота GHost:
    LtG
    Дата начала использования бота:
    01.11.2010
    Skype:
    Мой статус
    Код:
    ServerUser += LastMatch->GetSpoofedReal( );
    Realm ! Допишите у кого будут ошибки в компиляции... нехватает буквы m

    PS: тут плохо что покажет сервер... у меня показует его название)
    Ну типа не war3.alkar.net а Alkar
  10. Synth (LM) Пантограф!

    Сообщения:
    2.762
    Спасибы:
    172
    Сборка бота GHost:
    My own version of GhostOne
    Дата начала использования бота:
    15.06.2008
    Skype:
    Мой статус
    Вопрос: ты компилировал?
  11. Synth (LM) Пантограф!

    Сообщения:
    2.762
    Спасибы:
    172
    Сборка бота GHost:
    My own version of GhostOne
    Дата начала использования бота:
    15.06.2008
    Skype:
    Мой статус
    Оп :D
  12. Aloha_Hawaii Старожила

    Сообщения:
    314
    Спасибы:
    33
    Сборка бота GHost:
    Ghost One 1.7.266
    еще
    Код:
    ServeUser = "Error. Player not found.";
    Serve

    компилится норм, но показывает ники без серверов :limon:
  13. Synth (LM) Пантограф!

    Сообщения:
    2.762
    Спасибы:
    172
    Сборка бота GHost:
    My own version of GhostOne
    Дата начала использования бота:
    15.06.2008
    Skype:
    Мой статус
    Необъявленная переменная и функция - компилится норм? :avtoradolf:
  14. barraka Ньюфаг

    Сообщения:
    14
    Спасибы:
    0
    Код для админов. (game.cpp ~5498)
    Код:
    //
    // !SERVER
    //
    
    if( Command == "server" )
    {
    	string ServerUser;
    
    	if( !Payload.empty( ) )
    	{
    		CGamePlayer *LastMatch = NULL;
    
    		uint32_t Matches = GetPlayerFromNamePartial( Payload , &LastMatch );
    		if (Matches == 1)
    		{
    			ServerUser = LastMatch->GetName( );
    			ServerUser += ": ";
    			ServerUser += LastMatch->GetSpoofedRealm( ).empty( ) ? "N/A" : LastMatch->GetSpoofedRealm( );
    		}
    		else
    			ServerUser = "Error. Player not found.";
    
    		SendAllChat( ServerUser );
    	}
    	else
    	{
    		for( vector<CGamePlayer *> :: iterator i = m_Players.begin( ); i != m_Players.end( ); i++ )
    		{
    			if ( i == m_Players.begin( ) )
    				ServerUser = (*i)->GetName( );
    			else
    				ServerUser += (*i)->GetName( );
    
    			ServerUser += ": ";
    			ServerUser += (*i)->GetSpoofedRealm( ).empty( ) ? "N/A" : (*i)->GetSpoofedRealm( );
    
    			if( i != m_Players.end( ) - 1 )
    				ServerUser += ", ";
    		}
    
    		SendAllChat( ServerUser );
    	}
    
    	return HideCommand;
    }
    Код для пользователей. (game.cpp ~5896)
    Код:
    //
    // !SERVER
    //
    
    if( Command == "server" )
    {
       string ServerUser;
    
       if( !Payload.empty( ) )
       {
    	  CGamePlayer *LastMatch = NULL;
    
    	  uint32_t Matches = GetPlayerFromNamePartial( Payload , &LastMatch );
    	  if (Matches == 1)
    	  {
    		 ServerUser = LastMatch->GetName( );
    		 ServerUser += ": ";
    		 ServerUser += LastMatch->GetSpoofedRealm( ).empty( ) ? "N/A" : LastMatch->GetSpoofedRealm( );
    	  }
    	  else
    		 ServerUser = "Error. Player not found.";
    
    	  SendAllChat( ServerUser );
       }
       else
    	   SendChat( player,  player->GetSpoofedRealm( ) );
    }
    На первом скрине двойное сообщение от бота, код приведен уже с фиксом.
    [IMG] [IMG]



    Здесь всё правильно. !server <NAME>, бот сначала ищет совпадение NAME с одним из имён в текущем списке игроков. На 1 скрине как раз показано, что поиск происходит по части имени.
  15. rost Гуру

    Сообщения:
    1.258
    Спасибы:
    150
    Сборка бота GHost:
    LtG
    Дата начала использования бота:
    01.11.2010
    Skype:
    Мой статус
    Почему ан 1 скрине бот ответил 2-ды?? У меня есть догадка, но мб твоя версия?
  16. fake Старожила

    Сообщения:
    1.624
    Спасибы:
    19
    Дата начала использования бота:
    11.11.11
    playerjoin
    playerjoinwithsocre
  17. MuP .

    Сообщения:
    653
    Спасибы:
    202
    Сборка бота GHost:
    Ghost++ rev 579
    Дата начала использования бота:
    00.00.0000
    Сильно извиняюсь, но стандартная команда check <nickname> уже не катит?
  18. barraka Ньюфаг

    Сообщения:
    14
    Спасибы:
    0
    Проверка на поступившую команду происходит два раза, для администрации и пользователей соответственно, в теле метода
    Код:
    bool CGame :: EventPlayerBotCommand( CGamePlayer *player, string command, string payload 
    В той ситуации когда выплало два сообщения подряд, команда !server была сначала обработана кодом для администрации и следом кодом для пользователей. Что, как понятно, не должно происходить, после обработки сообщения от админа должен быть выход из метода.
    Код:
    if( Command == "server" )
    {
    	string ServerUser;
    
    	if( !Payload.empty( ) )
    		...
    	else
    		...
    
    	return HideCommand;  //Здесь выход из метода
    }
  19. rost Гуру

    Сообщения:
    1.258
    Спасибы:
    150
    Сборка бота GHost:
    LtG
    Дата начала использования бота:
    01.11.2010
    Skype:
    Мой статус
    ААаа.... точно и забыл. Выстави жпроверку для тех и тех типа) Ну чтобы админы тогда немогли юзать команду юзерскую, будет удобнее для тех кто код юзать будет офк
  20. MuP .

    Сообщения:
    653
    Спасибы:
    202
    Сборка бота GHost:
    Ghost++ rev 579
    Дата начала использования бота:
    00.00.0000
    А не легче обе команды в одну объеденить? внутри разделить на:
    1) Payload(есть или нет)
    2) Админ или не админ
    Кинуть в команды для всех. Будет всё в 1 месте, легко найти при случае.