개인 자료란 (JE)

  서버 커뮤니티

Profile Anodera1 대표칭호 없음
Profile

질문하기 스크립트

1.14.4 주식 스크립트 GUI 클릭 오류

2021.01.21 조회 수 1533 추천 수 0
이해도 1.14 
게임버전 (JE) 페이퍼 
스크립트 버전 입문자(아무것도 몰라요) 
스크립트 애드온 Skript 2.5.2 

#made by 장인돌이
#서버에 맞게 변형하여 사용하세요!
#유튜브 구독 부탁드려요~!
#유튜브 채널 : https://www.youtube.com/channel/UC2BxiMLDuHjzbP41syXTT8Q
#if inventory name of current inventory of player contains
#위 구문은 스크립트 자체적 오류로 인해 사용불가하여 아래구문으로 대체
#if iname contains(인벤클릭할때), if icname contains(인벤닫을때) by SkChoke애드온
#SkChoke애드온 다운로드 주소 https://www.spigotmc.org/resources/skchoke.70314/
#위 글은 절대 지우지 말것!
#적발시 스크립트 공유 전면 중단합니다!


#명령어 목록
#/주식추가 [주식이름] [주식갯수] [주식가격]
#/주식제거 [주식이름]
#/주식목록
#/주식변동시간설정 [분]
#/주식초기화


#기본적인 주식 변수 형태
#{주식::목록::이름}
#{주식::목록::이름::최대갯수}
#{주식::목록::이름::현재갯수}
#{주식::목록::이름::상장가}
#{주식::목록::이름::매매가}
#{주식::목록::이름::상한가}
#{주식::목록::이름::하한가}
#{주식::목록::이름::최대변동가}
#{주식::목록::변동시간}
#{주식::목록::변동시간::분}
#{주식::목록::변동시간::초}


options:
    c : &6[&e시스템&6]&f
    s : of current inventory of player to
    s2 : of current inventory of loop-player to
    
#주식을 추가시기는 구문 /주식추가 [주식이름] [주식갯수] [주식가격]
command /주식추가 [<text>] [<number>] [<number>]:
    trigger:
        if player is op:
            if arg 1 is set:
                if arg 2 is set:
                    if size of {주식::목록::*} < 7:
                        delete {주식::목록::%arg 1%::*}
                        set {주식::목록::%arg 1%} to paper
                        set {주식::목록::%arg 1%::상장가} to arg 3
                        set {주식::목록::%arg 1%::매매가} to arg 3
                        set {주식::목록::%arg 1%::상한가} to arg 3
                        set {주식::목록::%arg 1%::하한가} to arg 3
                        set {주식::목록::%arg 1%::최대변동가} to arg 3
                        set {주식::목록::%arg 1%::최대갯수} to arg 2
                        set {주식::목록::%arg 1%::현재갯수} to arg 2
                        set {주식::목록::%arg 1%::기록::1} to "&f기록 없음"
                        message "{@c} 주식을 생성하였습니다."
                        message "{@c} 주식명 : &f%arg 1%"
                        message "{@c} 상장가 : &f%arg 3%원"
                        message "{@c} 수 량 : &f%arg 2%개"
            else:
                message "{@c} &f - /주식추가 [주식이름] [주식갯수] [주식가격]"


#주식을 제거하는 구문 /주식제거 [주식이름]
command /주식제거 [<text>]:
    trigger:
        if player is op:
            delete {주식::목록::%arg 1%}
            delete {주식::목록::%arg 1%::*}
            message "{@c} 주식이 제거되었습니다."
                
#주식가격의 변동시간을 설정하는 구문(단위:분)                
command /주식변동시간설정 [<integer>]:
    trigger:
        if player is op:
            if arg 1 is set:
                set {주식::변동시간} to arg 1
                broadcast "{@c} 주식변동시간을 %arg 1%분으로 변경되었습니다."
                broadcast "{@c} 다음 쿨타임부터 변경된 시간으로 적용됩니다."
            else:
                message "&f - /주식변동시간설정 [분]"


#주식 목록을 오픈하는 구문
command /주식목록:
    trigger:
        set {_a} to 0
        set {_b} to 17
        open chest with 3 rows named "&6주식목록" to player
        while inventory name of current inventory of player is "&6주식목록":
            set {_a} to 0
            set {_b} to 17
            loop 10 times:
                if {_a} is not 4:
                    set slot {_a} {@s} white stained glass pane
                set slot {_b} {@s} white stained glass pane
                add 1 to {_a}
                add 1 to {_b}
            set {_c} to 10
            loop {주식::목록::*}:
                if {_c} < 17:
                    set slot {_c} {@s} loop-value named "&6%loop-index%" with lore " " and "&6[잔여주식]" and "&f▶ %{주식::목록::%loop-index%::현재갯수}%/%{주식::목록::%loop-index%::최대갯수}%개" and " " and "&6[가격정보]" and "&e▶ 상장가 : %{주식::목록::%loop-index%::상장가}%" and "&f▶ 매매가 : %{주식::목록::%loop-index%::매매가}%원" and "&a▶ 상한가 : ▲%{주식::목록::%loop-index%::상한가}%원" and "&c▶ 하한가 : ▼%{주식::목록::%loop-index%::하한가}%원" and " " and "&6[변동기록]" and {주식::목록::%loop-index%::기록::*}
                    add 1 to {_c}
            set slot 4 {@s} dark oak sign named "&6다음 변동까지 남은시간" with lore "&f%{주식::변동시간::분}%분 &f%{주식::변동시간::초}%초"
            wait 1 tick


