郁金香游戏辅助教程笔记-十-

郁金香游戏辅助教程笔记(十)

P71:082-分析出售物品封包结构 - 教到你会 - BV1DS4y1n7qF

大家好,我是郁金香老师,那么这节课呢我们一起来分析一下出售物品嗯的封包结构,那么在之前呢我们分析了购买物品的红包结构。

那么我们出售物品的话。

他在购买物品栏之前呃,这是我们之前的分析啊,那么在前面这个位置呢就是出售物品的这个相关的一个缓冲区,交易的货的话,那么在仓库的一些存存取,还有商店的一些买卖呢,它都是调用同一个库啊。

最终呢都是用这个方向服务器发送这个数据包来实现的,那么这里呢2818是它的缓冲区,我们看一下,那么之前呢这里同样的是2818,这个地方呢是它的一个缓冲区,那么2812这个地方呢,这里呢二代表的是出售啊。

所以说我们可以把之前分析的一些数据呢,嗯可能也是有用的,第80依靠,那么我们看一下给前面的一个分析,那么我们把前面的这个分析了哈,复制一下第79 81克的这个,阿斯,好的复制一下,那么用的脚的地方呢。

我们就直接来验证一下,看是否是否可用,那么首先我们来看一下啊,之前呢我们说商店购物的指令是这个80092,那么我们再来看一下啊,那么仓库存取的指令呢是840094。

那么我们看一下在这个出售物品的时候,有没有改变这个地方,再来看一下,这里是2818,我们找一下2816,2816呢,它的副词呢也有一些不一样啊,他是2816,这里呢写了一个呃九日进去。

然后再写了一个八零啊进去,那么它火起来也是00800092。

8000 9万,那么也就是说这个指令的话,虽然说它的写法不一样,那么实际上呢嗯这个商商店的啊,买卖呢指定呢它都是同一个指令。

那么从这里可以看出它是同一个指令,我们也可以在这个地方下一个段来看一下6816。

比如说青创要想出售一个,那么我们可以看一下db,dt 2816,那么我们可以看到啊,同样的是8009这个指令,8009,那么这个指令是没有变的,那么我们接着往下看啊,那么这里呢2812出售。

这里呢它是零二,那么我们再来看一下db 1 dx,那么这里呢是同样是28181d x开开始,那么我们用dd e d x加二看一下,加二的话,这里呢前面的这是,这是他的四肢解指令,然后这里姓名二。

那么我们先把缓冲区了复制出来,那么这个缓冲区的话看起来的话没有我们仓库存放的呃。

缓冲区复杂要简单一些,但是呢他要又要比我们的呃购买物品来的缓冲区来要复杂一些,好的,那么我们先让他跑起来,那么为了比较呃不同的物品分类呢,我们另外呢出售这个人生,出售三个,然后再看一下它的缓冲区。

复制出来,这是新创要小,好先让他跑起来,人生三,那么我们先找一下数量,那么之前的物品的数量的话是在加一六这个位置,那么我们再来看一下,这里是一六啊,这里是一六。

那么证明的话这里的四字解也就是我们的两只解或者是4g解放,因为它的物品数量的话最多是大概是6535996款,这里也有一个物品的上限啊,呃应该是两个字节就能够容纳它,但是这里的话可能他是四个字节的。

那么也是也就是加一六这个地方,那么我们看一下加零六这个地方呢,这里都是二表示我们的购买加4c这个地方啊,应该是加0g这个地方我们看下69块3b,那么这里也应该是我们的物品类型的一个分类编号。

但是呢它前面这里呢多了一串指令,260f1 b28 ,那么我们注意看到这个260f1 b28 ,与前面的这个260f1 b2 吧,它是相同的,那么也就是说在灵异的前面啊,我们还有一个四肢解。

那么这里呢是0a啊,那么这四字节嗯可能也有与我们之前的这个人类似的一个作用,表示了是一个购买的一个物品,那么我们先把它记下来,这四个字节可能是一个固定值,也可能是一个。

那么我们实际上呢也可以用这一段数据来来填充这个缓冲区啊,那么填充之后呢,我们只考虑啊变化的一个数值,那么我们主要就考虑一个变化的数值,那么这里呢我们也不做分析啊,那么变化的只有这个地方。

我们再注意一下后边,那么这个地方呢也是变化的嗯,这个地方的话我们是看一下数量,数量是一六,那么这个地方呢是二六,那么我们也把它标注一下,加26这个地方呢有变化。

那么我们看加26这个地方有多少个字节的变化,首先呢有四字节,然后后边我们再来看一下186,72d1 a,那么这里呢也有四只九,那么以后呢可能是八个字节这里,那么这八个字节的话,我们在分析仓库的啊。

存取的时候呢,也有八个字节,它来源于物物品对象的哦,是这个地方,那么这里呢我们也跟他先标注八字节,那么这个他看是不是来源于我们的物体对象,我们还有待分析,那么我们先找一下啊。

那么我们先找一下背包列表的一个机制,那么这是背包列表的一个基础公式,那么我们先来看一下纹身,他加五四的这个位置,那么我们看一下啊,那么这是第一个啊,金创药金创药小,这是金创要小的这四个字节。

f36429 db,17672d1 a那么我们发现呢的确是来源于我们不评对象的,加五四的八字,请那么这个变化的数据呢也有了,那么这里呢是来源于他的四的这个字节,那么后边的那么后边这里的话我们应该是。

那么前面的这里呢是零一,那么这里呢是1e这里呢是2e这个地方,那么这里的话也是物品类型,乃至于我们物品对象是在这个位置,那么我们再接着往后看,这里呢有一个一,那么这里有一个一,我们不管它。

那么这里有个二,那么这个二的话我们看一下有一个变化,那么我们要看一下这个它是不是一个固定的变化,那么有些呢它是混淆我们一个视听的,那么我们再来重新出售一个金创药小,出售一个再次把它的缓冲区db。

e d x复制出来,当然最好是用记事本这一类的啊,可以来标记它的颜色,把不同的地方标记出来啊,这样是最好,那么我们可以看到啊,这里有个一和零,那么这里呢是二,那么说明这个地方的话。

这个二我这个地方的日的话可能有一些关系,那么我们看一下人生所在的位置,那么人生所在的二栏恰好是背包里面的一个下标二,这里呢如果我们是出售这个秘制的金创药,这里呢可能就是三啊,是它的一个下标,应该是。

那么这里我们也能够看到是数字的三,那么这个地方呢是3f这个地方db加上3f这个地方是三,一次减或者是两字节的,那么因为我们的下标的话,那么我们用一个字节的话,也不表示1~255的数值。

那么如果我们背包呢啊只有几十格的空间,那么所以说我们用一字节就已经足够了,那么我们先标记为一你自己所在的空间,加,三,你自己,就在背包里的下标,那么这个来源于我们对象加上ef 4。

好那么除了这一点不同之外,我们看一下还有哪些地方不一样,那么下下面这行有一个1423,那么这里呢也是一个1423,1423,那么相同的我们不管它这里有个19a啊,一九位,那么也是相同的,这里有一个九位。

这里有个九位九位,那么974f974 f那么这些的话基本上都是相似的,这里嗯八零的这一段数据呢它也是相同的,那么相同的我们就直接用里面的这些数据来去给它做一个初始化,然后我们再修改相应的数值就行嗯。

当然如果是有更多的时间呢,也可以做一些更细致的分析啊,那么我们现在我们是从效率的角度来考虑,那么我们接下来呢我们就可以进行相关的测试,那么我们打开第81课的代码。

那么我们就直接在主线程单元来进行一个测试,在测试第一这里,哈哈哈哈,那么在这里呢我们需要的也是定义啊,定义一个类似的一个变量之前我没有用。

现在我们把它利用起来,那么定义这个变量之后呢,我们就用这个缓冲区的数据来来给它填充,任意一个都可以,那么我们就以下面的人身的数据来进行一个填充,那么在填充之前呢,我们先要把它整理一下。

那么首先呢我们把这前面的数据删掉,然后在后边的数据呢我们也删掉,每一个数据前面呢我们给它加上0x的前缀,那么像这种数据呢,我们先给它替换替换一下,那么替换好了之后呢,我们再给它加上相应的前缀。

每个空格前面呢我们给它加上一个0x的前缀,找一个空格,然后替换成我们的全部替换,嗯取消一下,替换啊,那么0x呢,我们前面加一个逗号,那么这样替换之后呢,我们把多余的删掉,这种我们把它再次替换。

好那么后面呢我们也给他删掉,那么接下来这些呢就是我们所要的这个字节级的数据,那么我们把它复制到里边,然后呢加上一个分号啊,这样呢我们就做完了,我们的初始化,这里插一个逗号,好的,我们先编译一下。

那么这里呢还差一个逗号,那么再次我们编辑生成,啊初始项这个时候他说设置的太多啊,因为这里呢我们多了也好,全零的,这里呢我们已经有有九行啊,每行的是16个字节啊,也就是我们16进制的0x10 。

好的成功了,那么接下来呢我们再进行相应的修改,嗯当然了,我们在这里呢我们先用汇编代码来进行相应的测试修改,把我们之前第81课的代码拿出来,我们进行一下修改。

或者我们直接在d里面发这个相应的代码也是可以的,那我们来看一下,首先这里是我们的e4 x提取出来,然后再是扩的地址提取处理,那么之前呢有两个参数,一个是图形x86 ,那么另一个参数呢是图形e d x。

那么这里呢我们的ex都是可以,那么它来源于都是我们之前的这个结构,那我们看一下之前结构的名字,get up,但是我们要进行一些数据的一些修改啊,在这里,那么我们看一下之前的数据。

那么我们另外在背包里面选一个数据呃,比如说我们用这个选原声来做一个例子,那么要做例子的话,我们需要先手动的把相关的数据呢呃把它找出来,那么我们看一下我们所需要的几个偏移呃,指令啊,这里我们不需要啊。

我们需要的是一个主要的是一个把自己看这里的加五四这个平移,这个地方,还有加四塞这个地方这两个,那么在这里的话,瑶瑶呢是冥币,那么我们先把这八个字节呢嗯复制出来,用dd来显示,从来,这是继位的啊四个字节。

这是高位的四个字节,那么这是来源于五四这个地方位置在在这里啊,26这个偏移这里,那么还有一个呢是我们四色的这个偏移,这里选的四色,好的大致呢就是这两个啊,关键的数据,那么我们再把这相应的这些分析了啊。

复制一下,转到我们的测试代码,这,那么首先呢我们选择指定,同志,那么首先是加二这个地方,那么写入我们的商店购买的一个指令,然后我们把前面这段指令复制一下,那么加上这个偏移之后呢,然后是加六这个偏移。

这里二表示出售,然后是加a这个地方呢我们用不着改动啊,之前呢这里呢就已经有了啊,有了相应的这个数据,这里的260f开始的,那么所以说这里呢我们用不着再复制,那么这里呢我们去掉这个偏移。

那么再次加领域这个地方,零一这个地方呢我们就是这一串数字,那么除了这个领域的话,还有呢是一个任意这个地方啊,我们也写一个相同的数字进去,20121,然后再416,这里的生物品数量。

比如说我们一次购买三个,那么还有26,这里呢是八个字节,所以上这个超出我们啊数量时的,我们都需要加0x前缀啊,大于0x8 的啊,0x9 的我们就需要加上这个前缀,那么在这里呢是八个字九,啊。

好最后还有一个物品所在的下标3f这里,那么下边呢它是0b0 x0 b法也可以输十进制的,一一都是可以的,好那么我们再次编译一下,那么看来的话这里有个请客呢,他可能是不支持这种啊,一字来写四个字节进去的。

那么我们可以在这里呢可以分为两个字节,两个低温的类型来写,那么在这里呢再加上前面的四字节的一个偏移,那么这里写第一位的,这个事情,那么这里写高位的四个字节,好我们再次编译,噗,好的。

那么我们进入到游戏里边啊,进行一下测试。

化学到主线成,那我们看一下我们所添加的啊,tt那你是购买血缘生三个啊,出色啊,这个血缘生三个,那我们看一下161,如果是成功的话,就1158,好的,那么我们这节课的这个测试来成功了,那么成功之后呢。

我们下一节课呢我们就对这个相应的这个函数来进行封装啊,那么这里呢也给大家留一个作业,那么大家自己下去啊。

封装一下这个函数,那么首先呢还要定义一个类似的一个结构,这样我们的可读性能才会高一些,那,么第一个参数呢是我们要出售物品的名字,第二个呢是我们要出售物品的一个数量,那么这个呢就是一个坐垫嗯,留给大家。

那么之前呢已经有类似的这个例子,大家可以参考一下81课的啊,这个代码好的。

P72:083-封装物品出售函数SellGoodsForName - 教到你会 - BV1DS4y1n7qF

大家好,我是郁金香老师,那么上一节课我们一起分析了物品出售,相关的风暴的结构,以及计算出来相应的偏移,那么这一节课我们一起来封装这个函数,那么也就是出售,向商店出售我们物品的函数。

那么首先打开第82课的代码,第82课的代码是,物品出售的函数是3。3%,第82课的代码是3。3%,那么我们先来看一下第82课的代码是多少,1。0%,第82课的代码是3。3%,第82课的代码是3。3%。

那么首先我们转到结构单元,那么我们看一下需不需要重新定义结构,之前我们用到的偏移,我们把它复制出来,首先+2这个地方,+6,然后+1,+2这个地方没有,那么这里它多了一些东西。

需要对+2这个地方进行一些修改,那么我们看一下+16之后,这里是1A,1A的话,我们1A到,因为这里是16过了,我们是2E这个地方,需要给它添加一个物品的类型,还有就是3F这个地方,那么这个结构的话。

我们需要重新的写一下,(音乐),我们就在之前的基础上进行一下修改,应该也是可以的,因为它之前的这些偏移,给它应该是没有冲突的,我们再来看一下,里面这个地方,这个地方可以不要,1E,然后这是16。

16过了,我们是26这个地方,要加上16个字节,那么这16个字节的话,我们因为前面这里已经占了4个字节,那么实际上我们这里要减掉4个字节,那么实际上这里就是0X0C,那么在后边的话。

就是我们的+26这个地方,+26我们看一下是物品对象的8个字节,那么我们再来看一下之前的结构,之前是买入这个物品的话,它不需要我们26的这6个字节的数据,那么在这里我们在,这里我们应该是8个字节。

8个字节我们是google,那么26过了,我们再是21,6到21,那么6到1的话,我们也是占的好像是8字节,14这个地方,那么也就是说我们26来,恰好是加上这8个字节,恰好就等于21。

那么这里我们写Dword,26这里是8字节,21这里是4字节来源于4C这个地方,那么也就是我们的,Buy Sale Type,那么21之后,我们再看一下,这里还有一个3F,那么21过来是3E。

那么我们加上这里的4字节,那么实际上我们还要加上9个字节,应该是,我们再来计算一下21,那么这里占了4个字节,再加上12个字节,13个字节才可以,那么这里我们用Y点来表示,21加上这4个字节的话。

恰好就等于32,32的话,到3F的话,我们差13个字节,那么这里我们加上13,我们再来看一下是不是这样的,这里是我们的2E,到我们的这个地方,我们数一下有多少字节,3F应该是到这个地方。

那么这前面一共有13个字节,那么这里我们就是13,那么这一字节,我们就是它的一个下标,再来看一下,是背包的一个下标,一个字节来源于EF4,那么这个结构的话,我们就可以增加这些东西。

就可以增加这些相应的一些偏移,当然在后边的话,我们可以把它定义小一些,因为前面已经这里从这里已经是3F了,那么这里我们定义为0个字节,应该就够了,511加上3F的话,3F再加上这1字节的话。

前面就是0X40,这里加50就可以了,好的,我们先编译一下,那么接下来我们进行了相关功能,函数的一个封装,因为这些数据都是与我们背包的一些数据,相关联的,那么我们把它放在背包结构里面,啊,"關閉。

關閉",(音樂),(音樂),轉到第一,然後我們在後面添加我們相關的函數,這裏有個Getty Google字音,Text for later,我們需要用到這是商店的,我們需要的是背包的同名的函數。

首先我們也是通過物品的名字去查詢,這個物品在背包裏面的一個下標,如果我們查詢到下標,它是小於0,我們直接就返回,就是沒有這個物品出現,如果查詢到相應的物品,我們就進行出售,(音樂)。

在這裏我們添加我們之前測試的匯邊代碼,當然之前的這一段我們也可以把它省略掉,在這之前我們只需要定義一個相應的結構就可以了,在定義結構的時候,我們也給它進行一個相應的初始化,移到我們的主線材。

我們先嘗試看編譯器,它是否支持字節集的初始化,我們首先編譯一下,編譯生成,看來它不支持這樣的一個初始化,所以說在這裏我們就用指針來進行一個操作,那麼指針在指向前面的緩衝區。

我們通過這種方式來進行一個轉換,再次編譯生成,(音樂),然後我們再進行相應的修改,首先是+2這個篇,我們進行修改,然後+6這個地方,我們繼續修改,(音樂),我們再轉到結構裏面去看一下。

好像這裏我們有些錯誤,這裏我們+6表示的是出色,我們再來看一下相關的編譯+6,這裏我們應該是+1或+2才是物品的類型,這裏我們在取名字的時候,有點失誤,+1+2,這裏是物品類型,我們這樣取名字更好一些。

那麼再次移到我們的源代碼單元,接著就是我們+0或+2這個篇,這裏就是Type2,然後我們進行相應的複製,那麼這裏的複製的話,我們需要先搜索一下相應的物品名字,這裏我們有一個相應的一個下標過去了。

那麼現在我們就需要用到這個下標,+5是這個地方物品類型,然後把它複製一下,還有是+2這個地方,也要進行一個類似的操作,然後是物品數量+16這個地方,物品數量這裏,我們之前參數這裏傳進來的數量。

然後這是一個8字,那麼來用ID2這個地方,或者我們也可以對它進行修改,這個地方我們把它替換為叫做物品的ID也可以,那麼最後這個是物品的一個下標,那麼直接複製為按,那麼或者是從輸出裏面取值。

它的屬性裏面也有這樣一個數值,那麼這一段對於指針的操作的話,我們需要來把它移到我們的,這個匯編代碼之外去進行一個操作,那麼接下來我們再進行編輯,對,這個下標,我們在這裏重新把它切換一下。

這裏聽音變亮的時候,好,那麼接下來我們進行相應的測試,移到我們主現成單元,先到全局變量單元,我們找到背包的全局變量,好,那麼我們在這裏,出售人參,出售數量1,那麼在測試二這個地方,我們這裏的金創要到。

那麼在這裏我們購買,那麼接下來我們進行一下測試,調整一下,工作目錄,掛接主現成。

然後我們轉到遊戲裏面看一下,那麼這個時候我們是出售人參,再看一下我們的代碼,這裏出售人參數量1,那麼因為我們打開的NPC不是平時值,這個NPC,那麼我們先打開NPC平時值,這個時候我們發現購買人參。

可以在出售人參的時候,這個時候沒有正確的反應,那麼我們先來看一下緩衝區的參數,是否正確,偏移,我們先來對比一下,再來檢測一下我們的代碼,然後我們再檢測一下我們的資料,我們現在是在出售人參的這個時候。

我們是有一個狀態,我們現在是在出售人參的這個時候,我們是有一個狀態,我們現在是在出售人參的這個時候,我們是有一個狀態,我們現在是在出售人參的這個時候,我們是有一個狀態,我們現在是在出售人參的這個時候。

我們是有一個狀態,我們是在出售人參的這個時候,我們是有一個狀態,我們是在出售人參的這個時候,我們是有一個狀態,我們是在出售人參的這個時候,我們是在出售人參的這個時候,我們是在出售人參的這個時候。

我們是在出售人參的這個時候,我們是在出售人參的這個時候,我們是在出售人參的這個時候,我們是在出售人參的這個時候,我們是在出售人參的這個時候,我們是在出售人參的這個時候,我們是在出售人參的這個時候。

我們是在出售人參的這個時候,我們是在出售人參的這個時候,我們是在出售人參的這個時候,我們是在出售人參的這個時候,我們是在出售人參的這個時候,我們是在出售人參的這個時候,我們是在出售人參的這個時候。

我們是在出售人參的這個時候,我們是在出售人參的這個時候。

我們是在出售人參的這個時候,我們是在出售人參的這個時候,我們是在出售人參的這個時候,我們是在出售人參的這個時候,我們是在出售人參的這個時候。

我們是在出售人參的這個時候,我們是在出售人參的這個時候,我們是在出售人參的這個時候。

我們是在出售人參的這個時候,我們是在出售人參的這個時候,我們是在出售人參的這個時候,我們是在出售人參的這個時候,我們是在出售人參的這個時候。

我們是在出售人參的這個時候,我們是在出售人參的這個時候,我們是在出售人參的這個時候,我們是在出售人參的這個時候,我們是在出售人參的這個時候,我們是在出售人參的這個時候,我們是在出售人參的這個時候。

我們是在出售人參的這個時候,我們是在出售人參的這個時候,我們是在出售人參的這個時候,我們是在出售人參的這個時候,我們是在出售人參的這個時候,我們是在出售人參的這個時候,我們是在出售人參的這個時候。

我們是在出售人參的這個時候,我們是在出售人參的這個時候,我們是在出售人參的這個時候,我們是在出售人參的這個時候,我們是在出售人參的這個時候,我們是在出售人參的這個時候,我們是在出售人參的這個時候。

我們是在出售人參的這個時候,我們是在出售人參的這個時候,我們是在出售人參的這個時候,我們是在出售人參的這個時候,我們是在出售人參的這個時候,我們是在出售人參的這個時候,我們是在出售人參的這個時候。

我們是在出售人參的這個時候,我們是在出售人參的這個時候,我們是在出售人參的這個時候,我們是在出售人參的這個時候,我們是在出售人參的這個時候,我們是在出售人參的這個時候,我們是在出售人參的這個時候。

我們是在出售人參的這個時候,我們是在出售人參的這個時候,我們是在出售人參的這個時候,我們是在出售人參的這個時候,我們是在出售人參的這個時候,我們是在出售人參的這個時候,我們是在出售人參的這個時候。

我們是在出售人參的這個時候,我們是在出售人參的這個時候,我們是在出售人參的這個時候,我們是在出售人參的這個時候,我們是在出售人參的這個時候,我們是在出售人參的這個時候,我們是在出售人參的這個時候。

我們是在出售人參的這個時候,我們是在出售人參的這個時候,我們是在出售人參的這個時候,我們是在出售人參的這個時候,我們是在出售人參的這個時候,我們是在出售人參的這個時候,我們是在出售人參的這個時候。

我們是在出售人參的這個時候,我們是在出售人參的這個時候,我們是在出售人參的這個時候,我們是在出售人參的這個時候,我們是在出售人參的這個時候,我們是在出售人參的這個時候。

P73:084-1级任务分析_接任务 - 教到你会 - BV1DS4y1n7qF

大家好,我是欲擒相老師,前面的分析的話,我們已經到了一個階段,那麼接下來這一階段,我們主要分析任務相關的這些數據,那麼今天我們就來分析一下怎麼接這個任務,那麼我們以一級的任務。

天下第一虎空為例來分析一下怎麼接這個任務,那麼新建了一個賬號之後,進來之後我們打開control加扣,這個裏面有一個任務,當然前面這些任務它現在都不能夠接,那麼只有一個天下第一虎空,這個任務可以完成。

