NPC对话的详细引导帖
本帖最后由 惯宣-CGX_ 于 2023-5-8 19:11 编辑•引文:
- 曾经我有过这么一帖:链接。是探讨用指令做剧情对话的上限的,直到后来我发现了一个更好玩的东西:NPC。这个东西可拓展性比指令什么的多出不知道多少,主要还是简单易操作很快就能上手。
- 因为关于了解NPC机制的介绍已经有不少人做过了,所以我这里就不拖沓。
•目录:
一、相关命令
二、配置
三、对话文件
【NPC相关命令】
- 获得NPC刷怪蛋
/give @s spawn_egg 1 51
- 生成NPC实体
/summon npc
- 给某位玩家打开某NPC的对话
/dialogue open <@e/单选npc> <目标玩家>
- 以某NPC为演员进行某情景的对话
/dialogue open <@e/单选npc> <目标玩家> <情景标签>
- 改变某NPC对全局的对话
/dialogue change <@e/单选npc> <情景标签>
- 仅改变某NPC对某玩家的对话
/dialogue change <@e/单选npc> <情景标签> <目标玩家>
※注意事项:
- <@e/单选npc>可选择拥有npc组件的模组实体
- <情景标签(scene_tag)>需要使用行为包来完整描述
- @initiator作为目标选择器可以选择正在与npc交互的玩家
- 这里不得不提一句:不止微软对命令的翻译有问题,就连中文wiki发布的译名修正包都有错。/dialogue命令的反馈简直可以说是不明所以。
【NPC配置】
- 什么?今天都二〇二三年了,你不会还在用传统的方法敲文本吧?别那么low了,当然是写好对话文件直接用指令设置npc的对话啦。啊这,还是说一些可以玩的东西吧。
- {"rawtext":[{"text":"rawtext文本可以应用于npc全身上下的每一处,除了指令。"}]}
- 包括:显示的名称(不同于/summon生成时决定的自定义名称)、对话框、按钮名称。
- 除了{"selector":"不可使用之外"},{"text":"\n换行\r空格\u0000输出u码文字"},{"translate":"114.514"}
- 114.514=写入.lang文件的词条是可以正常输出的,只是写在.lang里的文本“不支持”\n换行。不过又不是只能写一条,随他啦。
(记分板相关的东西我没试过,可能也不行吧)
- npc的名称会显示在头顶,于是有很多人会利用这个特性来制作悬浮文本,其实还可以用来表示事件符号“【?】”。
- 一个大大的“【?】”立在npc头上,这可太经典了。至于展示的名字被占用了,也不要紧,本身立在对话框正上方的名字也够奇怪的,而且有这样的替代方案:
- 将【角色名】写在对话里的第一行。这样角色的名字才会更靠近对话,更符合一般游戏的ui设计。
- 如果要区分npc可以用§隐藏。
- 随机对话可以在npc的指令栏里这样打:
/scoreboard players random <@e> [计分项] * *
/dialogue open @s @initiator <情景标签>
/dialogue change @s <情景标签> @initiator
…
- 只是必须用到行为包。如果是用execute会出一堆有的没有的问题,形式上也不如这个简便。
- npc的模型和皮肤都可以用行为包和资源包来自定义修改,伸手党可以直接看这帖:站内链接
- 主要是修改npc使用的动画并改变读取皮肤位置的路径(这个不改也行)
- 打开原版资源包内entity文件夹的npc.entity.json
- 前几个不用理,主要看这几个:
"textures"是npc使用的皮肤,默认数量60个。
"geometry"是使用的几何模型。
"geometry": {
"default": "geometry.npc"
},
default是默认使用的模型,根据使用的不同皮肤续写可以定义成不同的模型。
geometry.npc则是models/entity/文件夹内npc.geo.json的模型名称。
"animations"是使用的动画。
"animations": {
"general": "animation.npc.general",
"look_at_target": "animation.common.look_at_target",
"move": "animation.npc.move",
"baby_transform": "animation.npc.baby_transform"
}
左边是动作名称,右边是使用的动画。
- 内容太多就不展开来讲了。反倒是为什么这么大个论坛却找不到一篇关于修改模型的教程啊。
【对话文件】
- 建议参考此网站:教程链接
- 板内有另一个大佬写过教程贴,不过很乱,内容也只是草草一笔。
- 我自己就不费心机再复述多一遍别人已经讲过的东西了,毕竟这部分也没什么可说的。最后贴一下我自己写的吧:
{
"format_version": "1.19",
"minecraft:npc_dialogue": {
"scenes": [{
"scene_tag": "a_1",
"npc_name": "§l§e【?】",
"text": "§l§6【NPC】§r\n嗯⋯⋯你,\n你⋯是个⋯是个⋯是个⋯\n是个⋯玩家?!\n\n\n①§l【我们来聊会天】",
"buttons": [{
"name": "①",
"commands": [
"/dialogue open @s @initiator a_2",
"/dialogue change @s a_2"
]
}]
}, {
"scene_tag": "a_2",
"npc_name": "§l§e【!】",
"text": "§l§6【NPC】§r\n我只是一个普通的NPC\n只是被人安排好了要说的话\n不过他居然可以让我说出随机内容\n这倒是让人惊讶的\n\n\n①§l【§a讲解一下原理§0】§r\n②§l【§c直接演示看看吧§0】§r\n③§l【§5给我闭嘴吧你个雌小鬼§0】",
"buttons": [{
"name": "①",
"commands": [
"/dialogue open @s @initiator a_3"
]
}, {
"name": "②",
"commands": [
"/scoreboard players random @s 对话2 0 1",
"/dialogue open @s @initiator a_4",
"/dialogue open @s @initiator a_5"
]
}, {
"name": "③",
"commands": [
"/dialogue change @s a_6"
]
}]
}, {
"scene_tag": "a_3",
"npc_name": "§l§e【!】",
"text": "§l§6【NPC】§r\n原理很简单\n就是/dialogue命令改变NPC的文本\n参数open可以为玩家打开特定情景\nchange则可以改变NPC的的对话内容\n再配合上scoreboard的random数值\n就可以轻易制作出可以像我这样\n完美无暇简直可以成为艺术品的\nNPC了",
"buttons": [{
"name": "结束对话",
"commands": [
"/dialogue change @s a_7"
]
}]
}, {
"scene_tag": "a_4",
"npc_name": "§l§e【!】",
"text": "§l§6【NPC】§r\n喏,你看\n现在我跟你说的就是第一条对话了",
"buttons": [{
"name": "结束对话",
"commands": [
"/dialogue change @s a_7"
]
}]
}, {
"scene_tag": "a_5",
"npc_name": "§l§e【!】",
"text": "§l§6【NPC】§r\n喏,你看\n现在我跟你说的就是第二条对话了",
"buttons": [{
"name": "结束对话",
"commands": [
"/dialogue change @s a_7"
]
}]
}, {
"scene_tag": "a_6",
"npc_name": "§l§7【!】",
"text": "§l§6【NPC】§r\n嘤嘤嘤,你居然⋯\n你居然叫人家雌小鬼\n那我可真是太兴奋了啊\n\n好了\n说回正事,结束这场对话吧",
"buttons": [{
"name": "结束对话",
"commands": [
"/dialogue change @s a_7"
]
}]
}, {
"scene_tag": "a_7",
"npc_name": "§l§e",
"text": "§l§6【NPC】§r\n嗯,对话进行地很顺利\n现在你可以把我重置了\n你看看我头上,事件结束后连感叹号都消失了呢",
"buttons": [{
"name": "重置",
"commands": [
"/dialogue change @s a_1"
]
}]
}]
}
}
- 如有疏漏或是更好的想法还请评论告知。
感谢分享 这东西教育版地图用的很多 文照 发表于 2023-12-14 12:49
这东西教育版地图用的很多
可惜网易不能用啊 谢谢分享 666666666666 太谢谢了。 如何进行激活来使用 洵珊 发表于 2024-8-7 23:55
如何进行激活来使用
写好了dialogue文件之后用/dialogue change 应用到npc上面
页: [1]