模组MOD即英文单词modification的缩写)是对游戏内容修改后的产物。既有微调的小型模组也有重置类的大型模组。

安装

模组的下载和安装都可以在用户注册后从Paradox官方论坛或是其它有关群星社区(如贴吧)下载,或在创意工坊订阅后从Steam上自动下载。

模组的安装文件夹是:

  • Windows: ~\Documents\Paradox Interactive\Stellaris\mod\
  • GNU/Linux: ~/.local/share/Paradox Interactive/Stellaris/mod/
  • Mac: ~/Documents/Paradox Interactive/Stellaris/mod/

千万不要在Steam目录下安装模组(例如:C:\Program Files (x86)\Steam\SteamApps\common\Stellaris\mod),因为这样模组不会被正确加载。

在模组的描述中会说明模组对应的游戏版本。如果需要的话,您可以通过使用Steam Beta选项卡返回到旧的版本。

手动安装模组的步骤通常如下(模组自带安装方式时,请使用其自带的安装方式):

  1. 解压已下载的存档,以便mod文件夹包含该文件。mod文档和目录。
  2. 启动游戏并在模组选项中选中你安装的模组。(请注意:这个模组在启动器中可能有一个与压缩包不同的名字)
  3. 如果你是更新模组版本,请务必删除原来旧版本的模组的全部文件(即文件夹或压缩包和.mod文件)并清除gfx缓存(即~\Documents\Paradox Interactive\Stellaris\<mod_name>\gfx)再执行第一步,否则有可能产生问题。

MOD修改

首先提示:任何涉及common(通用)、events(事件)、map(地图)、localisation_synced(随机名,蠢驴-1000)目录的MOD的修改,包括重写事件,新加舰船,都会造成校验码的不统一,无法获得成就。

使用皮肤MOD(gfx目录)、语言MOD(localisation目录,不包括随机名称)可以获得成就。

校验文件为checksum_manifest.txt,位于游戏主目录内(同样也不可修改)。

创建MOD

群星启动器可以创建MOD、加载工坊MOD

工坊MOD需要在创意工坊订阅,订阅后,在 文档\Paradox Interactive\Stellaris\mod目录下会增加一个mod 扩展名的文件,为启动器加载MOD用,MOD本体位于 Steam文件夹\SteamApps\workshop\content\281990目录下,子目录得目录名即为工坊订阅的MOD的id

自己创建的MOD的加载文件同样是位于 文档\Paradox Interactive\Stellaris\mod目录下的一个 mod 扩展名的文件,其他信息需要自己填写

加载MOD后,MOD文件的内容会取代原来的内容,因此MOD里面的每个文件“相对位置”和原来的文件相同,因此具体制作过程仅需参考群星本身自带的内容即可。当然,想要做出优秀的MOD,还需要很多方面的努力,包括趣味性、平衡性、图像、模型等多方面。

加载文件(扩展名为mod的文件)内容如下:

name="Nier:Automata"			#MOD名称
path="mod/nierrobots"	#Mod文件位置
#archive="nier.zip"	#资源文件位置(事实上我只在zip上见到这个,不过理论上和Path是同一个标记(
tags={							#MOD类型标签(可以添加多个)(可以缺省
	"Graphics"
}
picture="thumb.jpg"				#在工坊中的预览图片,自己写的MOD再上传到工坊前可以没有这项
remote_file_id="XXXXX"		#工坊中的id,自己写的MOD再上传到工坊前可以没有这项
supported_version="1.7.*"		#MOD支持的游戏版本,星号为整个小版本都通用

目录结构

MOD的zip压缩包文件内的目录结构应与游戏本身目录结构相同(文件名不要求相同)。

注:

  • 带有guardians的为利维坦扩展包的相关文件,带有horizonsignal的为地平线信号相关的文件,带有utopia的为乌托邦相关的文件,带有syntheticdawn的为机械黎明相关的文件
  • utilities为通用槽位/通用组件、weapons为武器
  • 红色的为制作MOD常用的目录

common

common:游戏内绝大多数涉及到数据资料的部分都位于此目录下,包括以下子目录及文件:

  • agendas:议程,包含agendas.txt文件,规定了元首的议程
  • ambient_objects:环境物体,包含ambient_objects.txtambient_objects_guardians.txt文件,定义了环境物体(废弃的巨型建筑的碎片、异常事件等的废弃船、被击毁的船遗留的可调查的残骸等)
  • anomalies:异常,包含00_anomalies.txt00_anomalies_2.txt00_anomalies_3.txt00_anomalies_4.txt等文件,各种异常的事件关联、分类等
  • armies:陆军,包含00_armies.txt文件,定义不同类型的陆军军种,以及他们的生命值、士气等详细信息
  • army_attachments:陆军附件,包含00_army_attachments.txt文件,定义了陆军的各种附件,以及他们对陆军的修正、科技需求等详细信息
  • ascension_perks:飞升,包含00_ascension_perks.txt文件,定义了各种飞升,以及解锁他们所需的条件、解锁后的效果等详细信息
  • attitudes:态度,包含attitudes.txt文件,规定了AI的关系类型及行为
  • buildable_pops:可建造人口,包含00_robot_pops.txt文件,定义了合成人、机械帝国的机械人口等可建造人口及基本属性
  • building_tags:建筑标签,包含00_tags.txt文件,定义了建筑类型标签(拥有相同标签的建筑可以作为一个组,可以使用同组的通用修正)
  • buildings:建筑,包含00_buildings.txt00_event_buildings.txt00_guardian_buildings.txt00_habitat_buildings.txt00_horizonsignal_buildings.txt00_syntheticdawn_buildings.txt文件,定义了建筑及其前置条件、效果、建造费、维护费等详细信息
  • button_effects:按钮特效,原版只包含一个示例文件example.txt
  • colors:颜色,包含00_colors.txt文件,定义了国家、堕落帝国、派系、海盗、物种的一些可用颜色
  • component_flags:舰船组件标识,包含component_flags.txt文件,定义了几个标识(flags),用于AI在不同情况下选择组件(默认有进攻和防守两种)
  • component_sets:舰船组件分组,包含00_guardian_utilities.txt00_required_sets.txt00_strike_craft.txt等文件,定义同一分组下的组件的键值和图标
  • component_tags:舰船组件标签,包含00_tags.txt文件,定义舰船组件的标签,便于按照武器类型、槽位、角色等对组件进行分类
  • component_templates :舰船组件,包含00_enclave_utilities.txt00_guardian_utilities.txt等文件,定义了部分组件的基本属性;00_strike_craft.txt文件定义了舰载机所有属性,weapon_components.csv文件定义了除舰载机之外的武器的详细数据(最大最小伤害、组件价格、能源消耗等),weapon_components.ods文件为weapon_components.csv的表格版本,可以用excel打开,便于修改(但游戏会读取weapon_components.csv而不是weapon_components.ods);该目录还包含一个说明文件README_weapon_component_stat_docs.txt,用于向MOD作者介绍
  • country_customization:国家定制项,包含00_country_customization.txt文件,用于为帝国提供一些定制项(默认防御陆军、默认的卫戍部队、殖民地基础庇护所等)
  • country_types:国家类型,包含00_country_types.txt01_leviathans_country_types.txt文件,定义了国家类型(默认、通用事件、原始文明、堕落帝国、觉醒帝国等)
  • defines:定义,包含00_defines.txt文件,定义了一些基本信息(招募领导人所需的基础影响力、击杀舰队可获取的基础战争分数、行星基础防御值等"杂项")
  • deposits:资源站点,包含00_deposits.txt00_guardian_deposits.txt文件,定义了不同资源点的类型(轨道采集站类型)、比重(用于计算游戏开局生成概率)、概率修正(根据星球类型等改变比重,factor = 0则不会在这种星球上生成)、资源等
  • diplo_phrases:外交语句,包含00_diplo_action_phrases.txt00_diplo_phrases.txt文件,用于设定不同性格国家的外交时的问候信息
  • diplomatic_actions:外交行为,包含00_actions.txt文件,用于设定宣战、贸易协定、共同防御等各种外交行为
  • edicts:法令,包含00_edicts.txt(法令)和01_planetary_edicts.txt(行星临时法令)文件,用于设定法令和行星临时法令
  • ethics:思潮,包含00_ethics.txt文件,设定不同思潮的具体性质
  • event_chains:事件链,包含00_event_chains.txt00_event_chains_horizonsignal.txt00_fallen_empire_chains.txt等文件,用于设定事件链的图标、头图、计数等简要信息
  • fallen_empires:失落帝国,包含00_fallen_empire.txt文件,用于设定失落帝国城市外观、初始化、种族、国家初始设定等简要信息
  • game_rules:游戏规则,包含00_rules.txt文件,用于设定游戏基本规则
  • global_ship_designs:全局舰船设计,包含ai_ship_designs.txtevent_ship_designs_general.txtfallen_empire_ship_designs.txtutopia_designs.txt等文件,用于游戏的特殊事件、中立(水晶、鲸鱼等)、特殊国家(失落帝国、天灾、守护者、商人等)等的舰船设计
  • governments:政府,包含authorities目录(包含00_authorities.txt文件)、civics目录(包含00_civics.txt文件),以及00_governments.txt和readme_requirements.txt文件。其中authorities用于设定权力制度,civics用于设定国家理念,00_governments.txt用于设定不同政体,readme_requirements.txt为官方给出的说明文件
  • graphical_culture:舰船外观,包含00_graphical_culture.txt文件,用于设定不同种族、失落帝国、原始文明等的舰船外观 (该处主要设定光效以及如果该类如果没有对应的模型会如何做回退处理)
  • mandates:授案,包含00_mandates.txt文件,用于设定统治者授案信息(事件链等)
  • map_modes:地图模式,包含00_map_modes.txt文件,用于设定不同地图模式下的涂色规则
  • megastructures:巨型建筑,包含00_ring_world.txt(环世界)、01_dyson_sphere.txt(戴森球)、02_spy_orb.txt(哨兵阵列)、03_think_tank.txt(科学枢纽)、habitats.txt(轨道栖息地)文件,以及README.txt说明文件。用于设定巨型建筑的所有详细信息
  • name_lists:名称列表,包含AI.txtART3.txtCybrex.txtMAM3.txt等文件,用于设定各种舰船、设计、领导人等的随机名的列表
  • notification_modifiers:通知修正,包含00_notification_modifiers.txt文件,目前原版主要用于设定不同强度的肃正天灾的幽灵信号阶段的图标
  • on_action:触发器,包含00_on_actions.txt01_planet_destruction.txt(轨道轰炸)文件,原版负责游戏变量的刷新和轨道轰炸的实现
  • ship_sizes:各类(包括所有dlc中的)舰船、空间站船体的基本设置,包含00_ship_sizes.txt等文件,设定舰船速度、是否可以自主设计或联邦设计、可用模块(section)、前置科技等
  • traditions :传统,包含原版的七种传统00_diplomacy.txt(外交),00_discovery.txt(发现),00_domination.txt(统治),00_expansion.txt(扩张),00_harmony.txt(和谐),00_prosperity.txt(繁荣),00_supremacy.txt(霸权),以及README.txt说明文件,用于设定传统的效果
  • traits :种族特性,包含00_admiral_traits.txt等文件,用于设定各种族的特性效果