那麼其他的任務它是一些活動的任務,這個條件達不到,那麼首先我們把這個任務列表打開來,它要求這個任務去找這個門主,那麼可以查看地圖,實際上我們要在這個位置,先找這個NPC,不是找門主,而是找這個京香玉。

第一不是,說說這個遊戲它的描述,肯定有些問題,那麼現在就是在京香玉這個地方,那麼我們打開之後,需要在這裏來確認這個任務,天下第一虎空,我們看到這前面這裡是白色的,表示這個任務可以接,好。

那麼我們來看一下這個任務該怎麼接,那麼它需要幾個步驟,首先打開NPC,然後確定任務,最後才是點擊天下第一虎空,這樣能夠接這個任務,那麼我們這一刻主要就來分析這一部分的數據,那麼先打開OD。

那麼接任務的話,肯定會向我們的服務器來發送相關的數據。

那麼我們就從數據包來入手。

那麼首先我們下一個相應的斷點,當然了,我們主要是打開NPC,這些我們之前已經有過分析了,還有這些菜單的選項,我們也已經有分析,那麼我們主要的就是天下第一虎空,在接受這個任務的時候。

我們看一下它發包的一個情況,好。

那麼再點擊天下第一虎空,那麼這個時候它會斷下來,會斷下來,那麼我們來看一下,這個時候我們可以讓它發包示範,那麼我們又可以分析相應的數據,那麼我們可以修改參數2,那麼這裡我們可以把它修改成另外的數字了。

就會造成它發包示範,但是我們數據的來源我們能夠分析到,這個時候,那麼我們執行到返回,這裡可以看到WSS,那麼再返回一層,那麼就到了6690這個地方,也就是我們買賣物品相關的這個庫,但是這裡它的參數是零。

說明它的緩衝區的話,數據只有12個字節要少一些,那麼這裡是它的緩衝區,我們在這個地方進行下段,那麼再退出來,那麼我們看一下退出關閉窗口的時候,它也會在這個地方發送一個公包,任務相關的。

那麼我們重新再來確認這個任務,這個時候我們這個任務還沒有確定,那麼我們再次點一下,天下第一武功,接這個任務的時候,我們看一下它的一個緩衝區,ECXUSP,那麼它的緩衝區非常的簡單。

那麼這裡有一個83006,就是這一串,那麼實際上不到16個字節,那麼後面的全部是一個大片的零,好的,我們複製一下這串數據,那麼我們還是要讓它失敗。

失敗的話,我們可以來NF7跟進,或者是修改一下緩衝區,讓它的指令出錯,這個時候它就不會真正的,不會真正的接這個任務,那麼我們接下來才方便測試,那麼先把這個斷點來取消掉,好,那麼我們再次的時候。

我們已經得到了它的一個緩衝區的一個數據,那麼就是這段數據,我們接這個任務的緩衝區數據,那麼我們需要把這段數據來填充進去,理論上就可以了,實現我們的接這個任務,接任務,那麼我們可以把第83個的代碼打開。

進行一下相應的測試,當然我們像這種數據少的,我們也可以用另外一種方法來測試,用代碼輸入器可能要簡單一些,那麼我們可以在查看數據的時候,把它分為四個字節一段,那麼在這裡的話,它就是我們從低位開始排序。

0000008300看一下,低位是這樣的,0000,這應該是低位,這樣來,從00830000這樣來,然後這裡我們的四字節,四字節的有一個單位,那麼這裡我們需要跟它反過來。

然後再是我們的01F400006,然後再是我們的0001,最後這裡是全0,這就是我們的四字節的低位等類型來顯示的話,那麼既然是這樣的顯示,也就是說加0這個偏移這裡是83,那麼我們可以先壓在一個。

然後再複習1,再複習相應的長量,那麼最後再複習這個數字,就可以進行一個相應的測試,那麼這樣的話,我們就構成了一個是ESP,以ESP為偏移的這樣的一個緩衝區,那麼這樣佔了16個字節。

那麼佔了16個字節之後,接下來我們把這個緩衝區的地址取給我們的ECX。

ESP,那麼然後再複習0C,然後再擴,當然還有一個ECX的參數,複製出來,那麼這裡我們要先複習,0C-0C-ECX,最後才是擴,當然這裡我們執行完了之後,之前這裡分配的這16個字節,我們要把它還原。

因為這裡的話讓我們的ESP的值改變了,減少了16個字節,那麼在這裡我們APP ESP-EX10要加上16個字節。

好,那麼這樣我們理論上的話就可以接天下第一武功的任務,那麼我們來嘗試一下,但是這個時候我們發現了這裡它沒有反應,輸入竟然也沒有出錯,也沒有成功,那麼成功的情況的話,它會出現。

那麼應該是點接受之後才是我們接這個任務,剛才我們分析的只是這個菜單,那麼我們重新在這裡來進行下段,那麼我們分析的地方可能錯了,再重新下段,再點接受,那麼這個時候才是真正的接任務,那麼我們返回。

同樣是這個地方,接任務,那麼我們看一下,現在ESP+4這個地方的偏移,那麼實際上我們用DD來查看,這樣方便了我們壓榨,修改一下我們的參數,把這幾個參數實際上只有12個字節的一個數據。

它代表的是接這個任務,當然我們把這個修改一下,讓它的任務先接收不成功,等一會我們才方便測試,好的。

停到這個界面,然後我們修改一下我們的參數,剛才我們的數據沒有抓下來。

再重新抓一下,天下第一,接任務來這裡,點了它是第一次的數據。

這裡是1。

然後顯示了之後,我們這裡有一個接受,接受之後,這裡它是2,這裡數據的一個變化。

那麼我們先把它複製出來,那麼我們看到EF4083,它有1,2這兩個步驟,應該接連掉了兩次這個框。

應該是,好,那麼我們再把它修改一下,讓它掉用失敗,那麼接下來我們重新來傳遞一下它的參數。

那麼也就是說這個地方是1,應該傳數字1進去,這個時候0,2,然後是EF406,然後是8300,這裡應該是2,那麼這個時候我們可以看到它說來獲得一個金香玉的書信,那麼說明這個任務我們已經接下來了。

現在這個任務目錄裡邊的話就沒有這個目錄了,那麼我們可以另外建一個任務來做一下相關的測試,那麼在這裡我們可以任意的創建一個任務,來做一個相關的測試,那麼我們以後會繼續做一些相關的測試。

那麼我們在這裡就先說到這裡,我們接下來會來做一個測試,然後我們再說一下這個任務的解決方案,那麼接下來我們會來做一個測試,那麼接下來我們會來做一個測試,那麼接下來我們會來做一個測試。

那麼接下來我們會來做一個測試,那麼接下來我們會來做一個測試,那麼接下來我們會來做一個測試,那麼接下來我們會來做一個測試,那麼接下來我們會來做一個測試,那麼接下來我們會來做一個測試。

那麼接下來我們會來做一個測試,那麼接下來我們會來做一個測試,那麼接下來我們會來做一個測試,那麼接下來我們會來做一個測試,那麼接下來我們會來做一個測試,那麼接下來我們會來做一個測試。

那麼接下來我們會來做一個測試,那麼接下來我們會來做一個測試,那麼接下來我們會來做一個測試。

那麼接下來我們會來做一個測試,那麼接下來我們會來做一個測試,那麼接下來我們會來做一個測試,那麼接下來我們會來做一個測試,那麼接下來我們會來做一個測試,那麼接下來我們會來做一個測試。

那麼接下來我們會來做一個測試,那麼接下來我們會來做一個測試,那麼接下來我們會來做一個測試,那麼接下來我們會來做一個測試,那麼接下來我們會來做一個測試,那麼接下來我們會來做一個測試。

那麼接下來我們會來做一個測試,那麼接下來我們會來做一個測試,那麼接下來我們會來做一個測試,那麼接下來我們會來做一個測試,那麼接下來我們會來做一個測試,那麼接下來我們會來做一個測試。

那麼接下來我們會來做一個測試,那麼接下來我們會來做一個測試,那麼接下來我們會來做一個測試,那麼接下來我們會來做一個測試,那麼接下來我們會來做一個測試,那麼接下來我們會來做一個測試。

那麼接下來我們會來做一個測試,那麼接下來我們會來做一個測試,那麼接下來我們會來做一個測試,那麼接下來我們會來做一個測試,那麼接下來我們會來做一個測試,那麼接下來我們會來做一個測試。

那麼接下來我們會來做一個測試,那麼接下來我們會來做一個測試,那麼接下來我們會來做一個測試,那麼接下來我們會來做一個測試,那麼接下來我們會來做一個測試,那麼接下來我們會來做一個測試。

那麼接下來我們會來做一個測試,就在我這兒,不敢。

P74:085-1级任务分析_交任务 - 教到你会 - BV1DS4y1n7qF

大家好,我是郁金香老师,那么上一节课我们一起来分析了怎么来接这个详细的任务,那么这节课呢我们来分析一下呃,怎么把我们的任务来完成啊,把任务交给npc,那么上一节课我们接了任务之后呢。

在任务物品里面就有一个金镶玉的书信,那么我们再次按ctrl q打开我们的任务列表,里边有一个天下第一武功,他说拿着数据来去找这个盟主,那么我们需要找到某门主的这个位置,在这个这个位置。

那么我们跑到这个门主这个地方呢。

我们就可以完成我们的任务的一个交接,那么点一下这个天下第一武功的,话嗯好像就可以完成这个任务,那么我们通过通过我们的og来在46690这个地方的下段,也就是我们发包的这个函数,我们先下一个断点。

然后看一下,点击一下天下第一普空,这个时候呢它会断一下,那么我们看一下,返回上一层,那么我们可以看到也是在接任务这个地方,那么接任务呢与交任务呢,它是在同一个这个地方调用的,也是用的同一个结构,可,嗯。

那么首先呢我们也是转到这个usp加四这个地方,因为这里呢传进来这个前面的280售的话的地址呢,就是这个18480这里,那么我们转到这里看一下,那么前面呢都是一样的,这里这前面两句都是一样的。

那么可能后边加零八这个位置呢可能就是我们的任务任务编号啊,而这前面的表示我们交接任务这八个字节,那么这里呢它是1001,那么我们先破坏掉这个数据,先让它跑起来,然后呢我们再用我们的代码注入器进行测试。

那么现在呢这里呢已经改变了,变成了1001,好像是这么多哈,那么我们再进行一次拦截,看一下,天下第一幅图,这个数字复制出来,1001,那么我们先把它弄用零来填充,然后再用我们的这个相关的这个代码来完成。

按e s c键啊,再重新来退出来,进到打开m p c对话,然后呢,我们再注入我们的代码,但是这个时候注入呢我们并没有反应,那么我们先再重新下段啊,试一下,在这个地方也下一个断点点,天下第一武功。

那么我们看一下1001ef 4,我们把这里的缓冲区数据复制出来。

这里是交任务的数据,那么第二次呢他断在另外一个地方啊,那么我们从这里返回,那么可能是这个地方呢才是我们的交任务,那么我们先看一下它的一些相关的数据,那么这是它的一个缓冲区。

那么可能这个才是我们的真正的交任务的这个包,或者是要需要这两个包来组合起来完成,那么我们先让他跑起来,那么这里呢还会再次的断一下,我们再来看一下这个地方,usp加c啊,这里应该是看e s p的这个数字。

那1005,好再次让它跑起来,再看一下现在usp的数值,让他跑起,好那么这个时候呢我们看一下它可以来完成我们的呃,相应的这个任务就完成了,但是我们不知道它究竟是哪一步取了起了这个关键性的一个作用啊。

那么我们这里的堆栈的数据呢,我们都把它复制出来,相当于他可能发发送了一共四五个吧,这个数据包。

那么这个时候呢我们可以来啊换一个角色来重新进行这个测试啊,因为这个角色它的任务物品已经消失了,我们不能够再做相关的这个测试,好的,那么我们重新换一个账户,那么重新换一个账户之后呢。

我们也打开这个本质目列表啊,嗯这里呢显示我们的天下第一,我们这个任务还没有完成,那么我们接下来我们就用我们的代码注入器来进行相关的测试。

把我们刚才抓取的这些缓冲区数据来进行相应的测试,那么首先呢是1001,那么我们进行注入,那么注入之后呢没有反应,那么我们再来看一下在下边这个数据。

那么the one默认这个地方,那么首先是零,然后是这个525920,然后是这个数字,然后再是00b,那么我们再用这个缓冲区来试一下啊,这个参数,那么这个时候呢也没有环境。

那么我们接着用下面的这个数值来进行一下测试,这里是0100,然后再是ef 4,1005应该是在这个位置,最后呢这里是8300,好的,那么我们把相关的代码复制一下。

那么这个时候呢我们发现的是这一串数字呢来完成了我们的这个任务,来完成任务,那么可能呢就是这个任务三,这里这里测试,ok,哈哈哈哈哈,那么可能就是这两段代码一个是接任务,一个是交任务啊。

那么这是我们目前的一个分析,那么我们也可以再重新建一个账号来来做一下相关的测试,那么首先呢我们新建了一个账号之后呢,我们把第一段代码复制进去,然后呢注入到游戏里边。

那么这个时候我们看呢不打开npc对话呢,也可以接到这个任务,然后我们有了这个npc的物品呢,我们跑到门主这个地方去,那么到了门口这个位置呢,我们再把交任务的代码复制上去,那么看一下能不能够直接交任务。

那么这个时候呢没有用,没有用的话,我们先打开我们的npc再交任务,那么这个时候呢还是没有用,那么可能我们要与任务二啊,前面的这一步呢一起来完成,可能前面还有第一步啊,这里可能也需要执行。

那么我们先执行第一步,然后来再来执行我们后面的代码,那么这个时候呢能够获得这个金链子,那么说明的话,我们在第一步的这个呃这个消息呢也必须要发送给服务器才可以好的,那么这节课呢我们暂时做到测试到这里。

那么更详细的测试呢,大家呃自己下去啊,分析一下相关的这个数据,那么可能呢我们这里呢要经过三个阶段啊,交任务一,交任务二。

好的。

P75:086-封装发包函数及测试1级任务代码 - 教到你会 - BV1DS4y1n7qF

大家好,我是郁青青老师,因为我们很多地方都会调用到这个4a6690 这个函数,那么这个函数呢它有两个参数,那么一个就是我们呃数据的一个缓冲区,另外一个呢可能是缓冲区的一个大小是一个常量。

那么今天这这节课呢,我们先打开第83课的代码,有时候呢因为由于权限的问题呢,它不能够注入到我们的目标程序,那么在这里呢我们可以在呃这个链接器啊,输入清单这里调整它的这个级别。

调整为这个管理员的这个级别的命啊,那么最后这一个就行了啊,啊ui c执行级别,当然我们也可以自己呃编写代码实现提前啊,但是这样设设置的话要方便一些啊,就是注入代码的这个ex e这一部分我们可以提前。

那么另外呢我们嗯先封装一下发,那么首先呢我们转到我们的,结构单元,那么在最前边啊,这个地方,那么还有一个参数呢,可能是缓冲区的一个大小,devoid类型,再转到我们的源代码单元,那么我们把这两个参数啊。

首先是异常的一个处理,今天,哈哈,那么在这里呢添加汇编代码,那,么这个参数呢我们来源于我们的嗯这个变量里面传进来的这个大小,那么这个参数呢我们来源于呃e4 x呢,来源于我们的这个缓冲区的啊。

传进来的这个指针的这个地址,那么这里的话我们不,新的代替e4 x,那么这里呢我们可以先把这个货的地址放到ex寄存器里边,应该没那么这样以后我们可以直接调用我们自己写的这个函数啊。

那么这段代码的话我们就可以省略掉了,好的,我们也可以做一些相应的替换,那么在这里呢我们也需要一个返回值,如果是出现异常refresh,那么如果成功返回升,先编译一下啊,要么这里出售物品的哈。

这里呢我们也可以做一些改动哈,可以直接调用这个库来实现,那么这一段呢我们就可以了,不需要了,那么这里我们直接改为,新的dt,然后呢直接是指针的地址,p n p c data。

然后呢后面呢直接是缓冲区的大小等于x86 ,这样就可以了,那么我们看一下,可以测试一下回城符,转到主线程单元,然后我们换一个账号来进行相应的测试,挂机到主线层。

然后我们看一下现在人生的数量是143142,卖出了这个人声啊,那么我们的测试呢是成功的,那么我们再重新进一下游戏啊,可能是刚才og呃,退出的时候呢,忘了去掉这个相关的这个段子。

那么可能就会造成这样的错误,那么我们再重新测试一下挂机主线成,然后测试,那么这个时候呢我们发现了没有,打开这个买进买出的这个窗口呢,它也可以出售出售这个人生,也就是说只要npc对话打开了,他就可以出售。

1354134好的,那么我们的测试是成功的啊,那么我们就把它再给呢也记下呃,也就是在出售物品的时候,嗯,嗯,那么我们还有存仓库的这个地方呢,我们也可以把它改一下,保存到仓库。

那么这段代码呢我们也可以做一个调整,直接就是w胜的对,那,么取这个结构的地址就可以了,然后呢后面是也是0x86 ,那么现在呢我们就可以保存到我们的仓库里边,那么这里呢直接是指针指向我们的缓冲区的。

那么我们直接传递这个指针进去就可以了,那么后边这一段呢我们就可以注释掉,那么除了保存到仓库,我们还要从仓库里面取出物品,那么从仓库里面取出物品呢,我们当时呢是用的move固执啊,用的这个函数啊。

移动物品来实现的,应该也可以实现,那么这个地方呢我们也可以做一下修改,哈,那么这个地方问我们需要取地址,它本身是一个结构的地址啊,不是呃,不是指针,那么这里用的也是一个led指令啊,所以说在这里的话。

我们需要取他的地址,好那么我们再次编译一下啊,好那么接下来呢我们看一下我们上一节课呃的这一段代码,那么这一段的话我们就直接可以了,也是定义这个定义一个结构来存放这个相应的我们的这个数据。

但这个结构呢比较简单,那么首先我们来看一下嗯,e f4006 ,它分为三部分,第一部分我们先要封装,天下第一股疯涨,那么我们先在主线程单元直接测试,把这前面的代码删掉,嘟嘟。

那么在这里呢我们呃可以来直接给它构建啊这样的一个结构,然后给它传进去,那么注意我们构建结构的时候,这个呢它的呃数据呢是离我们偏离最近的,是加零这个偏移,那么我们现在可以在这里定义一个相关的一个变量。

局部变量来实现,那我们把这个变量呢放在前边,然后我们用这里边的数据啊去给它进行初始化就可以了,那么这个是第一个位置,然后这里呢是第二个位置,这里呢是它的第三个元素,最后这里面是零。

那么这就是它的一个缓冲区,那么它的还有一个参数呢是弧形零碎,那么我们可以把这段来注释掉啊,直接调用我们的w s新的代替去救助工具,代替米x c,这样呢我们就能够接到这个相应的这个任务。

那么第二步的话我们就是要打开npc,那么我们打开的npc来是门主,那么第三步呢我们就是交任务,那么交任务我们来看一下,交任务呢,它需要分分为两步,啊首先呢我们是调用这个相应的扣,那么另外还有一个空。

那么我们先写一下矫正补基,那么这里的参数呢都是一样的,那么我们只有这一部分,它数据的一个初始化不一样,把这道数据复制进去。

那,么我们从这里来开始复制,123,那么这里呢第二个呢是ef 4,这里,那么第三个是这个1001,那么最后一个呢,这里是零,那么最后呢我们就可以调用相应的这个wc的代替取他的地址,然后呢我们e x c。

当然我们还需要后边还需要进行第二步,那么第二步我们来看一下它的一个数据,那么1001来这里变成了我们的100,那么ef 4后边我们再看一下,变成了六,哦这里本来就是六啊,那么只有一个地方变动了啊。

也就是这里它的序号来设啊,大致就是这样,我们就可以交任务,一,嗯好的,那么接下来呢我们先编译一下,然后再新建一个账户做我们的测试,因为这个人物角色的话,它相应的这个任务已经完成了。

那么我们重新再建一个人物,好那么我们先注入代码,然后呢我们挂接到主线程,然后进游戏,我们看一下,先测试一,那么我们取得书信,这个时候呢我们可以写一个判断的嗯,判断的函数,判断接这个任务是否成功。

就通过这个任务列表里面的这个属性来判断嗯,然后呢我们测试二打开npc,然后测试三,那么我们看嗯打开npc的时候呢,呃这个时候没有正常的打开,我们看一下名字是否正确,open npc啊。

那么还有一个呢我们需要选中这个npc,那么我们看里面有没有选中npc的这个动作,或者对对象啊,然后呢这里有一个选中npc的一个动作,那么我们再来看一下是否有相关的出错信息。

那么这个时候呢我们的npc呢它没有打开,再检测一下它的名字,那么我们用d加载看一下它的名字是否正确,或者我们也可以用c来搜一下。

那么只有这三个地方呢是一个干净的一个名字,那么我们转到在o d里面,转到这三个地方,看一下是不是我们的嗯,这个相应的对象,那么往前看一下,npc的话对象应该是二一,那么在第一个的话可能不是。

三块的饼好像是,那么我们再来看一下最后一个,那么我们可以尝试改动一下它的名字,在进到游戏里面看一下423这个啊,嗯,嗯那么是这个,那我们再来看一下它的名字。

dp,那么我们没有找错,为什么没有打开这个npc,那么我们再来嗯这个相应的代码,我们再进行一下调试,那么首先我们看一下它是否找到了相应的这个对象。

这个时候把断点哈禁止掉,我们再退出o d,再重新编辑一下,然后再移到主线程单元,打开npc的这个是我们txt 2这个地方,好在挂接到主线程测试二,我们看一下相关的信息呃。

那么这个时候的话我们看npc的对象的话,它是找到的,但是找到的这个对象的地址好像不太对,我们再来看一下啊,那么返回到这个对象地址的话,离我们刚才所找到的应该是在326这个地方开始的啊。

32600开始的才应该是我们的这个对象地址,那么它返回来的这个对象地址,的话应当是一个错误的一个地址,对啊,我们在后边呢没有跟相应的参数,那么我们重新再编译一下,再跨界到主线程测试。

那么这个时候呢我们没有正确的啊偏离到这个npc的这个对象,那么我们进去看一下,因为这里面它的一个比较的话,我们需要来一个呃在这里调用的时候的话,需要用一个get it代替来初始化。

那么这一步呢我们忘掉了,好的,那么我们重新,再编译一下,那我打不开这个npc的话,也可能是这个名字的问题,或者是这个字串呢,它很与我们所比较的这个字串不相同,但是我们从游戏里面来看的话。

它显示的这个文字的话,它显示的这个文字后边这里多了一个空格,好像啊从这个,从这个显示的图标来看,那么我们嗯进到啊用后技能加载到游戏里边进行一下观察。

那么我们先来找嗯,把这个npc对象的地址找到,我们可以进入到打开npc的这个库里边,嗯,gt logo这个行为分类哈,那么在这里边偏离的时候呢,我们可以加上一些调试的语句,那么如果这个字串不为空的话。

我们打印出相应的调试信息,或者是对象名字,然后呢再是我们的对象电子行,嗯,嗯嗯,好的,那么我们再次编译,先骗你一下,再打开我们的调试信息查看,挂接到主线程测试,那么我们可以看到二dbc 2 f f0 。

