一个面向服务器的任务框架。创建你自己的NPC并赋予他们目标!非常适合角色扮演服务器!
感谢所有在抢先体验期间使用过我模组的人。你们所有的反馈和支持,让投入这些项目的数百小时都变得值得。尽管做模组从来没有真正带来过现金回报,但它回馈给我的,是朋友、社区,以及更多欢乐时光!对于这些年来所有请我喝过咖啡的人,我非常感激你们的善意!
如果你想继续支持我模组的开发和维护,可以通过下方的图片链接请我喝杯咖啡。
正在寻找英灵神殿服务器?我已与Survival Servers合作,使用优惠码即可享受75折优惠 瓦尔海姆25!通过点击下方图片中的链接下单,我将获得一部分收益。你得到一个可以和朋友们一起玩的服务器,而我可以去买更多香甜的咖啡,让模组继续运转下去!
如果你的世界版本是0.0.7——更新可能会破坏你当前的NPC!!!!!
这是警告。你已经被警告过了。
我已尽力让过渡自然流畅,但仍不完美。
这个模组还没做完!还有很多功能有待添加。非常欢迎大家针对目前支持的功能提出反馈。请参阅本自述文件底部列出的未来可能改进项以及贡献相关信息。
感谢所有尝试过这个模组首个测试版的人!你们的热情让我感到非常欣慰和鼓舞!
什么是钥匙,它们控制什么?在原版《英灵神殿》中存在一个“全局钥匙”列表,它是一组由所有玩家共享的字符串(词语)。此外还有原版“玩家唯一钥匙”;这些钥匙为每位玩家单独保存。世界中的生成、袭击、梦境以及哈尔多的物品都由特定钥匙的存在与否来控制。每个boss、游戏中的特定生物,以及希尔迪的任务,各自都有与其完成状态相关联的钥匙。本模组也添加了钥匙,并利用现有的原版系统来控制游戏行为。
这个模组可以同时添加到全局钥匙和玩家独有钥匙系统中。任务奖励可以自定义为适用于所有玩家,或仅适用于完成该动作的玩家。当此模组检查钥匙是否存在时,它会同时检查这两个列表。这将在下方提供的示例中说明。
这个模组将与WAP的私钥系统完美搭配。如果NPC配置为使用全局钥匙,那么只有接收玩家半径约100米内的玩家会获得钥匙。如果你希望区域内所有玩家都获得钥匙,则在NPC配置中使用“全局”设置。这允许你的玩家组队共同完成任务。否则使用“玩家”设置来实现真正的个人进度。未指定时,模组将默认为“玩家”。
如果你希望允许某些键值成为全局键值,可以使用进度模组的高级配置,将这些键值添加到全局列表中。这对于你只想让一名玩家完成的副本任务很有用,或者如果你只想要求一名玩家执行某个操作,就能为整个服务器解锁某条副本任务线。
注意:当《英灵神殿》正式发布后,WAP将经历一些重大改动,这些改动可能会改变这些模组之间的互动方式。
目前有三种生成NPC的方式:使用 右Ctrl + E 在床上或椅子上, 生成随机NPC 控制台命令,或来自带有该命令的配置 已保存NPC生成点。随机NPC将全部为默认NPC类型none,并拥有随机风格。除了为世界增添杂乱与生气之外,它们没有任何功能。要自定义NPC并赋予其功能,你需要先使用YAML文件定义它们。下一节将说明此过程。
所有NPC都会像玩家一样,死亡后自动在原始出生点重生。如果你想让某个NPC真正死亡,你必须为其设置以下任一选项: 设置NPC真死 命令中或NPC的yaml配置中设置。在真死亡状态下,NPC布娃娃不会消失,直到玩家与布娃娃互动将其移除。
默认情况下,所有NPC都会随机移动,你可以使用控制台命令 NPC设为静止 让它们停止移动,或者编辑yaml配置让它们生成后保持静止。
请在下方“命令”部分查看所有可用命令。
有一个随模组附带的文件,名为 Example.VV.NPCS.yaml 在config文件夹中包含示例。此文件必须手动重命名为 VV.NPCS.yaml 加载模组时,这样可以防止模组更新覆盖你的配置。你可以在此文件中定义自定义NPC,以便在游戏中生成它们。你还可以通过这些配置更新现有的NPC,而无需将它们从游戏中移除。当你更新现有NPC时,它将被覆盖,并丢失之前与其关联的所有数据。
重新加载NPC配置 强制重新加载它。这个 yaml 文件是本地文件,不会同步给其他人。服务器上不需要这个文件,模组运行也不需要它。它纯粹是用于设置,如果你想自定义 NPC 的话。一旦你的 NPC 在世界中生成,数据就会保存到该对象上,因此也会保存在世界文件中。
文件有问题?复制粘贴一个与你想要的内容完全接近的示例。Yaml文件对缩进有严格要求。错误的制表符、空格或其他字符都可能导致错误,使文件无法加载。
如果你在设置过程中遇到问题,随时可以寻求支持(见底部的贡献部分)。
可接受类型包括:无、任务、佣兵、击杀目标、商人
这些NPC可以在被交互时简单地说点什么,或者能够接受物品/钥匙以换取奖励物品/钥匙。要自定义NPC的行为和对话,你需要使用YAML文件为其定义特定数据。
任务NPC的构建基础是“任务”列表。NPC的任务列表会按照定义的顺序依次尝试完成。对于同一名玩家,一个NPC同一时间只能有一个激活的任务。建议将任务线中的最后一个任务设为“默认文本”(不定义任何约束条件),即你希望NPC说的话。如果任务线中其他所有任务都设有约束条件,且对某名玩家而言均不满足,则会选中这最后一个任务。这样可以防止你的NPC“无事可做”。各示例将在下方对应的NPC类型下进行说明。
简单是关键。如果单个NPC上的任务变得极其冗长复杂,服务器发送数据、客户端筛选当前可用任务时就可能导致卡顿。一个区域内NPC越多,卡顿就越严重。如果遇到问题,试着把NPC分散到不同区域,或者把任务拆分给其他NPC。
以下是一对NPC的示例。与Ragnar1互动时,他会给出钥匙“ragnarbrave”,而Ragnar2需要这把钥匙才会告诉你一个秘密。Ragnar1只会告诉你一次他们的秘密,所以你最好注意听!notRequiredKeys字段用于“跳过”任务,一旦存在此钥匙,该任务将不再符合条件,并会尝试选择列表中的下一个任务。这些钥匙被设置为“Global”,因此只有第一个访问该任务的玩家才能看到Ragnar1的interactText和Ragnar2的rewardText(除非你有其他修改此行为的模组)。
请注意,这两者都设置为生成时原地不动,这在设置东西时非常有用。
npcs: - id: Ragnar1 name: 勇敢的拉格纳 standStill: true type: Quest quests: - text: "这里有一些关于大胆的拉格纳的传闻!" notRequiredKeys: ragnarbrave interactKey: ragnarbrave interactKeyType: Global - text: "你刚才是说你带了蜂蜜酒吗?" - id: Ragnar2 name: 大胆的拉格纳 standStill: true type: Quest quests: - text: "你见过勇敢的拉格纳吗?" notRequiredKeys: ragnarbold requiredKeys: ragnarbrave rewardText: "他这么说了?让我告诉你一个关于勇敢的拉格纳的秘密。" rewardKey: ragnarbold rewardKeyType: Global - text: "我最爱喝上一杯好蜂蜜酒了。"
这是一个示例,展示了四个NPC,你需要按顺序与他们对话并完成他们的任务。
长话短说:利夫会奖励一把2星燧石刀,维维卡会接受并给出拉沙哈的任务,让他带鹿肉炖菜来换取金币。随后领主会奖励你一把铁剑,感谢你帮助他们所有人。
莉芙被设置为玩家第一次与她交谈时给玩家一把刀。之后这个NPC会一直询问你是否完成了任务,直到你收到任务奖励钥匙“vivica2”。一旦这两个阶段都完成,莉芙就会默认重复最后一段任务文本。由于 交互键类型 如果此处未指定,将默认为“Player”。这意味着所有玩家都能完成该任务。
薇薇卡的设定是,你必须先和莉芙对话,才能看到她在第一个任务中的奖励文本。之后,在第二个任务中给她所需物品时,她会说出奖励文本并进入第三个任务,该任务会提醒你你的目标。在你获得“rahshahs2”钥匙后,薇薇卡将默认切换到列表中的最后一个任务。
与薇薇卡类似,在完成授予“vivica2”钥匙的任务之前,拉沙斯也会无视你。他会要求鹿肉炖菜,但不会从玩家身上移除该物品,他会改变主意不再需要它,但依然会给予玩家奖励。
最后,当所有其他NPC的任务线都完成后,领主会因为你帮助了他所有的子民而给你一份奖励。
这可能有点令人困惑。试着生成这些示例并在游戏中进行交互,看看它们是如何工作的。
这里需要注意``interactKey``和``rewardKey``之间的区别,因为与NPC对话时``interactKey``总会给予玩家,而``rewardKey``只会在满足奖励条件时给予。
在设置NPC文本时,你可以使用两个“关键词”:**{giveitem}**和**{reward}**,它们会自动替换为对应的预制体和数量,这样你就不用手动输入了。这在调试时很有用。
npcs:
- id: Liv
name: 睿智的莉芙
type: Quest
quests:
- text: "你能把这个带给薇薇卡吗?她太害羞了,不肯承认她需要我的帮助。"
notRequiredKeys: liv
rewardItems:
- prefabName: KnifeFlint
quality: 2
rewardKey: liv
- text: "你把那把刀带给薇薇卡了吗?"
notRequiredKeys: vivica2
- text: "天气真好,不是吗?"
- id: Vivica
name: 薇薇卡
type: Quest
quests:
- text: "我太忙了,没空说话。"
requiredKeys: liv
notRequiredKeys: vivica1
rewardKey: vivica1
rewardText: "莉芙派你来的?我想我确实需要些帮助。我需要一把更锋利的刀。"
- text: "我需要{giveitem}。"
requiredKeys: vivica1
notRequiredKeys: vivica2
giveItem:
prefabName: KnifeFlint
quality: 2
rewardKey: vivica2
rewardText: "我丈夫拉赫沙赫斯可能也需要帮忙,你能找到他吗?"
- text: "你找到拉赫沙赫斯了吗?"
notRequiredKeys: rahshahs2
- text: "我喜欢大海的气息。"
- id: MrHamHands
name: 拉赫沙赫斯
type: Quest
quests:
- text: "你想干什么?走开。"
requiredKeys: vivica2
notRequiredKeys: rahshahs1
rewardKey: rahshahs1
rewardText: "薇薇卡派你来的?她没付你钱!?"
- text: "我需要{giveitem},作为交换我会给你{reward}。"
requiredKeys: vivica2
notRequiredKeys: rahshahs2
giveItem:
prefabName: DeerStew
amount: 1
removeItem: false
rewardItems:
- prefabName: Coins
amount: 10
rewardKey: rahshahs2
rewardText: "谢谢,但薇薇卡已经找到我了,你留着吧!我妻子的事很抱歉,这些应该足够报答你的帮助了。"
- text: "感谢你的帮助。"
- id: Jarl
name: 雅尔·哈尔辛
type: Quest
quests:
- text: "帮助我的人民,我会给你{reward}。"
requiredKeys: liv, vivica2, rahshahs2
notRequiredKeys: thaneofvalheim
rewardItems:
- prefabName: SwordIron
quality: 5
rewardText: "你真的做到了,我很佩服!"
rewardKey: thaneofvalheim
- text: "你好啊,市民。"
未完成。
未完成。
商人像哈尔多和其他原版商人一样运作。你可以指定他们出售和购买的物品,使用金币作为货币。
"Texts" 字段必须为商人存在,如果在配置中留空,它们将在游戏中显示为空白浮动框。这是原版代码工作方式的副作用。
- id: Wildir1 name: 威尔迪尔 type: 商人 tradeItems: - prefabName: 石头 amount: 20 cost: 5 requiredKey: gave_pickaxe - prefabName: 木材 amount: 20 cost: 5 - prefabName: 石斧 quality: 2 cost: 200 traderUseItems: - prefabName: 鹿角镐 rewardKey: gave_pickaxe removeItem: true text: "嘿,谢谢,有了这个我就能多采些石头了。" talkTexts: - "天气真好。" - "松树的气味让我心情舒畅。" - "我真该换把新镐子了。" greetTexts: - "你好啊!" goodbyeTexts: - "漫长的一天开始前,记得把斧头磨快!" startTradeTexts: - "需要什么吗?" - "我这有最好的木材!" buyTexts: - "谢谢,欢迎再来!" sellTexts: - "这个品质还行。" notCorrectTexts: - "嗯……" notAvailableTexts: - "我已经有需要的东西了。"
如果你想让你的NPC在不与它们互动的情况下说话,请使用 对话文本, 问候语, 再见文本,以及 激怒文本 字段。这仅适用于带有MonsterAI脚本的NPC。这包括任何通常会攻击玩家的生物类型。例如,鹿是AnimalAI,由于原版代码的工作方式,无法使用这些字段。
默认情况下,NPC的生命值会与其原版对应角色保持一致。使用 最大生命值 设置为其他数值。
默认情况下,NPC会被赋予一套与其原版对应角色相似的随机默认物品。如果你希望NPC没有任何物品、护甲或攻击设置 给予默认物品 为 false。(Khordus——这就是你制作糖果的方法)
默认情况下,如果yaml文件中排除了某些字段,NPC在生成时以及每次更新时都会随机化。如果你不希望在更新时刷新或随机化装备,请设置 更新样式 设为 false。如果你在放置 NPC 后对其进行了修改,但之后需要更改其任务或商店物品,这会很有用。
阅读下方内容,了解更多样式设置。
设置 真死 为 true 时,NPC 被击败后会死亡,永远不会重生。默认情况下,所有 NPC 都会在最初生成的位置重生。
当设置为 true 时,NPC 在生成后会保持静止。
如果模型支持,此字段可设置你的NPC执行特定动画。对于玩家NPC类型,这包括以下内容: 蹲伏, 跳舞, 坐下,以及其他表情动作。大多数动画需要将NPC设置为站立不动才能生效。
目前许多动画只会播放一次。例如: NPC保持静止 表情_不不不.
该系统的改进已计划在未来的更新中推出。
有些字段可用于通过物品预制体名称来设置NPC的外观。未指定的内容将留空或随机化。皮肤和头发颜色需要定义所有r、g、b值才能覆盖;它们是0到1之间的浮点值。覆盖颜色可以让你创建一些非常奇怪的角色。当这些颜色从yaml中排除时,它们将被随机化为任何可能的原版自定义值。有命令可以从现有NPC获取这些值,因此你可以生成一组随机生成的NPC,从而很快找到可能的原版值。
从yaml文件生成NPC时,它会自动保留原始预制体上存在的常用默认物品(包括其徒手攻击)。要移除默认攻击、武器、衣服和其他物品,请设置 给予默认物品 为false。这样你就可以完全自定义你的NPC了。
如果你想故意让某些字段留空(比如胸甲,嘿,我不评判),你必须用空字符串来指定这些值,例如 宝箱:"" 防止某些字段被随机化。
npcs: - id: Ragnar3 name: 盛装的拉格纳 model: Player modelIndex: 0 hair: Hair1 beard: Beard1 helmet: HelmetHat1 chest: ArmorTunic1 legs: ArmorLeatherLegs shoulder: CapeLinen shoulderVariant: 2 utility: BeltStrength rightHand: KnifeFlint leftHand: Torch leftHandVariant: 1 - id: Clown name: 小丑克利波 type: None model: Player modelIndex: 0 hair: Hair19 helmet: "" chest: ArmorTunic6 legs: ArmorRagsLegs skinColorR: 0.9 skinColorG: 0.8 skinColorB: 0.1 hairColorR: 0.2 hairColorG: 0.3 hairColorB: 0.9 - id: Boar name: 一只精致的标本 model: Boar giveDefaultItems: false type: Quest interactText: "喂我,人类!"
本模组目前仅支持以下原版模型。若未指定模型,则默认为玩家类型:
你可以在椅子或床上生成一个随机NPC,使用 右Ctrl + E (未来可能会有所变动)。
| 指令 | 参数 | 描述 |
|---|---|---|
| 重新加载NPC配置 | 重新加载 YAML 文件中的所有更改 | |
| 随机生成NPC | [名称] [模型] | 生成一个随机NPC(仅支持特定模型) |
| NPC生成已保存 | [ID] | 从yaml配置中生成一个NPC |
| 移除NPC | 删除最近的NPC,请谨慎使用! | |
| NPC信息 | 列出最近NPC的物品 | |
| 随机化NPC | 槽位 | 完全随机化最近的NPC,或仅随机化指定的自定义槽位 |
| NPC设置 | [id] | 从 yaml 配置更新最近的 NPC |
| 设置NPC移动 | [动画] | 更新最近的NPC使其四处走动 |
| NPC静止 | [动画] | 将最近的NPC更新为原地站立 |
| NPC设置坐下 | 将最近的NPC更新为坐在最近的椅子上 | |
| NPCs恢复平静 | 半径 | 安抚指定半径内的所有敌对NPC |
| 设置NPC真实死亡 | 将最近的NPC更新为下次死亡后不再重生 | |
| 设置NPC面向我 | 让最近的NPC转向你 | |
| 获取NPC肤色 | 返回最近NPC的肤色 | |
| 获取NPC发色 | 返回最近NPC的发色 |
此模组需要在客户端和服务端同时安装;模组会强制要求安装。未安装此模组的玩家将无法连接到服务器。
如果在生成NPC后从服务器移除该模组,它们将会消失。
已移动到新文件,它将作为新标签页显示在 Thunderstore 页面上。
所有问题都可以在Discord或项目Github上报告。报告问题时,请尽可能具体,并提供以下信息:
欢迎所有反馈、想法和请求!你可以在我的Discord上给我留言。 冒险游戏.

