文明6吧 关注:503,855贴子:4,478,905

【教程】开了mod导致报错,怎么排查?

取消只看楼主收藏回复


各位吧友好,经常见到有吧友反应说加了mod后无法创建游戏。作为一个modder,我具有一些排查错误的经验,这个帖子就教大家,怎么排查是哪个mod导致的问题,然后向作者正确反映问题。报错镇楼。


IP属地:安徽1楼2024-04-01 16:01回复
    首先,我们要清楚地定义什么是mod导致的报错。而要定义这一点,又需要先了解文明游戏的一些概念,那就是启动器,主界面,加载界面,游戏内(局内)。
    1.什么是启动器?
    启动器就是点击steam中的启动游戏,会先弹出来一个窗口,然后点击启动器中的开始游戏才正式进入游戏。

    2.什么是主菜单/主界面/mainmenu
    主菜单,就是播完一个人掉进冰里的动画(开场动画)之后,进入的一个蓝色的界面。

    3.加载界面
    这个也好理解,就是播放“从水下”的那个界面

    4.游戏内,或者说局内。
    这个很好理解,就是你开始正式玩游戏的地方。


    IP属地:安徽2楼2024-04-01 16:09
    回复
      由于最近两年Firaxis的骚操作,比如引入启动器(是的,远古版本的文明6是没有启动器的),以及每月挑战,现在有相当一部分玩家进入主界面都是有困难的。
      我可以简单讲一下启动器的问题,详细的可以看吧里置顶贴的导航。关于文明6游戏中一些非游戏问题合集_文明6吧_百度贴吧 (baidu.com)
      启动器,和microsoft visual c++ 2015 redistributable是有很大关系的。因此,玩家需要先安装这个的对应版本(一般都是64位系统,就是x64)。
      然后,启动器是有选择的,dx11和dx12。详细区别大家不需要知道,只需要知道,dx11更稳定,dx12对设备要求更高(也可能在某些方面性能更好,虽然我是没感觉到),而很多游戏,也包括文明6,都有dx11和dx12两个版本。低配置的电脑选dx11就完事了。


      IP属地:安徽3楼2024-04-01 16:17
      收起回复
        接下来是重量级的每月挑战。
        每月挑战是一种很神奇的东西,每次启动游戏的时候,游戏会自动检测你有没有下载最新的每月挑战,如果没有的话,就会自动帮你下载。下载的位置在C:\Users\xxx\AppData\Local\Firaxis Games\Sid Meier's Civilization VI\Challenges。
        有的吧友会说了,我直接给他删了,看他还发不发电
        但是很可惜,文明6太智能辣,检测到你删了,就会帮你贴心地重下一遍,它温我哭
        所以,每月挑战的问题大致也来自于此。我猜测,很多人进不了主菜单的问题,就是它疯狂下载每月挑战,但是由于某些原因下不下来(比如,网络、加速器、电脑防火墙设置、或者强行跳过启动器),所以一直卡住。可以尝试等待1小时,如果1小时也解决不了,那我也不知道怎么办。
        然后,有的吧友会说,有个“删除每月挑战”的mod,是不是打上这个mod就好了?
        错误的,“删除每月挑战”mod的原理是,让你在图形用户界面上看不见它,眼不见心不烦,但是它该下载还是下载的。


        IP属地:安徽4楼2024-04-01 16:29
        回复
          说完启动器和每月挑战,现在我们回到主题——mod上来。
          我们需要讲一下mod的加载环境。有一些mod会在前端/FrontEnd(或者简单理解为主菜单)加载一些修改UI的文件,比如ynmap,better front end。
          这些mod是有可能会影响主菜单的,比如每月挑战刚出的时候,有些吧友主菜单一片空白,这就是修改FrontEnd的mod导致的。
          除此之外的mod,都基本不会影响主菜单到无法玩游戏的地步!这一点很重要,因为我发现有些玩家报错的时候,认为是mod导致了进不去主菜单,其实这完全是启动器或者每月挑战的问题。


          IP属地:安徽6楼2024-04-01 16:38
          回复
            接下来是重点:无法创建游戏。
            简要提一下文明6mod的两大内容:lua文件和数据库(.xml .sql)。
            数据库是文明6游戏的主体,各种东西的属性都是在数据库中定义的。比如,图书馆的变量名,文本名称、文本描述,造价,产出2科技值等等。
            lua文件则主要用于UI,少部分用于高级的游戏功能。


            IP属地:安徽来自Android客户端7楼2024-04-01 16:46
            回复
              文明6中90%以上的无法创建游戏的问题都是数据库错误导致的。而lua导致创建游戏失败还是很少见的,并且工坊发出来的mod一般也不会有这种问题。
              所以,我们只讲数据库的排错


              IP属地:安徽来自Android客户端8楼2024-04-01 16:48
              回复
                当我们点下“开始游戏”,然后在黑屏几秒之后,出现报错,这时候我们就可以开始排查错误了。
                我们需要一个特殊的软件,agent ransack,免费下载,搜东西非常好用。网址不发了,免得被吞楼。



                IP属地:安徽9楼2024-04-01 16:59
                回复
                  我们寻找到Database.log,它在C:\Users\xxx\AppData\Local\Firaxis Games\Sid Meier's Civilization VI\Logs。
                  然后看内容,其中的[Configuration]和[Localization]都可以暂时不需要管,他们分别是FrontEnd的数据库,以及文本本地化。
                  重点是[Gameplay]开头的东西,它是局内(InGame)的数据库。
                  当它出现Error字样的时候,代表局内数据库有问题。注意,这里报错不一定进不去游戏!弱的错误可以被游戏忽略,只有游戏忍不了的强错误才会导致进不去游戏。


                  IP属地:安徽10楼2024-04-01 17:04
                  回复
                    我们可能还是需要一点数据库的科普,当然,不感兴趣的话也可以略过这楼。简单来说,数据库是由很多表(table)组成的。然后一些表比较基础,一些表比较高级,高级的表会引用基础的表。
                    表具有主键,也可能具有外键。
                    主键是一行数据的唯一标识,比如,每个学生都有学号,“学生信息”这个表就可以用学号作为主键,作为标识,当然是不能重复的。文明6中,区域的变量名就是主键,它保证了“区域”表中单个区域的唯一性。
                    外键是表之间的引用关系。比如“学生信息表”中,学生的来源地是某一列,那么它就可以引用一个“学生来源地表”的某一列作为外键。也就是说,学生来源必须是几十个省中的某一个,不然就会报错。在文明6中,CivilizationTraits这个表绑定了文明和ua,所以它有两个外键,也就是说文明必须在文明表中定义,ua必须在特质表中定义。
                    文明6在创建游戏时,会检测这些表的主键。外键有没有错误,没有的话,就会尝试生成游戏。


                    IP属地:安徽14楼2024-04-01 17:13
                    回复

                      我们给出一些常见的报错信息,主键重复(比如2个mod的变量名撞车),外键缺失(比如你缺某个dlc,或者mod2删除了mod1引用的东西)。
                      下面来做例题:

                      我们可以看到,这是典型的外键缺失,缺少一个TRAIT_LEADER_YONGLE,这其实是china领秀包的永乐的特质,是领秀季票中的。
                      那么很自然,报错原因就是没有,或者没开china领秀包,或者某个mod删除了这个ua。


                      IP属地:安徽16楼2024-04-01 17:20
                      回复
                        那么,怎么向引起问题的mod作者报错呢?
                        以上只是一个简单示例,实际我们往往遇到的是一个新的东西撞车之类的。这时候,我们打开agent ransack软件,设置一下搜索范围是Steam\steamapps\workshop\content\289070\或者是C:\Users\xxx\Documents\My Games\Sid Meier's Civilization VI\Mods。这分别代表创意工坊mod位置,和本地mod位置。
                        然后名称选择.xml,或者.sql。

                        我们要搜索看起来长得像【变量名】或者【文件名】的东西,点击搜索后我们就能定位问题了。

                        比如这里就是引用了一个DLC中的ua。
                        找到后,右键打开,打开文件所在目录。即可知道是哪个mod有问题。


                        IP属地:安徽17楼2024-04-01 17:27
                        回复
                          当然,有些高级的数据库写法,是使用sql文件,以及【变量名拼接】的,这时候查全名是查不到的。
                          这时候就只能一个一个mod慢慢关闭,尝试创建游戏。重复多次后就能知道哪个mod和哪个mod冲突。
                          至于局内的UI报错、功能异常等等,就太过复杂,超出了本帖讨论的范围,只能靠玩家慢慢尝试发现是什么问题。


                          IP属地:安徽18楼2024-04-01 17:31
                          回复
                            一些建议写在最后
                            1.订阅mod的时候要阅读作者的描述信息,有可能是写明了需要全dlc,或者明确不兼容xx mod的。
                            有些明确写了的注意事项,不看就问,会让作者很不爽。
                            2.向mod作者报错的时候,务必讲清楚,拥有和开启了什么DLC,开启了什么mod,在什么游戏规则下,进行了什么操作,出的问题。然后把上述的Database.log的报错发一下。当然,有时候也需要lua.lug。
                            简单地说一句“开了你的mod之后报错了”,这样的报错没有信息量,没法解决。
                            经常有mod作者排错忙活了半天 ,发现是别的mod出的问题,然后被玩家怪到自己身上,就会很不爽。
                            甚至把启动器或每月挑战的问题怪到不影响主菜单的mod身上,更让人烦躁。
                            3.及时更新mod。有时候steam会更新mod不及时,需要手动取消订阅,过一会儿再重新订阅。


                            IP属地:安徽20楼2024-04-01 17:42
                            回复
                              完结撒花


                              IP属地:安徽21楼2024-04-01 17:43
                              收起回复