技能系统
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 |
|---|---|
| 1 | 1 |
| 10 | 100 |
| 25 | 625 |
| 50 | 2,500 |
| 100 | 10,000 |
Boss XP 乘数
更难对付的怪物价值更高。上面的基础 XP 会乘以一个由怪物 healthMultiplier 和 damageMultiplier 推导出的系数:
bossXPMultiplier = healthMultiplier^0.6 * (1 + (damageMultiplier - 1) * 0.15)
生命值部分使用次线性指数(0.6),这样更长的战斗能给到更多回报,同时又不会让高血量 Boss 变得不成比例地适合刷取。伤害部分被大幅削弱,因为哪怕伤害只小幅提升,难度也会上升很多,而线性回报会把玩家推向自杀式的目标。
| healthMultiplier | damageMultiplier | XP 乘数 |
|---|---|---|
| 1.0 | 1.0 | 1.00x |
| 3.0(小 Boss) | 1.2 | 1.99x |
| 7.0(Boss) | 1.4 | 3.41x |
| 40.0(世界 Boss) | 1.5 | 9.83x |
一次击杀的完整运算顺序是:有效怪物等级(应用下方的反漏洞上限之后)→ 基础 XP → Boss 乘数 → 按伤害贡献分摊 → 武器 XP 与护甲 XP。
反漏洞保护
这三项全部在 AntiExploit.yml 中配置,且当 enableFarmingProtection 为 false 时会被完全跳过。完整配置表见 刷取保护。
- 低等级怪物(按技能计): 仅当怪物比该特定技能的等级低不超过
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 | 同等级怪物击杀数 |
|---|---|---|
| 10 | 8,500 | 85 |
| 25 | 132,812 | 213 |
| 50 | 1,062,500 | 425 |
| 75 | 3,585,937 | 638 |
| 100 | 8,500,000 | 850 |
护甲以武器速率的 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 级或以下的物品任何人都可以装备,不论技能等级如何。这确保了新玩家能够自由使用前期装备,而不会被锁定在外。
如果你尝试装备一件高于你技能等级的物品,你会收到一条警告消息,并且该物品不会提供任何精英加成。
技能奖励
随着你提升技能,你会分四个层级解锁特殊的战斗能力。每个层级为该技能解锁的是一组奖励,而不是单独一个:
| 层级 | 解锁等级 |
|---|---|
| 1 | 10 级 |
| 2 | 25 级 |
| 3 | 50 级 |
| 4 | 75 级 |
解锁一个层级并不会给你一个槽位。每种武器或护甲类型同时最多可拥有 3 个激活奖励,从你已解锁的全部内容中挑选。技能奖励通过 /em 菜单管理,或通过造访冒险者公会中的技能奖励 NPC 进行管理。
skillbonuses/*.yml 文件控制显示名称、描述、解锁层级、奖励类型、菜单图标和 lore 模板,也控制部分平衡数值。当某个奖励读取其配置时,插件会使用 baseValue、scalingPerLevel、procChance、cooldownSeconds、maxStacks 和 stackBonus。不读取这些配置项的奖励则使用代码中的固定常量。各奖励具体从配置中读取哪些值,请参阅技能奖励。
完整列出全部 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 start | elitemobs.admin | 开始自动化战斗系统测试 |
/em debug combat test <type> | elitemobs.admin | 测试某种特定武器类型(例如 swords、bows) |
/em debug combat results | elitemobs.admin | 查看上次战斗测试的结果 |
/em debug combat cancel | elitemobs.admin | 取消正在进行的战斗测试 |
/em skill set 的 skillType 参数接受:ARMOR、SWORDS、AXES、BOWS、CROSSBOWS、TRIDENTS、HOES、MACES、SPEARS, STAVES, WANDS。
服务器配置
技能系统在 skills.yml 中配置。关键设置:
| 设置 | 默认 | 说明 |
|---|---|---|
skillSystemEnabled | true | 启用或禁用整个技能系统 |
armorSkillHealthBonusEnabled | true | 护甲技能是否授予额外的最大生命值(每超过 1 级 +1 颗心) |
scalePlayerHealthDisplayToVanilla | false | 保留 EliteMobs 的最大生命值,但在视觉上将玩家 HUD 缩放回原版的 10 颗心 |
forceDefaultHealthWhenArmorSkillHealthBonusDisabled | false | 当护甲生命值加成被禁用时,强制玩家在加入时回到原版的 20 点最大生命值 |
skillWorldExclusions | (空) | 技能系统在其中失效的世界名称列表。这些世界中的玩家不会获得技能 XP、护甲生命值加成、XP 条或战斗等级显示。对于希望人人平等的活动世界很有用。匹配不区分大小写 |
skillsMenuTitle | &5&lYour Skills | 技能菜单标题 |
showCombatLevelDisplay | true | 在玩家上方显示战斗等级数字 |
showXPBar | true | 在战斗期间显示动画 XP 进度条 |
skillBarTitleFormat | &6$skillName &7Lv.$level$xpText | XP 条标题格式 |
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。基础职业为 paladin、berserker、ranger、cleric、spellcaster。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。