这是对象的地址,那么在这里的话,明显的他空了一个。

这里我们也有空格,但是你看一下。

或者d j c20 级c2 f f0 加上320是名字的偏移。

然后我们用dp来查看一下,那么我们注意这里呢以后是六个字,在这里我们能够看到一个空格,它多了一个结尾的字符呢是二零,那么所以说像这种的话,呃,二零它的这个好像是空格,但也可能不是啊,这个我记不太清楚嗯。

那么我们在比较的时候呢,这个时候我们就需要加上这个二零,加到这个后边去,那么在这里我们先加一个空格试一下,看是不是加了空格,我们先退出退出o d,再重新编译一下。

那么再次挂解主线程测试,呃看来他应该是加了这个空格,因为在这里的话,他已经呢应该是把这个npc打开了啊,这个时候啊,所以说在这个时候的话,那么我们再继续进行相应的测试,测试一测试二,那么测试三。

那么这个角色的话,这里有一些经验值了,应该是相应的任务已经完成了,那么我们另外呢再换一个角色来测试这个功能,好那么新建一个角色之后呢,我们再次输入我们的代码。

然后挂机到主线程测试方获得金镶玉的属性测试二,打开npc测试三啊,或者精炼,那么经过这三部了,这个任务啊就完成了,ok,好的,那么这节课呢我们先测试到这里,那么下一节课呢我们再把嗯。

再把它写成一个单独的函数来完成这个任务,好的。

P76:087-分析可执行任务列表 - 教到你会 - BV1DS4y1n7qF

大家好,我是郁金香老师,那么这节课呢我们因为最近的课程呢都会分析任务相关的这些数据,嗯,那么我们这节课呢我们来分析一下未执行的任务列表,所有未执行的任务列表的数据。

那么也就是按下ctrl扣啊,全部任务这个列表的相关数据呢,我们把它分析出来,那么在这里呢我们随便选一个保护农田的任务。

那么首先呢我们用c1 ,附加到游戏来找一下游戏的任务名,那么这个时候呢会出来4~5个的列表,那么这个时候我们对任务的名字来进行修改,那么再再次进入游戏,我们看一下,那么一五这个呢是列表里边显示的。

但是呢这个并不是我们所要的,我们所要的是它这个列表的一个来源,我们再次按ctrl扣打开这个字幕的列表,在一道保护农田这个任务上,这个时候呢它变成了一二,那么说明的话这个所谓的缓冲区啊。

呃任务列表的这个缓冲区不区的话,可能是来源于这前面这两个,那么在后面这个三零开始的呢,应该是这个列表啊,列表里边的这个数据,那么我们要找的是它的一个数据的缓冲区的一个来源,那么可能是在前面这两个。

那么我们再次关掉关掉任务列表,再次修改,那么再次打开这个列表看一下,那么这个时候呢是二二啊,这个数据来源是二二,那么可能是前面这个,也可能是后边这一个再次修改一下,那么应该是来源于前面啊。

这个地址是我们的任务相关的一个缓冲区附近,那么我们就从这个关键的数据来来进行回溯,那么首先呢我们可以把og打开,也可以在这里边来找一下访问了这个地址的代码,或者是应该是改写了这个地址的代码。

嗯那么我们再来看一下啊,那么改写的话应该是找了它的一个数据的一个更新向服务器发送哈,那么我们先找一下访问的,那么这样涉及的代码呢会多一些,那么再次按一下ctrl刻画,那么一共呢有这三个地方。

那么我们先把这三个地方把它复制下来,相关的代码,那么这三个代码的话都是读取的代码,啊没有这个写入的,那么写入的话应该是某个任务它完成了之后,我们再次打开的时候,它可能是比较好,相应的地址不同。

那么呢他在会才会来呃更新写入这个相应的啊数据组,那么接下来呢我们把c一的调试器啊取消掉啊,卸载掉,然后用o d附加进入我们的游戏,去,然后我们转到第一个地方来看一下。

它是在这个地方呢读取了一个字节的数据出来,那么我们现在在这个地方下一个断点,然后再次按下ctrl q,这个时候呢他断下来有一个数据的一个来源,我们可以从这里看到。

那么这个阻止争夺争夺战应该是一个呃任务的名字,那么它数据的来源呢来源于我们上一层,那么我们先回到上一层这个库,那么回到这个地方,那么它的数据来源我们看到来源于ex这个地方,那么所以说我们从这里的话。

呃这里呢我们标注一下时政不明,可能是真不明,那么我们先让他跑起来,那么这个任务名的来源,我们看它是不是一个数字,那么继续再往前面看,他可能来这里有一个跳转,那么它有两种方式。

一种方式呢是直接从这个这里可能像是一个数组啊,从这个数组里面读取出来,那么另外还有一个条件,那么这个条件啊他不达成的时候呢,还会另外再读一次啊,会多读一次,那么我们接着往前边来看一下ex。

那么ex呢在这里的话看起来它像是一个数组的形式,但是这里呢它又有一个ex,我们看一下ex的来源,ex的来源的话,我们在这里呢能够找到一个机子,那么说明的话呃,这个e4 x来应应当是一个机制。

那么加上了后面的这个ex,那么1a x加四的话应当是一个偏移,那么它偏移的计算方式的话,计算有一些奇怪,它的这个偏移呢来源于e d i啊,那么e d i在这里呢。

它ex加ex乘二呢相当于就是我们的eti,然后史上三啊,这然后他在这里呢再左移了六位啊,左移六位的话,这里呢我们相当于是嗯,1248好像是乘以64的样子啊,124816 32呃,64。

那么这里它相当于是神医,那么64的话相当于是0x40 ,啊随意了,左移了这么多呢,相当于是神谕这个数字,那么也就是说在这里的话,它实际上是相当于我们的e d x d e d i里面的数据啊。

取出来乘以我们的那0x这里啊应该是这个数据,那么我们也可以来算一下,十进制的64,那么乘以三,等于16进制,啊设定也就是192,我们可以再算再算一下,64x3=192,也就是乘以三零。

相当于我们这个e d i的数值取出来,然后呢在这个地方的话,它相当于呢是ex的来加上这一个地址啊,e d i c e嗯,c0 ,再加上四,那么这样一个呃最终呢得到了我们的一个任务名,那么ec x的话。

我们这里呢它已经有一个机制了,那么我们代入进去啊,就是这个公司,那么关键就是这个e d i我们得找到,那么e d i我们往前边来找嗯,一直没有对这个e d i来进行一个呃更改这段代码。

那么我们再往前面走,三,那么找到这个位置的时候呢,我们发现这里有个e s i e d i n来源于13+0 x4 c4 ,那么接下来的话我们就需要找一si的一个来源,e si来源于e c x。

那么我们在这个地方下断,能再次让它断下,到上一层我们找一下ec x的来源,ec x呢再次来源于我们的e s i,那么我们再往前面走,或者我们最方便的方式呢就是用我们的c来搜索。

那么它又来源于我们上一层表ex,那么上一层的这个呢它来源于ex,我们再找一下ex的来源,那么ex呢来源于e d i加上2a4 ,但是这个不知道是不是可能是这个公式啊,那么我们把这一段呢复制下来。

那么在这里做一个标记,再退回来,按减号,退回来之后呢,我们把这前面的这个公式呢带进去,按加号啊,再退回来,退回到这个地方,那么es si的来源的话,就是这个地方,e d i加上2-4。

那么这个时候呢我们继续讲,找e d i的一个来源,把所有的断点呢先取消掉,然后再找di,那么这里有个e d i来来源于27c啊,那么可能是这个地方,但是这个也不确定哈。

因为从这个代码它有可能某一部分代码没有被执行到,那么我们也可以在这里给它做一个相应的标记,嗯嗯,那么我们在这里下一个断点,再次让它跑起来,啊这个时候呢他断线了断线,我们看这个公式是否可用啊。

这个公司是不可用的,他,这里有一大片的零,那么也可能是这个公司呢这里呢还没有开始复读,我跟他写入这个相应的数值,我们先让它跑起来再来看一下啊,发现这个地址栏是不可用的,那么说明我们的嗯找数据的时候呢。

可能是找错了,那么我们再退回来啊,按减号再退回,退回到最原来的这个地方,那么在这个库上面来下一个段,那么我们移到最前面,看一下现在di的一个数字,我们在这个地方重新给它下断。

那么我们注意观察一下这个di数值的变化,怎这里呢,他每次增加了八啊,八个字节,那么我们看一下e d i是在什么地方改变的,那么我们在这里找到了bi的一个变化吧,每次加了八,那么我们找一下它的一个初值。

看一下初值是不是我们在前面的啊,这个初值,好的,那么我们再次关掉这个窗口,再次让它断下来,那么我们看一下现在es si的一个数值,那么我们直接把这个常量带进去讲,这样可能更方便一些,加上44。

那么这是它的一个初值,那么初值的话我们来看一下呃,再加上按照我们这的这个公式来计算的话,也就是e d i的这个数值来取出来,再乘以c0 ,再加上四,再加上这前面的这个公式。

那么我们看一下现在e bi的数值取出来是多少,那么这个时候呢它取出来的数字呢是131啊,1c一嗯,那么我们取一下它的一个数值,那么一审一我们用计算器来计算一下,1c一乘以c0 ,再加上4150c4 。

那么我们把这个1c4 啊记录一下,那么它的这个公式的话,就是在前面的这一个呢加上我们的,然后dc 4,那么我们来看一下这个是不是我们的任务名,那么这样呢我们就能够找到我们的任务名,好的。

那么我们先让他跑起来,那么在这个机制已经有了,那么我们接下来呢就需要找我们的这个e d i的这个来源,e d i呢刚才我们找的,啊就是这个数字你选一,那么我们接下来找它的一个来源,c38 这个数字。

那么我们先在函数的头部往下断,断下来了之后,我们看一下这个438来源于e s i,那么我们再返回一层,看一下在这个地方看一下,按f4 执行到这里,那么这个时候呢我们没有找到c a38 相关的数据。

但是我们在这个地方下一个段啊,再次让它断下,图的扣,那么我们再来找一下,这个时候呢ex呢等于我们的c3 包啊,那么我们接出来就需要找这个ex的一个来源,那么我们往往前面找找到找到这个地方啊。

那么我们再次在这个地方下断,但是这个这个地方下断之后,那么我们发现了它不会断下来啊,说明不是的,那么我们在这前面这个地方再次下断,那么这个时候呢它会断下来,那么我们看一下e d i的一个数值。

那么我们按f8 执行一下啊,就是c38 ,那么它来源于我们的e d i加上一个2。4,那么我们把相应的公式呢代入进去,加上2=4,好这个断点呢我们也先取消掉,那么再找一下e d i的一个来源。

那么e d i呢有可能是来源于我们这一句,那么我们在这个地方下一个段,再次关掉我们的任务窗口打开,但是它不会断下来,说明这个地方没有被执行到,那么我们再找一下前边的复制,而其实这个地方。

这个地方呢也不会断下,再继续往前走,那么这里也有个274,那么我们发现了它都不会断下,继续再往前走,再往前找一下,这个时候呢还是没有断下来,继续往前走,e d i的来源,嗯。

那么或者我们用c一先来搜一下这个库呢,看起来它的代码很多啊,很大,选四字节16进制,那么这个时候呢我们直接能够找到两个地方,一个是6698,一个是f59840 。

那么这个6698呢可能是我们311开始的,可能是我们所有对象里面的这个数字,那么这个呢可能就是我们的所要找的一个机制,那么我们既然能够直接收到它,那么我们就直接用在我们的mod里边。

再来搜一下这个常量啊,这个时候呢能够找到这个场面,嗯就是,我们来搜一下,看调用它的地方,地方是不是很多所有,那么我们发现调用这个机子的地方的话是相当的多啊,说明这个机子的话。

它还是一个呃相当重要的一个机制,mf 59840,那么我们看一下之前有没有用到这个机制,这f59 ,八设定好像是这个这个机子f5984 ,那么实际上也就是我们f一和f 10的啊这个机制。

那么这个机制呢我们很早就有用好的,那么我们把它替换进去,好那我们保存一下,那么它的偏移的话就是来来源于这个地方啊,那么我们再退回来,按减号,那我把这一段代码呢,我们先复制出来任务名的啊。

这是关键的一部分,只要,那么在这里呢它是一个循环,那么可可能就是一个循环的,他也在偏离这个任务列表,然后每次来他家八个字节啊,那么我们主要的来看一下它加八个字节是一个什么意思,那么也就是说在这里的话。

他加八自己来分别取了1c11 比五,1431441比六,那么取的是这些数据,那么这些数据每一个取出来之后呢,它都会审议我们的呃040,然后呢再加上我们的这个公式啊,那么我们再来看一下,那么di的数据呢。

我们公司呢我们给他带进去,那么首先我们把后面的地址栏取出来,那么这个地址呢我们能够取出来,但是这个地地址我们乘以040的话呃,它不支持这个呃这个工具我们的这个,命令行呢它不支持这种啊审法的这个操作啊。

所以说我们需要来把相应的这个数据来取出来,再乘以我们的0c01 c0 c0 c0 ,啊那么这样的话它是可以的,哈哈,加上,1x1啊,那么我们好像是少加了一个括号啊,那么我们再来试一下这个公式。

看来他是不支持这样的一个访问方式,那么我们先把1c一取出来,用计算器算一下,一水1x40,一选b1 c1 ,154 零,那么我们加上幺五cd,再加上四来看一下它的名字,那么第二个呢我们再来看一下。

那么这是我们的第一个能认为你的一个来源,那么它加八之后,我们再来看一下,那么加八的话,这里是一比五,先清理一下1b5 乘以三零,14740,94740,那么这个时候呢我们显示的是一箭双雕啊。

那么证明的话,我们可以来这样的话是可以来骗你这个相关的这个任务列表的,那么我们下一节课呢再编写相应的代码来骗你,那么像这种情况的话,因为我们的代码路由器的话显然是无法完成的好的,那么我们下一节课再见啊。

那么这节课呢我们的分析就到这个地方,那么还有这里哈它有一个比较好,那么我们再往后看一下它加八这个位置,那么加八这里呢它也有一个比较啊,把当前的e d i与e si加上48做一个比较。

那么如果这两个数值相等的话,那么呢这个循环就结束啊,那么看来这里它是一个循环的一个结束的一个条件啊,偏离我们这么短,那么也就是说我们的这是它的一个初始值,而这个加48这个位置呢是它的一个结束结束地址。

那么这两句呢也相对的关键,把它复制一下,那么而且这个e d i r e s i它的来源也是来源于我们前面这个公式,这里是44,那么来源于这里边这一串,那么我们在这里呢也做上一个注释。

那么这是1i的一个来源,好的,那么我们再来整理一下我们的思路,那么最先开始呢它是从这个地址,那么开始了进行一个相应的一个偏离,那么在里边呢它是取出一个相应的偏移,那么这个偏移了最后在这个地方啊。

ec x呢是一个机制,ex加上我们的这个ex的这个偏移,再加上四轮,最后就得到这个任务名,但是呢这里它还有一个判断啊,那么这个判断呢我们下节课再编写代码的时候呢,在做相应的测试。

那么最核心的数据的话就是我们所分析的这些,按照这个公式来就能够取得我们的,当然这个公式的话直接在这个命令行下面呢,它不支持这样的呃,公式的显示涉及到这个手法,我们再看一下这个地址吧,哈哈哈哈哈,好。

啊需要把我们的e d i带进去,哈哈哈,好的。

P77:088-遍历可做任务列表 - 教到你会 - BV1DS4y1n7qF

大家好,我是郁金香老师,那么这一节这一节课呢我们一起来嗯,骗离我们的任务列表,上一节课呢我们已经分析了任务列表的相关数据。

哈哈哈,那么我们先打开第87课分析的这些数据,那么首先任务名呢它来源于我们这个公式,先把这个相应的公式呢取出来,相关的数据,那么这这就是我们任务的这个名字的指针,然后呢它偏离的时候呢。

有一个开始的一个条件和一个结束的一个条件,那么起始条件呢是这个加加上4c4 ,结束条件呢是加上4c8 ,每次呢他加的是八字节,好的,那么有了这些数据的话,我们接下来呢就可以了,来骗离我们的任务列表。

打开第86课的代码,那么我们先做一个测试,现在我们现在我们的主线程单元,嗯还有交任务的这个我们也没有封装哈,嗯,那么我们就在这个测试单元一啊,这里呢做一个相关的这个测试,那么在测试之前呢。

我们先把它封装成一个函数,先转到我们的结构单元,到最后在这里呢我们添加一个偏离的函数,那么首先呢我们也是要做日常的处理,好的帮我们准备的资料了啊,复制进来,先注释掉。

那么首先呢我们定义一个它的一个开始偏离的一个起始地址,那么这个是起始地址,那么这个是结束的一个地址,那我每次呢它是加上八字解这个地方,拜拜,那么这里呢我们可以来嗯。

用一个标签来定义它的一个循环的一个结束啊,来进行一个判断,那么首先我们取出一个起始地址,nj start,那我先读出这个机子里面的数据,那么这个数据呢我们来看一下,那么这个机子的话。

我们在之前的这个机子单元里边呢,好像是有的啊,也就是我们的f一和f1 ,f一和f 10的这个ec x参数,那么我们把它取出来,然后再加上一个第一个偏移是e x2 a4 。

那么第二个偏移我们这里我们看一下4c4 ,那么取取出来之后呢,这就是呃我们任务列表的它的一个起始地址,他乘以这个030+4,再加上之前的这个呃机子的话就是我们要片里的这个任务名。

那么我们看一下这个机子有没有在我们的记词列表里面,基础单元里面我们查找一下啊,没有,那么没有的话,我们先直接使用它,那么在这里呢它的结束地址呢是48,那么接下来呢我们就用汇编代码来进行相应的处理。

那么在处理的时候呢。

我们需要先打开游戏啊,进o d去看一下。

那么先打开第87课啊,我们看一下我们关键的代码这一部分,那么这里是任务名啊,那么实际上在这里这一段代码里面,我们也可以看出来,那么它在这里呢主要是有一个比较哈,我们可以把这段代码直接复制出来。

进行相关的修改啊,复制一下,然后把前面的啊这个字节齐了,删掉和这么,那么在这里呢它有一个跳转,根据前面的这个判断,那么人如果这个数值的话,它大于我们的这个16啊,也就是0x标题呢它将跳到后面这个位置。

那么它将跳到cf啊这个位置,也就是说会跳过这一句代码,那么在这里呢我们也给它加上类似的一个处理,那么在这里呢我们把它设置成一个标签,那么直接呢就会移到这个地方来执行,加上一个标签会跳过这一句。

那么这些呢di呢我们需要给它附一个初值,在这个地方,每一个寄存器呢我们都需要给它做一个初值,首先e d i来源于我们的,开始了一个地址,那么e4 x呢它由这里来来初始化。

而ex呢它也是来源于前面的e d i哈,那么这里呢所以我们也可以进行相应相应的初始化,那么这个e4 x呢来源于我们这个机子,那么在后面这里的话,这些呢我们都已经经过初始化了,那么关键点也就是这个ex。

那么它分为两种情况,一个是我们的这个名字来直接就是取这个字串,那么另一种情况呢,当他这里这个偏移大于一八的时候呢,那么在这里呢它还会另外再取一次,那么到了这个地方呢,我们取出来的才是真正的任,务名。

那么我们在前面再定义一个变量,用来指向我们当前的任务点,那么这个指针呢我们取出来就来源于我们的ex 5,那么我们再来看一下我们写的这个代码是不是正确的,那么ex呢有相应的数值的来源。

而ex呢来源于这个地方,那么这就是我们的任务名,那么这样的话看起来是没有问题的,那么接下来呢在这个地方呢我们就打印出我们的任务嗯,好那我们再看一下啊,而且呢这里还有一个循环啊。

我们需要做一个循环的一个判断,到这个最后啊,那么这里呢我们再加上一个判断,那么判断呢也就是说呃,这个e d i的这个数值呢,我们每次呢要加上八,还好,e b r加八,那么加八之后的数值呢。

我们要看要跟他这个n d n的呢进行一个比较,那么如果这个数值呢不相等,那么我们继续循环,那么继续循环呢,我们将在将从这个地方开始啊,继续的一个循环,在这里的设置一个标签,那我们再来看一下。

e d i加上它每次来加上八字解,好的,那么我们还是来进行相关的测试啊,那么我们以测试为准,首先呢我们编译生成一下,这里呢我们少了一个新号,那么我们把它加上,真。

那么我们这里呢是直接用它的这个原汇编代码来实现的,那么我们就不用来审议这个030了啊,因为这里呢他省了一,那ex呢是e3 ,然后在这里呢在左移了六位,相当于成立了一个四零啊,这个地方是,好的。

那么我们把这个相关的函数呢,嗯转到我们的测试单元进行一下相关的测试,这个呢我们还还需要在我们的这个头文件里面,后来套出一下,好输入到游戏里边,那么挂接到主线层来查看一下相关的信息。

那么这个时候呢我们看到获取神仙草,呃这个时候呢应该说它的这个列表的话应当是不对的吧,因为我们这里所有的任务可执行的所有任务呢,可能相关的内容呢没有刷新出来,那么我们再次来看一下银娇龙的自尊心。

那么他实际上只骗你了这一个地方的这个地址,那么我们再来看一下我们的循环啊,退出,那么我们先进到我们的呃o d里面,相关的代码,我们再看一下。

那么我们在这个地方下一个断点,看他的这个任务名的一个变化,是否偏离了所有的任务,那么第一个阻止争夺战,一剑双雕,厚厚的回忆录,获取神现场事件背后,你家龙的直升机啊,只有五个。

那么它实际上是这个执行中的这个任务,那么我们再看一下,如果是全部任务,再次打开它啊,同样的那说明我们所找的这个,说找到这个地址是错的啊,那么在这个函数的话,我们可以看到。

应当是把相应的这个任务列表来添加到我们的这个窗口列表点进去,那么我们在这个地方再下一个段重新呢。

再次让他断下,再看一下ex的一个数值,那么这个的话要全一些啊,那么我们看一下它返回的地址,实在是不定方,那么这个时候呢我们发现呢这里返回的话是在另外一个地方,那么可能这个才是我们所有的那么的一个列表。

那么我们上一节课的一个一个分析的有些片面,那么我们先把断点取消掉啊,再来进行相关的分析,那么很有可能是这个,但是我们的代码的话,我们看一下它看起来是相同的啊,嗯只是我们这个机子看一下相不相同。

那么我们看一下它的这个机子,因为我们现在代码的一个机制d6 c2 fa 3 d6 d6 c啊。

那么这个是相同的,那么我们再到前面来看一下他e si的这个数值。

那么这个时候断下来,我们看一下es si的数值,那么我们之前用的是这一个公式。

e s i a da,123404第四删掉,a401 a12 没试题,那么这些这些都是相同的,我们一步一步的往下执行一下,那么我们在这里呢看到ex啊,传进机这里有个格式化字符,可能是它的一个等级。

那么这些所有的代码的话,看起来都是一样的,这里也是加上84d8 ,那么我们再次用这个代码输入啊。

再次来啊,骗你一下,看一下我们的代码,对了我们这里呢它这个循环我们这个打印我们这的这个列表,这里呢我们这个循环的话啊,应当是放在这个位置来实现,但是这里实现之后。

有可能我们的这个函数呢它会改变e d i的这个数值,那么我们先进行一下尝试。

