Skip to content
JunHyeong Lim edited this page Jul 18, 2019 · 8 revisions

코드

신버전

환경

커맨드헬퍼 3.3.4 이상, 버킷 1.13.2 이상

main.ms

@id = 'ch.gui1' // GUI 구분을 위한 고유 id
delete_virtual_inventory(@id) // 해당 id 의 GUI 를 제거 (이미 생성된게 있다면 갱신을 위해)
@items = array( // GUI 인벤토리의 정보가 담긴 배열
	12: array(
		type: 1,
		data: 0,
		qty: 1,
		meta: array(
			'display': '스폰으로 이동',
			'lore': array(
				'클릭 시', 
				'스폰으로 이동'
			)
		)
	),
	14: array(
		type: 3,
		data: 0,
		qty: 1,
		meta: array(
			'display': 'GUI 종료',
			'lore': array(
				'클릭 시',
				'GUI 종료'
			)
		)
	)
)
create_virtual_inventory(@id, 27, '타이틀', @items) // 해당 정보들(id, size, title, items) 로 gui(가상 인벤토리) 생성

// 인벤토리에서 클릭이나 드래그를 했을 때 호출되는 inventory_click 이벤트
// 프리필터로 virtual 이 true 인 경우 즉 create_virtual_inventory() 로 생성한 인벤토리만 처리
bind(inventory_click, null, array('virtual': true), @e) {
    @id = pinventory_holder() // 클릭한 인벤토리의 id 를 불러옴
    if (@id != 'ch.gui1') { // id 가 GUI 생성할 당시에 넣었던 ch.gui1 이 아닐 경우
        die() // 코드를 더이상 진행하지 않음
    }
    cancel() // 이벤트를 캔슬함으로써 플레이어가 한 동작(아이템 클릭, 드래그)을 취소시킴.
    @clickedSlot = @e[rawslot] // 클릭한 슬롯을 이벤트 정보가 담긴 @e 배열에서 불러옴.
    switch (@clickedSlot) {
        case 12: // 클릭한 슬롯이 12 일 경우
            set_ploc(get_spawn())
            msg('스폰으로 이동했습니다.')
            break()
        case 14: // 클릭한 슬롯이 14 일 경우
            close_pinv()
            msg('GUI 를 종료했습니다.')
            break()
    }
}

aliases.msa

*:/gui = popen_inventory(player(), 'ch.gui1')

구버전

환경

확장기능 CHVirtualChests 가 필요합니다.

커맨드헬퍼 3.3.2, 버킷 1.7~1.12

main.ms

@id = 'ch.gui1' // GUI 구분을 위한 고유 id
@data = array( // GUI 정보가 담긴 배열
	id: @id,
	title: '타이틀',
	size: 27,
	12: array(
		type: 1,
		data: 0,
		qty: 1,
		meta: array(
			'display': '스폰으로 이동',
			'lore': array(
				'클릭 시', 
				'스폰으로 이동'
			)
		)
	),
	14: array(
		type: 3,
		data: 0,
		qty: 1,
		meta: array(
			'display': 'GUI 종료',
			'lore': array(
				'클릭 시',
				'GUI 종료'
			)
		)
	)
)
create_virtualchest(@data)

// 인벤토리에서 클릭이나 드래그를 했을 때 호출되는 inventory_click 이벤트
bind(inventory_click, null, null, @e) {
    @id = pget_virtualchest() // 클릭한 인벤토리의 id 를 불러옴
    if (@id != 'ch.gui1') { // id 가 ch.gui1 이 아닐 경우
        die() // 코드를 더이상 진행하지 않음
    }
    cancel() // 이벤트를 캔슬함으로써 플레이어가 한 동작(아이템 클릭, 드래그)을 취소시킴.
    @clickedSlot = @e[rawslot] // 클릭한 슬롯을 이벤트 정보가 담긴 @e 배열에서 불러옴.
    switch (@clickedSlot) {
        case 12: // 클릭한 슬롯이 12 일 경우
            set_ploc(get_spawn())
            msg('스폰으로 이동했습니다.')
            break()
        case 14: // 클릭한 슬롯이 14 일 경우
            close_pinv()
            msg('GUI 를 종료했습니다.')
            break()
    }
}

aliases.msa

*:/gui = popen_virtualchest('ch.gui1')

설명

신버전의 create_virtual_inventory() 와 구버전의 create_virtualchest() 는 커맨드헬퍼의 배열값을 버킷 인벤토리로 변환하기 때문에 오버헤드가 있는 함수입니다. 정도가 미미하긴 하지만 위처럼 GUI 내용이 고정이라면 한 번만 만들어서 사용하여 호출을 최소화시켜야 합니다.

Clone this wiki locally