## 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))