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

Решение с частотой вывода lang_0129

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

  1. Deals Старожила

    Сообщения:
    784
    Спасибы:
    21
    Сборка бота GHost:
    Ghost One 1.7.266
    Skype:
    Мой статус
    Сидя и думая что многие хотят чтоб надпись "$PLAYERSLEFT$ more until game starts." появлялась реже. У меня возникла идея внести данную настройку в конфиг.
    Ниже описано для GHost One 1.7.266
    И так тут описываю для тех кто не шарит в компиляции, исходниках и т.д.
    • 1. Скачиваем ghost.exe и заменяем который есть (выложен в архиве).
      2. Идем в файл ghost.cfg и добавляем туда следующее:
    Здесь описываю для тех кто шарит в исходниках, SVN, компиляции.
    • 1. Применяем патч на ревизию GHostOne 249 (GHostOne r.256 patch).
      2. Компилим.
      3. Если после компиляции использовать бота будете впервые (в нем еще нету ghost.cfg) то данный пункт можно пропустить.
      4. Если вы хотите заменить скомпиленный ghost.exe - лезите в ghost.cfg и добавляете следующее:

    Замечание: Обратите внимание что это время не только показа lang_0129, но это еще и время с момента захода и пинговки последнего игрока до старта игры. Время в секундах.
    Т.е. если последний игрок вошел в игру (его пропинговало) то игра начнется через 2 минуты (если стоит bot_timedisplayneedplayers = 120). Т.е. пока пройдет 2 минуты игроки которые были в лобби могут начать ливать. Т.е. разумно ставить в пределах 20-40 секунд.

    Вот собственно и все.
  2. Deals Старожила

    Сообщения:
    784
    Спасибы:
    21
    Сборка бота GHost:
    Ghost One 1.7.266
    Skype:
    Мой статус
  3. festival Старожила

    Сообщения:
    368
    Спасибы:
    0
    Ссылки устарели. Скажи пожалуйста, где берется в коде кулл-даун выбрасывание lang_0129.
  4. fake Старожила

    Сообщения:
    1.624
    Спасибы:
    19
    Дата начала использования бота:
    11.11.11
    поиск по исходникам сломался?...
    зы:есть идея как сделать гораздо лучше систему автохоста\старта...
  5. festival Старожила

    Сообщения:
    368
    Спасибы:
    0
    Да что-то не получается.
    КД на пинг, спуф и трай старт поменял а флуд не убрал.

    Я автохост не юзаю, просто pub, hcl, autostart и курить, а бот тут флудит за двоих.
  6. frakc Ньюфаг

    Сообщения:
    34
    Спасибы:
    1
    флуд можно убрать другим способом - неэтичным:

    game_base.ccp
    ищете WaitingForPlayersBeforeAutoStart
    находите этот блок
    Код:
    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);
    эти две стро увидите в комент
    if (!s.empty())
    SendAllChat(s);[/code]

    получается такое

    Код:
    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);
    и все это сообщение больше не появится, разумеется не совсем то о чем говорил автор ( изминить частоту) но если флуд закол*, то пойдет
  7. fokevolt Ньюфаг

    Сообщения:
    13
    Спасибы:
    0
    окей. все нашел, прочитал, понял, закомментировал.
    только не знаю какой проект компилить...
    [IMG]
  8. ____ROB____ Старожила

    Сообщения:
    1.008
    Спасибы:
    22
    Сборка бота GHost:
    Ghost One 1.5
    frakc и наступит тишина. :vau:
    завтра попробую
  9. fokevolt Ньюфаг

    Сообщения:
    13
    Спасибы:
    0
    и скажите, какой средой программирования вы пользуетесь.( с++ builder/visual studio/dev c++/.. etc )
  10. fake Старожила

    Сообщения:
    1.624
    Спасибы:
    19
    Дата начала использования бота:
    11.11.11
    под виндой я думаю сложновато будет Dev С++( и другими оснноваными на GNU С++) большинство вс++
  11. frakc Ньюфаг

    Сообщения:
    34
    Спасибы:
    1
    там можно поступить со всеми ленгами, так у меня на боте только 2 сообщения осталось - кик по пингу и пинг:)
    но глупыю людишки всеравно боятся:)
  12. frakc Ньюфаг

    Сообщения:
    34
    Спасибы:
    1
    убираем ненужный lang_XXXX

    Собственно как можно отключить не полюбившиеся вас lang_XXXX сообщения.
    В файле language ищете код сообщения.
    В language.ccp ищете функцию которая вызывает код.
    В game.ccp ищете модуль который вызывает вашу функцию и отправляете команду чата в комент.

    Пример
    полетел какой то сервер и начался флуд:
    Код:
    lang_0105 = [i]Соединение с battle.net...[/i]
    lang_0106 = [i]Подключен к battle.net.[/i]
    lang_0107 = [i]Отключен от battle.net.[/i]
    lang_0108 = [i]Залогинился battle.net.[/i]
    
    Такое иногда происходит, идти в конфиг и убирать сервер скажем геморно. Тем более он может включится через 5 мин :lol:

    и мы ищем функции которые используют данные коды.

    lang_0105 = ConnectingToBNET
    lang_0106 = ConnectedToBNET
    lang_0107 = DisconnectedFromBNET
    lang_0108 = LoggedInToBNET

    Нашли функции, идем в game.ccp и ищем, где они вызываются.

    Код:
    void CGHost :: EventBNETConnecting( CBNET *bnet ) // RESTORE
    {
    	//if( m_AdminGame )
    	//	m_AdminGame->SendAllChat( m_Language->ConnectingToBNET( bnet->GetServer( ) ) );
    
    	//if( m_CurrentGame )
    	//	m_CurrentGame->SendAllChat( m_Language->ConnectingToBNET( bnet->GetServer( ) ) );
    }
    
    void CGHost :: EventBNETConnected( CBNET *bnet )
    {
    	//if( m_AdminGame )
    	//	m_AdminGame->SendAllChat( m_Language->ConnectedToBNET( bnet->GetServer( ) ) );
    
    	//if( m_CurrentGame )
    	//	m_CurrentGame->SendAllChat( m_Language->ConnectedToBNET( bnet->GetServer( ) ) );
    }
    
    void CGHost :: EventBNETDisconnected( CBNET *bnet )
    {
    	//if( m_AdminGame )
    	//	m_AdminGame->SendAllChat( m_Language->DisconnectedFromBNET( bnet->GetServer( ) ) );
    
    	//if( m_CurrentGame )
    	//	m_CurrentGame->SendAllChat( m_Language->DisconnectedFromBNET( bnet->GetServer( ) ) );
    }
    void CGHost :: EventBNETLoggedIn( CBNET *bnet )
    {
    	//if( m_AdminGame )
    	//	m_AdminGame->SendAllChat( m_Language->LoggedInToBNET( bnet->GetServer( ) ) );
    
    	//if( m_CurrentGame )
    	//	m_CurrentGame->SendAllChat( m_Language->LoggedInToBNET( bnet->GetServer( ) ) );
    }
    
    Все что между VOID добавляем в комент (в примере выше все уже добавлено)
    Сходным образом вы можете убрать любое оповещение.
    Еще пару важных моментов:
    Иногда под условием if, бывает несколько функций, тогда в комент уводите ту, что начинается с SendAllChat.
    Или бывает как в случае с lang_129, под воидом много функций и в комент нужно увести if и вызов
    в даном случае
    if (!s.empty())
    SendAllChat(s);
    уходят в комент, как показано ниже...да и выше тоже :)
    Код:
    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);
    Также, если вы не хотите полностью убирать сообщения и они вам не мешают, то вы можете заменить SendAllChat на SendAdminChat (имхо с рефреш сообщениями и другими важными системными лучше поступать так)


    хочу пасибок :vau:
    RusMenWOW нравится это.
  13. frakc Ньюфаг

    Сообщения:
    34
    Спасибы:
    1
    компилится всегда ghost.sln :) ибо в нем исходники
  14. Guard Старожила

    Сообщения:
    473
    Спасибы:
    47
    Сборка бота GHost:
    Ghost++ RAKAL Edition
    Дата начала использования бота:
    00.00.2009
    Skype:
    Мой статус
    Deals, можешь еще раз выложить патч? :vau:
  15. evilmaker Старожила

    Сообщения:
    321
    Спасибы:
    28
    Сборка бота GHost:
    brtghost rev.185
    Дата начала использования бота:
    07.07.9999
    Skype:
    Мой статус
    • Некропостинг
    Диалс пропал))