#주식가격을 변동시키는 쿨타임 구문
every 1 second:
    if {주식::변동시간} is set:
        if {주식::변동시간::분} is set:
            if {주식::변동시간::초} is not set:
                subtract 1 from {주식::변동시간::분}
                set {주식::변동시간::초} to 59
            else:
                if {주식::변동시간::초} > -1:
                    subtract 1 from {주식::변동시간::초}
                if {주식::변동시간::초} = -1:
                    if {주식::변동시간::분} >= 0:
                        subtract 1 from {주식::변동시간::분}
                        set {주식::변동시간::초} to 59
                    if {주식::변동시간::분} = -1:
                        set {주식::변동시간::분} to {주식::변동시간}-1
                        set {주식::변동시간::완료} to true
                        execute console command "가격변동"
        else:
            set {주식::변동시간::분} to {주식::변동시간}


#주식가격을 변동시키는 명령어(수동으로 가능)        
command /가격변동:
    trigger:
        if {주식::변동시간::완료} is true:
            delete {주식::변동시간::완료}
            set {_a} to 1
            loop {주식::목록::*}:
                set {_변동최대치} to {주식::목록::%loop-index%::최대변동가}
                #가격변동 확률 높을수로 가격↑확률 증가
                chance of 50%:
                    set {_변동가} to random integer between 1 and {_변동최대치}
                    add {_변동가} to {주식::목록::%loop-index%::매매가}
                    if {주식::목록::%loop-index%::매매가} > {주식::목록::%loop-index%::상한가}:
                        set {주식::목록::%loop-index%::상한가} to {주식::목록::%loop-index%::매매가}
                    #변동 기록을 저장하는 구문 아래 임시변수({_b})의 값과 루프값의 따라 최대 저장한도 변경
                    set {_b} to 9
                    if {주식::목록::%loop-index%::기록::1} is not "&f기록 없음":
                        loop 9 times:
                            set {_c} to {_b}+1
                            set {주식::목록::%loop-index%::기록::%{_c}%} to {주식::목록::%loop-index%::기록::%{_b}%}
                            subtract 1 from {_b}
                        set {주식::목록::%loop-index%::기록::1} to "&a▲%{_변동가}%원"
                    else:
                        set {주식::목록::%loop-index%::기록::1} to "&a▲%{_변동가}%원"
                else:
                    set {_변동가} to random integer between 1 and {주식::목록::%loop-index%::매매가}
                    subtract {_변동가} from {주식::목록::%loop-index%::매매가}
                    if {주식::목록::%loop-index%::매매가} < {주식::목록::%loop-index%::하한가}:
                        set {주식::목록::%loop-index%::하한가} to {주식::목록::%loop-index%::매매가}
                    #변동 기록을 저장하는 구문 아래 임시변수({_b})의 값과 루프값의 따라 최대 저장한도 변경
                    set {_b} to 9
                    if {주식::목록::%loop-index%::기록::1} is not "&f기록 없음":
                        loop 9 times:
                            set {_c} to {_b}+1
                            set {주식::목록::%loop-index%::기록::%{_c}%} to {주식::목록::%loop-index%::기록::%{_b}%}
                            subtract 1 from {_b}
                        set {주식::목록::%loop-index%::기록::1} to "&c▼%{_변동가}%원"
                    else:
                        set {주식::목록::%loop-index%::기록::1} to "&c▼%{_변동가}%원"
            broadcast "{@c} 주식가격이 변경되었습니다!"
        
#주식을 사거나 파는 구문
on inventory click:
    if iname contains "&6주식목록":
        if clicked raw slot is between 10 and 16:
            cancel event
            loop {주식::목록::*}:
                if name of clicked item contains loop-index:
                    if click type is right mouse button:
                        if {주식::목록::%loop-index%::현재갯수} >= 1:
                            if player has space for 1 of loop-value named loop-index:
                                if {돈.%uuid of player%} >= {주식::목록::%loop-index%::매매가}:
                                    subtract 1 from {주식::목록::%loop-index%::현재갯수}
                                    subtract {주식::목록::%loop-index%::매매가} from {돈.%uuid of player%}
                                    give player 1 of loop-value named "&6%loop-index%"
                    if click type is right mouse button with shift:
                        if {주식::목록::%loop-index%::현재갯수} >= 10:
                            if player has space for 10 of loop-value named loop-index:
                                if {돈.%uuid of player%} >= {주식::목록::%loop-index%::매매가}*10:
                                    subtract 10 from {주식::목록::%loop-index%::현재갯수}
                                    subtract {주식::목록::%loop-index%::매매가}*10 from {돈.%uuid of player%}
                                    give player 10 of loop-value named "&6%loop-index%"
                    if click type is left mouse button:
                        if player has 1 of loop-value named "&6%loop-index%":
                            add 1 to {주식::목록::%loop-index%::현재갯수}
                            add {주식::목록::%loop-index%::매매가} to {돈.%uuid of player%}
                            remove 1 of loop-value named "&6%loop-index%" from player's inventory
                    if click type is left mouse button with shift:
                        if player has 10 of loop-value named "&6%loop-index%":
                            add 10 to {주식::목록::%loop-index%::현재갯수}
                            add {주식::목록::%loop-index%::매매가}*10 to {돈.%uuid of player%}
                            remove 10 of loop-value named "&6%loop-index%" from player's inventory
        else:
            cancel event
            
