Files
echo-nexus/agent-ctx/7-full-stack-developer.md
T

6.4 KiB
Executable File
Raw Blame History

Task 7: 角色属性系统(探索力/智慧/勇气/灵感)

Agent: full-stack-developer

完成状态: 全部完成

创建的文件

  1. /home/z/my-project/src/lib/game/attributes.ts — 属性逻辑层(~330 行)
  2. /home/z/my-project/src/components/game/AttributesPanel.tsx — 属性 UI 面板(~330 行)

修改的文件

  1. /home/z/my-project/src/lib/game/types.ts — GameState 新增 attributes/attributeProgress/pendingAttrPoints
  2. /home/z/my-project/src/lib/game/config.ts — INITIAL_STATE 补全新字段默认值
  3. /home/z/my-project/src/lib/game/engine.ts — recomputeStats 聚合属性加成;performPrestige 发放属性点
  4. /home/z/my-project/src/store/gameStore.ts — 新增 allocateAttribute/gainAttributeExp actionpulse/clickNode/autoDecodeTick/resolveCurrentNode/grantCruiseReward/tickTide/init 接入属性逻辑;旧存档兼容
  5. /home/z/my-project/src/lib/game/achievements.ts — 新增 2 项属性成就
  6. /home/z/my-project/src/app/page.tsx — 新增第 8 个「角色」标签页 + grid-cols-7→8 + 红点提示 + 统计面板新增属性行 + 版本号 v0.6→v0.7

关键实现细节

