개인 자료란 (JE)

  서버 커뮤니티

Profile 노네임드 대표칭호 없음
Profile

질문하기 스크립트

상점 GUI 재고 시스템 스크립트

2021.07.23 조회 수 381 추천 수 0
이해도 구버전 
게임버전 (JE) 버킷 
게임버전 (BE) SkBee, Skellett, skRayFall, skUtilities, MarSK+v3.1.1, SkQuery-Lime 4.1.2, SkStuff 1.6.4.1, skript-mirror-0.19.1 (1) 
스크립트 애드온 2.4.1 

스크립트 애드온은 그냥 현재 사용중인 애드온을 다 적기는 했습니다.


마인크래프트 버전 : 1.11.2
현재 유저마다 개개인의 개인상점GUI 스크립트를 제작하고 있습니다.


 

#/shopitem 플레이어(상점이름) 등록할재고갯수
#오피커맨드라서 추후에 유저전용 커맨드를 따로 만들 예정이고
#execute op command "/shopitem %player% %arg 2%" 구문으로 오피 커맨드 실행시키려고 합니다.

command /shopitem [<player>] [<number>]:
    permission:    op.op
    trigger:
        set {_tool} to type of player's tool
        set {shopitem::%arg-1%::%{_tool}%} to 0
        loop {shopitem::%arg-1%::*}:
            set {_shopitem} to loop-index
            replace all "itemtype:-1" and "false" and "," and "|" with "" in {_shopitem}
            delete {shopitem::%arg-1%::%{_tool}%}
        set {shopitem::%arg-1%::%{_shopitem}%} to arg 2
        message "%{_tool}%"
        message "%{_shopitem}%"
        message "%{shopitem::%arg-1%::%{_shopitem}%}%"
        stop

유저가 판매 물품의 재고 등록하는 구문을 구현하고 싶어서 손에 들고 있는 아이템을 인식해서

{_tool}이라는 임시변수에 적용을 하고

{_tool} 임시변수로 {shopitem::%arg-1%::아이템이름}값을 지정하고

루프 인덱스/값을 돌려서 확인해보니
변수 인덱스 값이 {itemtype:-1,false,아이템이름|}으로 출력이 되더라고요.

그래서 우선 {shopitem::%arg-1%::%{_tool}%} 이 값을 임의로 0으로 지정해두고

루프로 돌려서 index값을 {_shopitem}으로 잡고
replace로 돌려서 다시 출력하니 제가 원하는 {shopitem::%arg-1%::아이템이름} 이 변수로 정상적으로 출력이 되었어요.


다시 한 번 더 정상적으로 적용이 되나 인게임에서 확인하던 도중에
두번째로는 다른 판매 물품(삽)을 들고 똑같이 해보니

{_shopitem} 변수 값이 처음에 등록했던 값에서 변동이 없고

재고가 등록이 되는데 전부 처음 등록했던(곡괭이) 재고로 다 등록이 됩니다.


어디가 문제인지 싶어서 구문 사이사이 마다  message "%{변수}%" 이런 구문으로 돌려서 확인해봤는데
다른 건 정상으로 출력되는데 저 {_shopitem} 변수 값만 바뀌지 않길래 질문 올려봅니다.

2개의 댓글

스크립터브혼
2021.07.23

아마도 2.4 버전이 구버전을 완전히 커버하지 못해서 생기는 일 같습니다.

메세지로 출력했을 때 올바른 값은 %aliase% [named %text%]의 형태로 출력됩니다.

구버전에서 아이템을 구분하는 것은 aliases보다 id:data 형태를 주로 사용하기때문에

직접 키를 생성해주는 것이 좋을 것 같습니다.

set {_tool} to stone named "돌맹이"
set {_key.builder::1} to "%id of {_tool}%:%data of {_tool}%"
if name of {_tool} is set:
    set {_key.builder::2} to name of {_tool}

# 기타 키로 사용할 값들

set {_key} to join {_key.builder::*} with "-"


# {_key} = "1:0-돌맹이"

돌, 안산암, 화강암 등의 블록은 id는 1이고 data가 다릅니다.

장비의 경우 data가 손상도를 나타냅니다.

이 두가지 염두하시고 구성하세요.

노네임드
2021.07.23
@스크립터브혼

아하... 윗버전들에서는 정상적인 구문인데 마인크래프트 버전이 구버전이라 커버가 안되는 문제였군요ㅠㅠㅠ

하도 플레이어 툴로 인식을 못해서 클릭 아이템으로 변경해서도 시도해봤었지만

메세지 출력 값은 "apple named 사과"로 출력이 되는데 이것 역시 같은 곳에서 변수 값이 변동이 안되어서 이도 저도 못하는 상황이었어요...

2.2dev37c 버전의 스크립트 버전이 아니어도 id:data 값을 지정해서 줘도 구문이 먹힐지 몰랐었네요

들어주신 예시 참고하여 한 번 시도해보겠습니다 감사합니다!