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

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

P1:012-封装背包对象列表+读物背包物品信息_m - 教到你会 - BV1DS4y1n7qF

大家好,我是玉溪香老师,qq 150330575,欢迎大家参加滤镜将进水编程培训。

那么这节课呢我们对上面结构分析的数据来进行一下啊封装,好的,那么我们先把第,时刻的代码打开。

那么打开之后呢,首先我们把我们找到的这个机子复制一下,转到我们基层管理的单元,好像有个红,那么我们可以把这个公式呢跟它跟在后面,好那么机子封装好了之后呢,那么我们接下来来定义我们相关的结构。

那么首先呢我们分析的对象呢,它有这几项属性,那么我们定义一下这几项属性的一个结构,他这个算,这套对象,那么它它的属性呢有物品名字,物品功能的描述以及物品的数量,那么我们在这里呢就跟他定义这几项。

一个是物品的名字,还有一个是物品的描述,他们都是字符串类型,那么还有一个是物体的数量啊,这是第一关的运行,好那么这样呢我们就定义好了,当然这只是已知的属性啊,还有一些未知的属性呢,以后我们发现了之后呢。

往这边进行添加就行了啊,另外呢我们这个定义好了之后呢,好,这里一共有36分,那么所以说这里的它的数组的大小的话就是36 36,这就是这种类型的,当然在游戏里面呢,它这里呢因为存的是一个指针类型。

在这里呢我们需要存储数据的呃,我们最好是就不定义成只能的类型,因为如果设定一层层的类型的话,还要用六管去给他分配一个空间,相当的麻烦,那么在这里呢我们就直接用变量就行,36。

那为了这个程序的可读性更高一些,我们这里呢可以用一个平等代替这个常量,哈哈哈,好那么到这里的话,我们所有的这个结构方面的呢,我们就听听完了,全,我们也可以把它写在这个结构里面,首先呢我们要获取数据。

数据之前呢我们要对它进行初始化,然后呢我们可以把它封装在这个get to date里面,然后在这里呢我先把它写的先写的简单一点,写一个不带参数,这样可能会便于理解一些。

那么相关的代码我们在这个结构的cpp里面能添加,我看,那么这个呢相当于是对数据的一个初始化,那么这里面呢我们就对这个结构里面的这些所有啊,呃每一格的它的属性呢,我们给它进行一个初始化。

然后读到保存到这个列表里面,把游戏里面的数据能保存到我们自己的这个变量里边,所以说在这里的话,我们需要用一个循环啊,那要用一个循环来做循202,哈哈哈哈,实际上升啊,因为要图访问到我们内存的空间。

那么可能会出现一些错误,那么我们用这个串,啊来进行一下日常的处理,那为了简化它的异常的一个处理呢,我们把后面的全部取消掉,用三个点来代表所有的异常,就是说这个代码框里面所有的异常的话。

就会跳到这里来执行的,那么我们再把这个基础的公式呢粘贴一下,看作这个公式来写,哎那么首先呢我们要读出这个符号里面的数据,要把它读出来,先建一个变量的问题。

这,那么首先呢我们来读出最底层的这个机制啊,把它读出来,存放到这个n倍斯这个变量里面,然后呢我们再读出我们第一格的啊,那么这个地址他们加起来的话啊,就是第一个的一个地址,那么第一个的地址取出来之后呢。

后面呢我们就可以从这个地址呢加上相应的地址来表示啊,当然这个世家四乘以多少多少,这个下标呢我们就在下面来处理好,那么另外在建一个变量来取得对象的一个地址,真正的对象地址,如果你对象的一个地址。

那么物品出现的地址呢就等于我们第一个的啊,它的地址加上我们的41台这个下标就行,那么这个是从0~35,那这样我们把对象的一个指针呢就取出来了,当然要取得我们对象的地址的话,我们还要经过你的操作啊。

还要经过你经过另一个操作,在这里呢我们要涂一下它,这样取出来的才是你对象的地址,注意后面这个括号一定要加,不加的话也不正确啊,这里取出,i got对象,那么取出来之后呢。

我们就可以通过加里面的这个偏移啊,比如说这几个偏移啊,来获取我们相关的一个数据,就可以,那么第一段我们是名字偏移在这里呢,我们把这个偏移把它定义一下,哈哈哈哈,啊对方的话写一下,对方。

那么怎么来x c再来复制一下,物品的描述相关的一个信息,这个,是01f1 ,那么再下一个呢是我们物品的数量现代版,当然你可以用中文的也可以啊,这里也可以用中文来代替啊,那么这里面是24,好了。

那么既然我们第二个对象的地址取出来,那么我们通过这个地址加上这个偏移了,我们就能够得到相应数据的一个地址,找到另外一个地址,相当于,那么这个时候我们就可以开始对它的成员变量进行一个复制。

那么这里呢他也是个下标,是从i开始,然后呢我们取出的第一个数量,那么这个数量的话就等于我们后面的它的对象的地址,加上我们物品数量的一个偏移,那么这两个机子加上物品的偏移,它组成了一个新的地址。

那么这个地址的话就指向我们存放物品数量的一个地址,所以说我们在这里呢也要把它读出来,把这个地址的内容读出来,才是真正物品的数量,那么后面呢我们把它复制一下,这个是,右边右边。

那么接着我们取出物品的这个名字,对当然前面的这个成员变量我们也要变,后面的是一个物品的一个信息,没事啊,这里也要变,那这样写的话,这个指针这类型我们还要改一下,因为前面这个数据的话。

它直接是写入一个数据,而这里的话是一个字符串的一个指针,所以说我们这里不需要读出来,传一个指针开大就行了,而且是一个字符串的一个支撑,所以说这种类型呢我们得变一下。

这样的话理论上我们就可以把这些相关的数据呢就可以推出来,这一次这里是物品功能描述啊,那么我们还要考虑到的一个问题,就是比如说第二个它没有物品存在,那么那个相应的地址他就写入的是一个空啊。

零头取出来的这个是零,但是如果我们这里是零的话,我们再加上这个偏移去取相应的数据的话,就会出错啊,那么我们也要考虑到这种异常,那么所以说这里呢我们还要加上一个条件判断啊。

如果我们取出来的这个物品对象它为空,取出来的是零,那么我们就跳过后面的直接进行下一次循环,而且我们把这个相应的物品数量就改为零啊,在这里他那里没有物品啊,就用零来表示。

这样的话我们就把所有的数据来就存读取出来,读取出来的,那么读取出来之后啊,接着我们就可以使用这些内部的成员变量,那我们看一下具体怎样读出了我们的物品的信息,那么切换到我们资源选项卡,啊我们进行一下测试。

那么在这里读取的时候,我们同样的要用一个循环的图形,因为它有很多格,那么在读取之前呢,我们要先建立一个变量啊,用来访问它相应的对象啊,前面,这个呢对方列表的应该对象,那么在使用每次在使用它之前的话。

我们要对它进行一个初始化啊,必须先说实话,那么初始化了之后呢,我们才能够访问它里面所有的这个数据,如果没有初始化的话,它里面是没有信息的,好那么接下来我们就可以访问里面的这些数据,那么如果这个数量啊。

我们先要进行一个判断,如果这个数量的话,它不等于零,当然如果它等于零或者是等于空,那么我们就不执行我们的这个信息访问的一些操作,那么我们就继续下一次循环,那么如果它不等于零的话。

那么我们就打印出相关的调试信息,上面这段话复制于相,那这个呢它又分了几项啊,首先呢我们第几行,那么后面呢就是我们这个下标,加一就代表了第几个,那么第几个之后呢,它的名字叫什么之s数量是多少人民币。

那么我们后面紧跟着呢,就是它的呃,这个有点多,我们把它换一下再继续写,啊这个啥的名字,那么后面这个斜杠呢是一个表示代码的一个换行符,那么名字过来是我们的数量,哈哈哈哈哈,数量过来,最后是我们的信息啊。

请问那么就这样三个啊,最后我们在这里呢还需要一个相关的信息,说明相关的一个信息说,那么这样呢我们就把相关的这个数据呢就能够打印出来,当然在打印之前啊,这个我已经做了判断了,那么我们先编译一下。

好那么我们运行一下,这里设置为我们的启动项目,然后设置一下相关的一个工作目录,就是这一行调试,从中作用不是投资人,然后注入到这里,我们用调试的工具来看一下。

那么这个时候呢就把我们的呃相应的这些数据呢就读出来了啊,强化石有多少个啊,它的作用是什么啊,第一个是结婚书,那么比如说我们第六个,这里呢它是金疮药中回复多少生命,那我们就来看一下吧,这里呢它的数量在变。

刚才你还有125个,那么我们现在刷新就行了,现在已经变成一般11本了,那么我们读取出来的信息呢就是正确的轻松一下,那么这种写法呢,但是并不是很好啊,那么还有一种写法呢,我个人建议的话,可能,要好一些。

那么我们还可以这样写的,因为有的时候我们会忘记初始化的话,那么我们还可以把它写成一个指针的一个形式啊,只是这样的,那么我们在写之前呢,我们要先改一下我们之前的这个函数的一个返回值。

那么我们可以先返回这个z先给他啊,那么我们这里呢我们需要先改一下有态度this,那么它的返回值类型呢,我们也需要改一下,这改成纸张,那么它在头文件里面的定义里,我们也要跟他改一下。

这里让我们改个尺寸再定义一下啊,其他的功能它不变啊,刚才的代码因为有像,但是有时候我们会忘掉初始化啊,所以说呢我建议用这种指针的方式来写,那么我们就把这里做一个替换,就替换成这个指针,这个点,这里呢。

让我们替换成下一个指针来访问啊,实际上,这样呢他就会每一次都会进行一个初始化的一个动作,就能够保证到我们这个访问的信息呢啊就是最新的不会出错,好我们再测试一下。

好的,当然你觉得哪一种方式好了,就使用哪一种方式吧,但是我个人的话推荐使用后一种方式,这要方便一些吧,这样方便一些,好的,那么今天我们就讲到这里。

P10:021-分析动作数组与攻击捡物功能 - 教到你会 - BV1DS4y1n7qF

我是郁金香老师,qq 15033057,欢迎大家参加预期项技术编程培训,那么今天我们这节课分析的为我们主要是为我们这个挂机打怪做准备,呃,那么首先呢我们要分析出攻击怪物的这个功能。

那么这个功能呢它实际上封装在我们的这个动作里面,那么动作里面呢它就有一项就是攻击怪物,那这个动作呢它一共有12项,它是一个嗯动作的一个数组,那么我们可以那么分析的思路呢。

我们就可以从这个动作的数买入什么,那么这个动作因为在比如说使用攻击的时候,他肯定要去访问这个数组里面的这个相应的一个数据,或者说访问这个对象,那么我们就可以从这个来入此。

然后我们选中某一个的时候来数开的尺寸会变,那么这个时候会把呃这个动作数组里边的啊,某一些数据来写到呃相应的一个变量地址点,但是如果我们把它放回去,那么这个地址的词呢它也会改变,如果我们选了捡东西这个啊。

那么这个时候呢它这个变量里面的数据也会变啊,那么我们可以通过这个变化的数据来来找到呃,对呃呃来找到这个动作数组里面的某一个对象,然后通过这个对象呢,我们再来找到这个数组啊,找到这个数据好的。

那么我们具体来看一下该怎么操作,首先我们把c一打开,然后附加到我们的游戏里面,那么首先呢我们一般说这个鼠标指针没有变的时候,也就是没有忘那一个变量里面写词啊,这个时候呢它的数值呢应该是零啊。

当然这只是可能啊,因为我们立项的话都只是猜测,然后再去分析验证是不是这样,没有分析出出结果之前呢,我们都不能够断定百分之百的就是这样,那么我们先做一下啥事,好那么这个时候呢扫出了很多的结果是零。

那么我们选中比如说选中这个攻击,那么相应的那一个变量它写写入了一个数据,用来表示攻击啊,攻击的一个数据就写在这个变量里面去了,可能是写的是这个对象的一个地址,或者是与这个对象能够表示这个攻击的一个数据。

或者是一个i d,那么这个时候的话他肯定不会用零来表示,那么我们就收比零大的一个数值,好那么这个时候呢还有3万多个,然后我们就把它放回去,那么放回去之后,这个鼠标是没有变化,这个时候呢是一个精确的数字。

那我们可以多收几次啊,那么这个时候结果就比较少了,还有1000多个,那么我们可以反复的扫,反复的扫一下,好然后呢我们再次选中攻击啊,让这个鼠标的指针呢呃这个图标来有变化。

那么这个时候呢肯定它的数值就是比大的一个数值,而且的话这一段时间呢它不会有变动,我们没有去更改它,那么也是一个未变动的一个数值,好然后我们把它放回去,那么这个时候呢它的应该是一个精确的数值零。

那么再一次选中它,比零大的一个数字,嘟嘟好,那么我们放回去,这是什么精确数值为,但这个时候呢数值呢依然比较多比较多,那么我们还可以怎么选择呢,那么我们在选中它之后是一个非零的一个数值。

比零大的一个数字啊,这个时候呢它没有变动,有变动,那么我们把它放回去之后再选一下它,它也没有变动,放回去我们另外选一个对象,这个时候呢它变动搜一下变动的数字,然后呢再说一下未变动的数值,好。

好把这个放过去,再选中一个数字,那么最后呢选中的是这个数值,那我们选中一心用16进制来查看一下,最后就剩下一个数值,那么这个呢可能就是我们的这个对象,那么我们把这个对象来记录一下哈。

因为这个时候它显示的是一个很大的一个地址,那么这种数据一般是一个对象,那么我们首先选中对象,一对象一记录下它的一个数字,然后呢我们选中对象二,也记录下它的一个数字,然后我们再选中对象三啊。

也记录下他们探究的数字,那么我们对象的这个数值我们取得了对象的地址,我们取得,那么这几个对象的话,他应该是在如果是要找它的对象数组的话,那么这几个数字呢它应该是相邻的,是挨着一起的啊,挨在一起。

那么实际上呢我们可以嗯这个时候呢就可以搜16进制的啊,这个数数值,这是第一个,那么这个时候呢我们一共呢会输出三个数字,123,那么我们查看一下它的内存空间内存区域。

来比较一下是不是连续的放了我们这三个对象,那么我们看前面是自己啊5050低位的啊,这是第一个,第二个呢是5298啊,也是的啊,第三个呢5410啊,也是的,那么这个呢也是一个对象数组,第一个啊。

这个时候我们的动作对象对,那么我们再来看第二个,看一下它的内存空间内存区域,那么我们发现了这个的话啊,我是一啊,也是一样的,它也是我们的动向啊,这个动作对象数组,那么再看这个内存空间的。

我发现这个里面它成的也是的,也是这一片数据,但是我们要找的话,我们还要呃接下来我们用d进入到附加到游戏里面啊,继续分析。

那,么我们把找到的这三个嗯动动作对象的数出来都进行一下对比,看哪一个是我们所要的或者是三个都可以用。

当然这个的话是直接找到的,是一个基地址,但是我们看一下它里面的对象的话,非常的多啊,非常的多太多了啊,那么我们可以在这里下个断点看一下,一si 1 si的来源,这个数组呢非常的大啊。

可能它是一个总的上一节课好像我们也分析到了这个数组,那么上次上次我们在分析的时候呢,呃这个740这个地方呢,它也包含了我们的背包的嗯,这个相关的一些数据也在这里面,那么可能的话也就是说我们这个地址的话。

那我们把它记录一下,那么这个地址呢它可能是一个啊各种对象都在列举的,这个我至少是我们的背包对象,还有我们的上一节课分析的应该是周围的怪物啊,怪物对象也在里面,还有就是我们今天的一个动作,动作对象。

玩家对象好像都在里面,啊啊啊。

那么这个呢它可能是一个总的对象,那么我们可以来跳过了,因为它我们要找的应该是一个干净的。

干净的一个等等对象地址。

然后我们再看第二个放,那么这个的话它包含的比较少,一般34678 90 11 12个,那我们再看到这里的刚好是12个对象,12个对象,所以说它包含的一样的。

那么这个表呢比较干净一点啊,那么最有可能是我们的对象,这个可以用的,那我们再看最后一个是不是也是很干净。

那么这个呢它也有一大片,我们发现了这个要多一些方向啊,这个里面包含的数据太多了。

我们不方便使用,那么我们重点呢就找第二个,好第二个,那么也就是这个,那么但是这个呢我们找到了它不是像这个一个绿色的一个机子。

所以说我们还需要查,那么我们在这里呢给它下一个断点,那么内存访问的断点e bx,那么在这里呢我们能够找到一bx来源于这个地址,来源于e d i加410+1 i什么,那么我们在这里下载断了。

把这个段给删掉,重新让它跑起来,那么我们能够看到这个时候e d i n等于这个数值,e s i呢我们看一下等于零,那么是从开始到这样的,那么也就是说他公式的话,我们可以这样表示,加上410+45下标。

5d i,你再再下一次短右键,右键的数字是这个,这样是不对的啊,那么可能这个地方呢它对很多绿色的,比如说我们背包它的一个偏移是420,可能他也会从这里访问啊,然后我们重新在这里把这个数据复制一下。

到这里,重新给它下一个黄昏断点,再试一下,另外找一个地图一比x,那么再跑一下,还是到了这个地方bx,那我们看一下现在的e d i等于多少,等于这个数是多少,第一题要加什么,四不是41啊,应该是这个数值。

删掉为什么断了,那么接下来我们就要找这个api的一个来源。

用c来讲一下,那么这个时候呢我们也找到两个地址,第一个第二个这两个机子,看一下,第一个是31k9 k98 ,那么我们在里面搜一下。

那么在这里面呢恰好一个3a3129298 ,那么这个呢呃我们直接就把它用上,能够在里面收到的肯定就是我们的机制。

那么最后呢它的一个表示方式呢就这样表示的,这就是我们的对象,动作对象录,那么找到了这个对象数组之后啊,那么接下来呢我们要找一下它的一个使用,它的一个使用,也就是说我们主要的目的呢是要找出这个攻击。

还有就是我们的捡东西啊,这些我们有用啊,比如说这个攻击的扣,那么这个攻击的破的话,他肯定要怎么样啊,他是在下的是012,这里是攻击对象,那么在我们在使用它的时候,它肯定会来访问这个对象。

那么我们可以在这上面呢给它下一个内存好用的一个断联,但是它马上就会断下来,那么马上断下来的话,这样变对我们分析的话不是很方便,那么我们可以先退出。

退出之后我们用c来分析这个功能,刚才我是找到的是这个地址,3669298了,嘉陵是第一个啊,加四呢是第二个,我们的这个对象加八,也就是我们的攻击对象,3129位9号,如果在这个地址先读出来。

它是一个指针,三角的指针,这里面应该是加八,就指向我们的公式,31292982,加上看起来再来看一下这个公式,要加一个410,再加一个,还有一个410的一个偏移,那么这里应该是四一化产品。

那么这就是我们的攻击的那个对象,攻击的对象,那么我们要找这个攻击库的话,我们就可以从这个和数据流程这个工具后的对象,那我们就找一下访问了这个,我们要找的是这个地址的,存放了这个地址的这个数据。

这里改成2k668 a t,那么这个地方呢才是存放着我们的攻击对象和这个数据,那么然后呢我们找一下访问的这个地址代码好切换到游戏里,注意这边的一个变化,那么我们点一下鼠标右键的时候呢。

它将使用攻击这个功能,好那么这个时候呢他就攻击相应的一个怪物权,那么在选的时候呢,他这两句代码呢只执行了一次,这两句代码我把它记下来,那么这两句代码的话应该就在我们嗯,那么攻击获得一个附近的。

那么还有呢我们这个其他的动作,后来它也是可能也是在这个附近,我们点一下右键,这个没有反应,我点减弱,这个,那也没什么反应,那么我们先来把攻击的啊,这个先分析出来,把调试器先卸载掉,再附加一次。

这个时候打错了,那么我们用d啊。

这个时候再次附加进我们的游戏。

那么附加标游戏之后呢,刚才在这两个地址呢,我们点攻击的时候呢,他被访问了被访问了,首先我们嗯转到这个地址,那么因为在这个地址的前面或者是后面,他就最有可能是调用了我们的攻击扣。

因为在这里的话它取出了我们的这个相应的这个攻击的一个对象啊,取出来,那么取出来之后呢,后面做了一些判断啊。

然后呢我们可以从这里开始跟一下,看有没有像这个攻击的一个后。

那么在这里呢我们给它下一个段,下段之后呢,我们再次进到游戏,把线程里面都会写,那么再次我们进到游戏里面把这个动作调出来。

点一下我们的这个相应的,比如说挑衅这个啊,运气调息的这个,那么这个呢我们进入到这里,我们看一下1b x这个时候代表的是我们动作对象,数组的下标是从零开始的,第二个呢是一啊,第二个是一。

那么如果我们使用其他的啊,比如说我们使用第四个啊,这个呢它的下边呢是三,看一下这里的高亮显示,高亮显示,然后我们按f8 向下跟,那么首先呢它把相应的这个对象取出来,比如说这个是三的话。

就是减物的这个对象先取出来取来取出来之后,我们看一下后面有没有跟这个空啊,如果后面没有网,我们就跟前面啊,这里有个空,但这个库呢没有任何的参数传进去,那么我们再往后等一下,这里有一个下标e bx被压战。

这里是我们的下标,哈哈哈,那么上一节课我们分析过前面几个,我们分析过背包的这个物品的一个使用空,那么它也有一个类似的这样的一个库里,跟这个框就是呃差不多的啊,那么这个扩的话。

它就有可能是我们的嗯这个相应的对象使用的一个孔,那么第二个呢,这里是商,第三个呢ec x呢等于这就是三个参数,一个是下标三五啊,就是这三个,那么这个ecx我们看是什么啊,就是来源于e d i488 。

这个数据是我们看一下488的成分的东西,哈哈这个数字来恰好就是我们22a66488 ,这是在最前面这个,我们来看一下,看一下就是这里面所放的这个数字,那么所以说这里1c x的话,就这啊这个数值。

那么几个参数都有了,接下来我们可以来测试一下,那么我们以打坐的这个为例,它的下标是为一,你再次跟一下,先跟一下,按下f打错,让f8 现在后面的这个扣下断,先在这里下一个断腿人。

那么这个时候呢我们看一下这两个参数没有变,那这个1b x呢变成了一,也就是说我们打坐的啊,做到这个库,好那么接下来呢我们用我们的代码注入器来测试一下啊,然后呢六six 60啊,读出里面的值。

就把我们的这个呃6466488这个读出来对象,然后再扣呃0079340,然后我们注入到游戏里边,看有没有效果,先把这个窗口也看一下,让我们看一下输入,注入代码啊,后来诸多事之后呢,也不出错啊。

也没有效果,那么说明这个扣的话可能不是的,不是的,我们再继续再分析一下呃,比如说我们看第一个走好,它也会断下这里的eb x来点音频,那么我们再往后边再更一下吧,再跟一下之后呢。

我们发现这里的e b x0 啊,这e d i是我们的那个488,它的机子数数,他又把这个第一个对象来取出来了,也就是相应下边的这个数组和对象取出来,然后做判断看它是否为空,如果为空的话。

就跳到后面来执行,如果这里不为空呢,它将执行这个空啊,将执行这个库,那么我们再来测试一下这个孔,那么这个库的话我们看一下它的参数性,那么它它的参数来是dx来源于我们的这个对象加四在这个地方嗯。

然后呢另外还有一个ecx来来源于嗯这个机子加27岁,那么我们也对用这个来写一下,都做一下相应的一个测试,那么这个写呢写的话要比较复杂一些,首先呢我们e d x下边的地址,我们以二为例。

二的话我们看一下这个动作是什么啊,一马运气调息这个某一,第二个应该是用一,然后呢它的机子给它补充下值一第二咳咳咳嗯,因为既然要从这个地方来,要读出来,啊。

读出来也就是我们的相应的那个664,然后把这个字读出来,那么读出来之后呢,他要要取e x51 a x,等一个e d i加410,加上我们的前的1v x,或者是四神1p x,好这一句我们写好之后。

接下来这句的e d x照着他的写,e d x1 x加上4c lt e x加上我们的1n x x41810 ,没事,当然也可以直接在这里呢把代码按下空格键,然后把它复制,复制好了之后呢,粘贴出来啊。

这也是一种发病,然后呢再复习一dx或16796b,然后呢我们输入到游戏里面再看一下,那么这个时候呢他打错了啊错误,那么说明呢我们调用了这里面的相应的一个数字,那么我们看看他能不能够攻击怪物。

那么我们需要先选定一个怪物啊,这个是走跑,我们先把它调成跑开关状态,然后呢再选定一个怪物,把这里调成二,调到下边,也就是这个攻击,那么这个时候呢他开始去攻击怪物。

那么那这样的话说明的话我们的这个过程才是我们的动作使用口,而这个eb x呢就是我们动作的下标,那么我们要调用哪一个库的话,在这里改它的下标就行了,0~11共12个动作,全部在里面,什么节目开店嗯。

攻击怪物,这些人全部都在里面。

让我们把它复制一下。

就是这个点,那么这个代代码呢,这段代码呢我们就把它复制出来,方便以后更新的成。

啊我们是从从这样的这两句话,啊,那么这个呢我们暂时就没有用了,1b x我们也跟到了这个地方,以及这个地方。

看一下a一啊,刚好是第二个的。

这个后面这个空刚好是在在在后面的这个这个位置,好我们保存一下,那么下一节课呢我们再对这个对象数组啊,动作对象数组这个数据来进行封装,以及它的功能的一个使用的一个封装。

那么这节课呢我们就主要是分析这篇数据啊。

为我们后面的一个挂机的一个功能做一个准备好的,那么我们下一节课再见。

P100:111-回城补给设计-封装仓库存取函数 - 教到你会 - BV1DS4y1n7qF

大家好,我是郁金香老师,那么这节课呢我们一起来分装一下与仓库相关的这些函数,把它分成一个独立的瓦解主线,成为一个,那么首先呢我们打开第,那么呢我们首先要工作这个保存到仓这个函数,那么在很多之前呢。

这个背包列表里面的这个成员函数呢,把大移植到我这个仓库啊啊这个结构里面呢,这样的话方便我们的管理,当时的话是这个不是配合的,这样我们会找你要方便一些,那么我们首先用了几个单元,因为这个代码比较多。

那我们先查查一下他不相关,那么在这里呢我们查找,存放物品这个图,那这个后来我们是把它写成这个b包结构,所以说在这里面试一下啊,仓库列表,那么等一下它的前景,那么另外呢它相关的代码。

那么首先呢我们找到相应的这个地址,能不能把整个代码,再推到重建里面,把它放到,这个该加二问题,就在这个地方,并且呢把他的所属关系的修改一下,好那我再申请一下,那他没有问题的话。

我们就可以把物包里面的这个相应的这个函数,还可以把它删掉,那么我们把它注释掉,就可以存放物品,那么这个编辑性,那么另外有地方的第二个方法,这个函数看对这点我,好的,这样的话我们就完成了我们代码的名字。

那么接下来呢我们就需要对这个保存仓库进行一个代码的一个封装,然后我们先找到我们的游戏主线程单元,那么在这里呢进行一个相应,然后把这段记一下,这段时间我才能去,那么复制我们说到这个主线程单元。

这对单线程来说明长途效应相关的这个操作的,那么这里已经有一个数据模型,这经我想你这个说明,那我只是这个说明,将六进行一个具体的一个封装,这里已经说明,好了有了之后呢,我们接下来让我们试一下这个函数。

那么转到,已经封装了这个小区的附近,那么我们知道它的,数据,然后里面的代码呢我们因为这两个获得参数的话都是一样的,照抄上面一个获得这些参数,那么把这个参数啊一次过了之后呢,我们需要进行一些改动。

是物品数量增持物品的名字,那么这里,计算题,那么这里的话也应当是全部一个插线板,那是一级对线,在之前我们写的时候里面有一些错误,整个节奏能量传进去,当然这里是传的一个数字都是一样的。

就是一片缓存存的数据的一个句子,当然这里的类型需要进行更多,那么我们不能说是使用这个,那么在这里呢我们就进行下载,把这个木板全拆下来,我们做的一些情况,这样写啊。

这个楼也需要在前面的忽略前面的这个消息的运行的相同啊,这样说出去好好在这里呢把消息传递过去,那么传递过去之后呢,我们现在要节省出业绩的消息,我需要,那么处理之后呢,我们也是很清楚这上面,那么这样写呢。