修改前置工具
2026-09-12 14:33:53
修改前置工具

史诗战利品
randyknapp2026-09-09 21:20:10
为英灵神殿添加战利品掉落、魔法物品和附魔。

制作 建造 熔炼 烹饪 燃料 从容器中取出
aedenthorn2025-06-30 08:34:14
让你在制作、建造、使用熔炉和窑炉、添加燃料、烹饪食物等时,可以使用附近容器中的资源。

种植一切
Advize2025-09-09 11:15:37
重写了bkeyes93的种植增强模组。允许你的种植者种植浆果丛、蓟、蒲公英、蘑菇、此前无法获取的树种以及其他装饰性植物。还包括许多其他杂项功能(详见

无限制传送门
frostedplaything4102023-09-02 17:39:40
无限制传送门是一个客户端模组,允许玩家通过传送门传送任何物品。该模组提供广泛的自定义选项,让玩家能够控制物品限制、移除限制,

农场格子
Sarcenzzz2023-06-14 11:38:34
允许所有通过种植器种下的植物自动对齐并放置在网格中,确保它们有足够的生长空间。

更好的UI
MKMasa2021-04-15 09:19:42
这个模组对游戏界面做了一些细微的调整。你可以编辑并选择想要启用的更新内容。

更好的射箭
Ishid42026-09-10 16:16:51
为弓术玩法添加了许多功能和改动,包括全新的箭袋系统、可回收的箭矢、更精准的瞄准以及逼真的箭矢物理效果。