好再次注入。

挂件曲线层,再看一下我们的调试信息,那么这个时候的话嗯。

他是偏离了,应该是我们的呃,可执行的这个任务,阻止争夺战,而不是我们所说的这个所有任务啊,所有任务列表,那么我们再来看一下说明这两者之间的话应当是有一些区别,11a40 。

那么在这前面的这个起始地址应当是没有区别,那么我们再来看一下后面的这个地址,二fa 3 d6 c,这里是6x30,加四,四比二结束的这个条件,那么我们再来看一下,做一下比较啊,肯定是哪里有有区别。

所以说造成了这两个人他骗你啊,这里是谁,帮我们看一下前面的这个偏移,这里是4。44。8哈,这两个起始地址不一样啊,这两个偏移不一样,那么这才是关键点,好的,那么其他的都是一样的啊。

这个偏移呢是所有任务列表,而之前的,之前的这个偏移,我们看有没有,那么之前我们取下来的这个偏移的话,嗯这个4c4 这个地方,那么它是我们的当前可执行的这个代码。

那么我们之前分析的这个呢应该是执行中的这个全部任务,执行中全部任务,那么这两个偏移呢不一样,那么我们把这个偏移改一下,这里改为四比44啊,四级是四级八,那么我们再一次退出去。

那么首先呢我们把这里的所有断点啊先禁止掉,然后呢退出ot。

再重新编译一下,跨界主线程测试,那么这个时候我们所建立出来的啊,就是所有任务的这个列表,但是呢还有一点不不相同啊,也就是那么我们这个游戏当中的这个任务列表的话,所有任务的啊可执行的呢。

前面它有一个等级的一个标识,那么这个呢就流流流成一个坐垫哈,大家下去把它完成一下,那么这个相关的代码我们应该也是分析出来的,就在o d里边啊,它有一个格式化字符那个地方啊,那么这个下去分析一下。

那么下节课呢我们也一起来完成啊,在前面的啊这个任务列表的一个等级相关的信息呢的一个偏移,好的,那么我们这节课呢我们就到这里。

P78:089-分析任务等级需求并测试 - 教到你会 - BV1DS4y1n7qF

好,我是郁金香老师,那么今天这节课呢,我们一起来分析一下任务等级的相关数据,啊,那么首先呢我们转到游戏里面去啊。

转到我们所有任务列表,这里的我们下一个断点啊,先来看一下,那么然后打开ctrl q啊,这个时候呢显示出所有呃任务列表啊,第一个呢是八卦老人的一个研究啊,那么我们,啊有很多这些呢实际上在这个地方呢。

它肯定也是在骗离,我们的这个所有的任务列表好,那么我们先把这个断点呢取消掉,那么进到游戏里面来看一下,这里呢它也是相应的这些任务啊,这些任务,那么每个任务前面呢它都有一个等级,这些是等级依赖都可以做的。

这个呢是要等级达到25级的时候,才可以做,那么所以说我们今天的目的呢,就是要把前面的这个任务等级的数据呢,要不然那么我们看到它显示出来的呃,任务等级来前面都有一个括号啊,然后呢加上了一个等级,那。

么实际上应该说在这周围的话啊,那么就有嗯有一个哈任务等级的相关数据,可能是在一起的,在一个结构里面,那么我们在前后的找一下,那么我们看一下,这个e si的一个数值是什么,这里有个e si的一个来源。

那么e si的话,我们看到这里呢它传给了e c x,那么说明它是可能是一个窗口对象啊,这一类的,那么这个的话,可能因为我们的统计呢没有关系,那么我们等级相关的话,可能呢与这两个偏移啊,可能有一些关系。

因为我们从结构化编程的,这个思路出发的话,就像我们定义的结构,那么它的相关的属性,比如说他的名字和它的等级的话,肯定相离得都比较近啊,那么我们往前找一下相关的代码,那么这里呢我们能够发现一个比较可及的。

一个啊数据啊,就是这个字串,那么这个字串的话,我们非常的熟悉,就是格式化字符的一个字串,那么在这里在这个地方的话,要显示的是一个啊整形,那么那么这个整形的话,极有可能就是我们任务的一个等级。

那么我们也经常用pdf啊,这一类的来格式化字串啊,也有这这一类的函数,而是p c l i n t,那么这些也是一些格式化字串的一个函数,它可以把等级呢放在里边,那么我们来看一下现在这个ex。

那么可能就是这个等级啊,把它传进去,那么这是一个格式化字串啊,那么这可能是一个其他的什么什么参数,这类的,那么我们在这,个地方先下一个断点,先看一下它的一个数值,那么这个时候我们转换一下哈选项卡。

那么我们看一下啊,这个时候1a x的词类等于六三,那么可能它的等级呢就是63,那么我们在这个所有任务列表,在这个地方呢,下段再看一下,那么执行到后面来的时候呢,我们看一下e a x的一个数值多少。

那么这里呢它没有显示出相应的字串,那么在这里呢它有一个为任委托费用啊,这里呢有个找回万年人参,那么这里考虑的都是呃,都是一些任务相关的一个列表,那么这里呢又是4040的话,64。

那么执行到这里来的时候呢,呃找回我差五图书,那么我们先把这两个断点取消掉,来看一下我们的任务列表里面有什么,那么恰好我们发现了63,64呢就是这两个任务的一个等级,那么我们接下来看一下。

它的一个数据的来源等级,那么等级的话它取的是来一个字节啊,在这个地方,一个字节来源于e c e d加二零这个偏移,那么e4 x呢又是前面的这个偏移来的啊,那么这个加密的这个偏移的话。

与我们后边的这个偏移它是一样的,这个地方它的算法我们可以看到是一样的,另外呢还有一个,我们看到在这里有一个3d6 c,那么它的机子呢也是一样的啊,这里是一个机子加上e4 x呢,是一个偏移的来源。

那么也就是说我们这两部分呢,应当是一样的啊,是一样的,那么只是一个后面的偏移呢是零四,那么另外一个偏移,你呢在这里呢是二零。

那么我们再来看一下是不是这样一回事,在这个地方下断啊,那么等级,那么我们查找一下哈,全部任务,那么全部任务这里呢它肯定就是偏离的,是所有任务的这个列表,那么这个列表的话我们来看一下,现在的话。

它的等级的话应该就是d b e c x,加上b d x加上二零,那么它的等级呢是一,而它的名字的话应该是加上四这个地方,dc,1c x1 dx加上四啊,当然这样看起来的话它也不是很正确啊。

那么我们再来看一下下边的这个地址,那么我们转到这里来看一下,e x e c e x,那么这是他的任务名再转一下嘛,我这里呢它还需要取一次,可能还有一个其他的一个判断啊,就是说这里的要加一个判断。

这个地方呢它还需要取一次啊,这要看是某一种情况要比较的呢,是比较幺八这个位置,这样还比较的,那么如果幺八这个位置的话,它大于幺六啊,也就是你x10 ,那么呢我们才是直接就是这个地址,就是任务的名字。

如果它不大于它,那么就是小于等于这个0x10 的话,那么才是呃取再一次啊,要取他的这个地址数,才是我们的这个计算的地址,也就是说多要多多预计这个指令啊,多取一次好的,那么我们既然知道了,我们再来看一下。

那么这个时候等级是第一,b e t x加上b c x加上二零,那么等级呢同样是一,那么它的我们要首先要看一下,它加幺八这个位置是否大于510,那么这个时候呢它大于我们幺零了,那么我们直接就取得。

假设这个地方就是它的任务比,jb再来看一下大鱼的话,就会跳转到这个地方,那么我们再去一下地址看一下,这个地方的话,这个地方才是他的任务名,cbo应该是小于它,要小于这个数值的时候呢。

才直接跳到这个地方来啊,这里写错了,这里应该是小于,我们比较的时候是小于11 零好,那么我们再到前面来再看一下,那么这个地方呢它的等级的话加上,而同样是一啊,同样是一。

那么只有我们后面的这个等级要高一些,就是我们适合自己的这个任务呢,等级要高一些,那么我们用这个来做测试啊,考虑更明显一些,适合自己的任务,那么我们看一下他现在的等级是3f,那么3f的话应该是63。

63等级是63,那么这个等级63的话,我们来先来看一下他幺八这个位置取出来,看它是否小于0x10 ,那么这个时候呢它是小于的啊,小于呢它就会跳转跳转到这里来,也就是说这个语句呢就直接被跳过了。

也就是取得这个地址啊,加四这个偏移的话直接就是这,那么我们看一下啊,那么的确这样我们就能够取得这么,好,那么我们再来看一下将日宁这个地方,那么这个时候呢它的数值呢是十进制的,64啊,等级是64。

那我们看加幺八这个位置的一个判断,那么同样是小于一零的,那么直接取加四这个地方呢,就是他的啊名字都是他的名字,就是他的一个名字好的,那么我们既既然我们知道了这么多的话,我们就可以来呃。

来写我们相应的这个任务等级的,相关数据了,也就是说偏移不一样,它以后我们现在涉及到的偏移了,它实际上也是在一个结构里面,或者是叫做对象啊里面,那么它的加二零这个偏移呢,我们就是任务的等级。

那么加幺八这个偏移,那么这里是来加上一个判断,判断任务名是否指针的一个判断,那么如果它里面存放的是指针的话,也就是说它这个数值要小于我们额,要大于我们这个0x10 ,那么小于的时候呢。

我们直接都跳到这里来看,直接就是取得自数的地址,那么如果是指针的情况呢,我们还要再读一次这个数字,那么这里是一个条件啊,或者在一个判断,另外呢加四这个平台是我们的任务,赠与或者是任务名指针啊。

也就是任务名地址,那么直接是我们的任务名的话,呃这个地方直接存放的是任务名的话,那么我们直接就可以显示出我们的任务,那么如果是指向地址的这个指针的话,那么我们需要了下面这些代码,再重新读一次好。

那么我们把锥形的分析了,复制一下,这个呢是最关键的一个代码,那么这前面的这些分析呢,我们就可以不要了,这一段,这一段是关掉,那么现在我们知道啊,加四这个偏移,cd,加四,任何原因千万利息,那么或者前期。

类型,那么具体是哪个类型呢,我们需要的加腰胯这个地方来判断,真的,这里应该是大于我们的linux 10的话,那么大于等于我们x10 的情况了,那么这里呢就是我它的类型加四。

这里的路径呢就是指向指针的指针,就需要了再次读一次啊,嗯才是我们指向自创的一个类型,那么另外呢一个是加上我们的二点,这里是任务等级,那么这是我们现在的一个分析,好的,那么我们打开第。

88克的代码在他的基础上呢,我们进行测试修改,那么在这里呢我们也做了一个相应的判断,然后呢,我们把这个ex的数值呢,读到了我们的这个任务栏里面,到了任务名片,那么还有一个是任务的一个等级。

那么我们也需要用一个变量,来把它读取出来,那么这个呢是一字节的啊,要注意我们要把它任务等级呢只是一字节,那么我们就在这个标签啊,这个位置呢来读取的,那么这个数值呢,我们也需要先把它取出来啊。

那么我们可以先把它取到我们的ebx里边,那么我们再来看一下他之前的一个代码,那么这里取地址的话是用来指令,那么任务等级呢,我们是嗯用这个move zx这个指定的方法,取得一致几。

那么这里呢我们需要改一下,这里是嗯e x e x,再加上我们的0x20 ,那么它取出来之后呢,我们可以把它放到e4 x里面,或者是1b x啊,这然后呢我们再把它涂到我们这啊,这个局部变量里面。

然后在这下面的时候呢,我们就可以把它打打印出来,这里可能加上一个括号啊,你是d,然后分比啊这样就可以了好的,那么我们重新再编译一下,哦对了,这个地方呢我们只能取什么呢,取p l啊就可以了。

取一个字节过来,向里面进行写入就可以了,那么或者我们把它的等级呢,就定义成一个四字节的,那么才可以呢用我们的e p x来接受,不然的话它的空间大小没有这么多。

好的我们运行一下。

再重新再编译一下,对于成功,我们,看一下调试,需要设置一下它的一个调试地址目录,哈哈哈,那么这个时候呢我们的o d呢可以退出,退出的话,这样呢注入的速度呢会快快上一些,然后挂在主线程。

那么我们来尝试查看一下我们的任务列表,那么这个时候呢我们的这些字幕列表了,他就就会出来,那么我们看一下这个任务列表的话,它的一个等级的话是错误的,那是现在,2120294 9万。

那么我们看一下游戏里面它的一个等级,那么我们再来看一下啊,这个地方,加上二零,14x对的,因为这个时候呢ex的值呢它已经变化了,我们这句指令呢,需要添加在在它的前边才可以的。

因为这里的ex呢它影响到它的一个变化,那么所以说我们要需要把这这些指令呢,添加在前边,那么这个时候呢ex的使使得这个数值呢,这个偏移量才是正确的,才是我们的这个在前面的这个加密的,这个数据。

那么这里呢因为他取了这个地址啊,它实际上是取得字串的地址,那么如果我们用这个机子加上这个字串的,这个地址的话,再来加上二零的话,肯定就是错误的,那么我们再重新编译生成一下,好的那我们再调试一下。

而且我们测试测试的时候呢,我还发现一个问题,那么也就是我们我们偏离的这个列表的话,它应当是我们当前显示的这个列表,这就是也就是说我们当前在游戏里面,显示的这个当前任务的列表,那么如果我们在选项卡啊。

它切换了啊,那么这个时候的话我们再次偏离的话,就不是所有任务列表里面的数据了,就不是所有任务的,也是我们当前的这个任务,那么所以说我们实际上找的这个机制的话,应当啊并不是很不是很准确的,不是很准确的。

那么我们要找的话,应该应当是这个全部任务的,而且我们还要想一个办法要刷新这个列表,因为如果我们进去呃,没有经过一个初始化的话,这部分数据考虑可能的话不能够偏离出来,不能够偏离到这些任务等级的数据。

那么我们之所以现在能够偏离,从这些数据呢,是因为我们已经按下这个ctrl co啊,把这个任务列表呢已经初始化了一次,那么呢我们在这里骗你的时候,才能够出现这些数据。

那么所以说我们的分析工作呢,只是进行了一部分,还没有全部的完成,那么它是等级的这个结构呢,我们现在已经获取到了啊,已经获取到了,那么我有一种猜测哈,可能的话我们在游戏里边,按下这个ctrl q的时候呢。

可能呢也会向我们的服务器来发包,那么他发包的一个请求呢,就是向服务器来更新,我们的这个当前的一个呃,未完成的一个任务的一个列表,更新到我们的服务器这边来,那么我们可以来再按下ctrl q的时候呢。

下一个断点来试一下,那么我们要测试的目的呢,就是看它是否像我们的服务器发送的数据,在嗯,是本地打开的,还是向服务器请求的,这个呃获取了一个任务列表,然后由服务器服务器把这个数据呢,发回到我们的客户端上。

那么我们下一个断点。

按下ctrl客户,这个时候好像没有断下,那我先再次让它跑起来,再,这是心跳包啊,心跳包这一路我们先把它过掉,然后呢我们再来看一下下端之后,这是我自己的任务,全部任务,关掉这个窗口的时候。

好像它会有一个相关的,会发一个相关的数据包,那妈妈好像他是可能是游戏机进入的时候,就进行了这些初始化,好像是没有发包的,经过测试嗯,那么我们可以把游戏退出之后呢,再重新啊,再重新骗你一遍。

看能不能够偏离到相关的这个数据,那么我们也可以小退一下这个游戏,啊结束掉,重新进一下,那么重新进入游戏之后呢,这个时候呢我们不做相关的初始化啊,也就是我们不主动的去打开这个任务列表。

然后我们再用我们的代码来偏离的时候,看能不能够偏离到我们的任务列表里面的,相关数据,好再次输入,化解到主线程测试,那么这个时候呢我们就会发现呢,偏离任务列表出错嗯,那么这种情况的话。

就应当是我们的这个任务列表里面的,这些数据都没有初始化,那么怎么才才不会出错来,也就是我们自己要按一下这个country cp啊,然后呢这个时候任务列表它显示出来,我们再次骗你,它才会有相关的这个数据。

因为我们相当于给他做了一个初始化,这个时候呢我们就有相关的这些数据,需要他的自己初始化一次,那么这个是所有制作列表的,就是再次来看一下,做清掉这个数据,那么这个数据的话,我们看我们想找到的。

这个所有列表的数据的话,他应该是在这个考执行任务当中啊,显示出来在这个列表里面的一个数据,那么我们选不同的选项卡的话,它有不同的这个内容,那么所以说这个任务列表的话,我们还需要更进一步的分析。

我们所要的应当是这个列表,因为这个列表里面的数据的话,它是未完成的,任务的话,在这里边呢他最全最全,我们可以通过这个任务列表来来判断,哪些任务需要做哪些任务啊,没有做,好的,那么关于这些数据呢。

我们在下一节课呢我们再继续分析,那么这节课呢我们的测试呢就暂时到这里,把任务的等级和任务这个名字呢,相关的数据呢我们我们已经取出来了,那么现在我们要做的呢,也是留一个做列给大家,那么大家就下去思考一下。

那么我们怎么来更新啊,就是说我们是不是我们每次更新的时候,就要找到这个康复扣的这个call嗯,让他去初始化这个数据,那么大大家可以下去自己尝试一下,就这,那么分析更新任务的这个相关的这个数据,或者说呃。

分析更新我们任务的相关的这个空啊,或者是代码,那么这节课呢我们暂时就到这里。

P79:090-更新任务列表分析 - 教到你会 - BV1DS4y1n7qF

大家好。

我是俞京香老師,那麼在這期我們來完成上一期課的作業,更新我們的任務列表,相關數據,那麼我們先來看一下,那麼在遊戲裡面。

我們按下"Ctrl+C",任務之後,那麼這下面的任務列表,它會被初始化,會寫入相關的數據,相當於,那麼也就是說,我們一個是執行中的任務,一個是可執行的任務,那麼這兩個偏移的話,它實際上它不一樣。

它這個列表的偏移不一樣,那麼我們之前有過分析,那麼一個偏移是從我們的4C4開始,那麼4C8這個地方是結束地址,另外一個是4D4,結束地址是4D8,那麼我們來看一下,在這個地方,我們先轉到4D8這個地方。

那麼現在我們偏離的時候,也是用的4D8這個地方,那麼我們看一下,這個實際上是在我們選中可執行任務的時候,它會斷下,那麼說明這個選項卡的話,這裡面應該是可執行任務的,可執行的一個任務列表。

那麼另外還有一個地方,是4J4這個地方,那麼這個地方的話。

我們也可以下一個斷點,可以看一下,那麼這個實際上是執行中的,這個任務列表的相關的一個起始地址,那麼我們也可以按F4,執行到,執行到這個任務名這裡查看,那麼我們可以看到這個時候,它顯示的是主旨爭奪戰。

這一類的,那麼我們用代碼輸入,我們用我們的代碼來輸入進去看一下,上一節我們寫的相關的數據,那麼這個時候掛接主新程測試。

那麼你看我們看一下的,這個時候,它所有的數據的話,都是我們所有任務列表裡面的,但是我們的可執行中的任務的話。

沒有被遍離出來,因為我們用的偏移是4J4這個偏移,那麼我們先把斷點取消掉,那麼這裡還有一個伺候自己的任務,那麼這個倒是可以遍離出來,但是要遍離出我們的伺候自己的任務的話。

我們也需要來點擊伺候自己的任務這個選項卡,才能夠初始化它相關的列表,4D4相當於是4D4開始的列表,我們才可以初始化它,那麼也就是說它有這樣一個流程。

大致的有一個流程,那麼也就是我們點擊了上邊的選項卡,那麼點擊這個任務選項卡的話,它肯定會掉入一個相應的庫,那麼在這個庫裡面的話,它肯定在某一層裡面,它會執行一個初始化任務列表的動作。

那麼現在我們就是要找到的初始化任務列表的,這個庫或者是代碼,但是在我們這初始化任務列表這個庫裡面,它又有一個寫入的動作,可以寫入動作,那麼寫入什麼呢,也就是像我們的4C4這裡面的偏移,進行一個寫入動作。

那麼我們可以具體的用OT來看一下,那麼之前我們有分析它的偏移,那麼這個偏移肯定是變動的,因為我們的機子它不會變,變動的就只有這個偏移。

那麼這個偏移的話,也就是我們的從4C4,應該是我們現在的話應該是從4D4這個地方開始,那麼4C4是我們的執行中的任務的一個偏移,而我們現在所看到的這個是我們所有可執行任務的偏移。

其實地址是從這個機子公司裡面取出來的,那麼我們先看一下,再加一個括號,那麼這個時候它這裡有一個數據是36,那麼我們在上面下一個內存寫入的段點。

那麼我們選全部任務選項卡的時候,它肯定它就會有一段代碼,就是我們所說的,它會有一個寫入的動作,那麼實際上就是像這個機子裡面寫入。

那麼寫入之後的話,肯定它就改變了這個時候為0A,那麼實際上也就是這個數據的一個改動,那麼造成了我們的列表裡面的相關數據的一個變動,那麼這裡變成了0A,那麼也就是說它第一個的數據就有變動了。

那麼這個時候最終的數字它是FB,那麼我們再次內存寫入,給適合自己的任務,那麼我們看一下,這個時候它也會像這個地方寫入36,那麼也就是說它第一個數據,列表裡面的數據的話,它就是通過一個是36。

那麼另外一個好像是FB,這樣來進行一個關聯的,最終數據是FB。

FB和36,那麼這個數據的話,我們也不知道它具體是一個什麼意思,反正知道了它往裡面寫入了這個數字,那麼我們但是可以通過寫入動作的這段代碼,可以返回到它的上一層庫,那麼找到初始化我們所。

初始化這個任務列表的功能就可以了,那麼我們就能,就實現這個列表的初始化,就能夠得到我們想要的數據,那麼也可以,理論上也可以找到點擊選項卡的這個庫,那麼我們也可以模擬這個人的一個動作來點擊選項卡。

或者這個數據,那麼還有如果是找到中間的這個庫的話,那麼我們就是直接進行一個初始化動作。

而不會顯示這個任務界面,那麼好的我們再一次在這個地方,下一個路徑寫入斷點,來看一下它的相關代碼,點適合自己的任務,然後我們把斷點刪掉,那麼這個時候我們可以從這個堆在裡面,可以看到返回的獲得一些地址。

那麼我們看返回到上一層到這個地方來了,而且我們的任務列表的話,我們可以看到它任務列表有很多個,肯定它有一個循環,那麼有循環的這個庫的話,才是我們的這個給我們的這個列表來進行初始化的這個關鍵的這個庫。

那麼我們再回到上一層再看一下,那麼到這裡,我們能夠找到一個循環。

找到一個循環的地方,那麼這裡我們有一個比較熟悉的數據,這個C0它一次加了C0這個偏移。

那麼C0這個偏移的話,當時我們也有分析,那麼也就是這兩句匯邊代碼加起來,實際上它就讓我們這個ECX的值,最終就等於我們的C0,那我們算出來之後,好像就是等於C0,這裡是C3,在左一六。

最終也就是這個ECX的值,它省以C0,所以說這個數值我們比較熟悉,那麼這裡還有一個就是EDI+I,那麼這個EDI的話,實際上就是我們傳進來的這個數據,那麼這裡參數,它來源於我們的EBP-Z這個地址。

