Kingdom Rush

2~4代一键满经验值

用python运行如下代码,注意需先安装lxml

import lxml.etree
import re
from pathlib import Path
from os import environ as ENVIRON
from itertools import chain
 
 
def new_document(text, encoding="utf-8", parser=None):
    """text: 可以是str或bytes。如果text是str类型,则encoding会被忽略"""
    if isinstance(text, bytes):
        text = text.decode(encoding, "replace")
    text = text.replace("\r", "").encode("utf-8")
    return lxml.etree.XML(text, parser)
 
 
def kr23():
    root_dir2 = Path(ENVIRON["APPDATA"], "kingdom_rush_frontiers")
    root_dir2.mkdir(parents=True, exist_ok=True)
    root_dir3 = Path(ENVIRON["APPDATA"], "kingdom_rush_origins")
    root_dir3.mkdir(parents=True, exist_ok=True)
    save_file_pattern = "slot_*.lua"
    for path in chain(
        root_dir2.glob(save_file_pattern), root_dir3.glob(save_file_pattern)
    ):
        text = path.read_text("utf-8")
        text = re.sub(r"\[\"xp\"\] = \d+", '["xp"] = 145000', text)
        path.write_text(text, "utf-8")
 
 
def kr4():
    root_dir = Path(ENVIRON["LOCALAPPDATA"], "Kingdom Rush Vengeance")
    root_dir.mkdir(parents=True, exist_ok=True)
    for path in root_dir.glob("slot_*.plist"):
        root = new_document(path.read_text("utf-8"))
        all_exps_nodes = root.xpath(
            '//key[text() = "heroes"]/following-sibling::*[1]/dict/integer[1]'
        )
        for node in all_exps_nodes:
            node.text = "400000"
        path.write_bytes(lxml.etree.tostring(root, encoding="utf-8", method="xml"))
 
 
kr23()
kr4()