개인 자료란 (JE)

  서버 커뮤니티

Profile ㅣㅕㅅㄷ 대표칭호 없음
Profile

질문하기 스크립트

마인크래프트 스크립트 질문

2021.02.13 조회 수 1468 추천 수 1
이해도 1.12 
게임버전 (JE) 모드버킷 
스크립트 애드온 2.2-dev37 

죽은'플레이어 주변 2칸에서 3초동안 앉아있다면' 되살린다.

구문은 어떻게 짜야 할까요

on sneak toggle:
    if player is sneaking for 4 seconds:
        loop all players in radius 2 of player:
            if {death.list::*} contains loop-player:
                remove loop-player from {death.list::*}
                set health of loop-player to 20
                broadcast "&a%player%님이 %loop-player%님을 되살렸습니다"

                


이렇게 했는데 작동이 안되네요

4개의 댓글

스크립터브혼
2021.02.14

1. 주변에 죽은 플레이어가 있는지 판단하려면...

살아 있는 플레이어 기준에서죽은 플레이어는 [Entities]익스프레션으로 받아 올 수 없습니다.

모든 플레이어를 루프(Loop)하여, 죽어있어야 하고, 두 플레이어간 거리가 좁은 플레이어를 선별해야만 합니다.


엔티티가 죽어있는지 확인하는 컨디션은 [Is Alive]입니다.

> %entities% is alive

> %entities% is dead


두 좌표간 거리는 [Distance]익스프레션으로 받아 올 수 있습니다.

> distance between %location% and %location%

엔티티의 위치는 [Location Of]익스프레션으로 받아 올 수 있습니다.

> location of %entity%



2. 일정 시간 웅크리기(Sneak)했는지 판단하려면...

일정 시간 동안 계속 웅크리고 있었지 반복적으로 확인해야 합니다.

[Delay]이펙트로 코드 실행을 지연시킬 수 있습니다.

반복문(Loop) 안에 Delay를 사용하여 일정시간마다 반복하는 코드를 작성하시고,


그 안에 [Is Sneaking]컨디션 조건문으로 하여 웅크리지 않은 경우가 있으면 실패로 판단합니다.

> %players% is sneaking


반복문이 끝날때 까지 실패하지 않으면 성공으로 판단합니다.



3. 죽은 플레이어를 그 자리에 살려내려면...

1과 2의 판단이 모두 만족되어 살릴 수 있는 플레이어가 있다면

플레이어를 살려내기 전에 살려낼 플레이어의 위치를 변수에 먼저 저장합니다.

플레이어를 강제 리스폰하고나면 플레이어의 위치가 스폰지역으로 바뀌기 때문입니다.


[Force Respawn]이펙트로 강제 리스폰 시킨 후

> force %players% to respawn

[Teleport]이펙트로 저장했던 위치로 텔레포트하면 됩니다.

> teleport %entities% to %location%



스크립트 사용법을 잘 모르신다면 [입문자, 초보자를 위한 스크립트 강좌]를 참고하세요.

ㅣㅕㅅㄷ
2021.02.14
@스크립터브혼

제 설명이 부족했네요!! 죽은 플레이어를 말한 건 죽을정도의 데미지를 받으면 데미지 받는 이벤트를 취소하고 구속을 걸어 움직이지 못한 상태를 죽었다고 표현한 것입니다... 착오 드려 죄송합니다..!  

3초동안 웅크리기는 어떻게 해결했는데 이게 죽은 사람이 웅크리기를 해도  적용이 돼서 자기자신을 살릴 수 있게 되었네요

혹시 해결방법이 있을까요..?


on sneak toggle:
    if player is sneaking:
        loop all players in radius {@기절소생범위} of player:
            if {death.list::*} contains loop-player:
                message "되살리는중."
                message "되살리는중." to loop-player
        wait 1 seconds
        if player is sneaking:
            loop all players in radius {@기절소생범위} of player:
                if {death.list::*} contains loop-player:
                    message "되살리는중.."
                    message "되살리는중.." to loop-player
        wait 1 seconds
        if player is sneaking:
            loop all players in radius {@기절소생범위} of player:
                if {death.list::*} contains loop-player:
                    message "되살리는중..."
                    message "되살리는중..." to loop-player
                    remove loop-player from {death.list::*}
                    set health of loop-player to {@기절소생후피}
                    broadcast "&a%player%님이 %loop-player%님을 되살렸습니다"

구문은 이런 식으로 작성 했습니다!

스크립터브혼
2021.02.14
@ㅣㅕㅅㄷ

loop-player가 player와 같지 않다는 조건을 추가하세요

> player is not loop-player

ㅣㅕㅅㄷ
2021.02.14
@스크립터브혼

해결됐습니다!! 감사합니다!!