外观
世界 BOSS · 技术实现
「玩家设定 →」
1. 代码位置
| 层 | 类 | 职责 |
|---|---|---|
| Controller | controller/WorldBossController(/api/world-boss) | 总览/挑战/结算查询 |
| Service | service/WorldBossService | 挑战结算、按日最高伤害排名 |
| Service | service/WorldBossScheduler | 每日 20:00 结算调度 |
| Service | service/WorldBossTheaterBuilder | 60 秒战斗演出时间线(三阶段:常态/狂暴/绝杀) |
| domain | domain/WorldBossRules | 规则:开放 0:00-19:30、20:00 结算、60 秒/次、血量按 docs/37 §5.8 中位境界月卡锚点 × 当日档位(按星期轮换)并抬升到防秒杀下限、血量下限 5%、排名奖励分段 10/8/6/5/5/5/4/4/4/4/3…(rewardForRank:153-176)绑定五彩神石 |
| domain | domain/BossPhaseRules、domain/BossAffixRules、domain/BossRhythm | BOSS 阶段/词缀/节奏 |
2. 数据表
| 表 | 关键列 | 说明 |
|---|---|---|
world_boss_day | boss_key、boss_date、max_health、defense、boss_name | 当日 BOSS 确定性生成(V30) |
world_boss_player_record | player_id、boss_key、damage、rank | 玩家挑战记录与结算排名(V30) |
3. 配置与常量
- BOSS 规则:
名称 数值 说明 gameZoneGAME_ZONE ZoneId.of("Asia/Shanghai") — openStartHourOPEN_START_HOUR 0 — openEndHourOPEN_END_HOUR 19 — openEndMinuteOPEN_END_MINUTE 30 — settleHourSETTLE_HOUR 20 — challengeTimeSecondsCHALLENGE_TIME_SECONDS 60 — bossHealthFloorRatioBOSS_HEALTH_FLOOR_RATIO 0.05D BOSS 血量展示下限比例:结算前 BOSS 不会被击杀,剩余血量不低于最大血量的 5%。 作用于 overview 当前血量、挑战结果剩余血量、演出时间线中的 BOSS 血量。 bossBaseHealthBOSS_BASE_HEALTH 45_000_000_000L — bossBaseDefenseBOSS_BASE_DEFENSE 0L — medianRealmFallbackMEDIAN_REALM_FALLBACK Realm.MORTAL — worldBossOneShotSafetyMultiplierWORLD_BOSS_ONE_SHOT_SAFETY_MULTIPLIER 2.5D 世界 BOSS 防秒杀安全倍数:BOSS 血量不低于该倍数 × 全服当前最高基础力量玩家的 单次 60 秒挑战伤害上限(含满配破界烙印 +5%)。2.5 兼顾「任何人无法一击打穿」 与血条可感知消耗,数值运营可调。 maxWorldBossDamageBonusRateMAX_WORLD_BOSS_DAMAGE_BONUS_RATE 0.05D — maxWorldBossTotalBonusRateMAX_WORLD_BOSS_TOTAL_BONUS_RATE MAX_WORLD_BOSS_DAMAGE_BONUS_RATE + AbyssMarkRules.FULL_ALL_DAMAGE_BONUS 世界 BOSS 挑战伤害的满配烙印加成上限:世界BOSS +5% 与<b>全伤 +15%</b> 加算为同一乘区 (2026-09-22 起全伤同步到世界BOSS;加法口径,不做两次乘法)。 growthBaseDateGROWTH_BASE_DATE LocalDate.of(2026, 1, 1) — dailyGrowthRateDAILY_GROWTH_RATE 0.02D — theaterPhase1EndSecondTHEATER_PHASE1_END_SECOND 20 — theaterPhase2EndSecondTHEATER_PHASE2_END_SECOND 40 — bindingRainbowStoneIdBINDING_RAINBOW_STONE_ID ShopBalanceRules.RAINBOW_STONE_ID — bindingRainbowStoneNameBINDING_RAINBOW_STONE_NAME ShopBalanceRules.RAINBOW_STONE_NAME — bossNamePoolBOSS_NAME_POOL { "九幽魔尊", "万古邪神", "天外魔龙", "太虚古皇", "九霄雷帝", "冥河老祖", "万年蛟王", "血海修罗", "混沌魔猿", "枯骨大帝" } — participationFloorStonesPARTICIPATION_FLOOR_STONES {1, 1, 2, 2, 3, 3, 4, 4, 5, 5} F9 参与保底(docs/42 §11):按玩家<b>自身</b>境界档的参与保底神石数 (凡人 1 颗 → 渡劫 5 颗)。文档定义「0.1 个免费标准日材料」, 此处为其在绑定五彩神石口径下的池内等价实现,数值运营可调。 来源:emberfall-server/src/main/java/com/emberfall/domain/WorldBossRules.java· commit22d062aff99fabdc373f3b1c82b2a6eff4a034d3 - 确定性生成与成长:emberfall-server/src/main/java/com/emberfall/domain/WorldBossRules.java:22源码读取失败,片段不可用
- yml 键:无(时间与数值全部常量类;管理端
AdminWorldBossController可查)
4. 数据流简述
每日按服务器中位境界的月卡锚点 × 当日档位(普通/精英/首领 V,按星期轮换)生成当日 BOSS,并与防秒杀下限取大值(同服所有人同一只),开放期内 POST /api/world-boss/challenge 进行 60 秒输出比拼,取当日最高单次伤害记入 world_boss_player_record(BOSS 血量下限 5% 保证后续玩家可参与)。WorldBossScheduler 每日 20:00 结算,按伤害排名发放绑定五彩神石(WorldBossRules.rewardForRank:第 1 名 10、第 2 名 8、第 3 名 6、4~6 名 5、7~10 名 4、11~100 名 3、其余 2)。
5. 战斗演出契约(60 秒时间线)
WorldBossTheaterBuilder 的时间线遵循 docs/34 的通用战斗演出契约,且必须与结算口径自洽(§7.5)。 以下几条曾静默退化过,改动时按契约回归(WorldBossTheaterBuilderTest 已覆盖):
| 规则 | 实现要点 |
|---|---|
| 每日剧本确定性 | 种子先做一步 splitmix64 混合再交给 Random。裸用 bossDate.toEpochDay() 会让 nextInt(4) 退化:相邻日期状态只差约 2^38.5,而幂次 bound 只取高 2 位,变体会连续几十天不变 |
| 每秒必有打击 | 玩家出手按攻速折叠:hits = round(second×攻速) − round((second−1)×攻速),再经 StrikePlanner 折成 1~4 轮可见打击(docs/34 §3.2/§3.3),攻速 9.8 时每秒 3~4 次 |
| 伤害守恒 | 每秒 hits 全部落到事件上(同一轮的多次命中合并为 hitsMerged),60 秒合计 = 四维折算攻击 × 60,与 WorldBossRules.challengeDamage 一致 |
| BOSS 出手 | 阶段 2 起每秒反击一次,伤害为展示攻击的 1/8(狂暴段 ×2),并写入 totalDamage 与 targetHpAfter |
| 玩家不倒 | 演出玩家血量下限为最大血量的 40%;到达下限后 BOSS 出手转为 MISS 事件(闪避演出),不出现掉血到 0 或假伤害 |
| 大招预警 | TELEGRAPH_START 携带 previewDamage,命中与落空分别用 TELEGRAPH_HIT / TELEGRAPH_CANCEL;处决段用 FINISHER 而非 LETHAL——前端把 LETHAL 一律渲染成「阵亡」 |
前端 WorldBossView 复用共享 BattleStage,需接全 telegraph / telegraph-progress / shield-active / 玩家头像与玩家 currentHp(取事件 targetHpAfter,不是 playerView.currentHp 这个满血常量),并在播放器 playing 落回 false 时收场——不要用固定秒数定时器(顿帧会拖长真实耗时)。
6. 已知差异
- 烙印全伤未接世界BOSS(2026-09-22 已修):
WorldBossRules.challengeDamage旧签名只吃worldBossDamageBonusRate(满配 +5%),破界烙印的全伤 +15% 没接进来。现改为1 + worldBossBonusRate + allDamageBonusRate(加法,满配 ×1.20),WorldBossService.challenge与overview的预计伤害同源;bossOneShotSafetyFloor改用MAX_WORLD_BOSS_TOTAL_BONUS_RATE = 0.05 + 0.15。当日已生成的 BOSS 血量不变。
7. 相关代码
- 排行榜(
RankingService:战力排行并行) - 战斗演出(
WorldBossTheaterBuilder、CombatTimelineBuilder) - 商城(五彩神石 4002 兑换体系)
- 管理端(
admin/controller/AdminWorldBossController)