跳转到内容

示例: 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
    若在源码之外构建,请像快速开始那样修改 csproj,改为引用安装文件夹中的 NP.Editor.Sdk.dll。
  2. 将 EventExample.dll 和 plugin.json 复制到 %APPDATA%\NPEditor\plugins\event_example\。不要放入 NP.Editor.Sdk.dll。
  3. 在「工具 › 插件管理器…」中点击「重新扫描」。
  4. 「注册」列中显示 씬 이벤트 3 即可。

制作一条「首次与 NPC 交谈时开始任务 q1」的规则,并在运行中测试。

  1. 放置一个显示(display) · 文本(text) · 生成点(spawn)场景 Actor。它就是 NPC。
  2. 打开「工具 › 世界逻辑」并添加规则。
  3. 触发器:分组「퀘스트(예제)」 › 「NPC 에게 말 걸 때」。在「NPC」字段中选择第 1 步的 Actor。
  4. 条件:「퀘스트 상태」。「任务 id」 = q1,「状态」 = none。
  5. 动作:「퀘스트 시작」。「任务 id」 = q1。
  6. 规则的一行说明显示为「플레이어가 NPC 「<액터 이름>」 에게 말을 걸면」。
  7. 用世界逻辑面板的「运行测试」开始运行,然后点击该规则的「触发」。
  8. 世界逻辑面板的记录列表中会留下 [event_example] 퀘스트 q1 시작 → <플레이어>。
  9. 再点击一次「触发」。此时状态为 active,条件为假,动作不会执行。

同一规则在逻辑图中显示为三个节点。可以把 NPC Actor 的数据引脚连接到「NPC」字段。

类型名称说明
世界逻辑触发器npc_talk「NPC 에게 말 걸 때」玩家开始与 NPC 对话时。由服务器插件触发。在预览中只能通过「触发」按钮触发。图标 interact
世界逻辑条件quest_state「퀘스트 상태」触发者的任务处于该状态时为真。图标 logic
世界逻辑动作quest_start「퀘스트 시작」将触发者的任务设为 active。图标 star
事件WorldChanged清空预览用的任务状态。

三个 type 都位于菜单分组「퀘스트(예제)」中。

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

字段类型必填默认值说明
npcActor(display · text · spawn)是—被交谈的 NPC Actor
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_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.02026-10-04首个版本(SDK 1.2):触发器 npc_talk · 条件 quest_state · 动作 quest_start