events

events:游戏内事件触发的部分都位于此目录下,包括以下子目录及文件:

  • game_start:游戏初始化事件
    • game_start.1(生成帝国)
    • game_start.2(移除所有行星修正效果)
    • game_start.3 (重置教程)
    • game_start.5 (游牧觉醒,创建大汗国家)
    • game_start.6 (高级帝国科技资源初始化)
    • game_start.8 (普通帝国科技资源初始化)
    • game_start.9 (普通帝国舰船初始化,包括护卫舰、科研船、工程船)
    • game_start.10(堕落帝初始化,包括特性、类型)
    • game_start.12(首都星球初始化,包括地块、区划、人口、建筑)
    • game_start.20 (高级帝国首都星球清理所有地块障碍)
    • game_start.21 (高级帝国首都星球升级行星首府)
    • game_start.22(高级帝国星球区划初始化)
    • game_start.23(高级帝国星球附加人口)
    • game_start.31(配对虫洞生成)
    • game_start.33(玩家初始星系研究站、采矿站的所有权变更)

议程

本节将讲述如果修改或者创建一个新的议程。
议程在“common/agendas/xxx.txt”中定义。

example = {
	# 领袖提案此议程的可能性
	weight_modifier = {
		# 基础权重
		weight = 100
		# 权重修正
		# modifier 可以存在多个,根据不同的条件提供不同的权重
		# 本例为,如果帝国具有军国主义思潮,则此议程的权重为 1.5
		modifier = {
			factor = 1.5
			from = {
				has_ethic = ethic_militarist
			}
		}
	}
	
	# 议程提供的国家修正
	modifier = {
		# 防御平台建造花费减少 15%
		shipclass_military_station_build_cost_mult = -0.15
		# 防御平台伤害增加 25%
		shipclass_military_station_damage_mult = 0.25
		# 防御平台船体值增加 25%
		shipclass_military_station_hull_mult = 0.25
	}
}

异常

本节将讲述如何修改或创建一个新的异常。
异常在 Stellaris\common\anomalies\xxx.txt 中定义

# 异常的脚本名称
# 本地化中的名称与脚本名称相同 example:0 "异常"
example = {

	# 异常的文本描述信息
	desc = strange_signal_category_desc
	# 异常的显示图片
	# 你可以通过 Stellaris\interface\eventpictures.gfx
	# 文件自定义异常的图片
	picture = GFX_evt_cold_barren
	# 异常的等级
	level = 2
	
	# 异常产生的几率
	spawn_chance = {	
		# 基础权重
		base = 100
		# 权重修正
		# modifier 可以存在多个,用以不同条件下的权重增减
		# 本例为, 堕落帝国刷出该异常的权重为 1.5 倍
		modifier = {
			factor = 1.5
			# 此处,使用异常的产生对象from即科研船,
			# 在通过科研船的所有者,即 from.owner 访问帝国
			# 最后判断帝国的类型为堕落帝国
			NOT = { from.owner = { is_fallen_empire = yes } }
		}

		# 权重修正
		# 本例为, 非堕落帝国刷出该异常的权重增加2
		modifier = {
			add = 2
			NOT = { from.owner = { is_fallen_empire = no } }
		}
	}

	# 默认为0
	# 0.0-1.0 表示这个异常不被产生的几率。
	# 它的有效性大于 spawn_chance,
	# 即便 spawn_chance 的权重机制选中了异常,
	# 也要受到该标签定义的几率限制。
	#
	# 本例为,99%的几率不会产生这个异常,即只有1%的几率产生该异常。
	null_spawn_chance = 0.99

	# 当异常产生时,会执行的 effect
	# this/root: 都是产生异常的星球
	# from:触发异常的飞船
	# 本例为,为触发该异常的飞船中的科学家增加10000经验
	on_spawn = {
		from = {
			leader = {
				add_experience = 10000
			}
		}
	}

	# 默认为no,如果为 yes,每个帝国将只生成该异常一次
	max_once = yes
	# 默认为no,如果为 yes,每局游戏将只生成该异常一次
	max_once_global = yes

	# 异常完成时,执行的事件 id
	# on_success 只允许出现一个,所以要么直接指定一个事件
	# 要么就使用下方的多事件选择写法
	on_success = federations2.1

	# 异常完成时,可能执行的事件
	# 每个可能性由一个正整数定义权重,数值越大几率越大
	# 如果所有的整数都是相同的,比如1,那么所有的可能
	# 的事件几率都相同。
	# 每个事件的触发几率为 当前事件的权重 / 所有事件的权重之和
	on_success = {
		# 第一种写法为直接顶一个事件的可能性 
		1 = anomaly.90
		# 第二种带修正的写法允许使用条件
		# 该事件可能性权重初始为0,但如果触发异常的国家为堕落帝国
		# 那么该异常的可能性权重从0 增加 1,变更为 1
		# 如果堕落帝国触发,则实际上 anomaly.90 和 anomaly.110各有一半几率
		# 如果不是堕落帝国,则一定会执行事件 anomaly.90 而不会执行事件 anomaly.110
		0 = {
			modifier = {
				add = 1
				owner = {
					is_fallen_empire = yes
				}
			}
			anomaly_event = anomaly.110
		}
	}

	# 是否允许AI和玩家使用该异常
	# 注意与 should_ai_use 的冲突
	should_ai_and_humans_use = yes
	# 是否允许AI使用该异常,no为只允许AI,yes为只允许玩家。
	should_ai_use = no
}