而這個地址它可能是代表了一個結構,結構指針,就像我們之前,像我們的發包的時候有一個緩衝區,那麼這裡它也是一個緩衝區的一個指針,相當於是,然後它從這裡加了一句,把這個EDI的數字。

寫入到這個緩衝區的地址裡面去了,那麼也就是說我們之前所看到的這個FP的話,它來源於的這個數字的話就是來源於EDI,那麼我們又找一下,EDI的數字的來源,那麼我們在這個地方能夠找到XOR,異活的一個命令。

那麼這句指令的目的,最終實際上就是讓這個EDI的數字等於0,相當於這樣一個操作,EDI-0,但是我們這個時候傳進去的數據,EDI它又不等於0,為什麼,因為在這個循環後邊,這個位置。

它每次的讓EDI繼承器的,是加了1,相當於EDI-EDI+1,也就是相當於我們Four循環當中的這個I++這一句,那麼從這裡來看的話,它可能也就是一個,樹種的一個下標。

而且這個樹種的話很可能是一個結構樹種,而這個結構的大小,它就是我們的,2DX+Z,恰好是這麼大,而且我們還應當有一個結構的初始地址,我們可以往前面來看一下,那麼它的起始地址的話,應該就是這個ESI。

它有個起始地址,那麼這裡應當是一個它的一個結束的一個地址,那麼我們看一下它的初始來源於什麼地方,那麼這個地方,我們能夠找到它的一個初始,那麼這個地址好像也比較熟悉,這裡有個D6社,這裡是它的初始。

那麼這個D6社的話,恰好也就是我們之前用到的這個機制,那麼它也出現在了這個地方,而且的話,我們在這裡的話,它最先傳進來的數字的話不是1,而是我們的FB,那麼說明它在對一個這個結構數出來進行遍地。

然後加了一些條件的一些判斷,一些比較,那麼最終是屬於我們的相應的符合了相應條件的這個數據了,那麼最終才進行寫入,那麼也就是說這個循環裡面,它加的這些條件判斷,就是來判斷這個任務是否適合自己。

是否達到了一個等級要求,是否已經做過了,這一些條件,可能就在這裡來進行判斷,但是我們不用去詳細的去分析它,那麼我們只需要了再返回兩層,找到我們所謂的這個,選項卡庫或者是初始化任務列表的庫。

能夠初始化我們的任務列表就可以了,那麼先讓它跑起來,那麼實際上這裡我們也可以做一個測試,就以這個機子為例,那麼我們也可以來加上0,那麼審議我們的這個FB,那麼我們可以看一下,那麼實際上這個地方。

它出現的就是這個任務的一個結構,而這個結構的大小應當就是C0,那麼這裡邊的話都是一些它相關的一些數據,或者是一些對話的內容,那麼在C0這裡應該結束,在這個地方結束,因為實際上在這裡就結束了。

因為它是從0開始的,那麼從C0這裡開始,又是下一個任務的地址,那麼我們再往後邊又來遍一C0,又到C0這個遍一的話,它又是下一個地址,那麼但是這個C0的話,可能還有一些不一樣,看起來,好,再看一下。

那麼它有兩種形式的,那麼這個這種形式的話。

它這裡沒有指針,那麼我們之前有個判斷,那麼一種情況它是指針。

另一種情況的話,這裡應當直接就是存放的文本,這裡是武林血戰什麼什麼,是武士,武軍這裡,那麼它直接就是文本,這裡,那麼這裡實際上就是一個文本,我們用db來顯示一下,就是在這個字串,因為它有兩種形式。

那麼我們在書寫的時候,那麼一種形式,它是+18這個,+18這個結構了,這個偏移這裡,它就是說大於10,我小於10,那麼它相關的這個任務名,取是不一樣,有一個要多取一次,有一個直接取就行,那麼在這裡。

實際上我們也可以看一下,那麼我們看一下。

它+,比較的話是+18這個位置,那麼這裡+18這個位置,它是小於我們10的,那麼小於10的也就是說直接取出來,那麼如果是大於的,才需要來接b,這裡應該是小於接b,小於的才需要執行這一句,接b大於跳轉。

那麼小於就是大於的話就跳轉,是這樣的,那麼這裡它的數據。

我們+18這個位置,它明顯的是小於10的。

小於10,那麼小於的話就會跳轉到這後面來執行,這一句就不會執行掉,那麼當它大於10的時候,那麼這句才會被執行。

那麼我們可以看到我們之前的這個地方,那麼它的+18這個位置,就是大於10的,是大於。

那麼接b它是小於的時候跳,那麼大於的時候,它跳轉了就不會被執行,那麼所以說在這裡。

它還會就直接轉到了這個數據窗口裡面,才是它相關的自創,好的,當然這個是題外話,我們只是為了便於了解這個結構,了解這個結構,那麼既然是在這個循環裡面,它對我們的相關的數值來進行了一個相關的初始化。

相當於在調動內部的這個擴放,這裡執行一個循環的一個初始化,那麼說明這個擴的話,就是我們初始化相關數據的擴,那麼我們在這裡下一個段點看一下它的參數,那麼這裡有可執行任務,這裡有6個選項卡,那麼說明的話。

它的參數肯定要可能就是01234,這樣來區分它,那麼也可能是用另外的一些數據編號來對它進行一個區分,肯定有不同的參數來區分這個相應的擴,那麼我們來看一下,它的一個參數,那麼返回到上一層。

但是我們發現了這個擴的話,它沒有一個壓占的一個參數,沒有壓占的,那麼沒有壓占的參數,我們可以再觀察一下再上一層的擴,那麼在這裡有一個都沒有看到有0123的相關的數據,好,那麼我們再次讓它運行起來。

再選第二個選項卡,再看一下我們上一層擴展,但是這個參數的話,它2F0我們記一下,第三個選項卡,但是這個參數沒有變,那麼我們發現有變化的,實際上一個是1BX,一個是1BX,繼承器那邊的數字它有變化。

那麼我們把這個2303,2303,我2335把它記一下,好,那麼我們再選兩個選項卡4,那麼這個時候我們是2304,2336,那麼這兩個的話,我們可以看到它是一個序號,是I組的有點像123這一組。

那麼我們再看一下,再選下一個,下一個,來這裡,恰好是2302337,那麼我們再選回去,再看一下,選擇無疑的2309,2307,那麼這個與我們所說的123,這位的參數,它也是一樣的,那麼這兩個參數。

可能是一個關鍵,很關鍵的一個數字,那麼我們就找一下這兩個數字的來源,那麼我們先在堆站裡面,這裡能夠找到一個2335,在這裡也能夠找到一個2335,那麼發現最早的話,應該是在這個地方傳入的。

我們的這個2335這個數字,那麼我們轉到這個地方來看一下,轉到這個地方來看的時候,我們看到這裡,就是我們打開倉庫關閉倉庫什麼物品,這個對象的一個6,對象的,那麼也就是我們打開倉庫關閉倉庫的時候。

對6的一個操作,那麼可能我們是找到界面,在上面來了,也就是說我們找到了點擊選項卡的這個庫,那麼它的EX這裡的,恰好也就是我們的,這裡是3F4,然後前面那裡就是2335,那麼也就是說在這裡的話。

它表示了掉入了某個選項卡,通過我們的這個數字,2335,可能是這樣的,那麼我們可以在這裡來做一下測試,下一個斷點,然後我們讓它再次斷下,那麼斷下之後,我們看一下,看一下EX的一個數字,2332。

那麼我們記一下,那麼順便我們記一下ECX的一個數字,那麼有了這個ECX的數字,我們直接就能夠計算出它破的一個地址,還有這些參數,我們全部都有了,好的,那麼我們接下來進行一下測試,當然這裡還有一個庫。

我們來看一下,在這裡看一下,好的,那麼我們再來,調用這個庫來進行代碼輸入器,打開,把這幾句代碼複製一下。

那麼把前面的這一段刪掉,最後這個ECX,我們需要給它附一個初值,就是剛才我們複製下來的數據,這就是ECX的一個初值,當然還有EX這個參數了,我們EX的數字。

直接我給它2332,看一下是不是這個數字。

2332,好的,那麼我們輸入到遊戲裡面測試一下,那麼首先我們看一下它界面有沒有變化,那麼我們發現有界面有變化了,那麼說明我們找到的是界面的這個庫,看一下,相當於是點擊了全部任務的這個庫,現在找到。

那麼這個是我們的全部任務,但是我們所說的我們要找的應該是,這個界面沒有打開的時候,那麼我們看一下把窗口關掉之後,我們再調用這個庫,會出現什麼問題,但是這個時候如果我們的任務窗口沒有打開的話。

我們調用這個庫來,它明顯是會出現問題的,因為ECX它沒有初始化,那麼所以說我們最好的結果,就是找的是什麼呢,找的也就是我們的初始化任務列表的這個庫,而這個是我們的選項卡庫。

所以說我們要找的是介於寫入動作,和選項卡庫它中間的這個庫,那麼這個庫的話,它不需要調用這個庫來實現,不需要初始化相關的結構,當然具體用哪一個,看你自己的一個選擇。

只要能夠實現既定的一個目的和一個功能就可以了。

好的,那麼我們再重新打開遊戲,那麼遊戲打開之後。

我們再次輸入,在接著找一下它中間的數據更新的庫就行了。

我們不需要點擊這個選項卡,但是我們可以從剛才的分析進行入手。

那麼剛才我們是一起到下一個地方。

嗯,嗯。

嗯,嗯,嗯,嗯,嗯,嗯,嗯,嗯,嗯,嗯,嗯,嗯,嗯,嗯,嗯,嗯,嗯,嗯,嗯,嗯,嗯,这里底下的有这个相应的断点,那么我们直接返回一下,用Ctrl+F键执行返回,用录音,再返回一下。

我们之前的这个分析的好像没有保存,没有保存的话,我们再重新的下一个相关的断点,嗯。

在这个fp这个地方也就是我们刚才说的,可能就是一个解构对象的一个下标,这里,那么我们在点击不同的选项卡的时候,他应当,当然我们现在点击的是执行中的这个任务的,下面才是可执行任务的,但是都可以。

但是我们在点击他的时候,他会,是断在这个地方,是C4,那么我们再返回一下,返回相应的这个数字,Ctrl+F键,再返回,刚才循环的那个地方,那么这里是打开仓库相关的这个地方。

那么我们从这里开始往下跟应是可以的,那么我们再点击一下全部任务,那么这个时候按F7跟进去,那么跟进去之后,我们可以看到这里有一个地方,这里有一个地方,他也是要一个,可能也是要一个相应的ECX的一个值。

那么具体需不需要ECX的数字,我们要跟进去看一下,而且这个EDX的值的话,好像就是来源于我们前面,这个2328,他最终还是掉了这个空,那么我们按F7跟进来可以看到,这里他同样的用了这个ECX。

而这个ECX我们按减号再退回来,看一下他的一个来源,那么转到之前面,那么这个ECX,他同样的来源于我们上一层的这个ECX,那么也就是来源于我们的这个Core里面,同样的用这个ECX,好的。

那么我们再次来看一下,点一下按F7跟进来,那么我们还是现在在我们的用,可能是我们输出了,也可能是我们没有,没有放在我们的这个,主线程来调用,那么我们可以先调用一下,再按减号再退回来。

那么我们可以单独的先调用一下,这个Core来试一下,看能不能够实现相关的调用,那么我们在这前面的话,他只是一个简单的一个判断,然后就转到这个地方来执行,那么相当于这两个Core的功能的话。

实际上是应该说功能是完全相同的,那么接下来的话,我们需要来找到这个ECX的一个机子才可以,下载过来,点适合自己的任务,然后我们看一下,适合自己的任务这个时候,他的数字是2333。

那么我们再调用这个Core,ECX的一个数字看一下,那么实际上的他就是在这个里面调用的,这个6F2 FD0在这个Core,那么这个是他相关的对象,那么我们再来看一下,把ECX的数字制作出来。

那么我们直接调用这个Core,看有什么效果,用代码输入器再次进行测试,测试,测试,测试。

测试,测试,测试。

测试,测试,那么从return这里看到了,他的确只有一个参数,而且是我们在这个Core里面。

反复的时候就实行屏障,屏障的一个平衡,那么我们发现这个Core的话,他也是直接就调用这个Core,那么我们把窗口再关上,再输入一下,那么这个时候我们发现,他有时也不会出错,偶尔才会出错。

那么可能是我们的数据,他没有同步到我们的主线程里面,所以说会出错,那么我们再把这段代码,添加到我们的89个的主线程单元里面去,大家测试一下,那么这节课我们就先分析到这里,那么下一节课我们再写代码来测试。

顺便我们找一下Ezx的机子,对象的机子的来源,那么这一节课我们先到这里,下一节课我们再见。

由 Amara。org 社群提供的字幕。

P8:019-封装怪物对象及怪物列表 - 教到你会 - BV1DS4y1n7qF

啊大家好。

我是郁金香老师,qq 150330575,欢迎大家参加滤芯技术编程培训,那么上一节课呢我们大致的分析了一下怪物列表,只为了怪物列表以及一些怪物的属性啊。

那么今天呢我们就来对外部对象以及怪物列表来进行呃一些封装啊,把代码写好呃,另外呢我们练证一下我们我们所分析的这些属性啊,是是不是正确的打印出来看一下,那么我们打开第17课的代码。

那么首先呢我们在图鉴里面添加我们所找到的机子,二,那,么添加了机子之后呢,接下来我们在结构单元呢添加我们的怪物类型,怪物对象或者是怪物节奏,8888啊啊啊啊,那么这个怪物结构里面呢。

我们把所分析的这些偏移把它粘贴进去,我在那,么第一个怪物是否死亡,这里呢应该是一个不容易形啊,比较竖写,那么第二个呢是我们购物的名字好,那么这里呢我们继续啊,直接用一个指针直接指向蛮怪物的名字。

好这个偏移呢是我们怪物的血量,血量呢我们是一个四字节的,然后是怪物的等级,那么接下来是怪物的坐标,那么还有第二个坐标啊,看看我们现在还不能够确定接近哪一个坐标是当前的坐标,咳咳咳咳好,那么好了之后呢。

我们把多余的这些人注释掉,把偏移注释掉,方便我们编辑,那么这样的话我们怪物的结构呢,基本上我们就把它设置好了,那么接下来呢我们再定义一个怪物列表啊,当然现在我们还不知道这个怪物列表的一个大小。

那么这个我们留到下一节课呢,我们再继续的分析,那么这里呢实际上我们可以用一个动态的数组,用这个victor来表示,那么暂时呢我们先用这个静态做一个测试啊,那么到后边呢我们再对它进行一个修改。

那么暂时呢我们把它定义成20啊,这个植物的怪物为对象的个数呢,我们定义为20,咳咳咳咳咳,那么接下来呢我们就对啊这个怪物述出来呃,进行一些功能性的一些封装哈,写一些函数。

那么首先呢我们对它进行一个初始化,好像我们之前的写法一样,首先要跟它返回一个指针,可以这,哈哈哈,复制一下,然后在我们的cp p单元呢添加我们的这个函数。

它的返回值呢就是我们的这个它本身呢就是返回到它的指针,然后呢我们对它进行初始化,初始化,这个我们也要涉及到一些指针的一些操作,那么我们先加一个异常的处理,那么暂时呢我们把它的数组大小来定义为20。

具体它数量的大小呢,我们在后面通过分析了再来确定,嗯嗯嗯咳咳咳咳咳,然后我们就复初始的时候呢,首先我们呃看一下哈,嗯怪物的名字先读出来啊,换不到两次,那么在读出来之前呢。

我们先计算一下这个怪物对象的首地址,另外我们在定义一个变量,嗯嗯那我给他做一个相应的初始化,2222,那么首先呢我们把机子写上怪物列表的机子,再加上了i4 乘以我们的i。

这就是我们的数组的一个表示方式啊,去掉啊,它的下标是i啊,就是从零开始,学习者好好,那么这样呢为零的时候我们取出第一个外部对象,那么取出来之后呢,它的名字,那么我们加上相关的一个偏移,二零。

那么我们看一下他名字的偏移是多少,是怪物的名字是320,我们把它复制到前边,你好,320加上,当然这里呢最好是用括号括起来,那么后边我们把这个公式复制一下,刚刚名字过来是怪物的血量五比四。

那么五比四的话,这里的路径呢是第一位,并且我们要把你的数据呢读出来,因为他不是只是类型,那么然后再是怪物的等级,五比八,我想看你好好,怪物的等级过了之后呢,然后是怪物的坐标啊,坐标是从1018开始,一。

0202,啊这个我们数组就取出来了,但是我们还要考虑到一个问题,当我们嗯这个取出来的对象是零的时候,我们要做一个判断,如果这个对象呢等于空的时候呢,我们这个循环呢就退出了啊,他后面呢就没有对象。

或者呢我们其实就继续下一个循环偏离,后面还有一个你可以这样写,好,的,那么我们先写一下啊,写上之后我们还要考虑一下呃,这个数组的一个对象的一个初始化对象结构。

我们先用那个设置来跟这个对象的结构来进行初始化平民,那么后面它的大小呢就是三之后这个结构,那么等一会我们打印的时候呢,我们可以通过这个等级来判断啊,如果等级这个数据它有文明的话,说明的话。

相应的这个数组的话也没有我们所要的数据不会正常的话,这个怪物的数这个等级应该是大于一的,那么这样的话我们就写好了,那么我们编译一下初始化的这个部分,那么初始化完成之后呢,我们再写一个成员函数。

那用来打击我们的信息,叫,那么这个我们用来测试的时候,来用来打印我们的一个信息,然后转换到我们的设计,p的,给代码单元添加我们的代码,那,么执行完之后返回真。

那么在这里呢我们打印的时候我们就可以考虑这个异常了,那么我们直接对他骗子进行答案,就i等于2022i拿下,然后呢我们要打印的下,首先呢是我们的名字,我们这后面是等级,等级后面呢我们呃跟坐标。

那我先打印一个坐标进行行写,那么后面呢就是我们相应的数据,哒哒哒哒哒怪物列表下标,然后是我们的名字,第二个是等级,然后再打印一下血量,那么这个时候呢我们可以进行一个换行,在下一行。

为了方便这个代码的一个可能性呢,我们把它进行一下后,这,里要有一个下标,等级过了,这回血量好了,复制一下,那么血量过来之后呢,我们看还有胆子,就是做标准,那么除了这个呢,我们还有一个死亡状态。

是不是死亡,等级血量,hp坐标啊,最后一个死亡状态,为什么,那么我们这里打印出来相应的一个数据啊,如果是未死亡的话,这应该是唯一,嗯那么在打印之前呢,我们做一个判断啊,如果达到一个顶级旗舰里。

看有没有数据,这个如果是等于零的话,说明相应的呃,数据单元呢没有我们所要的数值,那么我们就继续下一个循环就行,心情一下,大概,在后边呢我们有听过一个类型的,那我们加上一个类型。

那么在之前的y30010 之前的版本的话,我们在定义这个结构变量的时候,要用后面啊这个加下划线,那是2010之后啊,许愿进前面一个,后面一个都应该是可以的哈,这里让我们,这里面是不点类型。

我不会做太多啊,好打开我们的调试工具啊,然后我们看一下这个道理,并没挂机主线前啊,对了,我们还没有添加相应的一个测试代码,在这里呢我们还需要在前面的这个单元里面添加一个我们的前面函数。

一定似于这个使用物品,那么我们这里就叫做测试,那么在这里呢我们再另外给他定一个消息的一个类型的,看下就看,那,么这里呢就是我们的几个test,后面呢就是这个代理,我直接跟他说,传过去是一个指针,什么。

然后呢在这里呢加上一个开始处理我们的相关的一个消息,那,么首先呢我们要给这个题二,再打印我们的这个消息,那么在这里面的话没有进行一个数据的初始化,所以说必须调用啊,先调用前面一个函数,哈哈哈哈。

哈哈哈哈,好那么我们再进行测试的话,还要在我们的这个窗口里面添加一个相应的按钮,调用我们这个函数,嗯嗯嗯好听的啊,我们知道那,这里呢我们暂时不需要传什么数据过去,叔叔我回来。

好的,那么我们再来进行一下测试。

画在主线程。

嘟嘟嘟,那么现在呢我们这里可以看到还有一些乱码,那么这个乱码的话证明了我们可能这个所谓的对象列表里面,让它包含的不只不只是这个怪物啊,那么还有其他的呃对象可能是我们的呃,周围的玩家呢或者是掉落的物品。

这一轮的对象,那么我们看一下其他的应该都是证据啊,等级嗯,血量这个是12级的,160级的120,这是坐标啊,那么后面这个呢这个数字是错的,那我们上次分析的时候呢,是就是说未死亡的话,应该是一。

那么当时呢我们应该是选中了这个怪物,它是唯一的,我们再区分一下,打一下他的信息,好那么其他的呢我们到下一节课了再分析一下啊,那么有一个偏移是错的,另外呢这个列表里面呢可能还包含了其他的一些东西嗯。

那么我们在下一节课啊再分析,那么这节课呢我们先保存我们的代码,就探讨到这里,那么这个属性呢我给他打一个问号,另外分析一下哈,这个怪物的是否死亡或者是是否重回,好的。

那么我们下一节课呢再对我们的代码进行一个改进,另外呢我们对这个怪物的属性来进行一下啊。

P80:091-分析任务对象基址及封装任务更新函数 - 教到你会 - BV1DS4y1n7qF

大家好,我是郁金香老师,那么这节课呢我们来分析一下啊,更新任务列表的这个ecx参数,它的一个来源啊,看一下能不能找到他的一个机制,那么首先呢我们转到这个扩的这个地址去。

然后呢我们先下一个断点。

把任务列表打开啊,我们点一下啊,任务选项卡,这个时候它会断下来,断下来之后呢,我们先返回到三个f4 这里啊,我们把这里的特征码也复制一下,转换自己,那么断下来之后呢。

我们要找的是ec x这个数据的一个来源,那么这里呢有一个e4 x呢是来源于e s i加四啊,那么另外一个呢这个e4 x呢是来源于这个地方,那么我们在这个地方呢,分别在这两个地方进行。

下段可以尝试找一下点所有任务e4 x的数据,数据呢取出来450,但是在这个地方呢我们改变了啊,如果要继续找的话,我们可以直接找e si的一个来源,那么我们先把呃这个es si的这个数据来啊复制下来。

加四,那么这就是我们e4 x的一个来源,那么接下来我们找一下,这个4420的数据我们用,需要附加到游戏里边,那么这个时候呢我们发现嗯会有一个绿色的一个机制啊。

但是我们来验证一下这个机子是否可用,我们对这个机子来进行一个哈呃访问的一个断点,然后呢我们会在这个地方断下来,他最终呢是转到了这个3116640所有对象的这个数组里面去了。

然后我们看一下他1a x的一个数据呢,等于我们的445,那么我们可以从这个45里边呢把这个数据取出来,关键是我们看一下是不是这个445它会不会在游戏重新启动之后呢,会不会改变,你这样对,八,嘟嘟。

好那么我们重新让它跑起来,然后我们再次让他断下来,按减号退回。

看一下我们的现在的e4 x呢应该是d18 ,那么我们找一下啊,呃这里呢就是我们的d18 ,123718,那么我们来看一下它里面的一个属性啊,这里呢是43a,那么这个也是我们的所有对象数组里面的啊。

