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

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

P184:198-捡物过滤+自动捡物封装 - 教到你会 - BV1DS4y1n7qF

大家好,我是郁金香老师,这节课呢我们单独的封装一下简木的这个功能。

那么节目的话之前呢我们动作里面呢有一个节目的动作,但是我们用这个减物的功能的话,我们就不能够达到一个呃过滤节目的功能,也就是说这个节目的话,它会顺序的把我们地上的东西全部捡起来啊,比如说我们按f9 。

那么这个时候呢它就会把地上的物品呢,依次的把它捡到我们的背包里面去,但是有有的时候呢,比如说我们这个金刚石,我们不想要它,那么我们金刚石呢我们不捡,只捡其他的物品。

那么这个时候呢我们就需要来单独的写一个这个功能函数,来达到一个过滤的一个目的,那么我们在选择这个物品的时候呢,呃就要做一些过滤,比如说我们的嗯这个衣服这一类的我们都可以的,不检查,或者是某一类的石头。

或者是只剪我们这个强化石这一类的,那么这就需要我们自己写代码,那么实际上的话我们有一个功能这个供给啊,这个功能在我们选中这个物品的基础上呢,我们用这个工体这个技能的话。

实际上就能够达到这个过滤的这个物体,好的,那么我们先打开196克的代码。

太酷,那么首先呢我们展开我们的结构单元,那么在结构里边呢,我们添加啊留下的一个结构,那么首先呢我们也是像定义我们的怪物对象一样,在这里呢我们定义一个物品的一个对象,那么这个对象结构呢。

最终呢它实际上还是用来骗离我们的附近的这个对象数组啊,这个bb miss啊,这附近的用来骗你这里边的对象数组,因为我们的地上的物品和地上的怪物,还有我们周围的这个玩家npc都是在这个附近对象列表里面。

当然我们也可以在所有对象列表里去偏移它都是可以的,那么只要它里边呢嗯它的这个分类这里加八,这个位置呢是三三,那么就表示我们的地上的物品,那么这个加零次这个呢是我们呃物品的这个下标。

在所有对象数组里面的好的,那么这是我们的对象,那么对象里面呢它包含这几项,包含我们的物品名字嗯,那么物品信息这个呢是没有的,那么这个呢只有我们背包里边才有,那么它实际上只有这几项啊。

当然类型的话它就是你x3 的这个类型,那么实际上对我们最有用的呢就是这两个,一个是在我们所有对象数组里面的下标,这个我们是用来选中物品的时候用。

那么另外一个呢就是物品的名字用来过滤我们简录功能的时候用好,那么下面呢我们会给它封装几个函数,那么首先呢我们偏离所有的这个数据呢,放在这个数组里边啊,放在这个物品对象数组里面。

然后呢我们用这个get代替来初始化,说实话,这个t估值list,物品类的,这个时候呢我们把附近的这个所有对象的里边呢,提取出我们的物品啊,物品信息,然后存放在这个数组里边。

然后这个呢我们可以打印一些信息,好,那么这个呢是选中我们这个物品列表里面的第一个物品,当然要实现过滤的一个功能呢,到时候呢我们也可以修改这个函数,好,那么这个呢是我们的一个自动型的功能,好的。

我们先把这一段放到我们的头文件里面,那么这里呢它的一个大小来与我们的这个因为是与我们所有呃,附近的这个列表的一个大小,实际上就是那么这是最极端的情况下,一般来说呢它不会周围的这个物品个数的话。

一般不会超出这个100个啊,那几个可能就是只有好,那么这里我们建好了之后呢,我们再添加相应的成员函数的代码,那么我们把这段代码呢添加到我们的cp p里边,移动到最后,那么我们先来看一下第一个函数。

第一个函数值是个体代替的,用来初始化这个数组的,那么先这里来清理初始化哈,给一个干净的数据,然后这里有一个type估值for flow,那么这个表示什么呢,表示实际上就是地上物品的这个类型就是三三。

那么也就是我们之前所说的啊,这里是三三呢才表示物品,如果是二一的话,就表示是怪物,是三幺呢表示玩家,那么所以我们要在这里来添加这些物品的类型,那么我们这个卦其中一点我们看一下,这里有一个type好。

那么我们在这里添加一下,一个是怪物,这个是玩家啊,我们一起添加,这是周围的怪物类型,周围的玩家类型的地上物品,那么这个是背包里面的这个物品是1a啊,这里呢我们也顺便把它定义一下,好。

再回到我们的c p p t v那里,那么在这里呢我们取0x08 这个地方啊,也就是把这里这个对象偏移加零八,这里的数据取出来,与这个三三做一个比较,那么如果是等于三三的话。

那么我们才进行后面的数据的一个添加,那么如果他这里是不等于零,那么可能就是怪物或者是npc或者是其他的玩家,这对的,那么我们就继续循环啊,那么只有走到这个位置的时候呢。

我们才添加我们这个地上物品的信息到这个列表里面,那么这里是最重要的一个啊,90这个地方是物品的名字,那么这个呢可以不要,那么后边呢还有一个是它的一个下标啊,那么这个下标呢它的位置的话。

实际上就是我们之前用的这个零售这个偏移啊,也就是把对象的这个下标取出来读出来,那么这个偏移呢他之前呢没有定义过啊,那么这里我们把它定义一下,没有定义的话,我们把它定义到我们的结构单元头部。

那么这个呢等于0x0 c,物品下不了,真的,好的,那么这样添加进去之后呢,我们就把物品的信息呢进行了一个初始化,初始化之后呢,我们在这里呢我们就可以打印出它相关的啊,地上的这些信息,通过这个循环好。

那么在这里呢我们再次啊每次的选目之前呢,我们进行初始化,初始化之后呢,我们对它进行判例,那么如果呃这个因为我们在这里呢用了一个win设进行一个清明的操作,对这个物品列表,那么如果我们在这里的话。

他这个对象的名字为空的话,那么我们就直接退出这个循环了,就证明了我们地上的没有这个物品,那么如果找到了物品的话,我们呢在一四比八这个偏移来进行写入,写入它的下标表示选中这个物品,选中物品。

那么这个看之前的一个分析哈啊,选中物品,我选中怪物实际上都是用的同一个偏移,一四比八这个偏移啊,这是人物角色选中物品,那么在这里的话,我们呢可以要实现我们作品过滤的话,我们可以添加其他的代码。

比如说这里我们可以对名字啊进行一个判断或用,当然现在呢我们不讨论这个功能,那么在这里呢我们选中选中物品,然后呢我们自己执行一个攻击的动作呢,实际上它就能够减负啊,好的,我们生成一下进行测试。

对了我们还需要写一部需要写一个测试的,测试的话,我们需要来把这个对象呢先定义一个相应的对象,哈哈,地上物品列表,然后我们需要把这个列表来放到我们的全局变量里面去。

然后我们就可以调用这个相应的全局变量做一个测试,那么后面呢我们不管直接在这里可以看,那么我们可以先来打印出地上物品的信息,然后我们也可以了,在第二个测试这里的实行一个节目,这是节目的功能,可以看测试一。

测试二,好的,我们先从背包里边啊,扔几个物品到地上,好的,然后呢我们输入代码。

首先呢我们建立一下相应的信息,那么这个时候呢它会偏离出它的相应地上物品的名字,我们可以根据这些名字来进行过滤,然后呢我们点测试的时候,点一次测试呢,它会,捡一个物品啊,那么如果要进行过滤的话。

我们可以在这里呢进行一个简单的判断,就这个cl里面,那,么在c的时候,我们在这里呢可以加上呃,加上一个循环的一个判断,可以有很多列表,那么我们举一个例子啊,我们可以在这里呢对这个名字进行一个判断。

我们只剪某一种物品,或者是减某一个循环里面的物品,比如说这个含义时我们就不检查,那么不检查的话,我们直接就躺平了啊,直接就跳过啊,那么这个时候呢我们就是除了韩愈时以外的,其他我们都可以减。

都会呃把这个物品捡到背包里面去,那么如果是含义时的话,他就不会去解好的,我们做一下测试,那么这只是一个简单的过滤,那么实际上过滤呢我们可以过滤很多物品,不止一个名字,好这个时候我们在做测试。

然后不断地捡起我们的物品,那么这个时候我们看到地上还有一个含义是,但是这个时候呢我们点这个节目的话,他就不能把它捡起来,但是其他的物品呢它就会去解,但这个含义式的话它就不会去解了。

那么就能够达到一个过滤我们减负的一个目的,好的那么我们下一节课呢再详细的讨论呃,更多的这个物品的一个过滤,那么这节课呢我们暂时就讨论到这个地方。

P185:199-强化合成CALL相关分析0A - 教到你会 - BV1DS4y1n7qF

大家好,我是郁金香老师,这一节课我们一起来分析一下游戏里面的强化合成相关的数据。

那么首先我们打开,落地,附加到游戏里边。

在游戏里边呢我们有有一部分npc呃,选择打开之后可以进行物品的强化与合成,那么我们来以这个刀剑鞘这个npc稳定,那么首先呢我们要经过几个步骤强化,合成的话,首先呢我们肯定要选择一个n p c。

然后打开这个n p c的对话,然后进行菜单的一个选择啊,选择是强化或者是活成我们的物品,第三步呢,然后我们是放置我们需要的这些材料,也就是合成的物品,那第三部应当是首先是呃放置这个物品。

然后呢再次放置材料,最后呢调用我们的强化过程的这个功能函数,那么首先我们来看一下第二个步骤啊,打开强化或者是合成的这个物品界面,那么我们首先呢选择这个n p c,那么这个我们之前已经有过相应的讲解。

在选中npc之后,我们调用功法普通攻击这个库呢,它实际上就能够打开我们的n p c了,比如说这个时候我们是选中npc的,然后我们对它执行一个普通攻击的一个空,那么这个时候呢它就能够打开相应的npc菜单。

然后我们再卖出或者是确确认任务合成物品的时候呢,这个时候也会向我们的服务器发送一个相应的信息,那么所以说我们这个时候呢嗯可以呢,对这个发送数据的api函数来进行下段,下段之后。

然后我们比如比如选择这个强化物品啊,现在还没有开始选择,是其他的地方断下啊,那么我们重新选择一下强化物品,这个时候呢会,断在这个w s s m的这个地方,当然不同的游戏呢它可能发包的这个函数不一样。

有可能其他的它只是调用的是生的啊,这个函数或者是生的to这一类,这个时候我们执行到返回,然后再执行到返回,那么这里呢我们看到它是发包的这个地方,我们通过调用这个发,包括从这个地方的话。

理论上呢就能够实现我们的这个装备强化啊,在这个界面都打开,那么实际上它应当是向我们的服务器发送了这个信息服务器,然后呢发送指令出来到我们的客户端,然后呢打开的这个窗口界面。

那么实际上它应当不止一个地方嗯,可以实现这个功能,当然我们看一下这个缓冲区,那么这个缓冲区的话,我们发现呢非常的简单啊,就是一个9080018,这里是2cm啊,这是缓冲区的一个数据。

那么我们再选择其他的扣啊,再试一下,比如说我们选择合成物品,那么在选择合成的时候,我们再来看一下它的这个数据。

那么这是卧蚕,这呢是强化,他们都是调用的同一个空,那么我们找一下它的区别,这里是八,这里是六。

它只有这一个地方呢有相应的一个变化,我们再选一下其他的菜单,比如说我们是在这里进行买进或者是买出,那么我们来看一下,那么这里呢它是三啊。

只有一个参数不一样,那么所以说我们理论上呢我们可以的在这里,要用这个发包的这个库,应当说能够实现这个功能,好的我们进行一下相应的测试,把代码注入器打开,那么首先呢我们要呃在代码注入器里面呢。

我们需要来给他这样设置一个相应的缓冲区哈,那么这样在代码注入器里面来写的话,实际上它不是很方便,那么我们可以通过一个谱写的一个顺序复习,从这个100这个地方开始给它构建这样一种缓冲区,然后再是图形。

然后再次复习002啊,002上边呢,这里呢接着是零,然后是30018,然后再是一个九五个零,那么这就是构建的一个缓冲区啊,那么他执行的指令的话肯定是最先执行的这个前面这一段。

那么最先压榨的人他肯定会到我们的这个饭点啊,相当于是那么直到我们执行到这个语句的时候呢,我们就构建了这样的一个缓冲区,那么这个时候的话,因为它的这个缓冲区呢最终呢是存放到了1a x里边。

那么我们可以这个时候来把我们的呃e s p啊,也就是我们的这个站点的这个数据呢放到我们的ex里面去啊,这样的话我们就形成了我们的一个缓冲区啊。

当然还有一个这里呢我们还需要对我们的ec x来进行一个复出值。

好接下来我们进入到游戏里面看一下,那么首先我们看一下从买卖这里开始吧。

买卖这里呢是注意现在是一啊,这个地方是一,那么我们重新打开这个菜单,在这里输入代码,这个时候呢它会打开这个商店,但是打开商店之后呢,我们看一下这个时候呢呃出错,虽然说他打开了商店,但是马上来他出错了。

可能的话是因为我们的这里的堆栈呢它没有平衡,因为在这里我们分配了这个空间啊,但是这里呢到最后之后的这段空间呢,我们没有释放,这里呢有一共是每一次复写的是四字节,在这个36位的进程里面。

那么我们的公司六次,最后呢我们这里呢要att e s p呃,加上幺八这样的,我们才能够达到一个堆栈的一个平衡,那么可能是由于这一局输出。

你再按减号退回来,再看一下这个地方,好的,我们再次来重新,进入游戏,再次进入游戏之后呢,我们附加到游戏的进程,然后我们再次打开np c菜单,然后我们在这里呢选择打开打开我们的商店啊,买进买书。

那么这个时候我们做了一个堆栈的一个平衡之后呢,呃相当于这片空间呢它就被释放掉了,那么他就不会出错啊,那么我们接下来看一下怎么打开我们的合成窗口啊,这里是六六百18,这个地方只有这一个参数不一样啊。

这个时候是装备的一个合成,然后我们再看一下,呃窗口的强化,这里是八,那么我们把这个参数来改一下,啊这样呢我们就可以打开我们的强化窗口,好的,那么这节课呢我们分析了主要就是这一部分了。

当然我们还可以呢呃往更上层来找啊,可能它还有更上层的这个空。

刚才我们是。

在这个地方。

我们可以在这个地方下断,然后我们合成物品的时候呢断一下,在这个时候呢我们取消断点继续啊,执行到返回,我们看到这里呢还有一个空啊,我们也可以对这个库来进行操作啊,你们上,我们再看一下这个库能不能够使用嗯。

点一下合成物品,看一下它的参数,一个是e s i,这里呢是4e cx 5,记录下来,这是e4 x的一个数值,看起来呢这一个扩的话,它就只有这一个参数啊,只有这一个参数。

而且它是来源于我们的一个数组里边加174,这个地方看来是这个e s的一个数字,好的我们再来看一下选择其他扩展啊,选择强化物品的时候是多少,那么我们发现强化的时候呢,它的参数呢是六,而ec x呢没有改变。

接下来我们再看一下购买物品,购买物品呢我们发现了这里的参数呢,它是一,146这个扩的参数呢它有些不一样,好的我们来测试一下这个库,不是cx 5574197,146啊,那么我们注意一下。

这个时候呢我们通过一了这个参数呢就可以打开商店,二的话就是装备有合成,还有一个是六,丢了就是我们的装备强化啊,看到每一个npc的话,可能的都可以用类似的方法来分析,那么但是这个扣的话显然要更简单一点。

那么究竟使用了一个框呢,这个主要是看自己的一个思路啊,当然我建议的话实际上用上边这一个发包的这个可能更方便一些,因为我们在更更新这个维护的时候的话,更容易恢复一些,只需要更新这一个扩的地址就可以了啊。

当然从这个库的调用程度和使用简单性上来说的话,我们当然是现在这个货更简单一点,它的参数呢没有上面这个参数这么复杂好的,那么具体用哪一个,后来这个全靠自己去斟酌一下,那么这节课呢我们就暂时到这里。

那么这类的话就是合成物品的时候呢,我们需要放装备啊,还有强化物品的时候,我们也需要也需要放一个装备,到这里还有需要放一个强化石,当然还有这这一个窗口啊,这个窗口,那么这一期我们下一节课呢再接着分析。

这节课呢我们暂时呢就到这里。

P186:200-强化合成CALL相关分析 - 放置装备和材料 - 教到你会 - BV1DS4y1n7qF

大家好,我是虞书欣老师,这节课我们一起来分析一下放置装备材料,那么在放置装备的时候,我们肯定的第一个步骤是要选择相应的装备或者是材料,实际上我们的第一步应该是选择,选中。

那么这个时候我们需要选中背包里面的,实际上我们可以参考31克与32克里面的选中技能与放置技能到我们的技能栏,那么现在我们只是说要放置的技能是要放置的材料,是要放置到活成的窗口里面去。

那么它的第一步的话实际上与我们31克应该是类似的。

那么31克的时候我们当时来分析了有一个机子,228这个机子我们能够选中选中的物品,那么它有一个ECX在这个地方,那么我们来看一下我们有没有更新相应的机子,找一下228放置技能,那么这是它最新的机子。

228这一个我们来看一下。

那么现在它是一个空的对象。

如果我们选中我们的物品之后,我们来看一下这里它就有一个选中的物品,那么实际上我们是把背包里面的物品,它的对象写到了我们的地址里面去,应该是这样,我们来看,再来看一下,31克,这里它是把410里面的。

你看这个对象写到了里面去,我们再来看一下机子里面背包的数字,背包,这是我们背包的数字,那么我们来看一下背包数字里面,有没有对象59P0的,我们可以在这里找到,它是在它的下标的第二个里面。

是59P0这个对象,那么实际上是把对象写到了我们相应的地址里面去,比如说我们选中强化石,那么肯定这里来写入的就是F0P0,这一个这里我们能够看到,所以说我们的第一步的话实际上已经解决了。

就是在像机子里面来写入我们的物品,地址就可以了,进来的时候用,这是我们的第一步,那么这个也是我们的放置物品,可以把背包对象地址写入,那么这里我们也能够看到它的一个变化,比如说我们要选中的是第一个。

我们再回来看一下,第一个是强化石,当然它另外应该还有一个选中的状态,我们再来看一下31口,我们再来看一下,我们选中的是第一个,我们选中的是强化石,那么我们选中的状态。

我们选中的是第一个,我们选中的是强化石,那么我们选中的是第一个,我们选中的是强化石,这个我们可以暂时的放一下,因为我们的代码里面的话,之前的代码里面已经在CNN里面,已经封装了这样的功能。

那么我们这几个来直接分析下一步,也就是怎么把物品放置到我们的相应的装备里面,放置到这个位置里面去,那么我们首先看一下,当然我们也可以参考,参考第3132课的分析方法,通过数据来去立项,那么另外一个方法。

我们就是看在放置装备的时候,它是否向我们的服务器发送我们的数据,对发包的函数来下段来进行尝试,那么一定要注意是我们放下装备之后,这个包才断下的,那么才有效,如果我们还没有放下的时候就断下。

这个时候分析是无效的,执行到返回,那么这个时候会到6E这里发包的函数,我们会到这个地方,然后我们取消一下,再次把它放上去,那么我们来看一下,这个时候的EDX是什么,那么EDX我们看着比较简单。

那么我们再换一个,对象上去,然后我们再来看一下,这个时候我们发现它的EDX的话就比较复杂一些,那么我们主要是看一下后边这一段数据它有没有用,我们把它清零一下,如果是有用的话。

我们这个包的话可能就显得比较复杂,好像后边这一段数据是没有用的,因为我们发现它也把它放上去了,好像有用的只有前面这一部分数据,那么如果是这样的话,我们可以来考虑了,就直接使用发包的函数。

那么发包我们看一下这个是什么意义,这里有一个注意这个数字,那么恰好是背包里面的数字的下标,那么我们取消一下,下标应当是3,我们能够在这里找到数据3,数据3,好的,那么既然是如此的话。

我们今天就用发包的函数就直接的来解决这个问题,看行不行,那么这样的话可以绕过之前31颗32颗的做法,就可以不选中物品,直接把它放到上面,有可能,那么我们再次来进行测试一下,这是第5个。

那么我们来看一下第5个的时候,我们因为后边这一段数据可能是没有用的,我们分析的话,那么有用的可能注意就是在前面这一段数据,那么首先我们把这前面这一段数据放出去,复制出来,复制出来之后。

我们首先打开我们的代码输入器,首先我们要构建这样一个缓冲区,把这段数据,复制一下。

那么这里来替换成,那么首先,我们也是要做好一个站的平衡,那么这里的4组是10字节,一共是20个字节,那么最后我们选APP ESP,加上2的,好,那么之前的话我们在这里会把我们的,亚站的EDX进行初始化。

也就是来于前边的站的站顶的一个地址,ESP就构建好了缓冲区,然后我们传入参数61,然后我们pushEDX,然后再是这里有一个ECX的数字,复制出来,Core4FB_EXL,好的。

我们先测试一下,有没有用,那么我们再次选择一下,那么这一段的话,要简单一些参数发生了一些变化,那么后面这一段0的话,可能也是有用的,从它的变化来看,那么这个缓冲区可能更大一些。

那么我们看一下它变化的数字是什么,之前的指令的话,这里可能是一个指令,后边加14这个位置,这里变成了1,这个是背包,背包的指定格数,那么这里可能是一个物品的ID,这一类的,122,后边的7没有变化。

那么可能后边还有一大串的0,那么这一大串的0可能也是有用的,我们再次测试一下,加0前缀,那么这个时候依然没有用,可能是我们缓冲区太小,我们再添加几个缓冲区,不行,不行,不行,那么这里要加一个10。

这里因为有16个字节,依然没有效果,加一组,这里要加上4个字节,那么说明的话,这种方法的话可能是没有效果,61,那么也有可能它的缓冲区的话比较大,那么我们看一下61的话,大致是到这个地方。

那么后边的话还有一长串的0,那么我们再加上几个0试一下,这里加20,加4个,好了,这里加上8个0,再试一下,這個,(音樂),(音樂),(音樂),(音樂),(音樂),(音樂),(音樂),(音樂)。

(音樂),(音樂),(音樂),(音樂),(音樂),(音樂),(音樂),(音樂),那麼說明這個發包的話,直接這樣發包了可能是不能夠實現的,那麼這個發包的話,可能是另外的一個動作。

它與我們放置這個物品可能沒有什麼關係,好的,那麼我們可以了,這個時候再找一下它的上層擴,實行到返回,那麼到這個地方,這個地方的話參數比較複雜,我們看一下,取消,然後我們再放置這個物品上去。

那麼注意這裡有一個1,那麼這個1的話可能也是我們背包裡面的物品,這裡有個7A122,這個可能是,但是我們上一層這裡好像還有,這裡也有一個數字1,也有一個這樣的關鍵字,那麼我們可以再從上層再找一下。

