钢铁雄心4吧 关注:492,698贴子:8,928,570

【控制台/代码】【千禧mod】部分千禧特有机制的控制台代码与变量

只看楼主收藏回复

1.仅讨论游戏机制和代码,不讨论也请尽量不要讨论背景、剧情、focus树等具体sen-si-tive内容
2.能力有限内容肯定出现不全、有错、版本落后等问题,欢迎补充、提问,但楼主的游戏本不在手边且日常工作较多,可能没法及时协助寻找、回答或改正、更新。[大家都尽力啦.jpg]
3.不包括原版控制台代码可完成的功能,如人口增减、快速建造(ic)等,建议搭配toolpack模组食用,可以省去大部分敲原版控制台代码的时间[doge]
4.可能分几天更新,大概就这些?
在正文开始之前,依照楼主(我)个人的对mod与本体代码的理解和经验,可以先对游戏过程中的变量做如下几个分类(其他mod的变量也大概可以这样分类):
1.自相关变量(例如债务、储蓄金、投资、地区生产率)与非自相关变量(例如:平均生产率、总发电量、GDP、劳动力、Employment rate)
这种分类主要影响其可修改性——自相关变量在每次更新调用时对其自身更新前数值增减,而非自相关变量基本上是多个自相关变量或非自相关变量的总和计算或各类平均计算(或者其他算法)得出,每次更新时与其自身在更新前数值无直接关联。
2.源头变量(如地区生产率、地区人口、工厂数、反应堆数)、过程变量(如GDP、Employment rate)、结果变量(火箭卫星数量、债务、储蓄金)这个分类可能没用,但是没用不太可能(划去),因为各个机制计算的相互作用,只对于协助理解单个机制内部的计算有用,不多赘述
3.机制分类,故名思意,主要作用于哪一部分机制(经济/political_or_eject/太空、导弹、核武)


