跳到主要内容

MythicMobs

在 TypeWriter 中生成 MythicMobs 生物、释放技能、设置击杀目标和区域刷怪点。

免费v0.12集成
依赖TypeWriter0.9Quest (TypeWriter extension)MythicMobsPacketEvents可选

概述​

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 — 某类型当前有多少只活动怪物,可用于对话和条件。

安装​

  1. 在服务器上安装 MythicMobs。
  2. 安装 TypeWriter 官方的 Quest 扩展。
  3. 建议:安装 PacketEvents。它用于隐藏私有怪物的声音和粒子。没有它时,扩展会记录 PacketEvents not loaded — sound isolation disabled,私有怪物在视觉上仍然是私有的,但不是静音的。
  4. 将 MythicMobs 扩展的 JAR 放入 plugins/Typewriter/extensions/。
  5. 重启服务器。

快速上手​

让一个首领只对接取任务的玩家出现,并在它死亡时完成一个目标:

  1. 在 MythicMobs 中创建怪物,例如 CryptKing。
  2. 在 TypeWriter 网页面板中,打开一个 sequence 页面,添加一个 Spawn Mob 动作。
  3. 将 mobName 设为 CryptKing,level 设为 1,spawnLocation 设为目标地点(在游戏中捕获位置),并开启 onlyVisibleForPlayer。
  4. 链接一个触发器或条件,使该动作在任务开始时运行。
  5. 打开任务页面,添加一个 MythicMob Kill Objective。链接 quest,以及一个 fact(用于存储进度的可缓存 fact),将 mythicMobName 设为 CryptKing,amount 设为 1,并填写 display 文本。
  6. 可选:将 onComplete 设为发放奖励的 sequence。
  7. 发布并测试:其他玩家无法看到、击中或听到该首领。
不借助任务来响应击杀

使用 Mob Death Event,设置 mobName,并链接 triggers 指向要运行的 sequence。当有玩家是该怪物的击杀者时它就会触发。

仅对部分玩家可见的战斗​

私有竞技场:只有满足特定 fact 的玩家能看到怪物、被它锁定并与它战斗。

  1. 创建一个 fact(例如 in_arena),并为进入竞技场的玩家设置它。
  2. 添加 Spawn Mob 动作,并在 visibilityCriteria 中填入该 fact。criteria 每隔 visibilityRefreshInterval(默认 1 秒)重新评估一次:离开竞技场的玩家会立即失去怪物,怪物也会放弃其目标。
  3. 通过你选择的 trigger 开始战斗。
  4. 用 scope 设为 VISIBLE_TO_PLAYER 的 Despawn Mob 动作结束战斗(只移除该玩家看得到的怪物),或通过 abandonRange(大于 0)和 abandonDelay 让怪物自行离开:若在延迟时间内没有任何被允许的玩家处于范围内,怪物会被移除。网页编辑器会把新的 Duration 预填为 1 秒,因此请检查 abandonDelay。
  5. 可选:将 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
事件3
目标1
事实4
过场动画2
定义1
占位 fact

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。

相关扩展​