有沒有更簡單的擴,那麼找到這個地方,這個地方的話,我們發現了與我們31扣,與我們32扣裡面的這個扣的話非常的相似,那麼也是一個16081B10。

這個是放置我們技能的,之前那麼在這裡的話,可能它也可以放置我們的物品,那麼我們再次看一下,取消,裝備,裝備之後我們看一下18,但是這個時候沒有我們的下標這一類的,那麼下標的話,可能是了。

就是說在選中的時候,已經在對象裡邊去了,那麼它只是一個放置的動作,我們可以先測試一下,現在首先看一下ECX的數字,然後中間這裡是18,那麼這裡是0,這裡是1,這是ECX。

好的,我們再次測試,那麼之前的這個扣暫時就沒有用,不吸泥。

不吸油花,不吸泥,然後ECX12769B30,扣,當然調用這個扣的前提的話,應當是要選中我們的物品才可以,那麼沒有選中的話,我們看一下好像是沒有效果,我們選中一個物品,然後在這個時候。

我們就能夠把它放置到我們的強化裝備裏面去,那麼我們換一下,如果是活塵,可能這種可能會有另外的一個扣,或者是另外的參數,那麼是合成物品,那麼這個時候裝備的合成,我們在剛才的這個位置給它下一個段,放置一下。

那麼我們可以發現,合成的話,這裡它是15,這個參數,那麼強化它是18,ECX好像也有變化,沒有,ECX也有變化,那麼這兩個ECX的話,它也是不相同的,好的,我們繼續回來看一下物品的強化,那麼選中物品。

然後我們調用一下這個扣,這樣我們就能夠把我們的物品放置上去,然後我們再看一下放置強化時的時候,那麼這個時候,它是1A,可能是代表它放置的位置可能是不一樣,然後我們看一下它ECX的一些變化,而且這個時候。

ECX EDI,最終也就是EDI,但是40的數字。

那麼我們大致已經知道了,首先我們第一個應當是向228機制裏面,調用相應的放置物品的一個扣,那麼放置之後,我們再來調用一個放置物品的扣,這個就應當是我們的放置物品的扣,但是放置物品的扣。

它的ECX的參數的話,它來源不太一樣,那麼我們這個是我們關鍵的一個地方,放置物品。

那麼這裡備註一下,1A放置強化材料,強化石,應當是腰,這是活塵,腰包,放置強化裝備,那麼接下來我們就以強化裝備為例,來看一下,它的ECX的參數來源於什麼地方,那麼我們來追一下,它的ECX的話。

實際上就是來源於這一個EPI,好的我們以強化為例,首先是放置物品的ECX,那麼我們可以做一個猜測,ECX會不會就是我們228裏面的物品。

看一下好像是沒有關係,那麼另外我們再看一下背包裏面的物品,那麼這個與我們的背包,我們發現了,它的地址離得比較近,好像是,再來看一下,放置不同物品的時候,它ECX的一個變化,EDI,D30,D30。

這裡也能夠找到,然後我們向上找一下,然後這裡的話,ECX我們先分析一下,這一段代碼,當在342克的時候,我們可能也有分析,當時這裡它有一個機子,好像是直接能夠收到機子,那麼我們再往向上找一下。

找一下EDI的一個來源,向最上層的跳轉,向上找,EDI,那麼這裡有一個EDI,那麼我們發現的話,EDI,它在這裡用的話,有一個EDI加上一個410,它是某一個數字,這個EDI。

那麼有沒有可能就是我們的背包的數字,我們看一下,EDI等於D30,不太像,我們在這裡下一個段,試一下,再次讓它跑起來,再看一下我們的EDI,EDI會在這個地方斷下,那麼我們用EDI來加上410。

看是什麼結果,EDI加上410,那麼這個時候什麼也沒有,我們看下邊一句會不會執行,這一句已經被跳過了,找一下,繼續找一下,它的機子,暫時不去分析它的作用,EDI,那麼從這裡來看的話,EDI它有一個來源。

來源於我們的ex+dc,我們看一下這個來源是否對,正確,然後,EDI又加上了一個ex,從ex裏面的去出來的,這個EDI應當是不對的,那麼我們還有一種方法,我們直接用CE來收一下。

那麼我們直接以輕痛副手裝備為例,EDI我們看一下EDI的數值,這個D30我們把它複製一下,這裡什麼也看不到,然後我們用CE來收一下,它有沒有一個直接的機子,那麼這裡我們能夠找到兩個相關的機子,好的。

我們再來看一下,放置另外一個物品的時候,放置強化石的時候,這個機子會不會變,還是D30,說明它是不會變的,那麼這兩個對象的話,其中有一個,它應當是我們所有全球對象裏面的,所有對象列表,31149。

然後我們在裏面來收一下,那麼另外還有一個,311790,那麼證明的話,這個能夠直接收出來,那麼證明這個的話,它是我們的相應的機子。

在這裡邊,我們也能夠找到這一粒的藏鏈,複製一下。

這裡的話能夠找到很多這樣的場面。

我們就選第一個,這個是我們強化裝備對象,那麼這裡我們也能夠看到228這個數字,在它的附近,先複製一下,那麼我們再做一下測試,再放置物品,再看一下放置裝備的時候,它的ECX都是D30,是沒有變的。

但是我們在放置我們的強化石的時候,好像這個時候它變了,強化石的時候,它是另外一個ECX,那麼有可能是這種情況,從這裡來看的話,那麼也就是說裝備來這裡,它相當於是用的單獨的一個機子,而強化石這裡。

它可能是用的一個宿主的方式來顯示的,所以說它過有過的一個機子,那麼我們暫時我們就把它分開來使用,那麼我們在放置強化石的時候,肯定了,這裡還有另外一個機子,再找一下,中國聲音。

那麼我們剛才測試的是所有對象數,DD94,312,DD94,我們看一下能否找到,那麼證明這個是機子。

直接能夠在裡面找到的,因為它是搜索的時候也是綠色的,然後我們選第一個,那麼第一個,我們發現它也是在228的附近,上面是我們選擇的物品,那麼下面它這裡有個機子,當然我們暫時還不明白,它是什麼的一個作用。

那麼我們暫時把它當成是一個全局變量來使用,這裡是放置強化石,好的放置裝備與放置強化石的ECX,我們都已經有了,那麼接下來我們就可以進行響應的測試,那麼首先我們也是,它先放置強化石是不行的,要先放置裝備。

我們先把它取消掉,再看一下放置裝備的參數,放置強化裝備,這裡是18,那麼我們這裡是放置我們的裝備,然後它的ECX,我們需要放置裝備,強化裝備推向ECX,那麼先調用的是這個Core18,強化裝備。

放到裝備的位置,好的,我們先選中一個裝備,調一下Core18,然後我們再選擇一下強化石,這個時候我們需要改變一下它的ECX參數,強化石是這個,當然我們也可以先不改變它ECX的參數,看是否能夠進行放置。

那麼這裡放置強化材料的時候,它也能夠放置,好像,那麼這個機制的話,我們可以如果是這種情況的話,我們就可以任意的選一個,看來也是可以的,我們再試一下我們另外一個強化的機制,9C這個,取消,那麼這裡是18。

放置裝備,還沒有選擇,那麼我們如果選擇了裝備,放在位置不對的話,它也會取消這個選中,這個時候說在這裡的我們一定要對,是18,然後放裝備,然後再次選中強化石,1A,直接就可以了,看來這個機制的話。

它沒有太大的問題,直接選擇一個機制就可以通用,那麼這幾個機制都可以用,我們來進行一下比較,看裡面有沒有什麼不同的,好像裡面也就是它的地址不一樣,它的結構可能都是類似的,所以說不會出錯,這裡是9C。

一個是94,一個是9C,那麼實際上在這幾個地址的話,它都是挨著的,那麼我們還有一個背包的,這個宿主,它都是挨著的,我們好像再來看一下,背包宿主的話離的比較遠一點,31424。

這個是314DD94,不太一樣,好的,那麼既然能用的話,那麼這幾個我們的分析就到這裡,那麼下一節課,我們開始編寫我們的C++代碼,進行函數的一個封裝,功能的封裝,好,那麼我們下一期課再見,本集完。

P187:201-强化合成CALL分析-去掉提示窗口 - 教到你会 - BV1DS4y1n7qF

大家好,我是郁金香老师,这一节课我们一起来分析一下怎么样去掉提示窗口,那么这个提示窗口我们主要是针对在强化合成装备的时候呢,它有一个通知的窗口,那么呃这里可以选择一个下次登录前不再提示窗口。

但是我们自己在编写代码的时候,如果我们放置了我们的装备,但是接下来的这个操作了,就有可能不能够进行啊,比如说我们在放置这个强化石的时候,有这个窗口的时候,我们就不能够进行放置。

那么所以所以说我们在这里呢有两种方法嗯,第一个呢我们是放置好这个装备之后呢,关掉这个窗口,那么第二个呢我们是找到这个相关的地址啊,但是这个应该他们有机制呃,应该它是一个地址嗯,那么我们可以那么最有。

最可能的情况呢是这种啊,那么这里呢他这个复选框的话呃,呃对于这个状态在这个对象里边某一个偏一点,那么我们要找到这个开关啊,让他下一次下一次我们放置这个装备的时候呢,不会再弹出这个通知的窗口。

那么像这个分析的话,我们先整理一下思路啊,那么首先呢我们那么我之前呢也尝试过呃,他这个窗口加载的这个背景,通过呃去访问他想问相应的这个文件呢来进行立项啊,但是没有成功。

那么另外呢我们可以从这些文字性的字串啊,比如说这个需要额外的5%强化的合成几率啊,从这个开始触发了,应该可以回溯到,那么另外还有一种情况呢,就是这个窗口呢它的这个显示呃与隐藏呢,它应该是有一个状态啊。

那么多数情况下我们会在c语言里面呢会用这个醋啊,也就是真或这个假这两个数字,也就是一和零这两个数字来表示一个窗口的一个状态,那么我们也可以从这两个状态呢来进行分析,那么我的思路是这样的啊。

首先我们通过肯定找到他,他的话应当来说有多种的方法,那么我们前面的课程里边,我记得呃有一个就是窗口在确定或取消的时候都会调用一个库,那么从那个库那个地方呢应该可以取得这个窗口的对象。

然后呢对它的对象来进行一些数据的搜索,应该能够搜索到,那么这节课呢我们探讨一下另外的方法啊,嗯首先呢我们从这个通知窗口的一个显示状态来判断,那么我们做一个假设哈,应当来说的话,这个窗口对象。

那么这个窗口对象里面有一个偏移,或者是它的这个偏移里面,那么还有一个偏移,那么里边可能会有一或者是零这两种状态来表示我们的窗口是否显示,那么我们通过找找到这这个状态,我们尝试找一下啊,如果能够找到的话。

然后呢,我们再来看一下其他什么地方有开关来控制我们的这个窗口的一个呃,显示与隐藏啊,他肯定还有一个条件的一个开关这一类的,那么我们先搜一下窗口的状态,这个时候窗口呢这个通知窗口呢是显示的。

那么显示的话我们比如说我们这个修window里面,那么它一般呢会用一个非零的一个数值和零来表示,也可能是用激活呢来表示啊,它的这个参数,那那么我们可以尝试来搜一下,那么现在是显示的。

我们就搜一下数值的一,然后我们点取消之后呢,这个时候窗口它隐藏掉了,那我们搜一下数字零,然后我们再次放入我们的这个装备,然后这个时候窗口呢会再次的显示,再次升一下数值的一比。

但是这个时候呢选项呢还相当的多,然后我们再取消掉,这个时候应当是数值的离,那么最后只有这两个数值,那么究竟哪一个数值是真的,或者存不存在这样一个开关,我们输入一来看一下,那么在输入里再看一下。

输入一的时候,我们已经写字了,这个窗口证明我们找到是正确的,那么我们第二个数字,第二个数字我们改一的时候呢,发现它没有任何的反应啊,那么说明的话前边这个数字是我们窗口相关的,然后我们再找一下。

那么既然这个是一个窗口的开关,那么可能的话它是在我们的这个窗口的,某个窗口对象的某一个偏离里面,那么我们找一下它的上一层,上一层的地址,那么在这里呢我们能够找到两个地方哈,呃灵活14228。

这个地方228288,好像我们还有一个地方是,那么这里呢他写入了一个数字一啊,之前可能是这里有个数值定理,那么这里呢我们还能够看到它是一个bt类型的bt类型,好的既然我们找到了,那么这里的bl的话。

我们看到也是负值零,关掉之后呢,它就是像这个228里面写出一个数字零,而这个28的话,e s i,那么接下来呢我们就用og来进行操作,那么这里是显示我们的这个窗口,哈哈哈哈。

好的这个时候我们把c一来退掉,那么接下来呢我们的用我们的o d来打开。

那么我们最终的目的呢,事实上它一直呢不会写出这个提示的窗口。

而不是说要关掉它,要关掉的话,我们从这里来看到,只要把它它的这个显示状态设置为零的话,实际上我们就可以关闭它,那么我们可以直接用这种方法,实际上已经能够实现我们的目的,那么这里呢后边的这这些分析呢。

我们是纯粹的一个技术的一个探讨。

那么我们找一下这里有一个eb x,看一下e bx的来源,那么我们发现的话,它的这个e bx可能是来源于我们上一层的这个参数,我们在这里下一个断点,那么我们发现好像很多地方都调用了这个库啊。

那么我们再来看一下另外一个另外一个孔,这里是显示,但是这个扩的话,它应当是一个类里边的一个公用的一个库,所以说很多地方都会调用它,点取消的时候呢也会掉落,那么我们先取消掉,那么先取消掉之后呢。

我们再次在这里下断再尝试。

那么我们再回过头来看一下,刚才的这个地址上,那是往这个地方写入了数字一。

那么我们对这个地方来下一个写入的断点硬件断点窗口的状态,这里啊这是显示窗口,然后我们再放进去,那么这个时候我们看一下,首先呢它是写入的数值平,但是为什么不是写入的数字一啊,这个我也不太清楚啊。

那么我们转到数字一的时候再断下,那么这个地方呢写入了数字一,那么我们看一下eb x是多少,e b x的话是这个数值,那么这个e b x的话就可能是我们的窗口对象,那么很有抗性。

啊那么这个可能是一个窗口的一个对象,什么什么是gv这一类的,那么在这个窗口对象里边的话,可能就存在一个数值,也就是我们之前的这个复选框的一个状态,就是下次登录前不再提示这个窗口。

那么可能的话在这个里面呢它也有一个灵活一的一个数字啊。

刚才我们分析了它是一个一字节的,那么这个时候呢我们可以呢呃选字节类型,然后从这个地址开始开始进行一个搜索,然后我们怎么搜出来,因为这个时候我没有选中他这个复选框没有选中,没有选中的话。

一般我们会用零来表示,那么我们找一下零。

好取消之后我们再次找零,然后我们再次放入的时候啊,这里我们选一下,点一下这个复选框,让他选中,那么选中的话应该就是一了,我们找一下有没有数值一啊,但是这个时候没有找到,没有找到的话。

我们需要重新的分析哈,那么需要怎么重新分析了,但是这个时候呢,由于我们下次登录之前,它都不会显示这个窗口,所以说我们需要小退一下游戏,再重新开始我们的测试,那么强化物品的时候啊。

我们在这个时候会再次出现这个窗口,我们看一下它的机制啊,这个时候他变了,可能这个地址已经变了,但是我们通过刚才找到这个代码。

看能不能够找到,嗯再按按照刚才的方法在搜一下,去把这里的地址改回来,尝试这个想法,那么首先呢我们也是搜一下窗口的状态,收一,然后呢我们取消掉收离,然后呢我们再一次显示这个窗口啊,再搜一下数值的一。

再取消掉是数字零,我,再搜一下数字一好,最后来出来的两个,我们改一下,第一个,这个时候能够实现我们窗口的一个隐藏,那么我们这次呢我们先把这个对象的一个机子把它搜索出来,看有没有相应的一个机子。

那么我们先把这个显示隐藏的地址下一个访问断点,那么这个时候呢我们可以在这里得到啊,呃是1x加四零,那么与我们上一节课所分析的那个268好像有一些不一样,好的我们找到了第一个偏移,ex加四零。

我们把ex的数字来记录下来,那么这个ex的话有可能是我们的窗口对象,那么也有可能更上一层的这个机子呢才是我们的窗口对象,那么我们找一下ex的来源,那ex的话它来源于我们的e si。

那么我们看一下ei在循环里面有没有变化,那么e si的话,他在这里的话应该是在,在一个对象列表里面啊,这里是它的一个初始地址,9518啊,我们看一下还有没有其他的地方存放了这个e x,让它运行起来。

我们用。

用c来搜一下,选四字节,那么我们这里呢会收到,好几个地方哈,这个的话可能因为我们所有的对象呢,都会存放在一个所有对象机子里边,这里如果只有一个的话,那么证明的话我们这一个对象的话呃,可能不是我们的。

就是说它可能呢存放在另外一个对象里面,那么可能是这里面的某一些像才是我们要找的这个对象,那么我们再重新下一下段进行尝试,那么写入一的时候啊。

我们先把这个窗口关掉,那么在此呢我们对刚才的地址来进行下段写入的时候,我们,下段,然后放入我们的装备,那么我们发现了这个时候呢会向里边写入一个数字的一,那么也就是我们显示窗口化。

那么这里呢既然是这个这个显示窗口的话,那么这个扩的话,那么可能就是一个显示窗口的一个扩,那么我们按ctrl f9 返回到上一层,那么从这里呢我们也能够看到啊,这里谱写了一个一。

那么可能就是这个可能就是类似于我们的修window的这样的一个函数,那么我们把这一段呢给复制一下我们的分析成果啊,就是,那么这个时候我们找到了第一个偏移,实际上也是。

然后我们再按ctrl f9 看一下上一层呃,然后呢会执行到这个地方,这样的一个括号啊,我们在这个地方下一个段,然后把刚才的这个断点呢取消掉,我们再来看一下,那么我们发现每次显示窗口的时候。

它都会调用这个库,这个库进来之后呢,呃才会去调用我们的这个补习一,那么也就是说它在显示这个窗口的时候呢,它会进行一个判断,就是判断我们的那个复选框它是否选中,那么如果是选中的话,它就不会显示这个窗口。

只有在没有选中啊,也就是复选框的状态,500的时候,你发的时候它才会执行这个修温的,那么在这之前呢,这里呢它有一个判断,那么有可能是这个地方接一会跳到上面来执行,那么我们在这个库的同步啊进行一下判断。

那么可能一个关键的一个数据的判断可能就在这里边,那么也可能是在上一层库,是上一层扣的,可能性可能还不是很大,那么我们点取消,再次我们放置装备的时候呢,他肯定会去判断一下那个复选框。

我们f7 跟进去跟进去看一下它的一个走向,那么这里呢我们发现了它就跳转到这下面来执行,那么如果是不跳转的话,一直会执行到这个地方,就不会调用这个新window好,那么就是走的另一种状态。

好我们按减号退出来,那么这里呢极有可能就是一个关键的位置啊,这个地方,那么是不是关键的位置呢,我们可以再次啊在这里来选择,下次登录的时候无提示啊,该窗口,那么也就是选中这个复选框再取消。

那么下次的时候我们看它也会调用这个显示的调用这个库,然后来进来进行一个判断,但是我们发现他判断的时候还没有执行到我们刚才这个问号这里,他从这里呢就直接跳转到后边去了,那么这一段呢就没有被执行。

再来看一下,重新执行,f7 进来,然后这里的跳转呢他直接呃跳转的条件呢就成立了,那么这里呢我们看它是这个29c这个地方呢等于厘米,那么说明的话这个状态呢它被改变了,那么极有可能这个r9 c嗯。

这个状态一致觉得就是我们的那个复选框啊,因为他这个时候为零了啊,我们看一下,dcx加二九,29c啊,这个地方,哦它是唯一了啊,这个地方呃,唯一的话是选中,选中之后呢,他表示不显示窗口,这个地方唯一。

那么我们把它改为零试一下吧,改为零的话,也就是说没有选中这个复选框,要显示这个窗口好,我们再次,啊的确这个时候呢我们的,但是这个复选框呢这里也是选中的,但是呢这个窗口呢它又显示了,应当是来说的话呃。

这个状态复选框的这个选中状态与他的呃关联的话,另外还有一个偏移,可能还有一个变量,但是呢我们找到的这个29c的话,它可能就是我们啊一当就是我们控制的这个标志啊,那么如果我们这里呃选过一了,那么他都不会。

那么下次的时候呢,它都不会显示这个窗口,相当于这个窗口呢就会取消调动啊,不会显示好的,那么我们来找一下这个29c的机体,那么29c的话它来源于ex,那么ex我们按减号退回来,来源于这个是ex加31c啊。

那么这个呢就是它的机制,加上三角c加上29c,那么既然是加上这个r9 c,这里它是我们的这个窗口的复选框的一个关联关联变量的话,那么加上314,这里可能就是我们的窗口对象,那么极有可能这个就是窗口对象。

好的我们再看一下,那么这里呢它的类型呢为零,e我们把它的这个数据来复制一下。

那么这是窗口对象,29c呢,这里是嗯,下次是在写字时窗口工,那么可能是这样的一个标志,那么真正的我们看一下,那么另外我们还刚才分析的时候呢,有一个一或零,那么它与这个一和零有什么关系呢。

那么是窗口对象的话,它的地地址的话,2002。8,那么这里的话他们相相比有一些远。

加上90,那么我们不选中啊,我们把窗口显示出来看一下,看一下两者是一个什么关系,那么这里呢我们暂时不用下断点,让它运行起来,那么在这个时候的窗口是显示的,那么这个是窗口的显示关闭。

那么我们对这个r9 c来下一个断点看一下,看一下ex,那么ex的话等于我们这个数值,2。8,但是我们刚才的删掉删掉我们的端点,看起来两者之间的话,暂时我们还找不到有什么关系啊。

但是理论上这两个应当是有关系的,他们相相离太远了,但是我们注意到这里这个地方有一个2。8什么什么的,我们看一下,这里有个2。8,七比428,这两个数字好像离得比较近,再看一下前面,那么我们直接找一下。

我们再看一下它的上一层。

那这里很奇怪啊,好像他们之前两个找不到什么信息啊,我们再再从刚才的这个地方下一个段试一下。

那么这里是选显示我们的窗口来自于ec x的280,而e4 x来来源于我们的上一场,那么我们从这个地方回去看一下,ex,014x加280,那么找一下他的机子吧,可能就能够找到它们之间相应的关系,二。

那么按ctrl f9 ,那么我们看一下它的ex是多少,那么这里的话好像他的e c x呢,就是我们之前的这个29c什么什么的,那么再回来好像他们之间就有关系了,嗯这个就是来源于ex加31c。

