如何批量替换游戏Mod事件脚本占位符生成3544条独立事件
问题原因排查
你现有脚本无内容输出的核心问题有4个:
- 逻辑完全偏离需求:你的需求是生成1-3544连续数字对应的事件,不需要读取额外的
provids.txt文件,若该文件为空、格式不符合你写的判断条件,就会直接跳过所有写入逻辑 - 存在未定义变量:代码里使用了从未赋值的
tag变量,运行会直接抛出异常中断,根本不会执行写入操作 - 字符串拼接错误:拼接事件内容时没有留空格,比如
5893+prov+title会生成58931title这种无效语法,P社脚本无法识别 - 拼写错误:你代码里把触发器的
won_acquire_prov拼成了won_aquire_prov,就算生成了文件事件也不会触发
正确实现代码
直接用字符串模板批量生成即可,不需要依赖外部文件:
# 定义事件模板,X的位置用{}占位符代替 event_template = '''country_event = {{ id = 5893{} title = "Aquire $PROVINCENAME$" desc = "$COUNTRY$ is surrendering a province to us." picture = "administration" trigger = {{ has_country_flag = won_acquire_prov NOT = {{ has_country_flag = prov_treaty }} any_country = {{ limit = {{ truce_with = THIS NOT = {{ {} = {{ owned_by = THIS }} }} }} }} }} option = {{ name = "Take $PROVINCENAME$" {} = {{ secede_province = THIS }} }} option = {{ name = "We don't want $PROVINCENAME$" }} option = {{ name = "End Province arbitration" set_country_flag = prov_treaty }} }} ''' # 打开输出文件 with open("0_provs_event.txt", "w", encoding="utf-8") as outfile: # 循环生成1-3544对应的事件 for x in range(1, 3545): # 替换所有占位符 event_content = event_template.format(x, x, x) # 写入文件,每个事件之间加空行分隔 outfile.write(event_content + "\n\n")
注意事项
- 模板里的大括号需要写两个
{{/}}才能正常转义输出单个大括号 - 代码用了
with语法自动管理文件关闭,不需要手动写close逻辑 - 请先检查
5893+数字的事件ID区间是否和你用的其他Mod、原版游戏的事件ID冲突,避免运行报错
内容的提问来源于stack exchange,提问作者JmanThunder
相关产品推荐
相关产品推荐

