Files
DKChan fde14f1c1c 拆件批v1.3-B1(主角账领域拆分): hero_ledger.gd 整件退役→三新件按领域各归各账——hero_stats.gd(生命/特性/类型轴/生效公式与回血封顶单点/续玩钳制收口 clamp_hp_to_resume_cap/断点片段 hero_hp+relics 两键,构造注入 GainJournal 只读引用消费加算汇总)、gp_wallet.gd(gp 单写原语+片段 gp 键)、gain_journal.gd(获得记录三层+三通道 gain_bonus 单写原语+购买档数/钥石/真视+reset_adventure_accounts+片段六键,record_gain 转私有,_record_gain 词表不变);断点拼盘改三片段并集(BREAKPOINT_FIELDS 28 键序不变,_resume_ledger 三还原各取各键,日记缺键汇总直载/在档推导比对拒载逐字承现);消费方改址——adventure_runner(建件三引用+件出口 hero()→stats()/wallet()/journal()/deck(),start/restart 三件先日记后钱包再置满同序,_resume_params 钳制改 clamp_hp_to_resume_cap,载荷_base 随附钱包读数——停点件零钱包依赖)、level_runner(ctx hero→stats/wallet/journal 三键,私有三件同源成对自建,gp/hero_hp 属性改指三件,effective_ap_bonus→journal,hero()→stats()+journal() 出口,_bind_shop refs 换代)、shop_session(refs wallet+journal,BONUS_AXES 归 GainJournal)、battle_orchestrator(encounter "hero"→"journal" 键+_hero 类型 GainJournal)、curio_stop(构造参 stats+journal,兑付落账 split 指针,头注换代清 HeroLedger 表述)、呈现/探针/模拟六文件 12 处读面改址、测试六文件改址(hero_ledger_test 重写为三件测试——文件名与 manifest 行不变,新增 hs1 零引用源码断言)。验收:全量套件除 round_flow EV 锚 goblin 已知预期红外全绿;bp 对拍 292dumps×28 键 mismatch=0;冒烟 17 项 0 失败〔领域拆分批 V1〕
2026-10-27 08:10:08 +08:00

37 lines
1.1 KiB
GDScript

## GP 钱包件:冒险局内货币唯一所有者(gain/spend/clear 单写原语;LevelRunner 与 ShopSession
## 读写全指此单点)。生命与加算日记各归 HeroStats/GainJournal——主角账三件各交各的断点片段,
## 拼盘落盘归冒险应用层。Core 层零 UI;随机零消费。
class_name GpWallet
extends RefCounted
var gp: int = 0 # GP 钱包(冒险开始 = 0、收束清零;不入存档不入摘要)
func gain_gp(amount: int) -> void:
gp = maxi(0, gp + amount)
# 余额不足 false 零副作用(出账前置校验由调用方守卫时本方法不重复拒绝)
func spend_gp(amount: int) -> bool:
if amount <= 0 or gp < amount:
return false
gp = gp - amount
return true
func clear_wallet() -> void:
gp = 0
# ---- 断点自交片段(应用层拼盘口收件——本件只交自己的账)----
# 片段键:gp
func breakpoint_fragment() -> Dictionary[Variant, Variant]:
return {
"gp": gp,
}
func restore_fragment(frag: Dictionary, _params: Dictionary) -> void:
gp = int(frag.get("gp", 0))