示例: 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) |
- 构建。
若在源码之外构建,请像快速开始那样修改 csproj,改为引用安装文件夹中的dotnet build samples/plugins/event_example/EventExample.csproj -c Release
NP.Editor.Sdk.dll。 - 将
EventExample.dll和plugin.json复制到%APPDATA%\NPEditor\plugins\event_example\。不要放入NP.Editor.Sdk.dll。 - 在「工具 › 插件管理器…」中点击「重新扫描」。
- 「注册」列中显示
씬 이벤트 3即可。
制作一条「首次与 NPC 交谈时开始任务 q1」的规则,并在运行中测试。
- 放置一个显示(
display) · 文本(text) · 生成点(spawn)场景 Actor。它就是 NPC。 - 打开「工具 › 世界逻辑」并添加规则。
- 触发器:分组「퀘스트(예제)」 › 「NPC 에게 말 걸 때」。在「NPC」字段中选择第 1 步的 Actor。
- 条件:「퀘스트 상태」。「任务 id」 =
q1,「状态」 =none。 - 动作:「퀘스트 시작」。「任务 id」 =
q1。 - 规则的一行说明显示为「플레이어가 NPC 「<액터 이름>」 에게 말을 걸면」。
- 用世界逻辑面板的「运行测试」开始运行,然后点击该规则的「触发」。
- 世界逻辑面板的记录列表中会留下
[event_example] 퀘스트 q1 시작 → <플레이어>。 - 再点击一次「触发」。此时状态为
active,条件为假,动作不会执行。
同一规则在逻辑图中显示为三个节点。可以把 NPC Actor 的数据引脚连接到「NPC」字段。
| 类型 | 名称 | 说明 |
|---|---|---|
| 世界逻辑触发器 | npc_talk「NPC 에게 말 걸 때」 | 玩家开始与 NPC 对话时。由服务器插件触发。在预览中只能通过「触发」按钮触发。图标 interact |
| 世界逻辑条件 | quest_state「퀘스트 상태」 | 触发者的任务处于该状态时为真。图标 logic |
| 世界逻辑动作 | quest_start「퀘스트 시작」 | 将触发者的任务设为 active。图标 star |
| 事件 | WorldChanged | 清空预览用的任务状态。 |
三个 type 都位于菜单分组「퀘스트(예제)」中。
场景事件 / 字段
Section titled “场景事件 / 字段”npc_talk(触发器)
Section titled “npc_talk(触发器)”一行说明:플레이어가 NPC {npc} 에게 말을 걸면
| 字段 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
npc | Actor(display · text · spawn) | 是 | — | 被交谈的 NPC Actor |
line | Text | 否 | — | 台词 id。为空时为任意台词 |
quest_state(条件)
Section titled “quest_state(条件)”一行说明:퀘스트 {quest} 가 {state} 일 때
| 字段 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
quest | Text | 是 | — | 任务 id |
state | Enum(none · active · done) | 否 | none | 状态 |
quest_start(动作)
Section titled “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" } ]}服务器端行为
Section titled “服务器端行为”此示例只有编辑器端。若要在游戏服务器上运行规则,必须在 NP Scene 服务器插件中注册这三个 type 的处理器。
| type | 服务器处理器应做的事 |
|---|---|
npc_talk | 在 NPC 对话事件中触发 npc(及 line)匹配的规则 |
quest_state | 从任务存储中读取触发者的状态并比较 |
quest_start | 将任务改为 active,若 notify 则发出通知 |
- 处理器在 Paper 插件中注册到通过 Bukkit
ServicesManager获取的SceneEventsApi。 - 没有处理器的服务器会伴随一次警告跳过这些 type。
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 |