看到这个代码要复杂一点,他们写作要你是把相应的,安全需要钱,啊这这是取得两个相应的参数,那么取得这个参数之后呢,来看一下这地方需要做一下改动,去,那么在这里呢我们是要保存到,这次申请一下。

那么生成之后呢,我们也需要来进行一个测试,那么我们先讲到看一下,单独调用一下这个函数来进行一下测试,转到我们,然后这里呢我们选一个存放物品的存,那么在这里呢我们,选择先创,要醒来做一个测试,三个啊。

我想放大餐,然后呢申请一下,这里一共有两个参数,这里多了一个,然后呢我们可以把这考试进来嗯。

去掉,然后我们看一下,现在呢我们化解主线程测试打开,然后我们存放我们的这个物品,那么我们可以看到这里的信息,这时候是无法转移物品,那么我们仓库物品思想,那么取仓库物品可以那么长,放这个物品的话。

我们看一下它都可以轻松游戏,那么说明我们的这个代码的话应该是没问题,那么我们再来看一下它是整体这个流程,就这那么首先这里是一个指针,这里是一个指针,然后我们走到主线程里面。

那么这里的代码暂时看不出来问题,我们看是不是这个括它本身有问题,加好,那我们再次测试一下,看一下它的这个有没有出错的相关的一个调试信息,那么存放物品的仓库,那我们看一下确实信息。

那么这个时候呢它有一个错误啊,他好像是没有偏离到相关的这个物品,这是个仓库列表里,那么说出来我们就输出在这个地方,pc估计index or内,那么我们看一下我们是不是传递进去的这个名字出错了。

那我们在转账里面来看一下,那么这里是偏离背包那么比较相应的一个名字,那么最后呢它是没有找到这个相应的一个名字,那么我们转到这个get代替你去看一下是不是这个初始化出了问题,3148a24 。

那么我们先检查一下这个机子对不对,对了,因为这个时候他应当是要去骗你背包里面的这个金创药小才对啊。

不应当是去骗离我们的仓库,那么所以说我们之前是把它嗯,之前我们是把它放在这个背包里面,因为他要找到背包里面去找这个物品,获得了相关的这个对象,然后传进去啊,这样才是正确的,那么在这里呢我们可以这样写。

那么再退回去一下,按ctrl减号,那么在这里呢我们还是需要调用我们背包里面的这个,的这个成员变量来实现啊,因为始终要偏离到背包,虽然说我们在这里面封装呢,我们可以提供一个另外的一个接口。

那么我们再退回来背包的这个里面啊,这个注释的这个代码恢复一下,然后我们转到这个啊,转到第一,那么我们看一下下面这个注释掉的代码呢,我们把它恢复一下,那么或者我们也可以这样的写在里边呢。

我们再调用它的一个全局变量啊,这样来实现,那么我们再退回来呢,到我们的这个仓库里面,那么这个函数呢我们需要另外的把它包装一下,那么在这里的话,我们呢呃在查询这个物品是什么呢。

我们通过这个全局变量来调用gt,那么背包白卡,it started,然后再是get indepl,你过来啊,那么这样来调用的话,我们就能够查询到他相应的这个代码,那么这样写的话应该是可以的好的。

那么我们再次,这是编译下,那么这里呢有两个函数呢,我们也把它改一下,改为安全的这个函数加下划线s的这个,好的重新我们再输入。

挂接主线程啊,然后呢我们看一下啊,打开,然后呢纯物品,那么这个时候呢同样的是无法转移物品,我们看一下,那么消息的话我们是传到的,那么后面呢就没有一个相应的一个动作了。

那么说明我们的这个函数的话可能还是存在这些问题,那么我们跟着他的流程走一下,首先出现成,那么他应当是消息到了这里啊,然后呢他给的这里调试信息了,后面就没有信了,那么首先我们转到。

deport里面去看一下,那么我们把这个语句的啊复制一下,那万一这个视频我们把它打印出来,它的一个数值,那么打印出数值之后呢,我们在这里再来看一下,那么这里它所给的相应的这个数组的话,取得肯定是不对的。

那么我们也应当,是要用到前面的这个全局变量里面的这个数据才对,要给它加上一个前缀,因为我们用的是背包里给的这个数据,然后我们看复制相关的,我这里也是,提到,mt相关的我们全部要改,那么这里我们也需要改。

那或者我们还有一种简单的方式把这一段呢我们全部把它注释掉,那么我们直接去调用背包里面这个相关的这个函数就可以了,我改错了啊,这是这是get out。

那么我们需要再在前面后来去把这个相应的函数把它恢复一下,因为这里的话我们又写相应的这个数据,可能是刚才我们把它删掉了,get out,那么我们打开前一课的这个代码,然后搜索一下啊刚才的这个数字。

这个函数,然后呢把它相应的代码呢,我们把它复制出来,好很适合,那么在前面的话我们就直接调用这个背包里面的这个全局变量来实现,这几道题,点,估值to depart啊。

然后呢把相应的这个参数来传进来就可以了,好的,那么我们再卸载掉我们的主线程,再推出来,那么最后呢他需要一个返回值啊,你看,好的我们再次输入到游戏里面,瓦解主线程,我们来看一下,那么挂掉之后呢。

我们直接存放物品,那么这个时候我们就能够存放我们的这个物品的仓库里面去了,那么也可以取出物品,好的,那么我们的第一个函数的这个封装呢就成功了,那么接下来呢我们再封装一下其他的这个函数,那么我们看一下。

这是第一个函数的封装,那么第二个函数呢是跟masage get out goods for dep,那么我们一到主线程单元看一下有没有相关的这个函数,没有的话,这里呢我们需要了给它添加一个这样的函数。

当然之前的这个呢我们格式可以照前面的这个函数呢你来进行啊,只需要把函数的名次给它替换就可以了,那么这里呢是取物品质,那么它所有的格式都可以照前面的这个函数来,但是呢我们需要另外给他定一个进行一个消息。

那么我们把这个函数的名字复制一下,那么这里呢我们要一从卡梅克取物品,那么顺便呢我们要把后面的这两个人的消息了,给他定义一下,然后,打开窗,那么后面我们再来看一下啊,把它的这个函数复制一下,幺三,关闭长。

那么我们看一下还有没有其他的,那么还需要来一个打牌仓库的一个npc的一个兑换,打开对话,好的,那么这几个宏定义定义好了之后呢,下面呢我们也来定义这个呃,相应的这个函数的一个格式,那么这是从仓库取目平台。

我们再来看一下呃存储,然后就是我们打开npc对话的,然后再次打开仓库,这几个lab格式的都是一样的,后面跟一个npc的名字,那我们把这三个函数的名字啊,先复制一下。

那么后面这个npc的购买物品的数量就不需要了,这里呢改为npc类,好的,在后面呢添加相应的初始,再复制一下,复制两个啊,那么这个是打开我们的常打开仓库,那么这个呢是关闭仓库,好的,那么就是这几个函数。

那么我们再把这几个函数的形式来啊,也复制一下,那么然后呢转到我们的定义这个地方,那么在这里呢复制一下这几个函数的,把后面的分号呢全部删掉,那么这里呢我们还需要添加一个分号,所以它的头文件里。

这里是没有复制,没有复制,我们直接过来,这是下面一个函数,打开mp 4 top不累啊,h7 n p c,那么这个呢我们,还想打开npc对话的这个函数,我们已经有这个有过这个封装啊。

这里已经有一个你平时直接跳脱作不累啊,那么我们这个关掉,我们再来看一下之前的这个信息啊,看npc的,那么这里已经有这样一个消息,那么我们在后面的这个消息的话,我们可以了,定义为前面的这个消息就可以。

那么这两种形式的话,到时候都可以使用啊,都是代表的这个数字六,那么既然有了,我们就封装后边的这几个函数,就可以,一个是打开关闭仓库,还有一个就是我们的获取物品了,那么我们把前面的代码复制一下。

那么在后面呢我们也也通过这个来复制,或者我们之前的一个打开npc对话的啊,通过这段来复制,那么复制之后呢,我们要修改的参数,首先就是它的一个小写的一个类型,save,这个是我们是该。

取得从仓库里取得这个物品,当然这里传仓库,这个传递的方式也是一样的,那么第二个星期,这里我们也需要了进行修改,open,close啊,那么这里仓库传递的方式呢也是一样的,那么这三个消息的话。

我们要分别的转到我们的主线程单元了,进行相应的一个处理,那么我们从第一个开始处理,这三个啊复制一下,那么我们转到主线程单元,添加相应的这个开始结构。

那么然后呢这里呢我们就是通过全局变量来实现可以调out,分类,那么后面的这个参数的话肯定也是一样的,我们把上面这段参数来啊复制过来,那么这样的话我们就可以少一个临时的一个局部变量啊,直接这样写。

但是有局部变量的方式的话,嗯往往看出来要清晰一些,比如说我们比如说我们这个团结构的方式,那么这样的话我们看出来也不用什么转换啊,这一类看出来结构要清晰一些,但是这种呢我们呢就不用临时变量啊。

喜欢用哪一种方法,你就用哪一种方法,然后在这里开始应该是,打开我们的仓库,那么你也是把上面这段代码复制一下,当然复制之后呢,这里呢我们需要的,关掉npc,那么我们应该是调用了这种方式来实现。

我们不需要数量啊,只需要一个npc的一个名字,那么这里呢我们前边是仓库相关的,在这里呢我们是open departed for name,这样来实现,那么在下边一个case。

close关掉我们的这个npc,那么后面的这个参数呢也把持下来,我这里多了一个括号的删掉,然后呢我们在这里生成,好的理论上这样的话我们就能够实现单独的就可以调用啊这些代码。

那么也就是说我们前面的这几个函数呢,现在呢我们都已经封装好了,那么我们再一次来调用一个项目,那么我们一到测试啊这个界面看一下,当时我们是直接用这个m s t test来完成的,这个测试啊。

现在我们把它注释掉,首先呢我们是打开pc,那么在这里的话打开的是大宝,那我们看转转进去看一下,好伟大宝,这个打开之后呢,我们测试的是打开我们的这个仓库,open departed for this。

那么这里这里来也是5号,那么第三个呢我们是关闭,事情hello,那么关闭等于15到,那么中间呢我们还要存取物品,取物品的这点我们也把它收拾掉,这是他二级,那么我们把后面的拆出来,用进来。

那么同样的我们这里的话啊,这里是我们的存放物品填充要三个啊,这个之前呢我们就已经把它的代码来写好了。

直接测试,那么我们先把它关掉,直接这样测试肯定是没有效果的,你们要挂接到主线层打开打开仓库,然后是存放物品,保存了三个,然后呢取仓库物品全物品啊都可以,那么最后呢关闭仓库,ok好的,那么这节课的呃。

这节课呢我们就写到这里代码,那么下一节课呢我们在进行进一步的啊这个封装和测试好。

P101:112-回城补给函数-仓库存取部分GotoDepotForSupply() - 教到你会 - BV1DS4y1n7qF

大家好,我是俞其鑫老師,這集我們一起封裝一下去倉庫,記得這個函數,那麼也就是處理我們相應的列表裡面的一些東西,包括我們列表裡面要處理的這些物品,它的一個去向,比如說金創要小,比如說我們要存放到倉庫裡面。

或者是其他的物品要存放到倉庫裡面,還有往我們的倉庫裡面取物品出來,那麼這些都在我們倉庫補給的函數裡面實現,那麼回程補給我們把它分為兩部分,另外一部分就是去商店進行補給或出售物品,那麼這裡因為存備包物品。

我取倉庫物品出來,這兩部分,好的,那麼我們具體我們打開第111課的代碼,那麼我們通過代碼來說明我們要做什麼,那麼首先我們轉到掛情侶這個單元裡面。

那麼在回程補給的函數前邊,我們添加相應的說明,那麼一個就是去倉庫補給的,那麼另外一個函數的說明也可以把它添加進來,當然了,這個的話暫時來作為一個作例,大家下去完成,好把這兩個函數複製一下。

轉到回程補給這裡,那麼在這上邊,它的前邊添加這兩個函數的定義聲明,那麼執行完之後,成功了,我們返回一個增值,複製這一部分,下面的也是這樣來完成,那麼這樣我們就定義了兩個空函數。

那麼接下來我們就要在裏邊實現我們的功能,那麼我們的功能主要是針對這兩個,WCAT的這兩個列表來實現,也就是這兩個變量來實現,那麼我們首先是處理我們的物品補給的,這個數據,另外是處理物品續項的一個數據。

當然前面我們要跟它加上一個作用率的限定,這樣才是我們內部的一個成員函數,那麼首先我們處理第一個補給的數據,那麼它從我們的界面窗口來更新到我們補給數據之後,這裏面它包括幾個部分。

那麼一部分是去商店補充的物品,它也在這裏面,那麼這裏是去商店我們要出售的物品,也在這個裏面,那麼包括我們要存放到倉庫的數據,也在這裏面,在這裏面的話,我們只取存倉庫的這一部分,取存倉庫的數據。

那麼在這裏的話,我們只取了在倉庫補給的物品,那麼我們要把這些物品取出來之後,然後再到我們的倉庫裏面進行我們的存放操作,那麼首先我們肯定要尋入到我們的倉庫裏面去,然後我們倉庫的相應的座標,我們看一下。

當然這個我們後邊我們還要把倉庫的座標,NPC的名字與我們的地圖的ID進行一個關聯,這樣我們才可以因為不同的地圖的話,它的倉庫的座標的話肯定是不一樣的,那麼這個我們在後邊再進行細化完善。

那麼暫時我們就用現成的座標直接來實現,那麼這是去偉大堡的座標,那麼我們再對這個函數來進行一些修改優化,在這裏的話,我們執行了尋路,本來看著是沒有什麼問題的,那麼如果我們沒有人為的一個干預的話。

這樣執行是沒有問題的,但是有時候我們在動手錶的時候,它影響到了它最終的一個目的地,那麼就導致了我們的尋路會被中斷,那麼所以說我們在這裏邊距離還沒有到達的時候,這裏我們也可以修改大一點,距離判斷的時候。

沒有到達目的地的時候,我們可以多次的調用這個尋路系統,那麼這裏的時間我們可以給它設置大一點,好的,按下抗摧解放退回,那麼我們尋路完成了之後,然後我們再次我們打開NPC對話。

那麼這裏的話實際上我們可以根據,因為不同的地圖,通過不同的地圖的ID來關聯一下,寫一個結構,那麼這個結構的話,裏邊有這兩項,當然這是後期的一個設計,這裏邊一個是NPC名字,倉庫NPC名字。

那麼還有一項應該是我們的,那麼這個結構的話,倉庫NPC名字,第一個應該是地圖的ID,地圖ID倉庫NPC名字,另外就是我們的倉庫NPC座標,那麼應該包括這三個項。

那麼到時候我們可以通過當前地圖的ID去查詢,查詢到相應的一個訴訟裏面,那麼我們就獲得NPC的名字,我們寫的座標,到時候我們可以寫一個函數來完成,當然這個我們後期再設計,先提一下。

那麼暫時我們就用固定的數字來實現,這裏就用我們大寶,那麼打開之後,這裏我們要緩衝一段時間,讓我們的服務器有一個反應的動作,那麼這裏我們一秒鐘的時間讓他做一個反應,然後再次我們打開NPC對話之後。

然後再打開我們的倉庫,這裏也是通過他的名字,那麼後期的話,在這裏面的函數,我們都還要進行一個細化,因為名字不同的話,表示了我們的地圖也不一樣,那麼我們也要根據這個還要需要來根據。

我們的NPC的名字去查到,他相應的地圖的ID,或者是其他的一些關聯的一些數據,要去查詢,好的,那麼我們先暫時我們就可以這樣設計,那麼打開倉庫對話之後,這裏我們再給他一段時間。

然後再開始我們的物品的存取的一個操作,那麼物品我們究竟要存放什麼物品,要取什麼物品出來,那麼這些信息都在這兩個Wikipedia容器裏面,那麼接下來我們在這裏定義一個。

用來遍擬這兩個Wikipedia容器,相當於是列表,那麼我們先定義相關的數據,那麼第一個我們是倉庫裏面,記的這個數據,那麼在這裏來定義一個變量,然後要對他進行一個複出值,他的一個出值的話。

就從這裏面來取,那麼他的出值就等於他的begin,他的起始位置過去,那麼然後再來進行一個後續化,他的出值部分我們就不需要了,然後我們直接做一個條件判斷,那麼他小於我們的Wikipedia,小於的。

那麼每次要同意了,加一下,然後我們在裏面再對整個這個,對他的相進行一些處理,那麼首先我們要明確他的一個去向,那麼是不是我們的倉庫的,也就是他的一個地址,那麼他在這個地址就是我們當時的,倉庫或者是要店。

那麼在這裏我們要用一個,支算比較的函數來進行一個比較,那麼如果他裏面取出來的地址是倉庫,那麼我們再進行接下來的一個操作,如果是倉庫的話,接下來就進行一個操作,那麼進行什麼操作。

那麼在這裏我們就取出相應的物品,但是我們應該是先存放這個物品在前面,先遍離這個數據,那麼成了之後,我們再去這樣我們的背包的話,他可以多放一些東西,因為我們清理了相應的背包的數據。

當然最好是我們存放了物品之後,又出售了這個物品,然後再來補給這個物品,這樣的流程是最恰當的,那麼我們還是先存放物品,那麼在這裏我們另外的用Vector,定一個相應的指針,當然注意這個類型他又不一樣了。

那麼這裏我們改為就是IT,這裡我們是一體一,那麼他也需要附一個儲值,那麼在這裏也需要用一個活詢化,那麼對他進行遍離的時候,這裏我們處理的方式有一點不一樣,因為他的結構不一樣。

那麼下面我們直接是用字串來判斷的,這上面我們為了節省空間就沒有字串,而是用一個Dword的標記來進行判斷的,那麼首先我們就要取出這個標記,那麼這個標記的話是。

NP-Word-Blogger-Manager,那麼這個標記的話,我們要取出裏面的一個數字,那麼他裏面的數字,我們就要看,那麼是不是要去倉庫進行操作,要把這一項取出來,那麼如果這一項取出來的值。

它是大於也就是不等於0的,因為他取出來就只有兩個數值,一個是等於0,另外一個也就是大於0的這兩種情況,那麼這個時候我們對他進行一個判斷,那麼如果這個數值是大於0的,那麼表示的話就要去倉庫。

表示列表裏面的物品去向的話,就是什麼呢,要去倉庫進行操作,也就是我們裏面打了一個勾,要存放到倉庫,這裏,那麼我們先編譯一下,那麼我們先注入一下,看一下這個例子,當然這個時候我們可以掛機,這個屬性程序。

我們就來看一下這個物品處理,比如說我們要到倉庫裏面去取精創藥小,取110個出來,好,那麼這裏另外的還有一個物品的一個處理,當然這個種類我們暫時可以不分它,那麼這裏也是如果有精創藥小。

背包裏面所有精創藥小的物品,那麼我們存放到倉庫,那麼另外的精創藥大,那麼比如說這個我們賣給商店,那麼我們比如說這樣設計,然後比如說另外的強化石,也把它存到倉庫,那麼另外我們還有比如說有羅漢富士。

那麼這個我們要把它存到倉庫,那麼比如說我們還有一個機器,那麼這個我們的去向也是存倉庫,那麼所以說在這裏的話,我們在編成的時候就要判斷,這裏它是否打了勾,那麼打了勾的話,它相應的標記,這裏就有一個標記。

那麼這個物品如果是標記了,要存放到倉庫,那麼我們還需要在背包裏面查詢這個物品,它究竟在背包裏面有沒有,有的話我們才往到倉庫裏面傳,如果這個時候背包裏面它不存在這個物品,那麼我們就直接進行下一次循環。

那麼所以說這裏我們還需要來通過背包來查詢,然後來查詢,那麼在這裏我們也要定義一個變量來查詢,那麼如果查詢的數值它是大於或者是等於零的,就表示了是我們的查詢到了相應的座標,如果它返回的數值的話是負1的話。

就表示這個物品它是不存在的,那麼所以說在這裏我們也要加上一個判斷,那麼如果這個數值它小於零,也就是說等於負1了,或者是直接等於負1,那麼這裏我們就continue,繼續下一次循環。

那麼如果這個數值它是大於1的,也就是我們只有在大於1的情況下來,我們才會執行到最後一遍,就在大於等於零的情況下,就執行到這裏,那麼執行到這裏的話,我們才開始存放我們的物品。

那麼我們存放我們的物品到我們的倉庫,那這裏還有一個問題,那麼我們在存放的時候,我們還需要有一個物品的數量,那麼我們究竟存放多少的數量,那麼這個數量的話,我們也需要在背包裏面查詢。

那麼在這裏我們再另外定義一個函數,那麼這個函數,我們就可以通過下標來遍離這個數值,獲得它的相應的一個數量,那麼也是背包相關的一個數值,好,那麼我們的數值,然後是數值的一個下標,那麼下標取出來之後。

它裏面有很多屬性,這個解析度裏面有很多相應的一個數值,那麼我們取相應的數量,數量出來之後,那麼在這裏我們就可以直接傳入了,當然也可以直接把這一句寫在這個地方,但是這樣的話,我們代碼看著太長了。

我們在閱讀的時候不是很方便,那麼所以說這樣寫的話,我們可圖性要高一些,好的,這裏我們可以退出來了,也就是這個列表的一個處理,那麼還有也就是這個補給列表的一個處理,那麼上面的列表處理完了。

我們接下來就要處理補給的列表,先退出來,好,沒有錯誤了,我們再進行下一步,那麼下一步的話就是這裏的一個片尼,它的一個片尼的一個數據的話,我們也可以參照上面的來執行,那麼這裏我們應該是取物品出來。

那麼取物品出來之後,我們也需要了裏邊的話也差不多,先要查詢一下它的一個下標,但是這個時候我們不是查詢背包了,而是要查詢我們的倉庫,那麼這句我們也把它放置下來,做一下修改,那麼在這裏的話。

我們查詢的將不再是背包,而是查詢的倉庫,那麼查詢了之後,也要看紙巾的物品在倉庫裏面是否存在,那麼如果這個物品不存在,那麼再繼續,那麼如果物品存在的話,就取出物品,那麼如果物品存在的話。

我們也需要獲得這個物品的相應的一個數量,那麼它的方法也與我們上面這段類似,那麼這應該是倉庫的背包,那麼這裏我們也需要改變,那麼這裏我們取的倉庫裏面,它在倉庫裏面的一個存量,那麼取出來之後。

我們再進行物品的取出的一個操作,取出相應的物品,然後再是我們的物品的名字,然後再是我們的數量,當然這個數量的話,因為這裏我們的數量,它是查詢的一個數量,那麼具體取出的數量,它也有一個數量。

那麼這兩個數量,我們究竟使用哪一個數量,如果我們指定的要從倉庫裏面取出100個金創藥小,但是倉庫裏面只有50個,那麼你取100個的話,這個時候就不成功,就最多只能取50個,那麼所以說這兩個數量。

我們要進行一個比較,進行一個比較,那麼哪一個數字小了,我們就取哪一個,應當來說的話,我們要取小的一個數字,那麼如果這個數字小於我們的,這個Wicker結構裏面的數量的話,我們來看一下。

這裏Wicker的結構,這裏是1:1,我們不應該再用這個1:1的話,就是錯誤的,因為這兩個結構它也不一樣,也不能夠用錯,那麼這裏有一個物品的數量,那麼如果它應該說這個數量,物品的成量,它要比我們的大。

比這個大的時候,我們就直接把這個數量,或者為小的一個,那麼我們就進行一下複習,那麼如果它本身就比它小,那麼我們也是取了小的數字,小的這個數字,那麼我們就保證我們能夠,從倉庫裏面取得相應的數據出來。

相應的物品出來,所以說這裏要加上判斷,不然的話有可能倉庫裏面的,這個存量不足的時候,那麼我們就取不出來這個物品,好的,我們邏輯上大概就是這樣,那麼我們編譯生成一下,再檢查一下有沒有相關的錯誤。

那麼最後我們這裏操作完了之後,我們需要再關掉NPC,關閉我們的NPC對話,應該是關閉倉庫,這個對話的產品,然後這裏寫上它的名字,好的,那麼接下來我們就可以進行相應的測試,那麼我們還需要在這個。

注意測試的話,我們應當是要不要直接測試,也不要掛接在主線程,我們應當是在這個,我們在現成的回調函數裏面,來執行操作,應當才是正確的,那麼我們再看一下有沒有需要修改的地方,那麼這些取得數據的話。

理論上可能不會出錯,那麼調用Core的時候,沒有掛接到主線程,沒有掛接到我們的主線程的話,它是容易出錯的,那麼像這種情況,它也有一些很小的安全的一些情況,可能這個數據會出現一些衝突。

因為我們如果是直接在現成裏面用的話,畢竟我們這些數據它沒有掛接到主線程,那麼我們到時候需要把這個函數,單獨的還需要封裝一下,為了解決數據衝突的問題的話,當然如果是短時間的運行的話,它應當是沒有這個問題。

那麼我們先測試一下功能上完不完善,那麼完善了,我們在後期的時候,可以把這些函數單獨的再封裝,掛接到我們的主線程上邊,對了,這兩個操作之間,我們最後再跟他加上一個延遲,那麼也就是說,如果沒有延遲的話。

可能我們那邊的相應的物品,存放到倉庫裏面,倉庫裏面的數量可能還沒有更新,那麼在這裏我們取的時候,可能就是說他取的數字可能會造成不對,那麼在這裏我們可以加上一個延遲,這個時候因為他把數據發到服務器之後。

服務器有一個反饋的過程,那麼這裏需要給他一點時間來反應,那麼比如說我們這裏倉庫裏面,比如說沒有金創藥箱,那麼我們這裏存放了97個進去,但是由於數據沒有更新,那麼可能的話在查詢倉庫的時候。

它不存在金創藥箱,所以說這裏我們需要給他一段時間來反應,好的,那麼我們輸入到裏面,掛機出現程,對了,我們還需要在測試裏面,添加我們的測試代碼,或者是直接的放到我們,應該是直接放到我們的回調函數裏面。

掛機錄影,回調函數裏面進行,不然的話放在窗口裏面,單獨的測試的話,它會把窗口會就是說卡死,會造成窗口的一個卡死的狀態,那麼在前面我們就單獨的測試一下,go to,deploy,BossPlay。

這個是回倉庫補給,那麼回倉庫補給完成之後,這邊我們因為是為了做測試,那麼我們就直接返回,不讓他反復的循環做這個動作,注意這一點的話,一定要放在現成裏面,才能夠完成測試,如果是放在窗口裏面的話。

他可能因為這裏面用了Sleep的這些函數的話,他可能就會造成我們窗口的一個卡死的狀態,記住一定要放在現成裏面,好的,掛機組建成,然後我們顯示一下補給的窗口,那麼到要店的這個,我們暫時沒有處理。

這段肯定都是過濾的,所以說添加的這些數據會被過濾掉,那麼我們要添加的是等於倉庫的,比如說我們從倉庫,補給58個,這個金創要小,但是現在倉庫裏面還沒有藥品,我們要當這只是為了做測試,我們需要在裏面先存放。

在這個列表裏面,我們先把金創要小,背包裏面的金創要小,先存放到我們的倉庫裏面,那麼他的去向我們選倉庫,那麼還有一點,在存放倉庫的時候,我們看一下他的一個數量,存取倉庫,應該有兩個動作,一個是存放到倉庫。

下方的是從倉庫裏面取的,存放的時候,我們看他的一個數量是偏離背包來實現的,這個是正確的,好了,那麼我們繼續添加我們的物品,那麼我們看一下背包裏面還有一些什麼,還有一個輕易短切,我們也把它存放到倉庫裏面。

這個也存倉庫,那麼我們再測試一下,有一部分物品,我們比如說人參,還有強化石不需要存倉庫,那麼我們也把它添加在這個列表裏面,強化石,他的去向,我們比如說應該是賣商店,還有就是我們的人參。

那麼人參這個我們就不處理它,主要是我們看這些邏輯上有沒有錯誤,會不會我們沒有勾選他,他也把它存到我們的倉庫裏面去,然後我們應用設置,查看相關的調試信息,然後再看一下,他的一個走向,開始掛機。

那麼這裏有一個錯誤,我們看一下,他說Wikr在70行裏面,這個Wikr,應該是Wikr相關的出了錯誤,我們先復頁掉,然後推出出錯了,那麼我看一下我們的代碼說明有問題,Wikr相關的,他開始沒有出錯。

