サンプル: event_example
ワールドロジックに NPC 会話・クエストの type を 3 つ追加するサンプル・id event_example ・SDK ^1.2 ・最新バージョン 1.0.0
マネージャーウィンドウでの名前は「씬 이벤트 예제 (NPC 대화 · 퀘스트)」(シーンイベントのサンプル、NPC 会話・クエスト) です。AddSceneEvent の 3 つの役割 (トリガー・条件・アクション) と、Simulate のあり・なしをすべて示します。
| 示す内容 | type |
|---|---|
Simulate のないトリガー (「発動」ボタンでのみ) | npc_talk |
Simulate のある条件 (プラグインが記憶した状態で判定) | quest_state |
Simulate のあるアクション (記録 + 状態の変更) | quest_start |
Actor ・ Text ・ Enum ・ Bool 項目 | 3 つの type の項目 |
Summary テンプレート | 3 つの type すべて |
| 項目 | 値 |
|---|---|
| エディター | 0.9.0 以上 |
| SDK | 1.2 以上 (^1.2) |
| 依存プラグイン | なし |
| ゲームサーバー | NP Scene サーバープラグイン + 同じ type のハンドラー (下の「サーバー側の動作」) |
| ソース | NP Editor ソースの samples/plugins/event_example/ (Plugin.cs ・ EventExample.csproj ・ plugin.json) |
インストール
Section titled “インストール”- ビルドします。
ソースの外でビルドする場合は、クイックスタート のように、インストールフォルダーの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と表示されれば完了です。
クイックスタート
Section titled “クイックスタート”「NPC に初めて話しかけるとクエスト q1 を開始する」ルールを作り、プレイでテストします。
- 表示 (
display)・テキスト (text)・スポーン (spawn) のいずれかのシーンアクターを 1 つ配置します。これが NPC です。 - ツール › ワールドロジック を開き、ルールを追加します。
- トリガー: グループ「퀘스트(예제)」(クエスト、サンプル) › 「NPC 에게 말 걸 때」(NPC に話しかけたとき)。「NPC」項目で手順 1 のアクターを選びます。
- 条件: 「퀘스트 상태」(クエストの状態)。「퀘스트 id」 =
q1、「상태」(状態) =none。 - アクション: 「퀘스트 시작」(クエスト開始)。「퀘스트 id」 =
q1。 - ルールの 1 行説明が「플레이어가 NPC 「<アクター名>」 에게 말을 걸면」と表示されます。
- ワールドロジックパネルの「プレイでテスト」でプレイを開始し、そのルールの「発動」を押します。
- ワールドロジックパネルの記録一覧に
[event_example] 퀘스트 q1 시작 → <プレイヤー>が記録されます。 - 「発動」をもう一度押します。今度は状態が
activeなので条件が偽になり、アクションは実行されません。
同じルールは ロジックグラフ では 3 つのノードとして表示されます。NPC アクターのデータピンを「NPC」項目に接続できます。
追加されるもの
Section titled “追加されるもの”| 種類 | 名前 | 説明 |
|---|---|---|
| ワールドロジックのトリガー | npc_talk 「NPC 에게 말 걸 때」 | プレイヤーが NPC との会話を始めたとき。サーバープラグインが起こします。プレビューでは「発動」ボタンでのみ起こります。アイコン interact |
| ワールドロジックの条件 | quest_state 「퀘스트 상태」 | トリガーした人のクエストがその状態のとき真。アイコン logic |
| ワールドロジックのアクション | quest_start 「퀘스트 시작」 | トリガーした人のクエストを active にする。アイコン star |
| イベント | WorldChanged | プレビュー用のクエスト状態をクリアします。 |
3 つの type はすべてメニューグループ「퀘스트(예제)」にあります。
シーンイベント / フィールド
Section titled “シーンイベント / フィールド”npc_talk (トリガー)
Section titled “npc_talk (トリガー)”1 行説明: 플레이어가 NPC {npc} 에게 말을 걸면
| フィールド | 型 | 必須 | 既定値 | 説明 |
|---|---|---|---|---|
npc | Actor (display ・ text ・ spawn) | はい | — | 話しかける NPC アクター |
line | Text | いいえ | — | セリフ id。空の場合は任意のセリフ |
quest_state (条件)
Section titled “quest_state (条件)”1 行説明: 퀘스트 {quest} 가 {state} 일 때
| フィールド | 型 | 必須 | 既定値 | 説明 |
|---|---|---|---|---|
quest | Text | はい | — | クエスト id |
state | Enum (none ・ active ・ done) | いいえ | none | 状態 |
quest_start (アクション)
Section titled “quest_start (アクション)”1 行説明: 퀘스트 {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" } ]}サーバー側の動作
Section titled “サーバー側の動作”このサンプルにはエディター側しかありません。ゲームサーバーでルールを動かすには、NP Scene サーバープラグインに同じ 3 つの type のハンドラーを登録する必要があります。
| type | サーバーのハンドラーが行うこと |
|---|---|
npc_talk | NPC 会話イベントで、npc (と line) が一致するルールを起こす |
quest_state | クエストストアからトリガーした人の状態を読み取って比較 |
quest_start | クエストを active にし、notify なら通知 |
- ハンドラーは、Paper プラグインで Bukkit の
ServicesManagerから取得したSceneEventsApiに登録します。 - ハンドラーのないサーバーは、これらの type を警告 1 回とともにスキップします。
npc_talkのルールは動作しません。
制限 / 既知の問題
Section titled “制限 / 既知の問題”- プレビューのクエスト状態はエディターのメモリ上にしかありません。新規ワールド・開く・プラグインの無効化でクリアされ、サーバーとは共有しません。
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 |