본문 바로가기

마인크래프트/스크립트

마인크래프트 스크립트 - 아이템 강화 1

728x90
반응형

 

제목마인크래프트 스크립트 - 아이템 강화 1

 


 

안녕하세요~ 이번에는 강화 스크립트를 만들어보려고 합니다.

제가 만드는 강화는 먼저 기본 아이템을 0단계 강화할 수 있는 아이템으로 만드는 것 부터 해보려고 합니다.

그리고 npc를 클릭해야지만 이벤트를 실행할 수 있도록 하려고 합니다.

 

 

:: 목표 ::

 

기본 아이템을 강화할수있는 아이템으로 만들자

 


 

먼저 엔피시를 생성하겠습니다. 간단하게 명령어로 해도 되긴 하지만 하는김에 엔피씨와 GUI를 통해 만들어보겠습니다.

 

 

여기까지는 유튜브에 올라온 강좌글만 봐도 알 수 있으니 따로 설명을 적진 않겠습니다.

 

on inventory click:
	# 무기 변형 창
    if iname contains "&2&l무기 변형":
        if click type is left mouse button with shift or right mouse button with shift or right mouse button:
            cancel event
        else:
            if clicked raw slot is 0 or 2 or 3 or 5 or 6 or 8:
                cancel event
            else if clicked raw slot is 4:
                cancel event
                if slot 1 of current inventory of player is air:
                    message "[무기대장장이]: 어이! 무기를 올려야지!" to player
                else:
                    set {_w} to slot 1 of current inventory of player
                    delete slot 1 of current inventory of player
                    set slot 7 of current inventory of player to {_w} with lore " " and "&b0단계" and "&e==========" and "&a + 체력 0" and "&c + 공격력 0" and "&9 + 방어력 0" and "&e=========="
                    message "[무기대장장이]: 좋아 무기 변형에 성공했어. 창을 닫기전에 가져가!" to player

 

 

일단 변형에 대해 설명하자면

 

 

위 처럼 기본 칼을

 

 

이렇게 강화수치가 표시되도록 만드는겁니다.

위에 코드 대로라면 되기는 하지만 문제가 있습니다.

 

변형을 하기전에 무기를 올리고 창을 닫거나

변형 후 무기를 얻지 않고 창을 닫을 경우 그대로 아이템이 없어진다는점

 

그리고 무기가 아닌경우도 

 

 

보다시피 된다는점

이경우는 재밌으니 그냥 놔두겠습니다.

어차피 무기와 방어구 모두 저 형식으로 만들거라 상관없을듯합니다.

 

그럼 가장 큰 문제인 창을 닫을 때 아이템이 사라지는것만 해결하면 될듯한데

창을 닫을 때 아이템이 있으면 창을 닫을 수 없게 하면 될듯 합니다.

 

on inventory close:
    if inventory name of current inventory of player contains "&2&l무기 변형":
        message "무기변형창 닫음"
        set {_무기변형1} to slot 1 of current inventory of player
        set {_무기변형2} to slot 7 of current inventory of player
        if {_무기변형1} is not air:
            give 1 of {_무기변형1} to player
        if {_무기변형2} is not air:
            give 1 of {_무기변형2} to player
    else:
        message "다른거 닫음"

 

이렇게 한번 해보겠습니다.

인벤토리를 닫을 때 이름이 무기변형이면 임시변수들에게 각 아이템을 설정하고 공기가 아니면 플레이어에게 준다

 

 

로딩은 완료됐는데 이상한 에러가 뜨네요?

 

 

그리고 아이템을 놓고 창을 닫았는데 아이템은 주지도 않고 제대로 이름도 안뜨네요.

아까 에러를 다시 보겠습니다.

 

[Skript] In 1.13+ you cannot get the title name of an inventory outside of an InventoryClickEvent, Only if this inventory has an InventoryHolder may it be used in this state.

 

구글링해봐도 뭐 안나오네 ㅠ

조금 고민하다 보니까 iname이 있었고 icname이 있었던걸 까먹었습니다.

이거 어떤 애드온 깔아야했던걸로 기억하는데 아래 애드온 전부 설치해보시길 바랍니다...

 

on inventory close:
    if icname contains "&2&l무기 변형":
        set {_무기변형1} to slot 1 of current inventory of player
        set {_무기변형2} to slot 7 of current inventory of player
        if {_무기변형1} is not air:
            give 1 of {_무기변형1} to player
        if {_무기변형2} is not air:
            give 1 of {_무기변형2} to player

 

이렇게 수정을 해주고

 

 

창을 닫으니 잘 들어옵니다. 휴~~ 그런데

실험하다가 생각난건데 give를 통해서 줬는데 만약 피치못할 사정으로 플레이어의 인벤토리가 꽉찼다면?

 

 

이렇게 됐을 때 창을 닫으면 어떻게 될까요?

 

 

예 꿀꺽해버립니다.

우편함 같은걸 만들어서 거기에 지급하는방법이랑 창을 닫지못하게 하는 방법이 있을듯한데

창을 닫으면 다시 열리게 해보았지만 잘 안되더군요

그래서 우편함을 만드는 쪽을 생각해봐야겠습니다.

목표는 달성했으니 이제 강화를 하는 스크립트를 짜봐야겠네요.

 

 

 

 

※ 스크립트 다운로드 ※

 

해당 챕터가 끝나면 올리겠습니다.

 


 

:: 해당 서버에서 사용된 애드온 ::

 

Skript

GomSK

InvSk

GameAPI

HolographicDisplaysAddon

MarSK

QuarSk

SharpSK

SkChoke

Skellett

SkExtras

SkQuery

skRayFall

skript-yaml

SkRPG

SkStuff

skUtilities

TuSKe

Umbaska

Vault

 

만약 코드를 적용했는데 서버에서 에러가 뜨면 애드온 미적용 때문일 확률이 높습니다.

애드온은 아래 사이트에서 대부분 받을 수 있으며 없는 애드온은

아마 한국인 개발자가 만든 애드온일 확률이 높습니다.

구글이나 네이버에 애드온 모음을 검색하면 나와있으니 찾아서 다운로드 하시거나

제 블로그 마인크래프트 항목 처음 글에 다운로드 링크가 걸려있으니 확인하시길 바랍니다.

 

 

 

 

:: 이 글은 원 출처만 남기면 언제든 퍼가고 수정하셔도 좋습니다 ::

 

728x90
반응형