那麼後來出錯的可能是在這個位置出現的,這個錯誤,那麼我們檢測一下,還是從最前面的我們開始檢測,那麼這裏首先是一頭,複製為PK,是++,最後它的值應該是小於它的N的,那麼我們再看一下,下面有關Wikr。

這裏,sizeboost,那麼這裏應該是錯的,會執行到這裏,那麼倉庫裏面保存物品的時候,我們應當是neat。sizeboost,那麼還有它的一個數量的話,應當是背包裏面的數量,這個是沒有錯。

這裏有去錯誤,neat,那麼我們再看一下下面,檢測一下這裏的代碼,neat,spline,這個這裡條件的話都看不出錯誤,然後我們在這裏看一下,neat。size,那麼我們主要是看一下有沒有用錯。

這裏的Wikr,那麼暫時的話,我們沒有看出錯誤,那麼我們在這裏來給它添加一個相應的異常處理,那麼如果出現了異常之後,我們把相應的neat的值來給它打印出來,那麼我們在這裏添加一個數據。

那麼如果執行到這裏的話,就說明的話是後面的Wikr造成的,那麼我們就能夠縮小它的一個範圍,好了,重新編譯一下,那麼再次我們打開遊戲。

好的那麼我們再次輸入我們的代碼,再看一下有沒有錯誤,那麼首先掛接處顯示外掛,那麼首先我們是去倉庫,從精裝藥行,然後比如說這裏我們從110一個,然後藥店裏面去補充其他的物品。

然後在這裏我們看一下背包裏面還有些什麼東西,輕易短缺或強化食物,那麼我們把他們都存倉庫,嗯嗯嗯嗯,好,(音量注意),(音量注意),(音量注意),(音量注意),(音量注意),再看一下有什么物品。

还有这个一元身,那么这个一元身我们不处理它,还有一个钥匙,那么这个我们把它存到仓库,好的,应用设置,然后开始挂机,相应的物品我们都存放到了仓库里面,虽然说存放到了,但是这里它出现了一段错误。

那么这个错误是打印了这段消息之后再出现的,(音量注意),那么说明这个异常的话,应当说是在后边产生的,那么我们来看一下它有没有取出相应的物品,那么这个时候的话。

游戏已经推出了,那么我们再来看一下后边这段代码,它有没有错误,Getting a Dexframe Name,Vector,它报的是Vector相关的一个错误,(音量注意),对了,这里我们用了一个异体。

因为这个的话,在这上面的话,它已经就是片里完成了,完成了之后的话,这里的@++,它肯定指向了,就是说我们这个时候,它已经指向了最后了,指向了一个未知的一个位置,那么这个时候,在后边再来访问它的话。

肯定就会出错,从仓库取物品的时候,(音量注意),那么这应该是一体一,所以说在取名字的时候,在取变量名的时候,也要注意,最好是不用这种什么,IT1,2这样来命名,那么我们最后来另外给它取一个名字。

可能要好一些,当然这里我们就不做修改,那么可能就是因为是这个错误,在这里的造成的这一局,好的,那么可能的话应当来说没有其他的错误,那么我们再次进行游戏,再进行做一次测试。

那么这次成功的话,那么今天的课程我们就到这里,好的。

那么游戏打开之后,我们再次进行测试,挂接主页层显示外挂,然后要键这里,那么这里的话是不会被处理的,因为在判断关键时的时候,它就被过滤了,它现在只处理仓库相关的,好的,那么我们在这里再加上精装药箱。

精装药袋,再补气一点,也可以多次,好的,那么在物品处理列表里面,我们在这里再加上,很残酷的物品,然后我们再看一下背包里面,有些什么东西,罗汉附送,轻易短信,好的,这些东西我们全部存放到仓库里面。

那么人身,这位的我们不管它,还有义元身,那么还有一些什么,看一下,还有一个血缘身,那么我们把所有的义元身,存到我们的仓库,那么人身卖给商店,血缘身我们不管它,好的,那么我们应用一下,应用一下设置。

当然这里,这些代码我们还没有添加,网上,那么下一节,我们再修正一些错误,把这里的代码再给它补上一笔,那么这一节,如果是测试成功的话,我们就到这里,那么我们进入先看一下,应用设置,那么所有操作。

这个时候都是完全的,一格中存放物品的上限为多少,多少个,那么可能是某一个物品的超限了,还有一些在存放物品的时候,可能出现了一些错误,也不是什么大的错误,数量上可能出了一点错误。

那么这里要取出来的物品也取出来了,那么没有大的错误了,那么这一节看我们就到这里,那么它的错误的话,我想的话,可能是我们的Vector,这里初始化还有一些问题,这个地方,我们来看一下应用这里。

那么应用设置这里,因为我们每次它都会向里面不断的添加物品,但是Vector的相应的数字,它每次没有做一个初始化,没有清空,那么我们需要在相应的数字这里,需要做一些清空的一些操作,那么我们把这段复制一下。

那么补给列表的话,它在每次的再往列表里面添加,从我们的空降里面,每次向里面添加数据,那么在添加数据之前的话,我们在片尾之前,那么跟他做一个清空的操作,不然的话,它同样的列表数据的话。

它在那边的话是越积累越多,那么后面的还有一个列表,我们也需要给它做一个清空的操作,物品去向的一个列表,好的,那么这里我们就不再做测试了,那么这期我们就暂时就到这里,那么下去之后,大家可以尝试一下。

把这相应的这些代码给它添加完善,更加完善一点,比如说我们的物品处理,这里的我们删除某一行的数据,这一类的,那么另外还有一个作例,也就是回去下去之后来写一个,到我们药店补给物品的函数。

那么这个函数来要求我们,要往商店里面出售物品,还有在商店里面买物品来补给,也是通过刚才的这两个容器列表,那么它的写法的话也基本上是类似的,就如对大家练练一下手,好的,那么我们下一节课再见。

P102:113-回城补给设计-封装商店买卖函数GotoShopForSupply() - 教到你会 - BV1DS4y1n7qF

大家好,我是郁金香老师,那么之前我们写过一个回城补给的这个函数呢,它的这个功能的话也类似于我们的这个去商店普及啊,因为当时的话我们就是去药店啊进行这个呃药品和补剂,当然现在我们还多了一些东西。

要把我们没有用的这些物品呢要出售给我们的商店啊,多了一个流程,那么好的,我们在112课的这个代码上来进行一些修改。

那么因为我们有了前面的这个基础的话,我们可以直接的在这个回到仓库补给的这个函数呢,在它的基础上呢,我们进行修改的话可以很方便,那么我们先找到相应的这个函数,那么我们先移到去仓库补贴的这个函数这里。

哦哦那么到了这里之后的话,我们来看一下啊,当时失去五大宝,那么我们把这里边的代码把它复制一下,那么该改的地方呢,我们把它改一下就可以,那么复制复制好了之后呢,我们这里呢是去商店啊进行一个服务器。

当然这个代码的话与我们下边的这个回城补给的话也有一些相似之处,那么因为我们在这里呢,首先寻路的这个坐标的话,我们需要了寻路到平时指这个地方,我们把这个回程补剂的这个函数的话。

这一部分呢我们把它复制到上边来,那么这个是平时值,那么去商店的话,我们现在呢就是去这个平时指这个地方,那么最后呃这里补给完了之后呢,我们再来看一下最后的这嗯,这里我们当时要关闭的也是pc值,pc。

当然在这里的话我们应该是关闭商店,就但是这个函数好像是没有的,我们看一下有没有这个函数,嗯那么没有这个函数的话,我们还需要来封装一个这个函数,close说,那我们看一下前面的一个函数的命名方式。

在它的基础上,那么我们进行修改,那么在这里我们需要做的第一步流程呢,也就是封装这个函数啊,那么除了这个函数之外,我们看一下前面的这个打开mp 4,这里呢我们也是pc,那么这里我们也先把它改为p40 。

但是这里呢也是打开我们商店的话,也是呃服装到这个函数数啊,那么这个函数呢我们有封装啊,有封装的话,我们直接切换到这个地方来,添加一个关闭mp 3的这个函数的一个定义啊,转到森林这里。

那么这里有一个msg close npc或类,那么这个函数我们看有没有定义,再看一下它相应的一个处理,那么当时呢这个呢是以平时只作为一个例子呃。

这里的话我们还没有跟它添加相应的关闭m p c的这个操作的话,我们还没有添加一个相应的开始结构,那么实际上我们也可以把它写在一起啊,这里的话呃可能是出口放p c v嗯,那么我们来看一下啊。

这里的话它本身就是关掉这个平时指的这个操作啊,当然我们可以把韦大宝的这个关闭呢也把它添加到这里,那么这两个的话我们看一下啊,可以把它的数据那么复制出来做一下对比,那么这是平时指的,那么另外一个的话。

我们来看一下关闭仓库的这个,线程单元,那么这个是关闭仓库的,那么我们查找一下这个的开始处理,那么这里的话仓库呢它的这个缓冲区不一样,但是它们的结构的话都是一样的,两个n p c。

那么我们看一下它们的结构的话,前面的啊这个代码可能呢这一段代码的话就是表示我们关闭仓库,然后在前面这一段啊,那么这里呢他是三,这里是一,那么我们可以这样理解啊,这在这里的话。

这里我们可以把后面的这一段删除掉,那么也就是说我们可以定义一个结构的话,那么如果npc的名字是嗯,是平时指的话,就是三,是仓库的话,就是一,那么我们可以建立这样一个结构啊,通过这个平四指的一个判断。

或者说通过一个平时指的判断来为这个nt代替代替三,这里来进行一个复制啊,好的,那么我们可以先把可以另外的封装一个函数,也可以呢,在我们的呃关闭这个n p c或类这个函数上面进行一个修改。

那么我们先在这里边啊添加相应的这个,功能做一个开始的一个结构,在这个close token和pc内这里,那么这是平时值,那么当然还有另外一种方式呢,我们直接啊,这里呢表示仓库为大宝。

我关闭五大宝的这个操作,那么实际上它就只有一个nt代替三类不一样啊,那么我们在这前面呢可以给它附一个这样的一个数值,当然这前面的这个数值的话,我们就可以不要了,这个nt dt。

那么在这里我们直接给它复制一点就可以啊,这前面的都可以不要这样写的话更简单一些,然后呢我们用一个开始结构或者是做一个这个相应的这个判断是tt,因为这个开始结构的话,它不支持我们字串尺寸的一个判断。

那么在这里呢我们直接对这个npc的名字进行判断,那么如果是平时,那么在这里呢我们就改变它的这个相应的这个数值,那么实际上我们在这里的话还有另外的一种写法啊,那么我们可以看一下,那么如果我们这里。

这里加三的话,我们可以直接对这个nt代替了,把它转换一下类型,当然我们最最容易理解的话,如果是平时指啊,那么在这里呢我们就等于三,那么如果是其他的一个数值20,你那么如果是韦大宝的话,就不足为一。

那么这个地方呢不止为一,我们看一下是不是这样的,韦大宝,这里是一个,好的,那么我们在在这里的话,123的话,实际上呢我们还有另外的一种写法,那么我们可以前面的八个字节来加上低位的这两个字节呃。

然后的话它就是多少呢,就是9a然后这个地方的话呃应当是0p好像施工再来计算一下啊,这前面的占八个字节啊,从这里这位应该是,这里应该是零碎了,这里应该第一个词也是零碎的冥币,然后呢,这里是冥帝啊。

应该是冥帝,那么这个地方的话我们可以这样再写,另外定义一个指针指向它,恰皮的,那么这个p得体的话,我们复制为nt大体,指向这个数字,在这里呢我们强制的把类型给他转换一下,然后呢我们定位到这个位置。

那么我们说的啊这里的话应该应当是0c啊,这个自己0b,那么这个季节的话是从平地开始的,那么如果我们是从数组来计算的话,我们还可以来把这里的定义成啊word的这个类型也可以。

那么word的话这里的我们看一下这里的话我们叫什么事啊,那么这里应该是012345,那么这里呢应当是下标为六啊,这里的话下标应当是为七,这样才对啊,你再数一下音12346,那么这里是v7 啊。

那么我们在这里的话就可以写为呃p代替七,那么我们复制为三啊,这样就可以了,那么这种方式的话可能更简单一些,那那么这两个应当是等价的p的t那么七负值为三,那么这一句与前面这一句呢它是等价的。

但是我们表示的话啊,更方便一些,好的,那么我们暂时就用这种纸巾的方式来进行一个访问操作啊,因为他这个word它是在两次节的下标不一样,那么从这里呢他这两个字节它代表的是零下标啊,在高位的下边是一啊。

然后呢这里是2346啊,这里呢这两个字节的话就是我们看下标题,好的,那么我们直接来这个关闭m p c的这个操作的话,我们就直接调用这个怪物列表的来实现啊。

这样当然现在我们只添加了一个平时只和一个伟大宝的一个操作,那么但是呢我们如果是在这里边没有找到这两个npc的时候呢,它也会调用这个默认的这个关闭,那么这个默认的关闭的话,我们之前的操作的话。

好像它也可以啊,关闭其他的这个n p c操作,那么与这个数据的话好像关系也不是很大啊,但是如果是有关系的话,我们就可以用这种方式来处理好的,那么我们这里呢我们就啊不其他再封装相应的这个函数。

就直接调用这个m s t close npc脱口或定,那么我们再转到这个主线程单元啊,在这里的话我们就会调用专门的这个关闭商店的这个函数,那么我们仔细的调用啊,呃cos n p c或平行时好的。

那么我们再接着看下边的,再编译一下,那么这个时候没有错误,我们再来看一下这个流程的一个处理,那么这里呢同样的我们是先是一个呃到商店之后的话,我们寻路到商店之后呢,然后呢我们打开这个商店啊买卖。

然后来骗你这个物品处理的列表,然后呢我们取出呃勾选了这里肯定不是勾选仓库的,那么这里呢我们肯定是勾选了我们商店的go to shop的话,是这里的,我们取出这个标志。

然后呢表示就是说它的物品的一个去向呢是要出售给我们的商店啊,要出售给我们商店,不是存到仓库,那么这里呢是要如何出售物品给商店,那么首先呢也是需要在在背包里面查询相应的这个物品,那么获得这个下标之后呢。

也是要做一个判断,那么最后呢那在这里呢也是需要查询它的一个数量,最后呢只是它的一个去向呢,不是我们的这个仓库,可是我们的商店,那么在这里呢期货,list,然后我们在里边的话应该是挺大,最后呢应当是出售。

ceo,那么当然我们这里来只有买这个物品啊,从商店里面买物品,但是我们出售这个物品的这个函数的话,这里面没有封装啊,在这里的话没有封装相应的这个物品,当然还不要说我们的呃,所以说在这里的话。

我们也需要封装一个相应的这个函数,那么首先需要封装一个啊出售物品和3d的这个函数,然后呢我们再次分钟一个啊与主线程挂钩的一个函数,最后是,出售物品找商店,买s级。

那么出售到商店呢也是呃通过物品的一个名字,好的,那么我们先来看一下相应的函数,那么这里既然没有出售的,那么有买这个物品的,我们先转到这个声明看一下,转到定义。

那么这是前面调试的内容,我们可以暂时把它删掉啊,那么当时我记得的话,我们在之前呢有过这个测试的内容,只是被我们删掉了这一部分,当时呢我们没有把它封装成相应的这个函数。

那么我们在之前的这个教程里面来找一下。

那么找一下商店相关的,那么当时封装了一个相应的啊say gol,那么这个函数我们看一下为什么现在没义务再来看一下。

有这个函数,但是这个函数呢呃应当是没有在我们的这个头文件里面,进行一个相应的一个声明,那么我们再转到这个背包里面,看它有没有它的一个声明,啊这个呢他没有在仓库里面,而是在我们背包里面。

因为是我们背包里面的这个物品的出售到商店里面,那么我们在这个商店列表里面呢,那再给它封装一个同龄的函数,好的,那么这个同名的函数的话,我们再转到它的后边来执行,复制一下,这挺大的。

那么这个时候应当不是骗离我们的背包啊,我们看一下,那么这里呢我们还需要一些改动,是出售我们的物品,应当只是嗯然后呢所有勾指不累啊,直接传参数进来就行了,因为我们这个物品的列表的话,它应当是在我们仓库。

在在背包里面的啊,所以说这里我们初始化肯定是背包的一个数据,然后呢把后面的这个参数呢直接传进来就可以,最后来返回它的这个相应的数值,retur,好的,我们先编辑生成一下。

当然在这里呢我们也可以来暂时来直接调用这个函数来实现啊,嗯当然这个最好是挂件在我们主线程里面好一些啊,这个相应的我们再封装一下这个函数,m s t i c e fla。

那么在前面呢我们需要来定义相应的呃这个红,啊,二,那就去冲动,然后复制这段话,再买买这个物品的这个函数后边哈,我们转到这个定义的这一部分,然后呢复制一下我们的刚才的这个函数的说明,复制一下它下面的代码。

因为这个参数的话是不一样的,那么在这里呢我们把这个消息的类型改变一下啊,其他的不变,然后呢我们参数传递过去之后,转到我们的主线程单元进行处理,那么我们在它的基础上进行一些改动,那么出售物品的话。

我们也是商店里面啊,co这样子是sale was fully,那么你们只是这里的名字改一下就可以了,然后我们编译生成,那么助理啊,这里有一个很好,我们要把它去掉好的,然后呢我们再转到这里哈。

把这个函数的名字替换一下,m s t,行不是佛累啊,然后是物品的名字,物品的数量啊,这样就可以了,然后这里呢是从仓库里面哈取物品,那么在这里的话这个列表的话,那么我们是要从商店里面买的这个物品。

那么这里我们也需要改动,接受,那么这里呢我们是bbc,好再编一下,大致就是做这些修改,那么我们再来检测一下我们的流程,那么首先是寻路到平时纸的坐标哈,打开这个mp c对话,然后是打开商店。

打开商店之后呢,我们在这里呢进行我们的列表的判断,看是否我们物品处理的去向,是不是我们卖给商店啊,去商店,那么如果是的话,那么我们在背包里面查询啊,查询这个物品,那么如果在背包里面存在这个物品的话。

那么呢我们就取出它的一个数量啊,就出示给我们的商店,好的,那么这里呢应该是从商店里面买的物品,然后呢这里我们的判断呢,我们需要的是一个商店,这里我们需要做一个改变啊判断,那么如果是它的一个趋向的话。

是从商店里面补剂,而不是去仓库补剂的,那么我们在这里呢也是呃,在商店里面应该是查询这个物品的一个下标,那么这里的话我们也需要看,具体说对对对,然后我们是从这个商店里面的来查询有没有这个指定的物品啊。

那么商店里面有这个物品的话,我们才能够呢就是说重了,那么这里呢他直接是查询的这个数量,那么还有这里的话也是从商店里面来查询,那么我们看商店里面有没有这个物品,那么如果商店里面有这个物品存在的话。

那么呢我们才购买这个物品,那么这里呢我们也打印,为了防止出错了,我们也打印出一个调试信息,嗯嗯,好的,那么我们再次编译生成,那么大致的话可能就是在写哈,有没有错的话,我们需要来来进行测试才知道。

那么我们把这个相应的代码去商店补,记得这个代码添加到我们的主线程里面来呃,应应当是这个回调函数的变量进行测试,转到定义,那么在这里的话,我们来仓库补其他,那么测试的话去商店,哈哈。

与商店五星之后直接对碳,这样呢就直接只测试一次,那么在后边呢就不会被执行了,好的,那么我们再次生成。

好那么先挂接到主线程显示我们的外挂,那么这里的话我们就是药店里边要去买的这个物品,那么这个呢我们补充一个,然后呢经常要中文补充两个,然后我们看一下还有没有其他的这个物品,那么当然在后面的这些呢。

他肯定就是去仓库普及的,这里普及不到啊,那么我们看一下还有金疮要大,我们一起11个,那么物品的一个去向我们看一下背包里面有一些什么东西嗯,那么这里有一个初级的啊,奇遇时,那么我们把它卖给商店。

还有这个血缘上,当我们也把它卖给商店,那么这个呢我们不管他或者另外一个清创医药,行,那么这个呢我们不管他不选择做任何的选择,那么我们先应用设置,好的,那么我们再开始挂机,看一下它的一个趋向。

那么这个时候呢开始寻路,但是这个时候呢被卡住了啊,感觉是吧,那么我们来看一下,那么这个时候呢许诺呢他没有任何的这个动作,那么我们停止挂机嗯,然后呢再重新输入一下,看一下检测我们寻路的这一部分。

那么可能是我们在鼠标在动作的时候呢,它会停止这个行动啊,所以说我们在点击的时候,最好是在这个窗口上面在做测试,那么我们再重新测试一遍啊。

应该不是我们代码的这个问题。

打开这个,好了,大概就是这些,我们再次做一下测试,挂接主线程,那么在这里呢我们应用设置开始挂机,那么这个时候的话应当是我们的寻路呢出现了这个问题,7371955,那么我们看一下相应的信息。

如果是群众没有出现问题的话,呃卖出了两个奇遇时,但是呢没有买进,从商店里面补习这个物品的话,嗯没有补习正确,那我们再来看一下,应当是正确的,补气的话应当是要呃补习这个金创要小或清仓要中才对。

那么这两个数据的话可能是没有取正确,那么我们先退出我们的游戏,再来看一下我们的代码,那么一个是雄鹿的这个地方呢,好像是出了错误啊,那我们在这里呢稍微走远一点,嗯然后我们看一下我们的这个围城计的这个函数。

再次看一下,去商店武器,那么我们出售物品,这里的话是没有问题,这个奇遇时的什么的,也是一次性出售的,啊这里的不是商店,这里是要点啊,这几个字我们写错了,这里是要点注意,好的再次保存一下。

那么寻路的我们单独的做一下测试啊,呃这个直接寻路啊,那么我们看一下这个寻路究竟有没有被调用到,好像是这个信息,相应的信息呢没有传过去翻走位,那么在这里呢我们输出一道调试信息,老大,那么好的。

我们再重新编译生成一下,那么先挂接到主线程显示外挂,估计他需要垫记,这个青春要写死一个,然后青春要中13个嗯,后面的这些让我们当然这些呢我们随便添加几个物品处理,这里呢我们看一下还有什么物品可以出售。

就是这个秘制一原声,我要先原声啊,这两个我们把它出售掉,那么这两个呢我们都卖给商店啊,嗯其他的比如说人生呢这些不管他有没有他去查询就行了,那么这个存仓库,那其他的比如说我们强化使用,啊这些呢我们不选。

然后呢我们应用设置再来看一下它的一个趋向,开始挂机啊,那么这个时候的话应该是正常,好然后我们的任务呢是从这个记录的信息来看的话,是完成的啊,嗯跟我来清创药11个,清仓庙中13个。

然后呢要先医院生以及其他的这个励志医院生的都被卖出啊,好的,那么这几个呢我们测试就在这里了啊,应当说没有这个大的问题,好的,那么我们下一节课了再见,那么这里边呢还有一些要注意的就是什么呢。

呃因为我们的这里面用到了一些函数呢,它没有挂机在我们的主线程上,那么这这前面的这些函数的话肯定不会出错啊,那么可能出错的数据容易产生出错了,就是我们这里啊。

那么这里的话它获取相应的这个下标的话是直接调用的,这个函数呢没有挂接处线程,那么在这里的话功能上来说没有什么错误,但是有可能的话就是说呃这个多线程之间呢,它数据的一个访问的一个冲突。

有可能出现了一些不可预料的一些错误,所以说呢那么这些功能的话,最好呢我们都把它封装成msg版开头的这位置,把它推送到相应的这个单元,那么这个呢暂时我们做一个坐垫,大家先去完成一下,啊。

把这些功能呢我们都瓦解到主线层,那么或者呢还有另外一种处理的方法,但是这种方法的话可能会卡掉我们的游戏界面,那么这种方法呢也就是把这个go to shop for supply。

把这整个函数来把它封装成化解到我们的主线程,封装成这样的函数,但是这样的话也可能出问题,那么这样出问题呢,它主要是在于这个史蒂夫这里,他可能会把我们的游戏储存可能会卡掉啊,会卡掉,那么这样也不是很好。

那么最好的方法的话,在这里呢我们还是把前面的这个函数来单独的空调啊,这样做更好一些,所以说我们要要注意区分哈,哪些函数呢我们能够单独的封装挂机主线程,那么哪些功能的函数呢,我们不能够挂在主线程。

要区分一下,那么一般来说这个sleep用的比较多的话,那么我们不建议这种函数呢挂机到主线程啊,好的,那么大家呢下去呢都可以做一下相应的这个尝试。

那么还有这个函数啊,这节课我们有相应的这个改动。

好的。

P103:114-重新设计挂机代码-防移动卡死-完善回城补给 - 教到你会 - BV1DS4y1n7qF

大家好,我是俞京香老師,這幾個我們主要來完善一下回聲普及的代碼,以及我們還有掛機重新設計一下掛機的代碼,好的,我們首先打開113克的代碼,那麼之前的代碼的話,我們邏輯上有一些錯誤。

那麼我們需要處理的進行一個修改。

那麼在修改之前。

我們先更新一下遊戲的機制,那麼這個遊戲它也已經有一個更新機制發生了變化,首先我們展開機制單元,然後打開機制更新的56克的工具,好的,更新完成了之後,我們比對一下機制,那麼我們發現的話。

這個機制的話的確已經有變化了,那麼我們把之前的機制刪掉,這裡的機制輻射過來,然後重新編譯一下,那麼首先我們做一些數據的一些初始化修改,移到回聲普及的選項上,要電,那麼我們把這裡的數據複製一下。

那麼還有一個倉庫這裡的代碼,那麼我們也把它刪掉,重新的初始化一下,那麼然後我們移到掛機單元,掛機率的代碼進行一下完善,那麼移到掛機率這裡邊的話,我們把前面的這一段可以說全部都可以把它刪掉,那麼刪掉的話。

我們在這裡重新進行一個設計,那麼首先我們是一個低學的一個,低學保護,然後我們再是一個回聲普及,那麼接下來這是自動打快,自動打快或自動任務的話,自動打快或定點,定點自動打快是一起。

還有我們的自動任務也應該放在這裡,應該放在自動打快的前面,那麼除了這一些的話,我們暫時就是這幾樣,大概是這樣的設計,那麼我們把相應的代碼先把它粘貼進來,那麼這是我們的低學保護。

那麼這是我們回聲普及的這個函數,那麼這裡是自動打快,當然,這裡的話我們還需要對低學保護的函數來進行書寫,那麼我們看一下沒有準備這個低學保護的代碼,那麼我們先退回去,低學保護的代碼的話,實際上這裡邊寫。

那麼我們直接把它取出來,低學保護的話代碼就是這一段,那麼我們就把這個代碼寫進去,那麼我們就把這個代碼寫進去,那麼我們就把這個代碼寫進去,那麼我們就把這個代碼寫進去,那麼我們就把這個代碼寫進去。

那麼我們就把這個代碼寫進去,那麼我們就把這個代碼寫進去,那麼我們就把這個代碼寫進去,那麼,嗯,嗯,嗯,嗯,嗯,嗯,嗯,嗯,嗯,嗯,好的,我们先添加低血保护的代码,当然这一段的话。

我们需要添加在他的文件的说明里面,那么有一个低血保护的,我们找一下,就是这里,相应的,自动使用物品,继续保护的,接下来,我们再修改一下我们的回程图形,自动打怪的挂机的这一部分循环里面。

我们把这里的相应的代码就可以把它删掉,那么定点打怪,我们需要移动到自动打怪里面去,那么在这里的话,我们还需要设计一个自动打怪的一个行数,那我们找一下是否自动打怪的,那么自动打怪的这一段。

我们就把挂机的这一段把它添加进去,还有也就是我们的之前的定点的也给它加进去,定点打怪的这一段,那么这样的设计的话,我们看起来的话,考读性会更高一些,结构会更活力一些,那么剪物的我们在另外再设计,好。

那么我们再回过头来,把前面的这一段都可以注释掉,首先我们就是一个回程补给,那么回程补给之后,我们再是前面的再是一个低血保护,好,我们直接把相应的代码把它复制进来,那么这就是循环里面的这一段。

那么以后就分为三部分,低血保护,回程补给,那么自动剪物的我们后边我们再进行设计,好的,我们先便于生成一下,那么除了这里的话,我们还需要对我们的寻路这个框来进行一些修改,那么寻路的我们移到回程补给里面。

