惯宣-CGX_ 发表于 2023-5-8 03:38:32

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"
                                ]
                        }]
                }]
        }
}



- 如有疏漏或是更好的想法还请评论告知。

YanRan233 发表于 2023-6-9 19:13:07

感谢分享

文照 发表于 2023-12-14 12:49:31

这东西教育版地图用的很多

惯宣-CGX_ 发表于 2023-12-14 18:52:48

文照 发表于 2023-12-14 12:49
这东西教育版地图用的很多

可惜网易不能用啊

aiicsu 发表于 2024-1-21 21:15:56

谢谢分享

吃颗布洛芬 发表于 2024-1-22 23:00:23

666666666666

佟儒书生 发表于 2024-7-27 00:31:22

太谢谢了。

洵珊 发表于 2024-8-7 23:55:20

如何进行激活来使用

惯宣-CGX_ 发表于 2024-8-8 13:40:32

洵珊 发表于 2024-8-7 23:55
如何进行激活来使用

写好了dialogue文件之后用/dialogue change 应用到npc上面
页: [1]
查看完整版本: NPC对话的详细引导帖