跳到主要内容

技能系统

EliteMobs 使用一套基于技能的进度系统,玩家通过与精英怪战斗来升级。玩家发展的不是单一的全局等级,而是各自独立的武器技能和一项护甲技能,它们共同决定其整体实力。

共有 11 种技能类型

技能武器备注
剑(Swords)任意 _SWORD
斧(Axes)任意 _AXE
弓(Bows)BOW
弩(Crossbows)CROSSBOW
三叉戟(Tridents)TRIDENT
锄(镰刀 / Hoes / Scythes)任意 _HOE
重锤(Maces)MACE需要 Minecraft 1.21+
矛(Spears)任意 _SPEAR需要 Minecraft 1.21.11+(搭配资源包)
法杖experimental_arcane_staff
魔棒experimental_arcane_wand
护甲(Armor)头盔、胸甲、护腿、靴子被动升级

技能通过使用对应武器击杀精英怪来升级。你的战斗等级——由你的技能计算得出——决定了你能访问哪些内容、能装备哪些装备,以及在你周围生成的怪物难度。

技能如何升级

当你击杀一只精英怪时,你会根据该怪物的等级获得 XP。XP 的分配方式如下:

  • 武器 XP 按伤害贡献分配给命中或发射投射物时记录的技能。怪物死亡时切换武器不会改变 XP 的归属。
  • 护甲 XP 自动按你分得 XP 的 1/3 倍率获得。使用多种武器时,护甲技能可能高于某个单独的武器技能。
  • 组队战斗: 当多名玩家对同一只精英怪造成伤害时,XP 会按每位玩家的伤害贡献比例分配。如果你造成了 60% 的伤害,你将获得 60% 的基础 XP。

来自怪物的基础 XP

击杀怪物获得的基础 XP 为:

mob_xp = mob_level ^ 2
怪物等级获得 XP
11
10100
25625
502,500
10010,000

Boss XP 乘数

更难对付的怪物价值更高。上面的基础 XP 会乘以一个由怪物 healthMultiplierdamageMultiplier 推导出的系数:

bossXPMultiplier = healthMultiplier^0.6 * (1 + (damageMultiplier - 1) * 0.15)

生命值部分使用次线性指数(0.6),这样更长的战斗能给到更多回报,同时又不会让高血量 Boss 变得不成比例地适合刷取。伤害部分被大幅削弱,因为哪怕伤害只小幅提升,难度也会上升很多,而线性回报会把玩家推向自杀式的目标。

healthMultiplierdamageMultiplierXP 乘数
1.01.01.00x
3.0(小 Boss)1.21.99x
7.0(Boss)1.43.41x
40.0(世界 Boss)1.59.83x

一次击杀的完整运算顺序是:有效怪物等级(应用下方的反漏洞上限之后)→ 基础 XP → Boss 乘数 → 按伤害贡献分摊 → 武器 XP 与护甲 XP。

反漏洞保护

这三项全部在 AntiExploit.yml 中配置,且当 enableFarmingProtectionfalse 时会被完全跳过。完整配置表见 刷取保护

  • 低等级怪物(按技能计): 仅当怪物比该特定技能的等级低不超过 farmingProtectionLevelDifference 级(默认 15)时,每项武器/护甲技能才会获得 XP。此检查使用的是单项技能等级,而非你的战斗等级,并且在缩放战斗下会被完全跳过 —— 那种情况下怪物已按玩家归一化,"等级过低"没有意义。
  • 高等级怪物: 技能 XP 使用的有效奖励等级上限为 combat_level + farmingProtectionLevelDifference(默认 15)。同一上限也适用于自然精英怪的战利品;自定义 Boss 的战利品不使用此刷怪保护等级上限。获得 XP 的其他资格条件仍然生效。
  • 自然精英刷怪上限: 自然(非自定义 Boss)精英击杀会在一个长度为 farmingProtectionMinutes 的滚动窗口(默认 30)内计数。在该窗口内超过 farmingProtectionKills 次击杀(默认 20)会让你在整整一个窗口内无法获得自然精英奖励。锁定开始和解除时都会在聊天中告知你。自定义 Boss 不受此限制。

