外观
地图挂机战斗 · 技术实现
「玩家设定 →」
1. 代码位置
| 层 | 类 | 职责 |
|---|---|---|
| Controller | controller/MapController(/api/map)、controller/CombatController(/api/combat) | 地图列表/进入/挑战、战斗请求 |
| Service | service/MapService | 地图构建(十境主线图 + 福利副本 + 材料/坐骑/翅膀/灵兽/淬炼/肉身图)、解锁校验(境界 + 推荐战力) |
| Service | service/CombatService | 战斗结算引擎(减法伤害模型、攻速/暴击/闪避) |
| Service | service/SettlementService、service/MonsterService、service/DropService | 挂机结算、怪物生成、掉落 |
| Service | service/LongBattleService、service/LongBattleEngine | 长时间战斗会话(V74,墙钟推进) |
| domain | domain/GameMap | 地图 record:id/name/realm/recommendedPower/description/mainDrops |
| domain | domain/MonsterTier | 怪物五档:杂兵 I~III / 守境灵将 / 首领 V(防御比 0.15~0.95、击杀 3~90 秒) |
| domain | domain/MapState、domain/ActiveCombat、domain/CombatRecord、domain/CombatResult、domain/LongBattleSession | 地图/战斗状态模型 |
2. 数据表
| 表 | 关键列 | 说明 |
|---|---|---|
map_state | player_id、map_id、active、last_settle_at | 玩家地图挂机状态(V1) |
map_combat_daily | player_id、combat_date、kill_count、idle_seconds | 每日战斗汇总(V7) |
fight_log | player_id、message、create_time | 战斗日志(V1) |
training_state | player_id、target、last_tick_at | 训练目标(V1,V4 教练怪承接) |
player_long_battle_session、player_long_battle_active | player_id、battle_type、started_at、deadline | 长时间战斗会话(V74) |
monster_tier_config、combat_anchor_config | tier/realm、数值列 | 怪物档位与战斗锚点(V47) |
3. 配置与常量
- 怪物五档:
version_key tier target_kill_seconds defense_ratio target_survival_seconds variance_ratio 300D_V1 EASY 4 0.1 300 0.1 300D_V1 NORMAL 7 0.18 180 0.1 300D_V1 HARD 12 0.28 120 0.1 300D_V1 ELITE 25 0.4 90 0.1 300D_V1 BOSS 60 0.55 75 0.05 来源:sql/monster_tier_config - 战斗锚点(攻击 ≥ 2×门槛、血 ≥ 4×门槛):
version_key realm attack_value phys_defense_value magic_defense_value health_value crit_rate dodge_rate fixed_damage true_damage 300D_V1 MORTAL 6577745 3251963 3251963 13828177 0.0604 0.0358 657775 657775 300D_V1 ESPER 19097343 9355711 9355711 40083291 0.0668 0.0389 1909734 1909734 300D_V1 QI_REFINING 40669218 19774787 19774787 85243197 0.0731 0.0419 4066922 4066922 300D_V1 FOUNDATION 77163575 37286064 37286064 161542710 0.0795 0.045 7716357 7716357 300D_V1 CORE_FORMATION 135757435 65255385 65255385 283910114 0.0858 0.0481 13575744 13575744 300D_V1 NASCENT_SOUL 226039553 108168448 108168448 472272760 0.0922 0.0512 22603955 22603955 300D_V1 SPIRIT_TRANSFORMATION 360425727 171820833 171820833 752411484 0.0985 0.0543 36042573 36042573 300D_V1 BODY_INTEGRATION 554588420 263515188 263515188 1156843645 0.1048 0.0573 55458842 55458842 300D_V1 MAHAYANA 817321296 387252972 387252972 1703682349 0.1112 0.0604 81732130 81732130 300D_V1 TRIBULATION 1152009216 544485888 544485888 2399756544 0.1176 0.0635 115200922 115200922 来源:sql/combat_anchor_config - 怪物档位枚举:emberfall-server/src/main/java/com/emberfall/domain/MonsterTier.java:11源码读取失败,片段不可用
- 地图模型:emberfall-server/src/main/java/com/emberfall/domain/GameMap.java:8源码读取失败,片段不可用
- yml 键:
emberfall.long-battle.time-scale(墙钟倍率,生产必须为 1,见LongBattleProperties)、emberfall.player.attribute-cache-ttl-seconds
4. 数据流简述
GET /api/map 返回地图列表,MapService 按玩家境界与推荐战力(CombatAnchor.recommendedPower)计算解锁。进入地图后 MapState 记录挂机起点,SettlementService 周期性结算:按 MonsterTier 权重生成怪物、CombatService 计算击杀时间与掉落(DropService + player_equipment_pity 保底),产出写入 inventory_item,汇总写 map_combat_daily 与 fight_log。挑战类地图(炼体/深渊)走 LongBattleService 长线会话(player_long_battle_session)。
5. 已知差异
无(地图挂机为现行主战斗线;注意「训练目标」部分见 training 页 D3)
6. 相关代码
- 训练与教练(
TrainingService:教练怪目标) - 烬渊挂机塔(
TowerService:挂机收益并行线) - 掉落系统(
DropService、player_equipment_pity) - 长时间战斗(
LongBattleService:炼体/深渊共用的墙钟引擎)