x4基石吧 关注:17,985贴子:248,467

【改派】关于瞬间建造功能按钮的可行性研究

只看楼主收藏回复

作为一个喜欢从代码层面修改游戏的从来不遵守规则的玩家,我在吧里看到这样一个帖子,楼主希望找到一个mod能够把空间站模拟器中那个瞬间建造的功能按钮挪进其他游戏开局里用,我通过以前解析存档代码和游戏本体大部分定义代码的经验判断这应该不可行,但抱着科学严谨的精神,还是来探究一下到底是什么实现了瞬间建造,能否把实现它的代码块搬运到其他地方去。


IP属地:江西1楼2023-07-30 14:42回复

    首先我开局了一把空间站设计模拟器,然后存档,然后将存档代码提取出来,然后遍历代码分析。最终结果是,存档里没有关于瞬间建造的代码描述,说明这是一个存在其他脚本里等着被调用的功能模块。既然他是被调用的,那么就应该存在一个全局参数来使得他可以被调用,在遍历全局参数后我初步判断是start="x4ep1_gamestart_workshop"
    如果判断没错,那么ego应该是把瞬间建造这个功能和空间站设计模拟器这一本质上是游戏的开局模式绑定在一起了。


    IP属地:江西2楼2023-07-30 14:46
    回复
      2026-02-14 00:50:58
      广告
      不感兴趣
      开通SVIP免广告

      但是神TM这个到底这个参数是从哪里引用出来的,于是我采取了最简单暴力的方式,遍历X4 Foundations这个文件夹内整整27G的代码,为了护肝我把手里能用上的代码工具全都用上了,还把我22美元一个月养着的ChatGPT-4都叫来帮忙了。最终找到了一段最有可能的代码:
      if (ffi.string(C.GetGameStartName()) == "x4ep1_gamestart_workshop") and (not menu.confirmModuleChangesActive()) and ((C.GetCurrentBuildProgress(menu.container) >= 0) or C.IsBuildWaitingForSecondaryComponentResources(menu.container)) thenrow[1]:setColSpan(3):createButton({ helpOverlayID = "force_modulechanges", helpOverlayText = " ", helpOverlayHighlightOnly = true, active = true }):setText(ReadText(1001, 11919), { halign = "center" })row[1].handlers.onClick = menu.buttonForceBuild
      这段代码主要描述了,如果游戏的开局模式是空间站设计模拟器,然后你设计的空间站确认无误开始建造了,当前建造的进度大于或等于0或者当前建造正在等待二级组件资源,那么将会创建一个名字是(1001, 11919)的按钮,这个按钮按下去以后就会执行menu.buttonForceBuild函数。
      进行到这里,可以推测(1001, 11919)这个名字大概率就是瞬间建造,而按钮执行的menu.buttonForceBuild函数大概率就是实现瞬间建造功能的函数


      IP属地:江西3楼2023-07-30 15:00
      收起回复
        说实话进行到这一步以后想将瞬间建造作为mod来实现的可能性已经很低了。
        但谁让我这两天休息呢,于是我又继续遍历了一遍代码,然后找到了定义menu.buttonForceBuild是什么的
        function menu.buttonForceBuild()
        C.ForceBuildCompletion(menu.container)
        menu.updatePlan = getElapsedTime() + 0.1
        end
        这个定义很简单,就是,menu.buttonForceBuild这个函数会调用C.ForceBuildCompletion这个函数。
        又调用了一个新函数,但是这个新函数看名字也能看出来了,是让当前建造立即完成的


        IP属地:江西4楼2023-07-30 15:17
        回复
          目前我的作业就进行到这一步了,现在电脑后台的代码编辑器和chatgpt-4都在全力寻找ForceBuildCompletion这个函数在哪里,我闲着没事就来先水一水贴吧。等水完了估计也找完了


          IP属地:江西5楼2023-07-30 15:26
          回复
            好消息,我水完贴吧以后确实也找到ForceBuildCompletion在哪了。
            坏消息,在X4.exe里


            IP属地:江西6楼2023-07-30 15:29
            收起回复
              以上就是我全部的研究结果了,你要真问我能不能把瞬间建造搬走,我只能说很难,这东西压根不是X4的mod里简单一个add or replace就能实现的东西,就好像汽修店的师傅能帮你改装轮胎,改装电池,甚至改装发动机和底盘,但他真的很难做到让一辆五菱宏光拥有两栖气垫船的越野能力


              IP属地:江西7楼2023-07-30 15:39
              收起回复


                IP属地:宁夏8楼2023-07-30 15:50
                收起回复
                  2026-02-14 00:44:58
                  广告
                  不感兴趣
                  开通SVIP免广告
                  这属于是架构层面的改动了ego为了“防止”玩家太逍遥实在是煞费苦心


                  IP属地:江西来自Android客户端9楼2023-07-30 16:55
                  收起回复
                    很好


                    IP属地:浙江来自Android客户端10楼2023-07-30 17:41
                    收起回复
                      网上有1分钟建造mod,能不能改成1秒钟建造?


                      来自Android客户端11楼2023-07-30 18:00
                      收起回复

                        当然,就像我之前说的那样,只是很难实现而已,并不是完全无法实现,我目前通过直接修改游戏本体代码成功在其他存档里复现了瞬间建造这一功能按钮,但是我目前还无法找到将这种修改作为一个mod来实现的办法,考虑到休息的时间已经结束了……吧友愿意等的话可以等等看,说不定哪天就成了。
                        另外,这东西如果真的变成mod了那毫无疑问会和所有改变UI的mod不兼容,以及游戏更新以后也会失效


                        IP属地:江西12楼2023-07-30 19:49
                        收起回复
                          虽然没看懂 但是感觉很厉害


                          IP属地:江苏13楼2023-08-01 01:35
                          回复
                            插眼


                            IP属地:江苏来自Android客户端14楼2023-08-01 08:57
                            回复
                              2026-02-14 00:38:58
                              广告
                              不感兴趣
                              开通SVIP免广告
                              要是是mod就好了


                              IP属地:贵州来自Android客户端15楼2023-08-31 00:31
                              收起回复