unturned吧 关注:127,740贴子:2,131,588

【破事水】做一个创意工坊MOD的ID冲突检测工具

只看楼主收藏回复

unturned的ID机制一直是折磨mod作者和玩家的痛点,懒狗尼尔森虽然喊着“16位数字ID要迭代到128位的GUID以彻底解决ID冲突”口号喊了三四年了(但真不如出皮肤来的爽),但实际上现在只有极少数物品配置(.assert文件) 实现ID更迭,目前是两类ID混用的状态,依然是数字ID占绝对主导地位。
于是,ID冲突一直存在,间接导致了存档物品消失、任务物品bug、任务对话bug等。
印象里国内国外还没有一种工具用于检测ID冲突(好久不玩ut了,没怎么关注社区),因此趁着上班摸鱼期间,写一个ID冲突检测工具玩玩。
小目标:
1.不同创意工坊物品间的ID冲突检测
2.ID冲突一键修复及备份
3.可视化GUI操作界面
4.自定义冲突检测配置(跨创意工坊物品、同创意工坊物品内检测,自定义配置等)
不要抱过多期待,现实中工作弹性极大,指不定哪天就消失力


IP属地:上海1楼2023-09-20 11:15回复
    首先简单科普下:Unturned的ID目前分两类:数字ID(uint16)和 GUID(32固定长度英文数字字符串)。
    数字ID的范围在0~65535,总共63356个可选
    而GUID总共有340282366920938463463374607431768211456个可以选,理论上用到宇宙毁灭也用不完。

    ID冲突则是在一定范围内,两个物品的ID相同,导致前者被后者替换(视加载顺序而定)的情况。但冲突也需要满足一定条件:
    1.物品属于同一个大类;
    2.物品的数字ID相同。
    什么是大类呢? 我们经常遇到的物品冲突其实是 Item Assert 冲突,Item是Unturned物品的所有基本类,而一个Item下又会细分不同的物品,例如Medical(药品)、Pants(裤子)、 Supply(材料)等。

    这些大类就是冲突产生的根源。一个大类内共同一套数字ID,因此会出现药品和裤子物品出现冲突,枪管和种子出现冲突等等。而不同大类间,相同的数字ID是不会产生冲突的。
    通过查阅文档和对Unturned目录结构的分析,可以分析得到如下大类:
    Effect 效果
    NPC NPC角色
    Dialogue 对话(似乎不占用数字ID)
    Quest 任务
    Vendor 交易
    Animal 动物
    Mythic 神话皮肤特效
    Objects 地图物件
    Skin 皮肤(万恶之源)
    Spawn 刷新表
    Resource 资源
    Vehicle 载具
    Item 物品(重点)
    上述大类分析实际上只是我的分析整理,尼尔森并没有给出明确的大类(太懒辣), 因此在做ID冲突检测工具时,我将其做配置化处理,可以自由调整大类的配置来纠错。


    IP属地:上海2楼2023-09-20 11:31
    回复
      整段ID冲突检测代码的核心是在于遍历整个创意工坊目录,并精确提取出物品所在目录:
      代码如下

      人生苦短,我用Python(
      这样便整理了创意工坊下所有的、每个物品(所有大类)的数据元信息。
      后面一百多行代码直接一个省的略,基本上都是数据处理,从.dat文件中提取ID、Type和i18n信息等,体力活罢了……直接看ID冲突检测结果
      检测出我订阅的全部mod中的冲突部分:

      中南mod的盖亚之锤和北极星的木质床冲突,ID:36300

      冲突检测结果以json格式导出(后续会做可视化)


      IP属地:上海3楼2023-09-20 11:39
      回复
        打个茭先


        IP属地:上海5楼2023-09-20 11:40
        回复
          好,支持


          IP属地:山东来自Android客户端6楼2023-09-20 12:52
          回复
            先收藏了


            IP属地:黑龙江来自Android客户端7楼2023-09-20 13:03
            回复
              支持 cy


              IP属地:上海来自Android客户端8楼2023-09-20 13:56
              回复
                不期待,但支持。


                IP属地:广东9楼2023-09-20 14:03
                回复
                  牛的,支持,等大佬上传造福


                  IP属地:山东来自Android客户端10楼2023-09-20 14:09
                  回复
                    牛逼,先码一下


                    IP属地:江苏来自Android客户端11楼2023-09-20 14:35
                    回复


                      IP属地:湖南来自Android客户端12楼2023-09-20 15:42
                      回复
                        牛的老哥,点赞支持


                        IP属地:山东来自Android客户端13楼2023-09-20 17:51
                        回复
                          加班结束,开会开了三四个小时,鼠鼠晚饭都还次😭,抽空吧GUI界面写了一半。
                          说下后续计划:
                          1. 导出ID冲突列表,生成ID替换配置表。
                          2. 完成ID冲突修复模块,具有恢复、备份、修复等基本功能。
                          3. 考虑到多次ID修复出现存档不兼容的问题,因此ID修复模块具备“修复方案保存”功能


                          IP属地:上海来自iPhone客户端14楼2023-09-20 21:01
                          回复
                            大佬强啊


                            IP属地:浙江来自Android客户端15楼2023-09-21 08:26
                            回复
                              好好好,终于有人意识到这事并且有解决想法了


                              IP属地:山东来自Android客户端16楼2023-09-21 08:41
                              回复