ck3 1.12瘟疫机制相关参数解释

瘟疫爆发和传播的相关参数,P社都写在了Crusader Kings IIIgamecommonscript_values6_ce1_epidemics_values.txt里面。这里是根据1.12.4版本的文件记录的quick reference。 common concept 瘟疫的严重性有minor、major、apocalyptic三级,在modding里这三个也是literal value可以直接用在比较intensity的语境里。 爆发 每级严重性有两组值,一个是default value,一个是mult value,还有一个是最近发生过瘟疫的recent_epidemics_outbreak_mult_value。在游戏文件中有这么个用法1,也就知道第一个是基础值,第二个是用来做乘法的修正,第三个也是修正: 1 2 3 4 5 6 7 8 9 10 outbreak_intensities = { minor = { outbreak_chance = { value = outbreak_chance_minor_default_value multiply = outbreak_chance_minor_mult_value multiply = recent_epidemics_outbreak_mult_value # … } } } 爆发的概率是指:这个等级的瘟疫在一个potential province爆发的概率(每年)。 基础值及其影响因素 minor、dysentery(血痢)的起始值是0.01% major的是0.001%…

CK3 modding 笔记(2)

Override原版游戏文件 起因是1.12版本引入的瘟疫事件过于离谱,例如在贴吧臭名昭著的“君主之触”事件,由于没有内置CD所以甚至可以1分钟爆10次;从游戏roleplay的角度来看,就像是我作为一个国王不断在领地内瞬移,跟贱民们握手。这种问题就没办法,必须要对原版游戏文件进行override才能修改事件内容。 其实ck3的这个mod系统,基本上是等同于后来的覆盖先来的,而游戏原版文件是第一个被加载的,所以只需要使用正确的mod路径进行覆盖就会生效。 例如想要将原版游戏的eventsdlcce1physician_epidemic_events.txt内的physician_epidemic_events.1040事件进行修改,就只需要在mod文件夹的events里面建立一个.txt文件,里面包含以下内容: 1 2 3 4 5 namespace = physician_epidemic_events physician_epidemic_events.1040 = { # 进行你的自定义 } 那么游戏加载的时候就会用你的mod的这个事件override掉原版的同ID事件。 如何实现“这是我直辖的地吗”的逻辑 起因是在解决physician_epidemic_events.1040轰炸的时候发现它的trigger是realm_has_any_epidemic,这是一个scripted trigger,内容是: 1 2 3 4 5 6 7 8 9 10 realm_has_any_epidemic = { any_sub_realm_county = { count >= $SIZE$ any_county_province = { any_province_epidemic = { outbreak_intensity >= $INTENSITY$…

CK3 mod 修复记录 (1)

CK3有一个mod叫做Configurable News Feed,历经三代作者,现在还在更新的是Configurable News Feed – Updated。这个mod能够自定义自己想要收到的通知,近至至亲远达宗族成员、上下级的生老病死都可以自定义接受与否,对于扮演家族长非常有意义。但是问题在于,这个mod在普通模式下会导致成就不能解锁,在铁人模式下会导致设置菜单打不开——configurable这个核心没了,那就麻了;而对于我来说,能够解锁成就是游戏的核心驱动力。所以,昨天晚上我决定下手解决这个问题,并且花了一个钟完全了解了这个症结所在,成功帮助维护者修复了这个bug。 What 最早在2023年5月18日的时候Sunghowl提出这个mod会禁用成就,随后B flat表示铁人模式会让configuration button失效;之后有很多玩家遇到了相同的问题。 Why Lost Nomad指出了问题所在:gui/newsfeed.gui中使用了ExecuteConsoleCommand指令,导致成就被锁定。 How 之前在评论区或者什么地方我看到了一位玩家曾经提出,有一个mod曾经也是这样创建窗口的,因为在以前这是在runtime创建窗口的唯一方式;而现在有了另外的方法,所以那个mod通过先创建窗口然后hide了它,在需要的时候才visible,来解决了问题。这便是思路。 通过查阅ck3 wiki(其实是搜索ExecuteConsoleCommand而出现的)Interface页面,主要是New windows and toggles一节,了解到需要做以下改动: 创建gui/scripted_widgets路径并创建一个文件newsfeed_setting.txt来让窗口系统在启动时把窗口创建出来 通过visible field来控制窗口的可见性,并修改相关的button代码来让用户能够控制可见性 分析完成,那么我们打开问题之源gui/newsfeed.gui,看到以下段落: 1 2 3 4 5 6 7 8 9 10 11 12 state = { name = open_settings trigger_when = "[GetVariableSystem.Exists('newsfeed_settings_shown')]" on_start = "[ExecuteConsoleCommand('gui.CreateWidget gui/newsfeed_settings.gui…