IP属地:天津1楼2024-10-14 20:53回复
    补充分类4.(country)变量和地区(state)变量,区分变量不同的作用域(选中地区后控制台输入set_var 【变量】 【数字】会改变地区变量,右键地区/点击左上角各个选项卡进入外交或决议、policy等界面再输入会改变对应国家的country变量)
    正文
    1.经济系统部分
    1.1生产率
    生产率机制中,经济系统界面显示的平均生产率(好像叫这个)是一个非自相关变量(大概),由作为源头变量的各个state的省份生产率平均计算得来,而各个地区的省份生产率是自相关变量,变量名productivity_state_var,作用于各个地区
    控制台代码:
    set_var productivity_state_var 【数字】
    1.2财政(三个主要自变量)
    debt 债务、treasury储蓄金、int_investments对外投资
    country变量、自相关变量
    控制台代码:
    set_var ROOT.treasury 【数字】
    set_var ROOT.debt 【数字】
    set_var int_investments 【数字】


    IP属地:天津3楼2024-10-14 21:08
    收起回复
      2026-10-03 03:58:11
      广告
      不感兴趣
      开通SVIP免广告
      顶


      IP属地:湖北来自Android客户端4楼2024-10-14 21:15
      回复
        2.太空、导弹、防空、核武、核能(这几个有一部分代码是混在一起的(挠头))
        2.1装备库存数量(一个数组储存)
        missile_inventory_array^[装备型号]
        自相关变量、country变量、数组
        装备型号是一个2位至3位数,个位数代表第几代,十位和百位代表类型:
        11-18为洲际dd、101-108为运载火箭,111-118、121-128、131-138分别是三种卫星,set_var missile_inventory_array^146是killsat(大概是反卫星?太久没用,这个我抄的代码注释,我自己也看不懂了)
        set_var missile_inventory_array^153是rod_3(第三代奥丁之杖?还是铀棒?反正是动能武器)
        71-78、81-87(还是91-98?)是防空反导,手边没游戏文件我记不清了,基本上是生产界面从上到下依次这么排列下来
        使用例:set_var missile_inventory_array^108 100
        效果为将第八代运载火箭数量设置为100
        2.2核弹
        var_nuclear_material_stockpile 武器级燃料
        自相关变量、country变量
        使用例:set_var ROOT.var_nuclear_material_stockpile 1000
        nuclear_warhead_inventory_array^[1-15] 各类核弹头库存
        自相关变量、country变量、数组
        大概是库存界面从上往下顺延……
        使用例:set_var nuclear_warhead_inventory_array^15 1000 效果:末位类型弹头数量设为1000
        2.3核能
        change_resource 核燃料改变
        country变量、过程变量
        使用例:
        set_var change_resource 1000
        【回车后输入】effect change_reactor_grade_material_effect
        效果:增加1000核燃料
        temp_change 反应堆(生产核燃料那个,不是发电!)建设量改变值
        country变量、过程变量
        使用例:
        set_var temp_change 10
        effect build_enrichment_facilities_effect
        效果:消耗资金,增加10反应堆(生产核燃料那个,不是发电!)


        IP属地:天津5楼2024-10-14 21:31
        回复
          3.policy、government和ideology
          3.1派对
          party_pop_array^[0-23] 各个派对的支持率
          自相关变量、country变量、数组
          使用例:
          set_var ROOT.party_pop_array^4 1
          从上往下数第5个派系支持率设为100%(需要搭配增加调色盘(主ideology(蓝棕灰绿黑))支持率的代码或功能,否则下一次变动会等比例平分或者变回去)
          3.2内部派系(农民、中小企业、教士等)
          temp_opinion态度变化值(搭配effect change_[派系代码]_opinion使用)
          country变量、过程变量
          使用方法:
          set_var ROOT.temp_opinion 100
          【回车后输入】effect change_【按tab键,在一串change_开头,_opinion结尾的代码里按照英文找你要的派系】


          IP属地:天津6楼2024-10-14 21:44
          收起回复
            4.杂项
            欧盟
            eurosceptic 某个欧洲国家的欧洲怀疑主义,欧盟界面显示的那个【欧盟的欧洲怀疑主义】是非自相关变量
            自相关变量、country变量
            控制台代码:set_var ROOT.eurosceptic [num]
            老电脑上记录的就先这些,明天拿新笔记本里存的的看看有没有什么补充


            IP属地:天津8楼2024-10-14 21:49
            回复
              加油


              IP属地:山东来自iPhone客户端9楼2024-10-14 21:56
              回复
                顶


                IP属地:湖北来自Android客户端10楼2024-10-14 22:11
                回复
                  2026-10-03 03:52:11
                  广告
                  不感兴趣
                  开通SVIP免广告
                  顶,有劳动人口比例相关的吗冲高人均gdp给我整麻了


                  IP属地:中国香港来自iPhone客户端11楼2024-10-15 01:31
                  收起回复
                    补充经济系统部分机制:
                    1.基础:几个非自相关过程变量从各个state计算更新的方式(scripted_effect\00_money_system.txt里的update_state_variables效果)
                    该部分代码分两部分:图一,汇总各个state的各项变量
                    图二,对汇总值进一步计算,之后激活calculate_gdp(下一个函数就是,计算tag的gdp)

                    其中,我们着重关注的两个重要变量计算是overall_productivity(tag的总生产率)与population_total(tag的以100k为单位的总人口数)
                    population_total的算法较为简单,各个地区1k单位人口数据(state_population_k)求和,乘以0.01
                    population_total_m是以百万为单位的人口数,population_total乘以0.1得来(图二前三行)
                    overall_productivity分为两个部分:1.对于每个省份生产率乘0.001再乘地区100k人口数(过渡变量temp_pop)并加算至overall_productivity变量内;2.对第一步结束后的overall_productivity变量乘0.1,除以population_total_m(以百万为单位的人口数),再乘1000。简化计算公式:(各地区生产率乘人口数求和)/总人口数(题外话:乘这堆0.001又乘1000乘回来大概是为了防止数值溢出?)


                    IP属地:天津12楼2024-10-15 12:58
                    回复
                      控制台玩家狂喜


                      IP属地:江苏来自Android客户端13楼2024-10-15 13:02
                      回复
                        2.GDP计算机制
                        2.1 劳动力计算(过程变量 workforce_total)
                        (开头如图,第一句就是清零gdp,典型的非自相关变量,所以直接改gdp这类数大概不会持续生效的)

                        workforce_total_multiplier 过程变量,非自相关变量,计算中为1+各类修正(科技、ideas等)的值,上下限为0至1.5
                        workforce_total的计算:将workforce_total的值设置为population_total_m的值,然后乘0.6(定死在代码里,游戏里大概改不了要去文件里改)再乘workforce_total_multiplier,注意——由于workforce_total_multiplier存在上下限(clamp_temp_variable这一行)缘故workforce_total最高不会超过0.9倍的population_total_m
                        workforce_total_display:gui显示的劳动力数量(单位:百万)
                        workforce_total_percentage_display:显示的劳动力占总人口百分比,等于workforce_total_display除以population_total_m
                        今天更到这里


                        IP属地:天津14楼2024-10-15 13:12
                        回复
                          2.2 Employment与GDP的具体计算机制(涉及到大部分变量为非自相关变量,因此下文非自相关变量不作备注)
                          2.2.1资源提供的相关就业和gdp计算,
                          相关代码如图所示

                          total_resource_amount 资源总数(拥有的6项资源数值总和)
                          resource_sector_workers_multiplier 资源开采使用的劳动力倍率(tag的精神科技等修正决定,以下省略)
                          resource_sector_workers 资源开采最多【需要使用(在判断大小后代表 应该使用)】的劳动力,单位:百万
                          计算公式为 resource_sector_workers=total_resource_amount*0.1*(1+resource_sector_workers_multiplier)
                          max_resource_workers 资源开采最多可以使用的劳动力,是workforce_total的0.75倍
                          如果资源开采需要使用的劳动力大于可以使用的劳动力,则resource_sector_workers的值设置为max_resource_workers的值
                          resource_sector_worker_fulfillment 资源开采劳动力填充率,等于max_resource_workers除以resource_sector_workers
                          在计算完上述变量后,workforce_total将减去资源开采最多应该使用的劳动力
                          #计算从资源开采获得的GDP(gdp_from_resource_sector)
                          gdp_from_resource_sector_multiplier 从资源开采获得的GDP倍率
                          gdp_from_resource_sector_tech_multiplier 从资源开采量修正(local_resources_factor)获得的GDP倍率,
                          gdp_from_resource_sector 从资源开采获得的GDP,
                          计算公式为total_resource_amount乘0.5乘(1+gdp_from_resource_sector_multiplier)乘(1+gdp_from_resource_sector_tech_multiplier)
                          经济系统内资源开采部分计算机制结束,明天更新农业(大概)


                          IP属地:天津15楼2024-10-16 12:54
                          回复
                            勘误:看来农业机制的解析要往后顺延一天,resource_sector_workers的计算少除了一个gdpc_converging_var
                            所以实际上resource_sector_workers的公式是:
                            total_resource_amount * 0.1 * (1+resource_sector_workers_multiplier) / gdpc_converging_var
                            gdpc_converging_var的这个计算比较复杂:
                            2.2.0 补充:人均gdp的收敛计算(gdpc_converging_var 人均gdp收敛变量,※自相关变量【可以改,但是会随着时间推移自行回落】,country变量)
                            在calculate_gdp这个方法的末尾,gdp_per_capita(人均gdp变量)被计算出来:
                            clamp_variable = { var = gdp_total min = 0.1 }
                            set_variable = { gdp_per_capita = gdp_total }
                            divide_variable = { gdp_per_capita = population_total_m }
                            而在MD_on_actions.txt中的每周结算动作下:worker_requirements_variable_gdpc_converging这一方法被调用,这一方法同样出自calculate_gdp所在的00_money_system.txt中:
                            worker_requirements_variable_gdpc_converging = {
                            set_temp_variable = { temp_difference = gdp_per_capita }
                            subtract_from_temp_variable = { temp_difference = gdpc_converging_var }
                            multiply_temp_variable = { temp_difference = 0.25 }
                            add_to_variable = { gdpc_converging_var = temp_difference }
                            }
                            temp_difference等于(当前人均gdp - 上次结算的人均gdp收敛变量) * 0.25
                            gdpc_converging_var等于上次结算的人均gdp收敛变量+本次结算的temp_difference,
                            化简后等于0.25 * 当前人均gdp +0.75 * 上次结算的gdpc_converging_var
                            各个tag游戏开始时的gdpc_converging_var初始值等于history/countries目录下的各个tag的文件里的gdp_per_capita变量(初始化机制在00_on_anctions里)


                            IP属地:天津16楼2024-10-17 13:17
                            回复
                              2026-10-03 03:46:11
                              广告
                              不感兴趣
                              开通SVIP免广告
                              2.2.2农业机制提供的就业与gdp计算
                              2.2.2.1 农业劳动力计算 (agriculture_workers,农业劳动力)
                              temp_gdp_per_capita,人均gdp收敛值在农业机制计算时的缓存,初始值为等于上次gdp计算后的gdpc_converging_var,同时给与一个等于agriculture_workers_threshold_control(农业工人阈值控制)的下限值
                              agriculture_workers_percentage(农业劳动力百分比):
                              以上一次gdp计算后gdpc_converging_var的值做判断,当gdpc收敛变量小于1.3时:agriculture_workers_percentage的计算公式为gdpc_converging_var * (-0.02) + 0.9(下限高于0.874)
                              当gdpc_converging_var大于等于1.3时:
                              agriculture_workers_threshold_control(农业工人阈值控制)等于1.076,是一个常量(至少我没有看到哪个机制改变了它)
                              agriculture_workers_percentage_multiplier(农业劳动力百分比倍率)= (-1.076 / temp_gdp_per_capita) + 2
                              agriculture_workers_perc_modifier(农业劳动力百分比修正)精神科技等决定,略
                              agriculture_workers_percentage = 1.076 * 0.9 / temp_gdp_per_capita * 倍率 * 修正;计算后取值范围(0至0.9)
                              agriculture_workers = workforce_total * agriculture_workers_percentage
                              2.2.2.2 农业gdp计算
                              gdp_from_agriculture(农业来源的gdp)
                              agri_productivity_multiplier 农业生产率修正,科技和内容决定,略
                              agriculture_gdp_generation 农业gdp单位产出,等于temp_gdp_per_capita * agri_productivity_multiplier
                              gdp_from_agriculture(农业来源的gdp)的最终计算公式:
                              gdp_from_agriculture = agriculture_workers * temp_gdp_per_capita * agri_productivity_multiplier * 1.337
                              2.2.2.3 农业经济机制
                              gdp_per_capita>20且民工数量大于1时将结束这一机制
                              起个头,明天继续


                              IP属地:天津17楼2024-10-18 13:12
                              收起回复