那么我们替换一下,0t和69680好。

那么这样的话我们就能够找到他们之间的关系了,这样的话它引用外的一个机制出现,那么这个是窗口对象加314,那么从这里来看的话,好像这个280呢才是我们的这个窗口对象,那么我们窗口对象的上一层呢。

它这个29c这个地方呢才控制它呃,是否能显示我们的这个窗口,这是我们窗口的上上上层对象啊相隔,那么也就是说在它前边,像280这个地方才是真正的我们的窗口对象,那么这是窗口对象的一个,附录附对象。

啊然后呢它的这个这里呢加四零啊,这个窗口对象里边再加我们的4年才是窗口显示窗口,好的大致了,这就是我们这一节课来分析的成果,那么我们可以通过它负对象三要塞这个地方。

3c加29c这个地方来控制这个窗口的一个显示状态,321。

好的,那么这节课呢我们暂时来就讨论到这里,那么下一节课呢我们继续编编写我们的代码来进行测试,嗯对了,我们下一节课应当是要分析这个确认的时候啊,才是真正的调用我们的强化啊,合成装备的这个括号。

那么我们下一节课呢就分析这一个括号,强化啊,强化我们的装备,好的,那么这节课呢我们暂时就到这里,下一节课我们再见,哈哈,算了挺好吃。

P188:203-封装强化物功能-放置物品部分 - 教到你会 - BV1DS4y1n7qF

大家好,我是郁金香老师,这节课呢我们封装强化啊物品的功能,那么首先呢我们封装的是放置物品部分。

那么我们打开198克的代码。

咳。

那么首先呢我们展开我们的结构单元,在我们的背包单元里面的添加相应的函数,嗯嗯嗯,二那么放置在这里之后呢,呃声明了这个前置的函数之后,我们在cpp单元来添加相应的代码,到最后,那么代码了。

这里我已经为了节省这个时间呢,我已经把它写好了,嗯我们一起来看一下这部分代码的逻辑,那么首先呢我们也是呃会传递一个参数性能。

那么我们这的强化窗口呢,它只能放置两类物品,三对啊,一个是幸运符,一个是装备,另外就是强化石啊这三类,那么我们之前分析的时候呢。

它这里有一些区别,那么也就是我们在传递参数的时候呢,这两个都是零,那么中间这个参数呢有区别呃,如果是放置强化石的时候呢,这个参数呢是1a那么如果呢放置强化装备的时候呢,这里是16进制的0x18 。

那么实际上这两个参数的话,它是来源于我们的这个对象列表的一个机制啊,那么我们之前的一个分析的话,比如说我们呃放置技能到我们的f一到f 10窗口呃,这个技能栏上面的话。

那么实际上就是我们的这个技能栏的这个数组的机制,那么实际上我们嗯把这个装备放到这里边的话,这里呢一共有五个,它可能也是一个数组的形式,就是这个数组的机子,但是呢我们这里的话呃可以了,去找一下他的机子。

这个很简单啊,直接搜一下,在c一里面呢,他的机子应当就出来了,当然每次这个是变动的啊,里边的机子的这个数字呢不会变动,那么另外一种偷懒的办法呢,就是我们呢呃可以替换掉款。

就用以前的这个f一到f 10的这个机制来做它的啊,但是这两个参数的话,我们就不能从这个f一到f 10的这个对象列表的机制里边取,取出来的话,肯定它就不是1a或者是幺五。

那么所以说这两个地址呢我们就需要自己来写,当然如果我们是按照这种方法来写的话,我们就需要来更新更多的机制啊,这个究竟怎么决策的话啊,全看你自己啊。

那么我这里呢是直接就用的呃f一到f 10的这个机制来进行替换的,那么这里的话我们就用的这个f一到f 10的那个机子,然后呢但是这两个呢中间这个数值呢我是自己控制的啊,另外呢我们对它做了一个判断。

那么如果是强化石来放,放置的物品是强化石,我们这里的滤芯呢就是传递的1a那么如果是放置的不是强化石,可能就是装备啊,那么我们就是幺八这里传入的数字,它来源于我们的tab退出来进行一个压榨。

那么在之前的话,我们肯定还需要取得一些呃信息,也就是在我们的呃这个选中物品的时候,当然我们这里的话还需要来为我们的这个呃背包啊,背包的物品的话添加一个属性,也就是对象的地址。

因为我们在我们知道我们在这个选中物品的时候啊,那么呢需要写入像288这个地方呢,写入我们对象的地址,那么所以说在这里呢我们需要修改一下结构单元这个背包的属性,这里哈我们需要添加一个,嗯背包对象地址。

那么需要添加这样一段,那么在初始化的时候呢,我们就把它写在里边,在get到里面来修改,好在这个地方的话,我们需要来认识,关注,那么在这里呢我们就赋值为这里取出来对象的数值,这就是我们对象的地址。

那么有了这个对象地址的话,我们呢就可以尝试编译生成我们的代码啊,移到最后再来看一下我们的待遇,那么在这里的话,实际上这个扩了最下面的代码就是我们的放置物品,而这里的话这个参数呢就是放置物体的一个趋向。

啊这里呢就是我们放置物品的一个类型,相当于,在这里呢我们是先啊查找并选中指定的物品,那么他也是来通过这个判断物品的名字,便于我们整个背包列表找到之后呢,然后呢我们先选中这个物品啊,也就是相当于这一步啊。

那么第二步呢我们才是旺到这个这个这装备强化的这个列表里边的,放置这个物品,好的,我们接下来来进行测试一下,好调整工作目录之后啊,然后我们调用一下这个放置物品到强化窗口的后,那我直接在这里。

你看看后面的代码就不会被执行嗯,首先呢我们是放直装备,那么我们看放置一个什么装备,比如说我们先找到这个青铜护手,好然后呢我们再放置第二个装备呢,就是我们的强化石,这支线呢我们给它一定的反应时间。

那么我们先尝试一下,不加实力,咳咳,点一下测试,那么但是呢这个时候它会弹出这个窗口化,我们可以不管它,但是这个时候我们的这个装备和强化石呢,已经被放置到我们的这个强化装备列表里面去了,好的。

我们再来尝试一次,那么我们可以做一些更改,把这个相应的对话框呢给它取消掉,那么之前的话我们有分析出一个机子在这个地址啊,这里呢我们写入一,那么下次呢它将不再显示这个窗口,二。

那么首先我们看一下这个机子是否还能够用,那么我们发现的话,这个机子的话,他现在已经不能够使用,这个是字节的,好像还是,那么我们再来找一下这个地方。

哦还要加上一个四零看一下,显示窗口,31428040314,284246应该是这个吧,这个机子还能够弄,那么我们选一再来试一下,那么这个只是我们复选框的显示窗口,应该是复选框状态,314280。

那么我们再来看一下另外的判断是29c这个地方应该是vc x,290,我们再来看一下314294,那么这里呢应该写入一好像就是不显示,我们写入零的话,就会显示这个窗口,29c我们把它接入一下,a,八。

那么经过测试的话,这个唯一最下边的这个为零的时候呢,表示不显示啊,一明确,它是互相思维,确实,那么零毕竟这个组合的话是显示,哇这个是窗口的一个显示,应当是不是负选框啊,这个这个问题的话。

窗口它就不显示了啊,那么最重要的应当是第一个发现啊,第一个一定要为一好的,那么我们写一下呃,顺便看一下在机子单元是否有这个机子,啊那么这个机子呢是存在的。

那么这个机子的话就是我们之前的f一到f 10的这个ex啊,这个也很奇怪啊,嗯那么可能我们的这个取名呢有一些错误啊,那么我们把它替换一下,啊,那么后边这个的话是无关紧要的,可以不行啊。

那么我们先这样做一下测试,把它移到我们的日常处理里面,好再次编译生成一下,哈。

哈哈,好的,那么这节课呢我们暂时就写到这个地方,那么下一节课呢我们再来呃,封装这个强暴国产的这个库啊。

P189:204-封装强化CALL - 教到你会 - BV1DS4y1n7qF

大家好,我是郁金香老师,这节课呢我们一起来封装强化的。

封装强化课,那么上一节课呢我们拼装了啊,放置强化物品的相关功能,那么这节课呢我们把它进行完善,那么最终呢要强化物品呢,还需要调用这一个扩,当然我们也可以直接把这一段汇编代码转换成我们的c语言的代码呃。

直接简单的进行一个转换,那么另外一种方式呢,我们可以调用我们之前已经写好的相关的函数。

嗯嗯。

首先呢我们也展开结构单元,然后在那么在这里边呢,我们可以看到这里有个w的cd,专门是用发包的,那么我们可以直接用这个函数来来替代我们的汇编代码好,那么我们首先呢添加强化物品的扣到我们的背包结构里边。

然后我们到cpp单元的最后添加我们的代理,这样写是可以的,在这里呢我们把它16进制写一下,那么这样写是可以的,但是这样写的话,我们很多机子的话呃不是很方便维护啊。

那么实际上我们之前呢封装了一个相应的扣啊,当然我们也可以先测试一下,用这个空,实际上在这个地方我们已经有一个呃封装了一个扩啊,刚才我们看了一下,那么这个机子的话,这个才是我们最新的机子。

f38840 啊,这个没有变,38840,好的,我们先测试一次,然后在这里放置之后呢,我们调用一下强化物品,那么经过这三个步骤的话,他每执行一次的话,就会强化一次这个青铜复审。

当然这里呢我们还没有加上一些其他条件的判断,比如说只强化到几阶段啊,因为我们相应的这个属性还没有分析,那么我们直接啊这样呢就可以强化一次,那么但是呢现在这一次呢他是强化失败了啊。

好那么可以继续强化下一个物品,那么这个时候呢我们可以把这个物品呢放到前面来啊,换一个窗口来测试,或者是给它加加上一个条件的限制,那么也就是说呃当某一个物品呢他已经强化过几次的话。

我们就绕过它可以加上这类的条件的一个判断,不然的话他会一直的强化,而且我们发现如果这里按快了的话,它必须要有一个时间的一个建构,如果我们按的太快的话,它可能呃就不会被执行,会卡在这里啊。

中间呢它需要有一段停的一个时间的一个间隔,放置这个强化物品之后,那么这里呢我们最好加上一个实例,好的,那么这样写的话也是可以的,我们最好的我们说的我们还是调用相应的这个库来实现这一段代码,把它关掉啊。

我们直接调用一下这个库就可以了,那么这里呢我们需要进行一个缓冲区,然后这里呢我们可以来直接给他初始化轻盈有几个数字,然后我们这里来缓冲区里面最主要的就只有这两个数字,那么这里呢相当于是我们的数组名啊。

这里是数组一,当然这个是针对我们四肢解的,那么所以说这里呢我们要用一个四字节d word的一个指针,为此向他进行一个转换,那么转换之后呢,它的第一个数据,就是我们站点的这个数据,注意是这样赎回去的啊。

因为先压战的他在底部啊,最后压战的呢他才在顶部啊,在一个站,那么这是它的第二个数据,好那么这就是缓冲区的第一个参数,那么从这个地址也可以传这一个,那么这两个呢实际上地址是等价的啊,等价的。

然后第二个就是它的一个大小,或者直接传这个常量米x61 啊,进去,因为这里的话它的参数呢要求是0x61 可能改变的话啊,会造成不成功,那么我们也可以进行一下尝试,那么这样写的话就要简单很多啊。

要简单很多,不用去管理这个机制,那么以后这个机子的话,我在这个地方进行管理就行,那么这里也做了相应的异常的一个处理,好的,我们再来看一下青铜复审,啊强化到四阶段了,强化到五阶段哈。

再强化的话就可能失败了啊,这个手机没有,好的,那么我们来改一下啊,看一下这个缓冲区的数值是否有这个影响,做一下相应的测试,比如说这里我们传大一点,传承欺凌,看会不会影响到,那么在这之前呢。

我们需要去买一个啊青铜护手到凌霄龙这个地方,是不是快下,那么看来的话呃这个数值的话应当就是一个缓冲区的大小,那么我们把它改大了之后的话,它也可以使用啊,所以说这里的写好的话。

我们就用这个size of size of,那就再应当是一个缓冲区的大小,那么这里呢我们还是它是多大的,我就给他写为多大,这样是最好的,那么在这里我们测试完成之后呢,我们再来测试一下啊。

嗯另外添加一个按钮,把这一段代码复制一下,那么这里呢我们换成皮肠修,也就是这个物品啊,那么我们再进行一下测试。

当然我们也可以把这三个呃扣把它封装成一个啊一个功能函数啊,就是强化的一个物品,只强强化一次啊。

那么这个时候呢我们看到能够强化一次,好的,那么这节课我们就讲到这里,那么下一节课呢我们分析一下这个强化的阶段的这个属性是1234,因为大家说呃很简单啊,这个属性我们直接呃这节课呢我们就把它分析一下。

或者,还是留到下一节课了啊,或者大家自己先下去分析一下,那么我们到时候到时候呢嗯在进行这个物品合成的呃功能的封装,那么物品合成的话,因为它涉及到的这个属性呢要多一些,可能的封装起来呢要稍微复杂一点。

好的。

P19:030-分析技能列表 - 教到你会 - BV1DS4y1n7qF

大家好,我是郁金香老师,那么今天这节课,我们一起来分析一下技能列表,为后边我们使用技能方面的功能来做准备,那么进入到游戏,我们打开全部功能里面有一项是工,那么这里呢就有一个技能列表,我们使用的时候。

需要把技能里边的相应技能呢,移动到最下面的快捷栏里边,然后呢再选中怪物在进行相应的攻击,可以鼠标右击啊进行一个攻击,那么首先呢我们要取得这个对象,数组里的对象,然后呢往这个地方来写作。

那么我们先分析一下这个对象数组,那么之前我们分析过啊动作的这个数组,那么你们也是选中我们的对象之后呢,这里鼠标呢会变会有一个相应的图标跟随,那么实际上呢是有一个变量里面呢,它存放了这个相应的动作的对象。

那么今天我们这里也是一样,我们按下鼠标左键之后呢,它也有一个对象,保存到某一个变量里面去了,所以说我们可以用c一啊,来搜一下这个相应的变量,那么收到这个变量之后呢,我们就可以慢慢的追到相应的技能列表里。

那,么我们重新扫描一下,那么开始扫描的时候呢,它是一个未知的一个数值,然后我们选中了一个数字之后呢,它是一个变动的数值变动了一下,然后我们把它放回去啊,再取出来,那么这个像这个变量里面写入的对象呢。

它没有变化,我们是未变动的数值,然后我们放回去,它放回去之后呢,一般我们那么前面我们分析动作的时候呢,它是用零来表示的啊,会选中对象,那么我们再搜一下,可以尝试一下声明,然后来选中这个对象。

再放回去再声明,然后再选中这个对象,那么收大于零的数值,然后收未变动的数值,因为这个时候我们没有选中其他的技能,没有去改动这个变量里的值,啊然后再放回去,放回去之后,我们再收你,然后再选中一个。

那这个时候还没有真正的选中啊,那么这里呢它有一些数据出来了,我们还可以把它过滤掉,那么也就是前面的这一堆的数据,我们全部都可以给它过滤掉,刚才在变动图,那么这个时候我没有选中的,这段时间我们也把它删掉。

或者这里我们再搜一下精确数字零,然后我们选中一个数字,那么选中了之后,后面我们赢的这一段呢,我们那是算掉,你要收大于比零大的一个数值,然后放回去,这个时候呢我们应该收零,那么中间这段它没有变化的啊。

这三个数字呢我们拿出电,选中啊,那么后边这几个呢双掉会变化,这两个双掉啊,最后就剩下这几个数字,我们看一下这个数值是多少,用16进制显示一下是c开头的,那么然后我们给它放回去,放回去之后,这个时候变化。

再选中一个吧,有大的数值,然后未变动的数值放回去,然后再选中它还是会变动的数字,去死,搜数字零,好这几个数字我们都添加进来,看一下这个,然后我们全部用16进制来显示,那么这几个呢都是以c开头的哈。

那么可能呢都不是对线的这几个数字,而且是相同的,在变化不断改,那么这几个数字在变化的数字我们删掉,这个一也删掉,好那么再选中一个对象,第三方再选中第一个对象,既爻画,那么我们查找一下访问这个第几个代码。

那么选中之后呢,他写的是二八,然后我们停止看一下,那么从第一个开始看,我们找一下周围有没有数组,第二个,第三个,第四个,第四个,在这里我们找到有一个数字,但是这个数组呢它这里ex写下呃。

一个对象加一个偏移,那么这个e4 x来源于这个机制,那么这个ex呢来源于这个列表里410,这个列表的话我们很熟悉,还有找这个动作的这个机子,它都有相应的数组的,都有一个410的一个偏移。

那么这个的可能性的话非常的大啊,那我们先把刚才的,这个记录一下,一个是28,这里面取出来一个对象,还有这里面有一个410,那么关掉我们的声音,那么接下来我们用lp来看一下,未来我们还有我们要看一下呃。

刚才这个是有名,这里他e d i它的机制是多少,再来搜一下。

放回去之后啊,这个地方我们看一下详细的信息,那么详细信息e d i的数值呢,我们把它复制出来,e d i等于这个数值,npi也就是这里的机子,那么我们搜一下这个机子,它来源于什么地方。

那么把这两个绿色的添加进来,这两个绿色的就极有可能就是鸡舍,它来源于这个地方,有最终我们这个数组的一个机制,在udi的来源,那么另外一个呢我们来看一下下边这个,那么访问它的地方。

那么我们看一下访问他的地方呢,又到了这个740里边去了,它又是一个相应的一个数值,相应的一个数据啊,所以说这个的话它不是我们的机子呃,这个更像是ex神是加什么什么多少,更像是我们之前的那一个呃。

所有对象的那个数据,当然这个我们也可以把它自己抓下来,另外一个对象的话,它是在两个地方存在,我们之前分析了啊,它在所谓的对象里面,也存在了这样一个呃机制,那么接下来我们用o p来查看。

那么首先我们到到这个地方,看一下它的机子,数组的机子,那么它的机子就是这里边的这个数字,那么偏移呢就是这个410啊,这就是一个数组的下标,加410,加上4c下标,那么他一共有一个两个三个四个。

五个六个八个对象,那么我们看一下,能123可能在前面的也算上了,或者是在后面的也算上了,那我们看一下,进去看一下它相应的对象的名字,那么他对象的类型呢,我们发现呢这个是1b哈,那我们看一下第二个。

第二个有点奇怪,我们看它的这个呢是ec,为什么这两个不同,那我们再看一下第三个,第三个,它的这个加八的分,路边偏移的话也是1c啊,进入对象,那么我们跟他说一下,加八的偏移。

它的分度确定是1b50 x1 c,当然为什么会有这这样的区别,那么我们先看一下,好像第一个它的名字,这个叫疾风刀法啊,这里有个刀客,那么看一下,看看这个地方是六八个左右,这里加一点b,然后五四。

那么5c这个地方,那么与之前我们找的对象,和他一致的,都是在这个地方是对象的名字嗯,那么后面这里呢它还有一个九开始的,这里一个刀客是对象的直列啊,那么这个是大概是加编辑左右。

还有差一点b10 b一这个地方,这是对象的啊,应该是我们的玩笑的,或者是技能的技能所学实验好,那么我们这是第一个,那么第二个呢我们再来看一下,这里是刀客加50这个地方疾风烈火。

那么我们看这是第几个疾风烈火,那么疾风烈火是这一个,那么第一个的话疾风刀法是这一个啊,再看一下家里的这个地方是疾风刀法,那么这样呢我们就把棋吹分开了,这个疾风刀法呢是一个分类,真正的技能的话。

它的分类的话是ec,在前面的这个分类呢是1b是这样来的,那么我们看一下,第四个是多少烈士刀法啊,那么我们看一下主题,看一下它的分类也是1b应该是拿一本书,这是灭世刀法,在后面的是一个灭世屠龙。

这四个平方好,那么我们大致清楚了,那么1b呢是我们的技能的一个人,又是一个技能的一个分段,那么一岁呢是我们的嗯技能对象啊,的一个分论,这个呢我们说直白一点呢,就是前面讲那一本技能书。

记得出在后面呢是进入对象,那么我们看它里面一共有几个对象了,哈哈哈哈哈哈,这里有1234678个对象,那么八个对线呢就应该是前面的这八个,那么后面这里还有四个呢,我们看后面还有个啊,后面这里才还有四个。

那么中间的呢他没有出来就是0米,那么一共有12个技能,相当于是啊,这前面的这个书算上这个书,算上他一共来这里面8494,应该是36啊,那么我们加上加上30,这36的话,843423 14。

这里过了再来看一下这里,123412345678,884 32的最后那一个的话,应该是742 18 28开,好家,但我们这个是16进制的,16进制的话,它应该算算成我们的幺六,也是1a1 b b。

这个地方开始恰好是这1b1 c,这个地方是后面四。

哎哎哎哎。

那么我们分析出这个列表的基址和偏移,出来之后呢,我们再把它的属性给他备注一下,到5c啊,b1 ,还有当然嗯加零四这个点是我们的,也就是这个数据的啊,一个下标这个大数组所有分类的,在这个地方。

31c e740 ,就是这一句,我们再来看一下,当然还有一个属性,应该还有一个属性,之间的话,它应该有一个区别,比如说122个他是学的,第三个他没有学,那么我们把这个数据下标改一下,一,dc啊。

这个是疾风刀法,4x2,这个也是疾风刀法刀口啊,几乎段位,再看一下这个对象是多少mic,那么这两个之间的话,我们的三和四之间呢,它应该有一个二和三,他们两个之间应该有一个区别,那我们再看一下。

我们把这个这一段把它复制下来,把前面这一段,那么复制下来之后呢,我们把它放到记事本里面。

也就是,第三个,那么实际上它是第四个啊,下标13名就是这个这个疾风残影,他没有学,啊疾风残影,那么我们看一下这里面的数据,他们之间学有没有学的之间的,他们有一个什么区别。

试一下相关的数据,然后再打开一个记事本,调整一下,我们做一个比较吧,那么首先是前面的这个都一样差不多啊,然后是前面的一样的,我们删掉f f,然后设置里一个一,表示这个地方它不一样啊,学英语没有学的啊。

嗯除了腰射这里,但是他低位都是一,那么后面的这里这里这里没有些不一样的,零二,所以这里呢就是我们的名字,那么50之后呢,我们再来看一下,未学的可能是零啊,那么学到的他应该用一来表示,那么在后面这一篇呢。

还没有看到哪里有一个数量统计,那么就这个数字呢,还可以可能会做一些区分。

我们看一下你设这里是什么,加二这个位置,是一而三这个位置的医生,现在他也变成一了,这个数字可能是在变化,重新把它抓一下,我们从前面的,我们把这个数据做场面中,或者我们还可以这样,这样是最方便的。