它有调用,那么寻路这里我们有一个问题,就是经常容易在某一个地方会卡死,那么卡死了之后,我们可以跟他增加一下,还有这里的我们的逻辑也有一个错误,小于的时候,我们再继续执行一个寻路,这是错误的。

那么我们应该是大于这个距离的时候,我们才是继续寻路,这里我们需要修改,那么如果是小于的话,我们直接才是寻路成功,那么另外一种情况,小于等于的时候才是寻路成功,然后直接返回,那么我们还要考虑到一个。

就是我们的需要有一个防卡的一个移动,那么如果卡在这里,那么这个距离的话,它就不会变化,那么所以说我们可以在这前面再定一个变量,NDO的Distance,那么就是保持了上一次的距离。

那么这个距离的最先我们也可以出示,包围0,或者是其他的任意数字都可以,这个地方,0或者是任意数字都可以,那么初始化了之后,我们在寻路之后,在这里我们就把它的数字进行保存,上一次的数字。

那么保存这个距离之后,在这前面我们再给它加一个判断,那么如果两次的距离它都相等,如果这个order上一次的距离也有事,它等于我们当前的距离的话,就证明了它卡住了,没有移动,那么没有移动的这种情况下。

我们就可以了,因为卡住了之后,它是找不到寻路的计算点,它计算不出来,那么我们可以把当前的坐标位置,给它传进去,让它进行一个寻路,这样一周的距离的话,它就一般不会被卡住,但是这种移动的时候。

我们可以把它的x坐标,或者是y坐标加一定的数字就可以了,或者是一个随机的加一个1~10的,这种数字更好一些,最好是一个随机的,这种数字我们就能够有一个防卡的移动,但是移动之后。

我们也要给它一段时间来达到目的地,这个地方,好的,我们再次编译生成,我们看一下还有哪些地方,还有我们的,补记的这里的一个相应的数据,我们可以因为列表里面的数据,它并不是很全面。

那么所以说我们有的时候需要在编辑框里面,输入我们的相应的数据,如果要把编辑框的数据添加到这里面的话,我们就不能够添加的,就不能够是选择的某个数字,这里我们是添加的,先获得的文本的话。

是我们当前选中列表里面的,然后这样去取的数字,那么所以说在这里的话,我们也需要做一下修改,那么我们需要先取得相应的文本,这里是我们的要件,然后,Edit Windows Text,那么首先是一个缓冲区。

我们之前听一会,然后再是缓冲区的大小,Size O,好,那么这样取得的话,就是我们当前在文本框里面的数据,不能是选择的,还是我们输入的,它都可以添加到相应的列表里面去,那么同样的下面仓库相关的代码。

这样修改,这两行先注释掉,那么这里是仓库相关的,那么这里可以用,Size O,那么或者是直接是20,当然编译之后的话,这里它实际是一样的,编译之后,它实际上编译器,它会先计算这里的数字的一个大小。

它会计算出来是20,所以说这里最终会被20这个长量所代替,无论怎么写都可以,当然这种写法的话更便于理解一些,好的,那么这里我们进行了修改之后,再次编译一下,那么另外一个地方我们还需要修改。

也就是这里的这些数据的话,还有编辑框的数据,我们需要把它更新到我们的相应的,挂线率里面的变量里面去,那么我们在应用设置的时候,应该添加到我们的补给选项卡,那么我们需要在补给选项卡里面添加,下载代码。

那么这里我们是把窗口的数据更新到成员,变量,那么也就是更新在后面这几个变量里面去,那么保存到这窗口界面的数据,更新到这几个变量去了之后,最后要把它更新到挂机对象里面去,那么它才有这些相应的一个数字。

好的,那么我们再次保存一下,那么另外一个还有就是一个巡路的,这两个我们也需要进行一下修改,那么因为在这里巡路,那么我们巡路到了这个位置之后,NPC它实际上还没有马上就刷新出来,如果我们直接去执行操作。

那么就有可能失败,那么这里我们需要给它留一段时间,来让它进行一个反应,一秒钟或者是两秒钟,那么还有另外一个地方就是去平时指这个地方,那么这个地方的刷新的速度的话实际上要慢一点,那么这里我们选择2。

6秒的时间给它反应,好的,再保存一下,那么大致的话就是这几个地方我们需要修改,好的,那么我们先来进行一下相关的测试,我们先测试一下测试器的功能,测试器功能中。

首先挂接主线材,然后在这里我们选择药品数量,这里我们数字可以稍微是大一点,然后去药店补充青葱药小,充11个,然后去仓库取青葱药小,青葱药中过去一个,但是不知道有没有,没有的话肯定就取不成功。

然后我们再看一下背包里面有些什么药品,药鲜青葱药,那么这个药鲜青葱药我们把它输入到,保存到仓库里面,那么我们把它存仓库,那么还有一个人参,也存仓库,那么还有一个青葱药中。

我们看一下有没有什么可以卖商店的,卖商店的话,青葱药中,青葱药中卖商店,这个我们输送给商店,好的,应用设置,然后我们看一下调试信息,开始挂机,那么这个时候的话。

它应当是要往的药店方向跑。

这里我们可以看到是去平时指示的地方,那么我们可以在购买物品,这里来添加一些调试信息,看它是否进入到我们的购买物品,相应的函数是否也没有被执行到,然后我们再进入到购买物品的这个地方。

然后我们就在这里选一个购买物品的地址,选一个购买物品的地址,然后选一个购买物品的地址,然后选一个购买物品的地址,选一个购买物品的地址,然后选一个购买物品的地址,选一个购买物品的地址。

然后选一个购买物品的地址,选一个购买物品的地址,选一个购买物品的地址,选一个购买物品的地址,选一个购买物品的地址,然后选一个购买物品的地址,选一个购买物品的地址,选一个购买物品的地址。

选一个购买物品的地址,选一个购买物品的地址,选一个购买物品的地址,选一个购买物品的地址,选一个购买物品的地址,选一个购买物品的地址,选一个购买物品的地址,选一个购买物品的地址,选一个购买物品的地址。

选一个购买物品的地址,选一个购买物品的地址,选一个购买物品的地址,选一个购买物品的地址,选一个购买物品的地址,选一个购买物品的地址,选一个购买物品的地址,选一个购买物品的地址,选一个购买物品的地址。

选一个购买物品的地址,选一个购买物品的地址,选一个购买物品的地址,选一个购买物品的地址,选一个购买物品的地址,选一个购买物品的地址,选一个购买物品的地址,选一个购买物品的地址,选一个购买物品的地址。

选一个购买物品的地址,选一个购买物品的地址,选一个购买物品的地址,选一个购买物品的地址,选一个购买物品的地址,选一个购买物品的地址,选一个购买物品的地址,选一个购买物品的地址,选一个购买物品的地址。

选一个购买物品的地址,选一个购买物品的地址,选一个购买物品的地址,选一个购买物品的地址,选一个购买物品的地址,选一个购买物品的地址,选一个购买物品的地址,选一个购买物品的地址,选一个购买物品的地址。

选一个购买物品的地址,选一个购买物品的地址,选一个购买物品的地址,选一个购买物品的地址,选一个购买物品的地址,选一个购买物品的地址,选一个购买物品的地址,选一个购买物品的地址,选一个购买物品的地址。

因为这个坐标它是在我们的00点去,购买的时候,购买的时候,好的,那么我们再重新来测试一下,那么我们再次来看一下,刚才的一个执行的一个流程,那么我们在调试信息里面的话,刚才没有看到购买物品的动作。

我们再来看一下我们挂机录里面的一个设置,那么在这里,我们再添加一些相应的测试信息,那么首先是一个回程补给的,那么在这里我们进行一下判断,这里的话我们就是不需要补给,返回,这条件不属于。

那么这下面的话就是开始这个补给,那么直到最后的话,肯定就是我们的补给完成,那么再来看一下回程补给相关的,那么这里是取得当前的坐标,那么这个我们可以跟他释放的大一点,这个数字,给他两秒的时间做一个反应。

好的我们再次编译来检测一下我们的错误,首先挂接主线程,显示外挂,我们把当前的坐标过去一下,因为防止定点挂机跑到坐标的命运点去了,然后这里我们勾上料品的数量,这里我们是大一点,然后这里的人生。

我们根本110个,120,那么我们看一下有没有东西可以存倉库,这个要先清充药,那么我们存倉库,那么物品处理,这里我们选一个人生,出售,卖给商店,然后我们看一下存倉库的,当然不知道背包里面有没有。

那么我们运用一下测试,然后开始刷新,看一下这个时候好像又卡住了,那么我们看一下为什么会资金不足,因为当背包里面还有很多钱,是不是买的数量超限,这里的金创药小,我们购买的是负的48。

那么这里传递的数量的话,传递的不对,所以说我们金创药的数量,购买物品的时候,那么所以说没有成功,还有金创药查询的时候,金创药小,他也没有查询到相应的地址,那么我们退回来再看一下,錯誤錄影中。錯誤錄影中。

錯誤錄影中。錯誤錄影中。錯誤錄影中。錯誤錄影中。錯誤錄影中。錯誤錄影中。錯誤錄影中。那麼還有一個是在我們應用設置的時候,它為什麼會有一個負數存在,負的46,那麼我們來看一下。

這個藥品購買的這個列表的一個計算,物品補進,那麼這裡應該是我們物品的數量,好的我們再進行一下測試,錯誤錄影中。那麼這個時候的話,應當是我們的詢錄系統出現了問題,它不走路,錯誤錄影中。錯誤錄影中。

那麼這裡的話,我們當然有一個行卡的一個移動,錯誤錄影中。那麼在這裡的話,我們看一下,它的一個移動,錯誤錄影中。那麼看一下這裡有沒有被執行到,錯誤錄影中。那麼還卡移動之後,我們繼續執行這個循環就可以了。

那麼如果我們在這裡,這個循路的話,大於這個距離的話,我們也是進行一個判斷,這裡我們需要,加上一個Continue,繼續下一次的一個循環,那麼這個循路中的話,我們應當把它移到這裡。

MSFindTheWay,錯誤錄影中。好了,那麼我們再次給您測試一下,我們還有一個地方需要進行一個修改,就是我們回程去這個地方,錯誤錄影中。那麼在這裡的話,之前這裡是保存座標,那麼在後面這段。

我們全部都要進行一個修改,錯誤錄影中。那麼在這裡的話,我們是直接調一個去倉庫,錯誤錄影中。錯誤錄影中。好的,那麼我們再次給您申請一下,錯誤錄影中。這裡最好過去一下,當前的座標,那麼我們看一下背包裏面。

MP要品的數量,那麼我們好在這裡設置一個,回程補給的一個條件,讓它達成,那麼這個時候,它的數量只有24,那麼我們這裡設置為25,那麼補充這個人數11個,然後金窗要小,這裡我們補充兩個,金窗要中。

金窗要大,補充一個,那麼因為這裡的我們改了它的代碼,所以說我們可以直接在這裡修改,這個相應的一個數據,那麼這個金窗要,我們把它存到從倉庫裏面取一個,看能不能夠取出來,那麼金窗要中,存倉庫,金窗要小。

那麼也存倉庫,應用一下設置,開始,那麼我們來看一下它執行的一個情況,先把藥品存放到了我們的倉庫裏面,然後我們看一下背包,這個時候補去了相應的物品,然後的話它就自動開始打怪,那麼自動開始打怪的時候。

就把我們的NPC給選中了,那麼這裡我們暫停一下,然後取消掉,我們之前有一個NPC的過濾,那麼可能還沒有成功,那麼我們再來看一下我們自動打怪,這一部分,那麼在這裡的話,我們之前自動打怪這裡。

應該還有一個要跑到自動選怪裏面去,進行一個處理,自動打怪的這一塊找一下,那麼在這裡的話,我們之前應當有一個NPC的過濾,那麼應該有一個判斷,我忘了是哪一刻,我們先進到選怪裏面去看一下,那麼這裡的話。

我們實際上是已經添加了相應的判斷,那麼之所以會出出來,因為我們在打開商店的時候,它選擇了NPC,那麼還有另外一個關係的話,也就是我們什麼呢,之前的掛機的地點的話,就在NPC的附近。

那麼NPC它沒有取消選中,那麼所以說的話,會有這樣的一個錯誤,那麼如果是我們在關閉NPC的時候,我們取消它的一個選中的話,那麼這個問題就能夠解決,那麼今天我們可以不解決它,那麼基本上大致的問題都完善了。

那麼如果現在是在城外的話,應該就不會有這些問題,如果我們之前的一個掛機的地點,是在城外的話,它也不會去打開這個NPC,那麼比如說是在這個地點,應當就不會存在這種情況,好的,那麼我們來看一下。

還有沒有其他地方我們需要修改,那麼另外這裡有一個座列,就是我們機械寶庫的,我們看一下有沒有進行設計,那麼機械寶庫的也不用設計了,那麼我們需要的設計的,應當是自動解庫的還需要一個,自動解庫。

還需要一個設置,那麼除了這個函數,另外也就是把我們的這些設置,保存到我們的一個配置文件,那麼不然的話,我們每次在使用這個物品的時候,那麼這些相關的,裏面的這些信息的話,我們每次都要來設置的話。

肯定很麻煩,還有也就是我們的這個列表裏面的這些信息,那麼我們也是每次都要來設置的話,也是比較麻煩,當然這裡還有一個地方需要修改,那麼也就是我們在當第二次點下它的時候,如果是選中的話。

我們第二次點下這個位置,應該是未選中,所以說這裡我們也有一些代碼需要修改的,那麼我們先把它修改一下,在它的這個單機操作裏面,那麼我們在前面還要進行一個判斷,就是判斷我們所單機的單元格。

那麼它是不是已經有這個選中的標誌,如果是有的話,我們就把相應的這一行把它設置為空,那麼我們需要先取出它的一個文本,那麼我們先來看一下,這個相應空間取出它的下標,然後再是我們的,它的一個大小。

這裡我們設置為一時就足夠了,那麼在前面我們定義一下,那麼取出來之後,我們在這裡來做一個判斷,那麼由我們勾選的符號來做一個判斷,那麼如果我們已經勾選了,那麼在這裡的話就是等於0,那麼等於0的這種情況。

我們直接就把這個地方的數字,表示是第二次單機這個地方,那麼我們直接把它清空,把相應的單元搞,那麼如果是這種情況的話,我們直接執行了之後就放,當然它沒有參數,那麼另外一種情況的話,就是在後面的這種情況。

那麼我們也可以用一個二次,把後面的整行把它擴起來,當然這種寫法的話,我覺得更加的簡潔一些,那麼只有它等於空的時候,在後面的數據才會被執行,那麼這裡再做一個相應的判斷。

那麼當然這裡我們還需要加上一個條件名單,把這一段的名單,把它加在這裡邊,這樣才更華麗,我們也需要對它的一個座標進行一個判斷,然後再這樣設計,好的我們再來重新編譯一下,那麼首先我們顯示一下。

補習的一個窗口,那麼這樣的話我們就可以了,反覆的就是說也可以取消掉相應的選中的符號,那麼這樣的話會更完善一些,好的那麼這一期,可能我們暫時就寫到這裡,那麼另外還有我們所說的。

就是在我們的NPC的打開了之後,在關閉它的時候來取消它的一個選擇,那麼這個的話,大家可以下去把它完善一下,在關閉NPC的時候,那麼這個我們需要在關閉NPC的。

這個裏邊進行一個設置,取消它的一個選項,好的,好的,那么这个大家自己下去完成一下,那么这期课我们暂时就到。

P104:115-保存挂机设置到配置文件SaveConfigDataToFile - 教到你会 - BV1DS4y1n7qF

大家好,我是郁金香老师,那么这节课呢我们来谈一下涉及自己的配置文件啊,把我们窗口界面的一些数据保存到我们的文件里面呃,当然除了我们自己写的,我们也可以通过调用。

调用我们系统的这个配置文件的相关api函数来实现啊,那么这节课呢我们先讨论自己怎么写这个配置文件,以及自己怎么从配置文件把我们的这个数据解析出来,那么我们先来看一下。

我们把就以这个挂机页面的这些变量数据为例啊,看一下怎么把它的数据来保存到我们的这个配置文件里面,然后我们在下一节课呢在来讨论一下,怎么把我们的配置文件里面的数据啊,更新到我们的窗口上面,好的。

那么我们先打开114克的代码。

当然我们保存自己的这个设置的话,它的方法呢肯定有很多。

那么如果我们呃这个相应的这个数据是一个啊结构啊,或者不是内,那么如果是连续连续的这个内存空间的话,我们甚至可以把它保存到啊二进制的这个配置文件当中啊,也就是相当于把我们这个内存里面的一块这个结构数据啊。

一下子移到文件里面,那么我们下次呃需要这个读取这个配置的时候呢,就直接把文件里面呢再回60,这个数据呢就一直到内存相应的这个结构里面进行一个复制就行了,当然如果我们用文本类型的话。

这样的话它的一个呃操作呢嗯要简单一些,比如说我们要更改一些这个配置文件的数据的话,那这样呢要简单一些,可以自己修改操作哈,那么这个过于过的这个优点啊,那么今天呢我们先来看一下。

怎么把我们的窗口里面的这个这些设置的数据,更新到我们的这个文件里面。

那么我们以挂机的这个页面比例,那么这个页面的话我们就这些啊选项啊,也就是我们的过人类型的啊,是否选中,那么还有呢文本类型啊,那么这些呢都可以说是呃,那么这些呢应该是整形的坐标的一个数值。

但是呢我们都可以把它看成是一个在这里的话,我们就可以把它看成是一个呃文本类型的这样的更新法都是可以的,那么大概就是两种类型,一种是字符串类型,那么另外一种呢我们啊这个布尔类型和这个坐标类型呢。

我们都可以把它看成是整形的那么一控啊,就是这一片12347个八个九个十个。

一共是11个这个数据项啊,那么也就是这11个数据项,那么我们要把它保存到文件里面,那么在这之前呢,我们先把之前的一些无用的数据先把它删除一下,那么回程不记的话。

记录里面有一些数据呢,我们需要删除,请把双手向,因为这个项的话它实际上已经保存在我们的嗯,相应的这个系列表里面去了,还有这个武器的名字呢也在这个图系列表里面去了,那么所以说这几项呢我们需要能把它删掉。

那么删掉之后呢,他也不用再初始化相应,那么在相应的位置的话,我们就把它初始掉,好的,那么接下来呢我们就回到我们的,这个窗口单元在它的这个应用设置里边,那我们呢就把我们的这些窗口。

这些所有的这个配置数据来保存到我们的文件里面啊,这样的话我们就不用了,每次在使用这个外挂的时候,都要来设置一次啊,这样就会很方便一些,那么我们可以跳到他的这个声明这里,为它添加两个函数。

那么一个函数呢我们是用来保存啊,所有页面啊,是配置文件,第二个函数呢,我们来读取这个配置功能信息,和初始化这些,相应的,这个页面,那么这节课呢我们先设计这一个函数,转动初始化单元测。

那么首先的话我们要对这11个啊成员变量呢呃进行处理,那么我们要写入文本文件的话,因为不是我们日进制文件啊,二进制文件的话我们直接写入这个数据就可以了,面上还要方便一点,但是我们后期配置的时候啊。

自己修改的时候很不方便,嗯那么所以说在这里呢我们用文本文件来处理。

那么首先呢我们把这些相应的数据来把它全部都转换成我们的嗯,嗯文本文件啊,也就是字串的类型,然后呢呃把它保存在一个变量里面,最终呢我们把它写入文件就行了,打开来就是这样一个思路。

那么像我们建一个啊csc的类型,用来保存这个配置文件,那么另外呢我们再,建一个临时文件来写啊,延迟变量s t r类型t,那么这个称呼呢我们就对它相应的这个变量呢制出来做一个格式化。

那么我们首先把这个变量啊复制镜头,后边呢是它相应的一个数值,我们给它加进,然后呢后边是它的这个数值,我们把它给式化一下,那么这样呢我们就形成了一段有效的信息。

然后我们再把这一串信息来给它加上一个换行图啊,这样我们配置文件呢会更加清晰一些,那然后我们把它呃进度加大,我们的这个前面的这个字串里面,那么后面的这个操作呢,我们也进行类似的操作,把这一行呢复制一下。

那么复制之后呃,注意这里呢它是我们挂机页面里面的,所以说在这里呢我们还需要加上一个前缀,然后这里的变量的语音有变化,我们再把前面点进行修改,进行替换,好那么后边呢我们也进行类似的操作。

因为都是可以把它当成是一个整形来处理,啊在后面也进行替换,然后再进行复制,那么这里的话要注意哈,这里呢它本身就是一个字串的一个类型,那么在这里的话我们呃直接把它加进去进去就可以了,就这个地方。

那么这里的话我们就不需要进行一个格式化,那么在这里格式化,或者我们直接用百分之s格式化,好的这里呢我们再复制一下,然后呢在后边呢又是九级的整形了,我们复制前面的这个类型,那么这是打怪的半径。

好的最后这几个呢我们再进行相应的修改,好那么我们再次编译生成,那么最后呢我们需要把这段信息来写入到文件里面,那么文件呢这里我们也可以选一个相对路径或者是一个绝对路径。

那么相对路径的话肯定他就是当前的目录的话,应该是游戏的呃,游戏的这个主程序的这个目录,那么如果我们要取这个绝对路径的话,也可以取这个模块,我们dl这个模块的这个路径来保存我们的配置文件。

那么具体选哪一种方式的,这个看自己啊,那么在这里呢我们就去游戏的啊,这个目录的这个相对路径,那么首先呢我们打开文件,嗯。

那么文件名呢我们传进来的这个配置名,那么后边呢是打开的这个模式,那么在在这里呢我们啊协助打开的这个模式,那么我们可以看一下这个函数呢,在我们的dna里面也是有说明的。

当然这个老版的msd呢他没有带这个下划线啊,s那么这里呢他有读写啊,以及我们的追加这一类的属性操作,那么这是文件名可以来带一个路径啊,也可以后边呢也就是我们这个类型操作的一个模式。

支创当然也有宽字符的这个版本。

打步枪啊,那两个版本好的,那么在这里的话,我们接下来呢就把我们的这个数据了啊,进行一个写入,那么写入的时候呢,我们可以用f主题是发型为字串啊,你可以来写入一行,也可以写入整个这个字串。

那么这样的话我们就把我们的这个字串呢,写入到我们相应的这个文件里面去,最后呢我们操作完成之后来用f close关掉我们的这个文件,那么这些函数的话,在之前我们呃更新特征码的时候,已经有使用过,对吧。

在后边呢我们还需要跟一个文件的指针,那么在操作之前的话,这里呢我们还需要有一项操作,就是要把我们嗯这个窗口的这个数据呢要更新到我们的变量里边去,好的,那么在这里呢我们先调用一下这个,我们先来做一下测试。

这测试待遇,这里,那么这里呢我们建议呢用这个人物角色的这个名字来做一个配置,可能比较好一些,也可以自己加自己的这个文件配置里都可以。

好那么我们在这边进行一下测试,测试的离开,好的,那么我们看一下,那么在这里呢我们点一下测试啊,那么测试之后的话,他就应应当是我们这个程序的呃。

相应的这个步骤,这个所在的目录,那么我们来找一下吧,嗯那么这里的话它就把我们相关的数据来写进来,那么我们看一下相关的这个数值,对不对,我们一起来看一下,然后就能,那么关掉之后我们再重新应用一下设置啊。

测试一下,再来看一下我们的相应的这个配置好的,那么这样的话我们就建立了一个相应的一个配置文件啊,相当于那么下一节课呢,我们再来讨论怎么把这个配置文件里面的这些数据呢,嗯在载入的时候呢更新到我们的窗口里。

嗯那么这节课呢我们就到这里。

P105:116-从配置文件读取数据到窗口 - 教到你会 - BV1DS4y1n7qF

大家好,我是郁金香老师嗯,那么这节课我们主要的内容呢,是把我们上一节课保存在配置文件里面的数据呃,那么读取出来更新到我们的窗口里边,那么首先我们打开第115克的代码。

那么我们把代码打开之后呢,首先我们添加相应的说明,然后在这个读取配置文件的后边哈,添加我们的相应的这个类的成员函数,对,那么在读取这个文件的时候呢,我们有很多种这个方法可以用对呃,也可以用这个数据流啊。

文件流的方式来操作,那么另外也可以通过我们嗯同样的是通过fo opens来来打开它,也就是我们上一节课用的方法,但是呢这里呢它打开的方式呢,我们要改变一下,用这个r的这个模式读取,比如我们上一节课。

这里呢我们在写字的时候呢,是用的f改s啊,那么我们是写入这个字符串,但是读取的时候呢,他遇到这个换换行图啊这一类的呢,他就会结束哈,就会终止,所以说呢它读取的时候只能够读取一行,而不能够读取整个文件。

那么这里的话啊,另外一种方式呢是用礼物的方式来操作哈,那么我认为呢这种方式来更加的简单一些,那么读取出来之后呢,我们可以这样的啊经历这样的一个步骤,那么每读取一行呢,我们就把它的数据来进行嗯拆分。

那么拆分成两个数据段啊,一个是我们的字符串变量的名字这一部分,另一个呢是变量的数据这一部分,那么如果它的数据类型不是字串类型的呢,我们就用这个函数来把它转换成薄点类型或者是整数的类型啊。

如果是布置类型的话,我们也可以把它用这个整数的类型呢来表示好的,那么我们就用第二种方式来来打开这个文件,啊,那么再用电力总这种文件流的操作方式呢,我们需要包含一个头文件,啊,那么这个头文件的生命呢。

我们还是把它放在文件的头部,那么放在头部的时候呢,第一个呢我们是要打开的这个文件名,那么我们从这里呢把它传进来,那么第二个是操作方式,那么如果我们是要读取的话,这里呢就是ios软硬啊。

art来表示输出啊,另外呢我们如果我们也可以用它来来写入文件,就是out,那么这个呢我们是用来判断我们文件的这个结束的啊,这个结束的,那么我们在这里呢我们可以通用一个y循环来读取整个文件。

然后呢我们在判断的时候的话,如果呢他读到了这个文件的结束啊,那么我们就退出,那么如果文件结束了,当然了,我们就退出这个循环,那么没有结束之前呢,我们就对它的每一行呢进行操作,那么我们读取一行,就是。

那么我们可以用这个get line来读取,那么用get on读取的时候呢,我们需要一个缓冲区,啊,那么这里呢我们把缓冲区的大小来定义成200啊,那么就差不多应该是够了30,然后呢我们放出去的一个大小。

真的,那么这样的话我们就能够读取一行,那么读取一行之后呢,我们可以打印出相应的调试信息来看一下,好的,那么我们首先编辑最好,那么然后呢我们在测试啊代码里边呢,添加我们的这个读取配置文件的函数。

那么同样的是在这个类里边啊,那么把前面这一行呢我们先注释掉嗯,再次编译。

那么我们查看一下相应的调试信息,那么这个时候呢我们就把嗯这个相应的行呢就读取出来了,但最后这里呢由于文件结束了啊,他多读出来也行,那么我们这里呢我们再添加相应的代码处理,那么这个呢我们把它放在前边。

那么如果我们读到了文件的末尾的话,那么我们就直接就跳出来,那么最后一行呢就不会被打印出来啊,未读取成功的这一行四,那么然后我们把每一行的数据来读取出来之后呢,呃另外写一个函数来来对它进行拆分。

那么拆分成两部分,我们就是再对它进行判断,在对我们相应的变量进行一个赋值,那么这里呢我们可以另外再写一个成员函数对它进行处理,嗯嗯,那么首先呢我们定义两个指针啊。

那么这两个子质量分别指向我们拆分后的这两个字串,那么比如说我们在行测算,那么拆分之后呢,那么就会成这两个字法字串,我们从等号这里来开始拆分啊替换,然后呢我们第一个呢指向变量的名字,进入个指向变量的数据。

嗯,那么我们就把它进行初始化,指向我们传进来的这个字串,那么第二个呢我们指向我们的数据部分,然后呢我们需要来进行替换啊,那么数据部分部分的话,我们需要来查找啊,s t r c h。

那么查找的话我们就查找的是这个等号,三匹马,那么我们在这个等号里边查找这个等号这个字符,那么查找找到之后呢,我们再对它进行一个替换,那么我们把它替换成了一个呃这个字符串的一个结束的一个标志,也就是零。

那么这样经过这样替换之后呢,它就成了两个独立的这个字符串了,一个就会拆分成两个了,因为在这里的话,第一个字符串呢就结束了,那么这里是一个新的开始,那么新的开始的话,但是呢他现在呢是指向这个结束符的啊。

