MythicMobs
概述
MythicMobs 将 MythicMobs 插件与 TypeWriter 连接起来。怪物和技能仍然在 MythicMobs 中定义;TypeWriter 决定它们何时出现、为谁出现。你可以在 sequence 中生成或移除怪物、释放技能、在玩家击杀怪物或与怪物交互时作出响应、把击杀数作为任务目标来统计,或者让某个区域在玩家靠近时持续刷出怪物。
怪物可以设为私有。通过 onlyVisibleForPlayer 或 visibilityGroup 生成的怪物只对该玩家或该组显示,其他人无法伤害它、将其作为目标或点击它,而且它的声音和粒子也会对其他玩家隐藏。这使得在共享服务器上实现个人专属的首领战和按玩家区分的任务怪物成为可能。
自 0.12 起,可见性也可以跟随 TypeWriter 的 fact:使用 visibilityCriteria 后,只有满足 criteria 的玩家能看到、被锁定并伤害怪物,criteria 会持续重新评估。由 fact 驱动的私有竞技场不需要分组。
该扩展运行于 Paper 和 Folia,击杀目标需要 TypeWriter 的 Quest 扩展。真正的源码仓库是 Typewriter-MythicMobs。
功能
- 生成与移除 — 在某个位置按指定等级生成怪物,或移除某类型的所有活动怪物。
- 释放技能 — 以玩家身份运行 MythicMobs 技能,可来自动作或过场动画片段。
- 怪物事件 — 当玩家击杀怪物、被怪物击杀或右键点击怪物时启动 sequence。
- 击杀目标 — 一个按名称或正则表达式统计 MythicMobs 击杀数的任务目标,同时也统计弹射物和驯服宠物的击杀。
- 区域刷怪器 — 玩家靠近时,在一个或多个方框内生成怪物,带有数量上限、冷却和预热时间。 可选的
group可将其限定为某个群组的成员,每个群组有各自的周期。 - 私有怪物 — 可见性限制为某个玩家、某个分组或满足 criteria(fact)的玩家,包括伤害、锁定目标、交互、声音和粒子。
- 过场动画怪物 — 在过场动画期间生成对其他所有玩家隐藏的怪物,并在时间轴上释放技能。
- 怪物数量 fact — 某类型当前有多少只活动怪物,可用于对话和条件。
安装
- 在服务器上安装 MythicMobs。
- 安装 TypeWriter 官方的
Quest扩展。 - 建议:安装 PacketEvents。它用于隐藏私有怪物的声音和粒子。没有它时,扩展会记录
PacketEvents not loaded — sound isolation disabled,私有怪物在视觉上仍然是私有的,但不是静音的。 - 将 MythicMobs 扩展的 JAR 放入
plugins/Typewriter/extensions/。 - 重启服务器。
快速上手
让一个首领只对接取任务的玩家出现,并在它死亡时完成一个目标:
- 在 MythicMobs 中创建怪物,例如
CryptKing。 - 在 TypeWriter 网页面板中,打开一个 sequence 页面,添加一个 Spawn Mob 动作。
- 将
mobName设为CryptKing,level设为1,spawnLocation设为目标地点(在游戏中捕获位置),并开启onlyVisibleForPlayer。 - 链接一个触发器或条件,使该动作在任务开始时运行。
- 打开任务页面,添加一个 MythicMob Kill Objective。链接
quest,以及一个fact(用于存储进度的可缓存 fact),将mythicMobName设为CryptKing,amount设为1,并填写display文本。 - 可选:将
onComplete设为发放奖励的 sequence。 - 发布并测试:其他玩家无法看到、击中或听到该首领。
使用 Mob Death Event,设置 mobName,并链接 triggers 指向要运行的 sequence。当有玩家是该怪物的击杀者时它就会触发。
仅对部分玩家可见的战斗
私有竞技场:只有满足特定 fact 的玩家能看到怪物、被它锁定并与它战斗。
- 创建一个 fact(例如
in_arena),并为进入竞技场的玩家设置它。 - 添加 Spawn Mob 动作,并在
visibilityCriteria中填入该 fact。criteria 每隔visibilityRefreshInterval(默认 1 秒)重新评估一次:离开竞技场的玩家会立即失去怪物,怪物也会放弃其目标。 - 通过你选择的 trigger 开始战斗。
- 用
scope设为VISIBLE_TO_PLAYER的 Despawn Mob 动作结束战斗(只移除该玩家看得到的怪物),或通过abandonRange(大于 0)和abandonDelay让怪物自行离开:若在延迟时间内没有任何被允许的玩家处于范围内,怪物会被移除。网页编辑器会把新的 Duration 预填为 1 秒,因此请检查abandonDelay。 - 可选:将
collidable设为false以取消碰撞和推挤。此时它对所有人生效。
与受限怪物相关的所有伤害(近战、投射物、MythicMobs 技能、火焰)都会对未被允许的玩家屏蔽,反之亦然。投射物会穿过。
不造成伤害的技能(药水、投掷等)无法追溯到某个玩家。请为它们添加 MythicMobs 目标条件 typewritervisible(别名 twvisible):只有当目标被允许看到施放者时它才为真。
内联写法,作为 targeter 的条件。请保留 [ 后面的两个空格和 ] 前面的一个空格,MythicMobs 需要它们:
Skills:
- potion{type=SLOW;duration=100} @PlayersInRadius{r=10;conditions=[ - twvisible true ]} ~onTimer:40
不要把 ?twvisible 写在行末:MythicMobs 会在怪物自身上检查这类条件,而不是在它所瞄准的玩家身上。
或者写在元技能(metaskill)中。它自己的行不需要 targeter:它们会对每个通过条件的目标执行。
# 怪物文件
Skills:
- skill{s=ArenaBossSlow} @PlayersInRadius{r=10} ~onTimer:40
# 技能文件
ArenaBossSlow:
TargetConditions:
- twvisible
Skills:
- potion{type=SLOW;duration=100}
targeter 中的 twvisible false 则相反:只针对不被允许看到该怪物的玩家。
MythicMobs 会在 Typewriter 加载之前读取自己的文件。当其中出现 twvisible 时,扩展会在服务器启动时执行一次 /mm reload,因此你无需任何操作。重新加载 Typewriter 后,该条件仍然有效。如果 Typewriter 已停止,它会放行所有玩家,并记录一条要求执行 /mm reload 的警告。
限制。 碰撞是全有或全无。不造成伤害的技能在没有 twvisible 时不会被过滤。在远离怪物处播放的声音和粒子不会被隐藏。源条目被删除的怪物会对所有人保持隐藏。服务器重启后,带有 abandonRange 的怪物如果在 abandonDelay 内没有被允许的玩家靠近,就会被移除。
工作原理
配置
大多数设置都是条目的字段。有两个行为值得了解:
-
自动隔离。 在 MythicMobs 的怪物文件中,设置
Options.VisibilityGroup: nearby,可让怪物在生成时仅对最近的玩家(100 格以内)可见。以NATURAL、RANDOM或RANDOM_SPAWN为原因生成的怪物,即使没有该选项也会得到同样的处理。已经被 TypeWriter 条目限制的怪物不受影响。 -
怪物匹配。 事件中的
mobName字段是与 MythicMobs 内部名称相匹配的正则表达式;在 Mob Death Event 和 MythicMob Interact Event 中不区分大小写。使用.*可匹配任意怪物。 -
目标显示格式。 任务追踪器中 MythicMob Kill Objective 的那一行并未硬编码,而是从在
plugins/Typewriter/snippets.yml中编辑的两个 TypeWriter snippet 读取:advancedQuest.display(进行中,默认为灰色调的<display> (<current>/<required>))和advancedQuest.completed(达到数量,默认为✔,随后是带删除线的<display>和进度)。占位符:<display>(目标的display字段)、<current>和<required>;PlaceholderAPI 占位符同样会被解析。这两个键与其他 BTC 目标类扩展共用,因此一次编辑即可改变所有计数目标的样式。
条目
14 个条目,由扩展源码生成。
动作3
- Despawn Mythicmobs MobDespawn a mob from MythicMobs
- Execute Mythicmob SkillExecutes a MythicMobs skill
- Spawn Mythicmobs MobSpawn a mob from MythicMobs
事件3
- Mythicmobs Interact EventMythicMob Interact Event
- Mythicmobs Kill Player EventMythicMob Kill Player Event
- On Mythic Mob DieWhen a player kill a MythicMobs mob.
目标1
- Mythicmob Kill ObjectiveAn objective to kill MythicMobs mobs
事实4
- Mythic Mob Count FactCount the number of active Mythic Mobs of the specified type
- Mythicmob FactionMythicMob Faction
- Mythicmob LevelMythicMob Level
- Mythicmob StanceMythicMob Stance
过场动画2
- Mythicmob CinematicSpawn a MythicMob during a cinematic
- Mythicskill CinematicTrigger a MythicSkill during a cinematic
定义1
- Mythic SpawnerMythicMobs Spawner with Corner System
MythicMob Faction、MythicMob Level 和 MythicMob Stance 在当前版本中始终返回 0。它们是为以后的版本保留的:请不要基于它们构建条件。
故障排查
什么都没有生成。 mobName 必须是已存在怪物的 MythicMobs 内部名称。如果怪物未知,Spawn Mob 会静默地什么也不做。请将其与 MythicMobs 中的怪物文件名进行比对。
日志中出现 “Skill ... not found” 错误。 当 skillName 不是 MythicMobs 技能时,Execute Skill 和 Skill Cinematic 会抛出此错误。如果日志显示该技能 “is not usable at this time”,说明它正处于冷却中,或其条件未通过。
刷怪器始终不刷怪。 玩家必须位于某个区域的 defaultActivationRange(默认 24 格,测量到区域中心)范围内。刷怪器每秒检查一次,并在服务器启动约五秒后开始工作。同时检查 criteria、warmup 是否已经结束、冷却(defaultCooldown,以 tick 为单位)是否已经过去,以及范围内的怪物数量是否低于 defaultMaxMobs。请正确设置 mobType:否则日志会显示 Cannot find MythicMob ...。
其他玩家仍然能看到私有怪物。 可见性仅适用于由 TypeWriter 条目、nearby 选项或自然生成所生成的怪物。其他怪物保持公开。生成动作还需要一位玩家:如果设置了 visibilityGroup,但该玩家不在任何组中,该怪物会回退为仅对触发的玩家可见。
击杀目标没有计数。 只有当 quest 对该玩家处于激活状态,并且由该玩家(或其弹射物、驯服宠物)完成击杀时,目标才会计数。如果 mobs 不为空,则会忽略 mythicMobName。请检查 fact 是否为可缓存的 fact 条目。
击杀玩家事件从不触发。 MythicMob Kill Player Event 会将 mythicMobType 作为区分大小写的正则表达式,与导致死亡的怪物的内部名称进行匹配。留空则匹配任意 MythicMob。
相关扩展
- MythicMobs NPC — 将 MythicMobs 怪物用作可交互的 NPC。