我们可以呢,呃你这个数据三为例啊,之前我们是没有学,那么学了之后呢,它有一个数据的一个变动就可以搜到了,应该那么比如说现在没有学好,那么我们搜一下零,等一会儿我们再搜一下一,我们用数据来看一下。

那么先看一下它的机子,这是我们的疾控产品啊,现在这个疾风产品呢他没有学啊,没有学,我们附加进调试器,然后呢我们在这个范围搜一下,搜一下一字节的零,当然这个时候应该是,我们应该把它复制到这里。

收益自己的名义,那这个时候呢应该是有很多数据很多,那么我们可以跟它限制一个大,大致的一个范围和输入的时候,因为这个一个对象呢他不可能再大太大,那么这里我们给它设为2000字,几是16进制的2000。

那么在收你这个时候就比较少,那么学起来之后呢,这个数字它就变动了,就应该成为一,那么我们看一下f离他最近的,就是这个还有f57611 变动的,就只有这几个数字变动了,那么我们再看一下啊。

这个与它的偏移有多远,然后我们替换成刚才查找的这个,他是第一位,这个时候为一了,是1f6 ,这个地方我们用dw来查看它,呃整形完整性啊,那么我们就能够看到ef 6这个这个地方呢。

他可能是表示的加1f6 ,这是两个字节字节,但是不是这样,我们嗯再看一下后面的拼音,我们就先记录一下这个只是有这个可能,然后我们再看一下后面这个,这个是也是两次节,低两位,高两位呢。

它是这个是2000啊,这有我们用短整型的就能看到。

现在它为零了,这个地方再来看一下无名,那我们就不需要了,后面的这一串人,他现在都零零了。

已经变化了已经变化了,只有这个地方明显,那么我们可以看一下这个列表里面,再来尝试一下,加上e和六。

dw我用dw的显示这是一,那第二个也就是第三个技能,你学的啊,那么看哪一个没有学呢,这是0123,那么这里更没有学历,下标是,那么这个是零,那么下周是六的话,那一个也是学了啊,这个就是一要不要升六六。

然后呢789 十,我们这里742 18,2974 28哈,这个是下的是27,这个是2929分啊,这里是3030,我们表示成16进制的话,那么这里是是要e的样子啊。

你看a410 b c d r e d这个地方,那么1p呢是这个那么1p过来,我们看1e啊,这里是零,ef这里是零,那么基本上可以断定呢,这个ef 6,这个地方呢就是就是学或者是未遂。

那么我们可以尝试修改这个数字,那么我们看到这里的弹链,它已经就是说发生变化了啊,修改这个属性之后,那么我们在修改前一个属性,好,那么这个呢相应的技能呢,它也可以拿出来使用了,也可以拿出来使用。

这样我们可以修改,那么这一个的话它的下标是01234,那么我们期待这一刻,012345啊,这个也可以打六七,那么我们先修改第七个,啊那么这个呢它也可以拖出来的哈,但是游戏更新之后呢。

它这个数据呢它就没有了啊,有没有,那么到时候我们知道啊,刚才的这个呢,他就是这个相应的技能,是否可用的一个标志,我们下一个断点,那么下断点,我们这里也能看到一个word的gf 6,它的一个偏移。

说明的话它的确是双字节的啊,这能够说明一个问题,就能试图讨厌的样。

好那么这节课呢我们关于技能列表呢,我们就分析到这里,那么下一节课我们在编写代码,读书里面相关的一些数据,进行下一步的分析,好的。

P190:205-完善强化函数 - 教到你会 - BV1DS4y1n7qF

大家好,我是郁金香老师,那么这节课呢我们来玩,完善一下我们的强化函数,那么上一节课呢,我们的基本功能已经完善了,但是呢我们就是强化的次数呢,我们需要判断啊控制,那么之前呢我们有分析一个属性。

在之前的课程里面,那么之前里边在300这个地方呢,它有一个物品强化了几次。

那么但是现在300这个地方的话呃,它已经不能够显示出物品强化的次数了,也就是说这个偏移呢已经发生了变化,那么这节课呢我们重新的呃,重新来搜索一下,那么首先呢我们以呃第一格的物品为例。

那么搜索的时候我们附加到进程首地址二,dtc 2 df 0,然后呢这里我们,也福利啊,或者是加上六啊,嗯16进制的4000字节的话应该是够啊,400字节,那么这个时候我们看一下,第一格的物品的话。

它强化的状态呢是一,那么我们是不是字节类型的就可以,然后我们再一次把它强化一次,那么这个时候呢,嗯强化的数值为二。

再看一下,加上四,清除过手。

再看一下我们的,对象地址,2d1 b,201p n070 a0 ,那么这个才是正确的,搜一下数值的二,然后我们再次强化法,呃搜索数字三,那么这个时候只有两个数字啊,我们就可以画成两个数字了。

添加修改一下,然后呢查看,那么这个时候呢,我们显示的强化阶段呢是八啊,那么证明这个是它的这个。

我们再来查看一下,那么计计算出它的偏移的话是d04 ,那么最新的偏移我们把它修改一下。

第零四,那么实际上就是这个物品的一个属性值,也是在这个位置的啊,发现,那么我们看一下其他的呃这一类的物品。

它又是怎么来表示的,那么这里呢他应当也有一个属性值,那么这里比如说防御力47啊这一类的,我们来看一下它是怎么来表示的,第二个,加上b04 ,那么这里呢他也是强化四阶段,然后呢这里我们能够看到一个七。

两个七啊,三个七四个七,那么这个七的话应当就是它的呃,这个合成的这个物品,我想的这个是房区,那么这个二的话应当是这个防御啊,他应该是它的类型的话,应该是这个指的这个含义时啊啊,而且是防御力期。

那是可能是这这样两两个绿的,后面的这里也是挨着的,那么从精灵四这个地方开始是啊,那么后边这个二的话,应当是表示的是它附加的这个属性的,石头啊,石头的类型,比如说是含义时,那么呃而且是防御类型的。

那么这里呢因为它是七,那么我们可以改一下,那么如果我们改为三的话,看有什么效果,那么这个肯定是防御力等于六,我们试一下,那么第一个的话就是生命力流了,我们看一下,那么这个三的话就应该是表示了生命力。

那么我们改改变为复试一下,那么五的话是命中率啊,我们能够看到,那么这里的话这两个它相当于是一个数组,一个四字节的数组啊,我们看一下是几次九呃,那么这里的话三四十12,那么前面这是强化的属性。

强化属性从这里开始来算的话,呃,3644 16,然后到这里,那么这里应当有七个字节啊,每一段,那么这这七个字节来,用来描述它的这个属性,那么前面这里的话我们就可以嗯,我们也把它记录一下。

那么这里应当是一个数组啊,从这后边来开始,那么这个数组的第一个位置的话,就从这个位置开始,我们来看一下,那么这里从d10 这里开始来,是一个属性数组,加上我们的d10 。

那么这里是它的一个属性数组,那么这个数组呢一共有是dw,word类型的一个数组,那么我们如果用t来表示的话,那么这个数组呢它一共是它的大小呢是七,那么这个t一这个位置呢啊应该是t0 。

这个位置来用来表示它的属性,那么t3 这个位置呢用来表示它的呃,这个属性值啊。

这里是它的类型,这下面是它的属性值,t0 ,那么表示的表示不信卫星,那么t3 这个地方呢表示不幸是。

那么我们可以找一个没有任何属性的装备,来改一下,那么这里是五六啊,我们以这个下边六这个来改一下,那么下边六的话,我们看一下,这个时候呢它是没有任何属性的,那么我们可以跟他改一下。

那么首先我们改为防御力的啊,他是就是防御力,然后三这个位置我们改为啊方方这个说法,那么这个时候我们再来看一下,这个时候呢它就是一个防御力八增加好,那么接下来我们再改好,然后是12347啊。

从这个位置开始搞。

它只有这里应该是六啊。

它的这个数组的大小应当是六,那么我们从这里开始改的话,我们又改为二呃,再数下来一二十提升这个意思,比如说我们这这一颗石头,或者是防10 16哈,这里边就是防御力16正向,然后我们再往下数,这个位置啊。

如果我们再跟他合成,也是防御力的,或者是三,好像是生命力,生命力我们比如说100增加,再来看一下,那么100的话,这里是这个100的话,16进制的35 六,那么我们再来看一下,那么这里的生命力啊。

增加稳定,当然我们也可以,一般来说的话,这个数字呢我们会改为统一的啊,过程的时候,那么最后呢我们还可以添加一个啊,这里呢也是二啊,然后呢应该是这里的标注,那么这样的话我们就可以把这个装备来改。

为了活成了四颗和这个防防御力16的,那么另外的话我们还有一个第一名四,这个地方,它也是一个属性的描述。

那么零四我们看一下,那么这个地方是指强化了几次啊,我看一下,d04 。

物品属性质,那么我们再来看一下第一个这个题,这里为八,那么第二个呢,那么这个四的话,前面还有一个,这里有个二啊,这里有一个是,然后再是两个,那么它的实际属性应该都是一样的,那么这前面还有一个二啊。

应当是,那么我们再看一下第六个,那么在这个位置呢再改一个二,这个时候呢是强化世界到底啊,那么如果我们这里改三点一下是什么情况,我生命力增加多少多少,这后边会有一个,那么我们这个改为一了。

嗯防御力增加24,那么这里它必须要有一个数字,表示有没有强化,可能是这样的一个意思,那么这个数数值只要是大于零的话,可能就是已经强化了啊,强化了几阶段啊,一般是这里是二,再来看一下,又是四。

那么这个数值的应当是必须是二啊,这两个月需要配合使用,那么这里是强化的阶段数啊,那么这个二呢可能有另外的意义呃,表示强化增加了一个什么属性值这一类的,那么它的这个结构的话,我们看一下。

从这个地方实际上开始,它都是一个属性描述的一个结构啊,这个二呢,第一个它可能是表示的是强化阶段,那么第二个呢就是后者后边啊,附加的一个属性,那么我们看一下这个偏移是从多少开始的,那么实际上这个位置的话。

应当是从这个cf 8这个位置开始的,cf 8从这样来分析的话,那么这是它的第一个属性,那么每个属性呢它占的应当是嗯七个单位,六个单位好像是看一下再看一下,123,123,应该是六个单位的的。

这样一个结构来描述的话,那么我们把它完善一下的话,这个呃这个结构我们,那么我们随便下定义的结构,比如说tp,那么这样的一个结构的话,它实际上有一点类似于还在,二那么有有两项呢是未知的,那么第一项呢。

那么是这个它的一个属性值,那么后边这两项的话,是一个未知的一个数值,那么这里呢是它的一个属性词,那么后边这两项呢可能也是预留的啊,一些未知的一些数字,那么可能就是这样的一个结构。

那么这里的话我们可以看到第一个呢,热量表示表示防御力增加,那么也表示强化,那么大概是这样的一个结构,那么实际上我们把这个强化的话,应该把它分出来,那么这个强化的结构呢。

可能是与这个类似的,但是我们后边的话,这个二呢我们明显的表示的是防御力,那么我们第一个二呢,他这里的话表示的是强化啊,在这里好像是有一些不一样,那么这里的话它强化的数值就不会增加了,一也会增加。

那么这个数值呢必须为一或者是二塔强化,一阶段,二阶段可能是这样的一个意思,啊,啊那么这个强化的强化21的话,那这个呢它还会增加一些,其他的一些属性,它都是通过这里来计算出来的,好的,那么我们最主要的。

实际上就是需要的这一个属性值啊,就是要加上的cf 8 d04 这个地方,104这个这个属性。

好那么我们既然分析清楚了之后呢,呃我们接下来呢就来完善我们的这个函数,那么打开我们之前的,拜拜。

打开我们之前的代码,那么我们在这里呢,我们再分装一个单独的函数,在功能单元,你当时在主线程单元,还是我们先在结构单元里面碰撞,那么这个呢我们是指的强化解释,如果已经达到这个次序了。

他就不会不会再再次强化这个物品,那么我们相当于啊存在一下这个函数,那么你到最后,把上一节课我们的测试代码复制证明,那么这里的话替换成我们的相应的名字,放置要强化的物品,然后呢再放置我们的强化石啊。

最后呢强化我们的物品,那么在强化之前呢,我们先要做一个判断,在这里是否达到指定的这个次数,那么这个判断是否达到强化次数的,应当是在放置物品的时候呃,这个框里面的判断,那么在这里的话。

我们判断了我们需要对这个物品的话,需要添加一个属性,在这个地方,那么我们这个属性呢,就是我们刚才所分析的呃d04 ,嗯行,然后我们需要在gttt里面呢,来添加物这个属性的进行赋值,嗯嗯嗯,嗯。

好那么我们再次编译生成一下,那么我们在偏离这个物品的时候呢,我们就需要多加一个判断,那么我们选的时候呢就需要了呃,这个数值来小于这个强化的这个数值,那么如果是大于等于这个传递进来的,强化次数了。

那么我们继续找下一个要强化的这个目标,或者是直接退出啊,那么我们再来看一下。

这个强化石的这个属性。

四,那么它本身是零啊,那么默认的情况下呢,我们就呃传入这个数字,零在这个地方,好的我们再次测试一下,那么我们刚才在这个代码里面呢,我们测试的都是强化四阶段啊,每个物品,那青铜护手或者是我们的靴子,如同。

好的我们测试一下,但是这个时候呢,我们发现我们的这个强化石没有放上去啊,因为我们的这个判断呢不对,还需要修改一下我们的代码,在放置物品的时候强化次数啊,我们再来看一下,那么并且呢。

我们这里呢还要加上另外的一个条件,它的这个物品名字呢,不能够等于这个强化石,嗯嗯。

嗯,那么这个不是强化石的时候呢,我们才需要进行这个判断,那么我们在外层给它加上一个e,那么我们再来试一下靴,靴子啊,那么这个呢它已经强强化了四次,他就不会去强化啊,那么还要注意一点呢。

我们需要添加这个相应的延延迟啊,等待这个地方我们可能需要再添加,让他等待一段时间,好吧好的,那么这节课呢我们就讨论到这个地方。

P191:206-打开强化窗口与打开合成窗口数据分析 - 教到你会 - BV1DS4y1n7qF

大家好。

我是俞慶湘老師,那麼之前我們已經分析了強化活程的關鍵的數據,放置我們的物品以及我們活程裝備,那麼我們還差一些步驟,就是打開強化與活程的窗口,還有以及關閉我們的強化活程窗口,但是我們的打開NPC對話。

以及來關閉NPC對話,我們都已經安裝好了相應的函數,那麼我們所缺少的也就是打開強化,以及我們合成裝備的這兩個窗口的一個數據。

那麼這幾個我們一起來分析一下,那麼首先我們之前已經分析過,打開NPC這一步的話,我們已經分析過,主要是怎麼打開強化的窗口,以及活程的窗口,那麼根據我們之前的分析經驗的遊戲的話,那麼在打開窗口之前。

他都會向服務器發送數據,然後由服務器回傳的數據來打開了窗口,那麼所以說我們只需要向我們的服務器,發送一個相應的指令就行,那麼我們可以在,把包的函數上面的下斷點,打開我們的強化窗口。

所以一定是要按下了之後才斷下的才有效,如果是沒有按下數然後就斷下的,那麼可能是其他的心跳包這一類的動作,那麼我們回溯兩層,跳到這個地方,下一個斷點,然後重新我們關掉窗口之後,再來打開一次,強化。

看一下它的緩衝區,那麼我們根據以往的經驗的話,我們只需要把緩衝區的數據放進去,另外我們已經封裝好了發包的函數,那麼這一段需要複製下來。

那麼這就是我們的強化,這個的話應該是我們NPC的ID,我們之前複習的,這可能是NPC的ID,不同的NPC的數據可能是不相同的,那麼它的緩衝區大小應該是X1E,我們只需要把這個緩衝區,的D大一些就行。

那麼在這個緩衝區的話是20個字節,應該是20個字節才對,36個字節,好,那麼這是我們的強化窗口的一個數據。

等不容測試,那麼我們在關掉之後再來看一下,那麼如果是活成物品的時候,我們看一下會是在什麼地方,點活成物品,然後回到上一層,看出F9,好像也是在同一個地方,在這個地方下段,那麼我們再重新關掉,再次測試。

好成物品,看一下它的緩衝區的結構,類似的。

那麼我們記錄下來,這個是我們的活成物品窗口,那麼我們注意NPC這裡是相同的,後邊也是相同的,不同的它只有一位,就是這個地方,不同的,這裡是,活成,那麼這裡是強化,好的,那麼接下來我們進行一下相關的測試。

那麼另外我們發現的話,強化和活成的話,應該是同一個地方,經過的,強化物品,那麼首先我們用代碼輸入器先來測試一下。

那麼首先我們也是要給它構建這樣一個緩衝區,那麼我們可以這個緩衝區小的話,我們可以直接用我們的Push指令來構造緩衝區,如果緩衝區大了,我們可以直接在C++那邊編輯我們的代碼。

那麼首先我們最下邊的開始壓榨,我們先測試我們的強化,那麼先是4個0,我們全部改成0,一共是8個,那麼首先兩個0,這裡倒數第三個是1萬,那麼這裡有個2000,那麼這裡有一個8018,那麼這裡來有一個指令。

9是個0,那麼接下來就是ECX參數,那麼第一個壓榨的參數,我們在第一個壓榨之前,我們先把EX的地址先獲得,不然的話等一會我們壓榨的時候,它改變了我們ESP的地址,好,那麼壓榨第一個,Push EX。

Push EX,Core,Mini4FB,BAN,NTT,ESP20,那麼注意我們這裡一共是20個字體,那麼這裡為了實現一個對戰的平衡,我們必須要加上這20個字體,首先我們打開NPC的對話。

這個我們已經有封存,然後注入我們的代碼,那麼現在注入代碼的話,我們看一下沒有效,我們再來看一下,好像是我們封裝的數據有問題,那麼我們應該是先壓在下面的,這個次序我們放反,這個應該放在最下邊。

那我們再來看一下,還有一個8010,那麼最先壓占的應當是0,然後再是0,001,再改一下,001,然後再是0,這裡是2,1234,過之後再是一個0,8018,然後再是9。

好的,我們應該是這樣到處壓占,回去才可以。

好的,我們再次注入代碼,那麼這個時候我們就能夠打開我們的強化窗口,那麼另外還有一個關閉我們的NPC的窗口,我們已經有封裝了,下面的這個函數直接把NPC的名字輸入進去就可以了。

好的,那麼接下來我們再打開一下活程窗口,那麼合成窗口的話,它只有一個參數不一樣,那麼這裡是6,注入的就是一個裝備活程的窗口,那麼到這裡為止的話,我們自動強化活程裝備的所有的數據就已經找齊了。

那麼這下面的這裡需要改成6,這上面的這裡是8,當然我們寫代碼的時候,我們會更加的方便,因為我們另外封裝了一個發包的框,那麼下一期可能我們進行相關代碼的封裝,那麼這一期可能我們暫時就討論到這裡。

下一期我們再見。

P192:207-DLL劫持注入方法-Xp-Win7_64位通用 - 教到你会 - BV1DS4y1n7qF

大家好,我是郁金香老师,那么这节课呢我们一起来看一下劫持注入的方法,动态链接不节制注入的方法,那么我们以这个来到pk t l啊为例,那么因为我们这些游戏啊,基本上还有这些相应的软件呢。

我们在运行的时候,它一般呢我们都可以看到,它都会去加载这个l p q这个图层里面。

然后我们在考试前,我的观点你可以看到暂停一下,在这个位置我们可以看到它在我们的这个s系统目录下啊,把pk点体验了,这是我们36的基本上都会调用,还有这个什么m s f c这类它都会调用。

那么一般我们用这个l pk嗯的这个截止注入人比较多一些,因为它涉及到的相关函数比较少,那么我们可以一起来看一下它相应的资源目录啊,这就是我们在系统目录下搜索到了这个函数。

那么这个这里边呢它一共有11个函数,就是这11个函数,那么这是一个函数,我们就是说要来写它的话就比较方便,因为它涉及的函数呢比较少,那么我们简单的说一下这个劫持注入的原理啊。

因为比如说他要调用这个来pk啊,这个动态链接库的时候呢,它一般是先搜索啊,比如说我们这个游戏为例,那么在执行这个ex e的时候呢,它会先在这个目录下面找是否有这个l pk的这个动态链接库,如果有的话。

他就会直接来自动的加载这个目录下的l pk,那么所以说我们要向游戏注入的话,当然就是在这个地方这个目录下面放一个pk的动态链接库,比如说我也写了一个动态链接库,然后呢写了之后呢。

把我们的这个啊游戏的动态链也不写正确的,这样他就能够实现自动的注入,我们先来看一下效果,那么这个时候我们可以看到,它在自动启动的时候呢,这两个工作文件的话实际上就已经注入到了我们的这个游戏窗口。

这时候截止函数运行之后就加载了这个代码,从而来实现了一个及时的注入,那么实际上呢嗯我就是在这个游戏的目录下面把自己写了一段代码,然后呢再在下面放了一个lpk,把替换掉了系统这个pk当然如果把它删掉之后。

它就不会再断代码,然后我通过这个l lpk呢,然后呢来载入了这个my deer,这就是信息的这个代理,那么我们先把这两个文件删掉,那么我们一起来看一下它实现的一个过,程代码具具体要怎么写。

那么首先我们就是说我们写了一个l l pk的这个动态链接库呃,因为要提供一个有游戏调用,那么所以说我们肯定要实现相同的功能,那么这些功能呢它就会通过这些套出符号表现出来,因为它会进动态的调用。

这些套出了不好的定义卡,那么我们先用vs 2010啊,建一个动态链接库来写我们的代码,那么在这里呢我们选项目同样的选工商人控制栏,然后取了名字,取名为卡拉pk或者是其他三名字的特点。

但是最终我们生成的时候呢,我们要把它改他pk的dl,那比如说我们改名为i l p p,然后我们在这里呢选动态链接库就完成,原有的这个动态链接库呢,我们可以把它移除掉。

因为我们要自己写一个这个相应的这个主函数啊,你看你这个函数来替换掉,然后呢我们在这里建一个啊shift的文件,就这也叫mmp,然后在这个图文件里面呢,我们需要添加一些初始化代码,就是这一段。

那么这一段我们就不详细的说了,这个是我们cp p里面的,就是我们要注入的代码,还有,那么接下来我们看一下my pk的平台,那么就是下边这段,让我们一起来看一下它搭建一个一个基层。

那么首先呢我们也要注册我们的这里进行包含我们的图文件,图文件来看这个图文件接口,这放在前面的话,那他他也需要用到windows这些通讯啊,又给你们直接就行,那么在这里呢我们另外的套出了。

