kesswick1006 ead0919c59314658b6c69d91acfee3c4
| 이해도 | 초보자 |
|---|---|
| 게임버전 (JE) | 관련없음 |
| 게임버전 (BE) | 관련없음 |
제가요 지역변수?전역변수? 를 알게 되었는데요.
이코드에는 _uuid가 들어가있는데 그러면 보관함에있는 아이템은 저장 안되지 않나요.
근데 왜 되징..;;
가방 스크립트입니당.
command /가방 [<offline player>]:
trigger:
if arg-1 is not set:
set {_target} to player
set {_uuid} to uuid of {_target}
else:
if player is not op:
send "&c다른 사람의 보관함은 OP만 열 수 있습니다!"
stop
set {_target} to arg-1
set {_uuid} to uuid of {_target}
set {_gui} to chest inventory with 1 rows named "가방 - %{_target}%"
loop 9 times:
set slot loop-number - 1 of {_gui} to {chest.%{_uuid}%::%loop-number%}
open {_gui} to player
set {openStorage::%player%} to {_uuid}
play sound "minecraft:item.armor.equip_leather" to player
on inventory close:
if name of event-inventory starts with "가방":
set {_uuid} to {openStorage::%player%}
loop 9 times:
set {chest.%{_uuid}%::%loop-number%} to slot loop-number - 1 of event-inventory
delete {openStorage::%player%}
play sound "minecraft:entity.item.pickup" to player
on swap hand items:
if player is sneaking:
cancel event
execute player command "/가방"

WooJ1n
2025.07.20kesswick님, 안녕하세요! 스크립트 변수에 대해 궁금하시군요. 특히
_uuid와 아이템 저장 방식에 대해 질문 주셨네요. 보내주신 가방 스크립트 코드를 바탕으로 왜 아이템이 저장되는지 설명해 드릴게요. 🤔지역 변수 vs. 전역 변수 (스칼라 변수 vs. 리스트 변수)
스크립트에는 크게 두 가지 종류의 변수가 있습니다.
지역 변수 (Local Variables):
이름 앞에
_(언더바)가 붙습니다. 예:{_target},{_uuid},{_gui}특정 이벤트나 명령어의
trigger안에서만 유효하며, 해당 블록이 끝나면 사라집니다.일시적인 값을 저장하는 데 사용됩니다.
전역 변수 (Global Variables) 또는 리스트 변수:
이름 앞에
_가 붙지 않습니다. 예:{chest.uuid::1},{openStorage::player}서버가 실행되는 동안 계속 유지되며, 서버가 재시작되거나 스크립트가 리로드되기 전까지는 값이 남아있습니다.
영구적으로 데이터를 저장하는 데 사용됩니다. Skript는 기본적으로 이 전역 변수들을 자동으로 파일(Skript 폴더 내
variables.yml또는 다른 파일)에 저장하여 서버가 꺼져도 데이터가 유지되도록 합니다.가방 스크립트의 작동 원리
kesswick님이 궁금해하신
{_uuid}는 지역 변수가 맞습니다. 하지만 아이템이 저장되는 핵심은 이 지역 변수가 아니라, 지역 변수{_uuid}의 값을 사용하여 만들어지는 전역 변수에 있습니다.스크립트 코드를 다시 볼까요?
1. 가방 열기 (
command /가방)여기서
set {_uuid} to uuid of {_target}은_uuid라는 지역 변수에 플레이어의 고유 ID(UUID)를 임시로 저장합니다. 이{_uuid}자체는 명령어 실행이 끝나면 사라집니다.하지만 그 아래에 있는
{chest.%{_uuid}%::%loop-number%}는 다릅니다. 이는{chest.고유ID::슬롯번호}형태의 전역 변수입니다. Skript는.이나::를 사용하여 리스트 변수를 만들고 데이터를 저장할 수 있습니다.예를 들어, 어떤 플레이어의 UUID가
1234-abcd-5678이라면, 이 플레이어의 가방 슬롯 1번 아이템은{chest.1234-abcd-5678::1}이라는 전역 변수에 저장됩니다.Skript는
{변수이름}형태의 전역 변수 데이터를 서버의plugins/Skript/variables.yml파일에 자동으로 저장합니다. 그래서 서버를 껐다 켜도 아이템 정보가 남아있는 거죠!2. 가방 닫기 (
on inventory close)플레이어가 가방을 닫으면, 이전에 열 때 저장해두었던
{openStorage::%player%}(이것 역시 전역 변수입니다!)에서 해당 플레이어의 UUID를 다시 가져옵니다.가져온 UUID를
{_uuid}라는 지역 변수에 넣고, 이{_uuid}를 사용하여{chest.고유ID::슬롯번호}전역 변수를 현재 GUI의 아이템으로 업데이트하는 것입니다.정리
_uuid는 현재 명령어를 실행하는 동안만 존재하는 지역 변수가 맞습니다. 하지만 이 지역 변수_uuid의 '값'을 이용해서{chest.고유ID::슬롯번호}와{openStorage::플레이어이름}같은 '전역 변수'를 만들고 조작합니다.스크립트의 전역 변수(이름에 언더바가 없는 변수)는 기본적으로 서버의
variables.yml파일에 영구적으로 저장되기 때문에, 서버를 껐다 켜도 아이템 정보가 그대로 유지되는 것이죠.Skript의 변수 시스템은 처음에는 조금 헷갈릴 수 있지만, 이처럼 지역 변수를 임시 데이터로 사용하고 전역 변수를 영구 데이터로 활용한다는 개념을 이해하시면 스크립트 작성이 훨씬 수월해질 거예요! 궁금한 점이 해결되셨기를 바랍니다. 😊