图标修改

文件位置 gfx/portraits/.*,使用txt导入文件后可以将贴图(dds文件)引入至贴图组。

之后将想要替换的事件中的贴图替换成你加入的贴图即可。

考古遗址

本节讲述如果修改或创建考古遗址。
考古遗址定义在 common/archaeological_site_types/xxx.txt

# 考古遗址的脚本名称
# 本地化名称与脚本名称相同 example:0 "考古遗址"
example = {
	# 该考古遗址的描述文本
	desc = zroni_digsite_1_desc
	# 该考古遗址的图片
	# 可以在 Stellaris\interface\eventpictures.gfx 中定义
	picture = GFX_evt_overgrown_city
	
	# 该考古遗址的最大数量
	max_instances = 1

	# 挖掘该考古遗址的条件
	# 允许挖掘的条件
	# 这会添加/删除遗址的挖掘选项
	potential = {
		# 科研船
		is_ship_class = shipclass_science_ship
		# 有科学家
		exists = leader
	}
	
	# 挖掘该考古遗址的条件
	# 执行挖掘的条件
	# 这启用/禁用挖掘选项按钮
	allow = {
		# 科研船
		is_ship_class = shipclass_science_ship
		# 有科学家
		exists = leader
	}

	# 当考古遗址被创建时执行的效果
	on_create = {
		all_random_events = yes
	}

	# 该考古遗址的显示条件
	visible = {
		has_country_flag = zroni_intro
		default_site_visible_trigger = yes
	}

	# 当该考古遗址显示时执行的 effect
	on_visible = {
		country_event = { id = story.5 days = 30 }
	}
	
	# 阶段数量
	# 该值指定为3,即需要3个stage定义
	stages = 3

	# 考古阶段
	stage = {
		# 难度
		difficulty = 1
		# 图标
		# 可以在 Stellaris\interface\archaeology_view.gfx 中定义
		icon = GFX_archaeology_runes_F1
		# 触发的事件
		event = ancrel.2
	}
	stage = {
		difficulty = {#设置动态难度
                    min = 1   #设置可能出现的最小难度
                    max = 3   #设置可能出现的最大难度
                }             #难度将会在二者之间随机
		icon = GFX_archaeology_runes_F2
		event = ancrel.3
	}
	stage = {
		difficulty = 2
		icon = GFX_archaeology_runes_F3
		event = ancrel.4
	}

	# 当考古失败时执行的 effect
	on_roll_failed = {
		from = {
			standard_archaeological_site_on_roll_failed = { RANDOM_EVENTS = all_random_events }
		}
	}

	# 在使用 create_archaeological_site = random 
	# 创建考古遗址时,该权重才会被使用。
	weight = 100
}

科技

可以在以下文件/文件夹中找到科技相关的游戏数据:

  • common/technology

你可以添加新的科技,或者复写旧有的科技。


科技文件概述


# 常量定义,你可以在支持常量使用的地方使用它们。
# 例如科技的花费,你也可以自定义一些自己的常量。
@example_cost = 1000
@tier1cost1 = 500
@tier1weight1 = 100

# 科技的脚本名称,它使用于其它需要科技引用的地方。
# 例如 00_spaceport_modules.txt
technology_name = {                                 
    
    # 设置这项科技消耗的科研点数 
    # 支持参数: 常量, 整数
    cost = @tier1cost1                              
    
    # 设置这项科技属于哪一领域
    # 支持参数: physics(物理学), society(社会学), engineering(工程学)
    area = society                                  

    # 每一个科技都被分为不同的层级。 
    # 你需要研究当前层级的5种科技,才能解锁下一层级的科技。
    # 支持参数: 0, 1, 2, 3, 4, 5, 参见层级定义 00_tiers.txt
    tier = 1                                        
    
    # 科技的类别。 
    # 具有这种类别的科学家研究速度会加快或减慢。
    # 支持参数: field_manipulation 力场操控 particles 粒子物理 psionics 灵能理论 voidcraft 宇航技术 biology 生物学
    # computing 计算技术 industry 工业技术 materials 材料科学 military_theory 军事理论 new_worlds 新世界理论
    # propulsion 推进力学 statecraft 治国术 rocketry 火箭技术
    # 参见类别定义 00_category.txt
    category = { biology }	                        
    
    # 设置这项科技的等级,-1表示为循环科技
    # 通常不能循环的科技不写此项
    # 支持参数: 整数, -1
    levels = -1
    
    # 设置这项科技每一等级花费的成本
    # 通常与 levels = -1 成对出现
    # 支持参数: 常量, 整数
    cost_per_level = @repeatableTechLevelCost
    
    # 设置这项科技需要的前置科技
    # 只有当前置科技全部研究完成,才会解锁当前科技
    # 支持参数: 科技的脚本名称
    prerequisites = { "prerequisite_technology" "prerequisite_technology" }   
    
    # 科技的基础权重
    # 权重会因为飞升、联邦等增加或减少
    # 支持参数: 常量, 整数
    weight = @tier1weight1                          

    # 纯本文
    # 用来描述这个科技的后续领域内容
    # 例如:生物之道 此科技可允许进一步发展生物强化和适应性科技。
    # 本地化字段:gateway_biological
    gateway = biological
    
    # 控制AI的自动更新(仅适用于舰船组件解锁的科技)
    # 如果值是military,研究完成该科技时,AI会更新所有军舰、恒星基地的设计。
    # 如果值是all,民用船只也会更新设计。
    # 不仅仅只限于AI,对玩家同样生效。恒星基地和那些不能设计的飞船可以通过这种方式更新。
    # 如果玩家开启了自动设计或者自动升级,军舰也会自动更新。
    # 支持参数: military, all
    ai_update_type = military
    
    # 定义这项科技是否开局可用。
    start_tech = yes
    
    # 该项科技直接影响的国家修正
    # 例如:泰坦船体值增加2000
    modifier = {
        shipsize_titan_hull_add = 2000
    }
    
    # 纯文本,用来告诉玩家这项科技的作用
    # 下方列举了build_terraform_station的本地化写法
    # feature_build_terraform_station:0 "环境改造"
    # feature_build_terraform_station_desc:0 "允许我们对星球进行环境改造。"
    feature_flags = { build_terraform_station }
    
    # 这用于添加本地化,告诉玩家该科技是另一项重要科技的前置
    # 不同的类型图标是不一样的
    # 支持内容:hide_prereq_for_desc 隐藏某一部分的文本内容
    # component 舰船组件(比如解锁零点反应堆) ship 船只(比如解锁泰坦) diplo_action 外交选项(比如允许宣战)
    # feature 特色(通常feature_flags定义,可以使用hide_prereq_for_desc = feature 隐藏)
    # resource 资源(比如解锁暗物质) custom 自定义
    prereqfor_desc = {
        hide_prereq_for_desc = component
		ship = {
			title = "TECH_UNLOCK_TITAN_CONSTRUCTION_TITLE"
			desc = "TECH_UNLOCK_TITAN_CONSTRUCTION_DESC"
		}
		custom = {
			title = "TECH_UNLOCK_ION_CANNON_CONSTRUCTION_TITLE"
			desc = "TECH_UNLOCK_ION_CANNON_CONSTRUCTION_DESC"
		}
    }

    # 这个科技的可用条件
    # 如果条件不成立,则不会出现在科技选项中。
    # 同样控制台和脚本也不能使它生效。
    # DLC 的专属科技一般使用这种方式来隐藏。
    potential = {
        host_has_dlc = "Apocalypse"
    }

    # 该科技的出现权重
    # 如果权重的因子为0,则不会出现在科技选项中。
    # 但仍然可以通过控制台、脚本来使它生效。
    weight_modifier = {
        modifier = {
            factor = 1.5
            has_ethic = ethic_pacifist
        }
        
        modifier = {
			factor = 2
			years_passed > 130
		}
    }	
    
    # AI 选择该科技的权重
    ai_weight = {
        factor = 1.5
        modifier = {
            factor = 2
            has_ethic = ethic_pacifist
        }
    }
    
    # 这是一个权重组,与mod_weight_if_group_picked 成对出现
    weight_groups = {
        repeatable
    }
    
    # 如果一个其他科技允许成为科技选项,并在所选的权重组中,则当前科技的权重就乘以每一个值。
    # 例如:如果选中了循环科技权重组,那么如果有循环科技在科技选项中,当前科技的权重就乘以0.01倍。
    mod_weight_if_group_picked = {
        repeatable = 0.01
    }
}


