본문 바로가기

프로그래밍/마인크래프트 - CommandHellper 플러그인

마인크래프트 CommandHelper 커헬 강좌 4강 - 더많은 EventAPI , 변수의 자료형, 배열


안녕하세요


저번편에 간단하게 EventAPI를 소개해드렸는데 이번에는 더 많은 EventAPI를 집중적으로

소개해드리겠습니다


http://wiki.sk89q.com/wiki/CommandHelper/Staged/Event_API


이 링크로 가시면 모든 EventAPI가 나와있습니다



하지만 그전에 먼저 변수의 자료형 먼저 설명하고 넘어가겠습니다


변수도 다 같은변수가 아니고 변수마다 타입이 존재합니다



int형 변수는 정수를 저장할수있고

double형 변수는 실수

boolean형 변수는 참과 거짓(true , false)

string은 문자열을 저장할수 있습니다


그리고 배열이라는게 있는데 한번에 여러개의 변수를 담을수 있는것입니다


@배열 = array(a,b,c,d,e)

이런식으로 배열을 만들수있습니다

그리고

*:/test = >>>

@배열 = array(a,b,c,d,e)

msg(@배열[0])

msg(@배열[1])

msg(@배열[2])

<<<

@배열[위치] 이런식으로 사용이 가능합니다

저 명령어를 적용시키고 직접 쳐봅시다


a,b,c가 출력되는걸 볼수 있습니다

배열안에 있는 변수들의 위치는 0부터 시작합니다

 그리고 위치에 이름을 넣어줄수도 있습니다

*:/test = >>>

@배열 = array(nick:Dokki0322,power:50,speed:20)

msg(@배열[nick])

msg(@배열[power])

msg(@배열[speed])

<<<

위와같이 입력후에 마인크래프트에서 출력해보면

이렇게 나옵니다




그럼 이제 EventAPI설명으로 들어가겠습니다


저번에도 말했지만 기본적으로 이벤트의 형태는 다음과 같다고 했죠?

bind(이벤트이름, null, null, @event,

실행내용

)

근데 저 @event는 무엇일까요

바로 이벤트 데이터입니다


우리가 저번에 봤던 player_join 이벤트를 한번 봅시다

bind(player_join, null, null, @event,

)

player_join에도 다양한 이벤트 데이터가 있습니다

그 이벤트데이터들은 @event에 배열형태로 저장되어있습니다


player: 플레이어 이름 ( string)


world : 플레이어가 위치한 월드 이름 ( string)


join_message: 기본 접속 메시지 ( string)


first_login: 최초 접속인지 여부 ( boolean)


이 이벤트 데이터들을 가져오려면 @event[이벤트데이터] 라고 쓰시면 됩니다



bind(player_join, null, null, @event,

msg('player:' @event[player])

msg('world:' @event[world])

msg('join_message:' @event[join_message])

msg('first_login:' @event[first_login])

)



위의 코드를 입력하고 한번 어떻게 출력되는지 확인해봅시다



위에 출력된것과 같이 다양한 정보들을 받아올수 있습니다.



한번 이것을 이용해서 재밌는것을 만들어봅시다



bind(block_place, null, null, @event,


)

block_place는 블럭을 설치할때 실행되는 이벤트입니다
block_place도 위의 player_join 이벤트와 마찬가지로 다양한 이벤트 데이터를 가지고있습니다
그중 type을 이용해서 테러방지 기능을 만들어봅시다


bind(block_place, null, null, @event,

if(@event[type] == 46) {

msg('테러범이다!')

cancel();

}

)

@event[type]은 설치한 블럭의 id를 가져옵니다
TNT의 블럭은 46이기때문에 TNT를 설치하면 저 코드가 실행됩니다
cancel();는 이벤트를 취소시키는 API기때문에 TNT가 설치되는걸 막을수 있습니다


이번에는 block_break로 블럭보호를 걸어봅시다

block_break는 블럭을 부술때 실행됩니다



bind(block_break, null, null, @event,

if(@event[location][x] > 50) {

if(@event[location][x] < 100) {

if(@event[location][z] > 50) {

if(@event[location][z] < 100) {

msg('보호지역입니다!')

cancel();

}

}

}

}

)

@event[location]은 블럭이 부서진곳의 좌표를 배열로 담고있습니다

x가 50~100이고 z가 50~100인경우 보호지역으로 판정되서 블럭이 부서지지 않습니다

이번엔 블럭에서 나오는 아이템을 바꿔봅시다


bind(block_break, null, null, @event,

if(@event[block][type] == 1) {

modify_event('drops', array(array(type:264,qty:5)))

}

)

modify_event('이름', 매개변수)는 해당하는 경우 기본 이벤트 객체를 수정합니다.

위와같이 drops의 경우에는 블럭을 부섰을때 드랍하는 아이템을 바꿀수 있습니다

실행할때 넘겨주는 변수를 매개변수라고 하는데 drops의 경우 매개변수를 배열의 형태로 type(아이템코드), qty(수량)을 저장해서 보내줘야합니다


저 코드를 입력하고 돌을 부술경우 다이아몬드개 5개씩 나오게됩니다


http://wiki.sk89q.com/wiki/CommandHelper/Staged/Event_API

위 링크로 가면 다른 EventAPI와 이벤트 데이터들이 적혀있으니 참고하시면 좋을듯합니다.