UID354295性别保密经验 EP铁粒 粒回帖0主题精华在线时间 小时注册时间2022-4-5最后登录1970-1-1
| 本帖最后由 惯宣-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[scores={某讳=..1}] @initiator <情景标签>
/dialogue change @s[scores={某讳=2..}] <情景标签> @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[scores={对话2=0}] @initiator a_4",
- "/dialogue open @s[scores={对话2=1}] @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"
- ]
- }]
- }]
- }
- }
复制代码 |
cankao.json(2.81 KB, 下载次数: 21)
- 如有疏漏或是更好的想法还请评论告知。
|
|