Moderator elections are being held. See Valve Developer Community:Moderator elections for more details.
Users who would like to run for moderator must be autoconfirmed and have at least 100 edits. Users can check their own edit count at Special:Preferences.

Server-Side Bots/ko

From Valve Developer Community
Jump to: navigation, search
Note.png메모:이것은 Source SDK Base 2013 Multiplayer에서 완벽하게 구동됩니다.

Server-Side Bots은 AI로 구동되는 플레이어입니다. 때문에 게임 내에서 NPC가 아닌 일반 플레이어와 동등한 취급을 받습니다.

구성

server-side bot가 해야할 중요한 일은 각각의 서비 틱마다 플레이어 엔티티에 대한 사용자 입력을 시뮬레이션 해야한다는 것입니다. 때문에 CUserCmd구조를 채우고 CBasePlayer::PlayerRunCommand로 전송합니다. 이 CUserCmd 구조에는 일반 플레이어가 할 수 있는 모든 입력(이동방식, 누르고 있는 버튼, 바라볼 각도{시점})을 포함됩니다.

CUserCmd가 만들어지는동안 봇은 지능적으로 게임 내부에서 상호작용을 할 수 있는 코드가 있습니다. 예를 들어 다른 플레이어를 볼 수 있는지의 여부를 결정하기 위해 근처 플레이어 개체에 광선을 추가할 수도 있습니다. 이런 상호작용이 뭐가 됐든 이 코드가 해야할 것은 CUserCmd에게 "이것을 내가 하고 있는것"이라고 말해주어야 한다는 것입니다.

만들어 봅시다

방법 1

Source SDK에는 기본 봇 샘플이 제공됩니다. 작동 방식은 벽에 부딪힐 때까지 직진하고 부딪힌 이후에는 임의 방향으로 회전합니다. 이것은 플레이어 애니메이션을 테스트해야 할 경우에도 매우 유용합니다. 이를 활성화 시킬려면 SDK 실행화면에서 Create a Mod를 선택하고 Start a mod from scratch을 선택합시다.

방법 2

만약 당신이 Mod Half Life 2 MultiPlayer를 사용해야할 경우 3개의 파일을 수정해야합니다.

  • dlls/hl2mp_dll/hl2mp_bot_temp.cpp

파일 상단에 있는 #ifdef DEBUG#endif를 주석처리 하십시오.


  • dlls/hl2mp_dll/hl2mp_client.cpp

188행과 191행에 있는 #ifdef DEBUG and #endif코드를 주석처리 하십시오. 아마 편집해야할 부분은 다음과 같을 것입니다.:

#ifdef DEBUG
	extern void Bot_RunAll();
	Bot_RunAll();
#endif


  • game_shared/hl2mp/hl2mp_gamerules.cpp

38행과 40행, 그리고 835행과 859행(Source SDK 2007에서 HL2DM을 이용하는 경우에는 968행-990행)에 있는 #ifdef DEBUG#endif 코드를 주석처리 해줍시다.

아마 편집해야할 부분은 다음과 같을 것입니다.:

#ifdef DEBUG	
	#include "hl2mp_bot_temp.h"
#endif
#ifdef DEBUG

	// Handler for the "bot" command.
	void Bot_f()
	{		
		// Look at -count.
		int count = 1;
		count = clamp( count, 1, 16 );

		int iTeam = TEAM_COMBINE;
				
		// Look at -frozen.
		bool bFrozen = false;
			
		// Ok, spawn all the bots.
		while ( --count >= 0 )
		{
			BotPutInServer( bFrozen, iTeam );
		}
	}


	ConCommand cc_Bot( "bot", Bot_f, "Add a bot.", FCVAR_CHEAT );

#endif

다음 행을 검색합시다.

	ConCommand cc_Bot( "bot", Bot_f, "Add a bot.", FCVAR_CHEAT);

위에 있는 기존 코드를 밑에 있는 코드로 교체합시다.

	ConCommand cc_Bot( "bot", Bot_f, "Add a bot."/*, FCVAR_CHEAT */);


코드 수정은 완료했습니다. 이제 컴파일을 하고 생성된 Server.dll과 Client.dll파일을 당신의 모드 Bin폴더에 넣어주고 모드 콘솔창에 'bot'을 입력해 봇을 소환해보십시오.

명령어들

Server-Side Bots을 적용시킨 모드에서 다음과 같은 명령어들을 사용할 수 있습니다.:

bot_add 혹은 bot 봇을 소환시킵니다. (bot은 방법 2로 구현해야만 사용할 수 있습니다.)
bot_mimic <entity index> 0이 아닌 값으로 설정하면 모든 봇들이 지정된 엔티티의 CUserCmd를 모방합니다. (일반적으로 1의 값은 로컬 플레이어(본인)을 지정함). 어떤 방식으로든 움직이고 쏘면 봇들도 그렇게 할 것입니다.
bot_mimic_yaw_offset <angle> bot_mimic을 사용한 상태에서 해당 명령어를 사용하면 봇이 바라보는 관점을 설정할 수 있습니다. 180의 값은 플레이어를 마주하게끔 해주는 설정값이며 이외의 값은 각각 다른 곳을 바라볼 것입니다.

당신은 dlls\sdk\sdk_bot_temp.cpp에서 샘플 봇 코드를 찾을 수 있을 것입니다. 이 파일의 주요 기능은 Bot_Think입니다. 이를 봇 엔티티에 대한 각각의 서버 틱이라고 합니다. 이곳에는 봇이 벽에 부딪혔는지 감지해주는 코드가 포함되어 있습니다. 또한 다양한 콘솔 명령에 응답합니다. (여기 문서에는 없음). 맨 마지막에는 RunPlayerMove 명령어를 실행하면 CUserCmd 및 calls CBasePlayer::PlayerRunCommand를 호출합니다.

다른 흥미로운 기능으로는 sdk_bot_temp.cppBotPutInServer입니다. 주요 기능은 봇에 대한 규칙을 만들고, 봇이 있을 수 있도록 함께 포괄해주는 역할을 해줍니다. 대부분 당신은 이 곳에 CBotManager 코드를 복사하고 싶을 것이라 생각됩니다. 이 코드는 항상 적용할 수 있는 코드이기 때문입니다.(자신의 봇 클래스 이름으로)

더 유용한 코드

이것은 Tjoppen의 코드로써, 봇들을 리소폰 시키거나, 기존에 가야할 곳을 엉망으로 바꿔버릴 수도 있습니다.

void Bot_HandleRespawn( CSDKBot *pBot, CUserCmd &cmd )
{
	// try hitting my buttons occasionally
	if ( !pBot->IsAlive() && random->RandomInt( 0, 100 ) > 80 )
	{
		// flip button state
		cmd.buttons = (!random->RandomInt( 0, 1 ) == 0)?(cmd.buttons|IN_JUMP):0;
	}
}

Source Engine 2007 SDK의 HL2DM 모드에서는 hl2dm_bot_temp.cpp에 자동으로 구현되어 있을 것입니다.

무언가 더 필요하십니까?

더 많은 정보를 보실려면 AI Programming를 참조하십시오.

Botrix은 플레이어가 봇들과 함께 놀 수 있는 플러그인입니다.