attributes.ts 逻辑层

  • 类型系统AttributeKey4 个键)/ CharacterAttributes0-100 数值)/ AttributeProgressEntryexp + level
  • 加成公式
    • 0-50 线性区:每点 +0.5% 加成(0..50 → 0..25%
    • 50-100 递减区:每点 +0.2% 加成(50..100 → 25..35%
    • 超过 100 仍按 100 计算加成(软上限)
  • getAttributeBonus(attr) 单属性加成百分比
  • getAllBonuses(attrs) 返回 12 个修饰器:探险力倍率/巡航速度/解码步数/洞见倍率/自动解码周期/探险生命/BOSS 胜率/巡航护盾/接触率/星潮触发/脉冲连击/产能加成
  • levelUpCheck(progress) 自动跨多级升级,安全上限 200 次循环
  • expRequiredForLevel(level) = 10 × level(最低 10
  • computePrestigeAttrPoints(ascensions) = ascensions × 2 + 1(飞升前次数计算)
  • migrateAttributes(state) 旧存档兼容:补全缺失字段、夹紧越界值、同步 level 与 attributes

engine.ts 改造

  • recomputeStats 末尾追加 getAllBonuses(state.attributes ?? {}) 聚合:
    • crystalsPerSec *= am.crystalsPerSecMult
    • insightMult += am.insightMultAdd
    • contactRateMult *= am.contactRateMult
    • decodeStepsBonus += am.decodeStepsBonus
  • performPrestige
    • 保留 attributes 数值(跨周目永久)
    • 清空 attributeProgress(新周目重新累积经验)
    • pendingAttrPoints += computePrestigeAttrPoints(ascensions) = ascensions × 2 + 1
  • createInitialState:每次返回全新 attributes/attributeProgress 对象,避免引用共享

gameStore.ts 集成(核心)

  • pulse:连击 ≥3 给灵感经验(expGain = 1 + floor(combo/2));脉冲威力乘以灵感连击加成
  • clickNode 完成:给智慧经验(expGain = puzzle.tier × 2
  • autoDecodeTick:自动解码也给智慧经验 +1;自动解码周期受智慧 am.autoDecodeIntervalMult 影响
  • startExpedition:探险力乘 am.expeditionPowerMult;探险生命加 am.expeditionHpBonus
  • resolveCurrentNode
    • BOSS 节点用包装 RNG 提升 +am.bossWinRateBonus 胜率(单次 rng 调用,B% 概率返回 0,其余返回 r-B 保持均匀分布)
    • 战斗胜利给勇气+探索力经验(中途战斗 +2/+1,BOSS 击破 +8/+6,探险胜利 +4
  • grantCruiseReward:按总奖励量缩放给探索力+勇气经验(expBase = max(2, totalReward/30)
  • tickTide:灵感 am.tideTriggerBonus 缩短星潮间隙(gap × (1 - bonus)),上限 30%
  • doPrestigeperformPrestige 后用 next.attributes 重算 stats
  • allocateAttribute(attr, points=1):分配属性点,同步 attributeProgress[attr].level
  • gainAttributeExp(attr, amount):通用经验获取(自动升级)
  • init():调用 migrateAttributes 补全旧存档字段,并传 attributes 到 syncStats
  • 所有 syncStats 调用点(10+ 处)都补充 attributes: ... 参数

AttributesPanel.tsx UI

  • 四维属性卡片网格(小屏 2×2,大屏 1×4):
    • 图标(Compass/Brain/Swords/Sparkles+ 中文名 + 英文名 + Lv.{value} badge
    • 数值 /100 + 加成百分比
    • 经验进度条(gradient + glow+ "递减区"标记
    • 加成影响列表(3 条)
    • 「+分配」按钮(pendingAttrPoints > 0 时可点,hover scale 105
  • 顶部:标题 + 待分配点数 badgependingAttrPoints > 0 时 echo-pending-pulse 动画)
  • 底部:总等级 + 总加成概览 + 12 个修饰器明细行
  • 配色:4 色全息(emerald/fuchsia/amber/rose),辉光边框 + 顶角光晕装饰
  • 完全响应式(2 列 → 4 列),overflow-y-auto + 自定义 scrollbar

page.tsx 集成

  • 新增 User 图标导入
  • 新增 pendingAttrPoints store selector
  • TabsList: grid-cols-7 → grid-cols-8
  • 新增第 8 个 TabsTrigger「角色」(value="attributes"),主题色用 emerald→fuchsia→rose 渐变
  • pendingAttrPoints > 0 时显示 rose 红点
  • 新增 TabsContent 渲染 AttributesPanel
  • StatsPanel 新增 5 行属性行(探索力/智慧/勇气/灵感/待分配属性点)
  • 版本号 v0.6 → v0.7

achievements.ts 新增

  • ach_attr_total_50(四维觉醒):四维属性总和 ≥ 50 → 产能+6%/洞见+6%
  • ach_attr_max_100(维度精通):任一属性 ≥ 100 → 产能+12%/洞见+10%

QA 验证结果

  • bun run lint 零错误
  • dev 服务器 HTTP 200
  • 编译 < 250ms177ms 实测)
  • 7 标签页 + 巡航按钮完好保留,新增第 8 个「角色」标签页
  • data-tut 锚点(tab-expedition/tab-tech/prestige-btn/crystal-orb/decode-panel)保留
  • 色彩规范:严格 emerald/fuchsia/amber/rose 四色全息,零蓝色/靛色
  • 旧存档兼容:migrateAttributes 补全 attributes/attributeProgress/pendingAttrPoints 字段
  • 飞升后 pendingAttrPoints = ascensions × 2 + 1(飞升前次数)
  • pulse/clickNode/resolveCurrentNode/grantCruiseReward/autoDecodeTick 均接入属性经验获取

注意事项

  • BOSS 胜率 RNG 包装:仅在 boss 节点生效,单次 rng 调用保持均匀分布;+am.bossWinRateBonus 上限 +30%
  • 灵感星潮触发:通过缩短 gap 间接提升触发频率(上限 30%)
  • 属性加成与现有所有系统(技术树/蓝图/成就/星图/星潮)叠加,不冲突
  • migrateAttributes 同步 attributeProgress[attr].level 与 attributes[attr] 数值,避免漂移