예제: 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 이상 |
| SDK | 1.2 이상(^1.2) |
| 의존 플러그인 | 없음 |
| 게임 서버 | NP Scene 서버 플러그인 + 같은 type 처리기(아래 「서버 쪽 동작」) |
| 소스 | NP Editor 소스의 samples/plugins/event_example/ (Plugin.cs · EventExample.csproj · plugin.json) |
- 빌드합니다.
소스 밖에서 빌드하면 빠른 시작처럼 설치 폴더의dotnet build samples/plugins/event_example/EventExample.csproj -c Release
NP.Editor.Sdk.dll을 참조하도록 csproj 를 바꿉니다. EventExample.dll과plugin.json을%APPDATA%\NPEditor\plugins\event_example\에 복사합니다.NP.Editor.Sdk.dll은 넣지 않습니다.- 도구 › 플러그인 관리자… 에서 「다시 훑기」를 누릅니다.
- 「등록」 칸에
씬 이벤트 3이 보이면 됩니다.
빠른 시작
섹션 제목: “빠른 시작”「NPC 에게 처음 말을 걸면 퀘스트 q1 을 시작」하는 규칙을 만들고 플레이로 시험합니다.
- 표시(
display) · 글(text) · 스폰(spawn) 씬 액터 하나를 놓습니다. 이것이 NPC 입니다. - 도구 › 월드 로직 을 열고 규칙을 더합니다.
- 트리거: 묶음 「퀘스트(예제)」 › 「NPC 에게 말 걸 때」. 「NPC」 칸에 1번 액터를 고릅니다.
- 조건: 「퀘스트 상태」. 「퀘스트 id」 =
q1, 「상태」 =none. - 동작: 「퀘스트 시작」. 「퀘스트 id」 =
q1. - 규칙 한 줄 설명이 「플레이어가 NPC 「<액터 이름>」 에게 말을 걸면」으로 보입니다.
- 월드 로직 패널의 「플레이로 시험」으로 플레이를 시작하고, 그 규칙의 「발동」을 누릅니다.
- 월드 로직 패널의 기록 목록에
[event_example] 퀘스트 q1 시작 → <플레이어>가 남습니다. - 「발동」을 한 번 더 누릅니다. 이제 상태가
active라 조건이 거짓이고 동작이 돌지 않습니다.
같은 규칙은 로직 그래프에서 노드 세 개로 보입니다. NPC 액터의 데이터 핀을 「NPC」 칸에 이을 수 있습니다.
추가하는 것
섹션 제목: “추가하는 것”| 종류 | 이름 | 설명 |
|---|---|---|
| 월드 로직 트리거 | npc_talk 「NPC 에게 말 걸 때」 | 플레이어가 NPC 와 대화를 시작할 때. 서버 플러그인이 일으킵니다. 미리보기에서는 「발동」 단추로만 일어납니다. 아이콘 interact |
| 월드 로직 조건 | quest_state 「퀘스트 상태」 | 트리거한 사람의 퀘스트가 그 상태일 때 참. 아이콘 logic |
| 월드 로직 동작 | quest_start 「퀘스트 시작」 | 트리거한 사람의 퀘스트를 active 로. 아이콘 star |
| 이벤트 | WorldChanged | 미리보기용 퀘스트 상태를 비웁니다. |
세 type 모두 메뉴 묶음 「퀘스트(예제)」에 있습니다.
씬 이벤트 / 필드
섹션 제목: “씬 이벤트 / 필드”npc_talk (트리거)
섹션 제목: “npc_talk (트리거)”한 줄 설명: 플레이어가 NPC {npc} 에게 말을 걸면
| 필드 | 형식 | 필수 | 기본값 | 설명 |
|---|---|---|---|---|
npc | Actor (display · text · spawn) | 예 | — | 말을 거는 NPC 액터 |
line | Text | 아니요 | — | 대사 id. 비면 아무 대사 |
quest_state (조건)
섹션 제목: “quest_state (조건)”한 줄 설명: 퀘스트 {quest} 가 {state} 일 때
| 필드 | 형식 | 필수 | 기본값 | 설명 |
|---|---|---|---|---|
quest | Text | 예 | — | 퀘스트 id |
state | Enum (none · active · done) | 아니요 | none | 상태 |
quest_start (동작)
섹션 제목: “quest_start (동작)”한 줄 설명: 퀘스트 {quest} 시작
| 필드 | 형식 | 필수 | 기본값 | 설명 |
|---|---|---|---|---|
quest | Text | 예 | — | 퀘스트 id |
notify | Bool | 아니요 | 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_talk | NPC 대화 이벤트에서 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.0 | 2026-10-04 | 첫 판(SDK 1.2): 트리거 npc_talk · 조건 quest_state · 동작 quest_start |