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

lang_0129 предложение

Тема в разделе 'Основные вопросы', создана пользователем Mr-Fane, 27 апр 2011.

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

    Сообщения:
    110
    Спасибы:
    4
    Сборка бота GHost:
    GHo 1.7.266
    Приветствую... -_-

    А теперь перейдем к сути дела...

    1.Убераем этот флуд таким образом
    2.В Russian.cfg
    Это:
    Код:
    lang_0129 = Ожидание... Игра начнётся когда наберётся $PLAYERS$ игроков.
    Заменяем на:

    Код:
    lang_0129 = Еще надо $PLAYERSLEFT$  игрока(ов) для автоматического старта
    3.Собственно сама суть моей идеи..и вытекающий вопрос.
    Вот мы имеем такой нестандартный код в game_base.cpp
    Код:
    SendAllChat( "Игрок " + joinPlayer->GetName( ) + " зашел с [" + ( JoinedRealm == string( ) ? "LAN" : JoinedRealm ) + "]" );
    Ставится перед
    Код:
    // check for multiple ip usage.
    Как на основе его сделать примерно такой-же код , но что-бы он выдавал в чат lang_0129

    Тоесть вот к примеру я захожу в игру и в лобби чат пишит примерно такое:

    Код:
    Игрок Ardd зашел c europe.battle.net
    Еще надо 4 игрока(ов) для автоматического старта
    Надеюсь вы поняли меня :)
    Помогите в реализации 3 пункта...Пробовал и так и сяк...сам не допер, как нужно это сделать.
  2. Deals Старожила

    Сообщения:
    784
    Спасибы:
    21
    Сборка бота GHost:
    Ghost One 1.7.266
    Skype:
    Мой статус
    Делаешь все пункты. А именно:
    1. Удаляешь стандартный флуд комментируя 2 строки.
    2. Изменяешь под свой вкус ланг.
    3. Вставляешь код отображение реалма игрока.
    И после (или до, в зависимости от того что хочешь первым увидеть) кода отображения реалма:
    Код:
        SendAllChat( "Игрок " + joinPlayer->GetName( ) + " зашел с [" + ( JoinedRealm == string( ) ? "LAN" : JoinedRealm ) + "]" );
    Вставляешь данный код:
    Код:
    	uint32_t PNr;
    	if (m_GetMapNumTeams<=4)
    		PNr = GetNumHumanPlayers();
    	else
    		PNr = m_Team1+m_Team2+m_Team3+m_Team4;
    	if( PNr < m_AutoStartPlayers )
    	{
    		string s = string();
    		s = m_GHost->m_Language->WaitingForPlayersBeforeAutoStart( UTIL_ToString( m_AutoStartPlayers ), UTIL_ToString( m_AutoStartPlayers - PNr ) );
    		bool EnoughPlayers = false;
    		if (m_GetMapNumTeams!=2)
    		if (GetNumPlayers()>=2)
    			EnoughPlayers = true;
    		if (GetNumPlayers()<2)
    			EnoughPlayers = true;
    		if (m_GetMapNumTeams==2)
    		if (m_Team1>=1 && m_Team2>=1)
    			EnoughPlayers = true;
    		if (m_GHost->m_AutoHostAllowStart && EnoughPlayers)
    			s = s+" "+string(1, m_GHost->m_CommandTrigger)+"start to start now!";
    		if (!s.empty())
    			SendAllChat(s);
    	}
    Не тестировал. Только тест на компиляцию.
    Результат отпишешь.
  3. Mr-Fane Ньюфаг

    Сообщения:
    110
    Спасибы:
    4
    Сборка бота GHost:
    GHo 1.7.266
    Сейчас сделаю, спомпилю опишусь..

    Нельзя как-нибуть проще типо:

    Код:
    SendAllChat( m_GHost->m_Language->WaitingForPlayersBeforeAutoStart);
    Но у меня тут чот не хватает....прошу прощения если предлогаю тупость.Работаю методом анализа ошибок и по освоению материалов этого форума.
  4. Deals Старожила

    Сообщения:
    784
    Спасибы:
    21
    Сборка бота GHost:
    Ghost One 1.7.266
    Skype:
    Мой статус
    Код:
    WaitingForPlayersBeforeAutoStart
    Эта ф-ия должна принимать 2 параметра в виде строки.
    Которые ей обязательно нужно передавать.
    Код:
    m_GHost->m_Language->WaitingForPlayersBeforeAutoStart( UTIL_ToString( m_AutoStartPlayers ), UTIL_ToString( m_AutoStartPlayers - PNr ) );
    Ты передаешь в ланг для вывода UTIL_ToString( m_AutoStartPlayers ) - сколько нужно всего набрать игроков до старта. И UTIL_ToString( m_AutoStartPlayers - PNr ) - сколько осталось игроков набрать соответственно.
    А в сама ф-ия выглядит так:
    Код:
    string CLanguage :: WaitingForPlayersBeforeAutoStart( string players, string playersleft )
    {
    	string Out = m_CFG->GetString( "lang_0129", "lang_0129" );
    	Replace( Out, "$PLAYERS$", players );
    	Replace( Out, "$PLAYERSLEFT$", playersleft );
    	return Out;
    }
    Она из конфига читает ланг 0129 и заменяет $PLAYERS$ фактически на UTIL_ToString( m_AutoStartPlayers ), а $PLAYERSLEFT$ на UTIL_ToString( m_AutoStartPlayers - PNr ). Даже если ты в ланге удалишь $PLAYERS$ и $PLAYERSLEFT$ или хотя бы 1 из них то просто оно не будет выводить его. Но если ты в функцию не передаешь значение - ты даже не скомпилишь т.к. ф-ия принимает значения общего количества игроков до старта и оставшееся количество до старта.
    Либо можно изменить ф-ию таким образом чтоб она принимала только оставшееся количество игроков до старта.
    Но это не для тебя т.к. данные изменения будут затрагивать как минимум 3 файла, а может и более...
  5. Mr-Fane Ньюфаг

    Сообщения:
    110
    Спасибы:
    4
    Сборка бота GHost:
    GHo 1.7.266
    Ага...все верно.Сам в этом убедился сейчас.
    Тыкаю спасибо..все работает -_- Низкий мой поклон

    Мне предсовляется это одно из самых достойных решений связынных с lang_0129 ^^
    Читал твою тему касательно частоты вывода.Все супер но один большой минус:

    Слушай, а можно ли реализовать так что-бы он lang_0129 выдавал только в 2-ух случиях

    1:Когда заходит игрок (С этим мы разобрались)
    2:Когда игрок покидает игру (Хотелось бы реализовать)

    -_-
  6. Mr-Fane Ньюфаг

    Сообщения:
    110
    Спасибы:
    4
    Сборка бота GHost:
    GHo 1.7.266
    Вообще в идеале хочу так:

    1.Когда игрок присоединяется к игре

    Код:
    Bot: Игрок Ardd присоеденился с rubattle.net
    Bot: Страна: LV
    Bot: Пинг: 7
    Bot: +3 игрока(ов) необходимо для автоматического старта
    2.Когда игрок выходит из игры

    Код:
    Bot: +4 игрока(ов) необходимо для автоматического старта
    :rickroll:
  7. Deals Старожила

    Сообщения:
    784
    Спасибы:
    21
    Сборка бота GHost:
    Ghost One 1.7.266
    Skype:
    Мой статус
    Это в game_base.cpp найди:
    Код:
    // this will get overwritten as each player leaves the game so it will eventually be set to the last player
    И сразу после него вставь:
    Код:
    	if( !m_GameLoading && !m_GameLoaded )
    	{
           uint32_t PNr;
           if (m_GetMapNumTeams<=4)
              PNr = GetNumHumanPlayers();
           else
              PNr = m_Team1+m_Team2+m_Team3+m_Team4;
           if( PNr < m_AutoStartPlayers )
           {
              string s = string();
              s = m_GHost->m_Language->WaitingForPlayersBeforeAutoStart( UTIL_ToString( m_AutoStartPlayers ), UTIL_ToString( m_AutoStartPlayers - PNr ) );
              bool EnoughPlayers = false;
              if (m_GetMapNumTeams!=2)
              if (GetNumPlayers()>=2)
                 EnoughPlayers = true;
              if (GetNumPlayers()<2)
                 EnoughPlayers = true;
              if (m_GetMapNumTeams==2)
              if (m_Team1>=1 && m_Team2>=1)
                 EnoughPlayers = true;
              if (m_GHost->m_AutoHostAllowStart && EnoughPlayers)
                 s = s+" "+string(1, m_GHost->m_CommandTrigger)+"start to start now!";
              if (!s.empty())
                 SendAllChat(s);
           }
    	}
  8. Deals Старожила

    Сообщения:
    784
    Спасибы:
    21
    Сборка бота GHost:
    Ghost One 1.7.266
    Skype:
    Мой статус
    Bot: Игрок Ardd присоеденился с rubattle.net
    Bot: Страна: LV
    Bot: Пинг: 7
    Bot: +3 игрока(ов) необходимо для автоматического старта

    Все это легко делается. Только не пойму какого бота ты пытаешься скопировать?
    Давай честно говори где увидел такое?
  9. Mr-Fane Ньюфаг

    Сообщения:
    110
    Спасибы:
    4
    Сборка бота GHost:
    GHo 1.7.266
    Мммм...если у кого-то и есть подобное, то я к этому отношения иметь не буду.
    Видел только насчет реалма если не ошибаюсь у Zarj в ттв картах.Еще в прошлом году вроде.

    Про ланг 0129 все что тут предлогал чисто сам придумал...Про пинг и страну, уже походу этой темы идеи такие пришли.Ведь и правдо удобно, когда все автоматизированно и не надо писать !from !ping и т.д

    У меня просто бот хостит на 6 серверов.Для меня такие параметры как страна и реалм важны.

    Вообще я человек идейный...потом еще придумаю что-то дельное обязательно

    P.S

    Бот пока в процессе...чуть позже напишу о результате, когда скомпилю
  10. Mr-Fane Ньюфаг

    Сообщения:
    110
    Спасибы:
    4
    Сборка бота GHost:
    GHo 1.7.266
    Так ну все работает :vau: Спасибо большое
    Именно то что я хотел :avtoradolf:
    Поможешь реализовать идейки, которые выше упомянул? :prayy:
  11. Deals Старожила

    Сообщения:
    784
    Спасибы:
    21
    Сборка бота GHost:
    Ghost One 1.7.266
    Skype:
    Мой статус
    Да могу как вернусь с работы. Вечером. Если до меня кто-то не отпишет... :bIbIbIblya:
    ]PaLaCh[ нравится это.
  12. Deals Старожила

    Сообщения:
    784
    Спасибы:
    21
    Сборка бота GHost:
    Ghost One 1.7.266
    Skype:
    Мой статус
    Код:
    	SendAllChat( "Страна: " + Player->GetCountry());
    	SendAllChat( "Пинг: " + UTIL_ToString( Player->GetPing( m_GHost->m_LCPings)));
    Последовательность вставки выберешь сам.
    Только вставляй в ф-ии EventPlayerJoined радышком с показа реалма.
    Но мне так кажется с пингом не прокатит т.к. при первом коннекте к боту пинг 0.
  13. Synth (LM) Пантограф!

    Сообщения:
    2.762
    Спасибы:
    172
    Сборка бота GHost:
    My own version of GhostOne
    Дата начала использования бота:
    15.06.2008
    Skype:
    Мой статус
    Пинг измеряется каждые 5 сек. Можно уменьшить интервал. Если не прокатит - покажу где.
  14. Deals Старожила

    Сообщения:
    784
    Спасибы:
    21
    Сборка бота GHost:
    Ghost One 1.7.266
    Skype:
    Мой статус
    Можно его печатать через секунд 5...
  15. Mr-Fane Ньюфаг

    Сообщения:
    110
    Спасибы:
    4
    Сборка бота GHost:
    GHo 1.7.266
    Моей благодарности нету границ :avtoradolf:

    Только следует довести до ума пинг т.к он всегда показывает 0 :facepalm:

    И еще для тех кто будет читать эту тему и хочет себе так-же сделать, код следует писать таким образом:

    Код:
    SendAllChat( "Страна: " + Player->GetCountry());
    SendAllChat( "РџРёРЅРі: " + UTIL_ToString( Player->GetPing( m_GHost->m_LCPings)));
    Тоже самое с реалмом

    Код:
    SendAllChat( "Игрок " + joinPlayer->GetName( ) + " зашел с [" + ( JoinedRealm == string( ) ? "LAN" : JoinedRealm ) + "]" );
    Надо чтоб были вот такие каракули, тогда он отображает это по русски.
  16. Deals Старожила

    Сообщения:
    784
    Спасибы:
    21
    Сборка бота GHost:
    Ghost One 1.7.266
    Skype:
    Мой статус
    Код:
    uint32_t CGamePlayer :: GetPing( bool LCPing )
    {
    	// just average all the pings in the vector, nothing fancy
    
    	// fake pings if needed
    	if (m_Game->m_GHost->ShouldFakePing(GetName()))
    		return 24;
    
    	if( m_Pings.empty( ) )
    		return 0;
    
    	uint32_t AvgPing = 0;
    
    	for( unsigned int i = 0; i < m_Pings.size( ); i++ )
    		AvgPing += m_Pings[i];
    
    	AvgPing /= m_Pings.size( );
    
    	if( LCPing )
    		return AvgPing / 2;
    	else
    		return AvgPing;
    }
    Пичаль не в том что оно каждые 5 сек. А пичаль в том что нужно пинг вызвать 2 раза для игрока. Тогда покажет что-то.
    А сама проблема:
    Код:
    	if( m_Pings.empty( ) )
    		return 0;
  17. Synth (LM) Пантограф!

    Сообщения:
    2.762
    Спасибы:
    172
    Сборка бота GHost:
    My own version of GhostOne
    Дата начала использования бота:
    15.06.2008
    Skype:
    Мой статус
    game_base.cpp
    Код:
    	// ping every 5 seconds
    	// changed this to ping during game loading as well to hopefully fix some problems with people disconnecting during loading
    	// changed this to ping during the game as well
    
    	if( GetTime( ) - m_LastPingTime >= 5)
    :lol:
  18. Mr-Fane Ньюфаг

    Сообщения:
    110
    Спасибы:
    4
    Сборка бота GHost:
    GHo 1.7.266
    LongMan

    Тоесть если поставить 1 то должен сразу показывать пинг? o_O
  19. Synth (LM) Пантограф!

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

    Сообщения:
    784
    Спасибы:
    21
    Сборка бота GHost:
    Ghost One 1.7.266
    Skype:
    Мой статус
    Код:
    		// todotodo: ignore pings received from players who have recently finished downloading the map
    :lol: :lol: :lol:
Статус темы:
Закрыта.