머리말
팀데스매치 모드를 제작하다보면 꼭 필요한 기능 중의 하나가 바로 팀채팅이다.
하지만, 많은 모드메이커들이 팀채팅 기능의 원리를 쉽게 파악하지 못한다.
흔히들 만만하고 익숙한 명령어로 </tchat A사이트!>와 같이 구현하곤 하는데 긴급한 상황에서 언제 명령어를 다 치고 있는가.
OnPlayerText 콜백함수를 이용해 간편하고 빠르게 사용할 수 있는 팀채팅 기능을 구현해보겠다.
머리말에서 소개했듯이 이 스크립트의 핵심은 바로 OnPlayerText 콜백이다.
OnPlayerText 는 플레이어가 말을 입력했을 때(채팅) 호출되는 콜백인데 아래와 같이 구현할 것이다.
예를 들어 팀원에게 "뒤로 빠져!" 라는 메시지를 보내고 싶거든 채팅창에
@뒤로 빠져!
라고 입력하면 되는데 전체채팅인지 팀채팅인지 구분하는 기호가 바로 맨 앞에 붙은 '@' 이다.
굳이 '@' 를 써야 하느냐, 그건 아니다.
#뒤로 빠져! 든 $뒤로 빠져! 든 본인이 편한 기호에 맞추어 코딩하면 된다.
코드를 소개한다.
- public OnPlayerText(playerid, text[])
- {
- if( text[0] == '@' )
- {
- if( strlen(text) == 1 )
- SendClientMessage(playerid, 0x99FFCCAA, "[힌트] @할말");
- else
- {
- new string[128];
- text[0] = ' ';
- format(string, sizeof(string), "[Team Chat] %s : %s", PlayerName(playerid), text);
- SendTeamMessage(GetPlayerTeam(playerid), 0x99934EFA, string);
- }
- return 0;
- }
- return 1;
- }
각 line 에 따른 주석을 밑에 달도록 하겠다.
1. 플레이어가 채팅을 했을 때 호출되는 콜백이고, 플레이어 번호와 입력한 문자열을 매개변수로 가져온다.
3. 플레이어가 입력한 말의 첫 문자가 @ 일 때의 조건문이다.
5. 문자열의 길이가 1일 때, 즉 플레이어가 @ 하나만 입력했을 경우인데 이 때는 메시지를 보내 팀채팅의 사용법을 알려준다.
9. 플레이어의 이름, 채팅 내용등을 저장할 변수이다.
10. 팀채팅을 하기 위해 사용했던 @ 문자는 제거해준다.
11. 플레이어의 이름과 입력한 말을 string 변수에 저장하고 있다.
예를 들어 플레이어 이름이 Bob 이고 입력한 말이 "안녕" 이라면 Bob과 같은 팀의 소속원들에게는
[Team Chat] Bob : 안녕
이라고 메시지가 전달되게 된다.
12. 플레이어와 같은 팀에게 메시지를 전달하는 함수인데 사용자 정의 함수이므로 각자 환경에 맞게 제작해야 한다.
'프로그래밍 > Pawn' 카테고리의 다른 글
[PAWN/SAMP] 플레이어에게 데미지를 주는 함수 만들기 (0) | 2012.06.06 |
---|---|
[PAWN/SAMP] 연속킬 효과 주기 (6) | 2012.05.03 |
[PAWN/SAMP] 서버에 접속한 모든 플레이어들을 소환하기 (0) | 2012.04.11 |
[PAWN/SAMP] 미니맵에 맵아이콘(Map Icon) 표시하기 (2) | 2012.04.11 |
Pawn 기초문법 (2) | 2012.04.11 |