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

CreateFakePlayer

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

  1. Fox_Mulder Ньюфаг

    Сообщения:
    34
    Спасибы:
    0
    нашел в game.cpp команду !fakeplayer
    создает в игре 1 игрока с именем FakePlayer
    Код:
    // !FAKEPLAYER
    			//
    
    			if( Command == "fakeplayer" && !m_CountDownStarted )
    			{
    				if( m_FakePlayerPID == 255 )
    					CreateFakePlayer( );
    				else
    					DeleteFakePlayer( );
    			}
    Хочу добавить команду !fakeplayer1, чтоб он создавал еще 1 игрока. я програмирование не изучал, так что разбираюсь сам. Проблема в том, что при создании фейклплеера ему присуждается какойто pid=255. в общем хз что делать. Если кто разбирается помогите
  2. Volt Ньюфаг

    Сообщения:
    13
    Спасибы:
    0
    Попробую объяснить тебе что ты тут наделал :)

    При введении команды "fakeplayer" и отсутствии отратного отсчёта выполнить действия:

    Если  m_FakePlayerPID == 255 , то создать Фэйк Плеера
    Иначе Удалить фэйкплеера :)

    Так что вполне логично что FakePlayerPID будет 255, т.к. у тебя производится проверка на его соответствие.
    Ты лучше объясни, что хочешь получить в результате.

    Нашел объявление функций, давай разбираться что ты хочешь изменить.
    Код:
    void CBaseGame :: CreateFakePlayer( )
    {
    	if( m_FakePlayerPID != 255 )
    		return;
    
    	unsigned char SID = GetEmptySlot( false );
    
    	if( SID < m_Slots.size( ) )
    	{
    /*
    		if( GetNumPlayers( ) >= 11 )
    */
    		if( GetNumPlayers( ) >= m_Slots.size()-1 )
    		DeleteVirtualHost( );
    
    		m_FakePlayerPID = GetNewPID( );
    		BYTEARRAY IP;
    		IP.push_back( 0 );
    		IP.push_back( 0 );
    		IP.push_back( 0 );
    		IP.push_back( 0 );
    		SendAll( m_Protocol->SEND_W3GS_PLAYERINFO( m_FakePlayerPID, "FakePlayer", IP, IP ) );
    		m_Slots[SID] = CGameSlot( m_FakePlayerPID, 100, SLOTSTATUS_OCCUPIED, 0, m_Slots[SID].GetTeam( ), m_Slots[SID].GetColour( ), m_Slots[SID].GetRace( ) );
    		SendAllSlotInfo( );
    	}
    }
    
    void CBaseGame :: DeleteFakePlayer( )
    {
    	if( m_FakePlayerPID == 255 )
    		return;
    
    	for( unsigned char i = 0; i < m_Slots.size( ); i++ )
    	{
    		if( m_Slots[i].GetPID( ) == m_FakePlayerPID )
    			m_Slots[i] = CGameSlot( 0, 255, SLOTSTATUS_OPEN, 0, m_Slots[i].GetTeam( ), m_Slots[i].GetColour( ), m_Slots[i].GetRace( ) ); 
    	}
    
    	SendAll( m_Protocol->SEND_W3GS_PLAYERLEAVE_OTHERS( m_FakePlayerPID, PLAYERLEAVE_LOBBY ) );
    	SendAllSlotInfo( );
    	m_FakePlayerPID = 255;
    }
  3. Fox_Mulder Ньюфаг

    Сообщения:
    34
    Спасибы:
    0
    Хочу чтобы можно было создать до 9 Fake игроков. думаю нужно просто скопировать код и присвоить другим игрокам PID 244,243,242,241,и тд.. так ? как код должен выглядеть в итоге?
  4. Volt Ньюфаг

    Сообщения:
    13
    Спасибы:
    0
    Не совсем. Думаю придётся ещё изменить функцию CreateFakePlayer. В итоге будет что-то вроде этого.

    Код:
    
    // добавляем новый класс, чтобы основной код не перестал работать.
    
    void CBaseGame :: CreateFakePlayer1( )
    {
    
    	unsigned char SID = GetEmptySlot( false );
    
    	if( SID < m_Slots.size( ) )
    	{
    
    		if( GetNumPlayers( ) >= m_Slots.size()-1 )
    		DeleteVirtualHost( );
    
    		m_FakePlayerPID = GetNewPID( );
    		BYTEARRAY IP;
    		IP.push_back( 0 );
    		IP.push_back( 0 );
    		IP.push_back( 0 );
    		IP.push_back( 0 );
    		SendAll( m_Protocol->SEND_W3GS_PLAYERINFO( m_FakePlayerPID, "FakePlayer", IP, IP ) );
    		m_Slots[SID] = CGameSlot( m_FakePlayerPID, 100, SLOTSTATUS_OCCUPIED, 0, m_Slots[SID].GetTeam( ), m_Slots[SID].GetColour( ), m_Slots[SID].GetRace( ) );
    		SendAllSlotInfo( );
    	}
    }
    
    и в дополнение к вышепреведённому

    Код:
    // !FAKEPLAYER1
    			//
    
    			if( Command == "fakeplayer1" && !m_CountDownStarted )
    			{
    					CreateFakePlayer1( );
    			}
    
    Само собой за работоспособность не ручаюсь :))
  5. Kuzka Ньюфаг

    Сообщения:
    10
    Спасибы:
    0
    Всем привет) Вопрос по этому самому фейк плееру ) Можно ли заменить его имя на люое другое... А то в некоторых карта стоит проверка на "FakePlayer" сам искал но не могу понять че сделать)