本帖最后由 老猫◆尘埃 于 2020-1-2 23:53 编辑
在群星中,游戏的事件,机制等逻辑都是通过脚本进行控制,这些脚本主要集中在
STEAM库\steamapps\common\Stellaris\common
和
STEAM库\steamapps\common\Stellaris\events
如果英语好的玩家可以自己对应其中文件夹的名字进行翻译
工具
作为编程语言的一种,脚本语言需要正确的语法去描述逻辑,哪怕是一个符号的缺失,也会导致诸如无法开启游戏的错误发生,而记事本是不带有语法高亮的
建议先下载notepad++或者visual studio这类专有的编辑器,调整为正确的语法高亮模式,由于这个脚本之前我并没有见过,所以我使用的语法模式为lua,如果有朋友知道这是什么语言麻烦和我说一下
如果你自信自己可以不用这类辅助手段 跳过本步骤
入口
和大多数程序都带有一个main函数一样,在群星当中,游戏开始所对应的事件函数叫做on_game_start,这个函数所在的文件位于 common\on_actions\00_on_actions.txt 这个文件还拥有其他周期事件所对应的逻辑,如果你需要修改游戏本身的逻辑,可以在这里下手
以按照我添加了一个超级灵能天赋为例子,我将在下面重现操作步骤
步骤1 添加特性
特性文件位于 E:\steamLib\steamapps\common\Stellaris\common\traits 这个文件夹内文件结构如下
主要存放特性对应文件
00_admiral_traits.txt 舰长的特性
00_general_traits.txt 统治者特性
00_governor_traits.txt 元首特性
00_ruler_traits.txt 管理者特性
04_species_traits.txt 物种特性
以我的种族特性 灵能网络 为例 它被添加在物种特性文件内
trait_mental_network =
{
cost = 0 #费用,注意 为0的费用不仅表示免费,还不会被特性数量所记录,它将会被当作类似“幸存者”这样的特性计算
potential_crossbreeding_chance = 0.25
icon = "gfx/interface/icons/traits/trait_psionic_species.dds" #图标,这里我使用的是灵能的图标
opposites = { "" } #冲突特性列表,括号内的特性具有时将无法选择这个特性
improves_leaders = yes
initial = yes
randomized = no
modification = no
allowed_archetypes = { BIOLOGICAL LITHOID } #上面几个如果不知道是啥最好照抄,不然可能会被ai偷用你的专属作弊器
odifier = # 提供的效果列表
{
planet_jobs_engineering_research_produces_mult = 10 #一些非常imba的效果
planet_jobs_physics_research_produces_mult = 10
planet_jobs_society_research_produces_mult = 10
pop_housing_usage_mult = -1
leader_skill_levels = 100
species_leader_exp_gain = 10
pop_environment_tolerance = 0.50
army_damage_mult = 10
planet_jobs_worker_produces_mult = 1
leader_age = 800
}
} #注意 注意 注意 一定到备份你编辑的文件,随时注意括号的对应,不然真的会损坏游戏的
然后是统治者特性
leader_trait_generic_mental_network = #名字随意 不要和别的一样就行
{
cost = 0
modification = no
randomized = no # 随即获取 不知道有什么用 跟事件有关系?禁用防止电脑偷
improves_leaders = no
icon = "gfx/interface/icons/traits/trait_psionic_species.dds"
modifier =
{
army_morale = 3
army_morale_damage_mult = 3
army_damage_mult = 2
leader_skill_levels = 1000
species_leader_exp_gain = 10
}
immortal_leaders = yes #永生效果
leader_trait = { general }
leader_class = { general }
initial = no #使电脑无法使用
}
舰长
对应游戏文件
leader_trait_admiral_mental_network #仿写特性-心灵网络
{
cost = 0
modification = no
randomized = no # 随即获取 不知道有什么用 跟事件有关系?
improves_leaders = no
icon = "gfx/interface/icons/traits/trait_psionic_species.dds"
modifier =
{
ship_emergency_ftl_mult = -0.5
ship_weapon_range_mult = 4
ship_fire_rate_mult = 4
ship_speed_mult = 4
ship_hull_mult = 4
ship_weapon_damage = 4
ship_disengage_chance_mult = -0.25
damage_vs_country_type_swarm_mult = 2
ship_evasion_mult = 3
leader_skill_levels = 1000
species_leader_exp_gain = 10
}
immortal_leaders = yes #永生效果
leader_trait = { admiral }
leader_class = { admiral }
initial = no
}
统治者,实际上因为渣渣英语我到现在也不确定那个算是通用天赋,从游戏事件逻辑上看应该是ruler,但是在00_general_traits.txt内有个叫general的特性类型
leader_trait_governor_mental_network =
{
cost = 0
modification = no
randomized = no
improves_leaders = no
icon = "gfx/interface/icons/traits/trait_psionic_species.dds"
modifier =
{
planet_buildings_cost_mult = -0.5
planet_districts_cost_mult = -0.5
planet_building_build_speed_mult = 2
planet_stability_add = 500
planet_jobs_unity_produces_mult = 10
planet_jobs_energy_produces_mult = 10
planet_jobs_minerals_produces_mult = 10
planet_jobs_food_produces_mult = 10
planet_jobs_engineering_research_produces_mult = 10
planet_jobs_physics_research_produces_mult = 10
planet_jobs_society_research_produces_mult = 10
leader_skill_levels = 1000
species_leader_exp_gain = 10
}
immortal_leaders = yes #永生效果
leader_trait = { governor }
leader_class = { governor }
initial = no
}
科学家的最好别抄,因为我复制的谨慎的特性,但是不知为啥,这个特性并没和其他特性一样合并在一起,而是有一堆详细效果,其实就是对应一个考古失败概率降低
leader_trait_scientist_mental_network =
{
cost = 0
modification = no
randomized = no # 随即获取 不知道有什么用 跟事件有关系?
improves_leaders = no
icon = "gfx/interface/icons/traits/trait_psionic_species.dds"
modifier =
{
all_technology_research_speed = 2
science_ship_survey_speed = 1
vultaum_1_cat_research_speed_mult = 0.5
VULTAUMAR_research_speed_mult = 0.5
YUHTAAN_research_speed_mult = 0.5
FEN_HABBANIS_research_speed_mult = 0.5
IRASSIA_research_speed_mult = 0.5
leader_skill_levels = 1000
species_leader_exp_gain = 10
vultaum_2_cat_research_speed_mult = 0.5 #没错 下面的都是复制谨慎里头的
vultaum_3_cat_research_speed_mult = 0.5
vultaum_4_cat_research_speed_mult = 0.5
vultaum_5_cat_research_speed_mult = 0.5
vultaum_6_cat_research_speed_mult = 0.5
vultaum_7_cat_research_speed_mult = 0.5
vultaum_8_cat_research_speed_mult = 0.5
vultaum_9_cat_research_speed_mult = 0.5
vultaum_10_cat_research_speed_mult = 0.5
vultaum_11_cat_research_speed_mult = 0.5
yuht_1_cat_research_speed_mult = 0.5
yuht_2_cat_research_speed_mult = 0.5
yuht_3_cat_research_speed_mult = 0.5
yuht_4_cat_research_speed_mult = 0.5
yuht_5_cat_research_speed_mult = 0.5
yuht_6_cat_research_speed_mult = 0.5
yuht_7_cat_research_speed_mult = 0.5
yuht_8_cat_research_speed_mult = 0.5
yuht_9_cat_research_speed_mult = 0.5
league_1_cat_research_speed_mult = 0.5
league_2_cat_research_speed_mult = 0.5
league_3_cat_research_speed_mult = 0.5
league_4_cat_research_speed_mult = 0.5
league_5_cat_research_speed_mult = 0.5
league_6_cat_research_speed_mult = 0.5
league_7_cat_research_speed_mult = 0.5
league_8_cat_research_speed_mult = 0.5
league_9_cat_research_speed_mult = 0.5
league_10_cat_research_speed_mult = 0.5
league_11_cat_research_speed_mult = 0.5
league_12_cat_research_speed_mult = 0.5
league_13_cat_research_speed_mult = 0.5
league_14_cat_research_speed_mult = 0.5
irassian_1_cat_research_speed_mult = 0.5
irassian_2_cat_research_speed_mult = 0.5
irassian_3_cat_research_speed_mult = 0.5
irassian_4_cat_research_speed_mult = 0.5
irassian_5_cat_research_speed_mult = 0.5
irassian_6_cat_research_speed_mult = 0.5
irassian_7_cat_research_speed_mult = 0.5
irassian_8_cat_research_speed_mult = 0.5
irassian_9_cat_research_speed_mult = 0.5
irassian_10_cat_research_speed_mult = 0.5
irassian_11_cat_research_speed_mult = 0.5
cybrex_1_cat_research_speed_mult = 0.5
cybrex_2_cat_research_speed_mult = 0.5
cybrex_3_cat_research_speed_mult = 0.5
cybrex_4_cat_research_speed_mult = 0.5
cybrex_5_cat_research_speed_mult = 0.5
cybrex_6_cat_research_speed_mult = 0.5
cybrex_7_cat_research_speed_mult = 0.5
cybrex_8_cat_research_speed_mult = 0.5
cybrex_9_cat_research_speed_mult = 0.5
cybrex_10_cat_research_speed_mult = 0.5
cybrex_11_cat_research_speed_mult = 0.5
}
immortal_leaders = yes #永生效果
leader_trait = { scientist }
leader_class = { scientist }
initial = no #这两处使电脑无法使用
}
但是进入游戏就会发现,领袖并不能带有这些特性,因为这些特性既无法在升级时获得,也无法通过事件获得(因为没有对应的事件)
类似灵能/罐头这样的特殊种族特性是怎么给领袖加上buff的,游戏机制是这样实现的
首先 每当一个新的领袖出现在你的可雇佣列表内的时候 游戏会调用 common\on_actions\00_on_actions.txt 文件内的 on_leader_spawned 函数 让我们看看这个函数都干了啥
on_leader_spawned = {
events = #触发事件,按顺序进行触发
{
utopia.2509 # 调用事件utopia.2509 这个事件是判断是否有博学特性,如果有,就为领袖添加这个特性,下面的函数都是类似的行为
utopia.2510 # 是否为生化人
utopia.2560 # 是否为罐头
utopia.2651 # 是否有灵能潜质
utopia.6000 # 蜂巢政体的不朽特性
syndaw.1050 # 机器人
distar.173
utopia.524 #这里是我添加的作弊事件
}
random_events = { #这里是随机事件 感兴趣的朋友可以自己试试改改
80 = 0
20 = utopia.2601
}
}
我们看到,在这里仅仅实际上游戏每生成一个领袖的时候,都会调用一连串的事件,但是我们在游戏当中并没有看到生成的领袖既有罐头又信灵能这样的情况,那么说明这些事件本身就有一定的筛选能力,那么我们找到触发的事件,看看他们到底怎做了什么
其大部分调用的事件 utopia.* 这样的 所对应的文件路径为 \Stellaris\events\utopia_on_action_events.txt
以utopia.2509(博学特性)为例
country_event = {
id = utopia.2509 #事件id 必须唯一
is_triggered_only = yes
hide_window = yes
trigger = { #判断触发条件
from = {
species = { #必须具有的特性
has_trait = trait_erudite #具有种族特性:博学
NOR = { #不能具有的特性
has_trait = trait_cybernetic
has_trait = trait_psionic
has_trait = trait_latent_psionic
}
}
}
}
immediate = { #立刻发生的事情
from = {
if = {
limit = { leader_class = admiral } #leader_class 生成领袖的类型,这里是判断是否为舰长
add_trait = leader_trait_admiral_erudite #添加特性
add_ruler_trait = leader_trait_ruler_erudite #添加通用特性
break = yes #跳出事件,不然会在下面继续判断
}
if = {
limit = { leader_class = general }
add_trait = leader_trait_general_erudite
add_ruler_trait = leader_trait_ruler_erudite
break = yes
}
if = {
limit = { leader_class = governor }
add_trait = leader_trait_governor_erudite
add_ruler_trait = leader_trait_ruler_erudite
break = yes
}
if = {
limit = { leader_class = scientist }
add_trait = leader_trait_scientist_erudite
add_ruler_trait = leader_trait_ruler_erudite
break = yes
}
if = {
limit = { leader_class = ruler }
add_trait = leader_trait_ruler_erudite
add_ruler_trait = leader_trait_ruler_erudite
break = yes
}
}
}
}
那么我们就可以仿写出一个类似的事件
(如果你到这里还看不懂,那就抄吧)
country_event = #事件的标志结构
{
id = utopia.524 #事件必须有的id,这个id必须全局唯一
is_triggered_only = yes
hide_window = yes
trigger = #具备的条件,注意我这里是不带from={...}的 实际上我也搞不清楚这个符号的意思是啥,只要带了里面的条件判断就一直不满足,但是官方写的就没啥问题,反正能用就行
{
has_trait = trait_mental_network #如果你写了自己的特性,这里填上你写的名字
}
immediate
{
from =
{
if =
{
limit = { leader_class = admiral } #和前面一样的类型判断
add_trait = leader_trait_admiral_mental_network #为领袖添加特性
add_ruler_trait = leader_trait_ruler_mental_network #下同
break = yes
}
if =
{
limit = { leader_class = general }
add_trait = leader_trait_generic_mental_network
add_ruler_trait = leader_trait_ruler_mental_network
break = yes
}
if =
{
limit = { leader_class = governor }
add_trait = leader_trait_governor_mental_network
add_ruler_trait = leader_trait_ruler_mental_network
break = yes
}
if =
{
limit = { leader_class = scientist }
add_trait = leader_trait_scientist_mental_network
add_ruler_trait = leader_trait_ruler_mental_network
break = yes
}
if =
{
limit = { leader_class = ruler }
add_trait = leader_trait_ruler_mental_network
add_ruler_trait = leader_trait_ruler_mental_network
break = yes
}
}
}
}
其说明文本参见汉化的方法 看到这里说明你应该是有些写代码的底子的 相信这些小问题你完全可以搞定
|