hae5en 发表于 2024-12-10 17:54:31

关于1.12版本原版指令问题

想做个低版本的rpg地图,大篇幅的那种npc交互文字是放命令方块里好啊,还是说放在function里用计时器控制好啊,有没有模板能够参考一下的

爱玩游戏的阿坤 发表于 2024-12-10 17:54:32

本帖最后由 爱玩游戏的阿坤 于 2024-12-25 20:54 编辑


[*]制作 RPG 地图时,关于 NPC 交互和大篇幅文字的展示,你有几种不同的实现方式。每种方法都有其优缺点,具体选择哪种方式要看你的需求和设计偏好。以下是两种常见的实现方式,并给出了一些建议和模板参考:1. 命令方块实现交互文本优点:实现简单,特别是对于较小规模的 RPG 地图来说,可以快速上手。可以直接在游戏内测试并调整,非常方便。缺点:如果交互文字篇幅很大,命令方块的数量会迅速增加,可能导致命令方块排列混乱或游戏运行性能下降。扩展性较差,维护复杂的对话系统可能会变得困难。实现方式:利用命令方块和条件触发器(如玩家右键点击 NPC 或区域进入)触发文本显示。常见的命令方式是使用 tellraw 命令,/tellraw @p {"text":"你好,勇士!","color":"gold"}。如果文本较长,可以分段显示,每次触发显示一段文本。例如,可以使用多个命令方块依次播放不同的对话文本。示例:使用多个命令方块按顺序发送文本:复制代码/tellraw @p {"text":"欢迎来到村庄,冒险者!","color":"gold"}复制代码/tellraw @p {"text":"这里有一个任务等待你完成。","color":"green"}使用命令方块来检测玩家与 NPC 的互动(例如用 testfor 命令检测玩家是否点击了特定区域)。
2. Function 文件实现交互文本优点:功能更强大,适用于更复杂的 RPG 地图,可以使用计时器、条件语句等逻辑来控制文本的显示和交互。代码更整洁,便于维护,适合制作长篇对话和多个NPC的互动。可以灵活控制对话的流程,例如选择性分支、分段对话、计时器控制等。缺点:需要一定的命令和编程知识,初学者可能需要花时间学习。需要使用 function 文件,需要设置数据包(data pack),而且需要用到一些基本的命令和计时控制,可能稍显复杂。实现方式:使用 function 文件可以通过定义不同的对话逻辑来创建复杂的交互系统。使用计时器(例如通过 scoreboard 来跟踪进度)来控制何时显示每一段文字。利用 tellraw 命令来显示文本,同样可以使用 JSON 格式来定义文本的颜色、样式、链接等。示例:创建一个 function 文件,在其中定义显示文本的流程。例如:复制代码# function/quest/start.mcfunctiontellraw @p {"text":"欢迎来到村庄,勇士!","color":"gold"}scoreboard players set @p dialogue 1复制代码# function/quest/next.mcfunctionexecute if score @p dialogue matches 1 run tellraw @p {"text":"这里有一个任务等待你完成。","color":"green"}execute if score @p dialogue matches 1 run scoreboard players set @p dialogue 2用 scoreboard 来控制对话的进度,并在不同阶段显示不同的对话。复制代码scoreboard objectives add dialogue dummy "Dialogue Progress"

燕子 发表于 2024-12-11 17:45:03

俩者无差别,命令方块每一次修改只能在游戏里面,function使用起来会更加的方便,该有的功能都有,命令方块类似GUI图形界面,function类似纯命令,看你适合哪一个

hae5en 发表于 2024-12-24 23:20:13

爱玩游戏的阿坤 发表于 2024-12-10 17:54
制作 RPG 地图时,关于 NPC 交互和大篇幅文字的展示,你有几种不同的实现方式。每种方法都有其优缺点,具体 ...

你好,多人与同一npc交互的话怎么解决显示错乱的问题啊

爱玩游戏的阿坤 发表于 2024-12-25 17:52:48

hae5en 发表于 2024-12-24 23:20
你好,多人与同一npc交互的话怎么解决显示错乱的问题啊

你好,提问请到专门的提问区{:doge:}

爱玩游戏的阿坤 发表于 2024-12-29 19:24:51

hae5en 发表于 2024-12-24 23:20
你好,多人与同一npc交互的话怎么解决显示错乱的问题啊

不好意思,我把你当成其他玩家的提问了{:Strong_smile:}

爱玩游戏的阿坤 发表于 2024-12-29 19:34:07

