build1006
대표칭호 없음
이해도 | 입문자 |
---|---|
게임버전 (JE) | 1.19.2 |
게임버전 (BE) | 관련없음 |
on swap hand items:
cancel event
set {_현재아이템} to player's tool
if {_현재아이템} = wooden sword:
if player is not on ground:
if {can_dash} is 0:
set {can_dash} to 1
push the player forwards at speed 0.25
remove strength from player
apply potion of strength of tier 1 to player for 1 seconds replacing existing effect
every 1 tick:
loop all players:
if loop-player is on ground:
set {can_dash} to 0
이렇게 공중에서 한 번만 대쉬할 수 있게 하는 코드를 짰는데 작동이 안 됩니다
어디가 문제인지 알려주실 수 있나요?
코코냐
2022.11.19can_dash 값이 전역변수 1개인것 같습니다.
build1006
2022.11.19좀 더 자세히 알려주실 수 있나요?
qsef1256
2022.11.20일단 이미 true 랑 false가 있으니 해당 구문을 먼저 사용해주시기 바랍니다.
근데 제가 테스트 해본 바로는 큰 문제가 없는 것 같습니다. 기타 잡다한 구문은 뺐긴 했는데 기본적인 작동은 합니다. 혹시 모르니까 제가 쓴 소스는 여기 올리겠는데, 어떻게 작동을 안 하는 건지 설명을 좀 더 해주셔야 할 것 같습니다.
build1006
2022.11.20공중에서 여러 번 대쉬가 됩니다
qsef1256
2022.11.20해당 부분도 확인 했었습니다. 여러 번 f 를 눌러도 공중에서는 "dash" 한번만 됬었어요. 재현 불가 합니다.
build1006
2022.11.21여러 명이서 할 때 버그가 일어나네요
qsef1256
2022.11.22그 문제라면 각 플레이어마다 배열변수로 만들어야 할 부분인 것 같네요. 근데 그러면 on tick으로 인해 서버에 심각한 렉을 유발할테니 다른 구조를 택하시는 게 맞습니다
build1006
2022.11.25어떤 구조로 해야될까요 ㅠ
qsef1256
2022.11.25on tick 을 쓰지 마시구요, 그냥 on swap hand items 만 이용해서 true false 구현을 할 수 있을 것 같네요.
on swap hand items: cancel event if player is on ground: clear {dash::%event-player%} else: if {dash::%event-player%} is true: stop set {dash::%event-player%} to true dash(event-player) function dash(player: player): push the {_player} forwards at speed 0.25 broadcast "dash"
build1006
2022.11.26감사합니다
build1006
2022.11.26근데 이렇게 하면 땅에서 f를 한 번 더 눌러야 대쉬가 되는데 그건 해결 못 할까요 ㅠ
build1006
2022.11.26on swap hand items:
cancel event
if player is not on ground:
if {dash::%event-player%} is true:
stop
set {dash::%event-player%} to true
dash(event-player)
while {dash::%event-player%} is false:
if event-player is on ground:
set {dash::%event-player%} to false
function dash(player: player):
push {_player} forwards at speed 0.25
broadcast "dash"
이런 식으로 땅에 닿이면 변수가 false로 바뀌게 해놨는데 왜 작동이 안 될까요 ㅠ
qsef1256
2022.11.26while 쓰는 건 괜찮은 선택이라고 생각되네요, 근데 while {dash::%event-player%} is true를 쓰셔야죠. while의 정의가 조건이 true 인 동안 계속 반복하겠다니까요. 렉 방지를 위해서 wait 5 tick 도 넣어주시고요.
build1006
2022.11.26넵 감사합니다
build1006
2022.11.26진짜 죄송한데 스크립트가 최종적으로 이렇게 작성이 됐거든요
on swap hand items:
cancel event
if player is not on ground:
if {dash::%event-player%} is true:
stop
set {dash::%event-player%} to true
dash(event-player)
while {dash::%event-player%} is true:
if event-player is on ground:
set {dash::%event-player%} to false
wait 5 tick
function dash(player:player):
push {_player} forwards at speed 0.25
broadcast "dash"
근데 작동이 안 됩니다 왜 그럴까요 ㅠ
qsef1256
2022.11.26서버 안 터지던가요? 전 while에서 서버 터지던데요
build1006
2022.11.26안 터집니다 근데 그냥 작동이 안되네요
qsef1256
2022.11.26이걸로 한번 해보세요.
qsef1256
2022.11.26while은 잘 쓰면 편리하지만 기본적으로 무한 루프를 일으키고 서버 터트릴 위험이 높은 구문이에요. wait 5 tick 이 if 밑에 있는데 이러면 만약 if 문의 조건을 잘못 입력해서 if 문에 접근이 불가 하게 되어버리면 그냥 무한 루프가 벌어집니다.
build1006
2022.11.26저거 그대로 복붙했는데 안 써지네요 ㅠ
qsef1256
2022.11.26기존 dash 변수가 남아서 그럴 가능성이 있습니다. variables.csv에서 수동으로 삭제하거나 clear {dash::*} 를 실행하세요.
build1006
2022.11.27감사합니다