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

[PAWN/SAMP] 미니맵에 맵아이콘(Map Icon) 표시하기

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

머리말

GTA SanAndreas 싱글게임에서 볼 수 있었던 여러 종류의 미니맵들을
멀티 서버에서는 총기상, 음식점 등 몇 가지를 제외하고는 찾아볼 수가 없다.
대표적으로 싱글게임에서 진행하는 미션들의 맵아이콘인 

     
위와 같은 것들 말이다.
싱글게임에서는 미션을 받을 수 있는 장소를 플레이어에게 알려주기 위해 맵아이콘을 표시해주었지만
멀티 서버에서는 미션이라는 개념이 없는만큼 미션 관련 맵아이콘이 기본적으로 표시되지 않는다.
하지만 a_players.inc 헤더파일에 정의되어 있는 SetPlayerMapIcon 함수를 이용하면 SAMP에서 지원하는
모든 맵아이콘을 미니맵에 표시해 줄 수 있다. 



머리말에서 잠깐 소개했지만 미니맵에 맵아이콘을 표시하게 하는 함수는 SetPlayerMapIcon이다.

SetPlayerMapIcon(playerid, iconid, Float:x, Float:y, Float:z, markertype, color, style = MAPICON_LOCAL);

a_players 헤더파일을 보면 위와 같이 함수의 프로토타입이 정의되어 있다.

맵아이콘 표시 파라미터를 설명하기에 앞서 함수의 파라미터를 설명하도록 하겠다.

playerid = 멀티 서버에 접속하면 부여받는 개개인의 플레이어 번호이다.
iconid = 서버에 등록된 맵아이콘의 누적 개수이다, 0부터 시작해서 맵아이콘을 하나하나 추가할 때마다 1씩 증가시킨다.
Float:x, Float:y, Float:z = 맵아이콘을 지정할 좌표의 정보인데 사실 이 함수에서 z(높이) 좌표값은 의미가 없다, 미니맵이 입체(3D)가 아닌 평면좌표(2D)에서 그려지기 때문이다.
markertype = 표시할 맵아이콘의 종류이다, 맵아이콘 번호는 1부터 63까지 다양하게 있다.
color = 맵아이콘의 색상인데, 이 또한 의미 없는 매개변수이다. 어떤 색상을 넣어줘도 같은 맵아이콘이 나온다.
style = 맵아이콘의 스타일인데 C++을 공부한 분은 알겠지만 디폴트값이 설정되어 있다, 고로 값을 설정하지 않아도 된다.


스크립트를 소개하겠다.

SetPlayerMapIcon 함수는 플레이어가 서버에 접속했을 때 딱 한번만 설정해주면 접속종료를 하기 전까지

해당 플레이어의 미니맵에 맵아이콘이 표시되게 된다.

따라서 사용할 콜백은 OnPlayerConnect 이다.

플레이어가 서버에 접속했을 때 맵아이콘을 보여주면 끝나는 간단한 기능인 것이다.

코드는 아래와 같다.


  1. public OnPlayerConnect(playerid)        // 플레이어가 서버에 접속했을 때 호출되는 콜백함수
  2. {
  3.         // 141.8713,1875.4678,17.8434 좌표에 마커타입 6의 미니맵을 표시하겠다
  4.         SetPlayerMapIcon(playerid, 0, 141.8713,1875.4678,17.8434, 6, COLOR_YELLOW);
  5.         // 223.5712,1931.5250,17.6406 좌표에 마커타입 21의 미니맵을 표시하겠다
  6.         SetPlayerMapIcon(playerid, 1, 223.5712,1931.5250,17.6406, 21, COLOR_YELLOW);
  7. }

마커타입 6은  이고 마커타입 21은  이다.

따라서, 141.8713,1875.4678,17.8434 좌표에는 권총 모양의 맵아이콘이 표시되고

  223.5712,1931.5250,17.6406  좌표에는 하트 모양의 맵아이콘이 표시된다.


SAMP 에서 지원하는 맵아이콘들을 모아놓은 그림 자료들이 있다.
파일을 첨부하니 모드를 제작하면서 편하게 참고하고 사용하길 바란다.



SetPlayerMapIcon_files.zip



반응형