hae5en 发表于 2024-12-24 23:20
你好,多人与同一npc交互的话怎么解决显示错乱的问题啊

如果多个玩家同时与同一个 NPC 进行交互时,可能会出现显示错乱的问题,尤其是在使用 命令方块 或 /tellraw 命令显示对话时,所有玩家的对话内容可能会交叉或覆盖。为了避免这种情况,可以采取以下几种方法来确保每个玩家与 NPC 的交互独立且不会相互干扰

1. 使用玩家唯一的目标选择器
你可以通过使用目标选择器来确保每个玩家的对话显示只影响到当前与 NPC 交互的玩家。最常用的目标选择器是@p(最近的玩家)或 @a(所有玩家),但为了避免多个玩家同时触发对话导致的冲突,建议使用玩家特定的 @a 或者使用 /execute 命令来确保对话仅显示给当前与 NPC 最接近的玩家

方案:使用玩家的 scoreboard 值来标识当前对话进程
每个玩家的对话进度使用 scoreboard 来管理,可以有效避免多名玩家同时触发对话时的干扰

创建一个进度分数板
在游戏中,你可以创建一个 scoreboard 来追踪每个玩家的对话进度


/scoreboard objectives add dialogueProgress dummy


每次玩家与 NPC 交互时,更新该玩家的进度值
当一个玩家接近并与 NPC 交互时,设置一个进度标记

/execute as @a run scoreboard players set @s dialogueProgress 1
这条命令会确保只对距离 5 个方块以内的玩家更新对话进度

基于对话进度显示内容
然后根据 dialogueProgress 的分数,你可以用 /tellraw 命令为每个玩家显示不同的对话内容


/execute as @a run tellraw @s {"text":"欢迎来到冒险世界!","color":"gold","bold":true}


这样可以确保每个玩家都有独立的对话进度,避免多个玩家同时触发对话时出现混乱

2. 使用 execute 命令控制独立显示
如果你希望在一个命令方块中处理多个玩家的对话交互,可以通过 /execute 命令来确保每个玩家的对话只有在玩家触发时显示。这样就可以避免所有玩家都收到同一条对话的信息


/execute as @a run tellraw @s {"text":"欢迎,你在这片土地上将开启新的冒险!","color":"yellow"}


上面的命令会确保距离 NPC 5 格以内的每个玩家都会看到一条欢迎信息,且不会影响其他玩家

3. 避免全局消息覆盖
如果你希望不同玩家的对话内容能够彼此独立显示(例如,玩家 A 与 NPC 交互时,不希望玩家 B 看到相同的消息),可以将 /tellraw 显示指令绑定到每个玩家的 scoreboard 状态

示例:


/execute as @a run tellraw @s {"text":"你想进行什么样的冒险?","color":"blue"}
/execute as @a run tellraw @s {"text":"祝你好运,勇士!","color":"green"}


每个玩家的对话显示是独立的,基于他们的 dialogueProgress 分数来选择合适的对话内容

4. 使用命令链与红石控制
你还可以利用红石电路来触发命令方块的执行,以确保只有与 NPC 交互的玩家才会被正确处理

使用一个 红石触发器(例如按钮、压力板等)来控制命令方块
使用 /execute 来确保触发的命令仅影响特定的玩家
用红石锁定或解除锁定特定命令方块,只针对与 NPC 交互的玩家执行相应命令
这样可以避免多个玩家同时与同一 NPC 交互时出现错乱或信息覆盖的情况

5. 避免对话重复触发
有时多个玩家在同时接触 NPC 时,会导致同一段对话多次触发,增加系统负担。为此,可以设置一个时间间隔或防重复机制,避免玩家触发同一对话时发生重复


/execute as @a if score @s lastInteraction <= 0 run tellraw @s {"text":"你好!","color":"blue"}
/execute as @a run scoreboard players set @s lastInteraction 20


通过 lastInteraction 分数,你可以控制玩家触发对话的频率,避免短时间内多次触发同一个对话

总结
要解决多人同时与同一 NPC 交互时出现的显示错乱问题,最好的方法是使用 /execute 命令和 scoreboard 系统,确保每个玩家有独立的对话进度和显示内容。利用 execute as 来精确地控制每个玩家的对话显示,结合 /tellraw 和 scoreboard,你可以实现每个玩家与 NPC 的独立交互,避免多人的对话混淆

页: [1]
查看完整版本: 关于1.12版本原版指令问题