那么也就是相当于是等号这个位置,那么第二个字符串的位置的话,实际上还要在它的基础上加一,也就是要加等号这一个字节才能够指向这个数据集的字符串,那么所以说执行这个操作之后呢。

我们还要塞是p where r代替了,还要4+1啊,啊还要在原有的基础上加一,那么这样呢我们就把它拆分成两个字符串,那么之前的这个size vr类啊,它本来直接指向的是整个字符串。

但是自从这个等号哈会替换成一个结束标志,是后来,那么他之前呢就指向这个呃计算的文件名字,算的名字,那么这里的话是变量的名字呢,我们就可以通过变量的名字来来进行一个区分啊,然后呢进行一个相应的一个赋值。

那么在这里的话我们可以做一个比较,那么以后呢它有11个变量,我们把这11个变量来复制进来,那么第一个变量呢我们对它进行从配置文件里拆分之后呢,对它进行一个复制。

那么首先呢我们在这里呢就要进行一个字串的一个判断,ctrl啊,变量名,然后呢这个变量值呢是我们上边的这个变量里面进行一个比较,那么如果它们相等的话,我们就对它进行一个复制,那么相等的话。

但是我们后边的这个呃数据部分的话,它是一个字串的类型,所以说我们可以图案来进行一个转换,啊这样的话我们就能够对它进行一个相应的复制的一个操作,当然呢它是属于这个挂机的这个单元。

那么这里呢我们还要给它加上一个呃作用域的一个限定啊,这这个对象的一个成员,那么而且执行这个成功之后的话,后边的呢我们就不用去判断了,直接没看点出,那么这一段呢我们把它复制一下。

那么后边的话我们也进行类似的一个操作就可以了,那么我们到这个成员变量的时候,我们也对它的名字来进行一个判断,那么判断之后呢,我们对它的这个数字来进行一个复制啊,这两部分呢我们就都进行一个修改。

那么后边呢也是一样,然后后面的每个数字呢我们都照着这样的模式来进行修改,那么这个呢因为它本身就是一个字串类型啊,那么这里的话还要特殊一些,那么他在赋值的时候的话。

我们就直接用这个相应的那变量进行一个赋值就可以了,那么直接进行这样的一个副词嗯,也是可以的,那么这里呢也需要进行一个比较啊,嗯,啊直接对这个代替部分的进行复制,那么这里的话我们就不需要进行相应的转换。

那么同样的这个物品里啊,p的这个变量啊,物品使用的名字呢,我们也照着这样进行一个修改,那么后边的话这几个呢也是我们进行的啊,或者英特类型的话,那么我们全部用这个f i来进行一个转换。

然后呢我们再进行相应的替换,好那么我们在深成解决方案再看一下,那么这里呢我们还需要在这个图文件里边啊,进行一个说明才可以转到生命,那这个声明里边啊,然后呢添加这个函数的一个说明哦,哦哦。

好再次我们编译生成影响,好的再退回来,那么这里我们这个函数写好之后呢,我们可以来通过这个字字串里面的这个信息,来对相应的这个变量来进行赋值,那么这个函数的话。

我们还需要在这个读取的这个读取配置文件的这个函数里面,来进行一个调用啊,那么也就是在这个地方进行一个调用,啊,对相应的变量图纸,那么复制成功之后的话,我们还要进行一个操作啊,也就是我们的这个关系单位呢。

我们的up dp,那么要把变量的数据来要更新到我们的窗口上面,好的,那么我们再次测试,那么这个时候呢我们可以对这里进行一些改动啊,然后呢在测试,那么我们可以看到呃。

这里的话它这个相应的这些数字的话好像都是还原了,这个是青春要大学名声,那么我们看下这里的数字会不会还原,那么这几个好像还有一些问题,啊这前三个是为领导。

那么我们把这个配置文件打开看一下,那么是不是我们呃有没有读取正确。

那么前三个这里是为零,那么我们可以在这里呢呃对它进行修改,那么比如说只有这个自动使用我们这个模拟的这个数值的呃为零,那么其他的呢我们都选中,那么我们再次读取啊,那么这个时候呢。

他就可以通过这个配置文件呢来控制我们的这个这个边变量,窗口的这个相应的这个数据,那么比如说这里呢我们就可以改,这里呢我们可以轻松要小,这里我们可以改为自己生啊,这个变量的范围我们可以改为330啊。

都都是可以的好的,那么我们再次进行测试,这里的话我们也可以不改啊,那么我们可以更改之,后来所有都选中,那我们再来看一下啊,测试一下,那么所有的都选中了,那么当然那坐标的话肯定也是可以改的。

那么坐标我们改为23 3146。

没有26啊,都可,啊那么这里呢也会做一个相应的这个更改,那么这样的话我们就能够把我们的呃界面的信息呢,呃初始化到我们的这个文件里面,也可以把文件的数据来更新到我们的窗口,那么这里呢就给大家一个做对啊。

这个补给界面的啊,这些呃这些数据的话要相应要复杂一点啊,那么比如说我们这个5g列表啊,它涉及到一个v k的一个操作,那么这个列表的呃这个数据的一个分析的话要复杂一些啊,那么大家可以先去测试一下。

那么这个就是做一个作业啊,大家再去完成,那么今天呢我们就分析到这里,下一节课我们再见。

P106:117-保存补给选项卡数据至文件 - 教到你会 - BV1DS4y1n7qF

大家好,我是郁金香老师,那么我们这节课呢我们是把116课啊,呃补剂选项卡的这个相关的这个数据保存到我们的配置文件里面,那么我们首先来看一下我们的这个武器界面。

打开第116课的代码,那么不去选项卡呢,其他的这些控件的话,它的一个保存方式来与我们上一节课都是一样的哈,像这里哈药店我们选中的某一项药啊,这后边的数值啊都是整数类型的啊,那么我们都可以了。

很方便的保存到我们的配置文件,然后根据变量的名字来呃,到时候在读取的时候,根据变量的名字来来定位啊,读取我们相关的数据嗯,但是呢我们的这个补剂列表的话,这一个控件一个变量它里面呢就包含了多项呃。

多项这个字符串的内容,那么在这一点上呢与我们上一节课有一些不同啊,那么所以说我们这节课的主要的也就是重点,也就是讲一下这个补给界面该怎么保存,保存了之后。

到时候到时候我们在读取配置文件的时候又怎么样来读取啊,那么这个是我们这节课的一个重点,好的那么一共有多少个变量呢,一共大概也就是六个七个八个,一共是九个变量啊,123456789。

那么我们就依次来来对这几个变量来进行操作,那么我们转到绿里面,然后转到我们的这个mtable里面啊,这里有一个save configure dt file,也就是保存我们的配置文件啊。

那么我们在保存的时候呢,在这里前面的这一段呢就是我们上一节课的呃,保存的话也就是我们上一节课,上一节课的话,这里呢也就是我们挂机的这个页面,那么这里我们把它稍微改动一下。

方便我们之后呢呃来就是说来读取我们的一个配置文件,还有一个配置文件的一个可读性啊,因为配置文件的话,我们就是在配置的时候呢,就是为了方便我们留一个接口给用户呢,方便来修改这个配置文件啊。

如果不是考虑到这一点的话,我们可以来把它写成二进制的文件啊,直接把里面的这个空间的这个数据呢啊,用二进制的方式来保存也是可以的啊,但是那样的话我们在修改的时候就没有这样方便。

那么在这里呢我们再给它加上一句,啊那么这里呢我们给他设计一下挂机页面嗯,好那么在后边呢我们就是我们的五器页面设计一下,在这个位置,嗯,那么这里呢我们也可以首先呢写一个5g页面啊。

这样方便我们在读取的时候定位,当然也可以不用到它啊,这个看你怎么设计,那么后面呢就是对我们的这几个呃变量,来进行相应的一个值的一个存储,那么前面这一段的话与我们前面的存取的话都是一样的啊。

那么图层补剂的,那么我们在这里呢也复制一段啊,数据下来,然后来替换它相应的一个变量属性,那么替换变量之后呢,前面的呃这个作用域的限定呢,我们也要给他换一个类名,换成我们界面的这个变量。

那么后边的呢我们依次啊这样操作就可以了,那么这一段代码呢我们就直接把它复制进来,那么最后呢我们主要讲的最后一个啊,补给列表,那么这一段的话啊,都是同样的一个操作,那么我们从这个地方看。

好那么补给页面呢我们首先呢也是应该是第一句的,也应该要更新我们补给页面的这些呃数据到我们的变量里边啊,更新了之后,那么在后边呢我们就把这些相应的变量呢啊,是如果是我们的整数化类型的。

我们全部把它格式化为相应的这个数值,然后呢化成字符串的形式来保存啊,那么如果是我们的啊这个combo嗯这个列表框里面的哈,组合框到这个列表框里面的呢,我们是直接去他选中的这个数据啊进行一个保存。

那么有关的也就是最后一个哈,那么最后一个这个估计列表的话,因为它里面呢可能含了多项这个数字啊,所以说这里呢我们需要用一个循环来解决啊,那么我们主要来看一下他是怎么解决的。

那么这里的话首先呢我们也要给它定位一个开始的一个位置,一个结束的一个位置啊,那么中间呢我们是一个循环,那么循环的次数我们有这个get抗体来获取它究竟有多少个列表象啊,那么我们就循环多少次。

那么在这里呢我们就取它某一个啊从零开始的这个啊,取它相应的这个列表的这个字串啊,字串,那么取出来之后呢,我们把它加到我们的这个字符串里面去啊,然后呢进行一个换行,那么处理完了之后,比如说有三行数据的。

第一行的数据,比如说是一,第二行的数据是二,第三行的这个字串23的话,那么处理完了之后呢,呃整个循环完成之后,那么在这里呢我们给它加上一个啊nest box啊,这个武器列表呃完成。

那么我们这里用一个大括号来表示它完成,那么这里呢我们设计的时候呢是一个啊呃左大括号表示开始,当然你用其他的关键字来表示他开始也是可以的,那么后面是换行,那么到时候我们在读取文件的时候。

那么如果我们读取到这一行,那么我们就可以加一个条件的一个判断啊,那么读到这一行的时候,我们就知道我们是读取的这个补剂列表了,那么到时候我们在读取的时候呢,我们也可以用一个类似的一个循环。

当然我们肯定不能够用波循环了,到时候到时候呢这个呢就是我们循环的一个开始的一个条件,相当于是那么我们结束的一个条件呢啊就是这个条件啊,那么我们就退出我们的结束啊,那么一行一行的,那么读取一行之后呢。

我们再来添加一行数据到我们的这个列表框就行了,用我们的a dt啊啊添加我们相应的一行数据到我们的这个列表框里面,就能够完成我们配置文件的一个读取啊,那么这节课呢我们先进行相应的一个测试。

那么最后呢当然我们也是把这个数据来写到这个配置文件,那么我们先编译生成一项,好保存一下,然后呢我们打开游戏来开始进行测试。

好那么我们注入之后啊,看一下写入配置文件的一个效果,那么首先呢我们转到我们游戏的呃这个目录下边。

那么我们先把这个文件呢可以先把它清空一下啊,等一下等一会看一下写入的一个结果,然后我们在这里呢点名测试嘛,对了在测试之前我们还要看一下我们的代码呃,测试的代码是怎么写的。

那么这里呢我们应当写成save computer代替to file,那么这里呢我们需要关掉重新的编译一下,啊然后呢这里我们都可以做一些修改,呃这里呢当然我们也要做一些修改,当然这个e原神呢是错误的。

到时候我们还要修改一下嗯,这里我们做了一个下线的一个要求,所以说呢那我们就,对了这里这个百分比的话,我们输错了啊,啊这样就可以了,那么我们再来看一下啊写入的配置文件,那么这就是我们所有的配置文件啊。

这就是我们的列表的一个开始,那么到时候我们偏离到这里的时候呢,我们就可以用一个循环来做一个判断啊,如果偏离到这个地方,然后呢依次读取下面的所有行进行一个初始化,然后来读到这个地方的时候呢。

我们呃循环了就结束啊,当然在定位的时候呢,我们要快速的读取一个页面的时候呢,我们也可以写一个快速定位的一个函数啊,那么先搜索这个笔记的页面啊,如果读出来的字出来等于补器页面了,那么再做啊后边的这些啊。

相应的一个呃读取的一个赋值,当然这个需要另外写一个函数啊,当然看自己的一个设计啊,那么我在这里呢只是一个抛砖引玉的一个作用啊,给大家做一个例子,好的,那么今天呢我们就讨论到这里,那么下一节课呢。

我们在讨论怎么把这个界面的所有数据来把它读取出来啊。

P107:118-读取配置文件数据到补给选项卡 - 教到你会 - BV1DS4y1n7qF

大家好,我是郁金香老师,那么这节课呢我们一起来看一下,怎么把我们117克的这个保存在配置文件里面的数据呢,更新到我们的笔记啊页面,那么我们首先打开117克的代码。

那么这节课呢我们就要把我们上一节课保存的配置文件里面的数据,来更新到我们的这个窗口界面,用来初始化我们这些啊硬件的相关数据,那么好的,我们首先看看一下哈,上一节课的配置文件的格式。

那么配置文件的话,我们主要的是有一个这个物品的一个列表啊,武器物品的一个列表,因为它的一个大小的话可能是变化的,那么可能这下边的话比如说呃这里是一元三款,第三次改成这里需要有一些改动。

那么可能我们下面的还有我们的呃,其他的野山参呢,嗯还有这个药先医生这一类的,那么我们也可以自己来编辑啊,这个配置文件,那么注意这个格式要对得上,好的,那么我们保存一下,那么这一节课的话,我们要读取的啊。

也就是这个格式的一个配配置文件,那么所以说我们在设计啊这个读取对函数的时候呢。

我们也要按照这个格式来读取,那么我们呃先移动到我们的内,然后我们的这个table哈对,然后我们移到really company代替for file,那么移动到这这里。

那么之前的代码呢我们要需要来进行一些改动,那么主要是我们一行数据的一个处理啊,这个地方,那么这个时候我们读取的话肯定是读取的第一行式的挂机页面啊,那么按照这一行的一个处理的话。

我们是一行数据的一个处理呢,是在这个cctv 2这个函数里边去处理的,但是按照它的一个处理的话,那么我们就要去找这个等号,那么找不到的话啊,我们也要去对这个等号来进行一个写入的一个操作。

那么我们明显来看的话,那这个挂机页面里面呢,它不包含这个等号这一项,那么肯定呢也就查找不到这个等号的字符,那么最后他返回的话,这个指针呢就是一个空指针,那么我们对一个空指针进行一个写作的话。

这里呢它就会报错啊,会让我们的游戏来退出,那么所以说在这里呢我们要呃做一个判断啊,p我要这个我们找到的如果是一个空的一个指针的话,那么我们就啊就不执行相应的这个操作。

或者说找到的这个指针它不是一个空指针,那么呢我们才进行下边的这个操作啊,才进行这一步的一个操作,好的,那么这是这一点啊,这一点我们必须要进行一个相应的一个操作,那么后面的这个比较的话,他都不会来成功啊。

所以说这一点的我们不用操心啊,其他的,那么在前面的话是我们挂机页面的一个处理,那么后边的话这里呢我们添加一个啊5g页面的一个处理读取,或者是,那么我们看一下统计页面,这里啊。

那么补贴页面的话我们需要先定位到这个位置啊,才是我们的这个补给页面啊,那么前面的这一段的话,我们呢可以按照前面的一个类似的一个操作来完成,都是可以的呃,那么只有我们后边的最后这一项啊。

那么这一项呢我们需要进行一个特殊的一个处理啊,需要进行一个特殊的处理,那么前面的这个拆分的一个方式的话也是一样的,那么这里的应当是一原生,那么我们的初始化这里呢需要进行一些更改,转转转转,好的。

那么我们继续退回来到这个呃table dc p p里面,然后之前到这里呢,我们就把前面的这个格式来复制一下啊,然后呢在这个地方来进行我们的一个数据的一个读取,那么在这里的话我们需要处理的数据的话啊。

有这几项,那么我们把它复制一下,那么这几项数据的话是固定的啊,那么所以说我们就固定处理,那么第一个啊我们也需要来进行一个相应的替换啊,啊这个名字来进行一下替换。

那么这里呢我们控件的名字呢也需要进行一个替换页面,那么这个呢我们是我们的补给页面,好的,那么我们接着来往后边,这个位置,好再把这一项呢复制一下,啊,再复制一下这一项,那么就进行一个相应的替换。

那么这两项的话它的类型不一样,那么我们需要改动一下啊,这里这个地方因为它是字符串类型的,那么前面的我们也需要做一个比较,那么比较成功之后呢,这里的话我们需要来就不需要转换了。

就直接复制为相应的这个数据就行了,这个地方,呃这个地方的话我们应当是直接应当是设置window text,好的,那么我们先编译生成一下,他也没有错误,那么后面呢把这一段哈再复制一下,那么这是仓库的啊。

这个相关的这个默认默认设置,那么我们在这里边也进行一个相应的修改就可以了,那么后面呢这是拆分的这个数据啊,数据段很靠后面的这一部分,比如说这个精装要特哈,那么我们就设置为这个相应的呃这个字串啊。

那么前面的都没有问题,那么最后的也就是我们这一段啊,那么我们需要来进行一个单独的一个处理,但是我们中间这个列表的一个长度的话,它不是固定的啊,所以说我们不能像之前这样固定的进行一个处理。

当然我们开始也是要判断的这个条件,那么我们在这里啊添加一个数字,也需要进行一个判断就行,那么呢也是对我们的这个项进行一个判断,那在这里的话就表示我们的呃列表的电表数据开始,那么既然列表数据开始的话。

那么我们这里边呢我们就要对这个列表来进行一个数据的一个添加,八,但是究竟添加什么数据呢,啊在这里的话我们需要来进行呃循环的一个处理,那么在这里的话我们它的一个结束条件我们先要开出来。

在这里呢我们需要进行一个循环的一个处理,那么循环处理的话,这是一个死循环,我们需要一个条件来退出,那么他退出的条件的话就是呢呃偏离到我们的结束,那么也就是他取的函数呢取到了这个位置。

那么我们就退出这个循环,那么如果这个条件成立的话,那么我们就退出去,那么但是在在这里的话,我们要保证的也要一行一行的读取,一行一行的读取,那么一行一行的读取的话,我们一次来重新打开这个文件啊。

获取文件的留到一个支撑,那么第二个办法呢就是从我们之前的这个函数里面呢,把我们的文件留了呃,文件指针呢把它传进来,在这前面这个位置啊,把我们的fs其实呢把它传进了,那么所以说在这里的话。

我们需要对这个函数的话进行了另外的一个定义,转到声明这里啊,首先呢我们进行一个定义,那么这里的话我们还需要来传一个指针处理进来啊,fs的指针,那么需要这个fs指针的一个声明呢。

我们这里呢也需要包含它的这个图文件,那么包含头文件之后呢,我们还需要一个,啊匿名的空间的一个约定啊,调动的啊,然后呢才能够进行一个相应的一个声明,那么当然也可以在这里呢直接加上一个s的。

有一个前缀也可以,那么就不用一个呃,前面的就不用这个命名空间的一个呃,定义好的,那么我们再转到它的定义这个地方,转到定义这个地方的话,我们也需要在这里给它增加一个相应的参数,好的。

那么我们再编译生成一下,那么这个时候的话我们还需要来传一个文件的尺寸进去,再生成一下,好那么在这个时候我们把文件的指针传送进来了之后呢,我们就可以在这个地方呢可以把它利用起来啊,可以把它利用起来。

那么进来之后呢,我们先取得一行,那么这里呢我们需要的呃它有两种格式,一个是掐的类型呢,呃一个有一个结束服务,一个人没有这个结束的一个标志。

那么我们可以参照之前的这个reader computer dentifier,这里来嗯,读取读取我们的一行,好的,那么在这里的话,我们也要加上一个文件结束的一个判断,实际上文档按ctrl减号啊,再退回。

当然这里是用指针的一个操作,我们需要改一下,那么这个这个还是批判呢,在这里的话它没有定义,我这里有一个呃三个p line,那么我们在这里的话需要另外定义一个函数s t r l,那么在它之前呢。

我们定一个临时变量啊,或者是定一个块变量也可以啊,那么我们就有两嗯200个字节的一个快变量,用来取得一行的这个数据,那么取得这一行之后呢,我们就可以了,在这里呢把它添加到我们的这个列表里边啊。

当然它这一行肯定是存在的啊,所以说我们这里的话也可以不添加一个文件的一个结尾的一个说明啊,因为这这个在我们写的时候肯定存在这一行,那么这个条件呢肯定能够达成嗯。

那么这样的话就能够完整读取我们的这个整个哈这一块列表的,这个数据啊,那么我们编译之后呢,来测试一下,好的,那么我们转到,转到资源窗口测试啊这里,然后呢我们读取我们的这个相应的配置文件,再次生成一下。

那么我们转到我们的这些数据来,相当于都是没有初始化的,我们都可以啊,相当于没有初始化,然后呢我们点一下测试啊,呃那么我们看一下这前面的初始化是正确的,那么到这里的话,这一串数据呢呃应当是出错了啊。

应该是出错了,那么我们这里边的啊,这些相应的数据呢都没有进行更新,那么我们把它关掉之后来检测一下原因,那么我们发现的话,这里的话我们还应该有一个ipage supply。

那么我们要把变量里面的数据要更新到我们的窗口啊,这是第一点,那么我们再再次生成一下,好那么我们不去问啊,再测试一下,那么这些呢我们都成功了,但是取得这个列表的信息呢,这里没有成功,那么我们再来看一下呃。

我们的是什么地方失误了,那么也可能我们这个循环呢它没有没有达成,就是我们设置数据在里,那我们再来看一下文件指针的一个操作,那么在这里的话看样子的话应当是我们的这个哦,这里是写入的3s p2 哈。

我们当时s t r啊啊啊这个变量传入的不对啊,说明所以说这个地方呢它取取得的这个字串的数字的话肯定就不对了,好的,那么我们再来看一下,嗯那么这个时候好像是出错了吧,一直在循环,应当是一个死循环。

在这个地方,那么他这个条件的最终的这个这里我们的判断的条件呢出错了,领导是这个地方条件的一个判断出错了,那么在这里的话我们应该用s t r lt来进行一个判断,因为我们之前的在这个参数的话。

它会一直是这个变量啊,不会改动啊,因为在这里呢我们也没有改动它,那么所以说在这里的话比较的时候,我们一行一行的数据读读出来了啊,是用这个s t r lm来做一个结束的一个条件的一个判断。

那么如如果用这个材质p5 r类人类的话,那么所以说他这个结束的条件呢一直不会达成,那么这里的话就会造成一个呃这个死循环啊,所以说最终出错了,好的,那么我们再次改动之后呢。

嗯再再次打开游戏来看一下。

好的,那么我们再次输入,那么这个一旦设计的不对的话,可能就容易出错啊,要注意检查自己的代码了,那么这个时候呢也有一个错误,那么这一行的话他把这个多余的数据呢也添加进去了,其他都没有错,呃。

那么我们还需要对我们的代码来进行一下啊更改,那么这个条件的话,我们应当放在它的前面啊,那么应该放在这个位置,那么一旦呢呃是这个列表结束的时候呢,他就退出了,就不会添加我们这一行啊,好的,好的。

那么在这个时候的话,我们的这个所有数据都是正确的啊,那么当然这些数据的话,我们也会来呃把它抱保存到我们的这个配置列表里面啊,做了这个相应的这个改动,那么现在我们就这两个函数写好之后呢。

我们就需要来把它添加在我们的这个初始化的呃,相应的位置就行,那么这个应用设置这里呢我们就是什么呢,是宅舞啊,最后的时候呢我们就是保存我们的这个配置啊,调用我们的save config。

那dt fidentifile啊,这里呢我们csp config,那么我们看一下最新的啊,这个地方的一个红的一个定义,啊那么我们把这一段做成一个红的一个定义,把它移到前面。

那么我们进行一个红来代替我们的这个字串,这样的话我们只需要改一个地方就可以了,好的,那么我们就到他的程度,那么这里呢我们也可以把它改一下,好的测试成功了之后呢,我们把这两个函数来看剪切一下呃。

应用设置的时候呢,我们需要保存一下这个相应的位置,移到最后,好读取的这个呢我们需要呢呃呃这个时候应该是保存,那么读取的时候呢应当是我们这个外挂窗口加载的时候呢,我们就读取读取的时候的话。

那么读取呢我们可以把它添加到这个类的初始化函数的这里哈,那么最后这个测试的后边呢,那么我们就添加这个读取的这个函数啊,好的那么我们再次重新生成一下,当然我们也可以在在这里边呢添加我们的这个显示外挂。

这里呢我们可以再添加两个按钮按钮,一个是保存设置呃,一个是我们载入这个设置都是可以的啊,再入一个默认的一个设置,一个是保存我们的这个页面的一个配置啊,可以添加这两个案例,当然应用这个设置的话。

就相当于把我们的这个呃配置文件能保存到,就是把我们这个窗口界面的这个信息保存到我们的文件里边了啊,另外呢还有一个呢就应当是载入我们的一个呃默认的一个设置啊。

那么这里的话我们可以写写成哈载入默认的一个配置,在于设置,咳咳咳,差,嘟嘟嘟好,那我们再检测一下相应的,当然这个时候的话我们只有两个页面,一个是我们的挂机页面,可以在日,那么另外一个呢是界面,好的。

那么其他的话其他的代码呢大家自己下去完成一下,那么其他的还有一个这个物品的一个页面啊,当然这里的呃主要的复杂一点的,也就是我们的这个物品处理的这个列表啊,它的一个呃设置的话要相应的要复杂一点。

可以单独的另外建一个配置文件来进行一个数据的一个载入啊,它也是一行一行的数据,碰到几个像啊,这个时候呢我们再入的时候呢,需要把它拆分一下,也需要。

那当然也可以我们每一个单元的这个数字来给它单独的设置成一行,这样的载入也可以了,好的,那么这一节课我们暂时呢就就讲到这里,那么我们下节课再见,那我们还需要重新把它编译一下。

啊这个时候的话坐标这些就会在如上一次的这个坐标的一个数字,当然后边这里的话它也会自动载入这些配置的这个数据了,这个列表呢它也会自动的进行一个初始化,那么这里呢我们也可以保存它的一个设置。

那么我们也可以取消之后呢,再次再用这个设置,但是我们发现多次在用这个设置的时候呢,有一定有一些地方呢它就出错了啊,这个列表里边的主要是这个列表呢它没有清空啊,那么这一点我们需要注意啊。

那么每多再读一次来这里面的数字呢它就会增加,那么我们还有一个缺点的话,应该是要在呃这个读取数值的时候呢。

需要进行相应的一个清空的一个操作好的,那么我们,再次转到我们的这个city config,对t0 ,你到这个循环列表,那么在这个位置的话,我们还需要来进行一个操作,也就是要清空的一个操作,这个控件。

那么载入配置文件的话,这里呢我们要肯定,哈哈,那么这里呢我们reset一下相应的一个数据,好的,那么我们再次编译生成,好这次我们载入一下相应的设置,那么这个时候的话它就不会出现这个相应的这个错误了。

应用设置啊,这个时候呢再再做也是可以的好的,那么这节课呢我们就交流到这里。

P108:119-物品处理列表保存 - 教到你会 - BV1DS4y1n7qF

大家好,我是郁金香老师,那么这节课呢,我们一起来把我们这个物品列表的信息保存到我们的配置文件里面,那么首先呢我们打开118克的代码,那么首先我们来看一下我们的表格啊,物品处理的列表。

那么这些的话我们都有一个相应的初始化啊,那在这个物品物品列表里面的话,在这些呢我们每次都需要去添加啊,啊,嗯,那么对于这些物品的一个处理的话,我们呢最好是把它保存到我们的配置文件里边啊。

那么在载入的时候呢,我们就自动的在载入啊,那么所以说在设计的时候呢,我们可以这样设计啊,那么首先呢我们是物品的名字,然后是一个风格服,中间呢我们这里呢就是如果这里勾选的,那么我们这里呢就写入一啊。

未勾选的,那么我们就写出相应的数据零,那么要读取的时候呢,我们就根据前面的啊这个开始与结束啊,这个由我们上一节课,上一节课的这个补剂的列表框里边的设计了类似啊,在读取的时候,那么我们在写入的时候呢。

