DoRaj1_ 4c9c95afcec34a3e9e8a1bc86f04e047
이해도 | 초보자 |
---|---|
게임버전 (JE) | 관련없음 |
게임버전 (BE) | 관련없음 |
스크립트 버전 | 2.9.4 |
각별님의 다크포레스트에서 신호기를 부쉈을 때 다른 팀이 부쉈는지 감지하는 이벤트를 만들고 있었는데
on break of beacon:
set {_beacon.break.loc} to event-block's location
loop 4 times: #4는 팀의 수
if {team.%loop-num%.data::*} contains event-player:
loop {team.%loop-num%.beacon.loc::*}:
if {team.%loop-num%.beacon.loc::*} contains {_beacon.break.loc}:
remove {_beacon.break.loc} from {team.%loop-num%.data::*}
remove {_beacon.break.loc} from {team.%loop-num%.beacon.loc::*}
send "&c신호기가 %event-player%에게 파괴되었습니다!" to {team.%loop-num%.data::*}
stop
이 구문에서 밑줄쳐진 문장이 작동이 되지 않아
loop {team.%loop-num-1%.data::*}:
send "&c신호기가 %event-player%에게 파괴되었습니다!" to loop-value-2
를 사용해도 봤지만 여전히 작동이 되지 않고 오직 event-player로만 작성해야 작동이 되는 오류가 있어 질문드립니다..!
(참고로 {team.%loop-num%.data::*}는 신호기의 위치, 팀원과 팀장 모두 속해있는 변수입니다)
gamediller
3 시간 전이 스크립트는 신호기가 파괴되었을 때 팀원들에게 알림을 보내는 로직을 구현하려고 하는데,
문제는
{team.%loop-num%.data::*}
변수에서 특정 위치를 올바르게 탐색하거나 메시지를 전송하는 부분에서 발생하는 것 같습니다.코드 수정 제안
on break of beacon:
set {_beacon.break.loc} to event-block's location
loop 4 times: # 팀 수만큼 반복
if {team.%loop-num%.data::*} contains event-player:
# 신호기 위치가 해당 팀의 신호기 위치 목록에 포함되어 있는지 확인 (new!)
if {_beacon.break.loc} is in {team.%loop-num%.beacon.loc::*}:
remove {_beacon.break.loc} from {team.%loop-num%.beacon.loc::*} # 신호기 위치 제거
send "&c신호기가 %event-player%에게 파괴되었습니다!" to {team.%loop-num%.data::*} # 팀원들에게 알림
stop
설명
{team.%loop-num%.beacon.loc::*}
에_beacon.break.loc
가 포함되어 있는지 확인하는 방식으로 조건을 변경했습니다. 조건이 맞으면 해당 신호기 위치를 목록에서 제거하고, 알림을 보냅니다.loop-value
변수를 사용하지 않고 직접{team.%loop-num%.data::*}
에 메시지를 전송하도록 수정했습니다. 이는 Skript에서 전체 리스트에 메시지를 전송하는 방법 중 하나입니다.이렇게 수정해보시고, 문제가 계속 발생하면
{team.%loop-num%.data::*}
와{team.%loop-num%.beacon.loc::*}
변수가 올바르게 저장되고 있는지 확인하는 것이 좋습니다.커맨더도라
3 시간 전답변주셔서 감사합니다
일단 제안해주신 수정본으로 먼저 해본 뒤에 data 변수를 루프시켜 loop-value를 이용해보았지만 실패했습니다.. 저도 변수에 값이 잘못 저장되는 줄 알고 구문 중간에
send "%{team.%loop-num%.data::*}%" to event-player
를 사용해 값이 <닉네임> and <신호기 위치>로 잘 출력되는 것을 보고 질문을 드리게 되었습니다 혹시 변수에 닉네임이 아닌 좌표가 저장 되어도 변수 속의 플레이어에게 메시지사 가나요?
gamediller
3 시간 전리스트에 플레이어 이름(닉네임)뿐만 아니라 좌표나 기타 데이터가 함께 저장될 경우, 메시지를 전송할 때 스크립트가 문제를 일으킬 수 있습니다.
gamediller
3 시간 전send "&c신호기가 %event-player%에게 파괴되었습니다!" to {team.%loop-num%.data::*} # 팀원들에게 알림
아마 to {team.%loop-num%.data::*} 이부분에서 플래이어 닉네임 데이터 말고 다른 데이터를 포함해 메세지 전송에 문제가 생긴 것 같습니다.
gamediller
3 시간 전아래와 같이 변수를 분리하여 사용하는 방법을 시도해 보세요.
on break of beacon:
set {_beacon.break.loc} to event-block's location
loop 4 times: # 팀 수만큼 반복
set {_team.players} to filter {team.%loop-num%.data::*} where [input is a player]
set {_team.beacons} to {team.%loop-num%.beacon.loc::*}
# event-player가 해당 팀에 속해 있는지 확인
if {_team.players} contains event-player:
# 신호기 위치가 해당 팀의 신호기 위치 목록에 포함되어 있는지 확인
if {_team.beacons} contains {_beacon.break.loc}:
# 신호기 위치를 팀 신호기 목록에서 제거
remove {_beacon.break.loc} from {team.%loop-num%.beacon.loc::*}
# 신호기 파괴 알림을 해당 팀의 플레이어들에게 전송
loop {_team.players}:
send "&c신호기가 %event-player%에게 파괴되었습니다!" to loop-value
stop # 팀을 찾은 후 반복을 종료