跳到主要内容

PRD-065 无尽爬塔

文档编号:PRD-065
版本:v1.0
状态:已通过
适用端:服务端 / 客户端
脚本挂载:lua/arena/endless_tower.lua

1. 背景与目标​

无尽爬塔提供单人数值验证与赛季排名。层数生成、词条选择、难度曲线、奖励适合用 Lua 编排。

目标

  • 无限层数,每层 1–3 波怪物,层数越高属性越强。
  • 每 5 层三选一增益,构建当次爬塔 Build。
  • 每周重置排名,保留历史最高层。

2. 核心规则​

2.1 层数与难度​

  • 第 N 层怪物属性 = 基础 × 1.15^N,上限按配置封顶。
  • 每 10 层 BOSS,带阶段技能与狂暴计时。
  • 每层限时 3 分钟,超时失败。
  • 失败可重试当前层,每日 5 次。

2.2 增益选择​

  • 每 5 层通关后从 3 个增益中选 1 个。
  • 增益分攻击/防御/生存/特殊,可叠加但同类有上限。
  • 增益只在本轮爬塔生效,退出/重置清空。
  • 可消耗道具 reroll 一次。

2.3 排名与扫荡​

  • 每周一 0 点重置层数,按最高层排名。
  • 已通关层可扫荡,扫荡消耗体力,奖励按层数。
  • 排名奖励按周发放,前 100 名额外称号。

3. 服务端设计​

3.1 Lua 脚本设计​

-- lua/arena/endless_tower.lua
Tower = {
base_hp = 10000,
growth = 1.15,
floor_time = 180,
retry_daily = 5,
buff_every = 5,
}

function OnEnterFloor(ctx, role, floor)
if floor > ctx:GetMaxFloor(role) + 1 then return ctx:Fail(role, "层数未解锁") end
local monster = ctx:SpawnTowerMonster(floor, Tower.base_hp * Tower.growth ^ floor)
ctx:SetFloorTimer(role, Tower.floor_time)
ctx:TrackEvent(role, "monster_dead", OnFloorClear)
end

function OnFloorClear(ctx, role, floor)
if floor % Tower.buff_every == 0 then
ctx:OfferBuffs(role, ctx:RollBuffs(3))
else
ctx:NextFloor(role)
end
end

function OnBuffPick(ctx, role, buff_id)
ctx:AddTowerBuff(role, buff_id)
ctx:NextFloor(role)
end
  • 层数、增益、怪物属性由脚本生成,C++ 负责场景/战斗。
  • 每轮爬塔状态存 ctx.state,退出清空。
  • 最高层/排名/扫荡记录持久化。

3.2 协议​

方向协议说明
C→SCS_TowerEnter进入当前层
C→SCS_TowerBuff选择增益
C→SCS_TowerSweep扫荡
S→CSC_TowerInfo层数/增益/排名
S→CSC_TowerResult通关/失败/奖励

3.3 竞技约束​

  • 爬塔属性使用角色真实属性,不归一化。
  • 禁止使用复活道具/外力,失败即结束。
  • 排行榜校验战斗日志,异常层数回滚。

4. 客户端设计​

  • 爬塔界面:当前层、最高层、排名、奖励预览。
  • 层内 HUD:倒计时、波次、增益列表。
  • 三选一增益卡片、reroll 按钮。
  • 失败重试/扫荡/排行榜。
  • 赛季重置提示。

5. 配置与 Lua 接口​

配置说明
growth层数成长
floor_time限时
buff_pool增益池
boss_everyBOSS 层
sweep_cost扫荡消耗

Lua 接口:SpawnTowerMonster、SetFloorTimer、RollBuffs、OfferBuffs、AddTowerBuff、NextFloor。

6. 边界与异常​

场景处理
通关后掉线记录层数,重连继续
增益重复按上限叠加/替换
超时判失败,保留最高层
扫荡已通关层正常;未通关拒绝
脚本异常结束本轮,保留已得奖励

7. 验收标准​

  • 层数/难度/限时/BOSS/增益/排名正确。
  • 失败重试/扫荡/周重置正确。
  • 异常层数可校验回滚。
  • 客户端增益/层数显示一致。
  • 脚本可调整成长/增益池。