首先我们就对这个表格进行操作的时候呢,前面我们加入这样一个字串,表示它的开始,那么结束的时候呢,我们加上一个呃尾部来加上一个右括号表示它的结束,那么在读取的时候的话,我们可以找到第一个分隔符呢。

在把它替换成一个结束的一个呃符号,那么如果这里的话是用多个字符表示的,那么我们就把后面的这里呢全部替换成啊我们字串结束的标志,那么这样呢我们就可以把这三个字出来,把它分离出来,然后一项一项的啊进行设计。

那么好的,我们先来设计一下啊,按照这种格式来把我们的这个表格的数据来啊,写入到我们的配置文件里边去,然后呢save configure,dt to fire这里,然后我们移到最后。

那么这里呢我们是古迹列表的一个处理,那么我们移到这个地方来处理我们的物品列表,那么这个物品列表的话,在这里呢我们把这一段代码呃复制进去,按照这个格式格式来存放到我们的配置文件里面,好的。

那么首先呢我们呃到这个位置的话,首先呢我们写入这样一个字串,这是tier complego啊,我们把它进行一个累加,然后呢进行一个换行,这样呢我们表示了这个循环的一个开始,那么然后呢我们写一个循环。

对我们的这个表格啊,也就是我们的这个列表list count来进行操作,但是这个历史ctrl的话,它数据也是比较长,我们需要通过排挤啊,是blg,然后呢再是我们的。

ph lagoon my manager里边才是我们的这个list country,那么所以说这样很长的一段的话,我们用来操作它的这个成员的话,就不是很好操作。

那么在这里呢我们因为这个控件的话是viscontrol控件,那么我们可以的用list count的空间的一个指针来指向它,然后取它的一个地址,那么这个时候的话。

我们就可以用这个尺寸来来操作这一长串的一个变量啊,相当于是那么首先呢我们也是对他整个列表来进行偏离啊,哎多少行啊,这是行号用来表示,那么从零开始当然小于它的这个所有的函数啊,项目数。

com那么这就是它最终这个表格的函数,然后呢y加加,然后在这里呢我们首先呢取出一行的内容,那么取出一行的内容的话,我们首先呢是取出物品,然后呢再说我们啊是否存仓库啊这一类的。

那么因为后面的呢我们都是a组的存仓库,还有去药店是否拾取都是挨着的,所以说这里呢我们可以另外的取出物品名字,后来后边这三项呢我们可以用另外一个循环来表示,哈哈哈哈,那么这个x的话。

因为我们之前取了一个物品,那么这里呢它的下标是从零开始,x小于0=3啊,后面一共有三项是1~3x加加,那么首先呢我们从这里呢先取出它的物品名,保存在这个s t r temple里边。

那么首先这里是它的y坐标,第一个指向呢是零啊,这个指向指向我们的列数啊,实际上是表格的,那么这个get item text它一共有两种形式,我们选的是这个cs的这种形式,它只带两个参数。

最后呢返回的是cs的这个类型,好的这样我们就取出了物品名,那么这个物品名取出来之后呢,我们再给它加上一个嗯中调服务,哒哒哒哒,好,那么我们首先编译生成一下,那么这里呢我们把它定义成int边图形,好的。

那么接下来呢我们是要去除它相应的项啊,那么在取出之前呢,我们这里这里的做一个判断,只要把它取出来的这个项,那么首先呢这里我们也是p miss啊,get,泰克斯顿,那么首先呢我们是他的行号。

然后是它的指向x,那么取出来之后呢,我们是一个cs寸的一个类型啊,那么这个类型呢我们首先来判断它是否为空相应的这个项,那么如果是为空的话,就证明它相应的这个表格里面是空的,没有数据。

那么另外一种不为空的情况下呢,我们就是勾选的啊,呃为空的话,这里呢就是未勾选,也就是没有打这个勾,没有歌的话,那么另外一种情况的话,肯定它不为空,那么就是勾选的,就只有这两种情况,那么如果是勾选的话。

我们再在这个s t r temple后面再加上一个我们的领,再加上一个分隔符,那么另外一种情况呢,我们写一在这里,那么勾选择呢,我们就选g,当然还有一种设计方法,这里我们用一个空格啊,这里我们直接勾选。

这样也可以,那么这样的话到时候我们就直接往里面写就可以了啊,嗯但是呢我还是觉得这种零和一的这种方式的好一点,因为这个这个勾选的话,它的这个宽度的话呃,是占一个汉字的一个宽度啊,这种表示的不是很好表示。

那么我们和零或一呢是x码的话,是占一个字符的一个宽度啊,好那么这样勾选了之后的话,呃,异能的循环完成之后呢,我们在这个位置呢再给它加上一个换行的一个标志,好这样呢我们就对一行处理完了啊。

那么处理完一行数据之后呢,我们把这个数据把它加到我们的t r config里面,那么直到了我们前面的这个整个外层的这个循环来完成,那么这这一层的话相当于是我们的对行的一个操作。

那么这里呢我们这个for语句呢是对我们所有列的一个啊,这个是所有的一个操作,那么这个是对一行的所有列啊进行操作啊,或者是对一行的所有指向来进行一个操作,那么这个这个这里呢是对所有行进行操作好的。

那么这样的话我们就可以完成我们数据的一个保存了,那么我们来看一下测试一下。

那么在这里呢我们添加111221键,强化石,啊,添加它相应的一个处理,当然在添加的时候,实际上我们还有一些代码呢需要完善,那么就是说在添加的时候,如果他要建立整个列表,如果有同名的话呃。

它要进行一个提示,或者是添加不了的情况,或者是定位到香味的哈,相应的行,因为我们像这种情况的话,应当是不允许出现的,当然这里呢我们在这个留到后边啊,再完善,好再添加一个铁剑啊,这个呢我们什么都不处理。

然后呢我们应用设置,然后我们跑到游戏的目录看一下。

我们也没有正确的写入,当然我们还少了一个部分啊,如果是这样写入的话,我们就没有办法判断它的一个结束了,因为我们还要再在后边写出一个结束的一个标志啊,这样才可以好的,我们把这个数据给删掉。

删掉之后呢,我们再把代码来做一下修改。

那么完成之后呢,我们在这里呢还要加上你好,表示我们的所有的这个操作和这个列表的操作完成,那么在下一节课的时候呢,我们在读取我们这个数据的时候呢,我们才有一个结束的一个条件,好的我们再次做测试。

啊因为在这个时候的话,我们这些数据呢都没有了哈,呃因为刚才被我们删掉了,那么这里呢我们添加两个数据,下载到我们前进,然后在路径,那青铜特色,强化死亡,嗯然后再是金创药,好的。

那么我们就对这几个物品来进行操作,那么这个铁剑我这个部件呢我们都卖给我们的商店,那么青铜副手的话呃,我们也卖给商店啊,强化死了我们村仓库,那这个不进行操作,好的,那么我们应用设置,好的。

那么这个时候的话,所有的写入都是成功的,那么这里是开始,那么现这里也有结束的一个标志,那么下一节课呢我们就通过这个标志来来,循环的出去这个一行一行的读取,然后读取一行之后呢,我们再来这个分解相应的数据。

然后呢再对我们的这个list看出来进行复制,那么读到这个位置的时候呢,我们就跳出循环好,然后就返回就可以了好的。

那么这节课呢我们就到这里啊。

P109:120-物品过滤列表信息读取 - 教到你会 - BV1DS4y1n7qF

大家好,我是郁金香老师,那么上一节课呢,我们把我们录屏处理列表的信息保存到了我们的这个配置文件里面啊,那么这节课呢我们从配置文件里面再来读取,好的,那么我们先打开119克的代码。

那么首先呢我们转到内里面。

呃转到我们的city啊,we are config代替,这里边呢是我们对每一行读取出来的数据的来进行相应的处理,那么我们移到最后,那么实际上它的这个操作的话呃。

与我们之前的这个列表里面的数据呢有一些类似的地方,那么所以说我们可以来把之前的这一段列表啊,这段代码呢,复制过来。

那这个return的话应该要取消掉,好的,那么我们把前面的这个数据来啊复制一下,那么在这里呢我们按照我们这个格式来来进行一些改动。

那么首先呢我们也是要对它的开始来进行一个判断,那么如果他读取的这个这一行的这个名字哈,嗯如果是等于我们的这个字串,那么说明呢我们定位到了我们的这个物品处理列表这里,那么它的这个结束的条件的话。

也是我们后边的这个结束条件啊,这一点上边呢它是相同的,好那么这两点相同的,还有数据的读取是相同的,那么不同的地方呢就是这一段这一段呢我们是对每一行的一个处理,哈哈哈哈哈。

大会还有这里呢它数据列表的一个清空的话,这里不一样,因为对空降的一个操作呢不一样,那么在这里呢我们先来定位到我们的这个控件,先用一个指针指向我们的这个控件,哈哈,那么指向控件之后呢。

这里呢我们首先呢对控件呢进行一个在载入我们数据的时候呢,我们对控件呢进行一个清空的一个操作,啊,那么这样呢我们算出所有的项啊,清空这个表格,那么清空了之后呢,我们呃再从文件里面啊读取一行啊。

从这个地方呢我们另外读取一行,那么读取一行之后呢,我们要判断它是否呢呃偏离到结束这个地方了,如果是结束的话,我们要退出这个循环,不然这个是死循环要出错,那么如果是读到了我们这个表格的结尾这一行的话。

那么我们对这个相应的数据呢进行一个拆分的一个处理,那么在这里呢我们定义两个指针变量,二变量,哈哈哈哈,那么这个指针呢我们就指向之前的这个s t r man啊,指向它的这个缓冲区进行操作。

然后呢我们再把我们的物品名单独立出来,那么这个我们用s t啊,c h啊,然后来搜索这个相应的这个字串,那么s t r嗯,然后呢我们搜索的第一个字串呢就是我们的分隔符,那么搜索到之后呢。

我们把在这个分隔符呢另外定一个尺寸啊,来指向它,看错了,那么这个分隔符我们指向它之后呢,我们对它进行一个操作p,那么这里呢我们对它的下标题,这个字符呢,这里呢我们写出一个数字,数字零。

或者是写入一个我们的字串,因为这两个他表示的数据呢实际上是一样的,都表示字串的结束,啊就是说这个字串就在这个地方,在第一个我们这个分隔符这里就结束了,那么从这里结束的话。

那么前面的这个字串的话就会变成铁剑啊,也就是物品名这个s t呃,这个p line这里的话就指向了我们的这个物品名了,那么指向物品名的话,这个时候呢我们就把它设置为我们的第一个项目啊,在这里。

那么插入我们的第一个项目,它也有几种格式在这里,那么我们只需要了啊一个字串和一个下标的一个格式,那么这个下标呢我们可以呃每次来都插入第一行也是可以的,那么后边这里呢也就是我们的新浪或者是sr呢。

那么这样的话实际上因为它之前那里加了这个铁剑,在后边的话它加了一个结束符,那么这个字串的话实际上就只有前面这里读到这里就结束了,但是这个指针的话,我们啊pi这个指针的话,我们来加1+1之后的话。

他就跳过了这个分隔符,这个结数字算,那么就会指向零这个标志,也就是他的第一个,那么之后呢我们只要再加二的话,那么他又会指向下一个一,再加热呢,它会指向这个位置啊,指向这个零这个位置。

因为我们指向这个零的话,加一是这个分隔符加热了,就是后面的数据项,同样的在这个位置的时候,我们再给它加上一些呢,也是这个风格符,加二的话是后面的这个理,那么所以说我们可以通过不断的加二元。

就把后边的这几个项的数据呢就全部取出来了,那么在后边的话一共有三项,那么我们也可以用一个for循环来进行处理噗,那么这个for循环呢我们用x坐标来表示,它代表的是我们这一行的这个指向就是列。

小于等于三啊,这这是加强,那么因为前面的话,实际上呢呃第一项呢它已经有处理了,我们只需要对1~3项的数据来进行一个处理,弄完处理之后呢,在这里的话嗯,在这里处理完之后啊,它赋值为零之后呢。

也就是他在他原原来的字数上基础上呢,跳过两个字节,我们看一下啊,应当是加一就可以了,不足为敌呃,加一就应当是指向第一个零了,因为他之前指向这个风格,加一就是指向第一个零啊,所以说这个时候加一指向第一个。

好像数数我们把它叫做第一项数据,那么指向这里之后呢,然后呢我们在这里进行一个循环的一个操作,那么首先我们对这个pi呢进行判断,那么如果等于一,它的这个字符如果等于一的话。

那么我们就对相应的项呢呃进行一个就是说数据来进行一个设置,px country and sett,那么它的像的话应该就是你们我们之前的话,因为之前的这里用的是零,然后后面的这个项的话就是它的x坐标啊。

就表示因为这个地方为一了,那么操作完了之后呢,我们下呃移到下一个项,那么如果我们现在是在这个位置的移到下一个项的话,我们就需要了加上两个字符,加上这个风格,还有呢要加二两才能够指向这个位置。

所以说在这里我们处理完之后呢,我们就是p a p加不值为二哈,指向下一个就去下,那么这样的自然而然的就进行下一次循环,然后循环完之后就行了,当然这里的话我们最好呢是把它添加在纬度啊,这是最好的。

那么要添加到尾部的话,这里呢我们最好再设立一个y坐标啊,也是也就是来表示某一行啊,那么在这个y日循环之外呢,我们对这个y坐标来进行赋值,y赋值为零啊,从第零行开始。

那么在这里的话我们呢也就是呃第一个呢是插入的这个项目,插入的位置的话就在第零行,那么这样每一行我们处理完了之后啊,一行处理完,这是融资一行,这一行就是那么一行处理数据处理完之后呢。

我们就把y的坐标呢要加一啊,要指向下一行,y加上,那么这样的话啊,你们就可以了,我们再来看一下吧,然后这个地方是艺术,这个地方是y,我们可以注意一下ney,好的我们编译生成一下。

那么我们先先来看一下哈上一节课的这个游戏里面的这个配置文件。

我们看能不能够把它正确地读取出来。

那么这是上一节课我们写的这个配置文件在这里边。

那么我们读取一下啊,运气看能不会不会把它读取出来,那物品处理,那么这个时候的话我们发现的话啊,这个相应的数据的话,它没有被读取出来,那么其他的这个补齐项的话啊,都是读取正确的,那么我们再来看一下啊。

这是一个条件的起始的一个条件。

我们再来看一下之前的一个代码,那么这里我们完成了之后啊,这里我们清空了整个表格,那么我们看添加的位置是不对的,那么我们在这里呢加上一段调试信息,看一下他有没有执行到这一段,好,好的再编译生成一下。

哦对了,这里是错的哈,刚才编译没有生成,应该是p i t0 啊,就等于这个字符一的时候,我们进行这样的一个操作,最后呢这里我们还需要有一个数据的一个项目啊,在这里我们也是没有进行一个相应的设置。

那么在这里的话我们需要的就是这个勾选的打上一个go,在这个地方好的,我们再次生成一下,那么这里呢是字符类型的,好那么我们再重新注意一下。

但是这个时候的话读取的数据也不对啊,只有强化是一个是被选中的,那么我们看一下相应的配置文件,铁剑哈,还有就是青铜破手啊,这一类的呃,都是选中,那么也就是说物品名是对的,但是我们选中的这个对象的还不对。

就强化是一个行,再次载入一下设置也是不对的,我们再来看一下我们的代码,那么我们再来看一下我们执行的流程,那么首先呢在这里呢我们呃,指向我们的一行数据,然后呢我们搜索我们的这个分隔符,那么搜索之后呢。

我们把它拆分这个数据啊,分成一个数据名呃,一个物品名以及后面的这个项,然后呢我们再加一指向第一个数据下,也就是零或者是一,那么指向这个数据项之后呢,我们就进入循环,然后进进行一个判断。

那么判断之后如果这里是唯一的话,那么我们进行设置,然后呢指向下一项,但是如果是为零的话,那么我们这里呢你就继续进行下一次循环,那当时为零的时候呢,这这个我们就没有指向下一个数据项。

那么因为这个下下一个数据线的话,我们应该放在这个判断的外边,那么呃因为放在里边的话,如果在这里字符它等于零的话,它就不会指向下一项,那么一直都是判断的第一项,那么就造成了我们这里的呃。

它不能够设置相应的这个数据啊,不能勾选好的,那么既既然知道了这个逻辑的错误,那我们修改一下啊,重新编译一下,那么这个时候我们再来看一下他选择的这个配置文件是否正确,那么这个时候勾选的项的话要多一些。

那么首先呢嗯111啊,前面三个都是妖,第四个强化石,这里是腰精创要小,这里都没有勾选好的,我们把它修改一下啊,然后呢金创药小蓝我们也是存到仓库啊,利用一下设置,我们看一下。

好的这个时候来保存也是成功的啊,这里选了两项啊,最后这两个都是第一项,然后呢我们再重新,嗯重新再运行一下,看一下可不可以把我们的这个默默认的这个数据来进行嗯载入。

那么这个时候我们再比较一下,啊铁剑木剑青铜肤色啊,强化石轻松要小那么好的,那么这样所有的物品的话,我们都添加到这里面去了,那么还有其他的,比如说我们的飞龙枪嗯,还有其他的我们看一下啊。

嗯比如说我们的太极战,那这这些如果是捡到的话。

我们就存仓库,再次应一下设置,再次查看一下我们的信息,那么查看之后呢,在这里呢我们呃应用设置之后呢,我们在这里呢可以呢进行一些修改啊,这里删除的这个语句呢,我们还没有,那么然后呢我们再次载入设置。

我们可以看到它就能够恢复我们相应的这个设置,那么同样的这些数据的话,如果我们是有更改错的话,那么我们再再次在设置的时候呢,它会进行相应的初始化,好的,那么这节课呢我们就讲到这里。

那么我们下一节课呢,那么就是关于配置文件的这个这个相关的内容的话,我们就讲到这里了。

P11:022-封装动作数组功能 - 教到你会 - BV1DS4y1n7qF

好好大家好。

我是郁金香老师,qq 15033057,欢迎大家参加郁金香技术编程培训,那么今天这节课呢,我们继续对下一节课的动作对象呢的一些属性啊进行一下分析,然后我们对这个动作的啊对象以及这个使用对象啊。

使用多个对象的功能函数来进行一个封装,那么我们打开我们的路径,把我们的呃动作对象数组组织进去。

快点,那么这是我们的十个对象,这是它的地址,那么我们转到他相应的地址去看一下,用dc来显示。

那么我们发现呢这个位置大概是c这个位置是它的一个名字,这样,最后呢我们这个是11啊,最大的这个是实验室民币啊,详细查看我们一共是12个,详细查看,那么也就是说他的这个偏移。

名字的偏移与我们背包的这个偏移化是一样的,都是在舞台这个位置,但另外还有呢我发现了0c这个位置呢是我们另外一个啊,这个数组的下标还在。

因为它还有一个比较大的一个对象数组,那么通过这个的话来访问的话,他也是这个地方,但是这个对象的话相当的大啊,他有好几千里面有几千个对象啊,是一个总的一个对象数组。

那么这个呢也是在前几集跟我们分析的时候就发现了这个问题,我们在分析周围的呃,玩家周围的怪物背包的对象的时候呢,我们就发现了啊,这个机子31c e7 是你这个它是一个组合对象,而每个对象里边呢。

得加8+12这个位置呢恰好就是保存的这个一个大的一个数组,里面的一个下标,包括我们所找到的这个,他的加c啊,这个偏移也就是他呃大的一个数组里面的一个下调大对象,数组那一个对象流里面的话。

所有的对象基本上都包含在里边,那么加八这个呢它如果我们是玩家的话,这里是三一,如果是怪物的话,这里是二一啊,这是一个总的一个分类编号,如果我们将4c这个位置上一节课,我们分析了加4c这个位置的话。

它是用来我们一个小的一个分类动作的一个分类编号,前面是一个大的一个分类编号,但是目前为止在前面这两个偏移的对于我们来说的话,嗯暂时还没有任何意义,没有用,那么暂时没有用的话。

我们就不把这两个属性呢加进去。

那么这是对我们有用的属性的,就是一个是动作的分类id,一个是动作的名字,好的,那么我们先封装这个对象结构。

打开我们20号的代码。

那么我们的og可以退出了这个少。

我要你快乐,我爱你,那么打开之后呢,我们先转到我们的机子搬运啊,添加我们的列表的一个机子,那么它的一个机制的话也就是啊这个a98 把它复制一下,或者把这个公式复制一下,11112,咳咳。

那么还有一个呢是我们扩啊,它相应的一个扩的一个机子也没把它写在,那么另外还有一个机子呢,也就是这个扩的呃,ecx这里,那么这个ec x呢它是先通过这前面这个机子,然后呢读出来之后加上2t c啊。

最后呢得到这个e c x里面,那么我们也可以把它写成一个公式,在这里按照这后面的一个写法,那么首先呢我们通过,通过这一串公式,那么我们读出就相当于这条汇编汇编指令啊。

就相当于这条汇编指令得到e x等于零,然后这个数字读出来之后呢,我们再加上后面的27c啊,然后这里这个括号再把它读出来,其实里面的数值,那么这一个公式就代表的是这两条汇编指令啊。

相当于所以说在这里呢我们可以直接把这个公式的不知道,好的机子的话就是这几个,那么机子定义好了之后呢,我们接下来呢写他的一个相关的一个数据结构,工作对象的一个结构,咳咳咳咳,那么多动向啊。

这个动作对象结构的第一个就是它的名字叫西,那么第二个也就是达到我们用的到这里的,然后我们建议动作注意下数,那么他一共有12个成员,接下来呢我们对这个数组呢进行一个初始化。

最后他的一个反问词呢就是一个指针,那么先编辑一下,在这里我们把这个相应的偏移啊,不是把它前面来,然后注释掉啊,进行相应的初始化,那么初始化的时候呢,我们先把这先前面一个阶层计算出来啊。

涉及到我们指针读数据的一个操作呢,那么先做一个异常的处理,那么这里呢我们也可先提前跟他初始化一下,那么第一个对象的地址呢,我们就是先把这个数字取出来,那么这个数字呢我们定义成了红。

那么80啊xx然后呢取出来之后,我们再加上一个410,这就是我们第一个对象的地址,存放的地方,也就是相当于指针,那么它取出来之后呢,然后呢再用一个for循环骗你,那么第一个也就是我们的文字,那。

么名字的话就等于我们这个对象的一个地址,那么我们先取出对象地址,那么对象地址的话就等于这个公式,那么公式后面还有四神谕,还有一个下标,加上我们的四乘以的下标,那么这里面的数字呢,我们要把它取出来。

才是对象的地址,这样的话我们把对象地址取出来了,那么对象地址呢这里呢加上一个它的一个偏移,c这个地方是名字,然后把这个公式复制一下,那么后面呢是它的一个分类,加4c这个地方这里的类型要变一下提货。

并且要把它读出来,因为它不是指针的,好,那么再编译一下,那么说实话好了之后呢,我们也向前面的这个结构这样定义,我们再定一个啊测试的打印,我们相关的信息,这个前缀呢可以加也可以不加,可以省略掉,哈哈哈哈。

那么我们把前面的这一段复制一下,啊,那么我们要打印的呢,首先是名字,名字后面呢是我们的下标,那么下标后面呢是我们的ip,就反映这三个数字,那么第一个来名字,听历史,下标啊停滞,然后呢是我们的下标i。

最后一个是听音,我们的it就是这这些,温度的id再编一下,那么好的这样我们定义好了之后呢,我们就可以来定义一个对象出来,然后转到我们的这个动态链接库单元,进行一个相关的一个测试。

那么测试我们在这个位置把这前面的这两句注释掉,嘟嘟嘟嘟嘟,咳咳咳咳,啊这样打印我们的调试信息就可以了,好的,那么我们再进一下,来了,那么等会呢我们要因为这里我看了多个游戏窗口。

可不能是输入这个游戏窗口,那么这个叫龙城龙吟,那么我们在这里改一下前面的代码,再给他加一个标题,天天叫天天咕咕,好那么我们输入一下,那么输入进去之后,我们打开我们相应的调试信息,查分的查看的工具。

首先挂在主线程测试,那么我们看一下,一共是11个i j,它是文物失去智能显示的话是从8001~8008这些,或者就是把腰给你要拿这个这几个分类啊,又有一些不同啊,你空了是11个,第一个是凹轴啊。

东西捡东西逃脱好,那么这些信息我们呃测试好了之后呢,我们就可以对动作使用的这个函数来进行封装的,也就是上一节课我们写的这个空,我们可以对它进行一下封装,那么这个扩展首先它有一个压战。

也就是压战的这个参数呢,我们已经取出来在4c这个位置,那么还有一个就是这个e4 x我们也取出来了啊,那么这个时候我们要写的话就很好奇,我们再添加一个乘以函数,哒哒哒哒,那么我们先封装一个函数啊。

通过下标来使用啊,嗯然后呢我们到后面添加五个代理,哈哈哈,哈哈哈,同样的这里呢我们也要对这个指针进行操作,因为要用到这个公式啊,如果我们的数据,那么所以说呢我们先加上一个异常的结构图啊,不是不合比例。

刚看见你,二五那,么还有一个参数,那么这个参数我们需要先把它取出来,然后在前面呢我们编一个第三个问题,1954,那么这个参数来就指向我们前面的那一个红,莫克斯就指向这个红,那么我们先在这里这个红。

注意不能够直接写到这里来用,能够直接写到这里来用,因为这边的话它不支持这样的语句,那么我们先把它读出来之后呢,我们再把这个变量的数据传到e4 x啊,然后呢再进行一个压战,这是e4 x的,指对了。

还有一个要压战的一个数字啊,也就是我们要复习的这个参数,那么要写的这个参数呢,我们也很方便去n g推拉机,不是我们的next time,那这里不是有一个谈了一个下标进来的数组的下标分金。

然后呢取他的这个ip就行了,就是实在这个位置,这样我们就取出来,那么我们再把这个数字进行压正,进入看最好的,我们是这样解以后e x e t标记,然后破形e x。

那么这样的话理论上呢我们就能够使用相应啊下标的这个动作了,那么我们来进行一下相应的测试,新编辑,那么编译成功了之后呢,我们切换到我们的测试单元,那么这一行呢我们就可以去死掉了,在这个是不是。

下不为那日的话就是攻击是攻击嗯,但是这里呢我们测试它打住啊,打住的话下标是唯一,但是实际上是二好了,那么我们输入我们的代码,然后来化解主线程,把游戏窗口弹出来,我们测试,这时候点了没有效果啊。

你先看一下调试信息的内,呃说明我们这个代码呢没有更新的调,他谈的还是这个调试信息,嗯应该是这个单元我们需要重新编译一下,好再注入一下我们的代码,跨界主线材料,测试啊。

这个时候呢我们的动作呢这样就成功了就成功了,然后调用这个呢它实际上就是执行的这个动作,那么如果我们要攻击的话,可以来宣选中一个怪,然后呢我们把这个代码再改一下,改成二级卡,嗯嗯,好那我们再输入下来。

首先灌进我们的主线程,然后移到游戏里面,看到这个怪物攻击他,这个时候呢他就开始攻击我们的怪物了好了,那么这节课呢我们就讲到这里,那么这里呢给大家留了一份作业啊,那么策略呢。

要求呢就是把这个函数来进行重建啊,重新的进行一个封装,那么他奉上的要求呢就是要通过我们的动作的名字啊,来使用它,这里呢路由器呢就要求是抢新的类型,30,嗯重重力要求封装成这种形式也可以使用。

这个是一个作业,希望大家能够自己动手完成,当然前面也有一些类似的一个例子。

比如说在前面哈背包的,背包这里使用背包物品,这里我们就封装了两个函数,一个是通过下标来来完成的,另外一个呢就是通过我们的名字来完成的。

P110:121-无限视野+人物怪物隐身分析 - 教到你会 - BV1DS4y1n7qF

大家好,我是郁金香老师,那么这节课呢我们一起来分析一下啊,这个无限视野以及这个人物怪物的呃隐身的一个分析,那么首先我们打开游戏,那么我们在分析之前呢,我们先要理一下思路啊,那么无限的视野的话。

我们一般来说周围的这个怪物对象,它存在的时候呢,呃他都会去判断啊怪物与我们这个玩家角色之间的一个距离,那么如果这个距距离它超出了它一个设定的一个数值的话,那么这个怪物呢它就不会显示。

