콘텐츠로 이동

예제: event_example

월드 로직에 NPC 대화 · 퀘스트 type 세 개를 더하는 예제 · id event_example · SDK ^1.2 · 최신판 1.0.0

관리자 창 이름은 「씬 이벤트 예제 (NPC 대화 · 퀘스트)」입니다. AddSceneEvent 의 세 역할(트리거 · 조건 · 동작)과 Simulate 있음 · 없음을 모두 보여 줍니다.

보여 주는 것type
Simulate 없는 트리거(「발동」 단추로만)npc_talk
Simulate 있는 조건(플러그인이 기억한 상태로 판정)quest_state
Simulate 있는 동작(기록 + 상태 바꾸기)quest_start
Actor · Text · Enum · Bool 칸세 type 의 칸
Summary 틀세 type 모두
항목값
에디터0.9.0 이상
SDK1.2 이상(^1.2)
의존 플러그인없음
게임 서버NP Scene 서버 플러그인 + 같은 type 처리기(아래 「서버 쪽 동작」)
소스NP Editor 소스의 samples/plugins/event_example/ (Plugin.cs · EventExample.csproj · plugin.json)
  1. 빌드합니다.
    dotnet build samples/plugins/event_example/EventExample.csproj -c Release
    소스 밖에서 빌드하면 빠른 시작처럼 설치 폴더의 NP.Editor.Sdk.dll 을 참조하도록 csproj 를 바꿉니다.
  2. EventExample.dll 과 plugin.json 을 %APPDATA%\NPEditor\plugins\event_example\ 에 복사합니다. NP.Editor.Sdk.dll 은 넣지 않습니다.
  3. 도구 › 플러그인 관리자… 에서 「다시 훑기」를 누릅니다.
  4. 「등록」 칸에 씬 이벤트 3 이 보이면 됩니다.

「NPC 에게 처음 말을 걸면 퀘스트 q1 을 시작」하는 규칙을 만들고 플레이로 시험합니다.

  1. 표시(display) · 글(text) · 스폰(spawn) 씬 액터 하나를 놓습니다. 이것이 NPC 입니다.
  2. 도구 › 월드 로직 을 열고 규칙을 더합니다.
  3. 트리거: 묶음 「퀘스트(예제)」 › 「NPC 에게 말 걸 때」. 「NPC」 칸에 1번 액터를 고릅니다.
  4. 조건: 「퀘스트 상태」. 「퀘스트 id」 = q1, 「상태」 = none.
  5. 동작: 「퀘스트 시작」. 「퀘스트 id」 = q1.
  6. 규칙 한 줄 설명이 「플레이어가 NPC 「<액터 이름>」 에게 말을 걸면」으로 보입니다.
  7. 월드 로직 패널의 「플레이로 시험」으로 플레이를 시작하고, 그 규칙의 「발동」을 누릅니다.
  8. 월드 로직 패널의 기록 목록에 [event_example] 퀘스트 q1 시작 → <플레이어> 가 남습니다.
  9. 「발동」을 한 번 더 누릅니다. 이제 상태가 active 라 조건이 거짓이고 동작이 돌지 않습니다.

같은 규칙은 로직 그래프에서 노드 세 개로 보입니다. NPC 액터의 데이터 핀을 「NPC」 칸에 이을 수 있습니다.

종류이름설명
월드 로직 트리거npc_talk 「NPC 에게 말 걸 때」플레이어가 NPC 와 대화를 시작할 때. 서버 플러그인이 일으킵니다. 미리보기에서는 「발동」 단추로만 일어납니다. 아이콘 interact
월드 로직 조건quest_state 「퀘스트 상태」트리거한 사람의 퀘스트가 그 상태일 때 참. 아이콘 logic
월드 로직 동작quest_start 「퀘스트 시작」트리거한 사람의 퀘스트를 active 로. 아이콘 star
이벤트WorldChanged미리보기용 퀘스트 상태를 비웁니다.

세 type 모두 메뉴 묶음 「퀘스트(예제)」에 있습니다.

한 줄 설명: 플레이어가 NPC {npc} 에게 말을 걸면

필드형식필수기본값설명
npcActor (display · text · spawn)예—말을 거는 NPC 액터
lineText아니요—대사 id. 비면 아무 대사

한 줄 설명: 퀘스트 {quest} 가 {state} 일 때

필드형식필수기본값설명
questText예—퀘스트 id
stateEnum (none · active · done)아니요none상태

한 줄 설명: 퀘스트 {quest} 시작

필드형식필수기본값설명
questText예—퀘스트 id
notifyBool아니요true알림 표시

scene.json 에는 이렇게 저장됩니다(규칙 일부).

{
"trigger": { "type": "npc_talk", "npc": "npc_guard" },
"conditions": [ { "type": "quest_state", "quest": "q1", "state": "none" } ],
"actions": [ { "type": "quest_start", "quest": "q1" } ]
}

이 예제는 에디터 쪽만 있습니다. 게임 서버에서 규칙을 돌리려면 NP Scene 서버 플러그인에 같은 type 세 개의 처리기를 등록해야 합니다.

type서버 처리기가 할 일
npc_talkNPC 대화 이벤트에서 npc(와 line)가 맞는 규칙을 일으킴
quest_state퀘스트 저장소에서 트리거한 사람의 상태를 읽어 비교
quest_start퀘스트를 active 로 바꾸고, notify 면 알림
  • 처리기는 Paper 플러그인에서 Bukkit ServicesManager 로 받은 SceneEventsApi 에 등록합니다.
  • 처리기가 없는 서버는 이 type 들을 경고 한 번과 함께 건너뜁니다. npc_talk 규칙은 돌지 않습니다.
  • 미리보기의 퀘스트 상태는 에디터 메모리에만 있습니다. 새 월드 · 열기 · 플러그인 끄기에서 비워지고 서버와 나누지 않습니다.
  • quest_start 의 notify 칸은 미리보기에서 쓰지 않습니다(기록만 남김).
  • line 칸은 미리보기에서 쓰지 않습니다.
  • type 이름에 플러그인 접두어가 없습니다(npc_talk …). 예제라서 짧게 두었습니다. 내 플러그인에서는 myquest_npc_talk 처럼 내 이름을 붙입니다. 다른 플러그인이 같은 type 을 먼저 등록하면 이 예제는 켜지지 않습니다.
  • 플러그인을 끄면 이 type 을 쓰는 규칙은 「모르는 type」 주의가 됩니다. 규칙과 칸 값은 지워지지 않습니다.
판날짜내용
1.0.02026-10-04첫 판(SDK 1.2): 트리거 npc_talk · 조건 quest_state · 동작 quest_start