XP 进度

从当前等级升到下一等级所需的 XP 遵循以下公式:

1–100 级:

xp_to_next_level = 8.5 * current_level ^ 3

100 级以上(软上限):

xp_to_next_level = 8.5 * current_level ^ 3 * (1 + ((current_level - 100) ^ 2 / 100))

软上限倍率在 100 级时为 1.0(无额外惩罚),并按二次方增长。到 150 级时,倍率达到 26 倍,使得进一步提升变得极其困难。

每级 XP 表

下表显示了从给定等级升到下一等级所需的 XP,以及大约需要击杀多少只同等级怪物(武器技能,非护甲):

等级升至下一级所需 XP同等级怪物击杀数
108,50085
25132,812213
501,062,500425
753,585,937638
1008,500,000850
护甲耗时更长

护甲以武器速率的 1/3 获得 XP,因此与上表的数字相比,提升护甲大约需要 3 倍数量的击杀。在 50 级时,这意味着仅护甲就需要约 1,275 次同等级击杀。

战斗等级

你的战斗等级是衡量你整体实力的指标。它的计算方式为:

combat_level = (highest_weapon_skill + second_highest_weapon_skill + armor_skill) / 3

结果向下取整(整数除法)。

战斗等级决定:

  • 在你周围生成的精英怪等级
  • 你能装备哪些装备(装备等级必须不高于你相匹配的技能等级)
  • 你能访问哪些地下城和实例内容
  • XP 和战利品资格(反漏洞检查使用战斗等级)

战斗等级显示

你的战斗等级会以一个悬浮数字显示在你头顶上方,对其他玩家可见。它使用基于数据包的文本显示,并在你的技能变化时自动更新。显示格式可配置(默认:Combat Lv. X)。

XP 条

当你获得技能 XP 时,会出现一个动画 Boss 血条,显示你朝向下一等级的进度。该血条具有:

  • 随 XP 获得而平滑爬升的动画
  • 每种技能类型有不同的颜色(例如,剑为红色、弓为绿色、护甲为蓝色)
  • 升级时的特殊粒子和音效
  • 在 5 秒无活动后自动隐藏

装备限制

EliteMobs 装备具有与技能系统挂钩的等级要求。要装备一件精英物品,你对应武器或护甲类型的技能等级必须等于或高于该物品的等级。

例外: 20 级或以下的物品任何人都可以装备,不论技能等级如何。这确保了新玩家能够自由使用前期装备,而不会被锁定在外。

如果你尝试装备一件高于你技能等级的物品,你会收到一条警告消息,并且该物品不会提供任何精英加成。

技能奖励

随着你提升技能,你会分四个层级解锁特殊的战斗能力。每个层级为该技能解锁的是一奖励,而不是单独一个:

层级解锁等级
110 级
225 级
350 级
475 级

解锁一个层级并不会给你一个槽位。每种武器或护甲类型同时最多可拥有 3 个激活奖励,从你已解锁的全部内容中挑选。技能奖励通过 /em 菜单管理,或通过造访冒险者公会中的技能奖励 NPC 进行管理。

skillbonuses 文件控制的内容