那么只有这个怪物与我们人物的距离呢,它在规定的范围之内呢,它才会显示,那么我们只需要把这个距离的一个判断给他找出来之后,对它进行修改的话,那么我们把它修改到啊,我们就可能够实现一个事业了,更加的广阔啊。

也就是所谓的无限的一个视野,那么如果我们把这个距离的判断数值跟它改小,那么我们就能够达到呃呃这个人物怪物的一个人隐藏的一个功能,那么肯定呢它会与我们怪物对象的本身的一个坐标呢,它会把它计算出来呃。

计算出一个怪物到我们人物角色之间的一个距离,它可能是存在的,如果不存在的话,它也有类似啊计算的一个函数啊,那么我们可以从这个坐标或者是他计算出来的怪物,与我们玩家角色之间的一个距离啊,他肯定有一个判断。

那么我们只要把这个关键的这个语序给它找出来,那么我们就能够对它进行一个修改,那么首先呢我们上次因为之前的话,我们怪物于我们人物之间的距离呢,都是我们自己编写函数呢呃来实现的。

那么今天呢我们来找一下关注他有没有一个距离的一个属性,那么要找的话,我们可以来先选中一个怪物,那么一四比八这个地方的话是我们嗯选中怪物的i d,那么这个时候的话我们有选中任何的这个怪物的话。

它就是f f选中对象啊,这个地方,那么这个时候我们在在我们的视野范围之内的话,没有这个怪物对象,那么我们直到往前移动哈,距离比较近的时候呢,它才会有一个,才会有怪物对象的一个显示。

那么我们选中了这个野猪,那么我们看一下它的一个i d是一二bf,也就是在我们所有对象数组里面的一个嗯下标,那么我们取得他的对象的话,我们就可以了,通过这个所有对象的一个机制。

加上这个幺二pf下角乘以它的所谓的一个宽度,那么取得挂一个对象,那么取得这个怪物对象之后呢,我们把它相应的数值呢啊复制出来,那么作为我们要搜索的一个起始的一个地址。

那么然后呢后边呢我们在它的基础上呢呃加上2000哈或者是3000,那么这样的话呃一个怪物对象的一个大小的话,它最多也就是3000字节左右啊,所以说在这里的话,我们选择啊把这里来改为三。

那么这就是它的一个范围,那么它的这个范围的话,我们这里选择类型的时候呢,一般会是佛点类型,我们的距离的话一般会是火点,那么我们尝试搜一下火点类型,然后呢这个时候的话我们的对象的距离的话。

实际上它也是在变动的,那么当时呢我们远离这个目标的时候呢,这个数字呢它应当是变大啊,那么我们搜一下嗯变动的数值,或者是最好是搜一下增加的数值,然后我们再一次呢离它比较近的啊。

那么这个时候的话我们再搜一下嗯减少的数值,那么最有可能怀疑的话可能就是这个啊这个数字,那么我们再离他近一些嗯,那么我们来看一下吧,幺九那么离他远的时候,2746啊,离得近的时候呢。

三幺远离他的时候387395,那么这边的话这个就应该是它的一个距离,那么我们来访问一下这个地址,那么主要我们看他周围有没有这个比较的这个指令啊,有比较的这个指令的话,可能就是与我们的这个怪物呃。

就是以这个具体相关的一个判断,那么可能就是我们要找的这个数值,那么以后呢它有两个地方对它不断的进行访问,那么这两个地方的话都比较可疑啊,也就是我们的一个突破口,那么这是第二个地方。

那么从这里呢我们来看一下啊,这里呢我们是从s t t0 里边的取数据,然后写入到31c啊,偏移,那么这里是写入数据的话,它的可能性呢要少要小一点啊,那么记得是,那么也可能是从之前的代码呢。

他之前有一个代码,那么计算出来结果啊放到了我们的st t0 这个浮点寄存器里边啊,然后呢向里边写入,那么后边的话呃可能这个库里面呢有相应的这个判断,那么这里的话他直接呢也就是载入我们的这个嗯。

相当于是我们怪物对象的一个属性的,这个就是我们的怪物对象与角色的距离,那么这里的话直接就是载入一个距离,与我们的这个这个地址来进行比较,那么极有可能这个地址呢就是我们需要修改了这个数据。

那么我们用o d来附加进去看一下啊,这样我们可以看得更加的直观一些,好让他跑起来,那么在这里边呢我们也可以跟他下段。

也可以直接地转到这个相应的地址,那么这里呢我们直接转到呃,因为这里呢它有一个要compare的指令呢,比较的指令它的可能性要大一点,而且这里这里的话是读取我们的数据啊,录取到我们的sd那边去。

那么我们看一下这个这个机子的话,极有可能就是我们要找的这个机子,那么我们看一下它里面的一个数数值,但是我们发现这个地方的话它是一个零。

它也就是判断这个距离呢是否为零啊,嗯然后呢再进行一个测试,这里是一个文明的一个测试啊,接z啊,那么最后呃那么可能是另外一个,我们再从另外一个地方来看一下。

那么博士的话可能就在它的一个附近,那么这里呢他是从前面啊,可能是这个库里边啊,把我们的数值计算出来之后嗯,然后呢这个2884啊,这里它应当是这个相应的一个距离。

你看一下应当是这个库里边它把它计算出来了啊,计算出来之后我们进去看一下,可能这里呢是计算我们相应数值的,这就很棒了,那我就讲,那么这个时候呢他把我们的可能这个就是我们怪物的一个距离。

它通过这个过来来计算,就像我们之前写的这个扩一样,那么计算出来之后呢,保存到这个变量里面啊,然后呢又把他压到我们的这个站里边,121,最后呢写入到我们的这个怪物对象里面,把我们的这个距离。

那么写入之后呢,它这里又有一个ftp啊,又把它保存到我们288这个变量里边去了,嗯保存之后,那么我们进去看一下,那么这里有一个空啊,后边呢这里呢也有一个比较的一个指令,那么我们看一下它里面是怎么操作的。

然后呢我们再按f8 ,那么f8 之后我们看到这里有个250出来了哈,也是一个法点数,那么它与我们的这个e b p减288比较啊,那么这个e b p,减2888,那么刚才我们看到的。

那么这个的话实际上就是我们的一个呃64位精度的一个距离啊,怪不到我们的距离,也就是这个1s加31c,只是我们的e s i加31c,这个地方呢它是半进度的啊,是float啊,也是一个具体121。

那么这两个进行一个比较,那么这个250的话可能呢就是我们的这个范围距离,但是这个250的话突然之间就冒出来了啊,但是我们要注意到这里执行了一个空,那么可能关键关键就在这个库里面,那么我们进去看一下。

按下回车键,那么我们发现的话,最后呢他在这个s t t0 的数据呢来源于我们的f l d这两个地方,这里有一个接一,那不是这个数字呢,就是这个数字啊,这两个数值这里好的,那么我们把断点去掉啊。

然后再进去看一下,那么这里有两个数字,那么我们看一下嗯,第二个数字,首先,那么这里的话他用的关键字然是低位,那么这里他是破解类型的,那么这里的话数字呢比较大啊,是10万啊,大家看。

那么我们再来看一下前面这一个,那,么说明250的话不是从这个地方来的,那么这个4370a,嗯会不会就是之前的这个一个区域的这个判断啊,这里那么我们来看一下它的佛顶。

那么这个呢就是我们的250,那么我们把这两个机子呢,这个也是我们的呃,可是怪物的一个诗句,那么我们可能通过修改它的话,就能够实现我们的呃一个无限的一个四驱,或者是隐藏我们的这个怪物,好的。

那么这个呢我们表明一啊,这个呢比较大,我们也可以尝试修改它,那么这个呢我们表明二,标记为二,这里我们类型来选浮点类型,好的再移到游戏里边,我们看一下啊,好那么这个时候呢我们是能够看到远处怪物的。

那么我们修改一下这个数字,那这样的话叫远处的,的怪物栏就消失掉了,如果我们把它修改更小一些了,那么所有的怪物栏都消失掉了,那么我们也可以把这个数值来改变,改的比较大,那么这个很远的怪物呢。

它都显示出来了,这这上边的怪物,那么如果改成日本名的话,那么肯定远处的怪物了,就没有了,就消失掉了,那么也可以改为r2 啊,166,那么再改小一点的话,那么周围的怪物呢也会消失。

那么在这个时候的话就只有一两个怪物了,那么我们这是我们找到的第一个啊,看来也是有用的,那么第二个的话,这个呢我们把它改小一点,看有什么反应,那这个的话目前的话好像看不出来多大的效果。

那么重要的呢可能就是第一个啊这个视觉啊,第二个呢暂时呢呃看不出来这个所谓的一个效果,那么可能这个呢是对于其他的呃,其他某个对象的一个判断,暂时我们不知道,好的,那么这节课的分析呢我们就到这里了。

通过修改他的话,我们就能够隐藏我们的这个怪物,那么我们把它标记一下怪物的一个具体可隐藏怪物,那么按减号退回来,那么这个地方呢才是关键的地方,关键,好的这一段特征码呢我们把它复制下来。

那么这节课我们就到这里,那么关键字呢从这个地方进去啊,这里是关键。

好的。

P111:122-穿墙功能相关数据分析-寻路路径与坐标数组 - 教到你会 - BV1DS4y1n7qF

大家好,我是玉京先生老师,那么这节课我们一起来分析一下走路的坐标数,那么也就是为我们的穿墙功能来做一个准备,那么穿墙之所以它不能够穿越障碍物,肯定是游戏当中它有相应的代码在判断,指定的坐标点有没有障碍。

那么如果有障碍的话,它就会绕过,那么我们要分析穿墙的话,实际上最终的目的就是要找到障碍的判断的代码,那么我们可以先分析一些走路巡路的相关的数据,然后收集数据我们收集齐了之后,我们再来分析巡路和走路。

那么如果它是有障碍的话,指定的点,如果它是不能够到达指定的地点的话,它也有可能巡路的数据它就不能够生成,好的,那么我们先来看一下,那么在游戏当中,如果我们到达指定的一个点。

我们可以看到它有很多小的一个点,它表示先到这个点,然后到下一个点,那么这就是所谓的一个巡路,巡路它就会形成很多坐标的一个数据,那么首先我们把坐标数据来把它分析出来,那么在之前的话。

我们已经分析出来的有当前的坐标地址,目的地的坐标地址这几个,那么我们目的地的坐标地址的话,它肯定也就是从我们的不断的从我们的坐标数据里面把它取出来,然后写到我们的目的地地址里面去。

所以说我们只要对目的地坐标的地址这两个来,加一个我们的写入的访问,写入的代码,那么我们可能就能够找到它的一个附近,那么我们来看一下,首先,那么我们可以看到这里应该是一个目的地的一个坐标。

这是我们的当前坐标,1650,这是当前坐标,168C,那么这个时候我们可以看到的话,目的地坐标是这个,但是这两个坐标的话实际上在不断的变化,这两个地址为什么是一样的,这里看一下,这里应该是1650。

那么这是当前坐标不断在变化,这是我们的目的地坐标,那么实际上目的地坐标的话,它也是在变化的,我们可以看到在走路的过程当中,那么最终到达的目的地的话,它实际上不是1147,那么它一旦没有直线的话。

有这个转角的时候,它就会,它就会变化,1283,这一个,这个时候变成12,然后是12,如果在这里有一个转角的时候,它又会再一次的变化,这个时候变成了415,那么所以说如果是直线的话,它不会存在坐标。

它会执着的走,那么我们现在要找的也就是先把坐标数给它找出来,那么我们可以在这个地方,下一个改写的,找出改写指针指向地址的代码,那么我们看一下这段代码,它是从这里出站的,这是它的EDI。

那么下面这里有个ESI14C0,这里也有一个载入的,它是把这个数据载入之后弹出到我们的EDI里面,那么我们看一下EDI的数字等于多少,2以1,那么我们看一下,这个时候的话,我们这里的人物的属性的话。

也是2以1,那么我们用计算器计算一下,把EDI的数字复制出来,对了,我们的50A的话,我们看一下,这就是我们的目的地的坐标,这里可以看到,它弹到站里面,那么还有后面的代码也是4以A,这里,好的。

那么我们把这两个代码把它复制出来,当然这里还有一个,这里的话它是整串的这样复制,那么这几个地址都是向我们的目的地,地址进行坐标的一个写入,那么我们把这几段代码先复制出来。

那么关键是我们要找它的一个数据的来源,坐标数据的一个来源,看它是从什么地方来的,那么这里它是来源于EPP+150,应该是154,那么这之前的这里它肯定是来源于我们的ESI,这里一个EDI,ESI。

那么我们还是这个时候,我们把调试器的卸载掉,然后我们通过OD进去看一下。

那么首先我们转到第一个地址,这里去看一下,那么这里的话我们可以看到它一次的话,1834,一次的话就是接近80个字节,80多个字节应该是的一个复制,那么从这里的话,它把我们的坐标来复制过去了。

那么这里的话它有一个坐标源,来源于这个地方,那么我们看看一下,寻路走路的时候是不是这样,走路的时候不会断下,寻路的时候这个时候才会断下,那么我们看一下ESI的一个数据。

那么我们看一下ESI里面存放的究竟是什么,那么ESI这里的话,我们发现了只有一个坐标,而不是我们所要找的数字,应当,那么我们再去第二个地方看一下,第二个地方是在这个地址,那么我们要找的是一个坐标集。

那么从这里弹出我们的数据,那么我们走路的时候看一下,寻路的时候看一下,那么这个时候我们看一下,它是弹到我们的ETI的话,是我们现在的目标的一个地址,它的一个来源的话是来源于我们的。

EBP+154这个地方,那么EBP+154是从这里,应该是从这里取得的数字,可能是从call里面取得的,那么我们在这里来下一个段看一下,EBP-154,那么这里的话我们能够看到一些,只能看到两个坐标集。

这个时候两个坐标点,那么我们重新再次让它断一下,那么这个时候我们看一下,这个时候EBP+154里面本来就是有坐标的,那么我们通过这个框的时候,看一下坐标它变不变化,但是我们通过这个框之后。

我们发现坐标它已经变化,说明我们的目的地坐标的话是从,这个函数里面获得的,那么可能函数里面的话,它会对我们的列表来进行一个骗离的,一个操作,那么我们跟进去看一下,它什么时候对它进行写入的。

那么我们再次让它跑起来,那么下次的时候,我们下一个访问段点,寻入,然后我们对这里的下一个内存写入的断点,然后按F8,看它在什么地方断下来,但是这个时候的话它没有断下,按F8的话,那么我们再次让它跑起来。

那么可能这个时候我们下内存断点的话,可能没有用,那么我们下一个应该能见到一个访问断点,下次那么我们再次让它跑起来,寻入,然后我们这里的HW写入的时候,我们下一个断,然后按F8,那么这个时候断下了。

那么我们可以看到它的数据的话,ECX写像EDI,那么ECX它来源于我们的EX,而EX的话来源于我们的1。64,那么我们看一下ESI+1。64是什么,也就是它一个坐标的来源,ESI+1。64。

那么这里面的话可能就是我们所要的坐标,数据,一个坐标,这里边,这里我们把它显示成佛典数来看一下,那么一个坐标,这里也是一个坐标,两个坐标,这些我们看全部都是坐标,这一片有很多的坐标相关的数据。

那么这里的话应当我们就可以把它看成是一个坐标级,我们的坐标数据路径,好的,那么我们来看一下EDI是一个什么数字,ESI,那么ESI的话,我们从对象属性这里看到是3。1,那么这里的话。

18就应该是我们对象的名字,我们来看一下,那么发现我们就是这个地址的话,就是我们的角色的,玩家角色的地址,ESI,那么我们来核对一下。

那么也就是说这个地方的164就是我们的坐标级的。

这个数字的指针,那么然后我们再进去就能够看到我们的坐标的,数字,那么的确进去就是这样的,那么这就是我们的玩家角色机制,那么也就是说我们已经找到我们的坐标。

数据的一个起始地址,这个是啥,也就是这个1。64,然后注意这里的话。

它只是一个指针,要进去之后才是,那么我们再往下面看一下,刚才这里进行写入的,然后不断的写入,那么后边的这里也有一个1。64,那么还有一个,这里还另外出现了一个偏移是1。68,ESIDX。

那么这两个它又进到了这个库里面去,IDDX-EC,那么这里有点看不太懂,看一下161。68,这里有一个-EC,那么我们再往下边执行一下,那么我们看一下这个1。68,这里又是一个什么。

那么我们看它的地址的话,基本上是差不多的,68一个是84,差距很小,那么这里也是68,然后我们再往下面执行,我们进行,它们相差的偏移只有4,那么我们进这个地方来去看一下,那么我们发现了这里来。

它也是一个坐标的一个坐标集,这两个都是坐标集,但是在这里有一些乱码的一些出现,那么我们继续往下看一下,这里的话,它就把我们的地址的话就取出来,相当于写到我们的,14BC这个地方,那么写完之后。

它调用了一个库,让EX看一下EX是多少,加上EC,那么这也是我们的,16,1。64加上EC,扑西这个地方的话,实际上的话也就是我们的1。64,在它的基础上来加了64,那么我们再往下执行一步,那么看一下。

那么这里也是一个坐标进行压占,它可能是我们的目的地的一个坐标,我们看一下,1974,那么这里是一个坐标,这里也是一个坐标,那么EC的话,可能是它里边的我们的1。64,它可能里边存放的是一个结构。

而结构的大小来看就是EC这么多个字体,那么我们来看一下,那么这里边它可能是一个结构的一个地址,那么这个结构,首先我们从这里来看,那么这里的话,它前面的存放的是一个坐标,那么前面的话。

它实际上所占的字节就是EC,那么第6个坐标又从EC开始,那么下一个坐标的话又到这里开始,那么也就是说它连续的取了两个坐标,这样取,那么我们也把它记录一下,这里的坐标结构大小是EC。

是这样的,一个是X坐标,Z坐标,然后是Y坐标,后面是跟了4个0,所以说一共是坐标大小是0XEC,它里面是这样的一个结构。

然后在这里的话,它让我们的EDI+161/68这里减掉了EC,这又是什么意思,我们来看一下,也就是说它让首先是指向的这个地方,然后它把这个地方我们前面加了EC,它后面就减掉EC。

那么这里的话从这里来看的话,它可能是这里是宿主的结构的起始地址,那么因为这里它已经访问了EC一个数据,那么这里它使它这个数据减掉EC,相当于是我们弹出了一个结构,那么我们仔细下去看一下。

那么这个地方这个时候改变了,那么这个时候我们结构的指针的首地址与尾地址,两个都相同了,那么证明我们整个路径列表循环完成了,应该是我们的巡路已经完成,表示的话,巡路的结束地址应该是1/68,这里的话。

这里是路径结束地址,路径结束地址,因为在这个宿主的话,它是在我们的人物角色对象里面的,那么所以说它用了一个指针来做一个宿主的,一个起始和一个结束,那么6、8这里是目的地坐标,宿主指针也是指针结束地址。

那么这里是它的开始的位置,开始的一个地址,但是有一点奇怪的是像这种的话,可能它是把下面的数据要往上边移动,那么不然的话,它整个宿主它访问不完,应该是我们正常的思路的话,应该是这前面的数据来再变。

应该是我们正常的访问的宿主的话,比如说这里是结束条件的话,它应该是前面的指针不断的加碎,这样的话才能够访问完我们的整个宿主,但是它这里是减,减的话我们可能我们猜想的话。

那么可能是它会把宿主的数据往前移动,有可能,那么我们再次把断点删掉,然后按减号退回来,好的,那么我们把这个地方记住。

再次下一个,断点。

那么我们看一下等会它这个数据的一个变化,好的,先退出,好的,那么我们再次询问让它断下来,断下来之后我们再看一下,那么最终的话,它是写到我们的目的地地址,写到EDI这几个位置,谈账。

那么它的数据来源的话就是这个地址,那么它从这个地址进去之后,我们再来看一下,那么从这里,1。64这里,它获取我们的目的地地址的一个首地址,然后这里是地址的开始,这里是地址的一个结束。

那么我们再次进去看一下,那么进去看了之后,我们看一下它结束的一个地址,结束地址是1。68这个地方,那么70,那么这个是它最后一个地址,但是它第一次访问了之后,它就把这个地址来减掉了。

那么也就是访问不到了,访问不到的话,这与我们的正常的思路的话,有一些不相同,那么我们来看一下这段地址,继续往下执行,那么主要是这里它加了EC,然后这里它减掉了EC,那么继续往下执行,这里有一些奇怪。

我们再来看一下,1。68,那么还是指向这里,它没有减掉,1。68加上EC,那么我们再来看一下,1。68,它不断的往这个地方再取坐标,对了,它是从这个地方再不断的减掉它的数据,那么我们进去再看一下。

那么我们发现这里的话减掉之后,它往前移了,那么它后面的这些数据的话,好像也是有相应的变动的,那么我们再重新再执行一次,这是结束的地址,那么另外一个是起始的地址,这是起始地址,那么这是结束的地址,1。

68,但是结束的这份地址的话,现在已经为0了,这里我们减掉EC,看一下,减掉EC的话,就是在这个位置,那么我们看执行这个扩大的时候,这里的数据它发生了一些变化,好像是它把这个数据来移到前面这一块来了。

好,那么我们再次来看一下,再减一个EC看一下,那么我们注意这段数据,F6,8F6,我们看到它是不断的把这段数据再往前面移掉,从这个位置往前移掉了EC扩展一个作用,它是前移的一个作用。

那么所以说后面减掉EC,它就没有,对它之前的数据没有相应的影响,然后这里它会减掉,减掉EC,那么在前面,这里的数据是1。64,那么也就是说1。64,它后边的数据的话会不断的也会,那么下一次巡逻的时候。

它会把这个数据了,前移到这个地方来,那么所有的后边的数据了,依次它会前移一位,好像是这样来访问的,那么我们再次看一下,那么这里是A8F,那么A8F的话就移到了前面,那么这样它来保证。

遍历到了我们整个路径数据,这样来保证,那么也就是说退回来,我们返回到上一层,3B,EDI,看一下,这里要在哪三个程序,那么我们按ControlF9,回到上一层,那么上一层的话也就是这个地方。

再次再来看一下,好像我们这个地址出错了,应该是这里,那么这里的话,它每次来EBP+14,这里每次来取出,从我们的路径数据里面,取得下一个转角地址,转角目标地址,那么从它的变化来看的话。

好像是取得转角的目标地址,如果没有转角的话,好像它目的地坐标它不会变,那么也就是说走直线的话,这里它可能最多取一次,按照这种推想的话,那么我们这里再来看一下,那么如果是走直线,那么走直线的话。

这里它不会断下,根本就,那么只有在这里边访问的时候,它才会断下,产生路径,好的,那么这几个我们先分析到这里,那么我们再往下边看一下,这里ESP EDI,那么这个EDI的数字的话。

恰好也就是我们的目的地坐标,那么我们再来看一下,EDI,14PC目的地坐标地址。

14PC目的地坐标的一个地址。

那么在下面还有一片好像是一个结构,也是,对联的一个结构应该是对向一边,那么这几个我们就先分析到这里,那么这里我们还是把它标注一下,14PC,那么这里应该是X坐标,然后后面依次是我们的Y坐标,Z坐标。

那么这里是我们的Y坐标,14C0,BC+4就是14C0,那么这里是14C4,好的,那么下一节课我们再继续从这里来开始分析,那么下一节课我们要分析的,这个任务就是我们看一下,它坐标序列也就是我们的目的地。

坐标的序列它究竟是怎么产生的。

那么在它的附近,我们可能就能够分析到所谓的,团墙相关的一些数据,那么这里边的相关的数据,我们也把它进行一下复制,这个坐标结构大小,好的。

那么我们下一节课。

P112:123-穿墙功能相关数据分析-坐标数组来源与去向 - 教到你会 - BV1DS4y1n7qF

大家好,我是郁金香老师,那么这节课呢我们继续来分析这个穿墙的相关数据,那么我们这节课呢主要从这个坐标数组的呃来源去啊,来源或这个去向呢去分析,也就是说访问了这个坐标数组的这个大的代码来分析嗯。

那么首先我们打开我们的c,打开c一之后呢,我们呃访问一下我们的1964的啊,这个也就是我们的这个坐标数组,那么数组里面的第一个呃坐标,那么我们对它进行一个反问,因为这个障碍判断的这个代码的话。

它可能就在他的一个周围,在它的一个附近啊,他会用到我们的这个嗯坐标的这个数组,那么有两种情况,那么一种情况呢它就是先判断这条直线啊上有没有,那应当是这种情况哈,他先产生一个直线的一个坐标序列。

然后呢他再去判断这个直线的坐标序列里边嗯,这个相应的坐标点有没有这个障碍物存在啊,那么应该是先产生这个想先向这个呃我们的这个数组列表里边呢,呃写入我们的这个坐标序列啊,直线的,然后呢再去通过判断。

如果是有障碍的话,他再通过一些算法来绕过这个障碍啊,可能是这种情况,那么无论是哪种情况,肯定都要对我们的这个坐标序列呢呃进行一个访问啊,也就是我们的1。64这个地方,那么注意啊。

这是我们的呃坐标序列里面量啊,第一个数组,那么第二个数字的话应当是那加上ec啊,这个地方我们上一节课判断的,那么ec那么这里呢我们应当是1334的这样一个结构,好的,那么我们从这里来啊。

访问一下这个地址,找出访问了这个指针指向地址的代码,那么然后呢我们啊走几步,好那么我们走到有这个有障碍的时候,我们看一下他走的这个路径的话,好像是不一样的,有障碍和我们的障碍。

那么我们看一下没有障碍的时候啊,我们再重新来一遍,那么没有障碍的时候啊,这是,那么没有障碍的情况,他会访问这几个数字,那么如果是有障碍了啊,那么我们后边呢这里增加了几行啊,那么增加了几行。

那么也就是说这后面的这几行的话,可能与我们这个障碍啊,判断他的关系呢可能要大一些,那么我们先把这个这几个地方呢先把它记录下来,那么这是正常的情况下产生的这个直线的路径啊,那么他可能也会判断在这里啊。

那么最有可能的实际上是在这个地方判断卡,那么在之前的话,这里像是像是写入的吧,我们都都进行分析一下,那么可能性最大的话应该是这个地方啊,那么在后面的话应该是他可能是判断了啊,有这个障碍了。

然后呢这里是在计算我们的这个要绕过呃,这个障碍的一些相关的一些代码可能什么,那么也就是说第二个访问的它的可能性的话,最大在它的周围,那么这些呢都是相关的代码啊,那么其中呢可能这个代码啊可能性要大一些。

那么因为呢我们就是说这里呢它是一个呃访问的代码,那么这里可能是一个生成的代码,向那里写入啊,先写入,然后再访问,而且就是说无论有没有障碍,他都会去判断啊,这是正常的啊,判断呢它有无障碍。

那么可能在他的一个上层的一个库啊,对这个进行一个访问。

反正就在它的一个周围可能性比较大,那么我们再用t来分析一下。

但是这种分分析的话比较耗时间哈,那么可能是运气好的话,可能几天一两周可能都分析不出来,那么运气不好的话呃运气好的话可能也有一两天的时间啊,因为它周围涉及的数据比较多啊。

要跟着这个地方,那么我们看一下啊,首先呢我们还是转到这个地方,看他究竟是写入还是访问。

那么如果是访问的话,我们就从这里开始看啊,这里呢我们按一下f2 ,然后随便点个地方,那我们看一下目的地坐标是340,那么我们看一下e s f e d i呢是340,340。

表示了从ei这个地方写入我们的这个坐标,那么是写入的呢,我们先把它越过啊,怎么说呢,他应当是通过我们的观察的话,它应当是呢要先生成这个路径啊。

直线的可能是直线的,然后呢再去判断,那么我们在这里的话嗯。

他可能对我们障碍的一个判断的话,可能性要大一些,我们从可能性大的进行一个分析,那么就从这个地方,那么而且我们发现了这里也是一个循环,那么它可能是循环来判断这个获取这个整个序列,这样判断。

那么而且这里是一个两层的一个循环,我们可以看到好的,那么我们再次啊访问一个地方,然后呢我们跟一下这个从这里访问这个数据之后啊。

它的一个趋向,还有周围他有没有空啊,如果他周围存在一个扩的话,它可能是这种形式的啊,扩什么什么地址,然后呢呃有一个ex呢,它会对这个ex的数据来进行一个判断,常配ex什么什么的。

