跳到主要内容

创建 NPC

webapp_banner.jpg

配置设置

isEnabled

设置 NPC 是否启用。

默认值
isEnabled布尔值true
示例
isEnabled: true

name

设置 NPC 的显示名称。支持 颜色代码 以及用于多语言服务器的翻译键。

默认值
name字符串
示例
name: "&aEnn Peecee"

create_npc_name.jpg


scale

设置 NPC 的缩放(大小)。这是通过底层实体上的原版 generic_scale 属性实现的。

默认值
scale倍率1.0

进行缩放时,1.0 代表默认大小。要让实体变大,请增大该值(例如 1.2)。要让实体变小,请减小该值(例如 0.8)。

示例
scale: 1.2

role

设置 NPC 名称下方显示的角色身份。仅为视觉效果。支持 颜色代码 以及用于多语言服务器的翻译键。

默认值
role字符串
示例
role: "&c<Red Fellow>"

create_npc_role.jpg


profession

设置 NPC 的职业,在 使用伪装时它决定 NPC 的皮肤。

默认值
profession职业NITWIT
示例
profession: NITWIT

create_npc_profession.jpg


greetings

设置当玩家首次进入 NPC 的 activationRadius 时它可以说出的问候语列表。系统会随机选取其中一条,作为悬浮的聊天气泡显示在 NPC 上方(仅该玩家可见,持续约 5 秒)。支持用于多语言服务器的翻译键。

默认值
greetings字符串列表

问候语只在进入半径时触发一次,玩家停留在半径内期间不会反复触发。

示例
greetings:
- Hi there!
- Good day.

create_npc_greetings.jpg


dialog

设置 NPC 可以作为悬浮聊天气泡说出的台词。每次都会随机选取一条(该列表不会按顺序读取)。支持用于多语言服务器的翻译键。

何时触发取决于 interactionType

  • CHAT 类型的 NPC 在玩家右键点击它时说出一条对白。
  • 其他所有 interactionType 会在玩家停留在 activationRadius 内期间,于每一次邻近扫描时说出一条对白。

台词中的字面量 会把它拆分成多行堆叠的气泡。

默认值
dialog字符串列表
示例
dialog:
- I like apples!
- Sure is hot.

create_npc_dialog.jpg


farewell

设置 NPC 的告别消息。系统会随机选取其中一条,作为悬浮的聊天气泡显示。支持用于多语言服务器的翻译键。

默认值
farewell字符串列表

告别语会在玩家于 NPC 5 格范围内关闭某个物品栏菜单时触发 —— 通常就是关闭商店、任务或竞技场菜单之后。当玩家只是走出 activationRadius 时,它们不会触发。

示例
farewell: 
- Until next time!
- Bye!

create_npc_farewell.jpg


canTalk

设置 NPC 是否能交谈。当设为 false 时,NPC 永远不会显示聊天气泡,因此 greetingsdialogfarewell 都会被抑制。

默认值
canTalk布尔值true
示例
canTalk: true

activationRadius

设置 NPC 能检测到玩家靠近的半径(以方块为单位)。

默认值
activationRadius双精度3.0

邻近检测每 5 秒扫描一次。当玩家处于半径内时,NPC 会转身面向他们,任务指示器会显示(针对 QUEST_GIVER / CUSTOM_QUEST_GIVER 类型的 NPC),并触发 greetings / dialog。把此项设为 0(或更低)会完全关闭该 NPC 的邻近检测。

示例
activationRadius: 3.0

scripts

设置附加到该 NPC 的 Lua 脚本。脚本文件从 plugins/EliteMobs/npc_scripts/ 加载。.lua 扩展名是可选的 —— 如果省略,系统会自动补上。

默认值
scripts字符串列表

NPC 脚本运行在共享的 MagmaCore Lua 引擎上,并支持以下钩子:on_spawnon_tickon_removeon_npc_interacton_npc_proximity_enteron_npc_proximity_leaveon_zone_enteron_zone_leave。完整的 API 和示例请参阅 Lua NPC 脚本

无法在 npc_scripts/ 中解析到文件的脚本文件名会被跳过并给出警告;该 NPC 仍会正常生成。

示例
scripts:
- wave.lua

interactionType

设置 NPC 将执行的交互类型。

默认值
interactionType特殊 [1]NONE
示例
interactionType: TELEPORT_BACK

noPreviousLocationMessage

当传送员 NPC 没有可将玩家传送到的先前位置时,它会显示此消息。接受 颜色代码 以及用于多语言服务器的翻译键。

默认值
noPreviousLocationMessage字符串
示例
noPreviousLocationMessage: '&8[EliteMobs] &cCouldn''t send you back to your previous location - no previous location found!'

create_npc_noteleportlocation.jpg


timeout

设置 NPC 永久消失前的时间量(以分钟为单位)。

默认值
timeout双精度0(永不)
示例
timeout: 0

questFileName

