钢铁雄心4吧 关注:440,107贴子:8,007,030
  • 12回复贴,共1

关于千禧黎明mod经济与就业相关的修改

只看楼主收藏回复

首先感谢https://tieba.baidu.com/p/8744339149帖子中,“再谱盛世”大佬提供的灵感。
并声明,以下内容中仅涉及技术讨论,所给出的数字和代码仅供参考。


IP属地:北京1楼2025-03-06 20:14回复
    〇.序言
    关于千禧这个mod中“失业率”和“生产所需人口”的不合常理之处常使人诟病,例如中、美、印、埃及等人口大国,即使用控制台将所有建筑槽位建满,也往往出现与现实中截然不同的“奇高失业惩罚debuff”。
    而之所以出现如此现象主要是由于“原版的‘必需消费品工厂数量’仅适用于二战时期军事模拟,而MD这样一个侧重于种田的近现代mod,虽然有经济系统作为补充,可是与生产板块融合的并不好,至少在数值和机制上考虑不周”
    特别是:其仅考虑到了随人均GDP增长所带来的生产率增长会使得同等产能所需工人数量下降,但并未将消费品工厂数量与人口挂钩,工厂规模也不能随人口改变,给的建筑槽位也严重不符合地区人口之比。所以虽然在计算人均GDP时还算看得过去,但失业率上就是重灾区了。
    故,在此提出修改建议和方式,欢迎各位参考。
    *写在前面:以下所有的修改都应在“Millennium Dawn”的mod文件中进行,如果你是从steam创意工坊上订阅的mod,代码的地址在SteamLibrary\steamapps\workshop中;如果你是学习版玩家,则代码的地址在解压后的mod文件夹中。
    *特别提示a:如果你还订阅了其它修改了经济系统的submud(下以红色之梦为例),修改需要在该submod文件而非原版文件中进行。
    *特别提示b:敬请各位善用文本编辑工具中的检索功能,请找到代码中不带我修改数值的部分定位语句。


    IP属地:北京2楼2025-03-06 20:15
    回复
      一.修改建筑所需基础人数
      考虑到游戏中工厂包含的人数应统计整个生产链条(这一点在原版代码注释中也提及了),则应适当增多工厂所需人数。
      以下给出可能的参考值:
      # Factories & Offices Employment
      set_temp_variable = { workers_per_civ_fac = 1.025 }
      set_temp_variable = { workers_per_mil_fac = 0.075 }
      set_temp_variable = { workers_per_dockyard = 0.125 }
      set_temp_variable = { workers_per_office = 0.650 }
      set_temp_variable = { workers_per_agriculture_district = 0.550 }
      但是,这样修改经济计算会变,但是建筑界面说明不会变,因为汉化文件“localisation\simp_chinese\replace\replaced_from_vanilla_buildings_l_simp_chinese.yml”中关于该说明是以固定数量呈现的;同理经济界面说明也不会变,因为汉化文件“localisation\simp_chinese\MD_money_l_simp_chinese.yml”中关于该说明也是以固定数量呈现的。所以,如果想要界面上也改变,则需要修改上述汉化文件内容。
      *提示:在“红色之梦”这一submod中存在“中国农业人口修正”相关的代码,增加了中国农业人口就业数量,修改上述商品化农业区所需工人数时应注意这一点。
      (个人建议是将其中的tag限制扩展到所有人口密集的国家)
      将:
      limit = {
      original_tag = CHI
      }
      修改为:
      limit = {
      OR = {
      original_tag = CHI
      original_tag = RAJ
      original_tag = DRC
      original_tag = IND
      original_tag = JAP
      original_tag = NIG
      original_tag = EGY
      original_tag = BRA
      original_tag = ARG
      original_tag = PAK
      original_tag = BAN
      original_tag = VIE
      original_tag = SIA
      original_tag = ETH
      }
      }


      IP属地:北京3楼2025-03-06 20:16
      收起回复
        二.根据国家人口修改建筑所需人数乘数
        这应该是原版关于工作所需人数随GDP变化的部分语句,在“00_money_system.txt”文件中可以定位到相关位置
        set_temp_variable = { worker_requirement_gdp_multiplier = 3 }
        divide_temp_variable = { worker_requirement_gdp_multiplier = temp_gdp_per_capita }
        add_to_temp_variable = { worker_requirement_gdp_multiplier = 1 }
        set_variable = { workers_requirement_gdp_multiplier_display = worker_requirement_gdp_multiplier }
        multiply_temp_variable = { workers_per_civ_fac = worker_requirement_gdp_multiplier }
        multiply_temp_variable = { workers_per_office = worker_requirement_gdp_multiplier }
        multiply_temp_variable = { workers_per_agriculture_district = worker_requirement_gdp_multiplier }


        IP属地:北京4楼2025-03-06 20:16
        收起回复
          为了更好的体现现实世界关于随人口变化导致的相关产业所需劳动力比例不变而非数量不变这一特点,在原版的与人均GDP负相关的工厂所需就业人数变化的基础上,加入了与人口正相关的变化,以此来修正人口大国的高失业率问题。(p.s.本来想按地区人口修改的,发现原mod制作者怕占用性能,经济系统都是以国家为单位的。如果各位有兴趣,可以考虑参照TNO地区gdp相关的代码修改)
          以下给出参考代码:
          #设置人口影响因子
          set_temp_variable = { worker_requirement_population_multiplier = 0.005 }
          multiply_temp_variable = { worker_requirement_population_multiplier = population_total_m }
          add_to_temp_variable = { worker_requirement_population_multiplier = 0.5 }
          set_variable = { worker_requirement_population_multiplier_display = worker_requirement_population_multiplier }
          #并用该因子修改原文件中的临时变量
          multiply_temp_variable = { workers_per_civ_fac = worker_requirement_population_multiplier }
          multiply_temp_variable = { workers_per_office = worker_requirement_population_multiplier }
          multiply_temp_variable = { workers_per_agriculture_district = worker_requirement_population_multiplier }


          IP属地:北京5楼2025-03-06 20:17
          回复
            同时,为了方便展示,可以在汉化文件的“MD_money_l_simp_chinese.yml”中,
            在total_civilian_factories_amount_tt_delayed中插入
            人口对§Y民用工厂劳动力§!的影响:[?workers_requirement_population_multiplier_display|-%0]\
            在total_offices_amount_tt_delayed中插入
            人口对§Y办公园区劳动力§!的影响:[?workers_requirement_population_multiplier_display|-%0]\n
            在total_agriculture_district_amount_tt_delayed中插入
            人口对§Y商业化农业区劳动力§!的影响:[?workers_requirement_population_multiplier_display|-%0]\n
            并修改原来固定值(就是数字***k)为对应的变量


            IP属地:北京6楼2025-03-06 20:17
            回复
              三.动态显示?
              但这样一来,原本我们在开头列的理想值就不等于实际人数的真实值。那能否设置一个全局变量使其动态变化并输出到文本中呢?
              答案是否定的,由于存在“Note that namespaces cannot be used everywhere. In the majority of the user interface, such as the names for wars or countries, they will not work properly, instead appearing exactly as in localisation, with the square brackets still visible. ”(援引自:https://hoi4.paradoxwikis.com/Localisation#Namespaces),所以无法将其以变量形式呈现(除非你自己重写一个GUI)


              IP属地:北京10楼2025-03-06 20:19
              回复
                四.修改建筑经济花费
                更改建筑花费可以在"common\buildings\00_buildings.txt"中修改对应数值,个人建议是将民工,船坞,办公园区的生产花费适当改高一些,这样更能体现内/外部投资与经济重心选择的作用,也比较符合现实世界的工业扩张速度


                IP属地:北京11楼2025-03-06 20:20
                回复
                  五.修改建筑税收产生量
                  可以在“00_money_system.txt“文件中的如下语句修改对应的数值:
                  set_variable = { civil_fac_tax = industrial_complex_total }
                  multiply_variable = { civil_fac_tax = 2.5 }
                  set_variable = { military_fac_tax = military_fac }
                  multiply_variable = { military_fac_tax = 0.2 }
                  set_variable = { dockyard_tax = dockyard_fac }
                  multiply_variable = { dockyard_tax = 0.2 }
                  set_variable = { office_tax = office_park_total }
                  multiply_variable = { office_tax = 5 }
                  set_variable = { agriculture_district_tax = agriculture_district_total }
                  multiply_variable = { agriculture_district_tax = 2.25 }


                  IP属地:北京12楼2025-03-06 20:20
                  回复
                    六.修改建筑GDP产生量
                    原版中民用工厂产生的GDP竟然还没有商业化农业区划多,这显然不合理!而且更新后的MD还容易出现GDP太大导致数值溢出的问题!可以在“00_money_system.txt“文件中的如下语句修改对应的数值:
                    multiply_temp_variable = { gdp_from_civs = 20 }#was 15, original 24.8
                    multiply_temp_variable = { gdp_from_mils = 1 }#was 9, original 15.5
                    multiply_temp_variable = { gdp_from_dockyards = 1 }#was 9, original 15.5
                    multiply_temp_variable = { gdp_from_offices = 50 }#was 26, original 38.8
                    multiply_temp_variable = { gdp_from_agriculture_district = 25 }#was 26, original 38.8


                    IP属地:北京13楼2025-03-06 20:20
                    回复
                      其实最关键的因素是非商业人口比例随着人均gdp改变的调整


                      IP属地:广西来自Android客户端14楼2025-03-10 15:48
                      回复