实际上我们可以通过两个公司呢都能够得到它,那么关键我们就是要看它的一个下标呢会不会改变,那么另外一个公司呢可能还要简单点,我们直接进入银色的这个数组的一个下标就是43a,当然这个市场未来也要审审以四。

那么这个这两个公式呢实际上是等价的,那么关键我们就是要重新启动之后呢,看一下这两个下标它有没有改变。

那么我们重新来把这个游戏哈进入一下,关掉再重新进入。

然后我们再用o d来附加,嗯嗯那么这个时候我们发现了1a225 d18 这个数值,那么我们再转到这个call这个地方来看一下e4 x的这个数值。

打开任务列表,然后呢再次让他断一下14x1222 无底118啊,那么从现在的一个测试情况来看呢,应该说这个43a这个价格呢是可以用的啊,是可以直接加上这后面这个偏移呢能够得到这个对象。

当然如果是不能够得到的话,我们也可以通过偏离这个列表,然后通过它后边这些啊属性呢来比较判断啊,也可以把它偏离出来,或者是通过它的一个呃这个函数的一个成员列表,也能够把它偏离出来,好了。

那么一cx的这个来源解解决了之后呢,我们就可以编写代码来进行这个相关的测试,那么打开我们90课的代码,那么我们直接到主线程里边来进行测试,这里呢有打印一个我们的一个任务列表里面的数据呃。

但是呢我们还需要呢,现在呢要跟它加上一些啊参数啊,这个扩展我们需要,那么这个参参数呢我们就以这个选项卡为这个参数啊,比如说我们可执行可执行任务的啊,当中的适合自己的任务,我全部任务呢我们就是两个参数。

那么这里呢呃我们先拦截它的一个参数下段,然后我们点适合自己的任务,那么这个时候我们看一下它的数据呢是2333,四火自己的任务,那么我们再点击这个全部任务是2332,好的,我们就用这个作为一个例子。

这里是呢全部装备,那么首先呢我们把这段代码复制出来,那么也就是我们这一段啊的一个测试,那么首先呢e4 x我们要跟他进行一个初始化,可以通过前边的这个公式,那么转到我们的基础单元啊,所有对象的列表。

所有对象数组成,哒哒哒哒哒,那么这里呢它的一个偏移呢就是四三倍乘四,直接这样我们就能够取得他的一个对象,然后调用一个相应的扣就可以了,那么在这之前呢,我们就需要更新这个相关的任务列表。

那么先嵌入我们的后边,那么这个呢我们可以用一个参数来给它传递进来啊,在这里呢我们加上一个参数,不过,那么在之前呢我们定义两个红,啊所有任务等,2332,那么还有一个是适合自己的一个任务,嗯,2333啊。

那么我们进入两个红,当然也可以取中文的一个名字啊,这里要加上16进制的一个前缀,这里加上一个函数的说明,再重新编译,好的,那么我们再次来编译,然后进行相关的测试。

那么测试的时候呢,我们先把og啊先退一下,在退出og之前呢,我们需要把所有的断点呢要取消掉啊,不然的话速度的话也会出错。

那么这里呢有一个int 3啊,我们需要把它还原才可以嗯不然的话执行到这个地方的话肯定会出错,那么我们看一下啊,不是出来的特征码是多少。

3f4 的后边,那么这里呢应该是f f d2 啊,那么这两个字节呢我们要把它重新改过啊,改为f f,好的,然后呢我们再次退出啊,这个时候才可以。

看一下这里的调试目录啊,有没有设置正确,然后设置一下相关的公众目录啊,然后呢再重新编辑注入一下,那么这个时候呢我们测试的时候应当是出现了相应的一个问题嗯,关掉游戏,然后我们重新再做测试。

在做测试的时候呢,在这里呢我们打印出相关的一些调试信息,好这个时候呢我们重新进入游戏之后呢,啊再次进行测试,那么刚才可能是我们忘了挂机这个主线层,也可能是,那么我们先挂机主线层嗯。

然后我们看一下调试调试信息啊,测试一,那么这是我们所有的一个任务啊,应当是正确的,任务等级啊,从一级到73级的都有,那么如果我们选选一下啊。

适合自己的任务,啊那么这个时候呢也是正确的,好的,那么我们这个函数呢就分分钟到这里啊,那么我们这节课就到这里,那么下一节课呢我们再见。

那么这里大家下去之后呢,我们再把这个函数呢再把它整理一下,写规范一些啊。

P81:092-挂机选项卡功能封装-低血保护 - 教到你会 - BV1DS4y1n7qF

大家好,我是郁金香老师,那么在最近这几个我们一起来设计一下,低血保护的功能,那么主要就是在某些条件达成的时候,我们可以自动的去使用某些物品,那么第一个我们需要来修改一下挂机率,打开第91颗的代码。

然后我们转到挂机率的头文件。

那么添加以下几个成员变量,那么第一个是用来控制是否自动使用,HP的物品,当我们的HP低于某个百分比的时候,那么第二个是当我们的MP的值低于某个,百分比的时候,我们使用相应的MP的物品。

当然这里设计的时候可以是一个百分比,那么百分比的话应该是来说的话比较好用,一些,当然也可以设置为低于某个数值的时候,当然这个看你自己怎么设计相应的一个,功能,那么还有当我们HP低于某个数值的时候。

要使用的物品的名字,那么当我们的MP低于某个百分比的时候,使用的某个物品的一个名字,那么好的,我们添加这几个成员变量,那么这些成员变量的参数,我们需要通过窗口界面把它传送进来。

那么所以说我们在这里也要在我们的挂机窗口,上添加相应的空间,那么转到我们的挂机页面,那么首先我们要添加两个复选框,那么这两个复选框,一个就是我们MP的,一个是HP的,低缺的。

就是说当这个数值低于某个百分比的时候,那么我们在这里可以进行一个开关的控制,那么低于到某个值,在后边我们是可以是一个,可以是一个combo的空间,也可以是一个EDIT的空间。

只要能够接受我们的整数就可以了,它的数值是1~100,那么在这里我们选择来用EDIT的空间,那么低于好,那么后边是一个百分比,在这里我们用另外一个空间,静态文本的空间,使用我们的购物品。

那么在这里我们可以按下控制键,然后鼠标移动它,这样我们也可以快速的复制一个空间,那么后面要使用的名字,我们就用列表主播框,或者是列表框来实现,在这里我们用combo box,比较方便一些。

这里也按下我们的控制键复制一个,那么这六个空间就是对应的我们这六个数值,那么我们最终我们空间界面上的这六个参数,就要传到这六个相应的成员变量里面,那么在这里我们也能来关联相应的变量。

同时我们可以把它对齐,那么然后我们再为它关联相应的变量,那么这些变量可以与我们这里的变量来同名,那么这样我们在应用的时候,方便把我们的数据来更新到我们的内成员变量里面,那么第一个就是我们的复选框。

添加相应的变量,那么我们现在就来看一下我们的复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框。

我们先把这个复选框,我们先把这个复选框,我们先把这个复选框。

我们先把这个复选框,我们先把这个复选框。

我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框。

我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框。

我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框。

我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框。

我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框。

我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框。

我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框。

我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框。

我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框。

我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框。

我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框。

我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框。

我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框。

我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框。

我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框。

我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框。

我们先把这个复选框,我们先把这个复选框。

我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框。

我们先把这个复选框,我们先把这个复选框,我们先把这个复选框。

我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框。

我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框。

我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框,我们先把这个复选框。

我们先把这个复选框,我们先把这个复选框。

我们先把这个复选框。

P82:093-低血保护功能封装2 - 教到你会 - BV1DS4y1n7qF

大家好,我是郁金香老师,那么这节课呢我们将接着上一节课啊,编写代码啊啊低血保护的功能实现,那么我们打开第92课的代码,那么首先呢我们是相关数据的一些初始化挂机页面,那么这里呢有一个dt选项啊。

每一项呢它可以用这个分号来分割这个名项,比如说第一个我们可以是轻松要小,那么我们看一下里边有一些什么物品,那么等级五的时候呢有一个小九转单礼物啊,如果这个物品存在的话,也可以添加进去。

好了目前呢我们暂时可以添加这两个物品,轻松要松的,轻松要放,那么这里呢我们可以选择人生,野山参,雪莲生,这一类的,当然这种做法的话效率会更高一些,另外一种做法呢,我们就去骗你背包啊。

但是那样设计起来要相对要复杂一些,那么还有这里的一个百分比呢,我们也可以给它进行一个相应的初始化,那么这些初始化呢我们转到这个绿的啊,初始化函数里边,找到挂机的这个绿的选项卡。

那么我们重写它的初始化函数,在这里呢我们可以设置是否自动使用这些物品,当然在这里呢我们全部把它设置为真,那么还有这两个是百分比,那么这里的百分比呢,我们全部把它设置为50%,再转到窗口,我们看一下。

在这里的话,我们还可以用一些设置它的一个变量,那么这里呢它可以设置它的一个最小值,我一个它的一个最最大值,那么最小值呢我们可以可以设置为一,那么最大值呢我们可以设置为99%或者是100啊。

不超过110~99,或者是在设置大一些啊,10%到99%,那么下面的它的属性是一样的啊,我们也在添加变量里边选择它的一个最小值幺零,这里我们选择了99,好那么我们先进入到我们的游戏窗口,看一下效果。

但是我们发现呢这里呢他都没有选中相应的数字呢,它没有被初始化,那么我们重新设置一下,还有一个变量我们看有没有设置,挂机选项卡,这里有个自动打怪的个变量。

那么这里呢我们把它就是说初始化之后呢,我们需要更新啊,把这个变量里面的数据来需要更新到我们的窗口。

好那么这个时候呢我们的相应的数据呢已经初始化了,但是我们后边的这个列表里面的这个数据呢还没有初始化,我们需要来来进一步的操作,切换到我们的资源视图,那么这里呢我们把它的大小来修改一下。

那么首先呢这里呢它也需要设置一个默认的一个数值,转到类里面初始化,啊,那么在我们重新编译一下,那么在应用设置里面呢,这里呢我们还需要做一些改动,那么在这里呢我们,获取了它的一个缓冲区,用完之后呢。

我们还需要对这个缓冲区的数据来进行一个释放,嗯,好的我们再重新编译一下,再次出入显示外挂,那么这个时候呢我们就可以了,有相应的数据来的一个初始化呃,当然这个大小呢还小了一些,我们需要来进行一定的改动。

那么我们再往后面调整一下它的大小,那么同时呢它有一个排序啊,那么这个呢我们把它禁用掉,这是fast,那么这样的话我们的参数呢就能够传递进去,那么传递进去之后呢,我们再切换到我们的啊挂机类里边。

那么在这个循环里面呢,我们添加相应的判断,那么在这里呢我们使用物品啊,当然我们使用的就是相关的呃,hp的这个物品它来源于我们窗口的界面界面,那么另外一种情况呢,我们就使用了相应的mp的啊,这个物品。

好的马上我们可以做一下相关的测试,那么每次使用物品之后呢,我们还可以给它设设置一定的这个时间的一个间隔,当然这里呢我们也可以设置为相应的参数,也可以不进行相应的设置,那么我们先测试一下。

那么在测试之前呢,我们还有一个地方需要改动一下使用技能,这里呢我们当前的这个人物呢,他没有这个相应的技能,逆天杀星这个技能,那么这里呢我们为了方便测试,把它改为普通攻击技能,啊然后我们开始测试。

那么这个时候呢我们发现了它没有自动的打坏,那么可能是我们的应用设置或者是开始挂机呢,这里呢相应的代码呢我没有添加好,好的,那么我们再进行相关的检查,那么首先我们已到,这个主窗口我们看一下应用设置。

再看一下开始挂机,那么还有一个主线程的一个挂机,在这里我们看一下相关的代码有没有被执行到,不知道知道,那,我们再重新编译一下,咳咳,首先挂机,主线程三,行显示外挂应用设置,开始挂机,那么我们来看一下。

但是呢这个时候呢不断的在使用金创药小,那么这里呢也没有实际的一个使用,那么这一段信息的话看起来呢有一些问题,那么我们再来看一下相关的代码,物品使用得了,那么这里呢我们还需要呃做一些判断。

那么另外这个物品使用的话好像也存在一些问题,金疮药小,但是呢没有真正的使用到嗯,第二个呢我们是这里的,应该还要加一个百分比的一个判断,那么这个百分比的话,我们看一下有没有写这个相关的这个函数。

你到我们的解除单元,那么在这里我们找到这个过程当中的话没有找到,那么我们还应当呢呃写一个这个百分比计算的一个函数,那么我们先转到这个结构单元,再看一下人物属性的这个单元,那么在这个这个单元里面呢。

我们来添加这个相应的百分比的这个函数,嗯,22,那么这里呢我们还需要添加一个主用率的一个限定啊,是内里,不然的话我们没有办法调用这个代替代替,那么首先呢我们把这个hp的上限和当前的hp来取出来。

那么最后呢我们返回它的这个相应的数值就行啊,当前的hp,那么呢我们除以呃这个hp的这个上限,好的,我们先编译一下,那么这里呢我们换为mp,好再重新再注入一下,但是这个时候出现了一个问题哈。

已经小于相应的这个百分比了,那么这里呢也有这个使用金创药的嗯,没有使用金仓药的这个名字,但是呢我们的这个相应的这个金疮药呢没有被使用掉,那么我们重新再来看一下我们的代码,转到背包这里哈,物品的使用。

那么首先呢我们在这里来看一下这个物品使用的时候,它返回的下标究竟是多少,201218,嗯嗯,那么我们从调试信息这里看的话,嗯这里的下标是二,那么下标12的话。

证明它偏离到的我们背包里面的这个下标的话是正确的,但是呢我们没有使用相应的这个物品,那么可能是这个call呢它发生了一些变化,我们先把外挂推出来,那么也就是说这个函数呢可能我们出了出现了相应的一个问题。

但是我们调用这个函数的时候呢,它也没有产生异常,那么我们看一下它有没有执行到最后,再重新编译生产。

那么我们从这个调试信息里面发现的话,嗯在这里他使用了之后的话,那么这一部分的话,它应当是没有被执行到,他只执行到它的头部啊,那么很有可能呢是这个扩的这个地址的话已经改变了,那么我们再来调试一下啊。

在这个库的头部,那么呢我们也加上相应的代码start,那么我们可以看到啊,它只执行到了这个相应的扩的一个头部,那么最后这一部分呢它们也会执行到,那么说明我们的这个扩的话,可能是已经嗯获得地址了。

已经变化了,或者是我们的其他的某一个参数来已经发生了相应的变化。

那么我们用d附加进去看一下。

那么首先我们转到这个地址看一下,那么我们发现它所转到的地址的话根本就不对啊,那么说明呢的确是我们的这个扩的这个地址来出错了,那么这里呢我们需要重新更新一下物品使用的这个库,那么我们搜一下相应的特征码。

那么大致呢是在这个位置,7a开始的这个位置,那么我们转到这个位置去看一下。

嗯那么最新的这个地址呢应该是799470,好那么我们重新再编译生成。

挂机主线程显示外挂,这个时候我们把这里调为80%。

应用设置开始挂机,那么这个时候我们发现的话,它可以使用我们的这个清创药了啊,只是我们蛇的这个相应的这个百分比的话,那有点大啊,那么我们需要把它设置小一点。

但是呢我们发发现这个百分比我们设置的比较小的时候呢,那么这里呢他也会反复地使用我们的这个金创药,那么说明我们的这个代码的话还是有问题的,那么我们接着再来看一下,啊对了。

这里呢我们没有加上一个百分比的一个判断,那我们到全局变量单元看一下有没有属性相关的啊,这个是属性相关的全局变量,哈哈哈哈哈,那么获得这个当前的这个百分比啊,那么这个比百分比呢。

我们与呃现在这个类里面的这个百分比来进行一下比较,那么如果这个当前的这个百分比小于我们的这个百分比的时候呢,我们才使用下面的这个物品,那么同样的mmp的这个修改了,我们也是一样的。

在这里呢我们需要改为mp,这前面这里也是mp,好的,我们再重新编译生成。

那么这里呢我们需要包含一下全局变量的单元,哈哈,嗯,好的我们再次进行测试。

可莉,那么这个时候呢他没有找到这个清创要小,那么呃这里的金创药呢已经使用完了啊,嗯,我们先停止挂机,先补充一些药品,我们在做测试,好的,那么在这次测试之前呢,我们再来看一下哈,我们的代码。

嗯那么这里呢有一个当前的一个百分比,那么百分比的话,这个函数呢这里呢我们实际上还要需要在前面乘以100才可以呃,因为这个的话它返回的数值呢是一个小于这个,这两个数值如果是相等的话,那么返回应该是零。

那么如果前面这个数值它小于后面这个数值的时候呢,他整除之后呢也是零,那么所以说我们这个是百分比的话,我们需要在前面的乘以100,然后再除以后面的这个数值,那么这这样呢才能够整除后面的呃。

相应的这个数值除出了这个数字呢,才是大于大于零的,啊,那这里我们需要把外挂了,外挂再次推出一下,再重新生产。

把d啊再推出一下。

咳咳。

然后我们再进行相关的测试,好的我们暂时呢我们就测试到这里了,那么这个时候呢当它的百分比小于95%的时候呢,它会这个自动呢使用这个金创药小。

P83:094-定点打怪功能封装 - 教到你会 - BV1DS4y1n7qF

大家好,我是郁金香老师,那么最近两天呢我们将实现定点打怪的这个功能,那么很多时候呢就用我们的这个人物角色的死亡呃,或者是其他的原因,那么他可能会偏离原有的这个打怪的地点啊。

那么这个时候呢我们需要来编写一个定点打怪的功能,当死亡他回城之后啊,回到城里边之后,它会自动的啊跑到我们的挂机的这个地点,好的,那么我们要编写这个自动啊定点打怪的功能的话。

我们需要呢在挂机类里边呢添加几个啊相关的成员变量,那么第一个呢就是用来在界面啊上接受这个选择框的话,也就是说是否打开近点打怪的这个功能,那么第二个参数呢是定点打怪的一个半径,距离当前当前地点的一个半径。

一个范围,那么第三个参数来是定点坐标x,这是b点坐标y,那么一共需要四个参数,那么我们先把93克的代码打开。

那么首先我们在挂机录里面呢,添加这四个成员变量。

那么这四个成员变量啊添加之后呢,我们再切换到资源视图啊,挂机窗口调整一下窗口的大小,那么在这里呢我们也要啊添加至少四个控件用来接收相应的参数,那么首先呢我们选择这个复选框啊,近点打快功能。

那么这个定点打打印功能呢,我们呃打怪功能呢我们与这个成员变量来进行关联,选择类型啊,这里边选择啊数字类型,那么成员变量呢我们一般都会加上一个前缀啊,m的前缀啊,之前的我没有添加嗯。

当然一般来说我们添加一个前缀来用来表示它是一个绿的,一个成员变量,然后我们第二个参数定点打怪的半径啊,这个是d2 的六星的,这里呢我们要添加一个,文本框,那么在前面呢添加一个静态的文本,写写明是半径。

然后后面呢我们跟上x坐标和y坐标,好那么后边呢我们也跟它关联相应的变量,添加变量,然后再内边里面呢选数值类型,这里选d word类型,这是定点半径,然后是坐标x。

添加变量,那么这个坐标呢我们用硬盘来表示,因为它是带符号的,变量类型选硬盘,好点完成,那么最后呢我们再切换到我们的这个主窗口啊,然后应用设置这里呢我们把窗口界界面的相关数据呢更新到变量里面。

更新窗口出去到我们的化学位置嗯,那么第一个呢我们就是是否定点打怪,那么接着更呢是打怪的一个范围,嗯,第三个是我们近点的x坐标,二,然后再是定点的y坐标,那么这样的话我们就能够把相关的参数呢。

呃传递到我们的这个相应的内里边,那么传到内里边之后的话,我们呢再根据这些参数呢来限定我们的打怪的一个半径,最终实现一个定点的打怪,那么这个最终的实现呢,我们需要到这个回调函数里面来实现啊。

需要到这个自动打怪节目这里,嗯,那么首先呢我们要做一个哈呃范围的一个检测哈,判断是否超出这个定点范围元素,那么如果超出了这个定点的范围的话,那,么这寻路到啊,近点的坐标,当然如果没有超出范围的话啊。

那么这里呢那就跳过跳过,那么大概的逻辑,我们是这样来实现的,但是这里的话我们呢需要写两个函数,一个是我们寻路到这个定点的一个坐标,还有一个是用来判断它是否超出这个范围的呃,相关的一个函数。

那么这个具体的设计的话啊,我们可以留到下一节课啊,一起来设计,那么这节课呢我们先把界面做好了,就暂时到这里重新编译一下,好的,那么下一节课再见啊,这节课呢也给大家留一个作业,好的好。

那么编写一个啊范围检测的一个函数啊,当然这个是一个我们说的一个自动孵化器录音里面的一个成员函数,那么它通过了这个判断,一个当前坐标与传传入的这个坐标之间的一个距离啊。

那么来判断呢是否嗯超出了一个指定的一个范围,当然也就是通过下边的这两个坐标啊,实际上,那么这个呢它也可以不带参数,它的这个参数的话,就是这个挂机类里面的这几个成员,实际上就是它的一个参数。

当然如果是带参数的话也可以啊,呃用于判断当前的一个xy坐标啊,取出来与我们的这两个坐标来进行计算啊,计算出它的一个距离,那么这个距离呢在于我们的这个定点半径的一个距离呢,呃做一个比较啊。

最终呢我们返回相应的一个数字,那么是否来超出范围哈,那么如果这个函数是在限定的这个范围内,是在这个半径内,那么返回一个增值啊,那么我在半径队呢啊,有一个甲子,嗯,好的,那么我们这节课呢我们暂时到这里。

那么下一节课呢我们再一起来讨论这个函数。

P84:095-实现定点打怪功能 - 教到你会 - BV1DS4y1n7qF

大家好,我是郁金香老师,那么这节课呢我们一起来完善定点打怪的功能。

那么首先我们打开第94课的代码,嗯嗯。

那么首先呢我们转到我们的挂机类里面添加一个呃,用于判断我们范围的一个成员函数,看是否超出了,用来检测我们是否超出了这个定点的这个范围半径,嗯,那么首先呢我们需要取得,哈哈哈哈哈。

这个玩家当前的x坐标y坐标,呼,那么当前x坐标呢我们可以通过全局变量里面的人物角色来获取,当然这个是佛点类型的,它会自动的转换,那么这里呢我们也可以用火点就行,那么这个坐标我们取得了之后呢。

呃在与我们限定的这个坐标之间呢,我们进行比较,那么这个我们需要借助27克里面的一个函数啊,我们查找一下这个函数,好像就在这个头文件里边,结构单元的头文件啊,这里边有一个相应的这个函数。

那么这个时候呢我们把当前的坐标来传进去,这个是坐标y坐标,那么第二个坐标呢也就是我们定点的这个坐标啊,先计算它们两个之间的一个距离,当然这个坐标的话,它本身呢是我们是整形的,它在传入的时候呢。

它自动的会转化成一个火点类型,那么最后呢它会返回一个距离,然后这个取得计算出来的距离呢,在于我们参数里面的距离进行一个比较,那么如果这个距离呢它大于了我们的这个相应的一个距离。

这里呢我们需要另外取一个名字,把它区分开,吧啦吧啦吧啦吧啦吧啦,好那么如果大于这个距离的话,我们就返回fs啊,就是说超出了我们的这个限定的一个范围,那么如果它是小于的话。

