吞食天地吧 关注:80,207贴子:1,214,246

回复:64物法 深入研究

只看楼主收藏回复

至于隐藏武将,剧情的跳转不会对其造成影响。利用这两个特性,我们可以将神秘武将、夏侯惇、杨怀、曹操等武将,保留至第二章的荆州使用,后面我会举一个保留曹操的例子。


IP属地:四川来自Android客户端36楼2020-04-27 20:50
回复
    哎哟不错哟


    IP属地:天津来自Android客户端37楼2020-04-27 21:39
    收起回复
      2026-01-03 02:29:19
      广告
      不感兴趣
      开通SVIP免广告
      说一下第二章(荆州)开始,队列刷新的问题:
      1.所有的隐藏武将都会变为显示武将;
      2.所有的重影武将都会变成一个;
      3.所有的刘刘都会消失;
      4.1~3位需要对应为刘关张三人。
      如果这三个位置号存在不匹配的情况,第二章的指令将不完整:
      a.如果1号位不匹配,此时队列为空,强行执行队列指令的话,会导致武将的物品/装备栏混乱,有可能出现藤甲等高级装备,也有可能出现一堆石斧。此外,不能查看我方武将状态,不能调整物品、装备,非战斗状态不能使用物品、谋略等等。同时,大地图不显示武将模型(即队列处于幽灵状态👻)。
      b.如果1号位匹配且2号位不匹配,则只能对刘备使用上述指令,大地图只显示刘备模型。
      c.如果1.2号位匹配但3号位不匹配,则只能对刘备关羽使用上述指令,大地图也只显示刘备关羽的模型。
      关定庄张飞、赵云加入时,我们已经知道张飞自3号位向下论询,赵云自4号位向下论询:如果4号位被占用,1~3位只有1个空闲名额的话,张飞会优先入队,赵云则会入编;如果1~3号位被占用,4号位空闲,赵云会加入到4号位,张飞则会入编;如果1~4号位都被占用,则张飞、赵云一起入编。
      关羽、周仓加入时,情况略有不同:如果1~2号位只有一个空闲位置,周仓会优先入队;如果周仓加入后,队列满7人,则关羽不会入编,导致游戏卡死。


      IP属地:四川来自Android客户端38楼2020-04-28 05:46
      收起回复
        第四章出现编所后,我们可以随意让武将入队/离队。
        武将入队时,位置号的选取原则:从7号位开始向下论询,跳过所有存在武将的位置号(包括存在隐藏武将的位置号)。
        武将离队时,则会判断队列长度是否等于1。当前队列长度≠1,任意武将(除去不可离队的剧情武将)都可以离队;当前队列长度=1,任何武将不能离队。
        那么"队列长度"是如何计算的呢?
        之前已经交代过,地址615~61b表示我方队列7人的状态——80:正常、c0:军师、00:负伤、81~ff:异常、01~7f:异常负伤。异常(负伤)状态的武将,在战斗界面中不能出场。
        当然,正常通关流程中,武将不会处于异常(负伤)状态。如果连续使用多次64物法,导致其他地址段的数据(例如武将ID)偏移至地址615~61b时,才会出现这些情况。
        回归正题,地址615~61b每个字节的值——如果小于80(负伤/异常负伤),则队列长度+0;如果大于/等于80(正常/异常/军师),则队列长度+1。正常通关流程中,队列长度不会出现为0的情况,但是通关64物法覆写地址615~61b的数据,我们可以轻易做到。当队列长度为0时,便可以让全部武将离队了。


        IP属地:四川来自Android客户端42楼2020-04-28 11:59
        收起回复
          这是吞2?


          IP属地:江西来自iPhone客户端43楼2020-04-28 20:47
          收起回复


            IP属地:辽宁来自Android客户端44楼2020-04-28 21:19
            回复
              看到这帖子,想起了星月秋悠。


              IP属地:山东45楼2020-04-28 22:23
              回复
                拓展一下"向下论询"定理。
                让我们回忆一下,一开始举的陈登的例子:
                徐州陈登加入时,默认5号位。当5号位被占用(显示武将 或者 非"刘刘"的隐藏武将均可)时,陈登会遵循向下论询定理,依次查看4~1号位是否被占用。如果有空闲位置,陈登会入队;如果都被占用,陈登则会进入编成所。
                剧情进入第四章后,我们可以利用向下论询定理制造BUG。
                老规矩,举个例子:
                第四章新野收伊籍后,队列7~1号位分别为:关平、周仓、孔明、赵云、张飞、关羽、伊籍。
                樊城挑战吕布前,我们让伊籍离队。此时队列为:关平、周仓、孔明、赵云、张飞、关羽、空置。
                挑战吕布后,使用第1次64物法。此时队列为:孔明、赵云、张飞、关羽、:刘刘、吕布、[李傕](负伤武将前加 : ,隐藏武将加[ ])。
                稍微做下解释,因为伊籍离队,造成了1号位的空置。本质上,此时1号位其实是一个武将状态为"00"(负伤)的隐藏武将刘刘。所以,1号位偏移到3号位变为显示武将时,呈现出来的效果就是一个负伤的刘刘。
                由于1号位为隐藏武将,此时队列只有6人,还可以通过编成所加入1人。如果直接加入,按照向下论询定理,新入武将会占用3号位,同时形成重影武将。所以我们先将3号位负伤的刘刘离队,然后再加入关平占据3号位,最后加入伊籍占据1号位。


                IP属地:四川来自Android客户端46楼2020-04-29 09:57
                收起回复
                  2026-01-03 02:23:19
                  广告
                  不感兴趣
                  开通SVIP免广告





                  IP属地:四川来自Android客户端47楼2020-04-29 09:58
                  回复
                    这时候,神奇的事情发生了,7号位的孔明变成了"杨平",而且伊籍失去物品/装备栏,武将属性也变得非常混乱。这是为什么呢?
                    可以用武将入队的向下论询定理来解释。
                    负伤的刘刘离队、关平入队占据3号位后,此时的队列为:孔明、赵云、张飞、关羽、关平、吕布、[李傕]。
                    剧情入队时,由于7~1号位均被占用,剧情武将会直接入编。而编成所入队时,由于队列未满(只有6人),是可以继续入队的。但是,由于1号位(地址627)已经被[李傕]占用,新入的伊籍不得不向下继续寻找数据为〖0〗地址。地址628~62a,分别为对阵武将郭汜、张济、李肃的武将ID使用;地址62b~62d,被使用64物法之前,原7号位关平的现有兵力(十进制1588)使用,分别是34 06 00。地址62d的数据为〖0〗,因此被伊籍的武将ID使用。




                    IP属地:四川来自Android客户端48楼2020-04-29 10:27
                    回复
                      如果1号位没有隐藏武将李傕,伊籍的武将ID本应是使用地址627,伊籍的武将状态本应是使用地址61b,伊籍的武力信息本应是使用地址67b……
                      如今伊籍的武将ID在地址62d,向下偏移了6个字节,因此可以推算出,伊籍的武将状态在地址61b+6=621,伊籍的武力信息在地址67b+6=681。
                      而地址621先前存放的正是我方7号位的武将ID,如今被伊籍的武将状态80(正常状态)所覆盖。武将ID(80)恰好是杨平,因此7号位的孔明变成了杨平。
                      此时,如果你将伊籍离队入编,伊籍的武将状态会变为00(离队),7号位会变成刘刘。如果你将杨平离队入编,7号位的武将ID会变为00(空置),伊籍的武将状态会变为负伤。



                      IP属地:四川来自Android客户端51楼2020-04-29 11:03
                      回复
                        地址681存放的应当是我方7号位(杨平)的智力,如今被拿来当做伊籍的武力。所以……你懂的。



                        IP属地:四川来自Android客户端52楼2020-04-29 11:08
                        收起回复
                          好,我们已经了解了这个bug产生的原理。那么这个bug有什么用途呢?
                          【重点在于,伊籍的武将ID地址向下偏移到了62d。】
                          根据本贴一开始的地址介绍,我们知道62d是用来存放我方7号位现有兵力的低位数据的。OK,我们使用一次存档复位+住宿,让杨平的现有兵力恢复到初始值4300。
                          可以看到,此时伊籍变成了张南。原因很简单,7号位杨平的现有兵力4300,存放到地址42d~42f分别是cc 10 00,地址42d被覆写为cc,换算成武将ID正是张南。
                          出门刷几个小兵,使杨平的现有兵力发生变化,我们可以观察到杨平现有兵力的变化,紧密地关键着队列最后一位武将ID的变化。等到出现你喜欢的武将,便可以把他存入编成所。
                          存放编成所时,先将杨平离队,再将喜欢的武将离队。如果先将喜欢的武将离队的话,记得我们前面讲过,杨平会变成刘刘哦。




                          IP属地:四川来自Android客户端54楼2020-04-29 11:52
                          收起回复
                            上述两人离队后,重新加入两位武将:
                            第一位加入者会继续使用杨平的7号位;
                            第二位加入者的武将ID使用地址,取决于你离队入编前,最后一次战斗时对面的武将数目。
                            如果上次战斗对面为5人,第二位加入者将失去作用。如果想要第二位加入者,发挥一如之前伊籍跟随7号位现有兵力变换武将的作用——第一位加入者的兵力需要调整为256的倍数,通过打怪掉兵的方式调整完成后,再让第二位加入者入队;更为快捷的方式是,第一位加入者为盗贼、山贼、海贼、兵士(兵士慎用,容易卡死)等兵力为0的武将。
                            如果上次战斗对面为4人,第二位加入者会持续变化为每次战斗时对面的第5人。
                            以此类推……
                            如果上次战斗对面为1人,第二位加入者会持续变化为每次战斗时对面的第2人。
                            第二位加入者入队前,执行过一次存档复位,第二位加入者也会持续变化为每次战斗时对面的第2人。
                            有兴趣的话,可以根据我之前所讲的伊籍ID使用地址的"向下寻址"原则,自行分析第二位加入者的映射原理。
                            总之,如今我们的队列,自带强大的花样换人功能(相当于行走的64物法)。
                            当然,如果你不想制造此类bug,使用64物法的时候,还是乖乖把队列填满7人吧。


                            IP属地:四川来自Android客户端60楼2020-04-29 12:57
                            收起回复
                              2026-01-03 02:17:19
                              广告
                              不感兴趣
                              开通SVIP免广告
                              有没有简洁版的,具体怎么用


                              IP属地:北京来自iPhone客户端61楼2020-04-29 14:07
                              回复