设置 NPC 给予的自定义任务。需要 CUSTOM_QUEST_GIVER 这个 interactionType。请注意,尽管该键接受一个列表,它的名称却是单数形式(questFileName)。

默认值
questFileName字符串列表
示例
questFileName:
- my_quest_one.yml
- my_quest_two.yml

disguise

设置 NPC 拥有的 LibsDisguises 伪装。

默认值
disguiseLibsDisguises 格式
示例
disguise: SKELETON

create_npc_disguise.jpg


customDisguiseData

设置自定义 LibsDisguises 伪装的数据。

默认值
customDisguiseDataLibsDisguises 格式
示例
disguise: custom:my_cool_disguise_name
customDisguiseData: player my_cool_disguise_name setskin {"id":"364acb6d-9050-46f7-b5fb-f8c3fd83a6fc","name":"Unknown","properties":[{"name":"textures","value":"ewogICJ0aW1lc3RhbXAiIDogMTYxMTk4ODA4Nzc1NSwKICAicHJvZmlsZUlkIiA6ICJkZGVkNTZlMWVmOGI0MGZlOGFkMTYyOTIwZjdhZWNkYSIsCiAgInByb2ZpbGVOYW1lIiA6ICJEaXNjb3JkQXBwIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzliYmVkODQzNWY4YmYyNzhhZmUyNmU2NGZkOTI2YjhiMzc3MzJkODhlMzM0ODk3ZGJkNTI3ZDU2ZmY5MTk5MGUiCiAgICB9CiAgfQp9","signature":"ujLq1joYVktuQAp1xpFKlxQFUVinSePiDBiVCAxxix/mA5vP86i/eAOfb1mtGjaAZ6sO0l2olbzvycnGXNBtbAxgqprguROXY4tpWiePVTDmy3iD4GdOCxHAkYLoyMV5qTT4SNsldUFFuND8GSEgbNMltKDLmhNKwzm08iCigPfpeuYpwljgJPxu6ka54PKNaQu4doI0ZDZXKqq4hPhR3Bs2Sz9MI0SmdmQWwcCzUz3DFdVno27fmQ6LwqmT+eSoOv0EttVG/XMaTYQ5lhBY61mqf6WlJyYVUSfjJk1AbYsctu7dWM+sbY8jFq5ljvXJGGr5TyKi+fs8vHy06Z2go20QgTYOw+caFxFijAS6fgm3oY57VEO/+/9OLHdD+Z9BrWqQWcIIrVeIfxjue/yt4pyeVv9jX59hjNFjhcPEwotkxJ+vZ96WlTLWDG4BiqauDr2VeGyLlVaygO9ZU0wwsN65iSh91GI3tMIA5wbDR0Hts/9ABvt9eafHbowS+4SZXN0i9mYnKg7op1eiB8nMEAGsPJg3DwsmUrh3ACAapQ6eYHiJpo59RXDqKlRcXwo7wsEFp//5LgQWbPj0NP3nxnywdpozqSAeq6236qlhE9BT9eiyJ41V9sMelYFEWMlUAltR40NdbIrHB0J3nmfuLJz44/sTwWf6P1khOy//XX0="}],"legacy":false}

create_npc_custom_disguise.jpg


customModel

设置 NPC 将使用的 ModelEngine 自定义模型。

默认值
customModel字符串
示例
customModel: MY_MODEL_ONE

arena

设置 NPC 将为之打开菜单的竞技场的文件名(需要 ARENA_MASTER interactionType)。

默认值
arena文件名
示例
arena: my_arena.yml

command

设置 NPC 将运行的命令(需要 COMMAND interactionType)。命令以玩家身份执行,而非以控制台身份。不要包含开头的斜杠(/)。

默认值
command字符串
示例
command: say Look at me running a command, how cool!

create_npc_command.jpg


spawnLocation

为 NPC 设置单个生成位置。这是旧式的单位置键:只有在 spawnLocations 缺失或为空时才会被读取。在游戏内放置的新位置会改为写入 spawnLocations,因此请优先使用那个键。

格式为 world,x,y,z,yaw,pitch

默认值
spawnLocation字符串
示例
spawnLocation: my_world,10,50,10,0,0

spawnLocations

设置 NPC 的生成位置。同一个 NPC 文件可以被放置在多个位置;每个条目生成一个 NPC。你应当通过 /em place npc <npcfilename.yml> 命令来设置此项,该命令会把你当前的位置(包括你面朝的方向)追加到这个列表中,并同时设置 isEnabled: true

每个条目的格式为 world,x,y,z,yaw,pitch

默认值
spawnLocations字符串列表
示例
spawnLocations: 
- my_world,10,50,10,0,0
- my_world,-10,50,-10,0,0

instanced

设置 NPC 是否应被实例化(用于实例地下城)。当设为 true 时,该 NPC 不会在蓝图世界中生成;它会被注册为一个模板,并为每个地下城实例克隆一份,每个克隆体存在于对应的实例世界中。

