外观
成长塔 · 技术实现
「玩家设定 →」
1. 代码位置
| 层 | 类 | 职责 |
|---|---|---|
| Controller | controller/GrowthTowerController(/api/growth-tower)、controller/ClimbingController(/api/climbing) | 成长塔总览/推进/结算 |
| Service | service/GrowthTowerService | 核心规则:每日 12 小时(43,200 秒)、追补 2 天、结算冷却 60s、单次最多推进 10 层、里程碑 |
| Service | service/GrowthTowerSplitService、service/GrowthTowerAutoAdvanceScheduler、service/GrowthTowerDropCalculator、service/GrowthTowerTransientEventService | 楼层拆分、自动推进调度、掉落计算、瞬时事件 |
| domain | domain/ClimbingState、domain/GrowthTowerFloorTemplate、domain/TrainingTowerState、domain/GrowthPolicyState、domain/GrowthRateSlice | 爬塔状态与楼层模板 |
2. 数据表
| 表 | 关键列 | 说明 |
|---|---|---|
player_climbing_state | player_id、tower_type、current_floor、max_cleared_floor、hang_floor、last_settle_time | 爬塔状态(V38) |
player_training_tower_state | player_id、tower_type、current_floor、hang_floor、growth_rate | 训练塔拆分状态(V43) |
player_training_growth_rate_slice | player_id、tower_type、slice_index、rate | 成长率分段(V54/V55) |
scheduled_task_cursor | task_name、cursor_value | 自动结算游标(V77) |
3. 配置与常量
- 核心常量(GrowthTowerService):
MAX_SECONDS_PER_DAY=43_200、MAX_CATCH_UP_SECONDS=2天、MANUAL_SETTLE_COOLDOWN_SECONDS=60、MAX_CONTINUOUS_ADVANCE=10、MILESTONE_FLOORS={100,200,500}、FIRST_CLEAR_SPAN=10、FIRST_CLEAR_MILESTONE_SPAN=50 - emberfall-server/src/main/java/com/emberfall/service/GrowthTowerService.java:57源码读取失败,片段不可用
- yml 键:
emberfall.growth-tower.auto-advance.*(5 秒轮询、批量 200)、emberfall.growth-tower.auto-settle.*(活跃玩家 5 分钟高频结算、离线 30 分钟兜底)
4. 数据流简述
GET /api/growth-tower 先触发 settlementService.settle 结算挂机收益,再返回当前层/最高层/悬停层。手动推进一次最多 10 层(保留逐轮挑战节奏),自动推进由 GrowthTowerAutoAdvanceScheduler 按 yml 调度批量执行(每秒 1 层,失败原地重试)。每日挂机上限 43,200 秒、离线追补最多 2 天、午夜分段。首通奖励按 10 层跨度、里程碑 100/200/500 层发放。GrowthTowerDropCalculator 计算材料与四维产出。
5. 已知差异
无
6. 相关代码
- 烬渊挂机塔(
TowerService:挂机塔另一条线) - 地图挂机(
SettlementService) - 掉落(
DropService、GrowthTowerDropCalculator) - 阶段开放(
stage/StageConfigService)