## MetaProgress — 全局元进展(Autoload: MetaProgress) ## 以太碎片 + 已解锁法术,持久化 user://meta.json(死亡不重置)。 extends Node const PATH: String = "user://meta.json" var aether: int = 0 var unlocked: Array = [] # 已解锁法术 id (String) func _ready() -> void: load_meta() func add_aether(n: int) -> void: if n <= 0: return aether += n save_meta() func is_unlocked(id: String) -> bool: return id in unlocked ## 已解锁 或 碎片不足 → false(不扣费);否则扣费+记录+存档 → true func unlock(id: String, cost: int) -> bool: if is_unlocked(id) or aether < cost: return false aether -= cost unlocked.append(id) save_meta() return true func clear() -> void: aether = 0 unlocked = [] if FileAccess.file_exists(PATH): DirAccess.remove_absolute(ProjectSettings.globalize_path(PATH)) func save_meta() -> void: var f := FileAccess.open(PATH, FileAccess.WRITE) if f: f.store_string(JSON.stringify({"aether": aether, "unlocked": unlocked})) f.close() func load_meta() -> void: aether = 0 unlocked = [] if not FileAccess.file_exists(PATH): return var parsed = JSON.parse_string(FileAccess.get_file_as_string(PATH)) if not (parsed is Dictionary): return aether = int(parsed.get("aether", 0)) var u = parsed.get("unlocked", []) if u is Array: for id in u: unlocked.append(String(id))