饥荒游戏吧 关注:204,211贴子:2,999,517

16-07-20丨【mod】缓解饥荒游戏卡顿 LuaJIT桥接补丁正式版

只看楼主收藏回复

历经一个月的测试,DontStarveLuaJIT补丁正式版终于和大家见面了~
这个补丁可以有效缓解MOD过多,船难DLC,活动对象过多等由lua代码执行拥塞引起的卡顿现象。
注意事项(重要):
1. 在启用这个补丁之前,请务必备份你的所有存档。
2. 如果您打算将这个MOD安装到联机版本(Don't Starve Together),请确保在客户端和服务端都安装了这个MOD
3. 一些在这个补丁使用之前创建的存档可能无法被正确加载。这是由于一些MODs使用了引擎相关的函数向存档内写入了数据。这些数据不能被LUAJIT正确解析。(较为少见)
4. 本补丁无法解决其他原因引发的卡顿。包括但不限于:
a) 如游戏加载时硬盘读写延迟;
b) 内存不足引起的页面文件调页时的硬盘读写延迟;
c) 绘制对象过多或者过于复杂,PCI带宽不足或者显卡渲染能力不足引起的OpenGL绘制延迟;
d) 联机版中因网络原因引发的延迟。
安装:
见2楼
BUG反馈办法:
见3楼
原理:
见4楼
FAQ:
见5楼


IP属地:浙江1楼2016-07-20 16:15回复
    作者:PaintDream (alias Aegisys)
    GitHub:https://github.com/paintdream
    微博:PaintDream
    ZHIHU:PaintsNow
    百度贴吧:Aegisys
    DontStarveLuaJIT简介,安装,下载,bug反馈(首选这里下载):
    https://paintdream.github.io/DontStarveLuaJIT/
    百度网盘备份:(更新不一定非常及时)
    http://pan.baidu.com/s/1o7OHHGm
    STEAM上的讨论贴:
    http://steamcommunity.com/workshop/discussions/-1/351659808490971005/?appid=219740
    安装方法(可能随着版本更新会有变动,请以项目主页上的版本为准):
    Step 1:
    复制"DontStarveLuaJIT/bin/"目录下的所有文件至"[您的Don't Starve安装目录]/bin/"
    Step 2: (FOR DST,仅针对联机版)
    如果是联机版,还需要使用文本编辑器打开“[您的Don't Starve安装目录]/data/scripts/util.lua”文件。
    定位到如下代码行:
    function RunInSandboxSafe(untrusted_code, error_handler)
    error_handler = error_handler or function (str) print("Klei, you have missed this line: " .. str) end --<<<<
    if untrusted_code:byte(1) == 27 then return nil, "binary bytecode prohibited" end
    local untrusted_function, message = loadstring(untrusted_code)
    if not untrusted_function then return nil, message end
    setfenv(untrusted_function, {} )
    return xpcall(untrusted_function, error_handler )
    end
    在-<<<<标记处如上所示添加一行代码。
    保存 util.lua 文件。
    Step 3: (FOR DST,仅针对联机版)
    如果是联机版,还需要使用文本编辑器打开“[您的Don't Starve安装目录]/data/scripts/networkclientrpc.lua”文件。
    定位到如下代码行(搜索“Generate RPC codes from table of handlers”就能找到):
    --Generate RPC codes from table of handlers
    local i = 1
    for k, v in pairs(RPC_HANDLERS) do
    RPC[k] = i
    i = i + 1
    end
    i = nil
    Replace them with:
    使用如下的代码替换掉上面的内容:
    --Generate RPC codes from table of handlers
    local temp = {}
    for k, v in pairs(RPC_HANDLERS) do
    table.insert(temp, k)
    end
    table.sort(temp)
    for k, v in ipairs(temp) do
    RPC[v] = k
    end
    保存 networkclientrpc.lua 文件。


    IP属地:浙江2楼2016-07-20 16:15
    收起回复
      如果您在使用期间出现了游戏崩溃,请选择如下方式反馈这个BUG给我:
      1. 通过Github Issue(强烈推荐):
      访问:https://github.com/paintdream/DontStarveLuaJIT/issues
      查看现有的Issues里有没有和您遇到问题相同的,如果有且该问题标记为已解决,请下载最近版本。
      点击New Issue,填写Bug相关信息,包括:
      a) 在什么情况下出现的bug
      b) 您的系统配置,饥荒版本,使用了哪些MOD。
      c) 如果游戏直接闪退,看一下饥荒主程序bin目录下是否有扩展名为.mdmp的文件,如有则附上
      d) 如果游戏有报错界面,请附上报错界面截图。
      中英文皆可,推荐会英文的朋友首选这个方式。因为GitHub不会莫名抽楼,你的问题也不会与其他话题混在一起,可以清楚查看这个问题的解决进度。同时也避免了相同BUG被多次反馈的情况。
      2. 通过百度贴吧:
      在这个帖子下方回贴,同时提交上面需要的信息。如果传文件可以用网盘。


      IP属地:浙江3楼2016-07-20 16:16
      回复
        原理:
        饥荒游戏默认采用了lua 5.1.4作为脚本引擎,在优化不到位的情况下,如果游戏当前活动对象过多(可以通过Backspace查看左上角的awake得到),就会出现明显的卡顿现象。加之游戏本身是单线程的,所以满载只能跑满一个CPU核心,经常CPU占用只有20%,但是游戏已经卡得不能玩。
        LuaJIT是一个Just-in Time的lua引擎,由Mike Pall开发。它可以将lua代码编译成CPU指令而不是虚拟机指令直接执行,在速度上比官方lua要快非常多(相差一到两个数量级)。具体的性能测试可到luajit官方网站(luajit.org)上看。
        这个MOD的作用就是使用LuaJIT替换掉原有的lua引擎,可以缓解因为对象数过多/MOD数过多引起了卡顿问题。


        IP属地:浙江4楼2016-07-20 16:16
        收起回复
          在此感谢所有参与测试并提出宝贵意见的朋友~~


          IP属地:浙江7楼2016-07-20 16:17
          收起回复
            嗯嗯,非常好


            IP属地:广东来自Android客户端8楼2016-07-20 16:17
            收起回复
              中间被删了好几楼,正在申请恢复中。。。。


              IP属地:浙江9楼2016-07-20 16:18
              收起回复
                前排致敬


                来自Android客户端10楼2016-07-20 16:24
                回复
                  此贴该精


                  IP属地:瑞士来自Android客户端12楼2016-07-20 16:26
                  收起回复
                    前排,火钳
                    等我开新档一定用


                    IP属地:辽宁14楼2016-07-20 17:50
                    收起回复
                      另外,Klei官方有什么反应吗


                      IP属地:辽宁15楼2016-07-20 17:53
                      收起回复
                        0.0


                        来自Android客户端16楼2016-07-20 17:53
                        回复
                          顶贴


                          来自Android客户端17楼2016-07-20 18:03
                          回复
                            先马一个,等回学校了再用——


                            IP属地:湖南来自Android客户端18楼2016-07-20 18:07
                            回复
                              我怎么没看见地址呢?


                              19楼2016-07-20 18:08
                              收起回复