战火英雄吧 关注:7,546贴子:217,841

【无聊的技术篇】如何生成小队代码

只看楼主收藏回复

RT。。很多吧友肯定对那些奇形怪状却可以保存一整个小队信息的小队代码有些不解。
于是在好奇心和学渣强烈的装b欲望的推动下看了看小队代码的生成过程。。
各路神犇请自动忽视
打字慢莫插楼


1楼2015-08-16 14:41回复
    首先让我们观察一下这些小队代码
    SFH3[$%$$$] (无人小队)

    SFH3[%-,$*$V#4+&33%''%'/1'),)4%4%] (一人小队)
    SFH3['-(-*$V#4+&33%''%'/1'),)4%4%+33/###>%''%'/$%(%))%)%$940,2;5%'.%'00%'0)-%-%](3人小队)
    显而易见的是所有代码都为SFH3[ XXXX ]的结构,且人越多则代码越长
    下面就分析一下这些代码的结构


    2楼2015-08-16 14:44
    回复
      1.第一位 %
      第一位决定了小队的人数,在读取代码并重建小队时游戏就按照第一位来读取相应长度的代码
      那么为什么是%呢?
      很简单,这个字符在游戏中是这样生成的
      (小队人数 + 36)--> 对照unicode生成字符
      所以,在小队人数为1时,就生成十进制37(36+1)对应的unicode

      也就是%


      4楼2015-08-16 14:52
      回复
        2. 2-5位 -,$*
        这4位其实起到了一个验证的作用
        计算方法为
        设a = 10000 - ((后面剩余代码每一个代码的unicode十进制 - 36)的和)
        b = 转化成字符串,将a填充为4位,不足用0补足(如当a=123时, b=0123)
        然后,和第一位一样的计算方法,将b的4位各生成一个字符
        所以-,$*就相当于9806


        5楼2015-08-16 15:04
        收起回复
          3. 后面剩余代码 $V#4+&33%''%'/1'),)4%4%
          这一部分才真正记录了每一个英雄的具体数据
          每一个英雄有23位,所以2楼的3人小队代码的实际数据为 1 + 4 + 3 * 23 = 74位
          每一个字符代表了一个数据,每个数据的计算方法都和第一位相同((原数据 + 36)的unicode字符)
          依次为
          含义 代码
          英雄职业 $
          等级 V (所以如果你的等级改太高了小队代码可能会出一些问题)
          缺点 #
          技能 4
          特性1 +
          特性2 &
          特性3 3
          主武器id 3
          主武器等级 %
          主武器稀有度 ‘
          副武器id ’
          副武器等级 %
          副武器稀有度 ‘
          武器mod /
          装甲mod 1
          脸face ’
          皮肤skin )
          头发hair ,
          颜色color )
          头head/10 4
          头head%10 %
          身体body/10 4
          身体body%10 %
          (这里头和身体要两位是因为种类较多,用一个字符储存不下,分成两个字符储存)


          6楼2015-08-16 15:19
          收起回复
            最后游戏在重绘小队的时候就根据SFH3[%-,$*$V#4+&33%''%'/1'),)4%4%]创建了一个这样的小队


            7楼2015-08-16 15:22
            回复
              还有一点需要注意的,在存档修改贴(http://tieba.baidu.com/p/3869996251)中我曾经提到特性可以写none,但这样会导致生成的小队代码无法被读取。
              主要原因是none对应的特性id为-1,而且并没有归为任何类型(缺点、技能等),而在读取时会根据这个id到对应类型的特性数组中去找,自然就找不到none而输出异常


              8楼2015-08-16 15:55
              回复
                LZ好人,可以列出特性1、2、3以及优点、武器配件、护甲配件中每个对应什么字符吗?


                IP属地:山东10楼2015-08-16 17:53
                收起回复
                  楼主太谦虚了,膜拜


                  IP属地:浙江来自iPhone客户端11楼2015-08-16 18:22
                  回复


                    12楼2015-08-16 18:55
                    回复
                      我又要给两个精了


                      IP属地:上海来自Android客户端13楼2015-08-16 19:26
                      收起回复
                        楼主解决了我多年的难题,另外楼主是根据什么推断出来哪一位代表什么的一一 ♚ 我就是我 ✫ ✬ 人间不一样的花火 ✎ ﺴﻄ


                        IP属地:瑞典来自Android客户端14楼2015-08-16 19:34
                        回复
                          但是那种只把主武器变了但是有两个地方发生了改变是什么情况
                          SFH3[%-)%'$Ğ2%$0:NC'2C'3.'&1',%,%]
                          SFH3[%-)%%$Ğ2%$0:PC'2C'3.'&1',%,%]
                          SFH3[%-)%&$Ğ2%$0:OC'2C'3.'&1',%,%]
                          SFH3[%-)%($Ğ2%$0:MC'2C'3.'&1',%,%]一一 ♚ 我就是我 ✫ ✬ 人间不一样的花火 ✎ ﺴﻄ


                          IP属地:瑞典来自Android客户端15楼2015-08-16 19:40
                          收起回复
                            这才是真正的会玩啊


                            IP属地:天津来自Android客户端16楼2015-08-16 23:07
                            回复