행소
대표칭호 없음
https://www.youtube.com/watch?v=F-KFLDob1vc
플레이어끼리 서로 겹치지않는 점수를
주고 싶은데 이게 pe 버전이라 je에는 스코어보드에 랜덤이 없네요
https://www.youtube.com/watch?v=F-KFLDob1vc
플레이어끼리 서로 겹치지않는 점수를
주고 싶은데 이게 pe 버전이라 je에는 스코어보드에 랜덤이 없네요
허두
2021.08.21저는 다음과 같은 커맨드를 사용했습니다!
준비물:
스코어보드 ezc_random (/scoreboard objectives add ezc_random dummy)
플레이어 -1의 ezc_random 값은 -1 (/scoreboard players set -1 ezc_random -1)
랜덤 범위가 123부터 456 사이라면
플레이어 from의 ezc_random 값은 123 (/scoreboard players set from ezc_random 123)
플레이어 to의 ezc_random 값은 456 (/scoreboard players set to ezc_random 123)
결과:
채팅창에 랜덤값 표시
플레이어 num의 ezc_random 값이 랜덤 값 (/scoreboard players get num ezc_random)
추가로 랜덤 범위가 작다면 이 방법도 가능합니다 :)
https://www.koreaminecraft.net/dev_question/2745351
행소
2021.08.21혹시 설명해주실수있나요? 5에서 10까지 난수가필요합니다
행소
2021.08.21해봤는데 각 플레이어에게 각각 다른 점수가 들어가야되는데 텔로우만 랜덤으로 뜨네요
허두
2021.08.211번째 명령어는 area_effect_cloud라는, 의미 없는 엔티티를 생성합니다. (사실 어느 엔티티를 이용하던 상관은 없어요)
모든 엔티티에게는 UUID라고 하는, 랜덤으로 생성된 4개의 정수로 이루어진 태그가 있기에 그것을 이용할 예정이에요.
2번재 명령어는 1에서 생성한 엔티티의 UUID에서 첫번째 숫자를 받아옵니다. (사실 몇번째를 받아오던 상관은 없어요)
받아온 숫자는 ezc_random 스코어보드의 num 플레이어에게 저장됩니다.
3번째 명령어는 만약 숫자가 음수일 경우 양수로 바꿔줍니다. (사실 이거 필요없을것 같기도 한데..)
4번째 명령어는 랜덤 숫자에 최댓값으로 나머지연산을 해줍니다. (나머지연산: 나눈 나머지를 결과값으로 하는 연산, 예를 들어 13%5=3이 됩니다)
5번째 명령어는 랜덤 숫자를 최솟값을 더해줍니다. 이로써 최솟값 <= 랜덤숫자 < 최댓값이 됩니다.
6번째 명령어는 랜덤 숫자에 1을 더해줍니다. 이로써 최솟값 < 랜덤숫자 <= 최댓값이 됩니다.
7번째 명령어는 그냥 랜덤 숫자를 출력해주는 tellraw입니다
8번째 명령어는 1에서 소환한 엔티티를 삭제함으로써 전체적인 코드 실행을 정리하며 종료해줍니다.
+ 모든 플레이어에게 랜덤 값이 들어가길 원하신다면, 뒤에 num값을 자신에게 받아오는 명령어를 붙이고
(/scoreboard players operation @s 스코어보드 = num ezc_random)
이 명령어들을 모든 플레이어가 모두 한번씩 실행하게 해주시면 좋을것같아요!
가장 좋은 방법은 데이터팩의 함수로 만들어서 execute as @a run function path:to/function/file로 해주시는거고요 :)
행소
2021.08.21자신에게 받아오는 명령어를 붙힌다는게 뭔뜻인가요? , 마지막에 이거 한번 실행시키면되나요? /scoreboard players operation @a num ezc_random
허두
2021.08.21음 그냥 이 데이터팩 적용하고, 위에 명령어 다 필요없이
/execute as @a run function ezc:random
이거만 실행해주세요!
random.zip
행소
2021.08.21두플레이어가 겹치면 안되는데 두플레이어 모두 2 또는 5같이 랜덤숫자가 공유됩니다
허두
2021.08.21음 그러면 다른 방법을 한번 시도해보죠! 랜덤값의 범위가 어디부터 어디까지인가요? (총 5명 / 1,2,3,4,5 중 하나와 같이 정확히 표현해주세요)
행소
2021.08.21총 5명일때 1 2 3 4 5, 총 6명일때 1,2,3,4,5,6, 7명일때 1,2,3,4,5,6,7 8명일때 1,2,3,4,5,6,7,8 ,9명일때 1,2,3,4,5,6,7,8,9, 10명일때,1,2,3,4,5,6,7,8,9,10을 겹치지않게 부여받아야해요
허두
2021.08.21그럼 한번 이렇게 해봅시다
첫번째 명령어는 반복형 무조건적 레드스톤 필요 / 나머지 명령어는 연쇄형 무조건적 항상 활성화로 한줄로 쭉 잇고
반복형 명령 블록 옆의 아무데나, 레드스톤 블록이 설치될 좌표를 일곱번째 명령어의 _REDSTONEPOS_ 자리에 넣어주세요.
이어 레드스톤 블록을 설치하여 실행하면 곧이어 모두의 ezc_random 스코어보드에 값이 들어가며 레드스톤 블록이 사라집니다.
행소
2021.08.21정말 감사합니다 되네요. 근데 죄송하지만 설명한번만 부탁드려도될까요 이구문을 이해하고싶어서요
허두
2021.08.21해결되셨다니 다행입니다 :)
우선 베이스로, 이 명령어는 반복해서 작동하며 플레이어들마다 순서대로 번호를 붙여줍니다.
플레이어들에게 붙은 id 태그는 랜덤 값 부여가 완료된 플레이어라는 뜻입니다.
또한 ezc_random 스코어보드의 id의 값이 1씩 증가하며 숫자가 겹치지 않도록 조정됩니다.
즉, 숫자는 일정하게 증가하지만, 숫자가 누구에게 붙냐가 랜덤으로 정해지는 것입니다.
1번째 구문에서는 처음 실행되었을 때(=id 태그가 붙은 플레이어가 하나도 없을 때) 값(ezc_random의 id)을 1로 초기화해줍니다.
2번째 구문에서는 아직 태그를 부여받지 않은(tag=!id) 플레이어들 중 랜덤으로(sort=random) 1명에게(limit=1) random 태그를 붙여줍니다.
random 태그는 이번 작동에서 랜덤 값을 를 부여해줄 플레이어를 뜻합니다.
3번째 구문에서는 2에서 랜덤으로 선정한 플레이어(tag=random)에게 현재 값(ezc_random의 id)을 부여해줍니다.
이로써 플레이어가 랜덤 값을 가지게 됩니다.
4번째 구문에서는 2에서 랜덤으로 선정한 플레이어(tag=random)에게 랜덤값 부여가 완료되었다는 뜻에서 id 태그를 붙여줍니다.
이 태그를 붙여주는 이유는, 2에서 플레이어를 선정할 때 이미 값을 부여받은 플레이어가 다시 선정되는 일을 방지하기 위해서입니다.
5번째 구문에서는 2에서 선택된 플레이어를 선택 해제(random 태그 제거)시킵니다.
이로써 다음 동작에서 다시 플레이어를 선정했을 때 딱 한 명만이 선정되었다는 표시(random 태그)를 가지게 됩니다.
6번째 구문에서는 다음 플레이어에게 부여해줄 값(ezc_random의 id)을 1 증가시켜줍니다. 이렇게 하면 값이 겹치는 일이 없습니다.
7~8번째 구문에서는 모든 플레이어가 랜덤 값을 부여받았는지(id 태그가 붙지 않은 플레이어가 하나도 없을 때)를 판별하여 시스템을 종료합니다.
7번째 구문에서는 레드스톤 블럭을 파괴하여 다음 틱에 더 이상 코드가 실행되지 않게 하고,
8번째 구문에서는 모두가 랜덤 값을 부여받았다는 표시로 가지고 있던 id 태그를 제거하여 다음 시스템 작동 때 꼬이지 않도록 합니다.
이해가 잘 되지 않는 부분이 있다면 답글로 남겨주세요 :>
행소
2021.08.21플레이어 -1의 ezc_random 값은 -1 (/scoreboard players set -1 ezc_random -1) 그리고 이게 뭘의미하는지도 궁금합니다