Breakkill64 071f3712e33544d4a0664483e5d9ea91
예전부터 이런걸 만들고싶었는데 기술이 없어서 어떻게 만들까 고민하다가 노가다로 한번 만들어봤습니다 솔직히 초보가 만든거니까 봐주세용~
1.12.2 간단한 아이템 상점 만들기
구성
일단 판매하고 구매하는 아이템이 한정되어 있습니다. 그 모든 과정을 일일이 해야하므로 아이템 교환은 41가지만 합니다
일단 커맨드는 간단합니다 4개의 커맨드가 하나의 판매 혹은 구매를 맡아서 계산을 해줍니다 그리고 그걸 41개씩 만들어주면 됩니다
위에 점토는 아이템마다 다르게 분류했습니다 하얀색은 광물, 주황색은 블럭, 보라색은 나무, 파란색은 기타아이템으로 구분을 위해서입니다.
그러다가 문득 이 커맨드가 서바이벌에 적용되면 생길 불편함이나 문제점을 테스트 하다가 생긴게 바로 인벤토리에 있는 아이템을 한 종류 지정된 수량에만 맞춰서 탐색을 해서 판매라인만 1~64개의 수량을 탐색하게 만들었습니다.
그러다 생긴게 이 커맨드 넓게 펼쳐진 두판이 전부 판매라인입니다.
사용방법
처음에는 상점을 맵을 만들까 하다가 건축실력이 똥인지라 그냥 체스트커맨드와 variabletriggers로 대체했습니다
체스트커맨드는 execute로 잘만 돌려쓰면 채팅창에 구문이 나올것도 없이 바로 뜨더라고요 그래서 채팅창에 /상점 이라고 하면 variabletriggers로 상점에 관련된 스코어보드 점수를 변형해서 만들었습니다
커맨드
아마도 전문가이신분들이 이 게시글을 찾아오신거면 딴건 몰라도 이건 관심 있으실지도 모르겠네요
커맨드 구성은 엄청 간단합니다. 코블스톤블럭 1개 판매를 기준으로 커맨드를 보여드리겠습니다.
먼저 스코어보드 전부 더미로 판매,판매초기화,판매타이머,돈 4종류를 만들어줍니다
판매는 1~41종류의 아이템을 지정하고 판매 초기화는 해당 커맨드가 제대로 작동을 했으면 해당 커맨드가 초기화 되서 반복하지 않게 하고 판매타이머는 커맨드가 무조건적이 아니라 조건적이라 플레이어가 해당 아이템을 가지고 있지 않아서 판매 스코어는 활성화 되어있지만 판매 초기화가 활성화 되지 못하게 되면서 플레이와 서버에 지장이 가므로 이를 강제로 초기화 시키기 위해 "만약 판매 스코어가 활성화된 유저가 있으면 판매 타이머를 기록하고 그 기록한 시간이 0.3초 이상 지나면 강제로 전부 초기화 하게 만든다"를 실행시키기 위해 있습니다. 돈은 말 그대로 돈입니다
판매=scoreboard objectives add store dummy
판매초기화=scoreboard objectives add sstore dummy
판매타이머=scoreboard objectives add storeC dummy
돈=scoreboard objectives add money dummy 돈
정상 실행
1.반복형 커맨드(무조건적)
/execute @a[score_store_min=1,score_store=1] ~ ~ ~ /testfor @p {Inventory:[{id:"minecraft:cobblestone",Count:1b}]}
만약 판매 스코어의 점수가 1로 활성화된 유저가 인벤토리 안에 코블스톤 1개를 가지고 있는것이 감지를 한다
2.연쇄형 커맨드(조건적)
/scoreboard players add @a[score_store_min=1,score_store=1] money 100
해당 플레이어에게 스코어보드 money에 점수 100을 추가합니다
3.연쇄형 커맨드(조건적)
/clear @a[score_store_min=1,score_store=1] cobblestone 0 1
해당 플레이어의 인벤토리에서 코블스톤 1개를 제거합니다
4.연쇄형 커맨드(조건적)
/execute @a[score_store_min=1,score_store=1] ~ ~ ~ /scoreboard players set @p sstore 1
해당 플레이어에게 sstore를 활성화 한다
비정상 실행
1.반복형 커맨드(무조건적)
/execute @a[score_store_min=1,score_store=1] ~ ~ ~ /testfor @p {Inventory:[{id:"minecraft:cobblestone",Count:1b}]}
만약 판매 스코어의 점수가 1로 활성화된 유저가 인벤토리 안에 코블스톤 1개를 가지고 있는것이 감지를 한다
(감지 실패)
1.반복형 커맨드(무조건적)
/execute @a[score_store_min=1,score_store=100] ~ ~ ~ /scoreboard players add @p storeC 1
스코어 store가 점수 1~100사이에 활성화된 유저는 storeC의 점수를 1씩 추가한다
2.연쇄형 커맨드(조건적)
/execute @a[score_storeC_min=6] ~ ~ ~ /scoreboard players reset @p store
스코어 storeC가 6(0.3초)을 넘은 유저의 store점수를 초기화 한다
3.연쇄형 커맨드(조건적)
/execute @a[score_storeC_min=6] ~ ~ ~ /tellraw @p {"text":"판매대상이 없습니다","color":"red"}
스코어 storeC가 6(0.3초)를 넘긴 유저에게 tellraw 명령어를 실행한다
4.연쇄형 커맨드(조건적)
/execute @a[score_storeC_min=6] ~ ~ ~ /scoreboard players reset @p storeC
스코어 storeC 가 6(0.3초)를 넘긴 유저의 storeC를 초기화 한다
초기화 커맨드
1.반복형 커맨드(무조건적)
/execute @a[score_sstore_min=1] ~ ~ ~ /scoreboard players reset @p store
스코어 store 의 점수가 활성화된 유저는 store의 점수를 초기화한다
2.연쇄형 커맨드(조건적)
/execute @a[score_sstore_min=1] ~ ~ ~ /scoreboard players reset @p sstore
스코어 sstore 의 점수가 활성화된 유저는 sstore의 점수를 초기화 한다
타이머 초기화
1.반복형 커맨드(무조건적)
/execute @a[score_sstore_min=1] ~ ~ ~ /scoreboard players reset @p storeC
스코어 sstore가 활성화된 유저의 storeC 스코어 점수를 초기화 한다
이게 기본 아이템 하나의 계산이고 전 판매라인의 경우 64개 전부 만들어서 41가지의 아이템에 한정에 어떠한 수량을 가지고 있더라도 크게 문제없이 판매가 가능합니다
이해 안되는 부분이나 추가설명을 바라시면 댓글 부탁드려용
아이스틴
2019.12.07커맨드로 하니 노가다가 심하네요 ㅜㅜ
흑염
2019.12.07에초에 간단한 미니게임을 목적으로 만든거지만 한번 만들어보고 싶어서 이렇게 만들어봤네요 봐주셔서 감사합니다
Tmdvlf
2019.12.07좋은 정보 감사합니다.
흑염
2019.12.07트리거나 함수부분은 자세히 못배워서 간단한 execute랑 스코어보드 testfor로 만든거라 아마도 더욱 전문적이신 분은 저거의 한 1/100 크기로 줄이실수있으실겁니다
dodrang
2019.12.07ㄷㄷ 쩌네요
흑염
2019.12.07감사합니다
SunDayMoonNight
2019.12.07완전 핵노가다지만... 결국 완성한 당신을 칭찬합니다! 멋져요!
dfdeer
2020.05.07코블스톤 1개를 감지한다고 하면 여러개가 뭉쳐있을 때는 감지가 안되던데 어떻게 하나요?
흑염
2020.05.15하나의 아이템을 감지하는데 256개의 커맨드를 굳이 왜 만들었을까요 위에서 말했다 싶이 특정 수량,아이템,등등을 지정하는건 4개의 커맨드와 초기화 커맨드만 있어도 되는데도 불구하고
mchang
2020.07.01우와........대단하시네요
eeeeeeeeeeeeeerror
2020.07.02무한으로 즐겨요 노가다커맨드
ryan7047
2020.10.03모드, 스크립트와 어떤일이 있으셨길래 이렇게 까지 하시는거죠??
아니, 이러시는 이유가 있으실거 아니에요
김삐삐
2020.10.16와... 장인...
명이
2020.10.16ㅎㅎ 플긴이 답이죠
자바를 배우세요!
JihoonLee
2020.12.15우ㅜ오ㅗㅘㅏ
JihoonLee
2020.12.15이ㅣ거 기초 맞쥐요?
Superhero
2020.12.23와....