コンテンツにスキップ

サンプル: 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 以上
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) のいずれかのシーンアクターを 1 つ配置します。これが NPC です。
  2. ツール › ワールドロジック を開き、ルールを追加します。
  3. トリガー: グループ「퀘스트(예제)」(クエスト、サンプル) › 「NPC 에게 말 걸 때」(NPC に話しかけたとき)。「NPC」項目で手順 1 のアクターを選びます。
  4. 条件: 「퀘스트 상태」(クエストの状態)。「퀘스트 id」 = q1、「상태」(状態) = none。
  5. アクション: 「퀘스트 시작」(クエスト開始)。「퀘스트 id」 = q1。
  6. ルールの 1 行説明が「플레이어가 NPC 「<アクター名>」 에게 말을 걸면」と表示されます。
  7. ワールドロジックパネルの「プレイでテスト」でプレイを開始し、そのルールの「発動」を押します。
  8. ワールドロジックパネルの記録一覧に [event_example] 퀘스트 q1 시작 → <プレイヤー> が記録されます。
  9. 「発動」をもう一度押します。今度は状態が active なので条件が偽になり、アクションは実行されません。

同じルールは ロジックグラフ では 3 つのノードとして表示されます。NPC アクターのデータピンを「NPC」項目に接続できます。

種類名前説明
ワールドロジックのトリガーnpc_talk 「NPC 에게 말 걸 때」プレイヤーが NPC との会話を始めたとき。サーバープラグインが起こします。プレビューでは「発動」ボタンでのみ起こります。アイコン interact
ワールドロジックの条件quest_state 「퀘스트 상태」トリガーした人のクエストがその状態のとき真。アイコン logic
ワールドロジックのアクションquest_start 「퀘스트 시작」トリガーした人のクエストを active にする。アイコン star
イベントWorldChangedプレビュー用のクエスト状態をクリアします。

3 つの type はすべてメニューグループ「퀘스트(예제)」にあります。

1 行説明: 플레이어가 NPC {npc} 에게 말을 걸면

フィールド型必須既定値説明
npcActor (display ・ text ・ spawn)はい—話しかける NPC アクター
lineTextいいえ—セリフ id。空の場合は任意のセリフ

1 行説明: 퀘스트 {quest} 가 {state} 일 때

フィールド型必須既定値説明
questTextはい—クエスト id
stateEnum (none ・ active ・ done)いいえnone状態

1 行説明: 퀘스트 {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 サーバープラグインに同じ 3 つの type のハンドラーを登録する必要があります。

typeサーバーのハンドラーが行うこと
npc_talkNPC 会話イベントで、npc (と line) が一致するルールを起こす
quest_stateクエストストアからトリガーした人の状態を読み取って比較
quest_startクエストを active にし、notify なら通知
  • ハンドラーは、Paper プラグインで Bukkit の ServicesManager から取得した SceneEventsApi に登録します。
  • ハンドラーのないサーバーは、これらの type を警告 1 回とともにスキップします。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