实战用法
for_each_loop 最适合需要对同一个数组里的每个元素逐一执行操作的场景,例如遍历一个存储了多个 State ID 的数组并依次执行建设、给每个动态存储的国家 tag 添加修正器等。相比手动展开逻辑,它能让批量处理数组数据的代码保持简洁且易于维护。
# 示例:遍历一个存储省份 VP 的数组,逐一设置胜利点数
set_temp_variable = { my_array^0 = 3 }
set_temp_variable = { my_array^1 = 7 }
set_temp_variable = { my_array^2 = 15 }
for_each_loop = {
array = my_array
value = v # 当前元素值存入 v
index = i # 当前下标存入 i
# 在此对 v 执行操作,例如记录日志或做条件判断后 break
if = {
limit = { check_variable = { v = 7 } }
set_temp_variable = { break = 1 } # 找到目标值后提前退出
}
}
配合关系
[add_to_temp_array](/wiki/effect/add_to_temp_array) / [add_to_array](/wiki/effect/add_to_array):在循环执行前先填充数组,for_each_loop 才有元素可以遍历,两者是典型的"准备—消费"搭档。
[if](/wiki/effect/if):在循环体内用 if 对当前元素 v 做条件判断,从而实现"只对满足条件的元素执行效果"的筛选逻辑。
[find_highest_in_array](/wiki/effect/find_highest_in_array) / [find_lowest_in_array](/wiki/effect/find_lowest_in_array):先用这两个命令定位极值,再在 for_each_loop 内结合 break 提前退出,避免不必要的全量遍历。
[set_temp_variable](/wiki/effect/set_temp_variable):循环体内常需要用它把中间计算结果或累加值写回临时变量,供后续逻辑使用。
常见坑
- 忘记
break 变量需要手动置零:break 默认名是 break,但如果上文某处已把它设为非零值,进入循环时会立刻跳出而不执行任何效果。养成习惯在循环前用 set_temp_variable = { break = 0 } 显式重置,或改用自定义名称避免命名冲突。
- 把
for_each_loop 当作 scope 切换器:循环体内的 scope 仍是进入循环时的 scope,v 和 i 只是普通临时变量(数值),不能直接把它们当作国家/省份 scope 来调用需要 scope 的命令;若要对存储的 tag 或 state ID 执行 scope 级操作,需要配合 random_scope_in_array 或 for_each_scope_loop 等专用命令。