본문 바로가기
프로그래밍/Pawn

[PAWN/SAMP] 서버에 접속한 모든 플레이어들을 소환하기

by 알용 2012. 4. 11.
반응형

머리말

서버를 운영하다보면 지루해하는 유저들을 위해 이따금 이벤트를 열곤 하는데
그러기 위해서는 모든 유저를 한 곳에 모아야 할 경우가 많다.
대부분의 서버에서 </소환> 명령어를 구축해놓고 있지만 위와 같은 경우에서
한명 한명씩 </소환 0> </소환 1> </소환 2> </소환 3> ... </소환 n> 명령어를 타이핑 하기에는 너무 비효율적이다.
만약 서버에 접속한 인원이 80명이라면 소환 명령어를 79번(본인 제외)이나 타이핑 해야 하는 일이 발생하는 것이다.
따라서 반복문을 이용한 모든 플레이어 소환 명령어를 만들어보겠다.


명령어를 타이핑하여 효과를 내는 것이니 OnPlayerCommandText 콜백함수를 이용해야 한다.

  1. public OnPlayerCommandText(playerid, cmdtext[]) // 명령어가 타이핑되면 호출되는 콜백함수
  2. {
  3.         if( strcmp(cmdtext, "/모두소환", true) == 0 ) // </모두소환> 이라는 명령어를 타이핑 했다면
  4.         {
  5.                 if( IsPlayerAdmin( playerid ) ) // 플레이어가 관리자일 때
  6.                 {
  7.                         new Float:pos[3]// 플레이어의 좌표(x,y,z)를 저장할 배열
  8.                         new interior = GetPlayerInterior(playerid)// 플레이어의 인테리어값
  9.                         new vir = GetPlayerVirtualWorld(playerid)// 플레이어의 세계 코드
  10.  
  11.                         GetPlayerPos(playerid, pos[0], pos[1], pos[2])// 플레이어의 좌표값을 얻음
  12.  
  13.                         for( new i = 0, max = GetMaxPlayers(); i < max; i++ )
                            // 0번 플레이어부터 서버에 접속 가능한 플레이어까지 반복문을 돌림
  14.                         {
  15.                                 if( IsPlayerConnected( i ) )// 해당 플레이어가 서버에 접속해 있을 때
  16.                                 {
  17.                                         SetPlayerPos(i, pos[0], pos[1], pos[2])// 좌표 이동
  18.                                         SetPlayerInterior(i, interior)// 인테리어 변경
  19.                                         SetPlayerVirtualWorld(i, vir)// 세계 코드 변경
  20.                                 }
  21.                         }
  22.                 }      
  23.                 return 1;
  24.         }
  25.         return 1;
  26. }

반응형

'프로그래밍 > Pawn' 카테고리의 다른 글

[PAWN/SAMP] 연속킬 효과 주기  (6) 2012.05.03
[PAWN/SAMP] 팀채팅 구현하기  (2) 2012.04.15
[PAWN/SAMP] 미니맵에 맵아이콘(Map Icon) 표시하기  (2) 2012.04.11
Pawn 기초문법  (2) 2012.04.11
Pawn 이란 무엇인가?  (0) 2012.04.10