欧陆战争4吧 关注:64,928贴子:1,596,265
  • 16回复贴,共1

关于btl中事件生效机制的进一步探索

只看楼主收藏回复

rt,本文是我在在mod制作中针对在编辑事件部分时遇到的问题,进行分析总结后得出的经验,希望能够帮助到想要制作欧4mod的同好
牢洁镇楼~


IP属地:广东来自Android客户端1楼2024-04-25 13:45回复
    关于事件的基本知识请参见鸵鸟的文章
    https://tieba.baidu.com/p/6062313304?share=9105&fr=sharewise&see_lz=0&share_from=post&sfc=copy&client_type=2&client_version=12.58.1.0&st=1714023469&is_video=false&unique=5EEB1415C18EB837B7B82A5462096833


    IP属地:广东来自Android客户端3楼2024-04-25 13:47
    收起回复
      先摆结论
      1,士气相关事件触发的条件有三种:0占领城市、1击杀目标、2到达回合,这三者的影响方式大相径庭。
      2,士气事件的作用目标是军团(即国家),想要改变指定军团的士气,就需要在粉色段输入指定军团的编号(如fra),但是这个方式不对占领城市类事件(0类)生效
      3,击杀目标(1)事件可以不指定军团
      4,指定回合触发(2)事件必须指定军团,否则事件不生效


      IP属地:广东来自Android客户端4楼2024-04-25 13:55
      收起回复
        补图


        IP属地:广东来自Android客户端5楼2024-04-25 13:55
        回复
          首先是占领类事件
          可以看到,在btl中,我指定了该事件作用的目标是pru普鲁士,该事件的预计效果是当任意军团占领法兰克福后,普鲁士会获得士气提升
          但是,在实际测试中,我控制hes格里芬,占领法兰克福后,士气上升的目标却不是普鲁士,而是格里芬



          IP属地:广东来自Android客户端6楼2024-04-25 14:01
          回复
            若改动btl,使上述事件效果变为士气下降,神奇的事情又发生了作用军团变为了法兰克福原先的所有者rhc莱茵联邦
            这证明,占领城市改变士气类事件,作用目标不仅不受指定军团控制,还会自动根据效果的正负选择生效的军团


            IP属地:广东来自Android客户端7楼2024-04-25 14:05
            回复
              针对上述现象的理论分析稍后再说
              现在针对第二种情况,击杀目标触发事件
              这次我们用牢洁当靶子
              可以看到,按照btl内容,本事件的效果是当安洁被击杀后,hes格里芬军团会出现士气单降(如p3手指所示)




              IP属地:广东来自Android客户端8楼2024-04-25 14:12
              回复
                如果我们删去了686573这一行,改为000000,会发现事件所影响的军团变为了rus俄国(注意看双降变单降了)
                倘若进一步将效果由01单降改为00上升,即负面效果改为正面效果,可以发现作用军团仍然是rus俄国
                这证明击杀触发(01类)事件可以指定军团,也可以不指定。假如不指定军团,则事件效果只作用于与该事件有关的单位所属的军团,且不会因为效果的正负而改变作用目标



                IP属地:广东来自Android客户端9楼2024-04-25 14:19
                收起回复
                  指定回合触发士气改变就不配图了,总之就是必须指定军团,否则效果跟04一样,所有军团均不发生改变


                  IP属地:广东来自Android客户端10楼2024-04-25 14:22
                  回复
                    楼主睡一会,等会发so层面理论分析


                    IP属地:广东来自Android客户端11楼2024-04-25 14:23
                    回复
                      so文件的原理概述
                      so涉及thumb指令,可以用恰当方式打开为高级语言。
                      其中涉及内存的运行原理,可以简单理解为军团数据作为一个值通过一个函数_ZN14CEntityCountry15FindCountryByIDEPKc被输入到了一个寄存器中,需要使用的时候再从寄存器中取出。
                      占领事件不受btl控制的原因在于该函数并没有调用存储在寄存器中的军团数据,即_ZN14CEntityCountry15FindCountryByIDEPKc缺席。但是它有一个额外的操作来判断地块归属。地块归属的判定逻辑是:另一个函数Occupybyarmy将判断行动前后地块上单位军团的归属,如果相异则修改寄存器R4,而地块的原主的数据则存储在R5中。现在再回头看这段函数,对于占领事件,加士气效果对R4生效,即对新主人、占领方生效;而减士气效果对R5生效,即对原主人、被占领方生效。
                      击杀事件即使不输入军团数据也能执行的原因,在于它有一个多余流程(黄框),即在军团数据为空的时候仍然可以按照 被击杀单位所属的军团 执行并生效。
                      回合触发事件则没有上述流程,所以当军团值为0时,不会对士气做出改变




                      IP属地:广东来自Android客户端15楼2024-04-25 22:52
                      回复
                        最后感谢@和泉纱雾🌸♬ 提供的理论指导👍上述分析均基于纱雾针对so的研究而得出的结论


                        IP属地:广东来自Android客户端16楼2024-04-25 22:53
                        回复
                          老哥你是上海交大毕业的吗


                          IP属地:江西来自Android客户端17楼2024-04-27 15:21
                          回复