政策与法令

policies 的多选项结构与 policy_flags,edicts 的时长、费用与修正,以及在脚本里设置它们

政策和法令的区别

政策(policy)法令(edict)
位置common/policies/common/edicts/
结构一个政策有多个 option,国家任何时候只处于其中一个一个法令只有开/关
代价一般无费用,修改后有冷却有激活费用和/或维护费
判断has_policy_flaghas_edict

政策

原版经济政策(common/policies/00_policies.txt,省略了 AI 权重):

Clausewitz 脚本
economic_policy = {
	category = economy
	potential = {
		NOT = { has_ethic = ethic_gestalt_consciousness }
	}

	option = {
		name = "economic_policy_civilian"

		modifier = {
			planet_jobs_consumer_goods_produces_mult = 0.25
			planet_jobs_alloys_produces_mult = -0.25
		}
	}

	option = {
		name = "economic_policy_balanced"

		modifier = {}
	}

	option = {
		name = "economic_policy_military"

		modifier = {
			planet_jobs_consumer_goods_produces_mult = -0.25
			planet_jobs_alloys_produces_mult = 0.25
		}

		policy_flags = {
			economic_policy_military
		}
	}
}

政策层的字段

字段说明
category界面分组,见下文政策类别
potential国家作用域;不成立时整条政策不显示
allow能否修改;原版外交姿态写了 is_at_war = no,战争中不能改

选项层的字段

按原版中的出现次数,option 里常用的有:

字段说明
name选项键,也是本地化键
icon可选的 sprite
potential选项是否显示
valid选项是否有效;原版外交姿态用它排除“内向完善”理念等情况
modifier选中时给国家的修正
policy_flags = { ... }选中时国家拥有的标记,供 has_policy_flag 检查
on_enabled / on_disabled切换到、切换离开这个选项时执行的效果
ai_weightAI 选择的权重;文件头注释说明默认 100,AI 取权重最高的选项
in_breach_of违反哪项银河议会决议

**用 policy_flags 而不是选项名做判断。**原版很多地方都是 has_policy_flag = slavery_allowed 这样写;这样其他选项(包括别的模组新增的选项)只要带上同一个标记,就能被同样识别。

修改政策后的冷却时间由 common/defines/00_defines.txt 里的 POLICY_YEARS 决定。

政策类别

common/policy_categories/00_policy_categories.txt 的注释说明,类别只用于界面分组,没有游戏效果:

Clausewitz 脚本
military = { icon = "trade_protection" }
diplomacy = { icon = "diplo_weight" }
economy = { icon = "economy" }
research = { icon = "research" }
society = { icon = "tooltip_pop" }

uncategorized = {}
  • 一条政策可以写 category = { military economy } 同时出现在多个分组;
  • 没写类别的政策归入 uncategorized;
  • 图标请放在 icon 字段里,不要写进本地化名字,因为分组按本地化名字的字母顺序排序。

政策的本地化

本地化 YML
l_simp_chinese:
 policy_mymod_research_focus: "科研重心"
 policy_mymod_research_focus_desc: "决定国家资源向哪个研究领域倾斜。"
 mymod_focus_physics: "物理优先"
 mymod_focus_physics_desc: "把更多经费投入物理学研究。"

政策本身用 policy_<政策键> 和 policy_<政策键>_desc,选项用 name 的值及其 _desc。原版中经济政策就是 policy_economic_policy 与 economic_policy_civilian。

法令

原版“加强边境防御”(common/edicts/00_edicts.txt,略去 AI 权重):

Clausewitz 脚本
fortify_the_border = {
	length = @EdictPerpetual
	icon = "GFX_edict_type_policy"

	resources = {
		category = edicts
		cost = {
			unity = @Edict1Cost
			multiplier = value:edict_size_effect
		}
		upkeep = {
			unity = @Edict1Cost
			multiplier = value:edict_size_effect
		}
	}

	modifier = {
		starbase_upgrade_speed_mult = 0.50
		country_starbase_capacity_add = 2
	}

	potential = {
		is_nomadic = no
	}
}

@EdictPerpetual = -1 定义在同一个文件开头,表示“持续到手动取消”。multiplier = value:edict_size_effect 让费用随帝国规模增长,这个脚本值在 common/script_values/00_script_values.txt 中,见变量、脚本值与脚本化本地化。

字段

据 common/edicts/99_README_EDICTS.txt 和原版用法:

字段说明
length持续天数,-1 为永久
iconsprite 名
resourcescategory = edicts,cost 为激活费、upkeep 为维护费
potential是否显示
allow能否激活
prerequisites前置科技
modifier / triggered_country_modifier生效期间的修正
effect激活时执行的效果
ai_weightAI 评分
edict_lock_in_months原版少数法令使用,激活后锁定若干月
is_wartime_edict原版少数战时法令使用
show_tech_unlock_if控制是否显示在前置科技的解锁列表

README 还提到“统一志向”(02_ambitions.txt)使用 unity_cost_mult,费用取决于下一项传统的解锁花费。

法令的本地化

法令键前面要加 edict_:原版 fortify_the_border 对应的是 edict_fortify_the_border 和 edict_fortify_the_border_desc。

在脚本里使用

写法说明(国家作用域)
set_policy = { policy = <键> option = <选项> cooldown = no }设置政策;cooldown 决定是否进入冷却
has_policy_flag = <标记>触发器
add_edict = <键>激活法令
has_edict = <键>触发器

参数以 effects.log / triggers.log 为准,见调试。