岗位与人口阶层

pop_jobs 的岗位定义、swappable_data、准入条件与产出,以及 pop_categories 阶层

两个文件夹

位置内容
common/pop_jobs/岗位:谁能做、产出什么、消耗什么、给星球什么修正
common/pop_categories/人口阶层(统治者、专家、劳工、各类无人机、平民……):等级、换岗规则、住房与宜居度消耗
common/pop_jobs/000_pretriggers.txt原版关于“预触发器”的说明

每个岗位都属于一个阶层,用 category = <阶层键> 指定。

一个真实的岗位

原版物理学家(common/pop_jobs/02_specialist_jobs.txt)删减后的骨架:

Clausewitz 脚本
physicist = {
	category = specialist
	swappable_data = {
		default = {
			condition_string = SPECIALIST_JOB_TRIGGER
			building_icon = building_research_lab_1
		}
		# 下面还有若干 swap_type
	}

	tags = { research }

	possible_pre_triggers = {
		has_owner = yes
		is_being_purged = no
		is_being_assimilated = no
		is_sapient = yes
	}

	possible_precalc = can_fill_specialist_job
	possible = {
		complex_specialist_job_check_trigger = yes
	}

	resources = {
		category = planet_physicists
		produces = {
			physics_research = 3
		}
		upkeep = {
			consumer_goods = 1.5
		}
	}

	weight = {
		weight = @specialist_job_weight
		modifier = {
			factor = 0.2
			has_citizenship_rights = no
			NOT = { has_trait = trait_mechanical }
		}
	}
}

字段说明

字段说明
category所属阶层,必须是 pop_categories 里的键
tags = { ... }标签,供修正和触发器按类别引用岗位
possible_pre_triggers快速预检,见下文
possible_precalc引用一个预先计算好的准入条件;原版用 can_fill_specialist_job、can_fill_worker_job、can_fill_ruler_job、can_fill_drone_job、can_fill_precursor_job
possible完整的准入触发器
weight人口在多个空岗位之间如何选择,modifier 里的 factor 相乘
resources产出与消耗;produces、upkeep 都可以带 trigger 只在条件成立时计入
overlord_resources宗主从附庸处抽取的那部分产出
planet_modifier / triggered_planet_modifier / country_modifier岗位被填满时施加的修正(例如宜居度)
is_capped_by_modifier岗位数量是否受修正上限约束
first_come_first_served原版只在少数特殊岗位(如 purge)上设为 yes
can_set_priority能否调整这个岗位的优先级;原版在罪犯等特殊岗位上写 no

预触发器

000_pretriggers.txt 说明,possible_pre_triggers 是先于完整触发器执行的快速判断,用来尽早排除不可能就业的人口。只能写这几项 yes/no:

has_owner、is_enslaved、is_being_purged、is_being_assimilated、has_planet、is_sapient

没写的项不检查。能放进预触发器的条件就别写进 possible,人口多时差别很明显。

一个岗位,多种名字:swappable_data

很多岗位在不同条件下显示成不同的名字和图标,但本质还是同一个岗位(产出、修正共用)。swappable_data 的 default 是默认外观,每个 swap_type 是一种替换:

Clausewitz 脚本
swap_type = {
	trigger = {
		physicist_is_astrometeorologist_trigger = yes
	}
	name = astrometeorologist
	desc = astrometeorologist
	icon = astrometeorologist
	building_icon = building_astrometeorology_observation_center
	condition_string = SPECIALIST_JOB_TRIGGER
	weight = 5
}

多个替换同时成立时取 weight 大的。只想换产出时不必新增岗位,像原版那样在 resources 里写带 trigger 的 produces 即可。

岗位从哪来

岗位只是“工种定义”,具体有几个空位由行星修正 job_<岗位键>_add 决定,这个修正是游戏为每个岗位自动生成的(modifiers.log 里能查到 job_physicist_add,同时还有 job_physicist_per_pop 等变体)。

建筑、区划、区域、特质、事件修正都可以加岗位:

Clausewitz 脚本
planet_modifier = {
	job_mymod_xenologist_add = 100
}

原版把常用的组合写成 common/inline_scripts/jobs/*_add.txt,例如 jobs/researchers_add 会按国家类型(普通帝国、蜂巢、机械)加上对应的研究岗位。新岗位如果要给各种国家用,建议也照此写一个 inline_script。详见建筑、区划与区域。

人口阶层

原版 common/pop_categories/00_social_classes.txt 里的专家阶层开头:

Clausewitz 脚本
specialist = {
	rank = 3
	change_job_threshold = 1.07 # A pop that is 2.3% better than me will displace me (1.023^3 = 1.07)
	job_reshuffle_interval = 7

	weight = {
		weight = 2
	}

	automation_resources = {
		category = planet_automated_jobs
		upkeep = {
			energy = @automation_upkeep_specialist
		}
	}

	pop_group_modifier = {
		pop_housing_usage_base = 1
		pop_amenities_usage_base = 1
	}
	# ……
}
字段说明
rank阶层等级,原版统治者 4、专家 3、劳工 2
change_job_threshold更合适的人口要好到什么程度才会挤走当前在岗者(原版注释给出了换算)
job_reshuffle_interval重新分配岗位的间隔
automation_resources岗位被自动化时的维护费
pop_group_modifier该阶层人口自带的修正,如住房、宜居度消耗
allow_resettlement能否迁移,人口作用域

文件开头的注释还列了两个开关:is_unemployment_job = yes 把该阶层当作失业,is_civilian_job = yes 当作平民。

新增阶层的情况很少,一般只新增岗位,挂到已有阶层上。

图标与本地化

  • 图标:gfx/interface/icons/jobs/job_<岗位键>.dds,例如原版的 job_physicist.dds。swap_type 的 icon = astrometeorologist 同理对应 job_astrometeorologist.dds。
  • 本地化:job_<岗位键>、job_<岗位键>_plural、job_<岗位键>_desc;阶层用 pop_cat_<阶层键>。
本地化 YML
l_simp_chinese:
 job_mymod_xenologist: "异星学家"
 job_mymod_xenologist_plural: "异星学家"
 job_mymod_xenologist_desc: "研究外星生命形态的学者。"

检查清单

  1. category 指向已存在的阶层。
  2. 有地方通过 job_<键>_add 提供空位,否则岗位永远不会出现。
  3. 产出的资源类别 resources = { category = … } 使用 common/economic_categories/ 中已有的类别,新类别会影响修正生成,见原版 99_README_ECONOMIC_CATEGORIES.txt。
  4. 补齐图标和三条本地化。