战地1吧 关注:373,084贴子:7,447,405

随便写写关于我暖服机的那些技术吧

只看楼主收藏回复

慢更


IP属地:贵州1楼2023-07-24 18:54回复
    写这篇文章的原因应该也算是我自己暖服机被封之后觉得有些东西藏着掖着也确实没啥意思,再加上我暖服机从一开始的目标就是能从技术层面上吊打其他所有人,所以至少我觉得这些东西还是还算是比较有意义
    1.关于免显卡启动BF1/BFV
    在我公开放出的免平台启动补丁中并没有整合bfv的免显卡启动,但其实bfv和bf1大概的套路还是一样的

    所以bfv最新版关闭显卡检测的offset:
    mPatch(0x141FBBF15, 0x84);
    mPatch(0x141FBBF77, 0x84);
    mPatch(0x141FBBFF3, 0x84);
    mPatch(0x141FBC04A, 0x84);


    IP属地:贵州2楼2023-07-24 18:57
    收起回复


      IP属地:新疆来自iPhone客户端3楼2023-07-24 18:58
      回复
        2.挂机防踢
        在我最开始测试就已经发现了这个问题的严重性,并且由于我走的是gameid直连进服方案也就导致一旦被踢就会导致游戏进程直接需要重开,这种情况换成任何方案我认为都是不可接受的。更何况别人同配置的机子最多只能开25台,而我需要一台机子比他们多开数倍暖服机的情况还得保证我其他游戏服务器(mc,dcs,皓月服等)和机器人等程序还能正常运行。由于我为了节省cpu资源所以bf1主进程只能最小化运行,这也就导致目前市面上所有挂机防踢都不适合我的方案,而下面就是我解决这个问题的答案
        [DllImport("User32.dll", EntryPoint = "SendMessage")]
        private static extern IntPtr SendMessage(IntPtr hWnd, int msg, uint wParam, uint lParam);
        [DllImport("User32.dll", EntryPoint = "FindWindow")]
        private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
        IntPtr maindHwnd = FindWindow(null, "Battlefield™ 1");
        if (maindHwnd != IntPtr.Zero)
        {
        SendMessage(maindHwnd, 0x0200, 0, 0);
        }
        按道理来说bf1一般来说是只接收DirectInput的键鼠命令,不过不幸的万幸是bf1能接受win32api的wm_mousemove消息来觉得***作了


        IP属地:贵州4楼2023-07-24 19:22
        回复
          3.关闭游戏渲染
          关于这个你一共有两种方法来实现,一种是带参数启动而另外一种就是写成user.cfg放到主目录读取
          先介绍几条作用比较大的命令:
          关闭行动模式动画,这能让你的机器人能进任意行动模式地图并且准备,毕竟闪击暖服也蛮累的不是吗
          -VeniceUI.LoadingMoviesEnabled false
          让游戏以最小化启动,这也就是让cpu降低占用的关键,我为什么能做到双路2696v4能开100台暖服机都没啥压力就是因为不让游戏在前台
          -Window.Minimized true
          这三条命令是为了让你能使用gameid直连模式进入服务器,所谓gameid直连模式就是老战地的网页启动模式
          -Client.SkipFastLevelLoad true
          -Online.EnableSnowroller true
          -VeniceOnline.EnableSnowroller true
          剩下的懒得介绍了,但你记得加上
          -Sound.Enable false
          -Render.NullRendererEnable true
          -Mesh.LoadingEnabled false
          -Client.EmittersEnabled false
          -Core.HardwareProfile Hardware_Low
          -Client.TerrainEnabled false
          -Core.HardwareCpuBias -1
          -Core.HardwareGpuBias -1
          -Texture.RenderTexturesEnabled false
          -RenderDevice.CreateMinimalWindow true
          -RenderDevice.NullDriverEnable true
          -RenderDevice.MinDriverRequired false
          -VeniceUI.UseSparta false


          IP属地:贵州5楼2023-07-24 19:30
          回复
            前排,楼主是柚子厨,大家小心点


            IP属地:福建6楼2023-07-24 19:35
            回复
              谢谢你


              IP属地:江苏来自Android客户端7楼2023-07-24 19:36
              回复
                谢谢msk


                IP属地:安徽来自Android客户端8楼2023-07-24 19:37
                回复
                  我来氵个帖


                  IP属地:浙江来自Android客户端9楼2023-07-24 19:39
                  回复
                    卡密!


                    IP属地:江苏来自Android客户端10楼2023-07-24 19:46
                    回复
                      看不懂 但我大受震撼


                      IP属地:江西来自Android客户端11楼2023-07-24 19:49
                      回复
                        4.关于使用gameid直连进服
                        我不喜欢走原生逻辑就是因为要更新sparta那些东西很烦并且改js控制进服我也觉得相当累,所以用dice没删干净的网页进服模式就超级省事
                        进服命令:
                        -requestState State_ConnectToGameId -gameId "0721" -gameMode "MP" -role "soldier" -asSpectator "false" -parentSessinId -joinWithParty "false"
                        把0721改为你自己的服务器gameid就行了
                        关于这个还有一点就是可以使用pipe管道来监测bf1游戏状态,虽然bf1相比于前作pipe是残废但至少还算能用


                        IP属地:贵州12楼2023-07-24 19:51
                        收起回复
                          暖服机被封了?ea干得🐴?


                          IP属地:山东来自Android客户端13楼2023-07-24 19:54
                          收起回复
                            帮顶


                            IP属地:安徽来自iPhone客户端14楼2023-07-24 20:06
                            回复
                              技术力Pro!


                              IP属地:广东来自Android客户端15楼2023-07-24 20:08
                              回复