skillbonuses/*.yml 文件控制显示名称、描述、解锁层级、奖励类型、菜单图标和 lore 模板,也控制部分平衡数值。当某个奖励读取其配置时,插件会使用 baseValuescalingPerLevelprocChancecooldownSecondsmaxStacksstackBonus。不读取这些配置项的奖励则使用代码中的固定常量。各奖励具体从配置中读取哪些值,请参阅技能奖励

完整列出全部 84 个奖励及其作用,请参阅技能奖励

通知与 UI

技能系统提供多种形式的反馈:

  • 升级: 每次升级时的标题消息、挑战完成音效和不死图腾粒子爆发。
  • 里程碑: 仅当玩家达到里程碑等级(每第 5 级:5、10、15……)时才会发送全服广播。常规升级不会广播。该广播可在 dungeons.yml 中关闭。
  • 战斗等级显示: 头顶上方的悬浮数字,对其他玩家可见。升级时自动更新。
  • XP 条: 战斗期间显示技能 XP 进度的动画 Boss 血条。
  • XP 获取消息: 可选的每次击杀 XP 消息(默认禁用,因为它们可能会刷屏)。

上述大多数项目在 skills.yml 中配置;里程碑升级广播及其消息位于 dungeons.yml 中。

管理员命令

命令权限说明
/em skill check <player>elitemobs.skill.check查看玩家的技能等级、XP 进度和百分比
/em skill set <player> <skillType> <level>elitemobs.skill.admin将某项特定技能设置为给定等级
/em skill setAll <player> <level>elitemobs.skill.admin将所有技能设置为相同等级
/em debug combat startelitemobs.admin开始自动化战斗系统测试
/em debug combat test <type>elitemobs.admin测试某种特定武器类型(例如 swords、bows)
/em debug combat resultselitemobs.admin查看上次战斗测试的结果
/em debug combat cancelelitemobs.admin取消正在进行的战斗测试
备注

/em skill setskillType 参数接受:ARMORSWORDSAXESBOWSCROSSBOWSTRIDENTSHOESMACESSPEARS, STAVES, WANDS

服务器配置

技能系统在 skills.yml 中配置。关键设置:

设置默认说明
skillSystemEnabledtrue启用或禁用整个技能系统
armorSkillHealthBonusEnabledtrue护甲技能是否授予额外的最大生命值(每超过 1 级 +1 颗心)
scalePlayerHealthDisplayToVanillafalse保留 EliteMobs 的最大生命值,但在视觉上将玩家 HUD 缩放回原版的 10 颗心
forceDefaultHealthWhenArmorSkillHealthBonusDisabledfalse当护甲生命值加成被禁用时,强制玩家在加入时回到原版的 20 点最大生命值
skillWorldExclusions(空)技能系统在其中失效的世界名称列表。这些世界中的玩家不会获得技能 XP、护甲生命值加成、XP 条或战斗等级显示。对于希望人人平等的活动世界很有用。匹配不区分大小写
skillsMenuTitle&5&lYour Skills技能菜单标题
showCombatLevelDisplaytrue在玩家上方显示战斗等级数字
showXPBartrue在战斗期间显示动画 XP 进度条
skillBarTitleFormat&6$skillName &7Lv.$level$xpTextXP 条标题格式
skillLevelUpTitleFormat&e&l✦ $skillName LEVEL UP! &7→ &eLv.$level &e&l✦升级 Boss 血条标题格式
combatLevelFormat&6&lCombat Lv. $level战斗等级显示格式

完整的配置参考请参阅 EliteMobs 配置 页面。

实验性战斗

当前构建包含独立的实验性职业系统。plugins/EliteMobs/Experimental Combat.yml 中的 enabled 默认为 true;设为 false 并重载 EliteMobs 可禁用模块。实验期间职业定义与平衡值固定在插件中。旧服务器应用本节前,应检查已安装版本及生成的配置。

/em class 打开职业资料,/em class info <class> 查看形态说明,/em class select <class> 选择已解锁形态。这些玩家命令需要 elitemobs.command。基础职业为 paladinberserkerrangerclericspellcaster。Spellcaster 需要兼容的 FreeMinecraftModels 及其内置法杖和魔棒,内容不可用时保持锁定。法杖与魔棒使用已注册物品身份;普通木棍、长矛或烈焰棒不会自动变成魔法武器。

/em class input java_hotbar_layer 使用 F 后按 1/2/3 触发 Mobility、Signature、Utility。/em class input focus_item 选择替代的 Focus 物品操作,/em class focus 领取该物品。EliteMobs 战斗内容中默认启用职业操作。allowClassAbilitiesOutsideEliteMobsWorlds 默认为 true,允许玩家在其他区域潜行时连按两次 F,为当前会话启用操作。

模块启用时,GUILD_GREETER 打开 Guild Training;禁用时打开武器技能加成选择菜单。职业成长独立于武器和护甲成长;不带武器身份的职业技能伤害不会获得武器 XP。