添加科技


向游戏中添加科技的最简单方法是使用现有科技作为模板。 如果您想添加一项将食物产量提高15%的科技,则可以使用如下代码:

tech_nutrient_replication = {
	cost = @tier3cost3 # 花费的科研点数
	area = society # 属于社会学
	tier = 3 # 科技层级为第 3 级, 即需要研究3 * 5 个科技后才会出现
	category = { biology } # 属于生物学
	prerequisites = { "tech_nano_vitality_crops" } # 需要前置科技 纳米活性作物
	weight = @tier3weight3 # 基础权重
		
	modifier = { # 食物产量提高15%
		tile_resource_food_mult = 0.15
	}
	
	weight_modifier = {
        # 如果有 和平主义 思潮,增加权重
		modifier = {
			factor = 1.25
			has_ethic = ethic_pacifist
		}
        # 如果有 极端和平主义 思潮,增加权重
		modifier = {
			factor = 1.5
			has_ethic = ethic_fanatic_pacifist
		}
        # 如果当前科研的社会学科学家有 专长:生物学 特质,增加权重
		modifier = {
			factor = 1.25
			research_leader = {
				area = society
				has_trait = "leader_trait_expertise_biology"
			}
		}
	}
	
	ai_weight = {
        # 如果有 和平主义 思潮,增加权重
		modifier = {
			factor = 1.25
			has_ethic = ethic_pacifist
		}
        # 如果有 极端和平主义 思潮,增加权重
		modifier = {
			factor = 1.5
			has_ethic = ethic_fanatic_pacifist
		}
        # 如果当前科研的社会学科学家有 专长:生物学 特质,增加权重
		modifier = {
			factor = 1.25
			research_leader = {
				area = society
				has_trait = "leader_trait_expertise_biology"
			}
		}
	}
}

我们将这个过程分解一下,以免没有头绪:

科技名称