我们在这里呢返回处理表示了它在我们这个定点的这个范围半径之内,好好的,我们先编译生成一下,然后我们转到我们的这个呃自动打怪的这个线程里边,那么在这里呢我们进行范围的一个检测啊,我这。

那么检测之后如果这个值他是为真的话,那么我们就继续执行后面的代码,那么如果如果是为假的话,那么这个值呢做一个判断,那么如果这个超出了我们的这个范围,返回的这个数字是角。

那么呢我们就进行一个寻路的一个操作,不等位,那么有一个寻路的函数,我们查找一下他在哪一个单元啊,这个是在人物角色里面,那么然后呢我们要到达的目的地呢,就是我们定点的这个坐标。

当然我们走路的话需要一定的时间,那么在后边呢我们做一些延迟,sleep,那么这里呢我们延迟两秒的时间啊,让他到达这个指定的目的地,然后呢我们进行下一次循环continue。

然后直接又回到这个首部来进行我们下一次的一个循环,那么直到了这个值它为真,也就是说在我们限定的范围之内了,那么我们这里呢这一段呢将被跳过哈,将继续执行后面的代码,那么这样的话就实现了我们的定点打怪。

好的我们再重新生成一下,然后我们来进行测试,那么这里呢我们要给它设置一个坐标,我们看一下当前的坐标是多少,1996,然后呢我这里是半径,半径我们设置为100,那么这里坐标呢我们设置为1996。

1866就是当前的坐标,然后呢我们应用设置啊,开始挂机,化解一下主线程,那么这个时候呢我们再进入到游戏里边啊,让他跑出这个相应的这个范围,那么跑出了这个范围之后呢,它自动的就会跑回来啊,这个时候。

当然这个时候呢他会来回地往这个地方跑,那么也可能是一些有一些这个问题,那么我们可以使用一个回形图,那我跑到城里边之后啊,这个时候我们超出了这个范围,这个时候呢它会自动的啊跑到我们指定的这个地点去。

然后我们可以看到这个小地图上啊,它会不断地沿着这个路径呢,呃跑到我们设置的定点位置,然后呢去进行挂机的一个操作嗯,好我们来看一下当前的情况啊,这个时候呢他又再次开始自动打怪了啊,好的那。

么我们的功能呢测试成功,那么这节课呢我们就到这里呃,那么下一节课呢我们将对它们进行一些改进啊,呃比如说我们让它自动的获取当前的这个坐标啊,打开这个窗口的时候,另外添加一个按钮,可以获得当前的一个坐标。

还有相关的这些数字的一些初始化,那么现在呢就相当于有一个作业啊。

大家自己要去完成一下。

P85:096-编写函数统计背包HP药品数量 - 教到你会 - BV1DS4y1n7qF

大家好。

我是郁金香老师,那么这节课我们编写一个函数,用来统计背包里边的HP药品的数量,那么为什么要写这个函数,因为我们自动补给的时候,需要有这样一个条件做判断,那么当我们背包里边的HP的药品。

数量低于某一个数值的时候,那么我们在自动回程去,补给相应的药品,也就是去商店里面买相应的药品,好的,那么这节课我们先来做一些前期的准备,也就是编写一个统计背包里边HP药品数量的,这样的一个函数。

那么现在我们商店里面所有的一共是HP的,药品一共是6个,那么这里我把它的名字已经给出来了,精冲药小中大,密制精冲药和药纤精冲药,那么我们要写这个函数的话,实际上我们可以对前面的get goods。

indexedflare这个函数在它的基础上进行修改,那么首先我们当然这一行的话也可以不进行初始化,那么只要我们需要在调用这个函数的时候,先初始化一次就可以了,然后我们查询整个背包列表的名字。

与我们的药品的名字进行比较,那么比较我们找到了相应的物品之后,我们返回它相应的数量的属性就可以了,相当的简单,应该来说,那么我们打开第95颗的代码来实现相应的功能,那么首先我们转到结构单元。

背包的结构,那么背包结构这里有一个get goods indexedflare,在这里我们添加一个函数,先我们用来统计某一个药品的一个数量,最后我们再把这6种HP药品的数量进行相加。

那么就得到了我们背包里面所有精创药的数量,那么我们现在计算某一个单独的药品在背包里面的一个数量,添加这样的一个成员函数,然后我们转到查询背包的这个函数的后边或者是前边也可以,那么添加我们背包列表的程序。

在这里我们也可以有很多种设计方式,我们也可以调用前面这个函数来查询指定物品,在我们背包里面是否存在,然后再来骗你,那么也可以直接骗离,那么直接骗离的话,我们的效率显然要高一些。

那么如果是调用前面这个函数,那么我们在写代码的时候,显得要简单一些,具体选用哪一种方式,还是要看你自己,那么实际上这一行代码的话是可以不要的,那么只需要我们调用的时候,在调用的时候。

我们初始化一次就可以,当然也可以加上也可以,那么加上之后,如果我们重复的调用,可能会让我们的代码的效率会稍微的低一些,那么我们先把这一段代码复制一下,那么基本上代码我们都是跟上面这个函数都是一样的。

然后我们比较,如果是找到了相应的物品,那么我们返回,这里是返回它的一个数量,这一点不一样,返回的物品的数量,那么如果我们整个循环,片理完成了之后,执行到这个位置,那么说明了没有找到这个物品。

那么返回的数量肯定就是0,那么这是第1个函数,那么第1个函数,我们可以统计某一种精创药的数量,但是我们现在一共包含了这6种,所以说我们要6次的调用这个函数,才能最终把所有精创药的数量把它算出来。

那么另外再添加一个函数,叫做get_all_hp_goods_number,然后呢,我们可以把这个函数,把它算出来,那么我们现在可以看到,我们的函数是0,那么我们现在可以看到,我们的函数是0。

那么我们现在可以看到,我们的函数是0,那么我们现在可以看到,我们的函数是0,那么我们现在可以看到,我们的函数是0,那么我们现在可以看到,我们的函数是0,那么我们现在可以看到,我们的函数是0。

那么我们现在可以看到,我们的函数是0,那么我们现在可以看到,我们的函数是0,那么我们现在可以看到,我们的函数是0,那么我们现在可以看到,我们的函数是0,那么我们现在可以看到,我们的函数是0。

那么我们现在可以看到,我们的函数是0,那么我们现在可以看到,我们的函数是0,那么我们现在可以看到,我们的函数是0,那么我们现在可以看到,我们的函数是0,那么我们现在可以看到,我们的函数是0。

那么我们现在可以看到,我们的函数是0,那么我们现在可以看到,我们的函数是0,那么我们现在可以看到,我们的函数是0,那么我们现在可以看到,我们的函数是0,那么我们现在可以看到,我们的函数是0。

那么我们现在可以看到,我们的函数是0,那么我们现在可以看到,我们的函数是0,那么我们现在可以看到,我们的函数是0。

那么我们现在可以看到,我们的函数是0,那么我们现在可以看到,我们的函数是0,那么我们现在可以看到,我们的函数是0,那么我们现在可以看到,我们的函数是0,那么我们现在可以看到,我们的函数是0。

那么我们现在可以看到,我们的函数是0,那么我们现在可以看到,我们的函数是0,那么我们现在可以看到,我们的函数是0,那么我们现在可以看到,我们的函数是0,那么我们现在可以看到,我们的函数是0。

那么我们现在可以看到,我们的函数是0,那么我们现在可以看到,我们的函数是0,那么我们现在可以看到,我们的函数是0,那么我们现在可以看到,我们的函数是0,那么我们现在可以看到,我们的函数是0。

那么我们现在可以看到,我们的函数是0,那么我们现在可以看到,我们的函数是0,那么我们现在可以看到,我们的函数是0,那么我们现在可以看到,我们的函数是0,那么我们现在可以看到,我们的函数是0。

那么我们现在可以看到,我们的函数是0,那么我们现在可以看到,我们的函数是0,那么我们现在可以看到,我们的函数是0,那么我们现在可以看到,我们的函数是0,那么我们现在可以看到,我们的函数是0。

那么我们现在可以看到,我们的函数是0,那么我们现在可以看到,我们的函数是0,那么我们现在可以看到,我们的函数是0,那么我们现在可以看到,我们的函数是0,那么我们现在可以看到,我们的函数是0。

那么我们现在可以看到,我们的函数是0,那么我们现在可以看到,我们的函数是0,那么我们现在可以看到,我们的函数是0,那么我们现在可以看到,我们的函数是0,那么我们现在可以看到,我们的函数是0。

那么我们现在可以看到,我们的函数是0,那么我们现在可以看到,我们的函数是0,那么我们现在可以看到,我们的函数是0,那么我们现在可以看到,我们的函数是0,那么我们现在可以看到,我们的函数是0。

那么我们现在可以看到,我们的函数是0,那么我们现在可以看到,我们的函数是0,那么我们现在可以看到,我们的函数是0,那么我们现在可以看到,我们的函数是0,那么我们现在可以看到,我们的函数是0。

那么我们现在可以看到,我们的函数是0,那么我们现在可以看到,我们的函数是0,那么我们现在可以看到,我们的函数是0,那么我们现在可以看到,我们的函数是0,那么我们现在可以看到,我们的函数是0。

那么我们现在可以看到,我们的函数是0,那么我们现在可以看到,我们的函数是0,那么我们现在可以看到,我们的函数是0,那么我们现在可以看到,我们的函数是0,那么我们现在可以看到,我们的函数是0。

那么我们现在可以看到,我们的函数是0,那么我们现在可以看到,我们的函数是0,那么我们现在可以看到,我们的函数是0,那么我们现在可以看到,我们的函数是0,那么我们现在可以看到,我们的函数是0。

那么我们现在可以看到,我们的函数是0,那么我们现在可以看到,我们的函数是0,那么我们现在可以看到,我们的函数是0,那么我们现在可以看到,我们的函数是0,那么我们现在可以看到,我们的函数是0。

那么我们现在可以看到,我们的函数是0,那么我们现在可以看到,我们的函数是0,那么我们现在可以看到,我们的函数是0,那么我们现在可以看到,我们的函数是0,那么我们现在可以看到,我们的函数是0。

那么我们现在可以看到,我们的函数是0,那么我们现在可以看到,我们的函数是0,那么我们现在可以看到,我们的函数是0,那么我们现在可以看到,我们的函数是0,那么我们现在可以看到,我们的函数是0。

那么我们现在可以看到,我们的函数是0,那么我们现在可以看到,我们的函数是0,那么我们现在可以看到,我们的函数是0,那么我们现在可以看到,我们的函数是0,那么我们现在可以看到,我们的函数是0。

那么我们现在可以看到,我们的函数是0,返回我们统计的数量,返回我们统计的数量,那么我们先切换到,我们的主线程单元,进行一下测试,进行一下测试,嗯,嗯,嗯,嗯,嗯,嗯,嗯,嗯,嗯,嗯,嗯,嗯,嗯,嗯,嗯。

嗯,嗯,嗯,嗯,嗯,嗯,嗯,嗯,嗯,嗯,嗯,嗯,嗯,然后我们打开我们调试信息查看工具,输入到游戏里。

挂在主线程,然后我们测试看一下,这个时候我们药品的总数是573,那么我们看一下,69,32,4,499,3,差不多也是这个数,我们可以算一下,89,3,49,最后一个是3,我们可以用计算器来算一下。

最后的数量是623,89,32,499,3,那么好像是不正确的,这个时候我们看一下,89,32,49,3,好像是我们计算错了,我看500,600,600,的确是有600多,但是我们所得的数字的话是多少。

我们再来看一下,是573。

那么明显是错的,那么我们再来看一下,我们的代码是在什么地方出错的,小,中,大,特,那么我们在返回这个数字的时候,我们先打印一下,看所取得的数字对不对,对,嗯,嗯嗯嗯,我們先把缺憾的修改到主列。

然後在裡面加一些那麼主頻的名字,我們重新加一個mike,也是只不過,改成灌載音樂人的名字,那這樣就完事了,我們把主機的主機群,並且加入一個新的主機群到主頻道去,請大家記住要加入主頻道做訂閱的啦,好。

那接下來我們要加入主頻道正常圖片,然後又加新的主機群,好,那我們現在就在主頻道中央hhhhhhh,好,那麼我們再重新編譯,生成一下,掛機到主線上,測試,然後我們再來看一下相應的信息。

89324993,最後的總量是573,8932449,那麼我們這裡統計的時候,有一個數字來錯了,這裡應該是449,那麼算出來最後的結果應該是正確的,再來算一下,89+32+449+3,最後是573。

好的,那麼這一節課我們暫時就到這裡,那麼這一節課也給大家留一個座位,那麼大家下期來編寫一個函數,用來統計所有所有MP物品的數量,也就是藍藥的數量,大家自己下去編寫一個,那麼藍藥的數量的話。

在這裡面就有人參、血源參、醫源參,還有秘製醫源參和藥纖醫源參,這幾個目前,那麼如果是有其他的了,大家自己統計一下,好的。

那麼我們下期再見。

P86:097-Mp药品数量统计,判断背包是否满 - 教到你会 - BV1DS4y1n7qF

大家好,我是郁金香老师,那么这节课呢我们首先来完成上一节课的作业啊,然后再编写一个函数来判断我们的背包,那么是否呢已经装满,那么我们首先打开第96课的代码。

然后呢我们转到背包的结构单元,然后我们在统计金创药和数量,在这后面呢添加哈统计我们这个mp药品数量的函数,嗯嗯,然后转到这里呢,我们复制一下前面的统计这个药品的这个函数啊,那么把它的名字呢我们改一下。

改为mp,然后呢就是这里的呃名字呢我们把它改一下,改为人生,你三三,还有雪原三,然后呢再是,呃一原声哈,然后再生必次,嗯好像是秘制人生哈,我们在这个药店里面再去看一下,人生雪原声啊,然后呢再是一原声。

嗯秘制和药先啊,医院生突变,秘制意愿生活,这个要先原生,而这个野山参的话是在这个三邪关和领证官啊,呃才有相应的这个啊mp的这个药品,还有这里呢我们可以把它改一下这个变量,那么可以改也可以不改啊。

好那么我们把它保存一下,那么这是我们上一节课的作业的话,实际上很简单,只需要稍微修改几句代码就可以了,那么另外我们还需要添加一个函数,用来判断我们的背包呢是否已经满足啊,那么如果背包满的时候呢。

我们就要清空我们的背包,要回城,要补剂啊,这一类的还要清理的垃圾物品呢,要出售给商店,那么我们在它的后边啊添加这个函数,然后再转到静音,那么在这里呢我们编写相应的代码,第二。

那么如果整个背包我们都建立完成了之后的话,每一个呃都是有这个物品对象的,那么呢我们就返回处啊,表示呢背包满,那么这里呢我们需要用一个循环来骗你,那么我们看一下,好像我记得有定义这个背包的一个大小啊。

in size,这,这家人就真难了,那么这里呢我们要给它添加一个前缀,表示呢,它是我们的这个背包的这个结构的成员,然后我们才可以使用里面的相应的成员变量,那么在这里呢我们对它的一个数量呢进行一个判断。

那么这个数量啊必须要大于零,或者说这个这个数量它等于零的话,表示这一个呢它没有相应的这个物品,那么没有相应的这个物品存在的话,那么我们直接就返回death就行了,那么如果整个偏离都完成了啊。

那么呢呃执行到这里的时候呢,就表示我们呃从下标0~35的一共是36个,那么所有的背包我们的判断啊都有这个相应的物品,它的数量都不等于零的啊,那么说明的话我们这个背包栏就满嗯,就是满足了。

那么如果当中某一格等于零的话,那么我们就返回啊,fs表示了这个背包未满,啊,好那么我们还有之前的这个作业呢,我们测试一下他统计的这个药品的一个数量,m p的,那么我们转到资源,测试证。

咕噜噜噜噜噜噜噜,好那么我们来测试一下,看一下他药品数量的一个统计,那么我们来看一下游戏的决定呃,当然也可以买买一些其他的这个药品,好的,那么我们再次统计一下,那么这是人生的数量,是原生的数量啊。

一元生的啊,要先的啊,一共是30个。

那么我们来看一下啊,取原生十个人生四个,然后再是一元32个,秘制一元三,然后是一个药药,先应原生,然后是三个啊,一共是30个,14啊,26,27加三个,一共30个,好的,那么我们这节课呢比较简单了。

那么我们就到这里呃,那么下一节课呢我们接着分析一些相关的数据,那么这里呢也留一个做作业给大家给大家,这类,就是当我们金疮药啊总数,那么小于某一个数值的时候啊,比如说小于十的时候呢。

那么我们就回城就5g啊,相应的相应数量,比如说我们就5g哈,100个金创药小,那么这个呢我们当时是一个助力哈,大家有时间的话下去完成一下,好的。

P87:098-回城补给功能设计与补给条件检测IsRequireSupply - 教到你会 - BV1DS4y1n7qF

大家好,我是郁金香老师,那么这节课呢我们一起来看一下啊,回程普及功能的一个设计啊,以及相关的数据的一些准备,那么我们在玩游戏的时候啊,嗯挂机的时候呢,我们背包里面的某些物品嗯,比如说它的数量啊。

那随着这个在野外打怪的时候呢,这些金创药啊,我们说的hp这些药品呢会消耗,那么当达到某一个数值的时候啊,低于某一个数值的时候呢,我们就需要来啊回到城里的商店里面补充相应的这个物品,那么这个补充物品的话。

回城补气的这个功能呢,它的设计呢要比我们之前的嗯这些功能的设计呢要显得要复杂一点,那么我把它整理了一下呃,大致的思路是这样,那么首先呢我们要看一下,看一下这个补补剂的一个条件是否成立。

那么嗯以这个游戏为例,比如说我们的所有的这个hp的啊,补充我们血量的这个药品,它的总数小于某一个数量啊,比如说是小于数量一或者是小于数量十的时候呢,我们就需要回到城里边来进行补充啊。

那么首先呢是这个条件的这个判断,那么这个条件的判断的话,我们之前呢也写了两个函数,用来统计我们的hp的药品以及m p的这个药品的数量啊,那么这个数量与我们另外的一个是嗯一个数值进行比较的时候啊。

那么我们就能够呃确定这个条件,比如说有一个最低的一个数量啊,保有量啊,我们的hp药品,比如说这个数值我们设置为啊一时,那么总的hp药品数量小于十的时候呢,我们就要执行下面的这个啊武器的这个功能。

那么补剂药品的这个功能呢,我们首先呢因为补剂之后呢,我们涉及到要返回到当前的挂机挂机的一个地点,所以说我们首先做的是要保存当前的一个坐标,第二个呢我们要寻路到啊,也就是说我们嗯调用了这个寻路的课。

还要让他不断的在这里呢啊,主赛啊不能够如果没有到达目的地坐标的话,我们不能够执行后面的这些动作啊,那么我们必须呢在寻路的同时呢要加一个循环进行判断,要他到达了这个指定的这个坐标才可以。

然后比如说这个坐标是游戏里边啊,这个平时这个n p c的这个坐标,那么必须要到了这个坐标地点之后呢,我们才能够执行打开n p c对话的这些功能啊,不然的话可能会出现一些异常的错误啊。

或者是达不到我们所要所要的这个嗯效果,那么打开npc之后呢,我们还需要来一个延迟,让他把这个数据呢传送给我们的服务器啊,那么这个呢我们呃延迟的话我们可以用sleep来实现啊,然后再次打开我们的商店啊。

最后呢主机物品啊,当然了嗯,就是购买指定数量的这个嗯相应的物品让它保持在一个数量啊,比如说这个是最大值,比如说我们需要这个hp的啊,清创要小要保持在200这个数量,那么比如说现在有五个啊。

那么需要了再到我们的第二里边了,购买195个加起,现加上现有的不可能达到200,这个数值达到200这个数值,那么在购买之前呢,一般呢我们会有一些垃圾物品需要出售给商店啊。

那么这里呢我们都是一个啊顺序的一个执行啊,一样一样的执行,出售了所有的垃圾物品之后呢,那么我们在购买资金数量的啊这个药品啊,这些呢我们在后面的课程呢,最近的这几个里边呢,我们可以一步一步的来完善。

那么所有的我们物品补充完完了之后呢,我们要关闭商店啊,关闭pc对话,最后呢再返回到之前保存的这个坐标,那么之前嗯还有一个环境的一个变量,之前如果是在某一个地方是在挂机打怪。

那么呢我们还需要返回到某一个坐标之后呢,实现挂机的一个功能好,那么大概呢就是这样的一个流程,那么所以说那么接下来的课程里边的话,我们就要呃首先是一个啊补给条件的一个判例判断啊。

需要来写一个函数来判断这个补给的条件是否成立,那么成立了之后呢,我们再啊写一个空来执行呢,这下边的啊这些相关的这个功能的一个实现,好的,那么我们首先打开第97课的代码。

这一节课呢我们先把呃这个补给的条件啊的一个判断呢,做一个初步的一个封装。

好的,那么这个时候呢我们需要来次来,最好的是把这个机制来都更新一次。

更新一次,然后把这个头文件不是一下。

然后移到我们的挂记录里面,然后呢添加我们相应的一个判断,嗯,那么这个回程补给的这个条件的话,它可以有很多啊,比如说我们某一样物品啊使用完了,或者是我们的包裹满了。

或者是操纵这些人都可以做一个啊回程的这个条件啊,那么我们先呢呃就来检测一下我们的这个mp和hp这个药品的啊,根据它的一个数量来来计算这个回程的一个条件,那么呢要计算的话。

我们还需要添加几个层面的一个变量啊,那么我们一样平移呃,你这个药品为例,那么首先呢我们也需要来设置一个开关啊,这个开关表示了我们是否开启这个功能。

在这个药品当前的这个hp的这个药品低于某一个数值的时候呢,我们是否就是说执行这个非常普系,那么这个是回城补给的这个函数啊,这个我们先定义一个这这个函数在这里,那么具体的功能呢我们需要在后边来实现啊。

那么这个呢我们是hp的这个药品低于某个数值的时候呢,回城补给的一个开关,那么这个mp的这个药品呢,它同样的需要这样一个开关啊,这个设置,那么这里呢我们把它改一下,看个p。

那么这个数值呢是呃就是我们mp这个物品的数量呃,最最低的一个数值啊,那么当达到这个数值的时候的话,当前的这个mp的这个药品的总量,它低于这个数字的时候,那么我们的回程的条件呢也是成立的啊。

那么在后边这一个呢是我们mp药品呢需要回城补给的时候,需要的一个保有量啊,就是一个最大的一个数字,那么这个呢是我们回程的时候记的这个mp药品的种类,比如说人生或者是血缘生这一类的。

那么在这里呢我们可以调用一个背包的啊,一个药品检测啊,数量检测的一个函数,一二,那么这里呢可以获得它相应的一个数量,在这里头我们可以定义两个局部变量用来存放啊,当前的,hp药品的总数。

那么下面这个呢我们把它改一下,就是所有mp啊,这个物品啊,也就是我们魔力啊,补充魔力的嗯,这个药品的总量,然后呢我们与呃设置的啊与窗口界面嗯,设置的这个当前的这个数值来进行一个比较,那么这个最小值啊。

如果当前我们的这个当前的hp,和这个物品的值小于小于这个最低的这个数量的时候呢,那么我们这里的条件就成立了,就直接return好处,那么就直接就可以回城补给相应的这个物品。

