개인 자료란 (JE)

  서버 커뮤니티

Profile GameDeveloperMint_o 대표칭호 없음

Mint_o f86357f6ed4c4a6ea4a0535127a742c8

Profile

질문하기 스크립트

pvp 팀 스크립트 질문

2021.05.30 조회 수 1467 추천 수 0
이해도 1.16 
스크립트 버전 입문자(아무것도 몰라요) 
스크립트 애드온 2.5.1 이상 

pvp 팀끼리는 때려지지 않고 상대팀만 때려지는 스크립트 만드려고 하는데 가르쳐 주실 수 있나여?

1개의 댓글

스크립터브혼
2021.05.30

리스트 변수로 팀이 된 플레이어를 저장하고 on damage에서 같은 팀인 경우 캔슬하면 됩니다.

# 팀 세팅
command /set.team <text>:
    trigger:
        set {_team} to arg-text

        # 플레이어의 팀 세팅
        set {user::%player%.team} to {_team}

        # 팀 목록에 플레이어 세팅 (한번만 저장되도록 조건문 추가)
        if {team::%{_team}%::*} don't contain player:
            add player to {team::%{_team}%::*}

        send "{user::%player%.team} = %{user::%player%.team}%"

# 공격 제어
on damage:

    # 공격자의 팀 세팅
    set {_team} to {user::%attacker%.team}
    {_team} is set

    # 공격자의 팀 목록에 피격자가 있음 (같은 팀)
    {team::%{_team}%::*} contain victim

    cancel event
    send "팀원 공격 방지" to attacker

두 플레이어가 서로 공유하는 팀이라는 정보가 필요합니다.

다르게 표현하면 두 플레이어의 상호작용을 팀이 통제한다고 생각하면됩니다.


그렇기 때문에...


첫번째로 플레이어는 어떤 팀인지 알 수 있어야 합니다.

먼저 어떤 팀인지 확인할 수 있는 키가 필요합니다. 예문에서는 {_team} 변수입니다.

그리고 플레이어의 정보로 이 변수값에 접근 할 수 있게 구성해야 합니다.

그래서 플레이어의 이름을 사용하여 {user::%player%.team} 변수에 {_team}을 저장합니다.


두번째로 팀은 플레이어가 자신의 일원임을 알아야 합니다.

그래서 {team::%{_team}%::*} 리스트에 플레이어를 추가합니다.

조건문을 통해서 팀이 아닌 경우에만 추가 할 수 있도록 합니다.


이렇게 플레이어와 팀의 데이터가 준비가 되면 이것을 토대로 on damage 이벤트를 통제하면됩니다.

공격자가 공격을 했을때 저장해둔 {user::%attacker%.team} 변수로 플레이어의 팀을 가져오고

{team::%{_team}%::*} 리스트에 공격자가 포함하는지를 확인합니다.

포함된다면 같은 팀이기 때문에 이벤트를 취소합니다.