분야 | 트리거 |
---|---|
장르 | 서버 관리자 툴, 개발자 툴, 그 외에 장르 |
게임버전 | 1.5.x, 1.6.x, 1.7.x, 1.8.x, 1.9.x, 1.10.x, 1.11.x, 1.12.x, 1.13.x, 1.14.x, 1.15.x, 1.16.x, 1.17.x |
API | 버킷, 스피곳, 페이퍼, 스펀지 |
자료글 | https://www.curseforge.com/minecraft/buk...gerreactor |
버킷 버전: *
트리거 버전: 2.2.1 에서 테스트
심화적인 내용이므로 위키를 충분히 숙지 하셔야 합니다. (https://github.com/wysohn/TriggerReactor/wiki/Home_kr)
요구 지식: 인벤토리 트리거, 네임드 트리거, 조건문, 변수, 등.
0. 탬플릿
이미 인벤토리 트리거를 /trg i create ... 명령어로 제작 했다는 가정하에 <이름>.yml과 <이름>.trg 파일이 InventoryTrigger 내에 생성 되었을 것 입니다.
트리거 생성이 무슨 이야기인지 모른다면 위키의 기초 파트를 다시 확인 해보세요!
그럼 <이름>.trg 를 메모장 등 으로 열어 수정 해보도록 합시다. 인게임 에디터를 사용하는것도 방법이나 모두들 아시다시피 여러줄을 작성할때는 직접 파일을 수정하는게 훨씬 편리합니다.
trg파일의 내용물을 아래의 탬플릿으로 바꿔줍니다
IF trigger == "open"
ENDIF
IF trigger == "click"
IF slot == 10
#MESSAGE "11번 째 슬롯을 클릭 함"
ENDIF
ENDIF
이제 파일을 저장하고 /trg reload 로 해당 트리거를 다시 리로드 합니다.
/trg i <이름> open 으로 방금 제작한 인벤토리를 띄워보세요. 그것이 앞으로 유저들이 보게 될 인벤토리 입니다. 인벤토리가 열렸다면 11번째 슬롯을 클릭 해 보세요. 메시지가 보이나요? 그럼 성공입니다.
이미 트리거를 조금 사용해신 분들은 아시겠지만 인벤토리 트리거 역시 trigger와 같이 내부 변수가 존재하고 이것을 사용하면 쉽게 하이픽셀같은 메뉴가 생성이 가능합니다. 아시다시피 TR의 코드 자체에는 제한이 없기때문에 이 인벤토리로 할 수 있는 것들의 가능성은 무궁무진합니다.
1. 작동 구조
모두 같은것은 아니겠지만 해당 코드를 면밀히 분석 해 보는것이 큰 도움이 됩니다.
먼저 눈여겨 보셔야 할 부분은 바로 trigger 와 slot 이라는 내부 변수 입니다.
내부변수가 뭔지 모른다면 위키의 변수 부분을 참조하세요.
1.1 내부 변수 trigger
이 trigger에는 3가지 가능성이 있는데 바로 "open", "close", 혹은 "click" 이 들어옵니다. 인벤토리 트리거의 코드는 한 인벤토리에서 일어나는 모든 이벤트를 받을 수 있기 때문에 trigger 라는 변수로 어떤 동작으로 인해서 해당 인벤토리 트리거가 작동을 했는지 알 필요가 있습니다.
- "open" - 영어 그대로 인벤토리를 방금 막 열었을때를 의미 합니다.
- "close" - 영어 그대로 인벤토리가 방금 막 닫혔을 때를 의미 합니다.
- "click" - 영어 그대로 인벤토리가 열린 뒤 어딘가를 클릭 했을 때를 의미 합니다.
1.2 내부 변수 slot
이 slot에는 정수형(..., -2, -1, 0, 1, 2, ...) 값이 들어오는데 말그대로 인벤토리 내의 몇번째 칸을 눌렀는지를 말합니다. 이는 아이템이 있던지 없던지에 상관이 없이 발생합니다. 주의할점은 슬롯의 시작이 0부터 시작한다는것으로 6*9칸짜리 인벤토리 기준으로 0 부터 53까지가 이 slot 안에 들어 올 수 있습니다. 다만 trigger 가 "click" 이 아니었다면 slot 은 -1 이 됩니다.
1.3 탬플릿 분석
이제 탬플릿 코드를 분석 해봅시다.
IF trigger == "open"
ENDIF
IF trigger == "click"
IF slot == 10
#MESSAGE "11번 째 슬롯을 클릭 함"
ENDIF
ENDIF
위의 3줄은 아마 이해하기 쉬우리라 생각합니다.
만약 IF 가 낮설게 느껴진다면 위키의 조건문을 다시 확인 해보세요!
아시다시피 trigger 안에는 "open" "close" 혹은 "click" 만 들어 올 수 있기 때문에 == 연산자로 비교를 해보면 어떤때에 트리거가 작동을 했는지 알 수 있습니다.
위의 3줄은 tigger=="open" 이 true 일때 즉 이 트리거를 작동시킨게 인벤토리를 여는 동작이었다면 무엇인가 하라는 것 입니다. 아시다시피 위의 코드에서는 텅 비어있기때문에 아무런 동작도 하지 않을 것 입니다.
IF trigger == "open"
ENDIF
IF trigger == "click"
IF slot == 10
#MESSAGE "11번 째 슬롯을 클릭 함"
ENDIF
ENDIF
아래의 코드 5줄은 IF문이 중첩되어있습니다! 왜냐하면 우리는 두가지 경우의 수를 생각 해야 하거든요. 먼저 인벤토리 내의 아이템 슬롯을 클릭 했을때 동작하게 하고 싶기 때문에 IF trigger == "click" 으로 확인 해 줍니다.
만약에 트리거가 인벤토리내의 슬롯을 클릭한것으로 작동 한 것이라면 해당 IF문을 통과해서 아래의 IF slot==10 으로 진행됩니다. slot 에는 몇번째 슬롯을 눌렀는지 기록되기 때문에 이를 이용해서 슬롯마다 기능을 부여 할 수 있습니다. 위의 코드는 11번째 슬롯 을 눌렀을때 플레이어에게 "11번째 슬롯을 클릭 함" 이 출력되게 하고 있습니다.
다음 편에서 계속 됩니다
아이스틴
2019.11.24와...약간 어렵네요
좋은 글 보고갑니다~
상어
2019.11.24어려울것 같은데 정말 좋은 글이네요 잘보고 갑니다~
프리루트
2019.11.24앞으로 더 많은 이런 전문적인 글들이 한마포에 꽃을 피웠으면 좋겠습니다 :) 응원합니다!
mong__2
2019.11.25넘나 어렵...다...
ㅋㅋㅋㅋ컴알못 영알못 마알못은
감탄하면서 조용히 스쳐갑니다..총총
책박사
2019.11.25장난아니게 어려워보이지만...시도해볼가치가있어요!
DDang_
2020.01.14좋은 글은 추천입니다
징크
2020.03.25덕분에 조금은 편하게 작업하겠네요 감사합니다
2편 3편도 계속 보고있습니다
mchang
2020.05.20어렵네요...
마크러버
2020.05.20좀 어렵지만 노력해볼께요