也就是我们刚才所复制出来的,这是一个函数,要实现一个与它相同的一个功能,我们可以看一下,在这些没意思的函数在这里来实现了,只是排列的数据可以吗,那么实现后面呢这里呢是一个套出一个编号啊。

那这个应该是可以的,那么在这里的话,它原有的这个函数呢就被替换成这个根啊,就是游戏的一个后排的一个函数啊,自己写这个函数,那么我们可以在后面找到我们这个,函数,那么前面我们注意这里的卡带个下划线。

但是后边呢它会带,因为我们的这一组申请了这个c d e c l,他套取的这个符号呢会有一个下划线在前面啊,那么那么实际上在这里呢,我们就会去获得它本身的以前的这个函数的这个地址。

那么我们来看一下这个函数是怎么来获取它的进程,那么实际上呢我们在这里呢,他也会去找啊,现在怎么某一个动态链接库里面去找到,他看一下这个模块,其实初始化这里有个load mod,初始化的这个函数。

那么实际上呢它就会先获得一个系统的目录,那么系统目录啊,然后系统路径获取一次之后呢,然后这里在后面呢加上一个pk就pk gl,然后呢他才会到我们的这个动态链接库所在的这个这个目录呢。

然后呢再用这个真实的lpk加dl这个文件,最后呢在这里啊啊大概就是这样分析,那么在这里的话,它实际上也就是说一个跳转,比如说我们第一个函数的地方,它这里,因为我们购买一个带。

它实际上就是从路边的一个方式,那么也就是这一句他调用了之后呢,它实际上它的一个反应就是法国的一个他说的这些,这是我们真实的系统来pk,贴了里面的这个来pk初始化的这个函数,把这个符号的地址。

然后呢实际上这里的话这两句命令呢,它实际上就相当于啊调用到我们的这个系统,来到pk函数释放的这个函数,那么后后边的也是一样的,它也是相当有快加入到参数方面呢,这里他不管,因为它是从右边的这一点。

我们是用qq,原来我们看一下这个很好的定义,有耐克nike,他前面的是这一句话,说的是一个初步编的事情,就好好,那么大致就是这样一个呃一个结构,那么后边的这些一次呢,我们都按,照这种模式来写。

那么这样呢就实现了一个跳板,也就是说我们这个跟他做的这个假的这个pk的这些函数的话,它都会跳到这个真实的函数上面去执行,那么这样就确保了这个动态链接扩大的功能不会出错啊,不会出错。

那么我们自己的代码在哪里,那么我们自己的代码呢,实际上就在我们的这个截止的这个动态链接库,它的这个函数入口啊,动态面积和这个函数入口这里来完成,那么如果这个dna的l它加载的时候。

它会产生一个消息在这个变化,那么我们在这个消息我就直接的,来进行明白这个logo啊,这里logo呢是初始化,看看这初始化做一个初始化的操作,那么另外还有这个pk e d i t方程呢,这个呢比较特殊。

它是一个数字,那么所以说这里我们要用零破皮了啊,不是啊,我说个事情这样一个数,这个这里边因为这个a p p e t i t当中它不是一个函数,它掏出的是一个数字,是这那么在这个位置呢就是开始。

有先进文化去看自己就在这个i t的分层,那么最终呢是这个地方,比如说我们在这里的话,我们可以就直接加入我们的mfc,这也就是我们游戏的这个动态民族在这个地方来载入。

当然在后边呢我们还可以是还可以添加上其他的一些信息啊,比如我们的中单用户啊,就成功了,这个例子好了,我们再次编辑申请一下,这里我们选择了历史,而不管你帮帮忙这些黑木生产,那么编译生成之后。

我们最后呢在这里只提一个最近的目录,好再生成一下,然后我们在资源管理器打开,找到我们的ml p q,那么这个时候的话我们的这个替换的啊,要截止的这个函数就写好了,但是这个函数写好之后呢。

它注入的代码是这一段啊,相当于就是这两句或者是整个函数,那么而我们真正的游戏的代码是放在这个动态链接库里面啊,所以说关键还在这里,关键在这里好的,那么这里这个时候呢。

我们就可以把我们的这个来lpk这个文件,放到我们的这个客户端目录下,那么这个时候我们需要证明把它改成系统下面的这个来pk的啊,一模一样的这个名字,那么因为呢他会先搜索这个目录。

然后呢如果这个目录它不存在这个pk的这个动态链结构,才会去搜索系统目录下,那么在搜索他的时候呢,我们看到了里边呢他也会去调用这个mfc的dl的,那么这个dl就是系统,那么我们把,就把你扣。

这个mf c接的话过去,这就是比较注意的这个pl,你放到这里,右下看到这种图形,然后呢我们再来运行的游戏,当运行到我们点游戏开始啊,当我们的客户端运行的时候,看到他就会。

这个人就会显示出来我们的动态链接不了,就会被载入,就不在意,就是这里了,他也不行事了,这节奏的还是成功了,当然以后的这个注入的话,我们可以把这一段可以把它去掉,这只是我们的一个测试。

那么后边呢我们先生成一些,然后再把这个系统算进去,因为已经进入到游戏,所以说我要退出一线才能够删掉,好的,那么这个时候呢我们在这里,好的,那么这个时候来到gk我们这里呢把它改名,改名之后呢。

他就只是会更新这个文件,那么我们保存一下,那么我们看一下是不是我们的动态链接库真的被注入进去,我们可以通过修改这个动态命令的界面,或者是置于一些其他的信息来做一个确定,然后比如说我们在界面上加一段信息。

我们就可以看出来,然后测试一这里,比如说我们就可以了,ul坚持,然后保存一下,心情,好的,我们再等一下哈,这个时候呢生存好了之后呢,我们可以等下一次的时候。

我们就可以直接把这个代码到游戏下边进行切换就可,好那么下次呢我们再打开游戏的时候,它就会自动的投入,而且是优先的检查,还要给我们的这个界面,好像还有流星一起用,是系统,那么我们在这里会看到小米。

而且我们每天都看到一个作品的这个进程,这个他说的进程就是这个游戏的进程,有些同学他有一,那么要注意的一点呢,就是我们win 7下边呃的注意的话。

还需要一个地方做一个修改才可,聘礼是说直接这样就可以了,那么我们在运行里面或者是开始努力,这里所有提示建筑r n g e d i t打开我们的注册。

那么需要在这个路径看到这个路径,那么这个路径下面呢,我们需要在这,个建一个多字节的啊,多字节字符串,我这回设置窗口用这种类型,然后呢在这里面呢加上我们的这个lpk这个动态链接库。

这样的话经过这样的一个注册了,我们才能够照顾win 7它本身的一个保护啊,才能够注意到,好了我们把它设置一下,那么实际上我们还有更简单的方法,那么我们可以把这一段把它掏出,这项套出套出到我们的桌面上。

但是呢这个套路的话,它是包含所有位置等,我们把它删除掉,但是在这个时候他是靠出的是一个所谓的工资比较多,那么我们只需要找到我们的这个公司就可这段信息就行了,后面的这些信息呢我全部给它删掉。

还有前面的这些信息呢,他们也可以删掉,最后只保留这一项,就可能也就是这个路径,最后我们只需要保留这一项。

然后呢我们可以直接点击文件输入进去就可以了,我们在我认识的主体,再到这个文件里面看到同样的可以看到这一项,那么这样的话会比较简单啊,那么我们可以看到只要注入之后,双击进入之后,那么这里就这一项。

最后这种方式来较简单,更明显,就,好的还有这是我们的代码。

那么大,大家注意啊,这个注入之后呢,最好是重启一下电脑再来测试,那么一般就ok了,那么这节课呢我们就探讨到这嗯。

P193:208-外挂控制台设计原理_old - 教到你会 - BV1DS4y1n7qF

大家好,我是郁金香老师,那么这一节课我们一起来探讨一下,这个游戏辅助控制台的一个设计原理,那么游戏的控制台的话,它可以通过一个窗口界面或者是一个进程,那么控制我们多个游戏和窗口。

那么可以实现我们啊多个游戏窗口的这个自动挡打怪啊,这个可以从一个界面啊来设置,那么它的原理的话,实际上也就是一个进程间的一个通信,那么进程间的通信呢,我们可以用之前的或者是远程调用户,或者是用套接字啊。

呃或者是用我们的管道啊,这一类的都可以,还有我们的这个共享内存这一类的,那么我们之前呢在这个c加加在这个过程里面,我们也有讲到过进程的通信啊,那么其中呢我们有一种方法来到这么一个涉及到了。

也就是我们用这个呃copy代替啊,这个这个消息来实现一个简单的进行通讯啊,那么我们控制台的话,我们也可以用这个呃cop对体来实现啊,好的,那么我们这节课呢我们先来看一下啊。

先来看一个例子。

那么我们先来看一下只有一个游戏的情况,那么我们设计好了之后呢,这个控制台呢它肯定是可以控制多个游戏进程。

那么这里呢我们编写了一段一段代码啊,用我们的这个游戏来进行一个通信。

那么在这里呢我们会发现一段这个指令过去,那么我们的游戏进程呢,他会得到这个指令,当然这个指令的话,我们在这里呢也可以自定义了,也是我们测12这里,那么在这里的话就是我们可以看到有关信息的话。

实际上这段信息呢就是我们的发送进去的,然后从这里的话你都看出来,当然我们这里呢还另外还设计了其他的一个代码,我们可以把其他的这个代码注释掉,那么我们再来看一下,这样会清晰一些。

那么这样呢我们实际上就是像我们的游戏里面呃,发送到我们的这个在这里,那么这里的话是游戏进程,它接触到的相应的一个指令,那么我们就可以通过这些不同的指令来实现,比如说我们的呃挂机的一个操作,开始挂机。

或者是获取我们这个游戏里面的人物的一些信息,有个金币啊,或者是我们当前的血量啊,这些信息,或者是呃用来控制我们的游戏进程的运行某个脚本,或者是运行它自动打怪啊这一类的,那么它可以实现进行控制好的。

那么这节课我们还是具体来看一下这个代码应该怎么写,那么这个代码呢它分为两部分,那么一部分呢是我们游戏进程的一个代码,那么另一部分呢是我们就是说呃发送指令这一段的一个代码。

那么我们首先呢打开我们的vs 2010。

那么我们建一个新的项目,我们还是选择mmc,那么发送数据线上来,就新的背景,然后我们改一下,这里呢我们还是选多字节的字符值,那么在这里呢我们给他写一个相应的接口,那么在这里呢我们添加一个筛选器啊。

就叫做,游戏控制的一个接口,然后在这里面呢我们添加两个形象,一个是c p p的一个图文件,就叫做a p i,这,完全,哈哈,那么另外再添加一个头文件,新建项,那么我们就把这个相应的哈发送数据的这个接口。

来封装在这两个图文件里面,那么它最关键的地方我们说了,它实际上就是发送数据的话,就是用一个新的message来发发送,必须是send message这个函数啊,那么他发送消息的类型呢。

就是这个w o p代替,那么我们再来看一下它的格子,那么我们用这个copy代替的话,它在我们msd里面有一些要求,那么我们一起来看一下,那么它的第二个参数啊,在这里啊。

popularity的话它有一个参数项啊,也就是我们的嗯,这个呢它要求是我们发送这个消息的一个窗口啊,那么在这里的话,我们未来就用这个资源里面这个窗口的ip了,作为它的倒数第二个参数,就用他的ip嗯。

那么最后一个这个参数啊是message,最后这个参数呢它是一个populate的一个结构,这个结构,那么这个结构的话就是指的我们最后的这个参数来看一下,就是这最后的一个参数就是copy。

那么这个呢是我们发送窗口一个拒绝需要出,那么这,个是接收窗口的这个句柄,那么在这里呢我们就是一部戏窗口句柄,哈哈哈哈,就说我们要发送消息,那么我们要传递的消息呢就会存放在这个结构。

那么我们就来看一下这个结构,那么这个结构呢这里呢这个d w对体呢它是一个36的程序,可以是一个任意的一个数值,那么在这里呢我们可以通过这个数字呢来区分我们不同的命令,而这个cb代替呢。

它是指的我们这个下边的这个尺寸的缓冲区的大小,是指的这这一个结构的大小,那么这个结构可以是一个我们任意的你的自定义的结构啊,也可以是字串或者是其他的人物信息啊,人物属性任,意的一个结构。

它是没有一个固定类型在这里啊,那么这里呢就是用来指定下面这个结构的一个大小,那么这个是一个任意的数值啊,关键的是这两个,那么这两个都没有的话,这里呢我们可以有空可以有空,通过我们的这个大货币代替的话。

它会自动的把我们当前这个控制台的这个进程,这数据能传递到啊,传递到我们的这个目标进程,它会自动的有一个传递的一个动作,这个是由新的面试题啊,它内部来实现的,我们可以不去去关心他,好的。

那么我们先来看一下我们应该怎么写,那么首先呢我们对这个函数来进行一个简化,工装,那么首先呢我们这里呢这个是我们游戏窗口的一个具体,那么我们发送的数据呢就会投递到这个指定的窗口句柄素材的进程。

那么第二个呢就是我们发送的这个窗口具体生的啊,这个,好那么第三个的话就是我们的数据库标签,那么这里呢我们是它的一个地址啊,直接串,然后我们就调用这个cd message这个函数到底到底到底到。

所以这里一定要是深的message,而不是boss king mac,因为我们的这些数据的话啊,他可能是不是全局变量啊,那么我们必须要用深圳message的用处赛的模式啊,等它返回。

那么才能够保证了我们的呃接收端,那这个数据呢是完整的,那不然的话我们直接gucd mac之后的话,这个cp代替的数据它变化了,那么就造成我们的这个通讯的话不成功。

所以说这里我们就不能用posting的事情的土地啊,那么这是我们的第一个参数,第二个参数当然就是我们的codate,那么第三个参数呢我们要求的是啊发送端的车,具体发送端的一个窗口的具体。

那么最后一个呢就是考虑代替,需要进行一个强制的一个转化好的,那么简单的这样封装一下的话,我们进一步了,那么这样简单的运作的话,我们就能够向目标的一个窗口进行一个数据的统计了。

那么接下来呢我们写一个测试的一个程序,那么测试的程序呢我们可以这样写,ok,那么在这里呢我们呃直接,只需要一个这个发动中的一个,具体是的没问题,那么第二个呢我们就是一个字串。

那么其他两个呢我们可以通过查询这个游戏窗口的一个决定的呃,来实现,那么首先呢我们要获得一个游戏的一个窗口,一个具体,啧。

那么我们先取得一下游戏的一个窗口标题或录音。

然后复制一下,那么有了这个这个标题和内容的话,我们就可以做接下来的一个测试,那么在这里呢我们首先要获得一些窗口,喜欢的温柔,in class,当然我们做测试的时候这样做。

那么我们呃最后呢我们可以用媒体来获取我们所有开启了这个模式,实现一个多个游戏窗口,一个控制,那么最后的话,好那么测试的时候呢,我们先当个游戏窗口进行一个测试,那么获得这个对比之后。

那么我们还需要创建我们的这个串进去来,那么这幅画的话我们就需要来定义一个这个空我们的题目和结构,然后呢我们需要对这个程度来进行一个初始化,那么首先是它的一个dw代替。

那么这里呢我们可以给它定义一个相应的标记,最好是进行成一道题,然后呢第二个呢是它的一个要发送的一个计算的一个大型,那么在这里的话我们是字符类型cd。

那么我们可以用这个string name来获取他的一个大型,然后呢它有一个最后呢它有一个解释的一个词,要加上一个自己,那么这就是一个大型的,这样能确定,然后我们这里它的指针的话就是呃计算的时间。

啊然后呢我们可以加入你们的心理问题,从根,这就是我们的地址下载的,那么这样的话你们上来我们就能够发生一个四串发送到我,那么我们就来看一下我们该怎么来调用这个函数,首先我们把这个函数来进行一下前置的声明。

放在同一界面,好的,那么我们就生成一下,那么我们需要一个一个,好的,那么这样呢我们的代码解决写了,那么接下来我们一个请调用,那么比如说我们在这个窗口这里调用,那么我们把天气放到六发送到到我们的游戏进程。

那么我们可以取的是这个,一种创造一个历史,我们看一下这个我们一方的一个单体c,真想不通,那么我们需要一个工具,那么它还需要来一个窗口,这里呢我们直接,这是在窗口。

那么这样的话我们的数据呢它就会发送到我们这个系数,这个这个进程的一个方法,那么我们另外需要在这个游戏进行窗口里面,写一段接收这个信息的代码。

就是结束了这个指令才能够进行一个相应动作,那么我们打开日本理科里面,打开,那么这这段代码呢会相对的要复杂一些。

这里呢我们还需要安装一个钩子,把这个相应的信息呢把它指挥换啊啊,相应的这个窗口,那么我们在这里再添加一个塞进去,塞进去用的接收我们的信息,哈哈哈,再添加一个相应的图文件,那么在这里我们要做什么呢。

我们要用这个,我们把下段代码先加进来,大致我们是要写这样的一段代码,那么这段代码呢我们就是能把这个游戏窗口来直接换,好,那么我们来看一下,首先呢我们只规划到我们需要了。

用这个city love来给我们的这个游戏窗口安装一个新的窗口过程,那么首先呢我们要取得他之前的用gt英特纳呢,来取得游戏窗口之前的一个窗口过程,然后我们把这个新的主调函数来安装进去。

那么这个呢是我们一个新的游戏的窗口处理过程,那么这个呢有点类似于我们的之前的这个游戏主线程,当然这个挂件之后呢,它也是在游戏主线程里面呃,执行的这个操作,那么它因为我们之前的这个主线程度啊,是对视的。

实际上那么这里呢我们为了把它区分开了另外的挂机一下,这个线程用来处理我们的这个接收了我们的cp对这个消息,那么接收到之后呢,那么在这个地方呢,我们把这一段啊就是指令字错的把它打印出来。

这个指令这个字串啊,这是它的一个大小啊,这是他,的字串这个字串,然后这里呢我们有一个come on更新的呃,这个呢实际上是一个标志,我们在这里随意的定义到,我就可以,这是错的地方,我们把它配置在这里。

那么在这里呢我们需要定一个相应的就可以,那么在这里呢可以是一个任意的一个数字,用来主要是用来区分我们的指定语,好那么我们来看一下啊,首先呢我们需要纸的话啊,安装我们的这个新的一个窗口过程啊,用来替换。

那么这是它的一个大致的一个格式,接收到信息之后呢,那么在这里呢如果不是我们自己的信息的话,那么我们还需要调用它之前的一个窗口处理过程来处理它相应的消息,那么如果是我们自己的信息呢。

我们直接从这里啊处理之后呢,就用不出就问他之前的这个过程来处理消息,那么我们就可以直接返回,好了我们编辑先生成一下,还有不少的错误,这里我们需要停止一下,嗯,好的,这个时候编译通过了。

那么这里呢我们是需要的,安装一个后壳啊,也就是我们的窗口直接扩挂,建一个线程,那么这里呢我们是呃恢复,相当于是我们恢复以前的一个状态,恢复到没有安装这个没有指令化之前的一个状态啊。

因为在这里我们实际上是用这个swindler,替换掉了我们的游戏的窗口的一个过程,好的,那么我们来看一下怎么来接受这个消息,那么在这里的话,我们在这个地方也需要进行一个初始化,在挂件出现在这里了。

控制了一个接口,那么在这里呢它也需要了只进一个我们的窗口具体,那么这个窗口具体就是我们p的一个窗口,那么这样呢我们就为我们的游戏进程这个窗口呢啊,安装了一个新的一个窗口。

用来处理我们的这个pp代替这个指令,那么我们在这里边的话啊,比如说我们接收到的是我们相应的指令,我就可以用它来控制我们的这个游戏的一些操作啊,比如说挂机啊,停止挂机啊,或者是执行脚本啊。

或者是退出游戏啊,或者是信息这一类,那么我们首先呢把它编译它,重新编辑,升级一下,好的,然后我们把这个新申请的动态链接库来复制到我们的游戏,游戏目录下面,因为我们之前已经写了这个动态链接库截止的代码。

好的,然后呢我们再开启一个游戏,那么完善的话,也可以配合一下之前的这个游戏的自动登录啊,来实现。

那么在这里呢我们先挂解一下主线层,然后呢比如说这个就是我们的控制台,那么我们的控制台来就可以像我们的游戏就可以给他发送一个数据,这里边不容易问题,但是我们可以看到啊,这个时候呢虽然他接收到了信息啊。

但是呢他们又把我们的这个指令显示出来,那么我们来看一下是什么地方出错了,那么它执执执执行到了这个地方,那我们看一下,因为我们的这个come on,这里的比较的时候不一致。

那么这两个地方呢我们最好呢是一致,然后我们可以把它的这个发现的类型写成我们的这个come on这个类型,或者是我们在这里,另外性格问题也就他们能胜利,就和你,那么在这里我们看一下它的位置。

这里能为我们之前讲的,用这个呢,我们把它改成了这个东西,好的,反正这里也就是这两个数值,这个数值要与我们接触的这个数值来一致,这样的话我们发行的这个数据最终才会对他接触到,这个是我的。

在游戏里就接触到了,那比如说我们让它实现一下我们的这个操作啊,那么我们重新改动一下这个代码,那么这两个指令呢,最后呢我们把它定义为一致的方,那么如果是其他的这个指令呢,那么我们进行其他的一些操作,看。

那么还要注意一点,我们在这里呢呃cindy message,我们发送信息过去的时候,那么如果我们这个进程啊,游戏的这个进程,他这里的代码没有执行完的话,那么这边呢会产生一个阻塞啊,在我们这边。

那么比如说我们举个例子,比如说我们在这个位置呢,啊弹出了一个message box。

好的,那么我们再来运行这个控制台这一段,那么我们发送指令获取,那么这个时候发现发送指令过去呢。

他没有处理,我们还有挂机这个属性成好的,化解了之后呢,那么这个时候呢我们看一下。

因为他后面的这个代码还没有执行完,没有retur,那么只有你看之后呢,那么我们这边的这个代码呢,他才会继续执行,那么这个时候我们点这个窗口呢,它是没有反应的。

那么我们只有人把这个message boss去掉,那么之后呢这里它才会有反应,比如说这个时候我们来控制它的话,它会有反应,因为在这里他出塞掉,这个时候他才会有那么这一点呢,我们需要做一个了解,好的。

那么这节课呢我们呃就讨论到这里,那么下一节课呢我们再来讨论怎么把我们的这个,我们的数据呢呃我们游戏端的一个数据啊,怎么把它传回到我们的这个控制台,那么我们实现一个交互双向的一个通信。

那么现在呢我们之前呢呃只实现了一个单向的一个通知,只是我们的这个控制台的这个接口,像我们的游戏的发出一个控制的一个词缀啊,好的,那么我们下一节课呢再继续讨论这一节课。

P194:209-外挂控制台相关接口设计(游戏与控制台双向通信)_old - 教到你会 - BV1DS4y1n7qF

