highfleet吧 关注:1,028贴子:2,557
  • 6回复贴,共1

Seria存档入门:弹药库和物品栏修改

只看楼主收藏回复

Seria文件中的键值对格式类似于INI配置文件,而成对的花括号又让它和JSON文件的格式类似。这使得Seria文件形成了一个递进的,类似于树状的结构。
一些关键的要点:
Seria文件具有嵌套的,成对出现的花括号
每对花括号中的内容都以一个m_classname的属性开头
了解这些以后,我们就可以开始分析存档的结构并理解每一部分的含义。一些名词使用的注意事项:因为Seria文件有类似树状的结构,为了方便,我会称呼存档力的每一对花括以及其中的内容为一个节点。例如,Profile节点是整个存档的根节点,Escadra节点是Profile节点直接相连的子节点。但是,需要注Seria文件中m_classname属性有一个值就叫Node。请注意区分两者的含义。
存档结构

上面呈现的是一个典型的战役中期的存档结构。[...]指代的是和之前那个节点一样的一些列系欸但,因为有百十个之多,所以在此省略了。
Escadra,顾名思义,是有关地图上船只信息的节点。这包括商船,打击团以及玩家的舰队等。
Location存有地图上城市的信息,其中包括无线电呼号,城市类型(如,燃料站),城市售卖的零部件和弹药等。
NPC包含所有可以在游戏内招募的NPC的信息。除此之外,所有可以购买的船只在技术上也被定义了一个NPC(仔细观察这些NPC节点,会发现每个NPC都有自己的名字,以及性格,像是善恶值等)
存档的末尾有少数Item节点,这些节点直接作为Profile根节点的子节点。据目前所知,这些节点含有玩家弹药库的信息(因为游戏中不论是分舰队还是主力舰队的船只都可以使用弹药库,这在概念上并不属于某一个船只或者地点,是“虚空”弹药库。可能因此这些节点被放在存档末尾)
最后一个Node节点,包含了玩家在战略地图上自定义的标记(如,文字标记和箭头)。还可能被用于存放船只物品栏的零部件(这一点暂时不确定,需要进一步验证)。


IP属地:新西兰1楼2024-09-14 12:36回复
    Escadra

    上面是Escadra节点的具体结构。第一个节点是对战舰构造的定义,紧接着是和这艘战舰有关的情报,却决于是敌方战舰还是玩家战舰。如果是敌方战舰,则是该敌方战舰发出的情报。如果是玩家战舰,则是这艘战舰截获的情报。Escadra::MapShip节点定义了这艘战舰在战略地图上的位置。最后一个Node节点存储了有关该船只物品栏的信息。因为我们知道当分舰队购买了一个零部件后,这个零部件会一直跟着这个分舰队,直到该舰队与旗舰舰队合并。因此在技术层面,零部件是单独存放在每艘船里的,只是游戏有一个零部件合并转移到旗舰上的机制。Node节点中的没一个Body节点,定义了每一个零部件的类型数量等信息,以及这个零部件所属的物品栏(这一点很重要,也是我们能够对物品栏进行修改的基础)。
    基于这些信息,我们可以对物品栏进行修改,在游戏外实现零部件的转移和分配。这样分舰队随时都可以从旗舰哪里获得如导弹等的补给,或者直接作弊刷出任意数量的物品。


    IP属地:新西兰2楼2024-09-14 12:40
    回复
      Location

      上面是一个典型的Location节点的构造。开头一系列的Item节点包含了该城市商人售卖的弹药种类。每一个Item节点代表一种弹药类型。最后一个Node节点包含了船坞售卖的所有零部件。每一个Body子节点代表了一种零部件。这一点和船只的物品栏类似。


      IP属地:新西兰3楼2024-09-14 12:41
      回复
        如何修改玩家的弹药库

        既然我们知道存档末尾的一系列Item节点是和弹药库有关的。修改就很简单了:翻到存档末尾,找到你想要修改的那个弹药节点进行修改即可。参见上面的例子,根据m_index属性值确认弹药的类型,然后修改m_count来改变弹药的数量。


        IP属地:新西兰4楼2024-09-14 12:42
        回复
          如何修改船只的物品栏
          定位一个Node(物品栏)节点的最简单的方法就是寻找Escadra::MapShip节点。用文本编辑器打开存档按住ctrl+f键使用搜索功能。Escadra::MapShip节点还包含了如pEscadra.id属性,可以帮你确认这个物品栏归属的船只。毕竟存档太长了直接翻找比较困难。紧接着的Node节点包含一个m_id属性值是每个物品栏独有的。上述例子中,这个炸弹所在的Body节点就有一个m_master_id和物品栏的id相对应。
          注意:当你复制或新增零部件到另一个物品栏里时,确保这两个属性修改成目标物品栏的id,而不是原来物品栏的id。如果弄错了或导致游戏在着陆后进入城市的一瞬间卡死。小心谨慎,记得备份存档!
          另一个值得注意的属性是m_count,定义了零部件的属性。想象一下指挥拥有数百枚导弹的舰队,我们一定能给Gerat带去和平!


          IP属地:新西兰5楼2024-09-14 12:44
          回复
            补充一点:Escadra还有个属性m_name,我们通过id找到Escadra节点以后,往下翻通过name确认船只的名字,比如Sevastopol,就肯定是我们的旗舰,如此就能确定,我们修改的是旗舰的物品栏。除此之外,另一种不准确的修改方法是直接搜索m_count,比如你购买了3枚导弹,一般城市不可能只卖这么一点,就很有可能搜到你自己的物品栏,然后根据上下文其他物品的oid可以进行判断。
            又或者,你买了3枚导弹,2枚炸弹,还买了2个灭火罐,这样一个组合和数量对比较少见,这种稀缺性可以帮助我们确定修改的物品是否是在玩家的物品栏里还是船厂的。


            IP属地:新西兰6楼2024-09-14 12:50
            收起回复