或者是test ex什么什么,然后后面的是一个跳转jz或者是jn z啊,可能是这类的比较多,然后或者是把这个判断的值啊保存到了我们的一个数值里面,这一类的,那么我们主要找这种括号,那么如果这个扩的话。

它是对这个呃我们的这个坐标进行判断的话,那么我们再进去看一下,看能不能不能够找到这个障碍的相关的代码,那么我们首先看这个库啊,嗯那么这里的话看起来像是一个坐标,那这个扩的话。

我们看它的ex的话没有利用起来啊,那么可能的话这种可能性也比较喜欢。

那。

么我们再来看这个库哈,那么这个过来这里有一个比较啊,ex等于二什么什么的,那么我们看它的一个返回值,那么返回值呢他是一啊,它是一,那么我们再次对这个地方呢,那么这里呢既然有比较,后面也有这个跳转。

那么可能它的一个返回值的话,嗯那么也有可能的话就是我们的这个扩的一个判断,那么我们在这里呢跟一个条件判断啊,看还有没有等于其他值的情况,那么如果他这个时候等于一,那么如果还有不等于一的情况的话。

那么可能就是因为他至少应该有两种状态,但是这里他有一个嗯compare e x等于二的话,看来的话它也是有有这个状态的,嗯至少还有一种状态呢是等于二,那么我们再来看一下,看他有没有其他的这个情况出现。

那么我们目前还没有发现有这种情况出现,放不下来,说明他的这个数值的话一直是挺明晰的啊,那我们再次在它前面下断再看一下,那么断一下之后,我们看一下它的参数有哪些。

那么首先我们看一下它的这个参数与我们的这个目的地有什么呃关联,那么我们可以看到它的第一个参数的话是取得他的第二个坐标啊,这个有点奇特,取得第一个坐标,因为第一个坐标我们在之前在某个位置就已经取出。

取出来了去,落地就这个标啊,这个是从从这个坐标数组里面取的第一个坐标嗯,那么我们看一下这个库,进去看一下这个库它究竟有多少个参数啊,那么从在前面来看的话,它只有三个参数,也就是这三个坐标压进来了啊。

但是我们还是为了保险起见啊,进去看一下它究竟有多少个参数,那么从这里能够看到的话,return 0 x28 ,那么一共有十个参数啊,r8 的话,那么也就是从这里的话也是要到24。

那么后边这三个还有这里有个一,这里有三个参数,它又代表是什么数字,我们转进去看一下,那么这里也有一个坐标6a那么我们再看下边,那么这个我们就看不懂了,是一个什么数字,gb 6 f什么什么。

再看一下这里啊,那么这里我们就更看不懂了,但这个的话呃这里是一个坐标6a这里是c9 ,那么6a的话,我们应该有76a啊,多少多少,好像是他的第一个坐标。

我们看到这里我们坐标序列里面的第一个坐标和第二个坐标,那么它都传进去了,哈里嗯,那么很大可能这个过程就是对我们的一个目的地坐标的一个判断啊,对目的地坐标的一个判断。

那么或者它里边应当有一些对这个障碍物和相关的一些代码,那么所以说我们在这里呢,我们跟进进进来看一下啊,这个库哈哈哈,那么我们注意凡是有空的地方呢,我们注意看他后面呢有没有这个比较它的一个结果。

那么跟到这个地方我们看一下它也有两个参数,一个是c9 ,一个是76a啊,这里呢我们也能够看到两个参数,我们进进这个货看一下,有这个扩的参数的话就更多了啊,你应该x484416 。

那么这些一大片上都是它的这个参数,这个库就比较复杂了啊,但是呢我们能够看到两个比较明显的字,那么也就是在我们的这个坐标序列里面啊,第一个坐标路径啊,这是第一个点,这是第二个点,那么既然有这两个点的话。

它应当是在计算这两个点之间有没有障碍物啊,那么像这种课的话,最有可能是这种情况,那么我们看一下它的一个返回值,又来看一下,那么正常情况,这个时候呢他返回的数字是零,他对他做了一个判断,如果是零呢就跳转。

那么应当说还有另外一种可能就是为非零的情况下啊,表示可能是有障碍,那么我们再让它先跑起来,在这里我们下一个断点,那么ex,那不等于零的情况下,我们给它下一个断点,那么好像是没有障碍的话啊。

这个时候我们看一下啊,这个库我们该去掉了,这里呢我们也给他注释一下哈,可能啊船的目的地坐标,一坐标或目的地坐标,对对一,元素一二啊进去,那么可能是啊,这个只是说可能是,障碍啊,判断相关的函数,好的。

那么我们把这段来哈复制一下。

啊然后再让他跑起来,那么这个时候呢我们发现呢这样走的话没有断下,那么我们点这个墙壁,那么这个墙壁的话,这个时候我们就应当是有障碍了,那么我们可不是一啊,这里那么不是一的话,这里呢也是一个非零的一个数值。

反正是有障碍啊,好像它才会产生这个数值,那么我们再测试一下,那么继续有障碍哈,两个点以上可能不是有障碍的,哎呦这个时候还穿墙了啊,这个时候你有点,那么可能它是另外的有一个时间差,那么直接这样就穿墙了。

我们发现,在这里停了一下知识啊,那我们看一下有没有穿墙,的确穿墙了,那么看来的话它应当是有一个时间差,另外还有一个线程呢,它可能是在像服务器里边的啊,不断地发送我们的这个数据。

那么这里呢他打了一个时间差,那么另外一个函数呢它在移动啊,嗯可能是这样啊,那么我们再次看这个墙本来是穿不过的啊,这里卡了一个时间差,那么我们这里暂停了之后呢,他就实现了这个穿墙的这个功能了。

这个有点也是算发现了一个bug啊,那么证明的话有这样的一个表现法,证明我们可能比这个呃离我们的这个呃穿墙的这个功能的话,可能是不远的啊,嗯那么有障碍的时候,我们还是发现它这里呢返回的数值呢就大于零。

这是个好形象,也将案情况e x大于e x不等分级,那么我们再测试一下啊,没有障碍的情况,那么这个时候不会断下,那么一旦我们点这个障碍的地方呢,就断下了,就断线。

那么说明的话这个库呢就是一个障碍判断的一个库啊,嗯那么将来啊这个呢应该是一个障碍判断库,关键的地,啊那么既然这个地方是障碍的判断扩的话,那么我们而且调用这个库的地方,我们发现非常多。

那么我们就可以来把它的返回到这个地方呢,我们发现啊,因为看一下啊,这里再返回,然后呢这个数字啊再再倒回来看一下这个是脏的判断库啊,那么我们跟进去,那么看一下它返回到这个地方返回了啊。

但这里呢我们看一下它有一个跳转taste x e,那么如果等于非零的情况下的话,它跳转了等于零呢,可能就是从这里来就返回了啊,那么从等于零的话,它始终会从这里返回,那么这里的话应当是不障碍的情况下返回。

那么因为只有这个ex呢,它等于零的时候才会执行到这个地方,那么我们看一下是不是这样,那么无障碍啊,那么我们看一下啊,这个无障碍的情况啊,这里的e x等于一啊啊,他跳转了,那么这里可能是无障碍的。

那么跳转的话,我们继续看一下他从什么地方反过,那么反正在这个地方的话肯定是等于零的时候才会,那么反正是从这个地方返回的,ex都表示成功的,我们不管它嗯,再继续往后看,啊这里就是一个循环了啊。

那么循环的话我们也跳过啊。

仔细看一下后面有什么地方不是返回的,那么这里呢也有一个地方啊。

返回一,那么这个地方的话,我们在这里下一个段啊,看一下ex,那么也是为零的啊,这个地方,那么我们在这里看一下有没有ex-0的情况,啊再次看一下啊,那么这个时候呢都是为零的。

那么我们点一下这个墙有障碍的物品,那么我们发现呢这个有障碍的情况下,也是从这个地方放回,那么我们就可以从这个地方来来修改啊,嗯修改尺寸x的,嗯嗯嗯,让水或者防卫有障碍情况。

那么大致呢我们就可以来修改这个地方,把这段特征码复制一下,那么可能的话我们如果是运气好的话,我们就修改刚才这个地方呢,可能就能够实现我们穿墙的这个功能,当然我们刚才看到的它有一个卡时间。

好像也也能够实现这个穿墙啊,把这个时间一卡啊,他就穿穿过这个墙去了,那么我们再次看一下能不能够穿墙,那这个地方还是不能穿,这个有点奇怪,再下一个段看一下,好那么放一下再让它跑起来。

那么我们发现这个地方的话,而且这个时候呢跑过来了啊,我卡这个地方呢能够穿墙啊,我们看一下,肯定还有其他活动的一个县城,那么有很多,那么只有哪一个地方被占据,都是激活,那,那么的话我们暂时呢就分析到这个。

那么下一节课呢我们再分析一下,看还有没有其他地方的一个判断,那么这个地方的话应当就是一个比较关键的这个地方好的。

P113:124-穿墙功能相关数据分析-路径坐标数组去向跟踪 - 教到你会 - BV1DS4y1n7qF

大家好,我是郁金香老师,那么这节课呢我们继续分析我们呃与穿墙相关的一些数据,那么我们继续跟一下啊,因为上一节课我们也是分析到了一个比较关键的位置啊,但是最终经过我们的测试了,嗯,还是没有通过。

那么像这种情况的话,可能还有其他的地方呢,呃还对这个障碍相关的有这个检测啊,或者是有这个判断,那么我们继续跟踪下边的这个地址啊,也就是它的一个趋向继续往下跟,那么当时呢我们只分析了这一个地址。

那么后边呢呃还有几几个地方,那么我们继续来跟一下。

那么首先呢用d来附加到我们的游戏里边。

那么这个时候呢我们先转到第二个地址啊,这里呢也是一个呃访问我们的这个目的地坐标路径的啊。

第一个元素的一个地址,好的,那么我们在这个地方下段啊,然后呢嗯走上几步啊,呃点这个走路或者是寻路应应该都会断一下,我们再试一下啊,如果是选六的话,也会断一下,都是访问了这个地方的呃,那么这个地方的话。

我们看一下载入的是ec x,那我们看一下e4 x是什么数据,e4 x啊,那么这里的话看起来有点相似的一个坐标啊,这里应该是一个坐标,再看一下吧,啊它前面这里呢还有一个坐标呃,你是在入这个地方。

a d d e c x加c啊,我们知道这个加塞的话啊,它的这个e c呢是它这个目的地坐标的一个结构的一个大小,应该是,然后来移向我们的下一个作表达,是我们看一下,嗯但是这里呢也不是太像。

反正也就是与我们坐标相关的一些数据,那么我们继续往下来检测,呃,这里把这个坐标读出来之后呢,它可能呢也会有两个点的一个判断啊,第一个这个坐标序列与第二个坐标序列的一个判断啊,一直往下跟啊。

这个时候呢往向后,但是这里的话它虽然说读出来了啊,读出来之后呢,这个ex的值呢它没有利用起来,那么像这种情况的话,这个地方呢一般呢不会是与我们的这个障碍相关的这个判断啊。

那么判断的话他应当呢这这几局的应当被忽略掉,二,那么直接呢有一个判断,那么可能呢像像这种类型的话,那可能性呢要大一些,那么我们再来看一下这个ex,那么这个扩的话。

后面呢它的这个返回值的话依然没有利用起来,那么所以说我们这一部分的这个判断的话可能不很重要啊。

啊暂时呢我们越过,那么我们再来看一下这个地址56a的这个判断。

好那我们在这个地方下断,然后呢再让它走上几步,但是这个地方它现在它不断下了,这个有点奇怪,那么好像他是很特殊的时候才断桥,好像是遇到这个障碍物的时候呢,嗯遇到这个障碍的这个墙在这个坐标的时候啊。

嗯好像是这个时候断下的,放下来几次,那么我们先把它去掉,再重新在这个地方下端看一下,那么这个时候呢他实际上他把这个墙来穿过了,嗯,那么这里有一点奇怪阴影啊,好的,那么我们再次点这个墙。

那么也就是说这个目标它是障碍的时候呢,它会在这个地方断一下。

那么证明他的这个之前的某一段地址呢,可能有这个呃障碍的判断,然后呢跳到了这里,咳咳咳咳咳,那么我们发现的话它跳转的来源的话是从下边啊跳转过来的,我们下去看一下,从这个地方来,它有一个跳转往上跳嗯。

然后呢这里e cx了,我这个一dx了嗯,再进行一个判断,那么我们看一下ec x我e d x是什么,那么这个b0 加上e c的话,两个就相等了,然后就会跳到上边去呃,非零的时候往到上边跳。

不等于零往上边跳呃,然后等于零的时候呢往下边跳,好像这个呢有一点像我们的这个人物角色的这个目的地,坐标数组的一个起始地址和结束的这个地址。

有一点像,那么我们加上一个1d6 式来看一下啊,b0 ,这里是c c,那么实际上这里呢它是在判断判断我们的目的地,嗯坐标数字骗你是否结束吧,那么因为这里呢它是它的一个结束的一个标志啊。

这两个呢它在判断嗯,那么我们再再到这个地方下一个段哈,那么这个时候呢两个相等的ec x相等的话,那么我们当然,就会有跳转,他一直在循环的骗你啊,做什么呢,我们再进来看一下这段代码,那么这里的话。

这里还有一些跳蚤,那么这里呢他也没有这个相应的扣啊,进行一个跳转,e c x1 d x,那么这里我们看应该是进行了一个判断哈,看下1a x和ec x e e c,那么这个b0 的话ex了,我们很熟悉。

而这个加四的话,e c e d这是b01 ,是一八,那么恰好了,也就是这个1。64呃,加上我们的1。68,那么这里呢他也是做一个判断,然后再这下面呢进行一个循环的判断,那么也有可能是这种情况啊。

也就是说呃他在这个或者上层的一个扩有有这个判断,然后呢如果是有障碍的话,才到这个库里面来来进行相关的这个偏离这些数据,那么我们先返回到上一层空来看一下它是不是这样的,是不是有障碍才进这个空。

那么如果是这样的话,他可能是要通过啊,有了这个障碍之后呢,他通过了呃这个过来计算啊,绕过这个障碍的这个物品,那么也可能是这样的一个功能,那么我们执行的返回,那么执行到返回之后的话。

我们发现了是这一个空五六为410,好那么我们在这个地方呢下一个段,那么先我们这样走的时候,我们看一下,没有障碍的时候呢,它不会断下,那么这个时候呢目的地呢有障碍之后呢,他才会断下,才会执行到这个库。

那么这个条件的话应当还在前边啊,那么这里也有两个,这里是一个坐标,我们能够看出来,那么这个地方数据窗口这里也是一个坐标,这两个坐标的话可能就是在我们1。64的坐标一或者是二啊,两个连续的坐标。

那么可能他也是在计算这两个点,这是否有这个障碍物,那么我们可以看一下a1 ,我,a一我们找一下部位,a一的有没有,那么我们再来看一下这里面的相关的数据呃,有一个为d4 的。

那么我们再来看一下七体四幺题62,这里呢它就是它的第一个坐标,好像是七体四,从这里来看的话,那么我们还是再理一下思路啊,就是说嗯有障碍的时候会执行到这里,咳咳,为障碍的时候呢,啊不执行这段代码。

那么也就是说这肯定是在这个代码之前,他有这个有障碍或无障碍的一个判断,那么我们再一次来嗯,返回到上一层扣看一下,所以在里面返回看一下,那么这里的话我们也能够看到两个坐标,a一呃,我这个。

这里还有一个目目的地坐标哈,气体四,那么很有可能的话,也就是说它是通过这个货来来纠正啊,我们的本来是他是走的一个直线的一个路径,那么直线路径呢,但是呢他就是说判断有障碍之后呢。

然后再通过呃这个过来计算计算怎么绕道啊,怎么绕道来执行啊,可能是这样的一个功能,那么这里呢它也有两个坐标啊,那么我们返回去看一下,那么就跟到了这个循环里边,那么我们在这里下段再看一下。

那么我们先把断点来取消掉,在在这里下断,然后没有障碍的情况下,我们走上几步,再次试一下,那么这个时候的话我们发现呢这个扩的话啊,无论是有障碍还是无障碍嗯,他好像都会断一下,那么我们再来看一下嗯。

是没有障碍的时候来返回的是数据呢是e啊,e x那么我们看一下它哎,这个库好像我们上一节课,好像上一节课已经有,有这个分析了,让我们看一下上一节课的分析,啊6b65056 b啊,650啊,对了。

我们上一节课已经有这个分析了,上一节课的话应当是在这个框里边呃,这个位置最终呢我们是分析出来的,这个位置呢是进行了这个坡的一个判断啊,那么我们再备注一下。

那么修修改这个地方也可以哈,也能上啊,当时呢我们是,修改的这个库里边的某一个地方,那么我们再来看一下,那么因为上一节课的这个注释呢,呃被抹掉了,所以说这个时候呢让我们多费了一些时间,应该是这个位置。

那么也就是通过我们两个这个呃目的地坐标的这个数组的话,实际上都能够跟到这个地方,我看了啊,都是能够跟到这个地方,然后呢它都是用这个扩来来做的一个相应的一个检测,那么我们先把这个地方呢进行一下修改。

然后呢再去进行后续的一个操作,因为我们确定了这个过来,它也是有这个判断的,那么可能呢我们不能呃,就是说不能够穿墙的目的呢,他可能还有其他的地方进行判断啊,那么也就是我们刚才是执行到这里边的这一段哈。

好的,那么我们再继续看下边的一个数组的一个趋向。

嗯,刚才的这个地方呢也分析了,这个地方呢也能够找到,从这里也能找到我们的第一个嗯障碍判断函数附近,那么我们现在需要找的是另外一种情况啊,因为这就是我们现在改了这个函数之后呢。

它还是不能够实现我们的这个穿墙的这个目的,那么说明的话还有其他的函数呢再进行判断。

那么我们继续再找一下哈,找找一下443呃,一诶这个地方看一下,那么我们在这里呢,下一个段啊,好走路的时候呢,它会断下,那么我们看一下现在的,坐标啊b0 呃,结束的这个是八比四,不是啊,10641068。

啊八比零啊,818哈,这个时候呢托尔他应当也是产生了我们的相应的这个呃,目标的路径可能已经产生了啊,然后呢在这里呢也是来返回,也是来访问的这个坐标,那么我们看一下它周围有没有这些判断的函数啊。

主要是但是这里呢它就是一个循环啊,然后就完成了,然后呢执行到上一层的这个空执行到这里,但是呢它的ex呢也没有利用起来,然后因为因为他的ex呢是从这个呃呃临时变量里面进去的,这里呢ex来等于一。

那么我们看一下返回之后它的情况,但是呢这里呢他马上就把他的这个结果来进行来,抑或那抑或之后呢,也就是说这个函数啊嗯与我们的这个障碍呢,它也是没有太大的关系啊。

就是说他也不是以他的返回结果来来做一个判断有无障碍的,那么我们只有来呃,继续再更一下,啊,那么我们看一下e s i,那么这里有没有坐标相关的数据,现在是看不出来啊,继续往下走。

那么这里有一个坐标的一个出现嗯,ex那么这里有一个ec啊,值得我们注意,那么这个e d i的话呃,应当是我们可能就是我们的那个坐标,那么我们看一下有没有这样的一个环境,是以七。

这里在我们的四期这个列表里面v9 啊,那那我们看一下这个e x加44a7 是什么,首先我们看一下ex,那么ex的话,我们发现呢就是它的这个腰骶六四的这个我们目的地坐标,数组的起始地址。

然后呢因为它的结构的话,一个结构的大小呢是0x1 c啊,然后这里呢它有一个e d x 14呃,这样来计算的,那么也就是对他的数组的里面的某一个数字的一个访问啊,那么也是坐标相关的,那么我们继续看一下吧。

然后他又载入了一个数字178178,那么也可能就是说这个扩,它是用来判断我们的这个有无障碍的这个情况,或者是,好我们继续跟一下啊,这个需要很需要很多时间和耐心性,这一,那么根的时候呢。

我们注意这个佛点站的一个变化,还有这个堆栈的呃,这些关键数字的一个变化啊,这个库好像比较大,那么我们返回返回到上一层再试一下吧,上一层的话返回到了这个地方,那么这个地方我们再pass掉啊。

看一下嗯,最后的话我们除了刚才的这个地方,或者是123的,靠着这个地方,那么我们在这个地方。

我们刚才好像已经用过了,这里是初战,那么出站的话是改变我们相应的这个数值,可能是这个坐标的一个更改,这个地方我们应当要给你一下,因为这个好像也忘了,我们刚才这个地方有没有跟加上ec啊,跟过的。

我们做一个标记,这个地方好像是跟过的,然后出站它是把这个数值呢呃写入到我们的e x里面,那么它的数据来源呢是我们的e c x减八,那么ex减八的话来源于什么地方,我们看一下,mac到e si。

那我们再来看一下e和x的数值b0 起始地址,然后呢加ec,每次e4 x也加1c,咳,那么我们再次返回到上一层,再看一下,再继续更一下,那么这里的话我们还有一个条件的一个判断啊,然后呢,再进到这里。

那么我们在这里呢再看一下,如果有障碍的情况,会不会断到这个地步,点这个墙啊扭上来,在这里,可以,di的一个数字的一个,转到前面看一下啊,这个e d i,嗯e d i的话。

56b650 好像也是这个地方进行了一个判断啊,然后呢有无障碍啊,好像这个函数就是有个障碍,我们再看一下嗯,前面的这个过程。

看一下123的这个过程,对了这个地方呢我们把它注释一下啊。

呃设置一个标签啊,这样便于我们观察,它也是在这里边进行了判断之后,把这个e d i把它的返回值放到e d i里边啊,然后进行了一些判断呢,跳到了我们的这个这个框里边,那么所以说我们找到的这个函数的话。

还是这个地方在这里呢,我们给它设置一个标签啊,为了方便障碍判断,嗯有个障碍返回,您有障碍返回返回,非零子应该是没障碍,不障碍,返回卡尼卡这个地方,然后呢我们再加上一个注释,在这个地方好。

然后按减号退回来,那么这样的话我们分析的时候呢就好分析一些,好的,那么我们有有关于这个数组去向的,这几个数据好像都已经分析了,还有最后一个没有分析,那么这个地方我们再看一下,46a啊,这里是一个坐标。

不记得,那我们在这里下一个段看一下,那他会断下好几次,好像是在不停的更新我们的这个坐标,那么我们再次看一下我们的目的地,坐标地址,再看一下好像是没有变化,我们看一下e s i的一个数字,1s i哦。

它是把我们的这个坐标来读出来,写到另一个目的地坐标里面去啊,然后如果我们要继续的跟这个目的地坐标的趋向的话,就要去跟这个2。75c070 这个地方了。

他把我们的这个呃目的地坐标的这个数据来啊进行了移动啊,移动了到了其他的一个机制,好的,那么我们再重新把断点取消之后呢,重新下一个段啊,然后呢我们再走两步,这个是我们能够看到我们的这个目的地坐标的数组呢。

它的数据呢移动到了这个e d i的这个机子里面去看,我们来看一下di这个地方,那么等一会儿的话,我们要跟的话,就是要跟这这个i开始的这个地方,啊不对,那么我们看一下这里边的这个相关的数据,用火点出来。

看一下ti的,那么这里也仅有几个相应的这个坐标的一个序列,那么我们再跟一下呃这个地址的一个趋向,那么我们重新再走上写步,然后呢我们按一下f7 啊。

我们把e d i的这个数字来记录下来好那么这是我们的一个坐标,加上e c e d i加上ec那么循环不断的,它是不断的把我们的这个坐标数组里面的数据了哈,复制到e d i所在的这个数据。

那么di所在的数据呢,它的这个地址的话是从bp加一零这里传过来的,那么ebp加一零的话呃,从这里来看呢,应该是上边的第三个谱写的这个参数嗯,应该是这里最早谱写的这个,那么我们返回的话也就是这个ex。

嗯也就是说这里呢它也是一个我们目的地坐标的一个数据,物体这售票数出,那么我们要继续的跟他的这个判断的话,我们可能就要从这个呃这个地址来开始跟,e s i。

那么我们来看一下这个e s i它是一个什么机制啊,重新的我们让它跑起来,那么再一次让它断下,看一下si的一个数字,那么我们看一si这里的一个数值的话,e si加四。

那么这里的话它也像是一个数组的一个起始地址或一个结束地址啊,那么加上四这个地方他也就是这个二二比73068,然后呢这个di加四呢就是我们的我们看一下di的一个数字,那么e d i到这个的话。

恰好就可能就是我们的目的地的一个数啊,也就是我们之前的这个人物角色的这里的相关的一个数字,我们用拼音来表示一下啊,恰好就是这个地方,那么我们也把它注注意一下哈,这是人物角色属性,加上1964啊。

这个eti的数字,好的,那么我们把这一段来也注释一下。

那么再跟它的趋向的话,接下来的话我们就是要找这个啊e s i啊,这个地方开始了,那么我们往往前面找一下它是不是一个对象,这一大片数据看下来我们看不太懂啊,好的。

那么我们直接来继续的跟踪一下这个e i的一个趋向,那么这个时候呢我们这一段过了之后呢,我们可以对呃1s2 加四这个地方呢来进行访问的一个断点,等这个扩之后,当然这里它也返回了哈,返回之后呢。

e si加四复制为1a x,这一题有些看不懂啊,然后我们再次断一下,再看一下嗯,一si的数值把它记录下来啊,e si加四,那么这这是一个起始地址,那我们把一si的数字呢也先记下来哈,咚咚咚。

那我们也可以用c来搜一下这个二级,来看一下究竟是一个他的这个指针存放在什么地方,看对我们也没有帮助,然后找不到这个地方啊,那么我们直接就找它的一个趋向,那么我们再找一下这个过之后呢。

我们呃把这个库执行完之后,那么呢我们找一下他对这个目标数组的一个访问的一个地方嗯,内存的访问,然后呢我们把这个断点呢取消掉。

这里复制一下。

然后呢我们让它跑起来,这次我们走远一点,再看一下,三然后呢在这个对这个地方呢,我们在下一个内存访问的断点,再让它跑起来,一si 2。3,结果还是往这个地方来进行了,一个写入的一个操作,啊。

那么或者我们换一个思路来跟哈,如果这里跟不下去的话,当然这里也应当也可以跟,当然好像比较费时间,那么我们可以换一个思路的话,如果呃如果是没有障碍的话,他肯定呢就要对我们的这个目的的坐标呢进行修改啊。

进行一个写入的一个操作,因为要移动这个坐标,还有我们的这个当前坐标,它也应当要更改,适应当是更改这个当前的坐标应当是,当前的人物坐标啊。

那么如果也就是说呃有障碍的话,他就不会去更改我们的这个当前坐标,那么我们再来看一下对当前坐标的一个访问啊,因为这些呢都是与坐标相关的。

那么我们先把这个ot呢退出来。

不知道,好那么这个是我们的当前坐标,我们对他呢呃找一下改写了这个地址的代码,那么我们看一下这是正常的情况下哈,正常的情况下的话,它就是这样走路啊,就只有了这前面的这一段代码呢会来修改我们的这个坐标。

那么如果我们遇到这来,我们看是什么情况,那么遇到障碍之后呢,我们发现的话他走的这个路径的话,它不一样啊,这里有障碍的情况,那么有障碍的话是这个地方呢他会修改它啊,呃4d9 这个这个榜有障碍。

那么我们现在的也就是说要它是一个无障障碍的一个情况啊,那么这个地方呢它是无障碍的,它会如果是无障碍的话,就会朝这个地方来执行啊,也就是会执行到这里f s t p啊,什么什么168c这里。

那么我们看一下没有障碍的时候呢,这是正常的情况下,那么也就是说在这个代码的附近的话,可能就有一个障碍的一个判断,有障碍的话,它就会执行在下面的这个代码是底多少多少,如果说没有障碍了。

它才会执行这个视野这个地方,那么我们也可以从这个地方呢来分析,那么好的这个就流程是作业啊,大家先去分析一下啊,这个从这里呢开始入手分析,呃找了一下啊,有没有呃,附近有没有来这个障碍判断相关的,好的。

那么这节课呢我们先到这里哈,呃这个数据的走向哈,因为像穿墙这种功能的话,它不是说分析出来马上就分析出来的,嗯像这种变态的功能的话,都需要一个好的一个思路和很多的时间啊,好的。

那么我们下一节课呢嗯再一起来分析这个数据的一个走向。

posted @ 2024-09-30 11:13  绝不原创的飞龙  阅读(0)  评论(0编辑  收藏  举报