第一行以 tech_nutrient_replication = { 开头,声明了一个科技,而它的名字是 tech_nutrient_replication 。
每个科技名称都应该以 “tech” 开头,然后在下划线后 “nutrient_replication” 命名该科技。
这不是在游戏中显示的名称,而是其他文件(包括本地化文件)引用科技时的唯一ID。
良好的命名规范会让名称更易读懂,而名称应该与科技的实际功能相符,科技名称不允许使用空格,所以单词之间连接使用下划线。

基础内容


本部分主要设定科研成本,科技怎样显示,这是一个什么样的科技,前置条件和权重。本节将详细讲解。
首先,科研成本 @cost3tier3 这是科技的成本,成本决定研究科技需要多长时间。

科技成本


在 common\scripted_variables\00_scripted_variables.txt 中可以找到所有费用的清单:

@tier1cost1 = 2000
@tier1cost2 = 2500
@tier1cost3 = 3000

@tier2cost1 = 4000
@tier2cost2 = 5000
@tier2cost3 = 6000

@tier3cost1 = 8000
@tier3cost2 = 10000
@tier3cost3 = 12000

@tier4cost1 = 16000
@tier4cost2 = 20000
@tier4cost3 = 24000

@tier5cost1 = 32000
@tier5cost2 = 40000
@tier5cost3 = 48000

在考虑消耗的成本时,应该考虑玩家何时会研究这项科技。
如果您希望在游戏早期解锁科技(例如,当玩家首次选择科技时),请使用 @tier1cost。
如果您希望在游戏中早期解锁科技,请使用 @tier2cost。
如果您希望在游戏中期解锁科技,请使用 @tier3cost。
如果您希望在游戏中晚期解锁科技,请使用 @tier4cost。
如果您希望在游戏后期解锁科技,,请使用 @tier5cost。
应根据您对该科技的强弱来选择成本。 如果您认为它很强大,请使用 @tier3cost。如果您认为它很弱,请使用 @tier1cost。
示例:

cost = @tier1cost2

这将使研究成本达到 2500 科研点数。 如果要编写自定义值,请使用以下代码:

cost = 整数

你可以在整数部分填写你需要的科研成本点数。

科技领域


科技研究的基本类别。它的编写方式如下:

area = society

支持的研究领域,例如:

#物理学研究
area = physics

#社会学研究
area = society

#工程学研究
area = engineering

该代码将确定科技的显示在哪一个领域分类中,以及哪种研究点数的产生会影响研究速度,例如,社会学研究点数将加速社会学技术的发展。

科技层级


它可以控制何时可以使用该科技。 允许的层级如下:

# previously_unlocked 决定在研究当前层级的科技时,需要研究多少个上一层级的科技。

0 = { # Tier 0
}

1 = { # Tier 1
	previously_unlocked = 0
}

2 = { # Tier 2
	previously_unlocked = 6
}

3 = { # Tier 3
	previously_unlocked = 6
}

4 = { # Tier 4
	previously_unlocked = 6
}

5 = { # Tier 5
	previously_unlocked = 6
}

数值指的是必须从上一层研究多少个科技。 要选择一个等级,请考虑何时需要玩家解锁该科技。
第1层是早期游戏,第2层是中早期游戏,第3层是游戏中期。 第4层是中后期游戏。 第5层是游戏后期。
如果您希望该科技成为初始科技,请使用第0层。

科技类别


科技类别进一步划区分了您的科技。 它会影响由科学家专长引起的研究速度提升,例如“专长:工业”。
科技类别不会限制谁可以研究该科技。 这是如何编写代码的示例:

# 注意 {}
category = { field_manipulation }

尽管它使用花括号,但这不是一个数组,每种科技只能有一个类别。 以下是所有类别的列表:

# 材料科学
materials = {
	icon = "gfx/interface/icons/traits/leader_traits/leader_trait_expertise_materials.dds"
}

# 火箭技术
rocketry = {
	icon = "gfx/interface/icons/traits/leader_traits/leader_trait_expertise_rocketry.dds"
}

# 宇航技术
voidcraft = {
	icon = "gfx/interface/icons/traits/leader_traits/leader_trait_expertise_voidcraft.dds"
}

# 工业技术
industry = {
	icon = "gfx/interface/icons/traits/leader_traits/leader_trait_expertise_industry.dds"
}

# 力场操控
field_manipulation = {
	icon = "gfx/interface/icons/traits/leader_traits/leader_trait_expertise_field_manipulation.dds"
}

# 粒子物理
particles = {
	icon = "gfx/interface/icons/traits/leader_traits/leader_trait_expertise_particles.dds"
}

# 计算技术
computing = {
	icon = "gfx/interface/icons/traits/leader_traits/leader_trait_expertise_computing.dds"
}

# 灵能理论
psionics = {
	icon = "gfx/interface/icons/traits/leader_traits/leader_trait_expertise_psionics.dds"
}

# 新世界理论
new_worlds = {
	icon = "gfx/interface/icons/traits/leader_traits/leader_trait_expertise_new_worlds.dds"
}

# 治国术
statecraft = {
	icon = "gfx/interface/icons/traits/leader_traits/leader_trait_expertise_statecraft.dds"
}

# 生物学
biology = {
	icon = "gfx/interface/icons/traits/leader_traits/leader_trait_expertise_biology.dds"
}

# 军事理论
military_theory = {
	icon = "gfx/interface/icons/traits/leader_traits/leader_trait_expertise_military_theory.dds"
}

每一个花括号就是一个科技类别,icon 是它的图标。你可以在科学家的专业知识特质中使用它们。
科技类别并不与科技领域相关,你可以设定一个科技在社会学领域内,并设置为工业类别。


舰船设计更新


ai_update_type = military

控制AI的自动更新(仅适用于舰船组件解锁的科技)
如果值是military,研究完成该科技时,AI会更新所有军舰、恒星基地的设计。
如果值是all,民用船只也会更新设计。
不仅仅只限于AI,对玩家同样生效。恒星基地和那些不能设计的飞船可以通过这种方式更新。
如果玩家开启了自动设计或者自动升级,军舰也会自动更新。

权重


权重控制着科技出现的可能性,数字越高,科技出现的可能性越高。 这是默认权重的列表:

@tier1weight1 = 100
@tier1weight2 = 95
@tier1weight3 = 90

@tier2weight1 = 85
@tier2weight2 = 75
@tier2weight3 = 70

@tier3weight1 = 65
@tier3weight2 = 60
@tier3weight3 = 50

@tier4weight1 = 45
@tier4weight2 = 40
@tier4weight3 = 35

@tier5weight1 = 30
@tier5weight2 = 25
@tier5weight3 = 20

名称中的 tier 仅是名称,而不是意味着权重被科技层级限制。
要选择权重,请考虑您希望该科技出现的可能性。 数字越高,可能性越大。
如果您希望通用一些,请使用“@tier1weight1”。 您可以使用 weight = 整数 编写自己的自定义权重。
请记住,权重在1-100的范围内。 0将使该科技只能通过作弊获得。 这是一个如何使用权重的例子:

#使用预设的权重
weight = @tier1weight3

#使用自定义的权重
weight = 15

警告:原版游戏使用的最低权重是20,任何较低的权重都会使该科技极为罕见。 如果需要,请使用“is_rare”。(稍后会详细介绍。)

前置科技


前置科技是科技解锁之前所需的科技列表。 例如,让我们看一下具有多个先决条件的Synthetics。

prerequisites = { "tech_droid_workers" "tech_galactic_administration" "tech_sentient_ai" }

让我们分解一下。 第一个词,prerequisites,指出这些是前置科技。
下一部分,花括号,是数组开始的位置。 每个技术都用引号 “” 引起,并且以空格分隔。
科技名称是通过引用科技的脚本名称来使用的。 这是一个示例,前置件为“智能人”和“殖民集中”:

prerequisites = { "tech_droid_workers" "tech_colonial_centralization" }

在解锁此科技之前,“智能人”和“殖民集中”科技是必须的。


起始科技


如果您想使该科技成为起始科技,请在本节中进行。
标签“start_tech”将其设置为起始科技,而“tier = 0”意味着它没有任何层级花费。 这是示例:

start_tech = yes
tier = 0

这些标签的结合使用将使科技从一开始就被研究。 对于自定义FTL,请参阅高级科技改装教程。


杂项


还有其他标签,例如“is_rare”,“is_dangerous”和“is_reverse_engineerable”。
“is_rare” 稀有科技标签。 它将会使科技变为紫色并降低权重。
“is_dangerous” 危险科技标签,它会使科技变为红色,附带的你需要编写大量的脚本来触发事件等等。
“is_reverse_engineerable” 可逆向研究标签,应仅在舰船部件上使用,例如失落帝国的暗物质反应堆等。
标签是这样添加的:

#稀有科技
is_rare = yes

#危险科技
is_dangerous = yes

#可逆向研究科技
is_reverse_engineerable = yes

它们的值允许 yes 或者 no。

本节综合应用


这是基础内容部分的完整示例。 该示例将使用所有标签,“is_dangerous”除外。

cost = @tier2cost1
area = physics
tier = 2
category = { particles }
weight = 55
is_rare = yes
is_reverse_engineerable = yes

权重修正

现在我们来看一下权重的逻辑写法,它修改了这些科技被重新抽中的可能性。 权重修正的示例:

weight_modifier = {
	factor = 4
	modifier = {
		factor = 0.75
		NOT = {
			OR = {
				has_ethic = ethic_pacifist
				has_ethic = ethic_fanatic_pacifist
			}
		}
	}
}

让我们分解一下。

权重修正标签

关于权重修正的定义,它是这样写的:

weight_modifier = {

因子

因子影响科技出现的可能性。乘法,因此小于1的因数会减少机会,而大于1的因数会增加机会。 它写在modifier内。

modifier = {
factor = 0.75
}

您可以在 modifier 之外编写因子以设置基础因子。 像这样:

factor = 4

如果你想仅通过作弊获得该科技,或者对于某些帝国不可用,你可以设置 factor = 0。

修正

这是计算实际权重的地方。你可以拥有多个,因此可以有许多不同的事情来决定是否获得科技。

关于修正语句如何编写,请参考修正表

#单一的修正
modifier = {

}

#多个修正
modifier = {

}
modifier = {

}

判断逻辑

你可以使用以下几个逻辑标签:
AND(如果标签内的条件同时成立,则将触发)
OR(如果标签内的任意条件成立,则将触发)
NOT(如果标签内的条件不成立,单一条件,则将触发)
NOR(如果标签内的任意条件不成立,则将触发)
示例如下:

OR = { # 如果有 和平主义 或者 极端和平主义 思潮就会触发
	has_ethic = ethic_pacifist
	has_ethic = ethic_fanatic_pacifist
}
AND = { # 具有 专制帝国 帝国信仰 才会触发
	has_government = "gov_despotic_empire"
	has_civic = "civic_imperial_cult"
}

factor = 0
NOR = { # 如果不是 唯心主义 或者 极端唯心主义 就设置因子为0, 即只有唯心思潮才会拥有基础权重
    has_ethic = "ethic_spiritualist"
    has_ethic = "ethic_fanatic_spiritualist"
}

科学家特质

权重会受到科研科学家的影响。
首先,使用“research_leader = {” 进行定义。 接下来是“has_trait”,它用于增加或减少因为某个特质存在或者缺少导致的科技权重变更。
这是可以使用的所有特质的列表(对于科学家):

##################
#     通用特质    #
##################

#开明 (+25% 经验)
"leader_trait_adaptable"

#顽固 (-25% 经验)
"leader_trait_stubborn"

#快速复原 (+25 领袖寿命)
"leader_trait_resilient"

#药物依赖 (-20 领袖寿命)
"leader_trait_substance_abuser"

#活力四射 (-33% 招募费用)
"leader_trait_eager"

#没有前途 (领袖不在增加经验)
"leader_trait_arrested_development"

####################
#     科学家特质    #
####################

#警惕 (-10% 异常失败 )
"leader_trait_careful"

#细致 (+10% 异常发现)
"leader_trait_meticulous"

#灵光一闪 (+10% 研究速度)
"leader_trait_spark_of_genius"

#无忧无虑 (+35% 异常研究速度)
"leader_trait_carefree"

#漫游者 (+25% 调查速度)
"leader_trait_roamer"

#考古学家 (+50% 考古研究速度, -25% 考古失败几率)
"leader_trait_archaeologist"

#偏执 (-5% 研究速度, -10% 异常研究速度)
"leader_trait_paranoid"

#狂热 (+5% 研究速度)
"leader_trait_maniacal"

#定制AI助理 (+5% 研究速度, +10% 调查速度, +15% 异常研究速度)
"leader_trait_custom_AI_assistant"

#知性AI副官 (+10% 研究速度, +20% 调查速度, +30% 异常研究速度)
"leader_trait_sapient_AI_assistant"

#专长:材料科学 (+15% 研究速度 (材料科学))
"leader_trait_expertise_materials"

#专长:推进力学 (+15% 研究速度 (推进力学))
"leader_trait_expertise_propulsion"

#专长:宇航技术 (+15% 研究速度 (宇航技术))
"leader_trait_expertise_voidcraft"

#专长:工业 (+15% 研究速度 (工业))
"leader_trait_expertise_industry"

#专长:力场操控 (+15% 研究速度 (力场操控))
"leader_trait_expertise_field_manipulation"

#专长:粒子物理 (+15% 研究速度 (粒子物理))
"leader_trait_expertise_particles"

#专长:计算技术 (+15% 研究速度 (计算技术))
"leader_trait_expertise_computing"

#专长:灵能理论 (+15% 研究速度 (灵能理论))
"leader_trait_expertise_psionics"

#专长:新世界理论 (+15% 研究速度 (新世界理论))
"leader_trait_expertise_new_worlds"

#专长:治国术 (+15% 研究速度 (治国术))
"leader_trait_expertise_statecraft"

#专长:生物学 (+15% 研究速度 (生物学))
"leader_trait_expertise_biology"

#专长:军事理论 (+15% 研究速度 (军事理论))
"leader_trait_expertise_military_theory"

这仅包括基础游戏,不包括DLC内容。

科学家等级

此标签“has_level”使用不等号(<和>)来根据级别提高或降低权重。 这是在游戏中用法的一个示例:

modifier = {
	factor = 1.25
	research_leader = {
		area = physics
		has_trait = "leader_trait_expertise_voidcraft"
		has_level > 2
	}
}
modifier = {
	factor = 1.50
	research_leader = {
		area = physics
		has_trait = "leader_trait_expertise_voidcraft"
		has_level > 3
	}
}

在这里,“has_level” 标签用于检查科学家是否高于3级,如果是,则将科技的权重提高 * 1.5。

已经过的游戏时间

如果自游戏开始以来的年份大于或小于特定年份,则增加权重。 像这样:

years_passed < 20
# 你可以使用这些判断符号中的任意一个 < > >= <= =

作用域和触发器

作用域用于确定语句的适用范围。 请注意,只有少数几个范围很重要,例如'research_leader'。
触发器是整个权重修正部分中最重要的部分。 触发器创建的主要内容是允许特定情况下的某些因素可能对权重产生正面或负面影响。
这里有一些我想出的例子。

示例1:锁定思潮

使用触发器,您可以创建一种只能由平等主义者或亲外主义者使用的科技。

weight_modifier = {
	factor = 0.5   # 设置基础因子为 0.5 倍
	modifier = {
		factor = 0   # 设置几率为0,如果帝国没有以下思潮中的任意一个
		NOR = {
			has_ethic = ethic_egalitarian
			has_ethic = ethic_fanatic_egalitarian
			has_ethic = ethic_xenophile
			has_ethic = ethic_fanatic_xenophile
		}
	}
	modifier = {
		factor = 1.5   # 如果是亲外平等,则几率为 1.5倍
		AND = {
			OR = {
				has_ethic = ethic_egalitarian
				has_ethic = ethic_fanatic_egalitarian
			}
			OR = {
				has_ethic = ethic_xenophile
				has_ethic = ethic_fanatic_xenophile
			}
		}
	}
	modifier = {
		factor = 1.5   # 如果是极端平等,则几率为 1.5 倍
		has_ethic = ethic_fanatic_egalitarian
	}
	modifier = {
		factor = 1.25   # 如果是极端亲外,则几率为 1.5 倍
		has_ethic = ethic_fanatic_xenophile
	}
}

社会阶层

社会阶层是人口在社会中的地位。 它们在“common/pop_categories/xxx.txt”中定义。
在星球人口视图中,职业按阶层分组,并且阶层根据文件中定义的顺序进行排序。

# 人类阶层的脚本名称
# 本地化词条 pop_cat_example 该阶层的本文显示名称
# 本地化词条 pop_cat_example_plural 该阶层的本文显示名称(复数)
# 本地化词条 pop_cat_example_desc 该阶层的本文描述
example = {
	# 标志着这个阶层的社会地位。这个值越大,地位越高。
	# 这会影响在星球人口视图中的职业排序
	# rank值越高,显示越靠上,相同rank
	# 按照文件定义顺序排序
	rank = 1 

	# 该阶层人口肖像将使用的衣服索引。 
	# 只有在种族肖像中定义了衣服才有效。
	clothes_texture_index = 1

	# 人口更换职业时的权重。
	# 通常更高rank的阶层,所需要的权重越高。
	# 例如一个工人失业后,他会优先变成统治者,
	# 因为统治者的权重为2,科学家的权重是1.25
	change_job_threshold = 2

	# 如果一个从事该社会阶层职业的人口失业,
	# 是否仍然会被认为是该阶层,典型的案例是
	# 统治者失业后,在失业图标上,显示的仍然是统治者
	keep_from_former_job = yes

	# 如果一个该阶层的人口失业了,降低阶层所需要的天数
	demotion_time = 3600

	# 该阶层的人口修正效果,
	# 用来定义该阶层人口消耗的基础住房、舒适度使用数量
	pop_modifier = {
		pop_housing_usage_base = 1 # 基础住房使用
		pop_amenities_usage_base = 1 # 基础舒适度使用
	}

	resources = {
		# 经济类型,定义文件位置 common\economic_categories
		category = pop_category_rulers

		# 维护费用
		# 每一个 upkeep 都需要一个 trigger
		# trigger 用来判断该维护费用是否生效
		# common\strategic_resources 定义了你可以使用的资源类型
		# 本例中的food就在该文件中定义
		# upkeep 允许存在多个,用来对不同条件下的阶层人口使用不同的维护费用
		upkeep = {
			trigger = {
				# 是有机生物种族
				species = { is_archetype = BIOLOGICAL }
				# 不是石头人种族
				is_lithoid = no
				# 不是土著(没上天的)国家
				owner = { is_primitive = no }
			}
			# 每个该阶层的人口维护费为1食物1矿物1消费品
			food = 1
			minerals = 1
			consumer_goods = 1
		}

		# 对智械、合成人国家的阶层人口维护费用为1合金
		upkeep = {
			trigger = {
				owner = { is_robot_empire = yes }
			}
			alloys = 1
		}

		# 石头人种族,每阶层人口生产1天然气、微粒、水晶
		produces = {
			trigger = {
				species = { is_archetype = LITHOID }
			}

			rare_crystals = 1
			exotic_gases = 1
			volatile_motes = 1
		}
	}

	# 有条件的星球修正,可以通过多个来区分不同的修正效果
	# 本例为,默认国家类型,每个阶层人口增加一个贸易值
	triggered_planet_modifier = {
		potential = {
			owner = { is_country_type = default }
		}
		trade_value_add = 1
	}

	# 本例为,如果是智械、和成人国家,每个阶层人口合金产量加1
	triggered_planet_modifier = {
		potential = {
			owner = { is_robot_empire = yes }
		}
		country_base_alloys_produces_add = 1
	}

	# 是否允许失业惩罚
	# 可以通过一些条件来控制什么时候才会开启失业惩罚
	# 本例为该阶层人口始终有失业惩罚
	should_apply_unemployment_penalties = {
		always = yes
	}

	# 失业惩罚
	# 可以使用人口修正
	# 本例为减少 20% 幸福度
	unemployment_penalties = {
		pop_happiness = -0.20
	}

	# 失业资源
	# 与 resource 使用方式相同
	unemployment_resources = {
		category = unemployment_resources

		# 乌托邦生活标准下失业人口生产科研点数
		produces = {
			trigger = {
				has_utopian_living_standard_type = yes
			}
			society_research = 2
			physics_research = 2
			engineering_research = 2
		}

		# 如果存在失业补贴修正,则人口消费品维护费增加2
		upkeep = {
			trigger = {
				planet = {
					has_modifier = unemployment_benefits
				}
			}
			consumer_goods = 2
		}
	}

	# 当人口被创建、迁移到新星球、改变所有者时,
	# 该人口是否会被分配到这个阶层
	# 本例为只有非格式塔人口才会被允许分配到该阶层
	assign_to_pop = {
		owner = { is_gestalt = no }
	}

	# 是否允许迁徙人口
	# 本例为始终允许迁移人口
	allow_resettlement = {
		always = yes
	}

	# 迁徙花费
	# 本例为 每人口 消耗200电
	resettlement_cost = {
		energy = 200
	}

	# 权重
	# 权重越高,分配人口阶层时,越会优先
	# 例如有一个统治者岗位和一个工人岗位
	# 新人口会被分配给统治者,因为它的权重更高
	#
	# modifier 可以修正权重的倍数
	# 本例为,石头人种族的权重为10倍,即 3*10
	# 有机生物种族的权重为20倍,即 3*20
	weight = {
		weight = 3 # 基础权重
		modifier = {
			factor = 10
			owner_main_species = { is_archetype = LITHOID }
		}

		modifier = {
			factor = 20
			owner_main_species = { is_archetype = BIOLOGICAL }
		}
	}
}

职业

本节将讲述如果修改现有的职业,以及添加新的职业。
职业在“common/pop_jobs/xxx.txt”中定义。

相关修正

相关的修正内容会自动生产,其中的exmaple即职业的脚本名称
job_example_add = 1 - 为星球添加多少个该职业的岗位
job_example_per_pop = 2.0 - 每多少人口,为星球添加一个该职业岗位
job_example_per_crime = 2.0 - 每多少犯罪率,为星球添加一个该职业岗位

职业范例


# 人口职业的脚本名称
# 本地化词条 job_example 该职业的本文显示名称
# 本地化词条 job_example_plural 该职业的本文显示名称(复数)
# 本地化词条 job_example_desc 该职业的本文描述
example = {
	# 是否具有职业数量限制,默认为 yes
	# 如果设置为 no, 在当前职业的 possible_pre_triggers 
	# 和 possible 中的所有条件都满足时
	# 这个职业将始终被认为是可用的
	# 如果任意一个职业的该值为no,那么正常会导致失业的人口
	# 将不会失业,而是从事该职业。
	#
	# 比如智械的并入电网同化、奴隶类型的牲口、净化
	# 他们都是通过设置 这个值为 no 实现的
	is_capped_by_modifier = yes

	# 社会阶层
	# 如果指定社会阶层的 assign_to_pop 允许分配人口到该阶层,
	# 并且也没有其他职业的权重大于当前职业。只要这个人口被雇佣
	# 为该职业,那么它就会被分配到指定的社会阶层。
	category = worker

	# 本地化文本,用来描述那些类型的人口可以从事该职业
	# 本地的文本 这个岗位仅能由那些当前没有在被净化的自由人口从事。
	condition_string = SPECIALIST_JOB_TRIGGER

	# 建筑图标
	# 在星球的人口职业背景图上显示那个建筑。
	# 比如从事科研职业的人口,背景板会显示研究大楼的图标。
	building_icon = building_crude_huts

	# 人口的衣服索引
	# 在星球的人口职业肖像中使用的衣服索引
	clothes_texture_index = 3

	# 职业的图标
	# 正常的图标定义为在 文件夹中 Stellaris\gfx\interface\icons\jobs 
	# 创建一个 job_example.dds 的图标。
	# 其中的 example 替换成职业的脚本名称,比如我们当前的职业名字时 example
	# 而这个 icon 定义的图标意思是使用指定的职业所使用的图标
	# 本例中,example 职业将会使用文化工作者职业的图标
	# 以下两种写法都生效
	icon = culture_worker
	# icon = "culture_worker"

	# 职业的前置可能性触发器
	# 用来确认什么样的人口可以从事该职业。
	# 如果没有该标签,将会对全银河系所有的人口做一次潜在的检测
	# 这是比较耗费性能的。
	# 正确的使用该标签将会提高性能。
	possible_pre_triggers = {
		# 在星球上 必须写yes
		has_planet = yes
		# 星系是否殖民并存在所有者国家 必须写yes
		has_owner = yes
		# 正在同化 如果选择no, 同化人口将会被过滤
		is_being_assimilated = yes
		# 正在净化 如果选择no,净化人口将会被过滤
		is_being_purged = yes
		# 是奴隶 如果选择no,奴隶将会被过滤
		is_enslaved = yes
		# 是一个机器人口 如果选择no,机器人口将会被过滤
		is_robot_pop = yes
		# 是未开化的 如果选择no,未开化的人口将会被过滤
		is_sapient = yes
	}

	# 人口从事该职业的可能性
	# 该标签将在 possible_pre_triggers 后进行检测
	# 应该注意条件不会相互冲突
	possible = {
		# 只有堕落帝国国家的人口可以从事该职业
		owner = { is_fallen_empire = yes }
	}
	
	# 星球的修正效果
	planet_modifier = {
		# 每个从事该职业的人口增加1的舒适度
		planet_amenities_add = 1
	}	

	# 带条件的星球修正效果
	# 该标签可以与 planet_modifier 同时存在
	# 该标签可以存在多个
	# potential 是修正生效的条件
	# modifier 是修正的实际效果
	triggered_planet_modifier = {
		# 是普通帝国
		potential = { 
			owner = { is_regular_empire = yes }
		}
		# 每个从事该职业的人口增加0.4的舒适度
		modifier = {
			planet_amenities_add = 0.4
		}
	}

	# 国家的修正效果
	country_modifier = {
		# 有机人口幸福度增加 100%
		biological_pop_happiness = 1
	}

	# 带条件的国家修正效果
	triggered_country_modifier = {
		# 是普通帝国
		potential = { 
			is_regular_empire = yes
		}
		# 每个从事该职业的人口使有机人口幸福度增加 100%
		modifier = {
			biological_pop_happiness = 1
		}
	}

	# 陆军修正
	pop_modifier = {
		# 陆军维护费增加 25%
		armies_upkeep_mult = 0.25
	}

	# 该职业生产的或者消耗的资源
	# produces 和 upkeep 允许存在多个并根据不同 trigger 条件
	# 具有不同的生产和维护费,trigger也可以不写
	resources = {
		# 经济类型,定义文件位置 common\economic_categories
		category = planet_jobs
		# 堕落帝国中的该职业人口产出1合金
		produces = {
			trigger = {
				owner = { is_fallen_empire = yes }
			}
			alloys = 1
		}
		# 堕落帝国中的该职业人口维护费为1合金
		upkeep = {
			trigger = {
				owner = { is_fallen_empire = yes }
			}
			alloys = 1
		}
	}

	# 权重
	# 人口将会优先从事当前职业指定的阶级中
	# 权重较高的职业
	#
	# 人口的职业分配会优先按照阶级权重排序
	# 在然后按照职业权重排序
	#
	# modifier 可以修正权重的倍数
	# 本例为,石头人种族的权重为10倍,即 3*10
	# 有机生物种族的权重为20倍,即 3*20
	weight = {
		weight = 3 # 基础权重
		modifier = {
			factor = 10
			owner_main_species = { is_archetype = LITHOID }
		}

		modifier = {
			factor = 20
			owner_main_species = { is_archetype = BIOLOGICAL }
		}
	}
}

派系

本节将讲述如何修改现有的以及如何创建新的派系。
派系在“common/pop_faction_types/xxx.txt”中定义。

example = {
	# 候选者头部颜色,以GFX_faction_header_为前缀
	# 你仍然可以在 Stellaris\interface\icons.gfx 文件中自定义
	election_header = GFX_faction_header_red

	# 该派系的指导思潮
	# 该思潮的设置将影响派系图标,以及派系描述中的思潮文本
	guiding_ethic = ethic_authoritarian

	# 该派系是否是唯一的,默认所有的派系都为yes
	unique = yes

	# 派系的支持率倍数
	# 这个派系的候选人将会获得多少额外的权重,
	# 默认的1.0是不增加任何权重倍率
	support_multiplier = 1.0

	resources = {
		# 经济类型,定义文件位置 common\economic_categories
		category = pop_factions
		# 该派系将产生 2 影响力每月
		# 这是个基础产出,未满足派系诉求的情况下会下降
		# 实际的影响力产出为 基础影响力 * 派系认可度 * 派系支持度
		produces = {
			influence = 2
		}
	}

	# 派系产生的条件
	is_potential = {
		# 游戏开始1年以后
		years_passed >= 1
		# 不是格式塔意识
		NOT = { has_ethic = ethic_gestalt_consciousness }
	}

	# 预定义的参数
	# 参数用来在 actions 中使用
	# 本例中 empire 将保存为创建派系的国家对象
	parameters = {
		empire = {
			type = country
			valid_objects = {
				is_same_value = root
			}
		}
	}

	# 人口加入派系的前置条件
	# 如果没有这个标签,将会降低性能
	# 本例中,只有被殖民星球上的开化种族人口
	# 他们也不是被同化或净化状态,同时也不是机器人或奴隶
	# 才会允许加入该派系
	can_join_pre_triggers = {
		# 在星球上 必须写yes
		has_planet = yes
		# 星系是否殖民并存在所有者国家 必须写yes
		has_owner = yes
		# 正在同化 如果选择no, 同化人口将会被过滤
		is_being_assimilated = no
		# 正在净化 如果选择no,净化人口将会被过滤
		is_being_purged = no
		# 是奴隶 如果选择no,奴隶将会被过滤
		is_enslaved = no
		# 是一个机器人口 如果选择no,机器人口将会被过滤
		is_robot_pop = no
		# 是未开化的 如果选择no,未开化的人口将会被过滤
		is_sapient = no
	}

	# 人口加入派系的条件
	can_join_faction = {
		# 不是合成人
		is_shackled_robot = no
		# 不是土著人口
		has_culture_shock = no
		# 没有被精神阉割
		NOT = { has_trait = trait_nerve_stapled }
	}

	# 派系对人口的吸引力
	attraction = {
		# 基础吸引力
		base = 150

		# 吸引力修正
		# modifier 可以存在多个,针对不同条件下的吸引力修正
		# 本例为具有领导人的派系吸引力将会为 1.25 倍
		modifier = {
			factor = 1.25
			exists = from
			from = {
				exists = leader
				leader = { leader_class = ruler }
			}
		}
	}

	# 派系对领袖的权重
	# 权重较高的派系将会优先选择领袖
	leader = {
		# 基础领袖吸引力
		base = 100

		# 吸引力修正
		# modifier 可以存在多个,针对不同条件下的吸引力修正
		# 本例为事件领袖将不会被选为派系领袖
		modifier = {
			factor = 0.0
			is_event_leader = yes
		}
	}

	# 派系对国家的诉求
	# 该标签可以存在多个
	demand = {
		# 标题
		title = TECHNOLOGIST_ROBOTS_ALLOWED
		# 为满足诉求时的标题
		unfulfilled_title = TECHNOLOGIST_ROBOTS_BANNED
		# 该派系诉求的描述
		desc = TECHNOLOGIST_ROBOTS_ALLOWED_DESC

		# 如果诉求被满足,对派系认可度的影响
		# 间接影响该派系人口的幸福度
		fulfilled_effect = 10
		# 如果诉求未被满足,对派系认可度的影响
		# 间接影响该派系人口的幸福度
		unfulfilled_effect = -30

		# 该诉求存在的条件
		potential = {
			exists = owner
		}

		# 如果 potential 中的条件成立,即该诉求存在于这个派系中
		# 本标签内的条件即为满足该诉求的实际条件
		trigger = {
			owner = {
				NOR = {
					has_policy_flag = robots_outlawed
					has_policy_flag = ai_outlawed
				}
			}
		}
	}

	# 创建派系时执行的 effect
	# 本例为 触发派系事件,告诉玩家这个派系被建立了
	on_create = {
		pop_faction_event = { id = factions.1 }
	}

	# 派系解散时执行的 effect
	# 本例为,将支持派系和镇压派系的修正在派系解散时移除
	on_destroy = {
		if = {
			limit = {
				has_modifier = promoted_materialist
			}
			remove_modifier = promoted_materialist
		}
		if = {
			limit = {
				has_modifier = suppressed_materialist
			}
			remove_modifier = suppressed_materialist
		}
	}

	# 派系管理中可以使用的操作
	actions = {
		# 操作的脚本名称
		# 可以定义多个操作
		embrace_faction = {
			# 该操作的标题
			title = EMBRACE_FACTION
			# 该操作的描述文本
			description = EMBRACE_FACTION_DESC

			# 执行该操作的花费
			# 本例为500影响力,但也可以是其他的
			cost = {
				influence = 500
			}

			# 该操作生效的条件
			# 本例为 没有主权丧失,即不是附庸国
			potential = {
				exists = owner
				owner = {
					OR = {
						is_subject = no
						NOT = { is_subject_type = dominion }
					}
				}
			}

			# 该操作可以被使用的条件
			valid = {
				# 自定义提示文本
				# 本例重新设置了当操作不可用的时候错误提示文本
				custom_tooltip = {
					# 当本标签内的条件不成立时显示的文本
					fail_text = EMBRACE_FACTION_COOLDOWN
					# 当本条件不成立时会显示上边的错误文本并且也没办法使用这个操作
					# 本例为在没有当前操作使用后的计时器修正的情况允许使用操作
					parameter:empire = {
						NOT = { has_modifier = embraced_faction_timer }
					}
				}
				# 如果支持率大于 20%
				support > 0.20
				# 没有极端唯物主义思潮
				parameter:empire = {
					NOT = { has_ethic = ethic_fanatic_materialist }
				}
			}

			# 使用这个操作时执行的效果
			effect = {
				# 添加一个该操作的修正,倒计时为10年
				add_modifier = { modifier = embraced_faction days = 3600 }

				parameter:empire = {
					# 帝国的思潮向唯物主义转变
					shift_ethic = ethic_materialist
					# 不显示提示信息的效果
					hidden_effect = {
						# 添加一个该操作冷却计时器修正
						add_modifier = { modifier = embraced_faction_timer days = 3600 }
						# 为所有的其他派系添加修正,使认可度减少20%
						every_pop_faction = {
							limit = { NOT = { is_same_value = root } }
							add_modifier = { modifier = embraced_another_faction days = 3600 }
						}
					}
				}
				hidden_effect = {
					# 将当前的派系保存为事件对象
					save_event_target_as = TargetFaction
					# 对所有和我们有通信的帝国执行 主流思潮发生转变 事件
					parameter:empire = {
						every_relation = {
							limit = {
								is_ai = no
								is_country_type = default
								has_communications = prev
							}
							country_event = { id = factions.2000 }
						}
					}
				}
			}

			# AI 执行这个操作的权重
			ai_weight = {
				# 基础权重
				base = 1
				# 权重修正
				# modifier 可以存在多个
				# 本例为如果帝国有唯物主义,并且支持率小于 50 %,AI就不会使用这个操作
				modifier = {
					factor = 0
					support < 0.50
					owner = {
						has_ethic = ethic_materialist
					}
				}
			}
		}
	}
}

殖民地自动建造

文件位置 Stellaris\common\colony_automation


# 自动建造模板的名字,如果存在重复的名字,
# 以最后一个被加载的内容为准
# 清理障碍和建筑升级会自动完成
# 所以模板内的建造只需要写1级建筑即可
automate_example = {
	# 建造模板可用的条件
	# 作用域为星球
	available = {
		# 判断星球的设计模板为首都
		has_designation = col_capital
		# 判断国家类型为普通帝国
		owner = { is_regular_empire = yes }
		# 判断空闲职位过低
		free_jobs < 1
	}

	# 区划优先级
	# 写入的区划会平均建造,当写入的所有区划都造满
	# 将会建造所有可用的区划,也是平均建造。
	# 此例为建造采矿区划,采矿造满后
	# 将会建造城市、发电、农业区划各一个,直到全部造满
	# 不能使用条件判断
	prio_districts = {
		district_mining
	}

	# 建造列表
	# 可以使用1-16个建筑类型,但不是必须要有16个
	# 建造的优先顺序为序号,即1 2 3 4
	# 建筑只需要建造第 1 级即可,资源检查和条件检查自动完成
	# 建筑的升级自动完成,不需要写
	buildings = {
		# 优先建造首都建筑,不同星球和国家首都建筑不同
		1 = {
			building = building_capital
			available = {# 始终建造
				always = yes
			}
		}

		# 建造民用工厂
		2 = {
			building = building_factory_1
			available = {# 只有星球大于15尺寸才会建造
				planet_size > 15
			}
		}

		# 建造合金厂
		3 = {
			building = building_foundry_1
			available = {
				# 优先建造5个合金厂,此写法会固定建筑栏位
				# 即后续的建筑应该检查建筑的数量大于5才可以建造
				# 因为合金厂有等级区别,所以建筑数量只能使用 any
				# 所以建筑类型不能使用 building_foundry_1
				OR = {
					num_buildings = { type = any value = 1 }
					num_buildings = { type = any value = 2 }
					num_buildings = { type = any value = 3 }
					num_buildings = { type = any value = 4 }
					num_buildings = { type = any value = 5 }
				}
			}
		}

		# 最后一个将始终使用首都建筑
		# 以避免一定情况下的BUG导致建筑缺少一个
		4 = {
			building = building_capital
			available = {
				always = yes
			}
		}
	}
}

如果我们需要对区划的建造顺序进行限制,我们可以通过模板的判断条件来设置。 比如按照采矿、发电、农业的顺序。

automate_example_1 = {
	available = {
		has_designation = col_capital
		owner = { is_regular_empire = yes }
		free_jobs < 1
		num_free_districts = { type = district_mining value > 0 }
	}

	prio_districts = {
		district_mining
	}

	buildings = {
		1 = {
			building = building_capital
			available = {
				always = yes
			}
		}
	}
}

automate_example_2 = {
	available = {
		has_designation = col_capital
		owner = { is_regular_empire = yes }
		free_jobs < 1
		num_free_districts = { type = district_mining value = 0 }
		num_free_districts = { type = district_generator value > 0 }
	}

	prio_districts = {
		district_generator
	}

	buildings = {
		1 = {
			building = building_capital
			available = {
				always = yes
			}
		}
	}
}

automate_example_3 = {
	available = {
		has_designation = col_capital
		owner = { is_regular_empire = yes }
		free_jobs < 1
		num_free_districts = { type = district_mining value = 0 }
		num_free_districts = { type = district_generator value = 0 }
		num_free_districts = { type = district_farming value > 0 }
	}

	prio_districts = {
		district_farming
	}

	buildings = {
		1 = {
			building = building_capital
			available = {
				always = yes
			}
		}
	}
}

(未完待续)

5.0
3人评价
avatar