生存战争吧 关注:236,497贴子:4,257,262

XNB的正确修改方法

只看楼主收藏回复

一直都没改过XNB文件,直到最近修改了一个界面的XNB文件,发现居然不能正常读取,于是深入研究了XNB文件的结构,发现需要对XNB文件头部做一些修改才行。(其实不仅限于文件头,但是对于SC来说,只需要修改文件头部就可以了)


IP属地:广东1楼2014-12-31 20:23回复
    事实上,kaalus为了方便玩家对游戏的修改,对XNB文件做了简化处理,还插入了大量的注释。虽然,由于XNB文件本身的限制,修改XNB文件还是比较麻烦的,假如有地方不匹配,就会造成文件不能读取或被截断。


    IP属地:广东2楼2014-12-31 20:25
    收起回复
      2025-06-11 20:49:54
      广告
      对文件头的修改主要分为两个方面
      1.从第7字节开始的4个字节,这四个字节表示一个unsigned int,表示文件长度
      2.XNB所储存对象开头的一个7BitEncodedInt,这个数据的出现位置并不固定,而且修改起来比较麻烦


      IP属地:广东3楼2014-12-31 20:28
      收起回复
        接下来是读取7BitEncodedInt的C++代码
        int Read7BitEncodedInt()
        {
        int result = 0;
        int bitsRead = 0;
        int value;
        do
        {
        value = ReadByte();
        result |= (value & 0x7f) << bitsRead;
        bitsRead += 7;
        }
        while (value & 0x80);
        return result;
        }
        可以看出,这种编码是一种变长编码,可以节约空间,但是这对我们的修改造成了不便


        IP属地:广东4楼2014-12-31 20:30
        收起回复


          IP属地:福建来自Android客户端6楼2014-12-31 20:34
          回复
            下面是自制软件XNBEditor,虽然它叫Editor,但它主要的功能是读取/写入XNB文件而不是修改。你可以用它读取XNB文件,再用别的文本编辑器修改,再用它写入XNB文件。
            生成的XNB可用于Android/IOS/WP(需要在设定中修改)
            支持SC的两种Type Reader
            假如不能读取XNB文件,那多半是因为Type Reader不支持,大概就是作者不想让你改的东西


            IP属地:广东8楼2014-12-31 20:38
            收起回复
              @销锋镝铸 @淼表 贴吧,那么你可以关注survivalcrafl吧了吗。


              IP属地:广东来自Android客户端9楼2014-12-31 20:38
              回复


                来自Android客户端10楼2014-12-31 20:42
                回复
                  2025-06-11 20:43:54
                  广告
                  ……
                      ——来自百度贴吧 _0超新星0_,欢迎到我的个人贴吧(_0超新星0_吧)做客~新人报道有精哟~~


                  IP属地:上海来自Android客户端11楼2014-12-31 20:43
                  回复
                    首先要安装两个依赖项:Python3和PyQt5 for Python3
                    附上它们的下载地址
                    python3(现在的版本是3.4.2):
                    https://www.python.org/downloads/
                    PyQt5 for python3:
                    http://www.riverbankcomputing.com/software/pyqt/download5
                    然后是程序源码:
                    http://pan.baidu.com/s/1hqnEckO
                    程序是用python3写的,所以直接双击源码即可运行


                    IP属地:广东12楼2014-12-31 20:43
                    收起回复


                      IP属地:广东13楼2014-12-31 20:43
                      回复
                        前4楼的东西几乎是没人看得懂←_←
                            ——来自百度贴吧 _0超新星0_,欢迎到我的个人贴吧(_0超新星0_吧)做客~新人报道有精哟~~


                        IP属地:上海来自Android客户端14楼2014-12-31 20:43
                        收起回复
                          @Biàng @_0超新星0_


                          IP属地:广东15楼2014-12-31 20:44
                          回复
                            真心看不懂
                               --know is know . no know is no know . is know 也!


                            IP属地:湖南来自Android客户端18楼2014-12-31 20:48
                            回复
                              2025-06-11 20:37:54
                              广告
                              顶,那么你能关注威廉帝国吧么•﹏•?


                              来自Android客户端19楼2014-12-31 20:49
                              回复