개인 자료란 (JE)

  서버 커뮤니티

Profile 마린잉엥 대표칭호 없음
Profile

질문하기 스크립트

Gui 수리하기 질문

2020.11.07 조회 수 298 추천 수 0
이해도 1.16 
게임버전 (JE) 스피곳 
스크립트 애드온 2.5 

안녕하세요 

애드온 없이 gui 띄우는 건 항상 

제게 엄청난 도움이 되고 있습니다.

이번에는 gui로 수리하기를 만들어볼려고 하는데요 

오류 없이 리로드는 되는데 작동을 하지 않습니다.

수리권을 오른쪽 마우스 클릭하면,

gui 수리는 잘 나오는데 아이템을 올리면 더이상 빼지지가 않고 슬롯에서 수리만 되지

가져오질 못합니다ㅠㅠ


#GUI수리 스크립트

on load:

    # [1] 필요한 아이템을 세팅합니다.

    set {gui::guik::slot::0} to gray stained glass pane named ""

    set {gui::guik::slot::1} to white stained glass pane named ""

    set {gui::guik::slot::2} to white stained glass pane named ""

    set {gui::guik::slot::3} to white stained glass pane named ""

    set {gui::guik::slot::4} to gray stained glass pane named ""

    set {gui::guik::slot::5} to white stained glass pane named ""

    set {gui::guik::slot::6} to white stained glass pane named ""

    set {gui::guik::slot::7} to white stained glass pane named ""    

    set {gui::guik::slot::8} to gray stained glass pane named ""

    set {gui::guik::slot::9} to gray stained glass pane named ""

    set {gui::guik::slot::10} to white stained glass pane named ""

    set {gui::guik::slot::12} to white stained glass pane named ""

    set {gui::guik::slot::13} to gray stained glass pane named ""

    set {gui::guik::slot::14} to white stained glass pane named ""    

    set {gui::guik::slot::15} to anvil named "&f수리하기"

    set lore of {gui::guik::slot::15} to "&f- 모루를 클릭하면 아이템을 수리합니다"

    set {gui::guik::slot::16} to white stained glass pane named ""    

    set {gui::guik::slot::17} to gray stained glass pane named ""

    set {gui::guik::slot::18} to gray stained glass pane named ""    

    set {gui::guik::slot::19} to white stained glass pane named ""

    set {gui::guik::slot::20} to white stained glass pane named ""

    set {gui::guik::slot::21} to white stained glass pane named ""    

    set {gui::guik::slot::22} to gray stained glass pane named ""

    set {gui::guik::slot::23} to white stained glass pane named ""

    set {gui::guik::slot::24} to white stained glass pane named ""

    set {gui::guik::slot::25} to white stained glass pane named ""

    set {gui::guik::slot::26} to gray stained glass pane named ""    

    

    # [2] 가상인벤토리를 생성합니다.

    suppress variable save warning

    set {gui::guik::inventory} to chest inventory with 3 rows named "&a[장인NPC] &f장비 수리하기"

    

    # [2-1] 가상인벤토리에 아이템을 배치합니다.

    loop {gui::guik::slot::*}:

        set {_slot} to loop-index parsed as integer

        set slot {_slot} of {gui::guik::inventory} to loop-value

        

on rightclick holding paper:

    if name of player's tool contains "&f수리권":

        open {gui::guik::inventory} to player


on inventory click:

    current inventory of player is {gui::guik::inventory}

    loop 27 times:

        add 1 to {_temp}

        if slot {_temp}-1 of player's current inventory is helmet or chestplate or sword or shovel or hoe:

            if data of slot {_temp}-1 of player's current inventory is not 0:

                add 1 to {_count}

            if {_count} is not set:

                set slot 15 of player's current inventory to anvil named "&f수리하기" with lore "&f- 모루를 클릭하면 아이템을 수리합니다" and "&c- 수리할 아이템이 없습니다" and "&a투구+갑옷+칼+삽+괭이만 수리 가능합니다"

                cancel event

            if slot 11 of player's current inventory is helmet or chestplate or sword or shovel or hoe:

                if data of slot 11 of player's current inventory is not 0:

                    set data of slot 11 of player's current inventory to 0

                    

            close player's inventory

            send "아이템을 수리하였습니다!"

            remove 1 of player's tool from player's tool


on inventory close:

    if inventory name of player's current inventory is "&a[장인NPC] &f장비 수리하기":

        if slot 11 of player's current inventory is not air:

            give slot 11 of player's current inventory to player

            

command /수리권:

    trigger:

        if player is op:

            give paper named "&f수리권" to player





4개의 댓글

스크립터브혼
2020.11.07

on inventory click 이벤트가 완전히 잘못 구현되어있습니다.
작성하신 코드는 인벤토리의 어느 곳을 클릭하든 인벤토리 전체 아이템 중 커스텀 모델 데이터가 0인 것이 하나라도 있으면 이벤트가 캔슬됩니다.


on inventory click 이벤트의 클릭한 슬롯은 [Clicked]익스프레션을 사용하고,
클릭한 슬롯의 번호를 구하고자 할때는 [Slot Index]를 사용합니다.
구현하고자 하는 기능은 클릭한 아이템이나 슬롯에 따라 동작 수행을 하는 것이지 전체 슬롯을 루프하는것이 아닙니다.


작성하신 코드의 흐름에 대해서 다시 파악해보시기 바랍니다.

마린잉엥
2020.11.08
@스크립터브혼

우선 아이템 복제가 되는 걸 막아야 되고

100프로 수리가

give slot 11 of player's current inventory to player

이 구문이 맞고 조건을 수정하면 되겠죠?

스크립터브혼
2020.11.08
@마린잉엥

복제를 막는다는게 무슨말인지 모르겠습니다. 올바르게 구현된 코드면 복제되지 않아요.

 

give ~ 의 경우 구현 방법들 중 한가지 입니다.

인벤토리 클릭을 막고 인벤토리를 닫을때 지급해도 되고,

인벤토리 클릭에서 꺼애 갈 수 있도록해도 됩니다.

마린잉엥
2020.11.09
@스크립터브혼

고민이네요..

인벤토리 클릭을 막으면 수리할 아이템을 슬롯 11에 올릴 수가 없고

인벤토리 클릭에서 꺼내갈 수 있도록하면 모루를 무한복제할 수 있고 아이템도 무한 복제가 되네요 ㅠㅠ