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

m_FakePlayerName

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

  1. GhOst Ньюфаг

    Сообщения:
    37
    Спасибы:
    0
    Сборка бота GHost:
    Ghost One 1.7.266
    возникла необходимость добавить возможность менять имя фэйка из конфига ( типа bot_fakeplayername = ...)
    пробовал сделать сам следующее - повторить организацию bot_virtualhostname
    в файле ghost.h обьявил переменную
    Код:
    class CGHost
    {
    public:
    string m_FakePlayerName;
    .....
    
    в файле ghost.cpp в void CGHost :: ReloadConfig () считал с конфига
    Код:
    	m_FakePlayerName = CFG->GetString( "bot_fakeplayername", "FakePlayer" );
    	if (m_FakePlayerName.length()>15)
    		m_FakePlayerName=m_FakePlayerName.substr(0,15);
    
    в файле game_base.h
    Код:
    class CBaseGame
    ...
    protected:
    string m_FakePlayerName;
    
    в файле game_base.cpp
    ниже m_VirtualHostName = m_GHost->m_VirtualHostName; добавил
    Код:
    	
    	m_FakePlayerName = m_GHost->m_FakePlayerName;
    
    заменил везде где есть упоминание "FakePlayer" на m_FakePlayerName (в ~4х местах)
    скомпилировал все это, при компиляции ни ошибок ни предупреждений не было.
    однако когда я захожу в созданную игру бот с крашем вылетает.
    до изменений все работало. откатил изменения - тоже работает.
    в логе чисто.
    возможно я гдето чтото упустил, подскажите пожалуйста.
  2. Zarj Старожила

    Сообщения:
    1.007
    Спасибы:
    23
    Сборка бота GHost:
    Ghost One 1.7.266
    Дата начала использования бота:
    01.01.1992
    Если уж действительно интересует завтра опишу как сделать всё правильно и чтоб не выкидовало.
  3. ROB4ik Рекомендуемый

    Сообщения:
    224
    Спасибы:
    35
    тогда пиши от А до Я.
    начиная от добавления FAK'a на 11-12 слоты, ну и до смены ника через конфиг :boss:
  4. Zarj Старожила

    Сообщения:
    1.007
    Спасибы:
    23
    Сборка бота GHost:
    Ghost One 1.7.266
    Дата начала использования бота:
    01.01.1992
    Я не буду раскрывать все секреты и фишки фэйкплэера, ибо некчему выпускать это в массы, уж как прикрутить на 12 слот сами думайте, я выложу лишь вывода его ника в конфиг. Способ рабочий у меня было сделано именно так, когда я держал ботов. В следующем посту будет собственно инструкция.
  5. Zarj Старожила

    Сообщения:
    1.007
    Спасибы:
    23
    Сборка бота GHost:
    Ghost One 1.7.266
    Дата начала использования бота:
    01.01.1992
    Сейчас выложу свой способ, попробуйте откомпилить, сразу отпишитесь норм или нет, просто было давно - вспомнить проблема, но вроде правильно всё.

    Начнём, открываем файл ghost.h ищем там примерно
    Код:
    	string m_bnetpacketdelaybig;
    И под ней вставляем
    Код:
    	string m_FakePlayerName;
    Далее открываем файл ghost.cpp ищем к примеру это:
    Код:
    	m_AutoHostOwner = CFG->GetString( "bot_autohostowner", string( ) );
    И под ним вставляем
    Код:
    	m_FakePlayerName = CFG->GetString( "bot_fakeplayername", string( ) );
    Далее идём в файл game_base.cpp ищем
    Код:
    void CBaseGame :: SendFakePlayerInfo( CGamePlayer *player )
    И в нём ищем "FakePlayer", после того как найдёте - заменяете на m_GHost->m_FakePlayerName (Обратите внимание БЕЗ КОВЫЧЕК!!!!)
    По этому же принципу ищем примерно 5532 строчку, и там в коде
    Код:
    	if( m_Replay )
    	{
    		for( vector<CGamePlayer *> :: iterator i = m_Players.begin( ); i != m_Players.end( ); i++ )
    			m_Replay->AddPlayer( (*i)->GetPID( ), (*i)->GetName( ) );
    
    		if( m_FakePlayerPID != 255 )
    			m_Replay->AddPlayer( m_FakePlayerPID, "FakePlayer" );
    Опять таки заменяем "FakePlayer" на m_GHost->m_FakePlayerName
    И, напоследок, ищем
    Код:
    void CBaseGame :: CreateFakePlayer( )
    и в нём тоже производим замену в строке
    Код:
    		SendAll( m_Protocol->SEND_W3GS_PLAYERINFO( m_FakePlayerPID, "FakePlayer", IP, IP ) );
    Думаю понятно что заменять на что, и собственно это всё, компилируем и радуемся!!!

    P.s. Ах да, не забудте в обязательном порядке добавить в ghost.cfg строку bot_fakeplayername = ИмяФейка , ибо без заполненного параметра будут косяки.
    Olim98 нравится это.
  6. ViperNight ▒▒▒▒▒▒▒▒▒

    Сообщения:
    311
    Спасибы:
    154
    Сборка бота GHost:
    GHost++ r597M
    Дата начала использования бота:
    20.01.2007
    Skype:
    Мой статус

    Код:
    m_FakePlayerName = CFG->GetString( "bot_fakeplayername", "FakePlayer" );
    I_aM_Fake нравится это.
  7. Zarj Старожила

    Сообщения:
    1.007
    Спасибы:
    23
    Сборка бота GHost:
    Ghost One 1.7.266
    Дата начала использования бота:
    01.01.1992
    Я это знаю, только не поддерживаю такой кодинг, ибо смысл добавлять в конфиг переменную, если оставлять пустой.
  8. ViperNight ▒▒▒▒▒▒▒▒▒

    Сообщения:
    311
    Спасибы:
    154
    Сборка бота GHost:
    GHost++ r597M
    Дата начала использования бота:
    20.01.2007
    Skype:
    Мой статус
  9. Zarj Старожила

    Сообщения:
    1.007
    Спасибы:
    23
    Сборка бота GHost:
    Ghost One 1.7.266
    Дата начала использования бота:
    01.01.1992
    Так что либо ставим поумолчанию и забиваем на изменение, либо наоборот без dafault'a но с конфигом, всё верно.
    А так как люди хотели вывести параметр в конфиг - им дефолт не нужен, т.к. они точно будут менять никфэйка.
  10. GhOst Ньюфаг

    Сообщения:
    37
    Спасибы:
    0
    Сборка бота GHost:
    Ghost One 1.7.266
    фактически, я делал то же самое...
    за исключением 2 пунктов
    Код:
     m_FakePlayerName = CFG->GetString( "bot_fakeplayername", string( ) );
    
    я делал
    Код:
    m_FakePlayerName = CFG->GetString( "bot_fakeplayername", "FakePlayer" );
    
    и использование промежуточной переменной в game_base.cpp
    Код:
    m_FakePlayerName = m_GHost->m_FakePlayerName;
    
    попробовал твой способ - все равно вылетает с крашем когда присоединяюсь к игре...

    причем заметил что другие могут присоединяться, а я захожу - краш...
    пробовал ник менять - то же самое...
    мб гдето в eventplayerjoined происходит чтото не то??? хотя там изменений небыло...
  11. Zarj Старожила

    Сообщения:
    1.007
    Спасибы:
    23
    Сборка бота GHost:
    Ghost One 1.7.266
    Дата начала использования бота:
    01.01.1992
    Мой способ рабочий на 100% ищи отличия твоего кода от оригинала. WinMerge
  12. GhOst Ньюфаг

    Сообщения:
    37
    Спасибы:
    0
    Сборка бота GHost:
    Ghost One 1.7.266
    :nea: без этих строк все гуд
    как тока добавляю переменную в ghost.cpp/.h
    начинается краш именно когда я вхожу... другие заходят - все гуд.. :stenka:
  13. fake Старожила

    Сообщения:
    1.624
    Спасибы:
    19
    Дата начала использования бота:
    11.11.11
    дебагер
    для тупых
    лохов?
  14. GhOst Ньюфаг

    Сообщения:
    37
    Спасибы:
    0
    Сборка бота GHost:
    Ghost One 1.7.266
    нет, он для шарящих в дебаг сообщениях :metal: (кэп)
    если я скину дебаг сообщение, тебе легче станет? потому что я не шарю в нем...
  15. fake Старожила

    Сообщения:
    1.624
    Спасибы:
    19
    Дата начала использования бота:
    11.11.11
    юзай дебагер в ide и увидишь где баг :facepalm:
  16. Ziko Гуру

    Сообщения:
    130
    Спасибы:
    2
    Сборка бота GHost:
    Ghost ++17.1
    Дата начала использования бота:
    01.09.2010
    Skype:
    Мой статус
    Я сделал по инструкции Zarj'a и бот не крашился.
  17. GhOst Ньюфаг

    Сообщения:
    37
    Спасибы:
    0
    Сборка бота GHost:
    Ghost One 1.7.266
    у меня он крашится только когда я захожу в игру (у меня бот на моем компе стоит)
    другие спокойно заходят :facepalm:
    хз в чем дело...
  18. Deals Старожила

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

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

    Сообщения:
    37
    Спасибы:
    0
    Сборка бота GHost:
    Ghost One 1.7.266
    я знаю, вы меня запинаете :drhouse:
    но как врубить? ссылочку плз если есть такая тема ^_^
    поиск такую галимотью дает