大家好,我是郁金香老师,那么这节课我们继续探讨进程间的一个通信数据的传递,那么这节课呢我们主要是通过控制台来获取我们游戏进程的一些数据,当然我们之前的话可以通过一个跨进程的一个啊。

主体呢也能够获取游戏的数据,那么我们现在讨论的主要是这个游戏啊,游戏进程的这个代码与我们的控制台代码进行一个通信,以及数据的一个方,那么我们先来看一个写一段代码来看一个例子。

那么我们首先呢,280克的代码复制一下,在它的基础上我们进行修改,那么首先呢我们从控制台来发送指令到我们的这个游戏进程的代码啊,然后呢游戏进程的代码呢把我们的数据来传递给我们的工作台,大致就是这样的。

那么我们看一下怎么来设计的,那么这里呢我们同样是呃选用了用消息来传递这个数据,那么首先呢我们呃定一个人物结构属性啊,这个呢我们就是返回我们的整个的这个属性的一些数据强势的,那么之前呢我们也有进入这个行。

然后呢我们需要把它的地址啊,这个结构的地址传递给我们一些进程里面的代码。

那么我们再打开200几克的代码。

那么同样的我们的数据呢是在这个控制台接口这个单元来实现,主要我们也是在这个根这个excel不设计这里面来接收我们相应的指定啊,然后呢再来访问我们的数据,那么我们先写发送短。

那么控制台台这一段呢我们主要是通过一个send message消息传递过去,那么上一节课呢我们请了一个新的dt图片,那么我们可以将就啊这个函数来使用。

那么当时呢要是在这里是用的copy代替这个这个消息类型来传递的,那么实际上我们可以另外的定义消息类型呢,可以把它简化一些,那么这节课呢我们就基于了这个top dt来讨来讨论,不谈其他的情况。

今天在这里呢我们也进入一个指令的类型,那么我们就在前面的这个指令的基础上加上一我区分大,然后我们同样的在这里来借助于我们这个copy代替,那这个结构呢来传递我们的数据。

那么其中呢它的这个dw代替了就是相当于疾病的类型,当然我们可以在这个游戏进程的代码里可能对这个类型来进行判断,那么这里呢是它的这个数据环境的一个大小,那么在这里的话我们就是把这个结构的大小。

然后呢在这里呢我们要注意,在这里呢我们是传递它的这个真的一个指针啊,如果是直接把这个指针的地址啊就传进去了,那么直接传传进去的话,他就只能传传送这个结构里面的数据传送过去。

但是呢它本身的地质文化就不能传送过去,那么这一点呢,因为它是把我们的整个结构的这个数据的复制一个拷贝啊,然后呢,相当于是一个备份啊,这样传递给我们的这个游戏进程的代码,那么等会我们通过测试了,你会看到。

那么所以说在这里的话,应当传递进去的是这个,这个结构啊,或者说我们在这里这样写,可能更方便我们理解一些,那么在这里的话size就是就是一个实质阶段,实际实际上就是我们的这个真的一个类型,好的。

那么我们编译生成一下,那么这样的话我们这个结构的地址的话就相当于传送过去的话,那么我们呃接下来的代码呢,我们就是需要在这个游戏进程里面呢对这个指令做一个判断,判断它是这个copy bt之后呢。

我们在这里的话可以用一个switch语句来进行一个判断,那,么这句让我们放在前面,那么这里dw呢将是我们的这个指令的一个,指令的秘诀,那么这里我们做一下了解啊,这里是室外切的结束。

那么在这里呢我们之前的话有一个字串的一个类型在这里,那么这里呢我们把这个类型呢重新定义一下,图文件里,这样复制一下,替换一下,这里边第一个这个指令的类型呢一定要一致啊,后边的数字好。

然后我们再切换到游戏的进程里,再来看一下,那么在这里的话我们就开始进行相关的一个处理,那么这个呢将是我们获取人物信息的这个,那么其他的我们可以呢,这里也可以进行一下n卡,完成我们的case,好的。

我们先编译申请一下,然后在这里呢我们进行相关的一个处理,那么首先我们看这里我们接收到的这个信息的话啊,首先呢就是我们这边的这个结构啊,传进来的这个信息,那么首先呢就是指令的类型,指令类型匹配之后呢。

我们获得的将是一个这个人物信息的啊啊它的这个结构指针,指针的一个指针,那么首先呢我们要去除这个结构的地址,这个指针的地址,那么我们先来看一下切换到我们的相应的代理,那么在这里呢我们提取代码块。

同时把我们这个结构类型呢需要复制过来,然后在这里呢进行一个相应的这个支撑来进行一个调,那么由于我们传进来的这个地址的话,我们也需要对它进行一个取出的一个操作,那么首先呢我们取出里面它传进来的这个数据。

也就是我们,也就是这一个指针的一个词,我们就要把它取出来,那么在这里的话,我们首先呢是取得它是像这个指针的指针的一个数值,那么取出来的话,在这里的话我们可以直接用dvd新的这个类型来取,选完之后。

然后我们再进行一下强化,那么这个地址取出来之后呢,它实际上也就是我们控制台这个进程里边它这个数据块的一个地址,那么我们要访问我们的数据的话,就需要先取出来了。

然后需要跨进程的把这个数据写入到这个地址可以去啊,那么所以说这里呢我们还需要自己写一个,跨进程的一个函数,那么我们看一下这里的函数是什么情,那么实际上这个函数呢我们就是用了一个y pocs的。

这个我们之前有啊有用过,因为我们自己的这个控制台呢,它是没有饱和的,直接写就可以,然后这里呢我们是通过我们这个控制台的这个窗口句柄,来获取它的p i d,然后获取控制台的一个进程句柄。

然后向我们控制台写入我们的数据,这是开始的地址,这是写入的缓冲区,要写入的数据,那么这是写作的一个大小,写入数据的一个大小,那么写入字我们要写入的这些数据呢,通过我们的这个全局变量来获取。

那么这里呢我们有一个全局变量单元,然后我们可以这里是我们人类的属性,我们需要先初始化,然后初始化之后呢,我们就把这个数据来到这个结构,是这里面,最终呢我们把这个过去的数据呢。

通过这个函数呢写入到我们的控制台进程,我们来看一下代码调用,那么首先呢我们也需要定一个相应的这个变量,那么在这个结构变量呢是木兰取得我们这个游戏进程的角色的数据的。

然后呢角色的数据呢我们是通过这个函数来获取,获取之后存放到这个结构里面,然后我们调用一下这个几个,那么这个是输出数据的,我们可以加一个空的一个红框报纸,增强一个可能性好,那么这个时候呢。

我们把我们的武器进程的这个人物的属性呢放到这个结构里面,然后我们需要把这个结构呃,里面的数据呢写到我们的控制台的这个结构地址里面啊,那么这里呢实际上是取得了控制排列结构地址,然后我们就用这个ip。

那么为什么呢,这个首先呢我们第一个参数呢,也就是我们控制台的这个窗口的距离,那么控制台的窗户距离的话,我们之前在调用这个w cpdt的时候,在这边啊,它的第一个参数就是这个控制台的这个距离。

第二个第二个采取新的message,我们看一下新的,那么也就是倒数的第二个参数就是它的窗口区,那么所以说我们在这里的话,我们也就是这个参数对应起来,也就是我们窗口的具体。

那么在这里呢用来做它是第一个参考,那么第二个参数呢是我们要写入的起始地址,那么也就是我们控制台的这个结构的一个起始地址放在这个位置,然后呢是我们缓冲区,缓冲区的话。

也就是我们的这里获取获取的这个呃人物属性的这些信息,它的起始地址呢我们就给他们相应的地址,然后它这个数据的大小的话就是3o,通过三后来取得它的大小啊,理论上的话这样就可以了,但是我们还要注意一点啊。

我们这个vs 2010之后呢,它有一个,看一下清单文件里面有一个uvc,这个呢我们可以把它关掉,或者是uvc的请帖呢,我们把它调到最高啊,这就啊也就是这个账户不控制的啊。

不然的话我们可能在呃打开这个进城的时候呢,他们有这个相应的权限好了,做完这几步的话,我们也不能上来,就把我们的数据返回到了我们的控制台,那么控制台我们获取数据之后呢,我们可以把它打印出来看一下。

那么在这里呢我们另外用一个按钮来测试一下,那么在测试之前呢,我们在这里的话是首先要包含它相应的图文件,这里已经包含包含通文件之后呢,我们需要进入一个缓冲区,然后呢用来保存过程的视频。

那么我们也需要把这个函数先停止一下,然后我们再来看一下它的第一个参数,那么第一个参数呢就是我们,我们可以用啊获取我们一系的,进去给,那么第二个参数呢就是我们发送的嗯,这个窗口去买。

那么第三个呢就是我们这个结构的,那么我们通过这三句呢,我们理论上就可以把我们的游戏进程的这个数据保存到这个结构里面,然后呢我们再把它里面的这个数据的打印出trs,我可以求自己去打印,哈哈哈哈,嗯。

好的我们再编译生成一下,然后在这里呢我们再加上一个区,表示执行到了这个地步,然后把我们申请的动态链接库放到我们的游戏下面。

那么首先呢我们也需要打开我们相应的工具,在这里呢我们挂接一下主线程,然后类型我们的控制台相关的程序,那么这里呢我们又加上问号,那么在后边呢它就会因为在这里包含了相应的文件,就会出现类似的错误。

那么我们服务建筑加上这,清醒,那么这个时候我们可以看到这里的hp和mp以及金币,当然这个人物的名字是错的,就用代码很显著,那么我们看一下金币在这里的话,我们也能看到,因为我们在这里发生的是不是啊。

所以说我们这里的这个twice的这个游戏的,他是在这里说的,没有行驶到我们这个地方,如果是单独运行的话,那么他会在这个地方的第八国度里面来显示他这一段里面,好的,我们看一下我们还有哪一段代码,请求答案。

靠自我没有获取,这个人物的名字啊对了,在这里的时候,我们应当是,德国属性,然后呢啥意思,对不对,这样的话才是获取我们的属性,这里可能要用破皮或者是四条,我们重新把游戏关掉,再来做一下测试。

听,那么首先呢我们也缓解一下我们这些成年。

那么在这里呢我们可以直接找到了,在第八层地讲起,那么我们可以直接运行这个ex,那么这样的话看拦截的这个信息的话,应当在这个评判的,那么首先我们登录一下游戏,好的,然后我们再次在这里获取的信息。

关键我们都不适应了,还有我们这里需要挂机的进程。

那么我们扫描一下那个过滤,在这里呢我们还是需要先给它加点代码。

那么在这里的话,我们还有一个过滤。

那这里呢我们必须要加上这个跟这个图,它才会显示相关的这个信息,那么所以说我们在这里调试的时候,输出调试信息的时候,我们需要加这个前缀,这样他才会显示出,在这个位置,这样可以。

那么这个时候呢因为我们的游戏已经死掉了吧,所以说我们这里呢取得的这个信息的话,它是不正确的,那么在这里呢我们需要最好把它相应的这个结构的初始化一下。

那么我们再重新进一下游戏。

哒哒哒哒哒。

那么在这里的话我们看一下啊,获取信息的时候,它就会显示我们的全部的名字啊,血量更替及我们的金币,看一下金币的数量,329112623,那么都是正确的,这那么其他的数据的一个回程的一个方式呢。

我们也可以借鉴这这一类的方法,那么注意到我们在这个地方,它是决赛的,因为我们用的是新的那些题,那么执行到这里的时候,执行到新的message的spa,实际上它会一直的等待,那么等待什么。

等待我们的这个游戏进程里面的代码执行完它才会发。

那么我们再来看一下,有些清怎么办。

那么实际上我们在控制台它执行到这一步的时候,他就会一直停在这里,他要等到什么呢,等到我们的,这个游戏的话,我们新安装的这个词化的这个窗口,它会一直执行,执行到我们的指导不到这个旅程。

那么执行完了之后他才会发,那么我们最后呢是在这个地方瑞克之前呢,我们就没看,那么表示我们粗略了这个数据,我们直接找一个增值就可以,这里呢我们就好这样的方式来书写,这个人也是这样写的,那么这样写的话。

我们把数据写入完了之后呢,它就会直接返回我们的数据,那么如果是在他之前返回的话,肯定也是不行的,那么所以说这一点需要注意,那么这节课呢我们暂时就讨论到这个地方啊。

P195:210-控制台相关接口设计(控制多个游戏)_old - 教到你会 - BV1DS4y1n7qF

大家好,我是郁金香老师,那么这节课我们一起来讨论,我们有控制台控制多个游戏的这样的情况,那么首先呢我们来看下一段代码的一个测试。

那么这是我们的控制台阶段的,那么呢我们可以通过片名来获取运行当中的这个游戏啊,那么获取它相应的列表之后呢,我们可以的在选中的这个呃游戏来发送我们的指令,或者是这个指令的话呢。

我们可以在另一端的代码进行封装,接收到指令之后进行作死,我们可以在另一端进行相应代码的编写,那么这里呢我们只是做了一个例子,比如说我们在这里,那么这个时候我们用三个角色都是选定。

那么在这里呢他发现了什么之后呢,就把它的这个血量啊,其他的这个名字啊这一类,那么比如说我们只选择第三个发送指令之后,这里呢它只会取第三个相应的一个信息,当然也可以通过这个指令呢呃其他的形式来进行区分。

让它进行挂机啊,或者是知识的脚本啊,或者是取得其他的一些信息都是可以,那么接下来我们来看一下,那么接下来我们来看一下它相关的代码的一个编辑。

那么首先我们看一下获取我们的游戏列表,实际上很简单,全部是通通在这一个函数里面,那么这里呢我们写了一个函数,通过这个windows的hr函数来领取所有的方程。

然后这个媒体的窗口呢它会跳到这个相应的回调函数里面去执行,那么我们再回调函数里边呢,我们对它进行判断,对它进行判断,那么判断这个标题以及我们的窗口能力是否是我们的游戏啊,窗口具体,那么如果是游戏窗口。

具体会把它存到这个全局的嗯,全局的数字,那么这个数字呢就是关键的这么一个,那么我们的根据呢就是根据我们的这个容器决定的内容,来进行一个指令的一个操作啊。

也就是所有的数据呢相当于我们的这个游戏的局面呢进行了一个绑定,一个比一系,那么我们取得了这个作品之后呢,那么这个全局的这个作品啊,进入了它就有了一个列表,比说我们这里三个武器,它会存放了三个距离。

在这个全局的变量,然后我们在这里来取得了这个全局变量之后呢,我们这里是对这个控件的操作,那么这个定价是,就是我们的是明白了这个这个名字,那么首先呢我们进行内容的一个形式。

然后呢开始来骗离我们这个窗口列表,发到我们之前也做了一个初始化,在你直片面的时候啊,这里面会对它进行的是初始方法,那么也就是说这个窗口推平它为零的时候,我们这个循环就结束了,或者我们这里呢也可以。

然后用一个疑问的,进行判断也是可以的,那么判断这里面呢它是否是一个有效窗口的具体,那么这样呢我们可以防止一个窗口游戏或者完毕之后呢,就不会下场发生相应的这种信息,那么这样的也不是很好。

因为它可能是中间的某个游戏,中间的某个窗口关掉了,那么后面的我们还会继续的控制,通过最好的一次调用,这个把dgame谈到历史来重新的把这个数据更新一下,然后更新之后呢。

我们会把这个窗口的距离会把它转换成一个字串,保存到这个字串里,这里面是,那么转换成计算之后呢,然后呢,我们开始了取得这个绑定窗口的一个相关的一些人物的一个信息,去调用了这个函数,发送相应的思路。

然后取得人物的信息之后呢,我们在这里呢把这个人物的信息添加到这个计算的末尾,那么所以说就有了这一段。

那么我们执行之后呢,游戏更新呢就更新到这个列表里面。

那么我们再来看一下发送指令这段是怎么实现,然后发送指令的,实际上它也是对,主要是对我们的呃,这个h game类似对相应的方法进行一个操作,那么有了这个窗口句柄之后呢,我们对它选中的这个行业进行一个操作。

那么这一段呢之前我们有结束过好这一段呢我们就是这个定价,这里呢我们需要设置一下,设置为多选,那么有多选的时候呢,嗯我们需要来获得他选中的这个下标,那么这个下标呢它最终返回之后呢。

会保存到一个整形的列表里,那么这个呢就是保存的,咳血对中好的,然后保存在这个n p c对他,那么如果是选中的行为,我们在这里再来执行一个循环,那么这里呢这个nt count是获取的呃。

多行选中的一个组成一个函数,然后取得了数据的显示在这这里,那么实际上我们能够看到嗯,这里有一行就是我们选父母,如果我们把这横竖的竖,然后我们发出指令的时候,我们可以看一下,n p c对。

这个时候呢我们是没有选不能行啊,所以说它不会有相应的形式,比如说我们选中了某个行,那么这里呢它会显示出它相应的行,以及它相应的这个窗口的一个具体,那么我们这里可以看一下,那么比如说我们选中这个。

这个是让我们开会的检测到银行备注,那如果是选重点好,那么呢它这里面也会有一个相应的形式。

那么这里的话我们跟下边的话应该是一或二,它是在日本,这里肯定有没有相应的一个,这两个的四个零和一,后面的数字是我想对你再进行一下。

看起来像是有一个超,那么在后面的我现在就在后面,因为他没有放行这里,所以就看不出,这是一波这所有的推品质能让他,那么所以说我们就可以通过了这样的一个骗流量,来控制的很多的这个游戏。

那么这就是一个控制台的一个原理。

好的,那么这节课呢它的原理呢,我们暂时呢我们就讨论到这个地,那么更多的细细节大家可以参考这个相应的,嗯那么这是我们重建,那么这里呢就是想你们这种代码在这个上节课就写了,那么另外呢就是一些配件的一些设计。

那么这里呢我们给它添加了一个出现了一个变量,这是一个真正的一个变量,好的,那么这节课呢我们就就到这了,如果你不理解。

P196:212-在线注册控制-实例 - 教到你会 - BV1DS4y1n7qF

大家好,我是郁金香老师,那么这节课呢我们一起来编写代码,实现我们登录验证的。

那么我们继续打开我们的微单系统。

那么上一节课呢我们一起来了解了这个,键板的这个例子哈,我们编译通过了,那么这节课呢我们一起来使用一下这个纯动态链接库的这个版本啊,而不是现在这个版本,那么这个版本的话它没有写相关的例子。

但是接口函数的话都是一致的,那么我们把这里面的所要用到的啊,它拷出来,那么我们可以把这几个这一部分呢需要考出来啊。

先复制一下找到,然后呢我们先建一个新的工程,用来做登录的测试。

那么在这里呢字符起呢我们还是会选多字体的这个棋,然后在这里呢我们添加一个标签用来显示信息,那么另外呢我们来添加一个登录按钮,好的,然后呢我们所要做的话,首先呢我们是保存一下,保存之后呢。

我们打开源代码所在的目录,把我们刚才复制的这个洞啊,这个lil啊,以及这个头文件把它停止过来,然后呢我们需要用到的这些函数呢都在这个铜镜里面,然后呢它会同时呢我们需要包含一下这个lib文件。

然后我们再设置一下输出的目录,那么我们需要把这个服务器的相关信息的文件,要放到我们ex啊所在的目录下面,那么同时呢我们还需要做一步,把我们的动态链接库就是到我们的本身就有下跌。

从这里我是想,复制之后呢,这样我们就把动态链接复制到windows的下面啊。

接着我们就可以把,编写相关的代码,在这里我们添加一下线下,把我们刚才添加的这个level文件,这个文件我们添加进来,然后我们在,这个窗口初始化的时候呢,我们要做一个相应的初始化。

注意这里要做一个全局的一个标识符,那么我们复制一下初始化相关代理,那么注意啊,这里呢实际上也就是我们啊之前的这个产品编号的一个初始化,因为我们组建的初始化是一样的啊。

那么组件呢它是用对象的方式调用这个初始化的这个函数,那么在这里呢初始化函数呢它会返回一个数值,那么如果是返回的是v一-1,表示呢表示我们的链接这个注册登录器啊会成功,那也就是你们认证的表示没有连上。

那么这个时候的话可以了,就退出我们的程序,那么如果是啊,只要这个数值呢不视为-0啊,一般我们经常反馈的数值应该是零,表示问题成功,那么当然这里还可以评价其他的代码,那么我们运行一下,对了。

这里面需要包含我们的图文件,好那么我们运行一下,那么首先呢我们一定把这里呢要服务器连接成功,如果这里呢服务器没有零链接成功的话啊,表明了我们的可能是我们的动态链接库没有放到我们的windows目录下边。

那么也可能是其他的情况,那么链接成功了之后,那么接下来我们就可以做相应的验证了,登录的验证,那么登录验证的代码年年上一节课实际上已经有过接触了,那么在这里呢我们就需要一个运营和密码。

那么这个用户名我们密码是发给我们的用户的,这是用户的,当然我们需要了,在这里我们作者端哈需要在这个用,户里面创建相应的用户和密码,在这里用户名密码双击这里,当然这里也可以修改啊,修改它的用户名。

或者是修改这个密码,那么用户密码有了之后的话,我们就可以了,用这个ba模型啊,这个函数来进行验证,那么如果返回零的话,表示呢验证成功,验证成功可以使用,那么其他的情况啊,-1呢是注册码存在。

那么富裕的话是被禁用的,那么-3的话是绑定的机器啊,超限当然看你有相应的限制内容啊,做事的话表明了注册码啊,在线路本来表示过期,-6的话表示你要布局好的,那么我们再次来测试一下。

那么我们在这里可以看到啊,我们的这个链接的话是成功的,那么如果我们的密码输错了,就说我们做数码页面看一下,那么他会告诉你啊,啊返回的错误了,是注册吗,不存在,或者是你用不明这一类的啊,输错了。

那么实际上这里呢是密码错了,那么密码错了之后呢,他也会高速这个注册码不存在啊,密码错,那么如果我们的用户啊,这里是错,我们看一下是什么情况,那么这个时候呢他也会告诉他出售码不存在或者是密码错误啊。

不过实际上都是一样的,密码错误,那么账号不存在这里,它都会保存一个错误,比如说我们在这里呢再创建一个内部,那么这个创建的用户的话,实际上的话,现在他呃没有测有效期啊,不能够使用。

那么我们来看一下实际情况,这个时候呢它会显示的是余额不足,侵蚀的是幼儿病,那么余额不足的话,也就是这个剩余的天数,这里面有,因为这里没有启动,那么我们在这里呢需要给它增加相应的天数。

那么这个时候呢链接才能够通过,这个时候呢我们就可以登录成功,就可以登录成功,当然它还有一些其他的功能,比如说我们可以有一些触点的功能啊,触点和这个函数,还有一些其他相关函数的一个接口。

