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

Проблемы с выбором расы

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

  1. Mr-Fane Ньюфаг

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

    Значит дела обстаят таким образом:

    Мы имеем карту в стиле melee (На развитие вообщем)
    Для неё нужно сделать конфиг с возможностью выбора расы.(Собственно я нубоват но не настолько).Сделал все правельно.
    Ну вот к примеру:

    Код:
    map_slot1 = 0 255 0 0 0 0 96 1 100
    map_slot2 = 0 255 0 0 1 1 96 1 100
    map_slot3 = 0 255 0 0 3 2 96 1 100
    map_slot4 = 0 255 0 0 2 3 96 1 100
    map_slot5 = 0 255 0 0 2 4 96 1 100
    map_slot6 = 0 255 0 0 2 5 96 1 100
    map_slot7 = 0 255 0 0 2 6 96 1 100
    map_slot8 = 0 255 0 0 2 7 96 1 100
    map_slot9 = 0 255 0 0 2 8 96 1 100
    map_slot10 = 0 255 0 0 4 9 96 1 100
    map_slot11 = 0 255 0 0 2 10 96 1 100
    map_slot12 = 0 255 0 0 2 11 96 1 100
    Везде стоит 32+64.

    И так что мы имеем в итоге....Создаю карту...меню выбора расы есть, но когда торкаешь на одну из рас - ничего не выберается, а так-же и остается на параметре 32 (Случайная раса).
    Ну собственно пошел я дальше и понял, что проблема вовсе то не в конфиге, а в самом боте.На форуме нашел тему, в которой говорилось:
    Надо в game_base.cpp под этим
    Код:
    void CBaseGame :: EventPlayerChangeRace( CGamePlayer *player, unsigned char race )
    выпилить это:
    Код:
    if( m_Map->GetMapGameType( ) == GAMETYPE_CUSTOM )
    return;
    Делаем, компилим и в итоге получаем следующее.

    Создаю нужную карту...Расса по умолчанию стоит 32 (Случайная раса), есть возможность выбора и он работает, но не тут то было.При выборе какой-либо расы она фиксируется и все..больше выбрать ничего нельзя.Тоесть скажем на 1 слоте я выбрал нежить, то она так и останется на этом слоте.
    Что-то явно невпорядке в этой функции:

    Код:
    void CBaseGame :: EventPlayerChangeRace( CGamePlayer *player, unsigned char race )
    И причом это реально баг(недоработка) GHo, а не задумка автора.
  2. Mr-Fane Ньюфаг

    Сообщения:
    110
    Спасибы:
    4
    Сборка бота GHost:
    GHo 1.7.266
    а за 100$ ? ;D
  3. Mr-Fane Ньюфаг

    Сообщения:
    110
    Спасибы:
    4
    Сборка бота GHost:
    GHo 1.7.266
    100$ оставил у себя)
    Проблему решил самостоятельно....тему перенесите в кодинг собственные решения

    Хочется прояснить, что проблема с выбором расы имеет место быть в GhostOne.(Это баг в коде)

    В game_base.cpp этот кусок
    Код:
    void CBaseGame :: EventPlayerChangeRace( CGamePlayer *player, unsigned char race )
    {
    	// player is requesting a race change
    
    	if( m_SaveGame )
    		return;
    
    	if( m_Map->GetMapGameType( ) == GAMETYPE_CUSTOM )
    		return;
    
    	if( m_Map->GetMapFlags( ) & MAPFLAG_RANDOMRACES )
    		return;
    
    	if( race != SLOTRACE_HUMAN && race != SLOTRACE_ORC && race != SLOTRACE_NIGHTELF && race != SLOTRACE_UNDEAD && race != SLOTRACE_RANDOM )
    		return;
    
    	unsigned char SID = GetSIDFromPID( player->GetPID( ) );
    
    	if( SID < m_Slots.size( ) )
    	{
    		m_Slots[SID].SetRace( race );
    		SendAllSlotInfo( );
    	}
    меняем на
    Код:
    void CBaseGame :: EventPlayerChangeRace( CGamePlayer *player, unsigned char race )
    {
    	// player is requesting a race change
    
    	if( m_SaveGame )
    		return;
    	if( m_Map->GetMapFlags( ) & MAPFLAG_RANDOMRACES )
    		return;
    
    	if( race != SLOTRACE_HUMAN && race != SLOTRACE_ORC && race != SLOTRACE_NIGHTELF && race != SLOTRACE_UNDEAD && race != SLOTRACE_RANDOM )
    		return;
    
    	unsigned char SID = GetSIDFromPID( player->GetPID( ) );
    
    	if( SID < m_Slots.size( ) )
    	{
    		m_Slots[SID].SetRace( race | SLOTRACE_FIXED );
    		SendAllSlotInfo( );
    	}
    Max5, Bum, KradaBash и ещё 1-му нравится это.