那么后边的也是我们把这个复制一下啊,那么这里呢是mp,这个是hp,那么如果这两个都通过了检测哈,都发现了嘟嘟嘟嘟条件不成立啊,那么执行到最后的时候呢,我们法庭的它就是f就是说不需要回城补气。

那么后边的话我们还可以加上我们的啊负重的一个判断,那么如果是负重,那么超过了啊,比如说99%也是有一个呃数值,比如说超过了90%,那么这个时候呢也可以做一个作为一个回城补气的一个条件。

那么另外一个就是我们的背包啊,背包是否满意啊,那么在背包满的时候呢,我们也可以做一个回程的一个条件,咳咳咳,那么如果这里我们发现这个背包它是满的吧,那么这里呢我们也直接去看,这个时候呢我们就是回程了。

清理我们的背包,当然了,顺便就记我们的这个相应的这个物品,好那么我们来看一下我们是是否这个相应的这个机子呢没有会更新,这里我们先少加一个下划线,那么我们就用新的这种方式,替换,那么再重新编译一下,好的。

那么这一节课我们的内容呢大致就是如此啊,那么下一节课呢我们来写这个寻路道的这个函数啊,那么寻路的函数已经有了,我们只需要了另外写一个循环啊,呃来判断是否达到这个目的地的一个坐标就可以了。

然后呢我们分别完成这后边的这些功能,打开npc打开商店,当然这些功能呢我们之前都已经找到了相关的这个空,只需要再进一步的封装啊,呃提供给我们调用就可以了。

那么当这些下边的这些呃小的这些部分我们都完成之后呢,然后我们把它组合在一起,那么我们最后呢就能够呃写成一个我们的这个回城补给的这个一个,相应的一个功能,好的,那么这个寻路到的这个函数的一个封装呢。

作为一个坐垫啊,大家先去完成一下。

P88:099-回城补给功能设计相关函数寻路到FindToWay - 教到你会 - BV1DS4y1n7qF

大家好,我是欲擊先老師,在這一節課我們首先封裝尋路道的函數,也就是上一節課的座列,然後再為我們的go to設定,或是plan,那麼也就是說回程記得函數來添加一部分代碼,那麼我們先移到掛件錄影片。

由於我們的第一步需要在執行尋路道之前,我們需要保存一下當前的座標,那麼在這裡我們先添加兩個成員變量,補漆相關的這一部分,然後我們需要編寫一個尋路道的這樣一個功能,那麼在這個功能裏面。

我們把它建到遊戲主現場,這裡面另外再添加一個目錄,用來實現一個功能的封裝,然後我們需要添加一個頭文件和一個原文件。

那麼在這裡我們可以直接選一下,是加加的綠,那麼在選綠的時候,它就自動的會添加一個頭文件,和一個相應的一個原文件,函數的一個功能,或者是遊戲的一個功能的一個封裝,點完成。

然後把新建的這兩個移到功能封裝裏面。

或者也可以把它獨立出來,也是可以的,獨立到外邊也是可以,那麼這個功能封裝裏面的一個約定,我們就是說它裏面所有的涉及到遊戲擴展,都不直接調用,而是調用主線程裏面的這一個功能,那麼也就是說這裏面的函數的話。

我們就可以直接的調用,最終就可以直接的調用來實現,好的,那麼在這裡,我們肯定因為它依賴於我們的主線程單元,那麼所以說我們需要包含相應的頭文件,還有我們的機子單元,它也需要用到,以及我們的全局變量單元。

這些它都會用到,用到的,我們把它寫在頭文件裏面,那麼同樣的,我們為了防止頭文件的反復的被包含,那麼我們也可以了,寫一段紅,來對它進行一下封裝,來看一看,(音樂),(音樂),(音樂),(音樂),(音樂)。

(音樂),那么这样的话就能够保留上来了,那么这样的话就能够保证了我们图文件的不被重复的包含,只包含一次,好的,那么我们在这里来定义我们的相应的寻路道的函数,那么这个我们也可以给他加上一个相应的一个程序。

那么在这里,我们跟他加上一个前缀来表示,就是说后来我们可以不挂接主线程,可以直接的调用,因为它里边都是依赖于主线程单元的函数来实现,好,(音量注意,請別忘了按讚分享哦),(音量注意。

請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦)。

(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意。

請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦)。

(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意。

請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦)。

(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意。

請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦)。

(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意。

請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦)。

(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意。

請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦)。

(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意。

請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦)。

(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意。

請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦)。

(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意。

請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦)。

(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意。

請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦)。

(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意。

請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦)。

(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意。

請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦)。

(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意。

請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦)。

(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意。

請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦)。

(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意。

請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦)。

(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意。

請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦)。

(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意。

請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦)。

(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意。

請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦)。

(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意。

請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦)。

(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意。

請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦)。

(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意。

請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦)。

(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意。

請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦)。

(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意。

請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦)。

(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意。

請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦)。

(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意。

請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦)。

(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意。

請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦)。

(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意。

請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦)。

(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意。

請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦)。

(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意。

請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦),(音量注意,請別忘了按讚分享哦)。

(音量注意,請別忘了按讚分享哦),然後我們再切換到我們的資源視圖進行我們相應的測試,首先我們在這裡需要包含我們相關的同文件,然後在這裡來調用我們的尋路道,在這裡我們就用平時指的這個座標,再重新編譯一下。

好的,那麼我們輸入我們的代碼,(音量注意,請別忘了按讚分享哦),先掛接主線程。

然後看一下當前的一個座標,然後點測試,然後我們看一下這裡的相關信息,那麼這個時候他會顯示相應的一個時間,好的,再重新測試一下,那麼之前的這裡有一段消息可能是錯的,我們到主線程看一下。

那麼我們發現在這裡的他傳送的信息裡面,這裡我們打印了一個字串,因為在這裡的他傳進來的參數不是我們的字串,所以說我們在這裡他會有一段ROM,那麼我們可以這樣的把它改一下,X鍵門,好的。

那麼這一節課我們暫時就講到這裡,那麼我們下一期課再見,(字幕由Amara。org社區提供,感謝大家的支持),(音量注意,請別忘了按讚分享哦),(字幕由Amara。org社區提供,感謝大家的支持)。

(音量注意),再次感谢粉丝们 今天的支持 chten0908@C-hub 谢谢!

P89:100-GoToCityForSupply与msgOpenNpcTalkForName - 教到你会 - BV1DS4y1n7qF

大家好,我是郁金香老师,那么这节课呢我们一起来完善回城补剂的这个函数啊,那么首先呢我们打开第99课的代码。

那么打开之后呢,首先让我们切换到游戏的主线程单元,那么首先呢我们封装这个打开npc的这个函数,很多定义啊,然后我们嗯,然后我们添加相应的代码,把前面的代码呢进行一下复制。

那么在这里呢我们需要传送的只有一个npc的名字,那么把它的这个指针的地址传送过去,那么在这里呢我们还要定义一下相关的这个消息的这个红,那么在寻路后边呢,我们再定义一下,npc不累,打开npc的这个消息。

那么这里呢我们为了与前面的进行区分呢,我们可以呢123456啊,这样进行编号就可以了,然后这里的消息类型呢我们把它改为我们的呃这个打开b c的类型,然后呃切换到我们的主线程单元啊。

在这里呢进行我们的消息的一个处理,哒哒哒,那么在这里呢我们调用这个相应的这个函数啊,怪物列表里面的它的一个成员函数,打开pc,先进行初始化啊,然后呢调用一下o p n p c啊。

这个open m p c f类,然后呢我们这里呢需要取出它的相应的这个参数,那么取出来之后呢,我们还需要来把这个指针的类型呢进行一下转换,转换成我们的这个字符指针的类型啊,然后呢我们进行相应的一个调用。

先编译一下。

好那我们再来看一下,呃打开npc的这个功能完成了之后呢,我们就可以了,呃添加这个回程补气的这个函数呢,对它的代码来进行一些完善。

那么这个时候我们移到,我们的功能封装啊,这个单元,那么在这里的话,我们呢呃回城古迹我看一下,那应当是在挂机类里面添加这个回程补剂的这个函数,为什么补剂啊,直到要到达这个城里边,那么我们添加相应的代码。

在这个回调函数的前边,我们添加相应的代码,哈,那么回程补剂我们把这里的相关的这些我们的设计啊,设计的一个思路啊,复制到这里,然后注释掉,那么首先呢我们是要保存一下啊,当前的一个坐标。

那么这里呢实际上我们的类型呢还需要改变一下,这个nt呢需要改成flo啊,表示是否点类型,我们看一下它的定义啊,那么在定义里边呢我们是定义成的整形哈,这种类型是错误的。

那么或者我们在这里呢可以把它定义成带符号类型的啊,印度,那么只有这个带符号的位置呢才可以表示这个负的这个坐标,那么在这里我们再把变量的名字啊改一下,或者直接定义成佛典类型,这样的话不用转化。

效率的话更高一些,好那么这个坐标保存好了之后呢,我们最后的时候啊,估计完了之后呢,我们在这里呢需要返回到这个坐标,返回到指定的坐标去,我们来看一下,那么在这里呢我们需要呢首先呢执行一个寻路道啊。

那么巡逻到这个位置,那么在这里呢我们也需要包含相应的头文件,嗯,好那么我们再次编译一下,然后呢我们再次打开我们的这个npc对话,走,最后呢在这个地方呢我们需要关闭这个npc的对话。

那么我们看一下有没有封装相应的这个函数啊,转到森林,那么在这里的话,我们还要需要呢在下一节课来添加这个关闭npc的这个相应的这个功能,控,把上边这一行啊复制一下,那么这这一段相应的代码呢。

我们需要了在下一节课啊做相应的分析之后呢,再添加相应的这个扩,那么我们再回到我们的挂机类里面,那么这个时候呢我们可以调用一下回程屏息的呃,做一下啊相应的测试。

那么这个时候的话我们就是他会跑到我们的npc旁边,然后打开npc对话,当然这个打开商店这一步呢,我们需要了在下一节课啊,给它添加相应的一个代码,以及我们关闭这个商店,关闭mp 3对话。

那么最后呢才是返回到我们指定的这个坐标,那么也就是说在这最后的话我们要返回,这个坐标,啊这个之前我们保存的这个作品啊,我们到这里,当然目前的这个测试的话,我们用不到,那么这个地方的话。

打开npc的这个代码的话,那我们需要来调用这个m,我跟你是不,好的,那么我们先做一下测试,在这里呢,我们把这个回程补给的代码添加到我们的相应的测试按钮上面,测试一这,那么这个回程补剂的话。

它是属于我们的呃,自动玩的这个单元c g,我们看一下全局变量单元,water play啊,这个对象通过它来调用,好的我们再次编译一下,要先挂接到我们的主线程里。

那么这个时候呢由于呢它没有挂接到这个主线层,所以说呢它造成了一个死循环在这里啊,所以说我们一定要注意在调用这个函数的时候呢,我们一定要先挂机到主线层。

不然的话它会一直呢在这里呢啊循环这个窗口呢它肯定会被卡住,被卡住,好的,那么我们重新再打开游戏测试一下,那我们再重新注入一下啊,这个时候。

那么先挂接到我们的主线层,然后呢再进行这个测试,好那么这个时候呢我们所有的测试都是成功的,它将跑到这个npc这个地方呢,然后呢打开我们的这个窗口,因为我们的这个循环所处的这个线程呢。

是呃在于这个窗口的一个线程有一些关系,那么所以说我们在测试的时候呢,呃在循环判断的时候呢,这个窗口呢会被卡住,因为与我们的游戏主线程相关不相关了。

所以说游戏的主线程不会被卡住啊,因为我们的这个循环我们再来看一下我们的循环设计,主要是这个寻路到这个函数呢,这里呢它会啊不断的循环会卡住,那么我们来接,下来看一下这个相应的单元,因为我们的测试啊。

测试的按钮呢是,那么这里的所处的限制呢是在我们的呃这个,测试窗口的这个线程里面啊,那么如果我们在测试的时候,是把它放到我们的自动玩的这个绿的回调函数里面。

那么窗口呢他应当来说就不会出现这个卡住的这个问题啊,因为他在另外的一个县城里面,比如说在我们的这个自动打怪里面,来调用我们刚才的这个卫生补齐的这个函数呢,就不会被卡住,因为在这里呢它是另外属于一个线程。

它只是这个线程被卡住了,与我们的这个窗口界面里没有关系啊,好的,那么这节课呢我们就简单的呢就讨论到这个地方,那么下一节课呢我们,在为打开商店以及关闭商店,关闭n p c啊。

相应的一些函数进行一些封装以及分析啊,那么现在呢这后边的这四步呢都做一个坐垫啊,反正下去完成一下,好的。

P9:020-分析圣物对象属性 - 教到你会 - BV1DS4y1n7qF

大家好,我是郁金香老师,qq 66003307,那么在前面的课程里面呢,我们分析了怪物列表以及怪物对象的属性,那么在第19课我们编写代码测试的时候呢,我们发现有一些怪物的属性呢呃不正确啊。

那么在这一节节课里面呢,我们来解决这些问题,那么首先一个呢是怪物的一个死亡的一个状态啊,这个我们没有分析对啊,那么我们先打开我们的op。

就嗯加载到我们的游戏里面,那么这是我们上一结构啊分析的对象,其实,这个名字呢是被我改过的啊,他本来是这个牛同名,嗯那么我们在发现这个,所以我在怪物列表里面哈,它的下标为三的时候呢。

呃出现了一个人物角色的名字啊,就是我们自己啊,这个啊就是我们自己,那么也就是说这个对象的列表里面,那么现在我们在这里来用相对的地址来表示,然后我们把周一个,这些数据啊嗯先复制出来。

先复制一段出来,然后两个呢我们做一下比较。

那么另外呢我们选一个怪物的话,选下边我要按这个啊,dc这个是狂牛的啊,那么我们也选一个,这里我们也用相对的地址来表示,把它选一段数据之后呢,我们把它复制出来。

那么调整它的大小,然后我们进行一下对比。

看哪些地方它是不同的,那么首先呢我们从前面的偏移呢开始看,那么这个呢是它相关的一个函数的一个列表,那么第二个是零,那么加八这个位置呢,它们两个不相同,还有加设这两个位置呢它也不相同。

后边呢也有很多不相同的一些地方,那么这里的话加幺八这个位置呢,它看起来像一个坐标,是玩家的啊,但现在呢我们暂时不分析这个玩家的这个对象啊,当然这个不同的地方很多啊,不同的地方很多。

那么我们再啊再复制一个怪物的对象出来。

那么我们几个数据我们进行一下比较。

那么我们发现呢再加八这个位置呢,如果是怪物的话,这两个都是等于二一啊,而加八这里呢为三幺,这里呢是玩家,那么后面这个i这个加c这个位置呢它是变动的啊。

11f d11 f711 dc这个像一个什么编号啊这一类的,那下面这一栏这些呢它不是很明显,这些数据都是变动的,它不能用来作为一个分类的一个编号,那么也就是说我们可以通过jie这个地方来进行一个判断。

那么另外呢我们可以在,在里面呢对加2g这个地方下一个段看一下它是什么情况,加8+8这个位置呢它与e s i进行一个比较,2710,313,因为这里呢可能就是比较的我们的玩家,三一的高墙。

我们看一下是玩家不是怪物,那么这里呢也有一些比较啊,三幺的二一的,二来福的1c x加八这个位置,那么说明这个地方的话,极有可能就是我们的嗯对象的一个分类的一个编号。

先给他记一下,那么如果不是,那我们在后面我们再改加八这个意思,对象类型分类编号,那么另外还有一个怪物的一个死亡的一个状态,当然顺便呢我们也可以把玩家的一些属性呢就可以把它分解了。

那么我们加三这个位置呢,刚才是我们玩家dc,第c列表示了,那么这是它行号的一个内容,对这前面这个地方呢是它的名字,你们看他的名字偏移是多少,打开这,那你地址来看一下,就这样出去,大概在一八这个位置。

看起来有点像看小。

哦对了,幺八这个位置呢是我们玩家的玩家对象,我们训练也分析一下它的一个,属性,加幺八,这个是我们马家的提醒。

那么在后面呢,这里是一个喊话的内容,这个数据我们暂时用不到,哈哈哈,那么暂时呢我们就记住一个这个名字啊,这个属性当然其他还有等级啊,还有其他什么什么的啊,那么我们到后面我们再进行一下分析啊。

现在我们用不到。

那么另外上一节课我们还有一个就是我们玩啊,这个怪物的一个死亡状态,这个我们在后期我们制作这个自动打怪的时候需要判断,因为怪物死亡之后的话,我们一般就不会再对它进行一个攻击。

那么首先呢我们也是呃看一下打一个怪物的这个名字,你说这个野猪的话,那么说或者说我们在这里给他选一个演出的名字,然后我们把它改一下,根号一这里可这是我之前改了一个名字,编号二,这个也是狂流的。

那么我们在这里呢可以改改一下它的名字,还有a x,加上一个x,然后加上我们的商量一下,这个时候呢它变成了一个负值,那么我们可以把它改成字母的,你死了你死了,那么我们先看一下这个牛在什么地方。

可能在远处了,我们跑回去看一下,啊这个就是我们改的那个名字,那我改了名字之后呢,主要是我们来判断一下,这个呢是我们当前选中的这个怪物,那这个地址就找到了,这是我们当前选中的这个怪物。

那么我们要来收他的死这个死亡的状态的话,这里呢我们就可以从他的那个70开始,三三还有fd 7018,那么如果他一般用用用两种状态来表示啊,你自己的这些东西,那么如果他是活着的,我们可能是一活着可能是一。

但是我们看一下33f d7044 啊,那么如果死亡的话,可能是为零,他可能是这样表示的,那,么我们先把这个先攻击他,那么死亡了之后我们看一下这个数值为零了,这个数字三三fd 73多少,那么我们一个数字。

它,那么这个离得太远了啊,不是三三fg开头的,那么这个呢可能是什么状态,死亡3500王者的时候有个一。

那么我们看一下这个地方,新游戏,那么这个时候呢这个怪物已经刷新了,他活着就是唯一啊。

364,这个是我们上一节课所分析的这个地方啊,当时我们是分析出来的,那么刚才我们一瞬间呢,我们发现它还是零。

当我们鼠标指向它之后呢,他无息了啊,也就是说它显示了一个血条之后呢,它为一了,那么这个时候呢我们没有选中它之后呢。

他又为零了,再来看一下是这个点,那么我们选中它之后呢,会一,那么所以说这个我们上节课分析的这个呢,他是不是死亡状态呃,应该是选中状态,或者是那个是否显示血条,这是我们314的内容。

那么另外一种类型的话,他可能就是他死亡之后无一啊。

活着的时候无敌,那么我们换一种搜索的方式重新搜索啊,搜索灵异,然后我们攻击这个怪物,让他死亡,而死亡之后呢,我们输入一下133f973 ,那我只有这三个啊,只有这三个。

那么我们看一下它是否这个时候呢就活过来了,活过来了,那么应该是五零,那么最后这一个就不是了,那么我们再次攻击啊,有一个思考,死亡了之后,这个78年刚才我们已经学过了死亡超五一啊,喜欢。

一个是398780,我们看一下这两个就是。

这是398。

对应于我们分加380这个问题,那我们先备注一下,减伤二这个可能是死亡状态,那么另外还有一个地方是7780。

这个地方呢应该比较圆,那么这个呢是加768这个位置。

还有一个位置就是1768,那么在哪个位置呢,可能是死亡状态,那么我们再进行一下测试,完了完,再单击一下它,好死亡之后我们看一下c里面,那么只有这上面这个啊,他才不是五一死亡之后啊。

也就是398这个398这个那么398这个呢是我们的啊,这个啊起状态,死亡唯一会死亡呢,那么这就是我们大概的这个分分析的一个结果,那么还有加八这个位置呢是个分类,编号要从0x21 呢才是我们的怪物。

才是我们,五如果是0x31 的话,我们发现的是玩家,好那么我们根据这些分析的数据呢,我们可以对我们上一节课的这些内容来进行一些修改,打开我们上一节课的代码。

那么首先呢我们这个切换到结构单元,我们对它的结构来进行一下修改,是否死亡,那么死亡呢我们是为一,不是为了是否活着,因为是死亡状态,而且它的偏移我们要改,那么到初始化这里,320314这个地方,对了。

三阶段我们没有加这个属性,这是我们把它加进来,多,五的三,38年。

这个销量是好的,那么我们再来进行一下片名嗯。

380死亡状态啊,能不能名字,那么在前面呢我们还需要加一个判断,它不等于空,并且呢我们出来的这个加八这个位置对象对象对象加八这个位置,那么我们要,等于5x2。1,如果是不等于0x31 的话。

不是怪物的话,那么我们就不执行下面的代码啊,所以所以说这里还要加一个条件,当然我们也可以把它分开一些,可能更好理解一些,哈哈,那么只有人当这个加八这个位置的分类编号,我们等于啊这个数值的时候。

那么我们才进行其他的操作,那么像这种对象的嗯,分队编号的话,它的一个定义呢,我们最好也是把它定义成我们布尔类型,这里我们看到,因为,做出相应说什么呢,能看出性,老婆呢,好的做到这些修改之后呢。

我们再来进行一下测试,打开我们的这个调试信息接收的一个工具,然后我们看它注意到哪一个线程里面去,哈哈哈哈哈,收集,这时候他没有接收到消息,让我们看一下,这里的读取也没有错误。

这里读取的这里多加了一个括号啊,应该是这样写的,只要把这里要加上一个括号,括号呢为什么加错了,所以说呢他这里所有的数据呢我们都没有被复制。

这里呢我们推一下我们的o t。

因为这个og呢它加载了这个相应的debug的这个号文件,所以就造成了它我不打开,而且这个d它加载了之后呢,有时候我们会造成我们这个动态链接库呢它不会正常的卸载。

那么我们可以这个时候来用工具再次卸载一下啊,啊,啊这个时候现在成功了,我们再编一遍。

祝你快乐开心。

逛街主线程了,然后我发现我们的消息,那么这个时候我们看到的话,他就没有乱码,这个信息呢就比较干净,这些怪物都是活着的梦死亡,这里是它的坐标,等级取量全部都出来了,这两个的名字是被我们修改过的。

维修的过程,当然前面也有几个,这几个他们有相应的一个信息,就在看清,那可能是空指针没有被赋值的话,哈哈哈,这是消息传到那个地方啊,不是打印我们怪物列表的那个指针啊,所以说跟这个人没有关系,好的。

那么这节课呢我们就讲到这里,那么我们下一节课再见,那么另外呢像这个加八这个物体呢,因为其他我们后边的物品分类的时候呢,还要用,那么这里呢我们可以把它定义成一个这个偏移的话,可以把它定义成一个红啊。

分类的一个编号太,哈哈,这个我们可以把它定义成一个这个对象的,对线的一个分类编号啊,这个偏移,对象分对这个呢我们把它放到结构的头部,嘿嘿,好的,那么我们下节课再见啊,今天我们要分析呢就到这里。

那么下一节课呢我们准备对这个怪物的一个攻击啊,这些进行一些分析,技能呢啊攻击啊,已经选中怪物,这类的话,慢慢的开始分析。

posted @ 2024-09-30 11:13  绝不原创的飞龙  阅读(2)  评论(0编辑  收藏  举报