那么我们在呃后边的课程呢,我们再继续的探讨,那么这节课呢我们暂时就到这个地方。

P197:213-在线注册控制-注册充值激活_old - 教到你会 - BV1DS4y1n7qF

大家好,我是郁金香老师。

那么这一节课我们继续来了了解微分的注册系统,那么首先我们了解一下用户的注册,它需要用到the resist这个函数,还有我们开卡的时候,网充值我们需要用到a t t t这个函数,那修改运输密码的话。

就需要这个呃亲戚passwor,那么另外一个用户的验证啊,这个我们在上一节课嗯,已经有过了解好的。

我们先打开212课的代码。

那么我们添加几个按钮,就是注册,注册,然后一个是充值,那么另外还有一个呢是修改密码,那么登录修改密码的,我们在下一节课呢再进行了解,注册充值跟,那么我们需要添加几个编辑框,一个是用户名的,一个是密码。

那么另外呢充值这里呢我们还需要一个充值的卡号,注册登录充值,好的,然后我们在为用户屏与p码关联一个相应的字串变量。

这个是密码的。

然后这个是我们充值卡。

好的完成之后,首先我们来实现用户的一个注册。

那么用户的注册我们可以,可以看到哈他有第一个参数是用户名,第二个是密码,那么它都要求的是恰类型的指针啊,那么后边这个类型我们呃可以试看一下它的帮助文件。

当然我们要使用这个注册的功能,必须是先通过这个初始化的函数调用成功之后。

我们才能够实现注册,那么这里呢他有他想你的意义。

当然最重要的就是一个用户名封密码,那么其他的话理论上都可以省略掉啊,那么这里呢呃通道,当然了,通道的这个数字必须是1~200之间啊,通道的话表示这个呃用户和密码来可以在几台电脑上登录啊。

那么你就是多开的时候用这个丈夫相当于是好的。

那么我们知道它的运行之后呢,我们直接使用相应的应,首先我们把窗口的数据呢更新到我们的变量里面,然后我们调用相应的函数,锐减,那么首先呢我们取得他的程序get it 8分200个字节的话,肯定是个。

那么然后呢是它的命运,那么也需要取得他的缓冲区啊,不然的话类型的话会有致,那么后面这个类型的话,我们直接填零,因为它的这个类型的话是我们用户自定义的啊,那么后边呢这里是否绑定电脑,我们也填零。

那么通道这里呢我们就只在同时只在一台电脑上使用,一般呢我们选择一啊,那么后边这个初始化的点数,当然你自己给它规定一个相应的数值,比如说我们1000 1890初始化,当然它也有仅有它的相应的一个返回值。

那么如果是零的话,是成功啊,一个呢是失败,八呢是用户名啊重复,那么我们可以进行一些主题,然后呢把这个数字打印出来,那么还有这个缓冲区,使用完了之后呢,我们最好是把这个缓存去释放一下。

等一会我们再做代码的修改,那么在这之前呢,我们先登录我们的后台管理系统啊,先看一下,那么我们看一下现在的用户只有这三个,那么在这里呢我们就是一个新的用户,那么为六个一,那么注册一下。

那么这里呢就会出现一个新的用户,那么我们再注册一个,那么这个时候呢会再多出一个用户,那么这里是它的通道数啊,呃这里呢是点数啊,对应我们别相应的参数,我们可以看到这里的1800点,这里是通道之一。

那么都与我们的参数来相对应,还有是否绑机运行,那么就有这两个参数对应在我们的管理端呢也能够看到啊,我们都看到啊,当然刚才我们的登录失败了,登录失败之后呢,它会自动的退出这个进程。

那么现在我们的用户注册成功之后,要使用的话,我们就需要给他充值,那么加时卡里的这些卡号我们就需要用到啊,那么我们在出售的时候呢,也是出售这个相应的卡号,那么这个卡号的点数的话啊,嗯自己可以创建。

创建的时候多少个多少天,多少多少点创建的数量,那么在这里呢可以统一的进行创建好的,比如说这张充值卡我们还没有用过,那么或者是最后一张我们复制一下,那么要激活这个用户的话,我们就需要充值。

那么充值的话我们需要用到另外一个函数,首先我们也是把我们的数据更新到变量里面,然后调用该充值的函数,那么第一个呢是需要我们的卡号,好多,那么除了这个卡号之外呢,我们需要一个购买者,那么购买者的话。

我们就用之前的这个用户啊,这12个字体的话也够了啊,中区,然后呢后边这里是一个推荐人,我们可以了嗯,忽略掉这个参数,后面呢就是我们的一个天数呃,或一个点数,那么这个呢我们来建两个变量。

这两个是用来返回相应的数值,需要传一个相应的指针地址进去,好的,那么我们也来看一下它的房间,啊,我知道,当然最后我们使用完之后呢,对这个字串的缓冲区空间进行一下释放,去,那么这里是释放相应的存储空间。

好的这段代码我们写好之后呢,我们就是通过这个编辑框里边的这个卡号啊,给我们上面的这一个用户来进行一个充值激活的一个操作,那么我们来看一下,那么首先嗯这里呢我们需要用一个用户名。

比如说我们刚才需要激活的账户是这个郁金香啊,888啊这种,那么我们就需要在这个地方进行充值。

当然就这样充值的话,肯定他会出错的啊,返回后期啊,就表示这个卡号是无效的。

那么我们需要在这里呢重置一下没有用过的啊,加思考,然后呢到这个地方,然后进行充值啊,那么我们点一下充值,在这里我们就能够看到充值的购买者是哪一个用户,充值成功之后,那么这里的话它也发生发生了相应的变化。

首先呢这里我们它的点数加了600点,那么剩余的天数呢变成了30,因为我们这里的加时卡啊,它就是啊一个天数,30天,点数是600点,它就就会增加相应的一个数值,那么这里完成之后呢,接下来我们可以了。

就可以登录这个账号了,因为这个造出来已经进行了激活,因为他的天赋和我们的点数的话啊,都是一个正数,都是大于零的,那么我们就可以进行登录了,那么接下来我们修改一下登录的代码。

把上一节课啊跟录的这一段代码记一下。

那么复制之后啊,这一串啊我们需要进行修改,啊账户名关闭吗,还是进展,那么替换掉之前的这两个字串,当然使用完了之后,我们也需要释放相应的空间,好的,那么我们再次。

一起看一下。

那么因为这个账号已经激活了,我们就可以进行登录,1233等呃,那么这个时候密码啊,密码错了啊,刚才我们注册的是,那么我们在这里重置一下,把小米的那个,再更新一下,那么我们再重新来看一下11122。

把我们的用户名和密码记一下,68万,然后呢我们点一下登录,那么我们首先看一下这段代码是否有执行到,那么我们发现我们的登录代码的话根本就没有执行到呃,这是由于什么原因造成的呢。

因为它可能是关联到我们之前的这个函数里边来了,那么我们可以在这里加一段调试信息,看一下,因为我们之前更改了这个按钮的,那么他登录的这里的用户名和密码的话。

肯定就是错误的,那么我们可以看一下,它的确是在按登录按钮的时候,执行的是这段代码。

那么所以说我们这个时候呢,我们需要在关联出来修改它关联的这一个函数,那么我们发现这两个函数名好像是一样的啊,那么我们重新生成一下,那么我们可以先尝试把这一段代码删除掉,再进行编辑,看一下。

再看一下我们登录的代码,那么可能是某一个字串它是一样的,那么我们再来看一下他们相遇,再看一下他消息的一个应税对了,这是我们之前的,那么我们后边呢这里给他加了一个i d来给他加了一个下划线。

所以说造成了他两个按钮了,消息的传递了不一致,那么我们看一下这个数字,这个数字的话它不一样,我们需要把这个删掉,那么前面这个是小写,后边这一个是大写,那么实际上这两个的话就是一个大写与小写。

小写字母的一个区分,从这里能够看到,所以说这两个函数的话实际上它是不一样的,但是这两个数字的话它是一样的,所以说造成了我们刚才的一个冲突或错误,好的我们再次进行测试,看一下它的密码,11122。

好的我们进行一下针对。

那么有这个账户名存在,我们在注册的时候呢,它会显示复发,并不能重复,那么我们再来看一下我们相关的代码,那么这段代码的话应该是已经被执行了啊,但是他在,登录的时候啊,这里出现了相应的错误,那么这里的话。

应当是我们的密码可能是错了,我们再来,重新登录一下,那么刚才呢我们发现在这里呢我们少了一个步骤啊,就是没有把我们窗口的字符串了嗯,更新到我们的这个变量里边去,那么所以说造成它是一个空的字符串。

那么在登录的时候肯定就会出错。

好的我们再重新看一下。

那么这个时候我们可以看到啊,这里呢登录的ip地址,以及我们最后的这个时间啊,这一类,好的,那么我们再进行一下完整的测试啊,那么这里173111注册一个账户,然后呢我们在这里呢嗯复制一下。

对它进行一个充值。

那么充值之后呢,然后呢我们就可以了呃,进行登录这个新的用途,当然我们刚才好像有听登录到这个预期将888啊,这个我们不能够同时登录两个账户,所以说我们在这里的话。

第二次的时候呢,我们那只有重新登录登录一下。

看这里,来来来来好看,登录我们可以看到这里可以进行一个登录的操作,好的,那么最后还有一张卡。

那我们再做一下相关的测试,好,首先我们创建一个用户,然后呢我们注册啊,这里面会多出一个账号,然后我们呃如果是使用者的话,就去作者那里啊,或者是代理那里呃,购买我们的初值卡啊,加思考,然后呢进行充值。

那么充值之后的话,这里会看到的是相应的使用者,那么这里呢也能够看到啊,增加了一个天数,那么充值成功之后呢,我们就可以了,登录最后登录,那么登录之后的话,我们可以呢就可以使用我们的相应的开启一些。

通过这个数字的一个判断啊,添加一个我们相应的而代码在这里,在这一个问题好的,那么这节课呢我们暂时呢就讨论到这里,那么后边的话我们可以再讨论一下呃,它内置于密码的一些修改,还有我们可以解除绑定。

还有当然它还有一些呃安全的一些功能。

啊还有一些安全的机制啊,那么这些呢大家可以下去看一下他相应帮助人的好的,那么这一节课我们就到这里。

P198:214-在线注册控制-连接检测,有效检测,修改密码,解绑,释放_old - 教到你会 - BV1DS4y1n7qF

大家好,我是玉溪谦老师,这一节课我们了解以下午课api函数啊,那么这几个都是我们微正提供的啊,a api接口函数,那么第一个是用来检测我们是否与我们的服务器啊,微正的服务器啊有效的进行了链接。

那么第二个呢是用来检测我们的啊,用户伺服呢嗯正常的登录通过了验证啊,那么如果通过验证的话,那么它是有效的,它会返回一个增值啊,也就是一个非零的一个数值成功的话,那么第三个呢是解绑解绑的。

这个呢需要我们在创建的时候啊,这里有一个属性啊,绑定机器,那么一般呢我们是选择不绑机的话,那么这个就没有多大的作用,那么在绑定机器的情况下,绑机这行呢我们选择了相应的台数的情况下呢。

那么我们可以实现一个解法啊,比如说我们在这里的话选择的是绑定一台电脑,那么在我们当前的电脑上使用的话,就不能在其他的电脑上使用啊,那么我就呃如果要在其他的电脑上使用的话,就需要调用这个解绑的函数。

在当前的机器上解绑之后呢,然后才能盖在其他的电脑上正常的登录啊工作,那么另外还有一个用到比较多的呢,就是修改我们的用户名和密码啊,那么最后这一个呢这个我们一般没有调用这个函数呢。

一般是在退出我们u盾的时候呢啊使用啊,那么一般我们是在关闭这个游戏进程前,那么会调用这个函数,用来做一些善后的工作。

好的,接下来我们编写代码来进行相应的测试。

哈哈哈。

那么我们打开213课的代码,那么首先我们做第一个函数的测试,那么我们添加一个按钮,复制一下这段代码。

那么如果已经链接的话,这里呢它会返回一个增值啊,不值,那么如果它是未连接到服务器的话,那么呢它会返回数字零啊,那么所以说在这里判断的时候呢,我们可以直接用一个条件语句哈,内附加二次元来进行一个判断。

好的,那么我们运行一下,那么这个时候呢我们服务器服务器的话呃,是链接上的啊,因为我们最先的话开始的时候他有一个初始化的工作,那么实际上呢也就是嗯会链接我们的服务器啊,那么只要我们网络没有问题的话。

我们只要初始化成功之后,一般来说我们调用这个函数的话,它返回的都会是一个增值啊,那么除非你掉线人了。

那么接着我们来看一下第二个函数检测是否有效。

啊。

那么这个函数的话如果是有效的啊,也就是我们用户名密码验证成功之后呢,调用这个函数的话,它也会返回一个增值,那么如果它是调用失败啊,就是说呃是无效的,那么呢会返回一个零值法,会返回数值零fa。

那么这个时候我们没有登录我们的用户啊,验证没有通过,那么这个时候呢它是无效的,但是呢现在他已经链接到我们的服务器,那么我们登陆一个账户啊,做一下测试,啊真的,那么这个时候呢我们的密码输错了,啊登录成功。

因为这里的密码的话是33322,登录成功之后的话,我们再次检测,这个时候啊登录成功,验证成功的话,那么用这个函数检测的时候呢。

就是有效的,好我们接着看下一个函数,那么另外一个呢是解绑,但是这个呢看不到效果,那么我们只能够取得它的一个法定值,那么解绑这个函数的话,它也是要我们的用户啊登录验证成功之后啊。

也就是在有效的状态下才能够解绑成功,那么我们可以在呃在它的基础上进行修改,然后这个时候我们解绑的话,由于没有登录啊,没有进行登录的一个操作,那么他会说啊这个无效,那么我们先登录一下账号,登录之后呢。

那么这个时候呢首先呢是有效的,那么解绑失败啊,这个时候我们看一下,呃为什么会解绑失败呢,啊因为这里呢它返回零值哈,结果的话广东零的话是成功,那么其他的情况呢是失败啊,因为这个返回值的话他不是不值的啊。

注意在这里,那么我们也可以看它相关的呃,这个函数的说明,那么您呢表示成功啊,实际上刚才的这个解绑的话是成功的。

好的,那么这是一个解绑的作用啊,解绑之后呢,那么我们就可以了,在另外的电脑上登录使用,但是它同时呢都只能在一台电脑上登录,那么如果如果是我们在当前的电脑上登录之后,成功登录之后,如果没有解绑的话。

那么在其他的电脑上的话,就是不能够正常的使用的,不能够正常的登录使用,那么我们接着来了解第四个函数,接口函数修改密码它也是非常简单,第一个密码呢是以前的密码啊,这个是新密码,当然它也有一个前提。

就是我们需要是在一个有效的啊情况下来来修改,也就是说我们首先呢要登录成功,不然的话我们也是不能够修改这个密码的,那么修改密码的话,一般来说我们在这里呢会另外的用一个窗口来来修改我们的密码,看看。

然后我们再添加两个啊编辑框,编辑框一编辑框二啊,那么你可以对它进行一下调整修改,好的在确定这里呢我们添加修改的代码,取消这里的话,那么我们用添加相应的代码。

那么直接呢它通过这个相应的i d呢就有关联相应的代码。

那么在确定这里呢,实际上我们就是修改了,我们把它提3。2,修改密码,然后呢我们在这里呢添加我们的代码,那么首先我们需要取得的是我们两个编辑框的内容啊,那么这里呢我们有一段示例的代码。

那么首先呢我们这两个临时变量用来存放我们呃从编辑框获得的密码,那么取得之后呢,放在这个缓冲区之类,然后调用这个相应的函数,当然我们需要包含相应的图文件,好的,我们首先呢便宜生成一下,啊。

那么实际上这个呢它是已经定义了的啊,就是我们这里的相应的控件的id啊,那么修改的话,好了,那么我们接下来进行一下相应的测试,当然我们在这里呢也可以做一个相应的判断,那么如果是无效的。

我们可以让它先进行登录,好,那么如果他没有登录的话,我们先让他登录一下,在这里我们直接调用这个r o k退出,好的接着在这里让我们添加一个修改密码的功能,那么首先呢包含我们新建的窗口类图文件。

然后在这里呢创建一个月的对象,然后这里以模态的方式呢来显示,然后这里呢会弹出一个修改密码的方,包括我我们无论怎么改,这里呢,因为呢我们没有进行登录啊,所以说修改都不会成功。

那么首先呢我们这里呢需要进行一下登录,那么登录成功之后呢,我们才可以进行修改密码,这是之前的密码。

那么这是一个新的秘密。

这个时候呢它会提示修改成功,但是我们在这里的话,他不能够看到新的密码,为什么呢,因为在这里的话,它还没有从我们的服务器把这个数据呢更新过来,我们需要把这个呃作者端需要把它关掉。

再重新登录一下。

那么这个时候呢数据才会更新过来,这才是我们新的密码。

好的我们再做一下测试。

好的,这是我们新修改的密码。

那么最后一个呢就是我们呃退出的时候呢,这个需要进行一个清理的工作啊,按照他的说法的话,我们这个纯动态链接库的话呃,在退出的时候呢,需要将我们的微dom停止工作啊,用于关闭啊进程的当前进程的一个调用。

那么在这里的话我们可以选择我们的一对视图,那么然后呢这里有一个a p p的论,那么我们重写一下它的相关函数。

在这里呢就是在退出应用程序或者是线程。

这时候呢它会调用这一个相应的函数吗,那么做一些清理的工作,那么我们可以在这里添加代码,进行一个释放的一个操作,另外停止你的调用,相当于做一个清理的工作,那么在这里呢我们也需要包含相应的头文件说明。

好的,那么这节课的话我们就讨论到这里嗯,那么在后面的章节呢,我们再讨论了其他的接口啊函数,那么我们下一节课再见,那么下去之后的话,大家可以看一下他的帮助文档,那么可以啊。

看一下我们的这个啊扣除点数以及扣除这个时间啊,这些函数呢我们用的比较多啊。

那么其他的后边的这些函数的话,我们相对应的就比较少,那么可以大家有需要的可以直接去看一下他的啊。

关注文档好的。

P199:216-过游戏保护分析-多开分析_old - 教到你会 - BV1DS4y1n7qF

大家好。

那么这一节课我们继续来分析一下,热血江湖系统多开,那么之前我们也有分析多开,那么之前我们多开实现的方法是把整个,客户端的目录进行修改,把整个客户端的目录,还有我们另外修改了我们的登录器的相关代码。

那么这样来实现的话是非常的麻烦的,那么这一节课我们分析另外的一种方法,那么首先热血江湖这里面有一个动态链接库。

叫YTP,明白了,动态链接库,那么我们来看一下,用这个电话档,这边看一下,那么它的密码保护以及我们其他的一些防止,游戏多开的保护的话,都是通过动态链接库来实现的,那么在里边我们也能够看到相应的这些。

函数保护的初始化,不开始保护停止,那么这个稳稳的简历,相应的可能是我们的输入密码简历的一些,那么我们先把这几个关键的函数,先把它名字记录下来,然后我们进去看一下这几个保护的函数的原理。

那么我们现在看到的这个函数,是我们的函数,那么我们现在看到的这个函数,是我们的函数,那么我们现在看到的这个函数,是我们的函数,那么我们现在看到的这个函数,是我们的函数,那么我们现在看到的这个函数。

是我们的函数,那么我们现在看到的这个函数,是我们的函数,那么我们现在看到的这个函数,是我们的函数,那么首先我们看一下初始化,初始化这里是一个循环,那么里面是什么,初始化可能是初始化了一些变量。

但是从这里边的话,我们看不到关键的东西,可能我们去加密子,真的从里面来看的话,还有解密子,那么我们看开始保护的时候,开始保护,那么保护的话我们会到这里,那么首先它的第一个动作。

是通过我们窗口标题来查找标题,那么标题查找之后,它会做一个比较,如果他没有找到,因为标题的窗口的话,那么他就会直接执行在下面这一步,就是退出这个进程,游戏就会退出,那么所以说我们直接改标题的话。

那么改过之后的话,那么这个保护的话,他就会发现,那么就会直接退出这个游戏,那么从这里来看的话,可能是更多的时候进行判断,那么我们可以在这里下一个段落,那么我们去密,然后按下Tab键。

那么在我们按下Tab键的时候,我们发现了他调用了这个函数,就是我们输入密码,那么说明这个保护的话是对我们的,可能是对这个密码的话,还有是一个多开,这一步,好,那么我们继续往后边看。

那么如果我们找到了窗口,找到窗口之后,我们再往后边看的话,他会发一个致敬的消息,发给我们,那么这个消息具体是什么作用,我们暂时不知道,那么我们再继续往后看,那么在这里,他会设立一个Debug的标志。

这里他通过我们的窗口,或者当前的进程ID,然后我们这个ID之后,他进行一个全局的hook,应该是现成机制,现成机制,Debug,那么我们再往后边看的话,那么在这里,他也是调用的。

这个函数相当于我们看ESI,之前的这个地址,部分依然是ESI,那么他多次调用,全局hook,但是钩子的类型的话,在这里他有了改变,这里我们是09,那么这里也是09,那么09的话。

他两次安装了Debug的标志,后边这里是13,那么13的话,可能是其他的键盘,键盘钩子或者是标钩子,大家可以去查一下,然后这里是模块的地址,那么用了模块的最后这一个的话,这里是我们的,我们看。

这前面的他与这前面的不一样,那么在前面的Eax,他是我们的一个现成的ID,那么现成的ID的话,我们应该是这里获取了一个现成的ID,那么但是在这里,我们看一下,在这里,他是我们的表示为全局的钩子。

可能是一个全局的键盘,那么实际上我们之前的不卡,不卡,卡OD的相应的代码,实际上也就是对我们的,这个SETTING的,对全局的钩子进行一个HOOK,进行一个HOOK的操作,那么键盘钩子取消之后。

那么就不会了,卡我们相应的ID,那么我们再接着往下看一下,还有一些其他的代码,那么这里的话,我们他也有一个判断,那么如果出现了什么情况,就会在这里的调用,保护停止保护的一个动作,那么停止保护的话。

这也是就对我们相应的,对我们相应的钩子进行HOOK,把我们HOOK的一个操作,从这里来看的话,那么这里有很多的钩子,一个两个三个四个,然后有一个钩子,那么说明他的保护的话,全部都是通过钩子来实现的,好。

那么我们大致知道了之后,我们可以通过尝试,用调用停止保护的函数,来停止它,但是经过测试的话,直接停止的话,就也是没有作用,所以说我用了另外的方法,那么我的思路是这样的,首先我们多开我们看一下。

为了保证让方便应对的来获取,当前的当前这个人气的窗口证品,那么所以说我们在这里修改它的标题,首先我们修改它的标题,修改标题之后,我们然后对120 E-set,AFC这个地址。