#모든 주식정보를 초기화 하는구문
command /주식초기화:
    trigger:
        delete {주식::*}

        


원본 스크립트 및 현재 서버에 적용중인 스크립트 에드온 입니다.

버전 1.14.4

dd1343087e516665c708d7a6d9c9bcb2.png




원본 스크립트를 그대로 실행할 경우


9e0a57bab1dba3dceaa0fa0455da158c.png

라는 오류가 발생하여



172번 문단의 있던


if name of clicked item contains loop-index: # clicked 의 구문을


if name of click item contains loop-index: # click으로 변경하여 오류를 제거하였지만



/주식 목록 명령에서 

GUI 및 모든 명령어는 잘 작동하지만 

GU I창에 있는 주식 클릭시 아무 반응도 하지 않습니다.

d905a569e5a1fc3cde8c67e8e2be8340.png

test 클릭시 아무것도 반응 하지 않습니다.



#주식을 사거나 파는 구문
on inventory click:
    if iname contains "&6주식목록":
        if clicked raw slot is between 10 and 16:
            cancel event
            loop {주식::목록::*}:
                if name of clicked item contains loop-index:
                    if click type is right mouse button:
                        if {주식::목록::%loop-index%::현재갯수} >= 1:
                            if player has space for 1 of loop-value named loop-index:
                                if {돈.%uuid of player%} >= {주식::목록::%loop-index%::매매가}:
                                    subtract 1 from {주식::목록::%loop-index%::현재갯수}
                                    subtract {주식::목록::%loop-index%::매매가} from {돈.%uuid of player%}
                                    give player 1 of loop-value named "&6%loop-index%"
                    if click type is right mouse button with shift:
                        if {주식::목록::%loop-index%::현재갯수} >= 10:
                            if player has space for 10 of loop-value named loop-index:
                                if {돈.%uuid of player%} >= {주식::목록::%loop-index%::매매가}*10:
                                    subtract 10 from {주식::목록::%loop-index%::현재갯수}
                                    subtract {주식::목록::%loop-index%::매매가}*10 from {돈.%uuid of player%}
                                    give player 10 of loop-value named "&6%loop-index%"
                    if click type is left mouse button:
                        if player has 1 of loop-value named "&6%loop-index%":
                            add 1 to {주식::목록::%loop-index%::현재갯수}
                            add {주식::목록::%loop-index%::매매가} to {돈.%uuid of player%}
                            remove 1 of loop-value named "&6%loop-index%" from player's inventory
                    if click type is left mouse button with shift:
                        if player has 10 of loop-value named "&6%loop-index%":
                            add 10 to {주식::목록::%loop-index%::현재갯수}
                            add {주식::목록::%loop-index%::매매가}*10 to {돈.%uuid of player%}
                            remove 10 of loop-value named "&6%loop-index%" from player's inventory
        else:
            cancel event


어떻게 GUI 클릭 오류를 고칠 수 있는지 조심스럽게 물어봅니다

가장 최신 버전 Skript 2.5.2 버전 사용중입니다. Spigot으로도 시도했지만 똑같은 오류가 생겼습니다.



3개의 댓글

스크립터브혼
2021.01.21

아시다시피 사거나 파는 핵심 코드는 조건문의 가장 안쪽에 위치하는 add, remove,  subtract 이펙트 입니다.

이 이펙트가 동작하기 위해선 앞선 조건문을 모두 만족해야만 합니다.

이 코드가 동작하지 않는다는건은 조건문을 최소 한개 이상 통과하지 못하는 경우가 있다는 것이구요.

이런 경우에는 조건문 앞에 비교하는 두 대상이 알고리즘에 맞는 값을 가지고 있는지, 비교 했을 때 참을 가질 수 있는지 확인해 보는 방법 뿐입니다.

> send "%name of clicked item% / %loop-index%"
이런 식으로 조건 문 앞에 비교되는 두 값을 직접 확인해보고 올바른 값을 가지고 있는지확인해보세요.

Anodera1
2021.01.21
@스크립터브혼

조건문 하나가 잘못되어서 수정하였습니다!!

감사합니다!!

마냥냥냥
2021.04.23

어떻게 해결하셨는지 여쭤도 될까요? ㅜㅠ