Mule_sup_
대표칭호 없음
이해도 | 1.16 |
---|---|
게임버전 (JE) | 페이퍼 |
스크립트 버전 | 입문자(아무것도 몰라요) |
스크립트 애드온 | 2.5.2 |
command /spawn: trigger: set {_title} to "&f[ &a3 &f]" set {_time} to 3 play sound "BLOCK_STONE_BUTTON_CLICK_ON" with volume 0.8 and pitch 1 for player send title {_title} to player for 1 seconds wait 1 seconds set {_Xcoor} to x-coordinate of player set {_Ycoor} to y-coordinate of player set {_Zcoor} to z-coordinate of player loop {_time} times: if {_Xcoor} is x-coordinate of player: if {_Ycoor} is y-coordinate of player: if {_Zcoor} is z-coordinate of player: if loop-number < {_time}: set {_rest} to {_time} - loop-number play sound "BLOCK_STONE_BUTTON_CLICK_ON" with volume 0.8 and pitch 1 for player send title "&f[ &a%{_rest}% &f]" to player for 1 seconds wait 1 seconds else: send title "&f[ &a이동 완료 &f]" to player for 1 seconds execute player command "/essentialsspawn:spawn" play sound "ENTITY_PLAYER_LEVELUP" with volume 0.8 and pitch 0.9 for player else: send title "&f[ &4취소 &f]" to player for 1 seconds stop else: send title "&f[ &4취소 &f]" to player for 1 seconds stop else: send title "&f[ &4취소 &f]" to player for 1 seconds stop
우선 이게 제가 작성한 코드입니다. 사용자가 /spawn을 입력했을 때,
커맨드를 입력한 시점에 플레이어의 좌표값을 기록하고,
그 후 매초 플레이어의 좌표값과 현재의 좌표값 비교를 반복하여
도중에 움직임이 발생할 경우 이동을 취소하게 만들었습니다.
그러나 너무 정확한 체크는 도리어 플레이에 불편함을 줄 수 있기에
처음 1초간은 좌표값 비교를 하지 않고 무조건으로 "3초" 출력 후,
그다음 플레이어의 좌표값을 기록하고 그 뒤 나머지 초엔 좌표값을 비교하게
만들고자한 시행착오를 겪은 게 지금의 코드 모습입니다.
그러나 실제 적용 결과 '3초' 메세지 출력 후 '2초' 메세지가 나오기 전 잠깐의 시간동안
움직였을 경우, 이동이 취소되지 않아야 하는 기존의 목표와는 달리 '2초' 메세지가 나온 후
'1초' 메세지가 나오기 바로 직전 조건문에서 else로 판별해버립니다..
어떤 부분을 고쳐야 본 의도대로 실행되게 만들 수 있을까요??
스크립터브혼
2020.12.13플레이어가 움직이다 정지했을때 바로 멈추는게 아니라 짧게 미끄러집니다.
자연스러운 움직임을 위해 이러한 움직임을 보이는 것 같습니다.
명령 후 바로 살짝 움직인 것과, 2초가 되기 바로 전까지 움직인 것
두 경우 모두 2초 전에 움직였다고 생각하시겠지만 후자의 경우 2초가 된 후에도 약간 밀려 위치가 변경됩니다.
그래서 전자의 경우 바르게 동작하고, 후자의 경우 잘못된 동작처럼 보이게 됩니다.
스크립트는 기본 옵션으로 소수점 2자리만 표기하기 때문에 미세한 변화를 알 수 없는데,
config.sk파일의 number accuracy 옵션을 변경하여 더 작은 소숫점 자리까지 표시해서 확인해 보시길 바랍니다.
작성된 코드는 구현하고자 하는 것이 정확하게 구현 된 것이 맞습니다.
다만, 완전 일치가 아닌 조금은 유연하게 동작하게 하려면 시간을 지연하는 것 보다 판정 범위를 주는 것이 더 어울릴 것 같습니다.
x-coordinate of player > {_Xcoor} - 0.3 x-coordinate of player < {_Xcoor} + 0.3
이와 같이 각 성분의 ±0.3 정도 허용해 주도록 구성해보세요.
Mule_sup_
2020.12.13기술하신 방법대로 적용해보니
정확히 원하는대로 작동합니다!
감사합니다.