对这个地址的自创人标题进行图定,那么这样的话,我们的不同的游戏之间的话,标题就是独立的,而且我们能够保证让这个环境工作,找到一个正确的一个窗口标题,那么这样的话,我们就能够实现多开。

那么实际上就是这个环境工作,来造成的这个问题,那么我们先把它记录一下,好,我们先把这个标题记录好,然后我们就把这个标题,把它记录好,然后我们就把这个标题,把它记录好,然后我们就把这个标题,把它记录好。

然后我们就把这个标题,把它记录好,然后我们就把这个标题,把它记录好,然后我们在这里的话,我们发现从这里能够看到,它是动态应用,加上ECAFC,这个地方是标题,而且这个地方它是止毒的,我们是一个省。

这个是止毒,可险的把它去掉,这样子的地方,另外还有一个地方,这个它不是我们值得保护的,那么我们暂时可以不保护,那么也可以把这个地址,记录一下,记录一下,有可能会用到,那么这个位置的话。

我们没有办法去改变它,不需要改变,那么这是一个问题,关键也就是修改这个地方,那么修改这个地方,我们还有一点,经过测试,我们发现经过编辑代码测试的话,还是需要像以前一样,那么以前我们是复制的。

整个这个目录,那么现在我们经过测试,我们发现可以不用复制,这个折扣图桩,因为折扣图桩的话比较大,那么我们可以只复制一个,就是这个YBMen文件,那么复制这个文件,新的问题又出来了。

就是说要保证你的客户端,它在你的动态链接库,要求的是不同的实例,那么比如说我们凭个例子,那么比如说,0123就是YBMen,它的一个副本,那么副本的话,我们需要的第一个程序,比如说我们在入到动态链接库。

就更是它,应该是00这一个文件,那么打开的第2个就是01,那么第3个的话就是02,那么实际上,我们比之前的原理想法不多,但是你能觉得,它就是节省了我们大量硬盘的空间,那么在这里,我也写了这样的。

写了这样的一个函数,这样的一段代码,那么我们来看一下,那么这个代码,我们下一节课,我们再来说一下怎么来编写,那么我们先来看一下它的效果,那么首先,我们把这个主频的动态链接库,放到我们的客户端下边。

那么放到这个下边之后,实际上它是通过之前的动态链接的,解析来载入的这个频情据,然后它执行的原理的话,每次它会上YB论文,这是一个hook,然后它在我们载入这个文件的时候,它会对它进行更连。

然后更连的时候,我们在加载动态链接库,加载的时候,就加载这相应的文字,那么我们现在测试一下,这个动态链接,我们测试一下,这个动态链接,它是用一个4K的显存画面,然后在4K显存画面之后。

它会对于这个显存画面,有一个更连的动态链接,这个动态链接,它会对于这个显存画面,有一个更连的动态链接,它会对于这个显存画面,有一个更连的动态链接,所以我们测试一下,我们测试一下这个显存画面。

它会对于这个显存画面,有一个更连的动态链接,所以我们测试一下,我们测试一下这个显存画面,它会对于这个显存画面,有一个更连的动态链接,所以我们测试一下,我们测试一下这个显存画面,它会对于这个显存画面。

有一个更连的动态链接,所以我们测试一下,我们测试一下这个显存画面,它会对于这个显存画面,有一个更连的动态链接,所以我们测试一下,我们测试一下这个显存画面,它会对于这个显存画面,有一个更连的动态链接。

所以我们测试一下,我们测试一下这个显存画面,它会对于这个显存画面,有一个更连的动态链接,所以我们测试一下,我们测试一下这个显存画面,它会对于这个显存画面,有一个更连的动态链接,所以我们测试一下。

我们测试一下这个显存画面,它会对于这个显存画面,有一个更连的动态链接,所以我们测试一下,我们测试一下这个显存画面,它会对于这个显存画面,有一个更连的动态链接,所以我们测试一下,我们测试一下这个显存画面。

它会对于这个显存画面,有一个更连的动态链接,所以我们测试一下,我们测试一下,测试一下这个地方,测试一下这个地方,那么实际上我们可以从这里来看到相应的标题,那么也就是我们更改之后的标题,之前的标题是这个。

所以说这一点需要重复,那么还有一个需要重复的,也就是我们需要在动态链接库,那么我们可以看到,现在它的动态链接库,就不是之前的动态链接库,而是这个一级加密的一级加密,那么我们另外还需要。

所以说就是我们动态链接库,我们记得输出这个PIN,当然这个名字的话,现在已经被我们修改,现在是,是这个,那么这个地址我们需要了,把它记出来,那么这个是我们之后要用到的,因为我们需要在注入代码的时候。

需要把这个动态链接库的名字修改成,我们匹配的一个地址,比如说后边我们就是修改,修改的这个动态链的地址,当然我们在修改之前,我们需要用API,需要布置一个它的一个背后,需要这个文件存在才可以。

那么大概的原因就是这样,那么下一节课,我们通过我们线路的这些数据,来编辑相应的代码,然后把这个地址,把它编辑成一个新的地址,然后把它转移到我们的新的地址,然后把它转移到我们的新的地址,那么我们就会看到。

这个地址的地址是一个,我们叫它是一个地址,但是我们需要用API来转移,它转移到我们的新的地址,那么我们就会看到,这个地址的地址,它转移到我们的新的地址,那么我们就会看到,这个地址的地址。

它转移到我们的新的地址,那么我们就会看到,这个地址的地址,它转移到我们的新的地址,那么我们就会看到,这个地址的地址,它转移到我们的新的地址,那么我们就会看到,这个地址的地址,它转移到我们的新的地址。

那么我们就会看到,这个地址的地址,它转移到我们的新的地址,那么我们就会看到,这个地址的地址,它转移到我们的新的地址,那么我们就会看到,这个地址的地址,它转移到我们的新的地址,那么我们就会看到。

这个地址的地址,它转移到我们的新的地址,那么我们就会看到,这个地址的地址,它转移到我们的新的地址,那么我们就会看到,这个地址的地址,它转移到我们的新的地址,那么我们就会看到,这个地址的地址。

它转移到我们的新的地址,那么实际上我们在,O2D里面进行搜索,就能够在这一块找到,这块炸进去,这块炸进去,这块炸进去,以及还有相关的电路,以及还有相关的电路,就能够在这块搜索,就能够在这块搜索。

就能够在这块搜索,就能够在这块搜索,搜索到这块炸进去,搜索到这块炸进去,搜索到这块炸进去,搜索到这块炸进去,搜索到这块炸进去,搜索到这块炸进去,搜索到这块炸进去,搜索到这块炸进去,搜索到这块炸进去。

那么这里在未修改之前的话,那么这里在未修改之前的话,应该是,应该是,应该是,左邊的「製篡幫我」海拔和繼承怎樣把這個海拔加進去,(看看為什麼現在輸出是零),就是說要進去的話。

文案的製篡工作需要進行一些調整,那麼還有就是另外一個地方,就是需要這裡的零需要修改多一點,就是這裡的零需要修改多一點,然後進行一些修改,如果這裏的零是較好修改,那麼可以支持,那麼一台電腦的話。

最多也就可能10台或者是20台,那麼預留了255個空間的話,它是足夠的,好的,那麼這一節我們簡單的就分析到這裡,那麼我們下一節再見,(這裡又攝出了很多廢話,抱歉,不要緊)。

P2:013-使用背包中的第N格物品 - 教到你会 - BV1DS4y1n7qF

大家好,我是郁金香老师,qq 1503365秀,欢迎大家参加郁金香技术编程培训,那么在前面的课程里面啊,我们分析了一个金创药使用的一个靠盘,那么当时的这个金创药呢,我们放在的是第一个啊,放在第一个。

那么如果我们要使用其他的啊,某一格的物品,那么应该怎么办啊,还有我们这个ec x它的机制,当时我们还没有分析它的来源啊,来源于什么地方,那你为什么定,那么我们还要继续的找一下。

那么首先我们把这个机子先分析一下。

打开我们的o d嗯,然后转到我们相应的函数来,转到相应的代码这里。

那么在这里下一个段,那么我们首先分析这个ez x的一个来源,嗯,那么我们首先让他断嗯,直接往前面找一下e c k来源于e d i,那么e d i我们往前找一下,先分析一下范,哈哈,好。

那么我们移到函数头部,来看一下pi的一个来源,再再看一下啊,e d i,那么我往前找什么时候这个e d i的值对,写错了,那这个扩呢比较大,应该里面封装了不少的功能,比较大的话。

我们就用c a e来找一下,已到手后,我们看一下e d i a它来源于上级的ec x,我们在这里下一个段,或者它本来这里就有一个调用的来源,我们转过去看一下,转过去看一下他的e4 x,320我们看一下。

在这里使用一下物品,点一下右键,e4 x我们看是不是这个数字,我们先把它记记录一下,uc写的c图四的啊,我们要找的应该是这个c c f是啊,你们要找的是这个来,那么我们在在某个物品上面啊,点一下右键了。

实际上实际上我们所找到的这个库呢,嗯这个使用的一个call,我们可以从这里还可以看出来,从1b x这里可以看到它有一个下标,这个是七,我们是用的是这一个第八个,那么如果我们在第六个上面,我们按一下右键。

那么这里是六,如果在第四个这里按下,那么这里按下右键呢,我们这里是三环,所以说我们这这个课的话,它实际上并不,是说啊金疮药的一个使用的一个课,那么这个参数是固定的,是一,那么这个参数是零。

啊这个是第11个,第11个好了,那么我们再来找一下它的机子,找一下机子,接着我们可以用c一来找一下,我们看到这两个地方来呢,直接就有一个数值出来啊,那么究竟哪一个是呢,53卡。

3c这个数字有点比较局不行,这个三幺被8b3 c,那么我们前面分的分析了,恰好就是我们所要找的这个地址,那么他传的这个mc x的值,那么所以说我们在这里呢实际上用不多。

早之前我们就把这个机制已经找出来啊,只是不知道的啊,这里呢恰好就是放了他他们的,如果我们取出来的这一个呢,这里呢它是什么呢,就是我们的,取出来也是我们对方的一个对象,好那么我们把它整理一下,复制出来。

那么结合我们今天所分析的啊,这个库啊,它可以使用某一格的物品,那么前边我们在,第11课的时候呢,这里有一个公式啊,还有一些啊属性的一些值,那么这两点我们结合起来的话就可以了,写成一个函数。

那么比如说我们要使用金创药,片名片离到金疮药啊,它的下标是多少啊,它就能够使用金创药,那么如果我们要使用这个人生,原来这个人生是在第一个的,下标引进来,如果我们要使用金创药中啊,那么我们可以写一。

这个金创药中,它是不是存在的啊,如果存在啊,就返回一个它的一个下标值啊,原来他是在第二格,那么我们把这个电热格这个下载了,传到这个函数这里啊,那么我们就可以使用第二格,那么我们先来测试一下这个函数啊。

啊,那么首先呢我们呃这是下标,第二个参数是一入定的,这里呢我们要改一下hc x,取出里面的词,然后我们输入到,游戏里面,那么比如说我们看一下啊,现在第一个的人生是51啊,数量是。

那么如果我们在这里使用一下,这等一下变成50再使用一下啊,47,如果我们要使用第二个的金矿要小,我们这里下个来数一,这个时候呢我们看到啊,如果要使用第二个呢,这里我们哦第三个呢我们输入下标二。

看到他也在变化,能看到他的变化是法伤口,那么如果我们要使用第四个呢,这里呢我们就输入三啊,三现在它的恢复量是10458,107458啊,这个时候他没有这个血量没有掉,说明这边的血量不是满的是吗。

那么如果我们要使用第五可能是个物品,它的价格是四,那么他就直接就回城了哈,那么如果我们使用一下的话,那就不会回城,就回到城里面来了,这个时候,好的,那么我们的这个代码的测试呢,就测试到这里。

那么我们下一节课呢,我们呃对这个物品使用的功能呢,进行一个封装,写成我们的一个函数,通过我们所分析的这两个数据,安装成这样一个函数,当然大家下来也可以自己写一下啊,不是,故事,根据这个物品呢。

如果它存在的话,那么使用成功之后呢,我们就不看,然后成功,就逻辑的话就是呃,如果这个物品就是物品的名字。

然后下一节课呢,我们就要写这样的一个函数,这个呢你呃作为这一块的一个价值,一个拙劣啊,那么厚厚的一个主力啊,有一个大家思考一下啊,那么下一节课呢,我们对这个函数来进行一个功能的,一个封装起。

从我们的c加加的一个代码啊,那么今天这节课,我们这个机子那个分析过一个破的。

P20:031-封装技能列表与选中技能 - 教到你会 - BV1DS4y1n7qF

大家好,我是郁金香老师,那么今天呢我们对技能列表以及技能对象呢进行一个封装,那么打开第29课的代码。

那么首先我们展开我们的机子单元,添加我们的技能列表的机子,啊,那么技能列子的呃,技能列表的基础添加之后呢,我们再展开我们的结构单元,添加智能对象,那么智能对象我们看一下嗯,这几项属性给它添加进去。

那么添加之后呢,我们先注释掉三个说,那么第一个呢是它的一个分类,那么第二个呢是一个数组的下标,所有的所有对象,数组的下标,那么第三个是对象的名字,那么最后最后一个对我们有用的呢是这个技能是否已经学习了。

它是一个物流系统的职业,这个呢但是只占两字节,可不是我们初始化的时候,读的时候要注意,啊,那么除了这几个属性之外的话,我们还要给它添加一个属性,也就是他在这个技能里边技能列表里面的一个下标呢。

我们要给它添加进去,嗯,好的,那么我们保存一下,接下来呢我们建议了对象之后来定义一个相关的技能数据,那,么这个技能数值,我们看一下它的一个大小,1234,这里是八个八字呢,也不是32数字的大小。

那么它的类型呢就是我们的这个技能,那么然后呢我们还要对它进行一个相关的初始化,对这个技能数据,然后转到我们的设计是当年移到最后,然后把这个几个相关的属性做出来。

啊那么我们就要对这里面的这些偏移来进行一个相关的初始化,那么初始化的时候呢,我们要再看一下这个公式,好的,那么然后呢我们要对内存进行一个相关的读取操作,那么在这里呢我们做一个相关的日常处理。

那么首先呢我们先取出前面的数组的一个基地址,那么后边呢这里是数组的一个下标,顺着这个下标i那我们先定义一个变量,好,那么这个变量呢我们就用来指向这前面的这段地址,那么首先呢我们是读出这个机子。

好那么这样呢我们把这个机子呢就读出来了,那么读出来之后呢,我们还要加上这个4100的偏移,那么这样呢我们这里我们需要进一层指针,需要进一层指针,好那么这样读出这个数组,最后呢我们还需要给它加一个括号。

把它转换成指针的类型,那我们再来看一下啊读书前面这一段,然后加上我们的410编一下,这里还需要一个防护器,好那么这个数组读出来之后呢,我们就可以对它进行一个相应的片假a哎。

那么数组的大小呢是刚才我们看了一下,是32嗯,下次,那么首先呢我们对相关的数据来进行一个复制tmal啊,第一个我们是它相应的一个下标,jpm下载,那么复制为i。

那么然后呢再是我们的这个类型对象的对象的类型的话,我们就需要用这个数组,那么这个数组呢它取出来是对象的基地址,那么这个地址呢我们需要加上一个相应的偏移0x08 ,这样呢就直到我们的分类这里了。

应该是放这里,那么直到这里之后呢,我们还需要呢把它当成一个整体来看看,这那么需要图书里面的一个地址,好那么这里读出来之后呢,我们后面呢我们可以复制一下,那么写法也是类似的,这是所有数组的下标。

那么呢它是0x0 c和这个题,嗯然后我们就是它的名字,那么名字呢这里呢它是掐着这个类型,而且它的数据呢它本身就是一个指针,所以就不需要提出来啊,这个这个偏移是c,那么还有一个它是否可用。

那么这个它是两字节的,那么我们要注意一下,这里这是word的,只能读两次,解读多了的话他也会啊,这个数据来显示就很乱啊,不会是我们想要的零或一这两个数字,咳咳咳,那么也取出对象的基础。

再加上我们的偏移x t和六,我们看一下,大概就是这几个偏移,那么在读的时候呢,我们说的这个1b这个类型的话是我们不需要的,我们需要的是技能对象是连x1 c的,那么所以说在这里呢我们还要做一些判断啊。

那么第一个判断呢我们就是还有一部分它是为空的,这里面没有对象黑黑的,那么为空的话,我们也要做一个判断,就要判断相应的这个数组和对象取出来它是否为空啊,那么如果它为空的话,我们这里呢就继续下一轮循环。

那么后面呢我们还要加一个if语句,那么这个if语句呢我们是来看它的这个对象的类型,也就是这个数据它先读出来,我们懂了对吧,这个这个数据就在前面,那么如果读出来他的这个类型啊,如果是等于多少呢。

等于我们的0x1 b那么这个也我们也不需要把现在在里面啊,你继续下一轮的一个循环,继续下一个循环,或者我们就直接用这个数值来表示,看,我们先把它读出来哈,进行一个判断判断,如果不是ec的这个类型的话。

那我们就继续把下面的一个循环,那么在这之前我们还需要对整个列表来进行一个初始化,zs就是个对象,过年来初始化,当它的大小来源就是这个结构的大小,嗯,好那么这里初始化单元的话,这样我们就写完了。

加上我们看一下这一句,你可以说对了,这里我们需要一个尺寸的那个转换,转换了之后呢,我们就可以少了一个新号,那么这里完了之后呢,我们再添加一个相应的呃打印信息的一段代码,那么这个打印信息的话。

我们也可以直接就可以骗离呃,整个对象数组,那么打印的话我们就用我们的调试信息这个函数来打印,那么首先呢我们是它的名字嗯,名字之后,然后是它的一个下标下标,然后是它的i t i t呢类型是类型。

然后再是数组的i d,还有是否考用。

那我换一个行也是,那么这里少了一个t secure,那么我们只需要在前面呢初始化一下就行,那么在这里呢就不需要每次都调用这个函数,但是我们要知道使用之前呢要初始化一下,不然我们就用这个指针的方式来调用。

就像嗯做这种方式来调动我们的这个数据,但如果前面经过一次初始化呢,我们就可以不写这个前缀,就直接用里面的这个数据就可以好看,然后呢是它的名字,那么名字过了之后呢,是数组的一个下标或kill。

那么这个下标过了之后呢,是它的,所有对象数组的1i下边我们就把它叫做it这大,然后是是否可用,那么就是这四项应该还有一项,先我们看一下名字,那么这个是它的下标啊,这个是类型,还需要一个类型。

一九泰国什么,好那么就是这几项,一共五项,我们编译一下,那么这里我们找了一个tk,kiss kill lis,好那么这里写成功了之后呢,我们需要定义一个全局的一个变量,一到函数的程度。

全局变量实际上我们最好的做法,我们是加一个g的一个情绪,然后我们把它加到啊全局变量单元,啊,那么既然这里我们加了一个g的一个前缀,这里呢我们全部都把它加上,这样的一个命名规则都要好一些,世界上的内容。

哈哈哈,哈哈哈哈,那么刚才我们替换的时候呢,我们没有啊,没有注意这个大小写的一个区分,所以说出了一些错误嗯,我们撤销一下,啊,先编译一下,真的,好,或者我们要替换的话,就要注意这个大小写。

如果因为我们前面和后面的这个命名的话,刚才是一样的,然后我们再移到它的一个头部啊,做下相关的一个修改,这里呢我们把tm去掉啊,再重新编译一下。

那么这里呢我们要注意一个大小写的,一个匹配的啊,注意一个匹配。

嗯,不错,好然后我们再编译,这次应该就不会出错了,四三,那么编译成功的时候呢,我们还需要切换到这个测试啊,这个消息这里我们添加相应的测试代码,哈哈哈哈哈,那么由于它里面本身这个第八个point啊。

max前面本身它有初始化的这个代码本身加了的,所以说我们可以不用标题的题啊,当然使用啊,先初始化再调用呢,这是一个好的一个习惯,但这里我们不加的话,我们就需要用这个第八个问题。

因为这个或者我们都这里不做一个初始化,都一个做一个相应的一个约定,那么在这之前呢,我们都用这种gt代替的方法先初始化,然后呢再来使用,二,好的,然后呢我们进行相应的测试查看,全是信息化解到主线程。

嗯然后呢中间它有一些数据呢也打印出来了,因为他没有做一个相应的一个判断啊,那么我们还代码来进行一个相应的优化,那么打印单元,再做一个判断,那么我们做了一个什么判断呢,如果他的这个类型的话。

都是我们赢的话,说明没有向里面写的数据,那么在这里呢我们就讲听了个就不打印相关的啊,他没有信息的,我们就不答应,或者用这个名字来做一个判断也是可以的,然后我们再重新编辑一下,或者主线角,然后打印出来。

看一下,可能听的人听的太多了。

再执行一下。

看起来应该是正确的问题,你看一下nd type我们有没有普及听,啊这里我们nd type本部又复制,我们刚才把它移动到前面去,所以说造成了所有的一个数据也导不出来,那么nd太婆呢它等于加八这个偏移啊啊。

这下就应该可以正常打印出出去。

那么可用的来一共就是这几个技能,前三个这里有一个,最后这里有一个,我看一下是不是这里嗯,它的下标分别是1231203,这里是四五,那么五是不可用的,六可用啊,呃最后呢我们倒数回来,这里是313029。

那么第二次球都可以用,最后那个不可以用,那么这前面的这个这个书呢,这个对象呢他的c1 b,所以说就没有偏离它,它就被忽略掉了啊好的,那么今天的这个呃代码的封装呢,我们就可以执行到这里。

那么以后呢我们就可以通过这些条件来判断某些技能可用,那么我们在使用技能的时候呢,我们就可以用到这些相关的数据,那么在下一节课呢,我们就呃就封装这个选中的呃。

这个技能怎么把它啊移到这个会快捷栏上面找相关的数据或者是扣,那么大家这个也可以把它当成是一个作业啊,再去做一下,那么我们把今天的代言先进去。

那么这节课的作业啊,就是去分析一下,哈哈因为这个游戏的话,它这个对象呢直接我们在这里面的话,这样直接是不能不可以掉鱼的,必须要把它放到这个上面的才可以调用,当然也不是说绝对不可以。

那么我们可以通过发起相应的红包啊,也可以来调用它们也是可以的好的,那么我们主要是学一些分析的方法,那么下去之后呢,大家看一下,就怎么把这个过程把它嗯用相应的库或者是数据来进行一个事情,来进行一个实现啊。

啊这个相应的考验技能移到啊,下面的这个f一到f60 的这个技能列表里边,技能栏或者叫快捷栏啊,好。

posted @ 2024-09-30 11:13  绝不原创的飞龙  阅读(3)  评论(0编辑  收藏  举报