默认值
instanced布尔值false
示例
instanced: false

syncMovement

设置 NPC 的自定义模型是否应与底层实体同步移动。只有在设置了 customModel 且模型已加载时才有效 —— 对于普通 NPC 和 LibsDisguises NPC 会被忽略。

默认值
syncMovement布尔值true
示例
syncMovement: true

NPC 配置示例
isEnabled: true
name: "&cRed Rubin"
role: "&a<Generic NPC>"
profession: NITWIT
greetings:
- Hiya!
- Hello!
dialog:
- Great conversation!
- Pleasure talking with you!
farewell:
- Goodbye!
- Laters!
canTalk: true
activationRadius: 4
interactionType: CHAT
timeout: 0
questFileName:
- my_quest.yml #npc interactionType must be set to CUSTOM_QUEST_GIVER
disguise: SKELETON
customDisguiseData: #used when a custom libsdisguise is being set
customModel: MODEL_ONE
arena: my_arena.yml #npc interactionType must be set to ARENA_MASTER
command: say Hello World! #npc interactionType must be set to COMMAND (do not include the leading slash)
spawnLocation: my_world,584,55,127,90,10 #remember that NPCs use pitch and yaw to set where they are looking at. this is also automatically set when running the /em place npc <npcfilename.yml> command, so make sure you pose where you want the NPC to be facing when running the command.

create_npc_npc.jpg


特殊 [1]

以下是有效的 NPC 交互类型列表:

类型描述
GUILD_GREETER打开武器技能加成选择菜单
CHAT右键点击会循环切换 dialog
CUSTOM_SHOP打开自定义商店菜单
PROCEDURALLY_GENERATED_SHOP打开程序生成商店
BAR未实现。告知玩家该功能即将推出。
ARENA不执行任何操作。请改用 ARENA_MASTER
QUEST_GIVER打开程序生成任务菜单
CUSTOM_QUEST_GIVER打开 questFileName 中所设特定任务的任务菜单
NONE无交互
SELL打开出售菜单
TELEPORT_BACK将玩家传送回他们上次所在的非 elitemobs 世界位置
SCRAPPER打开拆解菜单
REPAIRMAN打开修理菜单
ENCHANTER打开附魔菜单
REFINER已替换 —— 告知玩家该功能已被替换;建议管理员移除该 NPC
SMELTER已替换 —— 告知玩家该功能已被替换;建议管理员移除该 NPC
ENHANCER已替换 —— 告知玩家该功能已被替换;建议管理员移除该 NPC
UNBINDER打开解绑菜单
ARENA_MASTER打开 arena 中所设竞技场的竞技场菜单
COMMAND运行 command 中所设的命令
SCROLL_APPLIER打开精英物品卷轴菜单。当 useEliteItemScrolls 被禁用时,该 NPC 根本不会生成
ARROW_SHOP打开箭矢商店菜单
GAMBLING_BLACKJACK打开二十一点赌博游戏
GAMBLING_COINFLIP打开抛硬币赌博游戏
GAMBLING_SLOTS打开老虎机赌博游戏
GAMBLING_HIGHERLOWER打开猜大小赌博游戏

关于 SCRAPPER 及类似交互类型的更多信息,请点击 这里

NPC 行为说明

NPC 有几种硬编码的、无法配置的行为:

  • AI 已禁用:NPC 无法移动或寻路。它们会停留在生成位置。但它们会原地转身,面向处于 activationRadius 内的玩家。
  • 角色身份显示role 文本渲染在 NPC 上方的一个悬浮文本显示实体上。垂直偏移取决于该 NPC 的渲染方式 —— 普通 NPC 为 2.52,LibsDisguises NPC 为 2.30,使用 customModel 的 NPC 为 2.3
  • 基岩版角色标签:基岩版客户端无法渲染文本显示实体,因此被伪装的 NPC 还会额外获得一个携带角色文本的隐形标记盔甲架,只对基岩版玩家显示,对 Java 版玩家隐藏。它的高度由 config.yml 中的 bedrockNPCRoleYOffset 决定(默认为 2.2)。这一兜底方案要求后端服务器上安装 Geyser 或 Floodgate;仅在代理端部署 Geyser 会使其失效。
  • 对白冷却:NPC 在两次说话事件之间会等待 3 秒,以防止消息重叠。聊天气泡是针对每名玩家的悬浮文本,约 5 秒后消失,并不是聊天消息。
  • 隐身:处于隐身药水效果下的 NPC 不会显示聊天气泡。
  • 区块生命周期:当 NPC 所在区块卸载时它们会消失,区块重新加载时它们会重新生成。NPC 实体永远不会被保存到世界中 —— 它们是从各自的配置文件重新创建的。
  • 禁止重命名:手持命名牌右键点击 NPC 的行为会被取消,并会告知玩家该 NPC 无法重命名。