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

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

P129:140-分析气功加点CALL及参数 - 教到你会 - BV1DS4y1n7qF

大家好,我是郁金香老师,那么这节课呢我们继续分析一下气功加点的扩及参数,那么在分析的时候呢,我们需要准备一个账号,那么至少呢它这里呃气功剩余的点数的话至少要两点以上啊,这个最好啊。

多有一些这个剩余的点数好的,那么我们先用我们的调试器啊。

附加到游戏里边,那么我们接着上一节课呃的分析呢。

就可以持续的进行一下分析,那么上一节课我们在分析气功数组的时候呢,呃我们,分析到了这个地方哈。

那么我们转到这个地址去啊,借助分析。

那么我们呃返回3~4层的样子,好像是这个地方,那么当然当时我们分析的这个ax的话,来源于我们的呃气功的一个身份的一个标志,我们按一下ctrl a啊,分析一下,那么我们再次在这个地方下段啊。

然后呢我们点一下第二个气功,这里我们点一下啊加点,然后呢会断在这个地方,我们看一下ex呢是e f它的一个来源是什么,那我们来看一下ec x好像是来源于这个ec x,看一下ec x。

那么ec x里边他读了读出来之后,好像在取得这个ax,啊这个ax应当是我们这个e d x这个函数的返回值,不应当是这里的这个数值啊,因为这个扩它有一个返回值。

然后呢这里来返回到这个x那么我们要需要进到这个库里面去看一下,实现这个相应的一个修改,也就他就不会修炼成功,那么这个点出来就不会啊,不会被剪掉,那么我们就可以反复的呢呃进行测试啊,这个时候。

呃那么我们继续在在前面啊这个地方进行下段,然后呢我们再次嗯在这里加点,让它断下来,断下来之后我们再看一下ec x的数值啊,同样是刚才的这一个嗯。

那么我们看一下他最后返回的数值呢是ef是这个地方好像是四岁,这个地方啊,恰好是四岁,最后他取出来了,进到这个库里边,那么我们也可以进到这个库里边去看一下啊,这里是进货。

然后呢我们从这里能够看到它的确呢呃是来源于e si,是来源于上层的ec x最后来加了4c,这个地方加了4c,那么我所以说我们从这里的,话能够找到他最后的一个返回值,就是呃对象加4z这个地方。

那么这也是算是它的一个参数的一个来源,那么我们直接呢可以给它填填充啊,相应的这个数字在这里好的,那么我们再让它运行起来,那么这算是我们相应的一个参数啊,提供数据。

当然这个气功数组呢我们已经通过啊其他的这个功能call的方式来,来获取了这个相应的数组的这个机制,那么我们只说他的这个对象是在这个地方是服务器,我们暂时给它取名为服务器的身份标识,服务器的id好的。

如果我们从这里来看的话,我们要分析的这个参数的话还比较多啊,需要分配的是我们这个ecx这个参数,这里的话,那么我们也可以再一次啊加一下点,可以简单的看一下这个这个时候的ec x,d b e c x。

那么我们也能够看到这个地方呢,它是呃还有这个地方呢都是我们对象的i d,那么我们用dd用四字节来看一下,那么这里呢有一个ef,那么这里呢也有一个ef,那么这样我们填充这个数据的话。

还要去分析花的时间更多一些,那么我们直接呃返回到上一层,把这个断点我们暂时取消掉啊,那么取消掉之后呢,我们,这里对象通过420啊,实际上它是通过420这个地方来获得了这个对象的i d。

那么这一点我们再次下个断点,让他断一下,断一下之后呢,我们返回到返回到上一层,看一下我们上一层的这个库,那么上一层的话是在这个地方啊,那么我们在这个地方来下一个断点呃,再次的点击这个加点的这个call。

那么我们看一下e d i的数值,d i呢这个时候是姚二机,那么我们实际上后面呢可以看到一大片啊,呃就是u2 c12 d12 e f什么什么的,这一片人都会转到这个库来执行。

那么这一片的话我们把它复制出来,看有多少这个比较长,呃12c大概的话我们看一下,那么这里的气功的话,七个八个在后面也是八个,16而且是连这里也有16,那么这一片标记的话与我们这里哈气功第一个气功数组。

第二个气功数组啊,恰好加起来是32个,那么可能这个i d的话与我们的这个气功数组的下标呢,它可能有一些联系啊,嗯那么我们在这个连环飞舞这里呢加一下点,看一下它的参数,那么这个时候呢我们发现的是121啊。

刚才是12d啊,高29~2点一,那么也就是说这个的话可能就是我们的12c,但是他已经加满了,不能再加了,那么这个呢是f12 ,这个是130,那么这个应该就是131啊,这个时候我们看一下。

那么也就是说它是在一个它有一个基础的数值,从幺日c从12b开始啊,从12c开始,就应该说啊,他是他的下标零,那么我们这里的参数的话可以这样来表达啊,那么这个e di的话。

哦这里是有一个e d i减一二线,那么我们从这里来看一下,那么我们看一下现在的di等于多少啊,e d i减掉12c之后呢,他与这个ef做比较啊,那么实际上啊这个时候的ecx呃才是真正的一个下标啊。

才是下标,那么他这里这里减这个yc实际上就是为了获得的这个下标,而这个ef的话恰好是我们的三一啊,也就是说0~31它的下标是,他在这里比较的话是比较他有没有超出这个数组的一个下限啊。

因为他最大的这个气功数组是两个数组,两个数组加起来的话,一共每一个数组来气功数组依然是16个气功数组,20 16或一共是32个,那么0~31呢恰好就能够表示啊32个下标。

那么所以说呢呃那么这里减掉123,那么这个参数呢,实际上e d i就等于我们的12c加上我们的一个下标,嗯嗯,好那么这就是e d i的这个参数,那么另外呢还剩了一个e c x的一个参数呃,我们需要。

那么它来源于我们的e s i,那么我们看一下e s i又是什么,e si的话,这个时候呢等于零系啊,暂时我们不知道是一个什么数字,但是呢我们肯定要找到它的一个来源,那么我们先看一下这个e s i的数值。

它变化嘛啊,如果不变化的话,我们暂时来先测试一下,看这个是不是我们所要的加点的这个扩,那么我们再次在这个地方看一下,看一下e s i的数值,那么这个时候我们发现了e s i的数值没有变啊。

呃只是我们e d i的这个数值变了,那么我们接下来呢可以先测试一下是否这个用这个扩能够加点,要测试的话,我们的呃需要来把这里这个修改后的代码呢需要撤销掉啊,不然的话它同样不能够修改成功,好的。

我们打开代码输入器,按减号再退回来,退回来之后,我们先计算这个e d i的数值,moe d i等于12c或者是我们e d i呢呃等于我们的下标,然后呢在a d d e d来加上一个12c就可以了。

或者它的原始,这这两句都可以走,可都可以的,都是表达同一个意思啊,那么这里呢是第一个下表啊,那么我们要让,第二个这个第二个这个气功加点的话,我们这里下边就应该是唯一,那么第三个呢我们在下边呢应该是为二。

那么我们这里的v2 ,再加上我们的yc,然后再mod c x,然后0070f670 ,好的,那么我们来做一下测试,那么我们发现了这个地方啊,它就已经可以使用了,那么如果我们换一个,这个01234。

然后换第五个试一下,那么这里呢他也能够学相应的气功,那么这里我们换1e啊,当然这个下标越界之后可能就会出错了啊,当然也也没有用啊,这个下标越界之后那么好的。

我们接下来再分析一下这个ecx这个数据的一个你si的一个来源,向上找一下,那么我们在分析之前呢,我们再次呃为了方便分析,我们把这个地方的代码来再次把它喝可一下,不然的话我们的这个呃气功的点数啊。

一会儿就用完了,我们就没有办法测试,那么我们直接来可以对,这个数据来啊,进行一个,断点的一个下一个访问的一个断点,然后我们从这里能够找到它是来源于我们上一层的这个参数啊。

e c x看一下e4 x来于一bp加八,也就是来源于这个地方的参数,我们回溯一下,那么这个时候的话我们又到了哪里了,好像是到了主线层这里了,呃地面贴图的这个绘制,到了这个地方。

它的ex的一个来源来源于最初的是0x4 c这个地方,那么我们再往前面找一下dx 4 c这个地方来源于什么地方,它来源于一dx,而一dx呢来源于我们的1d x的一个数组啊,ex乘四。

而这个一dx呢又来源于我们的e4 x,那么这样的话嗯还不是很好找,那么我们另外再换一个地方,看有没有其他的这个尺寸,那么到这里的话,我们的e4 x呢也是这个数值。

那么这个e4 x的话好像要来源来源的话要简单一些,它来源于我们的e d i加284这个地方,那么我们看一下t i加二,一个是284,那么这个地方来恰好也是放放着我们这个usi misx数据的来源。

那么我们再把e d i的数字来替换出来,我们把之前的按键断点删掉,然后呢再对这个e d i嗯,下一个访问断点,那么也可以直接再往前找一下,看能不能找到,那么我们直接放下这个断点,可能会快一些。

那么这里呢是一个循环,这类循环的话我们就不要找了,他可能是找到数组里面去了,e x,那么这个ex的话来源于我们的一dx加四,那么这样又找到这个循环里边去了,那么我们借助c一来找一下有没有其他的地方。

注意把后面的这个空格呢要删掉。

那么从这个无d里边a c e里面找了,我们直接的找到一个机制,那么这个机子的话应该应当是,那么这个机制呢它可能也是我们所有对象的啊,一个机制三要体,我们从这个地方来来找一下,可以下一个访问撞击。

ebx分析一下,那么这里的话我们实际上能够看到呢,它也是一个循环,从上边跳下来,嗯,嗯这个eb x的来源的话,可能这就是它的一个初始值啊,b c8 的这个啊可能是,所以说我们这个数组的话呃。

应当呢不是真正的这个机子,我们把它删掉,那么我们再来看一下另外的一个机制,呃另外呢这个机子呢是0f51350 ,那么我们对它下一个访问断点,那么这个时候呢会在这个地方断下。

我们直接来就找到的是一个机制气功,加点cosx查询,好了,那么我们找到这里的话,就已经找到了,找到的话,但是呢还有一个公式,那么这个地方呢也是可能还有其他的地方都能够找到这个库。

那么这个地方呢调用的次数最多,我们把它复制一下,那么把其他的这个行问段里面删掉,刷刷掉之后呢,我们还有一个公式啊,e d i加284这个地方,把它替换出来,好像就是这个数字啊,那么我们再次修炼啊。

找一下,啊,再次下段哈,然后返回到我们的把端点取消掉,返回到上一层,在这里了,我们下一个断点再来看一下它e c x的这个数值,e s i应该是d8 a d8161 d a地板恰好就是这个数值。

好的我们让它跑起来,那么完整的这个写法的话,我们再把代码注入器里面的代码复制一下,那么insx的来源是来源于这个机制,然后呢再让我们的ex in six,再加上s284 ,那么这就是我们最终的这个数字。

这里呢是它的一个下标,那么比如说我们这里是二啊,再次调用微笑,当然我们要测试的时候呢,是跟刚才一样,需要进去把这个相应的代码修改了,需要把它恢复一下,那么这里我们跟这个连环飞舞加点。

好这里呢我们最后几点呢,我们加到这是第七个啊,下标我们改为七,012346啊,这个是七哈,最后的,那么第七个呢它的下面是六才对啊,不然它加满了,那么我们这里改为的时候呢,就应该是这个转攻为守,好的。

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

那么这就是我们最终的啊这个气功啊修炼的扣,当然呃大家可以下去之后来分析一下,那么这个这个的参数呢大家自己留成一个坐力哈,大家下去分析一下作业,然后呢肯定也,但是这个肯定要复杂一点。

肯定要去骗你一下我们的这个气功数组,取得相应的这个参数才可以确立之后呢,我们要找到这个对象提供对象,然后要要把相应的这个命令的指令呃,还有这个气功对象的一个身份标识了,我们需要添加到。

这个缓冲区结构里面,那么这个就当成是一个作业啊,大家自己下去完成一下,嗯。

P13:024-选怪功能分析 - 教到你会 - BV1DS4y1n7qF

大家好,我是郁金香老师,qq英文33057,那么今天呢这节课呢我们一起来分析一下呃,选怪的一个风筝,那么选会呢它有两种可能,一种呢就是往某一个选会的一个变量里面写入我们对象的一个地址。

那么另外一种可能呢就是写对象里面的某个属性,经济啊,对象属性里面的,比如说呃怪的一个怪对象的一个i t,或者一个能够表明他是个关于对象的一个标识,这样进去,那么这两种情况呢比较常见。

那么我们打开c来搜一下啊,它是哪一种情况,但是无论它是哪一种情况呢,只要我们在呃选怪的时候呢,或者是更换这个怪物的时候,更换选中怪物的时候,那么这个变量里面的数据呢,它可能就会被写入,就会变动。

那么我们就可以通过这一点来一项分析的,那么首先我们试一下未知的初始值,因为这个时候我们不知道它具体的数值是多少,那么收敛之后呢,那么我们没有去改变它的时候呢,它就是一个未变动的一个数值。

那么未变动的这个数值呢我们可以收多次,只要我们没有去更改这个选中的怪物呢,我们都可以收,但这种方式来说的比较慢,那么我们快一点的办法呢,我们就是更换一根,更改一下所选的这个怪物,选择一个怪物之后呢。

我们收入变动的数值,这样就会过滤到很多,哈好,那么我们再一次啊更改选中的怪物,再搜变动的数值,然后再次更改,不断的更改选中的怪物头,然后呢我们也可以选选中这个血条,这里变化只能是一次啊变动的数值。

但是这个未变动的数值呢,在我们没有更改选中怪物之前,我们可以做多次,那么在选中人的怪物选项变动的数值,然后再搜未转动的数值,然后再选中自己只有变动的数字,然后我们再选中怪物则变动的属性,在选中之前。

那么这一卷来选中自己,它也有可能是零嗯,当然这几个数据它都有可能是我们先把它添加进来,然后我们对第一个地址进行一个,找一下访问了这个地址的大夫,选中怪物,那么这个时候我们可以看到哪些代码。

它都是对这个堆栈进行操作的,堆栈进行操作,那么这种情况下的话,它可能性比较低啊,这种因为这个时候我们所写入的地址呢,它也是我们的usp和e p p,e s p呢是从182开始。

那么证明这些幺八日开始的机制了吗,5184开始的这个地址,他可能性这个相对要低一些,要听一些,但这个数值我们看到它也在不停的变化,所以说我们也要把它删除掉,因为这个时候我们根本就没有改变。

那么也就是说这两段地址可能性比较大,还,有一个也就是这个地址,我们共16进制,能看见1376,那么我们在选中一下,拜你把选中怪物来执行了一次的代码,在后面这样解决写入的人只只有这一个。

那么我们说的我们是要找像我们这个选位的变量写入的这个地址,那么所以说这个可能性呢比较大一些,比较大一些,你先把它复制出来,着重点分析这两个地址,先关掉,那么这个地址的话,ec x呢看来应用前面这个机子。

那么所以说它的地址也能够取到,那么接下来我们先把调试器切切掉,切割掉了,我们需要再次附加这个境界。

那就卸载卸载掉了调试器,然后我们接下来用og来分析它。

哈哈哈。

那么附加之后呢,我们先转到这个写入的地址,那么是不是这一句啊,关系到我们的选中会了,我们可以在这里跟他加上一个logo,可以去那,那么然后呢我们再到系列,那这个时候呢它也显示我们的血条。

那时候我们发现了显示血条呢,它就有一些几个怪的,都会显示一个血条,就会有一些错误的一些错误。

那么如果我们去攻击这个怪物能力,这个时候呢我们发现了攻击不了它了啊啊无论如何,你鼠标双击都攻击不能,那么说明的话,这一段代码的话,他可能就是我们的选中怪物的这个功能。

就是往这个变量里面写的一个东西就行了,那么这个呢是它的基础,那么是不是呢,我们可以做一些测试,加幺四平方,那么这个写入的这个值呢,现在是f f啊,也就是我们双字节的-1,那么这个时候呢未选中罐子的时候。

他5f r你把它背出一小,那么选中怪物,我们看它这个ex的来源是来源于ei,那么这个e si究竟是一个什么东西,我们在这里下一个段,那么在选怪的时候呢,它会断下来,我们来看一下a t e 12。

那么我们发现了ec这个偏移呢就是137608,这个偏移量是二一,那r e这个偏移的话我们很熟悉啊,为什么要说很熟悉呢,我们在之前分析的时候呢就遇到过哈,这个呢代表一个怪物的一个分类啊。

加八这个位置我在之前分析的时候,那么这个时候我们知道了啊,也就是说加在这个地方的,它有一个可能就是,我们对象的id往这个地方一写,就能够实现我们的血外功能就如此,那么我们也可以做一些测试。

现在这个怪物的功能我们看是多少,嗯,在1376,这个呢1357,那我们改成1376,看一眼会有什么效果,那么改了之后呢,我没有看到任何的效果,但是我们把ctrl f呢把这个动作显示出来。

去攻击它的时候呢,我们发现了会选中的人,有显示血条的那个呢不会被攻击,而这个呢我们改写的最后的这个怪物呢,它被攻击了,那么说明的话它这里呢它是通过我们怪物的加零碎这个标识了,去对它进行攻击。

那么我们是以后要选中怪物的时候,我们就可以,这样来选择第20课的时候,因为我们有分析才20克,18克,你看那么18课这里,然后我们就分析啊一些怪物的属性,看一下应该是20克,这个网站里面的,20克。

这里呢我们分析加八这个位置,它是一个对象类型的一个分类,编号二一呢是我们的怪物,三一呢是玩家,然后我们在前几课啊,前几天我们分析课是一个无,那么这个五五呢它是我们的动作对象,刚刚在分析的时候都发现了。

有一个无论是这个玩家对象也不在了,这个三要设计740,这里面,还有我们的这些动作的对象呢,那么他这个id的话,我想也有可能就是这个大的一个对象列表里的一个下标志啊,那这个我们留在后边来证实。

那么现在我们选怪的话,我们可以怎么办呢,你们就可以这样就先骗你这个怪物的数据,比如说这是零啊,那么要选中这个怪物的话,我们就是把幺二,零五这个数字给它改写出来,当距离远了之后呢,可能选不中啊。

我们看一下,在这里复制120进去看没有效果,然后再选我们的板块,这有什么东西啊,那么我们在这里呢,我们可以选一下攻击啊,可能是距离太远了,没有效,距离太远,超出一个工具范围。

但是所以说我们还要在选会的时候,我们应该加上一个距离的一个判断,距离过远之后呢,我们不能够去选择了啊,那么这个具体功能的一个测试呢,我们留到下一节课了再对它进行一个测试。

那么这个对象究竟是一个什么对象呢,他加幺四平八这个地方呢是我们的选中怪物,那么我们移到头部来看一下,那么这里呢我们发现它加八,这里的分数平衡呢是三幺,那为什么是问我一个玩家里面啊,写出了群众怪人。

那么这个玩家的话其实可能是我们自己,我们用dc来,显示一下,第四呢加幺八这个位置为就是我们自己的一个名字,自己的一个名字,那么说明我们这个对象的话,它就是一个玩家的一个对象,就是我们角色的一个对象。

这个机子里面存存方法,好了,那么今天我们所分析的呢,就是这一些这个地址栏是我们的玩家对象地址,那么加上幺四比八这个地方是我们的选中怪物,那么加上幺八这个位置是玩家的名字。

啊当时我们也分了加八这个位置的,加1+1发,这图在第20课的时候,我们就已经分析,当然当时有这个是玩家的一个对象啊,是其他的一个玩家,那没有想到的是我们自己角色的这个对象呢,它也是同样的一个要编号好的。

那么下一节课呢我们再对我们选中怪物呢的一些功能啊进行一个封装,当然还有一个显示血条的这个功能,那么显示血条的话,我们当时我们发现啊。

在前面我们就有分析了,在第,日式的课的时候,这里有个三要四,那么如果我们这里值一的话,那么这个怪物呢就会显示这个血条了,那么所以说我们选中怪物的时候的同时呢,我们也可以向怪物都像314这个地方写入一啊。

请勿进,好了,那么下一节课呢我们再对玄幻功能来进行一个封装啊,这节课对数据来进行一个分析,好的。

P130:141-游戏多开分析 - 教到你会 - BV1DS4y1n7qF

大家好,我是郁金香老师,那么这节课呢我们分析一下啊,游戏的多开的一个分析。

当然游戏多开的话,它有很多的这个方法来对抗我们的多开呃,比如说我们常用的可以枚举我们的这个窗口吧,on the window,或者是查找我们窗口的标题,或者是呃查找我们窗口的这个类比。

当然还有也就是我们的呃创建我们的共享内存这一类的,那么我们今天来看一下,这里已经打开了一个游戏,那么我们在多开的时候呢,它就会弹一个窗口出来哈,说目前呢呃什么正在自动更新或者程序运行中嗯。

要加一个参数来关闭运行中的程序啊啊否则的话无法运行这个程序,那么也就是说他在启动我们,这个登录器的时候啊,有限的这个登录器的时候呢,那么他肯定有这个代码检测到了我们的这个游戏的一个运行,运行的一个状态。

然后再谈的这个窗,那么谈到这个窗口的话,一般呢我们是用这个呃message box,那么或者还有其他的几个函数来实现的,这个具体呢我们可以查一下,那么实际上我们在后边呢能够看到啊。

或者是这个max message box啊,ex或者是这个message box啊,in direct啊这一类的,这就是我们这个窗口相关的这个函数,或者是这个大来的box。

在下面的这几个函数可以说都是与我们创建这个窗口相关的,那么我们可以对这几个函数来呃进行下段哈,理论上,那么当然还有一个create大了,那么这几个呢都是用来创建这个窗口的。

还有一个proof window,好像另外还有一个message box,我们看msbox index,那么这几个呢都是与我们窗口相关的啊,创建复制一下,另外还有一个top window和这个函数。

那么这几个函数的话都是用来创建我们的一个呃对话框窗口的,那么我们可以分别对这几个窗口来进行下段,那么也就是说我们在,运行这个游戏的登录器的时候呢,他可能就是说判断了已经我们开启了这个游戏。

那么然后呢再出现了这个弹窗,那么理论上来说的话,我们就可以对这几个啊嗯窗口啊,创建窗口的这个函数,这里下段,那么就能够嗯回溯啊,呃逆向到我们嗯对我们这个有些多开的相关的判断的一个位置。

好的,那么我们接下来呢先打开我们的d找到我们的这个窗口创建的位置。

那么我们先打开og。

那么这个时候呢呃我们可以把这个游戏的登录程序了,加载一下,然后呢我们再对它下段可以从这个message box开始,然后还有一个msp的ex,那么实际上这个max box啊。

a实际上就是调用的这个mmx box 1 x a那么我们进行一个下段,后面的这几个呢,我们也可以下一个断点,那么这里呢我们还有一个多字节的字符,激活一个,也就是我们的这个x编码过一个宽字符的一个uc呃。

a和w那两个版本的这个函数,嗯那么这个函数如果是没有的话,我们接着来看一下啊,这个函数,这后面这一个d p下一个a啊,这个函数量能够下断,然后呢,我们还有一个就是创建这个窗口的。

那么人认不到这个标识符的话,我们在后面加a再e x a,那么这个的话没有的话,可能呢它最终的是调用这个college window。

调用这个版本的这个api函数来来创建的好的,那么我们让它跑起来,那么这个时候呢我们可以看到就是我们刚才弹出的那个啊,目前呢呃正在自动更新,或者是我们的这个游戏了,已经在运行当中。

那么说明的话它在它之前的代码就已经有判断了,检测到我们的这个游戏已经在运行了,那么所以说我们从这里来把断连取消掉啊,从这里返回一下,那么从这里的话就能够返回到它的一个附近啊,这里有一个跳转。

我们可以看到嗯,这里跳转到了我们这里非零非零的一个数字cp ex e s i,那么这个ex我们找一下它的一个来源来源于e bx,e p x来源于就我们一bp减七零,u p p减七零的话。

这里他写入了一个字节的名,这bx啊取得了一个比建议,那么我们再移到前面来看一下,这个是一个深的message window windo,好然后呢这上面呢还有一个函数,我们转到这个函数来看一下。

再转到他的前边啊,在嗯嗯执行到返回,我们再看一下吧,这个时候已经检测到了,再重新开始一下,按下回车啊,进行一个下段嗯,断到这里,然后呢把断点暂时取消掉啊,执行到返回平,再执行到返回一下。

然后是到这个位置啊,这里呢我们备注一下哈,可能就是说这个判断可能是一个关键的一个判断,然后呢我们把这里呢啊复制一下,在这里,然后呢我们下一个断点,那么在这里的话它也是检测一个指定的模块是否来已经加载。

到时候我们看一下这个模块的话,bt modefine,这里呢是一个空的一个句柄,possible,等会我们看一下这个passer是什么,然后再让跑跑跑起来,把这里做一下记录。

再重新的让他跑起来。

那么我们从这个下段的这个情况来看的话,这一段语句它好像没有被执行到啊,也就是说这个地方的断点呢它没有效,那么可能的话是从这个上边这里呢呃直接跳转过去的,他的一个判断的话,应当还在前边接一。

taste x i,那么ex i我们找一下它的一个来源,这里呢都没有对e x i这个集成器进行复制,再往前面找,而这个e si呢它来源于我们上一层的ex,那么我们在这里下一个断点再重新执行一下。

那么我们看一下它上一层的来源,什么时候调用到这这个扣它的e4 x的来源,那么我们从这里看到的话,e4 x的话,它来源于我们可能是来源于这个机子嗯,再往前边来看的话,他为什么要对这个e4 x进行。

那么我们需要在这里呢加上一个断点,判断一下,执行这个货之后呢,ec x的数字呢也没有发生变化啊,这前面的话有一个创建一个我们啊,这个页面是只读类型的一个呃共享哈,共享内存啊。

相当于是然后呢这里呢有一个get get lasy啊,最后的一个错误判断,如果这个b07 的话,它是表示什么呢,呃b07 呢也就是183a6 啊,呃也就是我们16进制的啊,b7 。

第七呢也就是我们的183,那么这个b7 的话标示呢它是一个错误啊。

就是说我们这个create fire map建立这个共享内存啊,如果他的这个名字哈,这个共享内存的名字它已经存在的话,那么用它来获取的话,最后呢返回的代码来就应该是b07 ,那么也就是说它可能是这样的。

也就是说我们第一次运行游戏的时候呢,它就会调用这个create fire map呢,然后第二次我们在调用这个函数的时候,他可能创建了就会失败啊,最后就会返回一个错误。

就是说表示我们指定的内存呢已经创建了,然后呢他通过这后面的一个判断的话啊,coe x,如果这里相等的话,不相等,则跳转相等的话就会执行到这里,最终呢这里应当就是我们刚才的这个弹框。

这里进去之后就是我们的这个相应的一个弹框,好像是我们再退回来看一下,bp message box下一个段,然后从这里来返回,返回之后呢,我们再看下一层的一个房,这里看不到,好像,再返回一下,那么这里啊。

然后再返回一层,那就应该是在这个框里边啊,不知道他是怎么跳过去的,可能这里呢有一个jp啊,这样呢可能跳过去了,是通过这个跳转来过去的,那么关键的东西呢,反正就是在这里边来打开的。

我们的呃来进行我们游戏多开的一个判断,那么我们再按减号再退回来,关键的代码的话,好像是在这里了,那么通通过这个这个分析的话,我们可以来发现的话,它是通过这两个函数来判断的话。

可能是呃一个是我们创建呃这个呃共享的一个内存,然后呢最后呢通过这个gusty lagri就是获得最后一个错误的代码,这两个函数这样来进行判断的,那么如果来这里呢。

他获得了也就是我们的啊指定的这个共享平台已经存在的话,嗯那么这里呢我们就啊g n z就不会跳转,如果这个代码它等于b7 的话,就不会跳转,那么如果不等于b7 了,它可能就会跳转。

那么这里呢就是我们的刚才我们看一下,这里就是这个弹窗的在后面啊,再把这一段复制一下,那如果是的话,我们理论上来可以通过呃这里的一个判断,那么我们可以来把这里的j n z或者是这个b7 。

我们可以把它改一下啊,比如说改成b一啊,这类的话他可能就不会进行跳转了,就不会存在啊,永远这里这个跳转的话永远都不会啊,或者是把这个弄不掉,应该也可以,那么我们再次重新来运行一下。

那么我们当时在这个位置判断的时候呢,我们要改它,再重新开始一下,那么在这里判断的时候呢,我们把这个b7 啊把它改一下,或者是把后面的这个jn z把它落不掉啊,不让它进行一个啊。

应该是直接进行一个跳转才对啊,或者把这里改成一个价格,那么就这样改的话呃,理论上的话也能够可以做文档也sa,那么这里来创建我们的可能是一个登录的一个窗口进行一个创建好,那么这个时候的话可能就。

能够呃这个登录器呢就能够正常的打开,就能够实现我们的这个多开啊,这个时候呢就能够呃出现两个窗口,那么我们还有一种方法呢,也就是我们重新开始之后呢。

直接改这个地方,把这个地方直接跳过去啊,改为这个家门,让我们的这个检测的这个窗口来把它跳过,跳过这个检测,那么这样的话也可以啊,那么我们尝试一下,看可不可以多开啊,这个时候呢我们也能够打开两个登录窗口。

按这个导入窗打开这个窗口之后呢,我们再次登录了这个客户端的时候呢,他也会出错啊,登录的时候呢也会出现一个错误,那么说明这个客户端的话,他可能还有另外的一个检测啊,那么我们在下节课再继续的进行一个分析。

那么这节课呢我们暂时到这里,按减号退回来啊,关键的这个关键的这个地方的话,这里是一个,这里是多看,关键跳出,调整判断,当然这只是我们登录器的一个多开的一个判断,那么它在客户端里面呢还有另外的一个判断。

那么我们需要呢嗯再进行接下来的一个分析,好的。

P131:142-分析游戏启动过程 - 教到你会 - BV1DS4y1n7qF

你好,我是郁金香老师,那么这节课呢我们分析一下我们游戏的一个启动的一个过程。

那么为我们后边的这个制作,我们的这个自动登录,以及或者是制制作我们的游戏登录器啊,做一个准备,那么另外呢对于我们分析多开的话可能也有一些帮助,那么首先呢我们要准备一些知识啊。

也就是我们关于这几个呃启动我们呃外部程序的一个api函数,那,么一般有这三个函数哈,它又有不同的几个版本,那么我们可以来先对这几个函数来下段。

当然最终的话它一般呢也是通过这个创建进程的这个函数来来实现的,那么也就是说这几个函数呢,它最终可能也都要执行到最终的这个位置的话,应该是要执行这个函数这个代码,这里是他他的一个必经之路啊,应该是好的。

那么我们实际上只对这个地方呢下断点应当就可以了啊,那么这几个函数呢它也可能会调用到,那么我们先打开我们的呃。

应该是先打开我们的这个调试器吧。

然后呢再下一个断点。

当然实际上只需要下这一个断点就可以了啊。

要让他先跑起来,相应的模块载入之后呢,我们这个时候呢才够下断,不然的话他会说一个位置的一个标识符。

那么其他这几个断点呢我们也可以下啊。

好。

那么我们看一下它是调用的呃。

比如说我们这里选网通四区啊,当然这个时候呢就相当于我们是在设置一个它程序的一个启动参数,我们都知道有一个命令行啊,命令行的话后面呢它可以跟一些参数,那么等一会我们就能够看到,那么这个时候我们点开始。

我们就能够看到了,它实际上呢就是调用了一个api函数,当然我们这个时候呢需要先分析一下,那,么实际上我们从这个堆栈里边呢也能够看到一些参数,这里应当是一个服务器的一个地址端口,而后面的可能是一个。

嗯其他的声音一个什么什么参数啊,具体是什么,这个感觉不出来啊,现在还嗯,然后我们再看一下啊,这是它的一个第一个流程啊,复制一下,当然这个函数呢它的一个具体的一个说明的话。

我们可以在论坛这里能搜一下它相关的这个数据,那么这几个外部外部程序哈,呃相关的api函数呢在论坛里边呢都有说明啊,到时候呢嗯,可以看一下。

好的,我们再次,让他跑起来看一下执行到什么地方去了。

那么这个时候呢他又会去调用这个cl啊,w ew这个版本的这个函数,那么这里呢我们也能够看到呃进程的名字以及后面的这个参数,好复制一下,好再次运行起来。

那么最后呢我们可以看到它是用这个create process斯哈,w这个版本的这个函数来呃,来做了另外的一些设置啊,另外的一些设置,那么相关的一个创建的这些标志的话,可以到论坛去看参考一下啊。

相关的资料,那么这里呢我们所需要的的话就只是这个命令行啊,我们需要的也就是这个命令行把它复制一下,那么命令行的话就是这一行啊,那么后边呢这里呢是它的一个参数,相当于。

这个地方就是它的参数要登录的一个服务器,以及服务器的一个端口的相关的参数,那么我们有了这些数据,我们对于我们有什么好处呢,那么我们就可以了,在这个游戏加载的时候,他做的一些判断呢我们就可以了啊。

如果这里面它有一个多开的判断啊,比如说登录到这里的时候,他就说呃这个什么重复的登录,或者是什么其他的这一类的判断的话,我们就可以来分析,那么我们先把它关掉。

那么这个时候呢我们就可以脱离我们的这个登录器啊,直接来来打开对,当然你需要找到这个游戏所在的目录啊,然后呢嗯先选中它的目录。

啊这是1p的客户端,那么然后呢再是我们这里提取的一个参数,当然在前面他已经有提取这个参数了,我们用之前的这个需要ex第一个参数就行,这就是它的一个参数。

那么我们就可以来把这个参数来加在这个o d的后边,那么这样的话我们就可以脱离我们的登录器啊,直接的嗯直接的来调用我们的程序的客户端,那么我们也可以甚至我们可以自己写一个登录器啊。

那么如果是他通过登录器来防止的多开的话,那么我们直接来自己写登录器啊,就能够解决这个问题的应用,那么这样这样的话我们打开之后呢,这样我们就不用这个登录器来打开了,那么直接打开这个客户端。

也把我们相应的参数呃传送进去了,那么比如说我们刚才采取的这个参数的话。

从这里能努力从他的这个域名的一个命名方式来看的话,你能够看到它是一个市区啊,可能后边呢呃它可能是这两个参数,有可能是表示什么啊,其他的啊或者是表示的是网通什么什么这类的,也可能好的,我们先让他跑起来。

那把断点呢这个时候全部禁止掉,然后让这个进程来跑起来,那么这个时候呢它比较慢哈,那么我们进行一下登录看一下,这个时候把所有的这个断点的都删除掉,当然这里呢它可能是有一些反调式的这个手段哈。

在登录的时候呢,它为了保护这个账号封闭嘛,他可能是创建了这个调试的这个钩子啊,这一类的嗯,那么要说说这个时候登录的话,它也会出现一些错误,但是呢我们可以用其他的这个程序来这样来呃加载啊。

分析他之前登录的这一部分的这个代码,那么或者是制作这个登录器的时候的话,我们呢可以直接调用这个相应的这个函数。

来来创建我们的游戏的一个客户端进程,就可以脱离我们一个登录器的一个呃检测控制。

那么从而达到一个多开的一个目的。

那么这里呢我们可以看到很多的这个键盘的这个呃钩子,可以试着来把它取消掉,然后这里呢我们试图用鼠标来登录一下,那么可能他是有定时器的这个判断啊,那么运气好的话,绕过了这个定时器的这个判断了。

应该能够通过它来打开我们的一个客户端。

那么实际上我们也可以把它的这个命令行提取出来哈,呃直接进行运行,那么这这是它前面的呃这个名字啊,那么再加上它命令行的一个参数就可以了,或者是直接把命令行啊复制出来。

或者说我们直接在命令行这里呢直接运行。

嗯。

嗯嗯嗯,那这样的话我们也能够看到他选择的这个服务器的话,也是我们的市区的这个服务器啊,市区的呃,那么如果我们是选择了其他的区的话,我们也可以来继续通过刚才的方法来获取啊。

其他的一个参数通过我们的这个登录器啊。

当然我们需要了嗯。

先夹在这个登录器,然后我们直接从这个cot process w啊,这个参数这里来来获取它的一个命令行。

那么比如说我们选网通的山区,当然这个时候它的参数来肯定就会有变化,那么我们可以通过这个参数的一个变化的话,就能够把它的呃登录参数来提取出来,那么提取出来之后的话,我们就可以直接来来调用这个函数来呃。

写一个我们自己的一个登录器。

那么实际上知道了这个原理的话就很简单了,那么我们看一下它的一个命令行是多少,这是山区和市区的一个区别,那么我们发现的话啊,首先呢是域名这里不相同,还有后边的这个参数呢它也是不一样的。

那么或者是他在后面的话,也有可能是与时间相关的一个数数字啊,这两个可能是变化的啊,我们再来看一下这两个参数知识,那么如果我们还是选择四驱啊,看一下,那么时间不同的时候呢,它传入的参数是否是一样的。

然后我们点一下开始,同样是断在这里,那么我们主要看一下这个命令行,command嗯,这是选择的四驱,那么我们发现的话,这后面的这个数字呢它也是不相同的,那么这两个的话可能呢是与我们时间有关系的啊。

与时间相关的一个数据,这个呢它是在变动的,应当是,10031,这个可能是开了一个端口啊,这一类的,当然这个的话如果我们要自己写登录器了啊,关键的数据呢就是我们前面的它连接的一个啊服务器。

那么我们推测的话,这里呢就是呃可以这样的改,那么后面的我们可以暂时不变动它,那么如果是网通日趋的话,那么可能就是这里来改为二,那么我们可以做一下测试嗯,在这里运行就可以直接。

那么这里呢符号我们需要所删掉了,啊这个不同的区呢它的这个账号的话需要不同的激活啊,要做这个测试的话,我们需要每一个区呢都需要把这个账号啊,需要来把它激活才行,那么网通一区的话。

那么很有可能来这里呢就是一啊它的运笔,那么后面呢这里呢可能呢都可以不变化啊,都可以不变化,当然后面的这几个参数的话呃,还可以进一步的分析一下,那么这几个呢我们站起来就到这个地方啊。

呃那么后面呢我们在再继续的深入的进行一个分析,好的。

P132:143-编写游戏登录器 - 教到你会 - BV1DS4y1n7qF

大家好,我是郁金香老师,那么在上一节课我们简单的分析了游戏的登录的一个目测啊,了解了这个游戏啊,启用我们游戏客户端的一个原理,那么我们知道了这个原理的话,我们也可以写一个简单的登录器啊。

那么在上一节课的话,我们所以这里呢采取了一些参数啊,比如说是这个参数。

那么我们可以通过这些参数的话呃,自己来调用这两个api函数啊,理论上就可以写一个登录器嗯,但是我们后面的这前面的这个参数的话,我们很好理解,那么这个参数呢应当是我们的服务器的。

要登录的一个服务器的一个地址嗯,在后面这个参数的话,还有这两个参数,那么它的意义呢我们暂时还不知道,但是这几个参数呢我们可以尝试哈,直接套用上去,看可不可以登录啊,正常的登录。

那么我们先来尝试一下写这样一个,登录器,那么在写之前呢,我们再次分析一下,它传递的一些参数是怎么传递的。

那么首先我们用ot来加在我们的调试器那来加载我们的登录器。

来摘取一下它传递的参数是怎么传递的啊。

在此那么我们直接来调用简单的这个函数,调用这个c2 ex这个在这个地方呢,下一个bp断定先让它跑起来,那么跑起来之后呢,这个时候我们在选这些游戏大区的时候呢,实际上它就是对一个参数的一个初始化。

那么我们在这里呢我以这个网通社区为例啊,当然其他的区的话,他后面的这个参数呢肯定不一样,至少是这个呃服务器的地址它不一样,好的,那么我们但是这些呢它实际上服务器的地址呢它都是有规律的啊。

都是用数字来编号的,这里就是四,那么我们这个时候点游戏开始的时候,它将继续调用我们的api函数来打开我们的游戏的客户端,在这里呢我们能够看到它的一些参数啊,嗯这个时候它的参数呢前面的这个参数没有变化。

但是后面的这两这三个参数呢都有了一些变化,但是我们不知道用以前的参数,脑的参数能不能够呃成功的打开我们的游戏,那么我们只有先进行一下尝试,那么在尝试之前呢,我们先分析一下它的一个参数。

那么这是它的一个亚战的一个参数,那么它的参数呢我们与这个希尔exclusion ex呢进行一个比较,因为它的参数呢实际上只有一个就是一个指针地址,那么也就是说在这里的话。

它这个参数呢就是这个f2 d4 这个地址,那么我们转到在数据窗口里面嗯,转到这个地址去的话,这个2d4 从这个地方开始的,那么我们从这里来采取,它就是这样的一个缓冲区,这就是它缓冲区的一个,数据。

那么我们先把这个缓冲区的数据呢复制出来,再进行一一的对比,它这里呢有一个share exclu啊,info这样的一个结构,那么我们再来跟他对应起来,那么第一个呢是cp size。

那么实际上就是这个结构的大小,那么第二个呢是一个for master,那么这个呢我们直接填充四零进去就行了,后面这个呢是一个就是调用这个函数的一个窗口的一个呃i d啊,窗口的句柄。

那么后边这里呢是一个lpv 12这样的一个参数啊,也是一个字串,那么一般呢我们有时候是写的啊,open表示用来打开,但是这里的它是一个空指针,因为这里是为零。

那么后面呃这个i love you file呢,它等于是一个相对的一个地址,就是这个客户端啊,我们的拍了屁,对应起来,那么再下来呢这个是它的参数,我们把它复制一下,等一会等一会儿我们写程序的时候会用到。

那么在后面这一串呢就是它加的参数,当然这个x呢可以去掉,那么在后面呢这里呢应当是它的目录,但是呢没有显示出来,这个地方是指向它的一个目录,当然我们这里呢可以显示一下啊,那么是目录的话。

这个地方呢应当用dc来表示,这里呢我们看到它是汉字的话,可能因为这个原因呢没有显示出来,那么如果我们用db来显示一下,我们可以看到嗯这个5c啊,这个斜杠后面呢,实际上就是零就是零。

我们把这一串呢啊复制一下,那么在后面的话我们看一下它是一个什么参数,这里呢一个呃n秀啊,表示了它是否显示,那么这个n秀呢它等于一啊,实际上也就是等于我们的true啊,他呢也表示一个增值。

那么后面的这些呢全部是零,那么为零的话,我们就可以用一个main city来把整个这个结构来初始化那个set,然后把它的地址呃传进去就可以了,在这里呢我们可以给定义一个这样的一个变量。

在它的前面定义一个变量,求inf,那么然后呢对它进行一个初始化就行,嗯,好的,接下来的话我们有了这些数据呢,呃接下来我们就可以编写程序,写我们自己的登录器了啊,可以尝试,那么这里呢我们可以暂时把它关掉。

调试器,我们所需要的数据来嗯,已经取得了,那么接下来呢我们就可以开始写我们的调试器,在这里呢我们打开,打开我们的vs平台。

那么创建一个登录器的一个项目,天,然后这个因为我们的游戏呢是多字节的x和类型的,这里呢我们不用这个ui库,这个库呃,然后点完成,然后调整一下我们窗口的大小,那么调整大小之后呢,我们就可以了。

在上面呢添加,比如说我们这个呢可以改一下名字啊,这个呢我们就叫做登录,那么这个呢我们就叫取消或者是关闭都可以,在这里呢我们还给它添加几个按钮,那么这个呢比如说就是网通一区啊,这个是网通二区。

那么这个呢是网通的山区,那么我们再加一个哈,那么其他的来自己下去啊,获取一下,把它排列好了之后呢,这里呢我们就取一个啊叫通社区,那么选好之后呢,我们在这里呢就可以给它添加一个相应的代码。

我们可以来直接的把它写成一个函数啊,另外的写一个函数来登录我们的这个相应的这个区,那么比如说我们另外写一个vi,good no,那么这里呢我们呃用一个整数来设置一个相应的一个游戏的一个区。

比如说我们这里就叫做,那么默认呢我们设置为广东四区啊,它的下标为三,那这里呢我们可以用一个switch的一个结构,来跟他传输一个相应的一个数字或者是其他的,当然这里呢我们就只写网红四区的代码。

如果是你自己要把它写全的话,可以下去自己进行尝试一下,那么这里呢我们设计关键的就是要调用的这个函数,刚才我们能用到的c e x,那么在用这个函数之前呢,我们需要来,先定一个结构,那么理论上这样就可以了。

但是呢我们刚才还采取了一些参数,那么这些参数呢我们需要来给他布置,那么我们来看一下第一个cp size,那么这个呢实际上就属于我们的size of,水库。

那么或者是直接的用我们所获取的这个值3c给它填充进去,那么第二个值呢直接是四零,那么我们给它填充进去,那么实际上它这里边的话也有相应的值在这里,那么可能就是这里面的某一个值的一项。

我们可以把这些值呢复制一下这个for mask呃,进去看一下,那么恰好了这个红的紫的就是等于四零啊,那么我们恰好啊,实际上这里呢就是对这个红进行了一个操作啊,对它进行一个复制。

那么下面一个呢是我们的这个窗口的句柄,那么我们为零,那么为零的实际上我们就不用复制,我们直接可以用调用mac之前呢初始化一下我们的这个数组,那么这样呢我们就把整个结构的所有数据呢就复制为这个数字零。

这里呢我们需要转换一下,可能,去达到一个地址好的清零之后呢,我们接下来再对一些非零的数值来进行复制,那么这个呢我们也可以不复制了,凡是为零的我们可以不复制,那么这里呢它是一个字串的一个地址嗯。

那么也就是我们的这个,要打开的一个客户端,但是这里我们需要改一下,为什么,因为它的一个登录器的话,它取得应当是一个相对的一个地址,那么这里呢我们取的话需要它的一个目录的一个地址。

应该是啊目录就是在在后面的这个目的。

那么我们再看一下之前的分析。

那么这里的话我们把它的目录的地址复制过来,那么我们可以在之前呢定义一个红,那么这里呢最好我们是用全部性笔啊,这样不容易出错,当然这里呢我们还要注意的,这里因为一个斜杠表示表示的是一个转义字符。

那么这样的话路径就不对,我们必须给它添加双斜杠,那么另外还有一个呢是设置我们的游戏的一个呃路径,做一个工作的一个目录,我们需要给它设置好,那么这里呢呃有一些变动在它的基础上。

因为它登录器的目录和我们的本身这个程序的这个目录不一样,当然最后还有一个呢就是要显示的这个凡是n修,这个呢我们需要把它设置一下,这个呢复制为一或者是true啊,这两个指的都是相同的,相同的。

那么这个fire来求取等等于我们的game plan好,那么还有一个目录的名字,点个lp dk,这个肯定pass,那么这样的话基本上我们就写好了啊,再检测一下,看还有没有其他地方需要复制的。

还有一个参数,就还有这个参数,这里,那么我们把参数复制下来,嗯,那么实际上不同的区域的话,它也就是这个参数啊,可能不一样呃,那么我们就可以了,只求在这一个地方可能就可以了,当然这个我们也去测试了。

那么这里选择的时候呢,实际上我们是按照登录器来写的话,呃这里呢就是,就是初始化我们的参数,这里呢才是登录,那么在这里的话我们可以这样来写,而全局的一个变量在这里呢,我们直接这样给它清理。

那么这一行呢代码呢我们就不需要了啊,初始化的清零的话,我应当也是需要的,因为我们可能要多次选择,那么在这最终的时候呢,这里呢我们就只调用一句就行了啊,登录的时候呢,我们直接调用这一句代码就行了。

那么这一句代码执行之后呢,我们还需要了有一个等待的一个动作哈,因为我们登录之后呢,我们的这个登录器能会退出,那么我们看一下它的一个剧本是多少啊,等待它就是说这个游戏来返回的时候呢,我们才退出。

等游戏客户端退出的时候,让我们登录器才进行一个退出的一个操作,还有这个时候我们需要隐藏啊,执行之后呢,我们这个登录器呢本身呢就隐藏掉,害,羞温度,那么最后呢执行到这里来执行这个on,ok啊,退出退出。

那么大致上就是这样,那么在这里的时候呢,我们就调用这个跟lg啊,这个我们叫初始化,初始化这个相应的一个数据啊,实际上就做这个操作,那么这里呢我们登陆的是市区。

我们传入的参数呢就是三相当于是预留了一个接口,那么网通三区的时候呢,这里呢我们就跟它传入一个参数二来做一个区别,那么网通二区的时候呢,这个时候呢我们给它传入一个参数一,那么往网通一区的时候呢。

呃我们给他传送一个参数零,当然要完善的话,我们还需要在这里面来写一个开始结构,那么根据我们传进来的这个参数呢,然后呢对我们的在后面的这个参数来进行一个相应的一个更改,当然这里就没有了啊。

这里呢我们不做这方面,的晚上我们先来测试一下嗯,选择这里呢,我同事去初始化,那么初始化了之后呢,我们在这里呢打开我们的游戏客户端,好的我们运行一下,那我先说实话,然后再登录,那么这个时候登录之后呢。

实际上我们的登录器呢它还没有关闭,还在在进程里面,要等我们的游戏客户端退出的时候呢,他才会退出,这个时候呢我们就能够进入到游戏里边去了,那么这个时候登录的时候时候来速度比较慢啊,好的。

那么这个时候呢我们看看到,如果这个时候游戏啊他退出,那么它会我们的登录器呢会有一个等待的一个动作哈,他等游戏退出之后呢,它才会执行到,那么这个时候呢登陆器呢它也会解解除掉了啊。

也会从我们的进程里面消失啊,因为这是因为这里有一个等待的一个女婿,好的,那么这节课呢我们就就写到这里啊,我们的登录器啊,那么其他的大家可以呢去采取一下其他区的呃这个参数,那么把它进行完善。

还有就是说我们可以动态的来获取我们游戏的动态的设置,我们这个这个游戏的客户端的这个地址啊,这一类的,或者对他的这个路径呢这些进行修改啊,都是可以的,好的,那么这节课呢我们就讲到这里。

那么我们下一节课再见。

P133:144-游戏多开实现-过登录器检测 - 教到你会 - BV1DS4y1n7qF

大家好,我是郁金香老师,那么这节课呢我们继续的呃,分析游戏的多开,那么我在这里呢写了一段测试的一个代码,那么我们先来看一下它的一个效果,那么首先呢我在这里呢自己啊写了一段代码,来启动我们呃游戏的客户端。

那么在启动的同时呢,就对他的一些代码来进行一些呃实施的一些修改啊,嗯这样呢来达到一个啊多开的一个目的,那么通过它来来启动的这个客户端,那么实际上呃这个登录端,实际上这个登录器呢已经被我们呃它的代码呢。

已经经过我们自己的一些修改了,所以说呢他不会把检测到我们游戏的一个多开,它可以绕过游戏的多开,好那么我们接着来看第二个游戏,那么这个时候呢他就不会有呃相关的这个提示。

而且能够正常的正常的登录我们的游戏了,这个时候就可以,那么如果再加上我们这个呃游戏优化的这个功能啊,降低cpu啊,呃这个占用率率的这个功能的话,我们至少能就能够呃开十开或者是20开都有可能。

如果是在内存足够的这个情况下,我,不知道,好的,这个时候呢我们能够实际上的话,它可以主要如果是你的电脑速度足够快的话,理论上可以实现啊,无数k啊,这个时候啊随便有多少态度都是可以的啊,你们上,好的。

那么我们展示了这个多开的这个功能,那么接下来呢我们来嗯具体来说一下它实现的一个原理,那么它的原理的话,在之前呢我们已经有过一些呃,分析它的检测呢主要是两个方面,一个是登录端的一个检测啊。

如果我们正常的启启动啊,而不是呃绕过这个多开保护的话,那么我们开第二个登录器的时候呢,他就会提示啊,它就会提示了,就是目前哈自动更更新什么什么的,请关闭啊,运行中的这个程序。

那么这个检测的话也就在这个代码段位置啊,这个时候呢我们需要把它的这个比较呢需要跳过这个呃j n z,也就是说它比较呃不等于每次我们就如果是等于这个比期的话,表示了我们就是说呃这个客户端已经打开了哈。

登录器已经打开打开过,那么在这里呢我们需要把这个jn z来改为价格哈,就是说一直来比较的话都是啊没有打开我们的这个登录端的啊,也就是说这个ex的话呃判断呢一直就不等于这个b7 。

那么这样呢我们就能够跳过一个检测,那么实际上呢呃这里的改为降本之后呢,它由以前的这个机器码七五来改成了1b,那么所以说呢这里呢第一点呢我们登录器呢需要这个七五改成这个b,这样才可以啊,这样才可以。

但改了之后呢,他他还有一个问题,它除了我们登录器的一个检测呢,它的这个客户端应当也有一个检测,那么当我们第二个啊,比如说我们的登录器啊,没有问题,那么我们,那么我们的游戏的客户端呢。

它实际上还有它的一个检测啊,那么这个检测呢经过测试之后呢,我发现呢它是对可能是对这个游戏路径的一个呃客户端的一个检测,如果这个资金路径的这个客户端它已经启动了啊,也就是我们这个任务管理器哈。

这个进程列表里面的呃,某一个路径的这个客户端已经启动之后呢,它也是不能够登录的。

那么我们用的这个o d打开。

我们进行一下尝试,那么首先呢我们也是改掉这个地方,把七五改成我们的vp,完了出来,我们需要先改改了之后呢,呃这个时候呢才能够启动,不然的话这个登录器呢是不能够启动的,那么我们重新再开始一下。

那么这里呢实现了,实际上呢也有一个呃与我们之前的这个hook呢它不一样,它必须是在这个呃登录去为未完完全的这个运行之前,我们就需要修改这个代码啊,那么这个修改代码的时机的话需要把握的很好才可以。

也就是在这个主线程它的这个代码的话段呢已经加载了之后呢,我们就需要修改,不能让它全部运行起来再修改,这样的话我们就来不及啊,所以说我们在这里呢呃做这一段的时候呢,我们需要呢自己创建这个进程。

并且呢把这个进程呢需要把它挂起啊,不让它运行,而让我们把这个代码修改完成之后,我们再让这个呃进程呢再让它跑起来啊,我们编写的代码的一个过程就是这样,好那么这个时候呢我们的呃。

这样就能够跳过我们的登录器的一个检测,然后呢他会去调用我们的这个西游,调用我们的客户端啊的这样一个过程,那么实际上它客户端运行之后呢,它也会有一个检测啊,它会检测这个它的一个命令行。

相当于是检测这个进进程的,那么我们再来看一下它的这个参数,那么它的这个参数里边的话,在这个地方呢也是他的一个当前的目录,当前的目录这个位置呢相当于是命令行,这里是命令行的一个参数。

这是我们的呃运行的一个目录,那么这个运行的目录呢也就是在这个目录下边啊,在这个目录下面,那么我们现在所要改变的也就是它的这个默认目录啊,这样改变了之后呢,他检测它的这个命令行的话啊,大致了就不一样了。

呃就是说他跟之前的这个命令行运行路线呢就不一样,这样呢就能够绕过我们客户端的一个检测啊,呃经过测试的话,但是呢这里呢我们还有一些如果这个路径改变了,那么在指定路径下来。

我们也需要把它的一个就是说我们游戏的客户端呢也需要复制过去啊,相应的数据啊,那么这一点呢我是通过批处理文件来实现的啊,我们一步一步的来先了解一下大致的一个结构。

那么在这里呢因为它客户端已有一个检测,它检测的是这个路径啊,大概也就是检测的这个路径啊,那么所以说在这里呢我把它的这个客户端的这个目录屏做了一些修改,其他的都没有变。

那么这是正常情况下的这个client,那么这里呢我通过一个这个批处理文件啊,那么在这里呢首先呢我们先建立相应的目录,那么这里呢我只建了四个目录啊,理论上呢能够四开,那么如果还需要更多的呢。

那么我们可以把这个目录呢建大一点,也可以通过这个呃吸人命令来来调用这个外外部的这个批处理文件啊,这样也可以,那么这里呢我们可以一直加啊,这里加到啊可以无限的加,理论上,噗,那么理论上这里可以无限的加。

但是呢他这个分配的空间来说的话啊,最好呢我们这个空间呢不能够啊大于它这个字符的空间,这里呢是六个字节,那么我们在改的时候呢,这里呢也要保证的是六个字节,那么我们可以改的话就都可以改到是从呃这个范围的话。

我们可以从这个0000,那么到我们的f f啊,理论上可以到这么多,那么这么多的话足够我们多看了,那么实际上我们只需要最后两位啊,就完全是足够了,只需要改后面这两位,那么改的时候来这里。

后面如果我们还需要继续的多开的话,我们可以再建一些啊,这个再复制一些目录,当然最终呢我们可以通过编程的手段来实现调用这个外部的这个命令,也可以随机的我们自己来生产啊。

然后呢我们需要把它下面的所有数据呢啊,复制到我们新生成的这个目录下边去,比如说灵符这个为例,那么我们保存一下哈,那么这个时候呢它就会自动的把所有的这个呃下面的数据来复制一份,到我们新建的目录下。

比如说这个是040,但零四这里呢下面是空的,因为我们没有写啊,复制的代码,零五下面呢这里也没有啊,那么我们再来看一下,那c l i0 ,好我们再执行一下,那么只复制到零三这个位置啊。

然后呢后面的好像就退出了copy系统,找不到指定的路径,c a l i嗯啊,那么我们再来看一下这个目录,零可能是创建者的不正确盘c,然后i10 c l i10 啊,这个目录名不对。

所以说他退出了10t那么把再把这个复制一下,啊这里改为了一个四,好那么这个时候呢所有的这个数据呢就复制过去了,那么在这下面呢也有相应的我们的游戏的这个客户端,那么这个时候的话。

它的路径呢与我们默认的这个客户端的话肯定就不一样了,就可以逃避一个客户端的一个游戏多开的一个检测啊,当然是以这个游戏为例来说啊,那么这个时候的话,我们再通过o d来演示一下它的一个呃多开的一个过程。

啊。

好我们把这个登录器啊放到里边去,首先呢我们需要来修改的是这个地方的代码,要逃过登录器的一个过一个登录器的一个剪辑。

呼呼呼呼呼。

那么第二点呢我们需要来过一个客户端的一个检测啊,那么客户端的话我们需要了再启用客户端,这里的下一个断点小x semt mix需要在这里呢下一个断点。

好的,那么我们先让它跑起来,那么这里的断点的话,我们知道了这个位置呢它是一个呃相应的一个结构啊,那么结构呢我们来看一下这个结构,首先呢在这个位置呢是它要运行的这个客户端的名字。

那么这里呢这个位置在参数后面的话,也就是他的这个目录啊,当前要运行的一个目录,那么我们就需要改这个地方,当然第一次运行的时候呢,我们可以改也可以不改,那么要改的话,这里呢我们改为呃零一。

这个n这里呢改为零一啊,那么这样改改了之后呢,与我们之前这里修改的这个目录呢。

呃对应起来也可以从零零开始,好那么这个时候呢我们就可以让它运行起来,啊这样的话它就能够正常的进行登录,那么如果第二次的话,路径与这个相同的话,他登录的话又会出现问题啊,又会出现问题。

那么这个时候呢我们再重新运行一下这个客户端。

然后呢我们转到这个地方去修改这个登录器这边的一个检测,再降盘,然后让它跑起来,那么跑起来之后呢,我们在这里啊,选区之后呃,在我们启动我们客户端的时候呢,它再次会调用这个希尔这个地方嗯。

来启动我们的这个外部程序,那么我们再次来看一下,那么实际上就是加一八这个位置,嗯就是它的这个当前目录,那么在这里的话,如果我们继续使用一个相同的目录啊。

那么这个时候他最终的话是不能够呃躲过我们客户端的一个检测的,那么如果我们这个时候是相同的一个目录,如果我们再次登录其他的账,这个账号,那么这个时候呢他就会让你来请你重新登录啊,请您重新登录。

那么经过反复的这个呃猜测啊,然后与这个验证,那么最终呢我确定的是,他可能是对这个相应的路径呢做了一个这个检测啊,也可能是对这个文件打开来做了一个判断啊。

那么最终呢我们可以通过这个修改这个目录屏呢来躲开哈,那么也就是保证雨这个运行当中的这个客户端的路径呢不一样,就能够躲过了这个检测啊,那么我们嗯做的这个方法,我们再来演示一下。

那么首先呢我们实现多开也是在,这个登录器启动的时候呢,我们先改登录器的这个检测啊,这里来改为jp,然后再次启动参数,这里的,那么这里呢我们需要来,改为与之前的这个客户端栏不一样的一个名字。

这里呢我们改为零一啊,而且呢这个路径呢必须也要存在,必须要在这个地方,那么如果不存在的话,自己来编程的复制一下这个目录,或者最简单的方法就是用这样的批处理命令的来实现b a t啊,这是鉴鉴定目录啊。

这是复制文件,当然也可以用c加加编程啊,那样显得呢要复杂一些,那么零一这个目录呢也是存在的,到时候来就启动一下啊,这个client这个目录当然直接这样启动是不行的。

它必须要有一个参数在后面呢,我们可以看到它有一个参数的这个地方,啊这个呢它有一些参数,而且后面这个参数的话,它可能也是从服务器了那边发过来的一个验证啊,然后呢又通过一些加密的一些手段的加密之后又跟他呃。

又给他回复过去哈,所以说这里呢涉及到一个相当复杂的一个算法啊,这个参数k那么这个参数t呢经过分析呢,它是一个当前的一个时间一个时间,而这个13102啊,这个呢比较固定,这个比较固定在后面这个参数的话。

它是一个加密的一个参数,那么所以说我们自己写登录器的话,呃那么显得比较复杂,那么我们注意最方便的呢,也就是在它原有的登录器上面来进行修改好,那么这个时候呢我们就可以把路径来给它进行一些修改。

那么修改修改好了之后呢,我们再让它运行起来,听到,那么这个时候呢我们就能够正常的登录了,那么只要保证了我们后面每一个这个客户端,它的一个目录与之前的一个客户端的一个目录呢啊,只要保持不一致的话。

那么我们就能够啊就能够实现啊完美的一个多开了啊,就像我写的这个程序一样啊,那么我们先来大致的看一下它的一个代码的一个流程,那么实际上呢它也是因为我们之前的话,在这里呢在获客这个我们登录器的这个代码的话。

我们需要来先让它运行起来之后呢,先要暂停,它要挂起,那么我们要实现这样一个功能的话,我们这里来可以用这个quit process啊出来创建一个进程,那么创建进程它中当中的一个参数呢。

就是啊新进程的这个主线程呢不以暂停的一个状态呢被创建,那么只掉直到了用这个resume cd函数来调用时来才运行啊,用这个函数来恢复它,那么这样它就是暂停的,那么这个进程创建之后。

暂停的话也就跟我们这个状态是一样的,就相当于我们暂停在这里了啊,暂停在这里了,他没有跑起来,所以说他没有执,在没有执行到这个代码之前,还没有执行到这个代码的时候呢,我们就把这个代码跟它修改成键盘。

这个时候才有用,那么我们代码来实现的话嗯,就是直接到这里来对它进行对这个地址来407bf a这个地方啊,这里定义的一个红啊,对这个地方呢进行写入,写入了一个字节啊。

那么这一个字节的数据呢就在我们前面的就是这个eb,就是这个1p这里我们写入的这这个缓冲区的数据了,就把我们的七五来改回来一批,那么这一点我们修改好了之后呢,我们再恢复我们的县城。

用这个这里呢我们恢复进程,那么就相当于我们和地里边的啊这个运行啊,这个时候呢让它跑起来,那么刚才的这段代码呢,他也就呃会被顺利地执行,那么甚至我们恢复运行之后,我们还可以了,等待等待一段时间。

然后呢再把我们的这个代码给它恢复过去,那么如果这个游戏的检测比较强的话,那么我们还可以在这里啊进程运行了啊,几秒的时间之后呢,我们再把这个71b呢再改为七回,再把这个代码来给他还原进去。

这样呢就能够逃避我们其他的一些啊变态的检测啊检测,然后我们在最后这里的也就是改一个客户端,这个呢比较复杂一点啊,比较复杂一点,它的一个原理呢。

我们就是用这个spring来腐化s p p i t f来来格式化这个字串,然后生成了类似于这种路径,点击是我们的clean呃,九九啊这样一类的数字的一个路径。

那么原理呢我们这节课呢我们暂时呢就分析到这里,那么具体的代码测试呢,我们呃留在下一节课,我们一起来写,或者大家也可以下去,下去之后呢,自己写一下相应的多开代码,好的,那么这节课呢我们先讨论到这里。

P134:145-游戏多开准备-获取游戏路径 - 教到你会 - BV1DS4y1n7qF

大家好,我是郁金香老师,那么我们在前面的测试当中呢,我们知道嗯需要呢在多开的时候呢,我们需要自己啊复制这个相应的客户端的这个目录,当时我们是用的一个批处理文件啊来进行的处理,但是呢它有它的一些局限性啊。

比如说他不能够通过一个批处理文件呢,它不能够检测指定这个目录是否存在,那么我们每次都会来来去重新来创建这个建立这个相应的这个目录,然后每次呢我们都都会去重复的复制这个数据过去。

但是我们自己来编程来复制的话,它就可以呢呃更加的精确,那么它可以呢先检测这个指定的目录它全部存在,那么如果它已经存在了,说明这个相应的文件呢它已经复制过去了,我们就用不着再进行复制啊。

当然我们还可以进行文件的大小以及版本啊这些更复杂的一些检测呃,那么检测如果这个相应的比如说这个clean 00这个里面的目录,这个文件的呃,修改的时间。

或者是它的大小与我们最新的这个目录里面的文件的一个大小,如果它不相相同的时候呢,那么我们呢对这个文件呢这些进行更新,那么这些的话我们用这个批处理文件呢来处理的话,它都不能够达到,他都不能够达到。

所以说呢在这节课呢我们先呃在最近的这节课呢,我们就来探讨一下怎么来进行这个文件的文件夹的这些一些检测,是否和指定的文件夹如果存在,我们就不再重复的去复制这些文件,那么如果比如说这个指定的这个领土。

这个文件夹,如果它不存在的话,那么我们在建立这个相应的目录,再把我们客户端最新的这个文件呢全部呢再把它复制过去啊,那么实际上呢我们的系统呢也提供了相应的这些接口函数来实现的,那么在实现它之前呢。

我们可以了,需要先知道游戏的一个目录啊,那么这节课呢我们先来讨论一下啊,怎么获取这个游戏的路径,这个目录以及相关的代码,它主要是涉及到两个api的函数啊。

等一个一个呢是这个打开我们这个浏览窗口的这样的一个函数,另外呢我们是把这个浏览窗口它获取的一个相相应的这个目录表呢,呃转化成我们相应的这个路径的这样的一个形式啊,所以说这里我们需要用到两个函数。

那么另外呢文件的目录以及文件的复制呢,就是一个文件操作的一个函数模式方案和pati这个函数,那么这一节节课我们先来了解一下前面的这两个函数,我们把之前的代码打开,这个跟啊游戏登录的这个代码。

我们把它打开一下。

然后呢我们切换到我们的资源视图,嗯那么在这里登录之前呢,我们先做一下选择啊,嗯先设置一下我们游戏的这个目录,在这里呢我们再给它添加一个相应的一个按钮,当然我们之前的做法呢是固化的啊。

也就是直接把这个游戏的目录自传染啊,放到里面去啊,但是这样通用性不是很强,哈哈哈,那么在这里呢我们就可以把之前的这两个红呢,把它替换成我们的一个全局变量啊,这个时候那么我们在这里呢就把它改变一下。

来来来,首先是客户端的一个地址,然后呢是我们游戏的一个目录的一个地址,那么这两个地址呢我们把它设置为全局变量的形式啊,那么等会让我们再来来获取它的一个游戏的一个目录,一个地址啊,嗯那另外再建建一个变量。

好的,那么这几个变量建立之后呢,我们全部人都在我们的,这个函数里面呢来进行一个初始化,刚才我们说到了,需要用到的是是两个这个api函数,那么第一个呢我们就是显示一个浏览嗯对话框,那么呢它有一个参数啊。

在这里呢我们需要用到这个lose inform,那我们先,定义一个这样的一个结构,当然这个结构呢它有一些数值呢我们可以嗯作为一个设置,另外呢我们也需要对它进行一个初始化,这个结构。

首先呢是它的一个副窗口的一个设置,那么在这里呢我们这个数值呢可以为空,就是桌面啊,也可以不设置,不设置的话,因为我们之前在初始化的时候升平呢,它就是空,那么也可以复制为嗯,就是这个窗口化,把出风口。

那么另外呢这里呢还有一些回调函数呢,这个我们也可以不设置,这里是显示的一个标题啊,这个我们可以设置一下它的标题呢,呃实际上也就是窗口里面显示的一段啊信息啊,比如说在这里呢我们就说啊请选这游戏所在目录上。

安装部落或者是那么这里我们可以把它写细致一点。

就是这个登录器的这个所在的目录。

那么我们可以直接说这个lunch的ex一所在的这个目录,我们把它找出来,那么另外呢它还有一些标志哈,比如说这个呢它是要设置一个返回的一个数值,也就是你选择的某一个目录,或者是选择了某一个名字。

那么呢它的需要了一个返回的一个缓冲区,那么这个我们可以复制设置为空啊,那么也可以另外的给它设置一个,当然这个参数呢实际上对于我们现在来说是它是没有什么啊用处的。

当然这里我们也可以来设计一个这样的一个缓冲区,好然后呢这个就是它缓冲区的一个地址,另外它还有一些标记啊,那么这个标记呢它比较重要,那么这个标记里面呢它可以指定嗯,就是我们这个窗口显示的一些样式啊。

那么我们来看一下m s经验里面的一个说明。

那么这里呢他如果是选中了这个b f e d f t box呢,它会显示一个编辑框啊,这个时候呢会弹出一个连体框,那么另外呢它可以与其他的这个标志来进行一些主播,那么这里我们如果选中了,这个选项啊。

那么它会显示了这个目录以及这个目录下面的呃,这个文件会显示文件和这个目录都会显示,那么这一点呢也是我们所需要的,因为我们需要找到这个拉姆起跳ex e这个文件,那么我们就需要这两个。

当然最后这里呢它还有一个痕迹return,那么最后呢这个系统呢它会返回来一个目录,如果你选择的这个目录,啊如果你选择错误的话,这个ok这个按钮会变灰啊,那么我们来看一下。

那么所需要的话也也就是这三个参数吧,可能那么我们先编译运行一下,看一下现在它的一个效果,那么实际上我们看到他加了这个b f e d i t box之后呢,它这里呢就会有一个这个编辑框出现。

如果没有加这个标记的话,这个编辑框呢就不会出现呃,还有呢我们在这里呢它加了一个哦,还有这个呃我们的这个display啊,那么如果我们选中了啊,某一个这个选中的这个名字呢,按了确定之后呢,之后呢。

它会保存到这个size display这个缓冲区里面,我们可以继续来看一下,啊最后呢我们选中这个垃圾文件啊,然后按确定,当然这个时候呢我们没有打印出我们的调试信息,我们可以把调试信息打印出来。

看一下最后这个size play的一个结果,妈,当然如果这里呢不要这个e d i t box的话,他最后呢呃就不会显示这个相应的编辑框,啊这上面的这个编辑框呢他就找不到了,这个时候。

这个时候我们最后选中的是这这个啊文件名,如果我们是选的这个client,那么最后呢这个size player,他的数里面保存的数据呢就是这个我们选中的数据,如果我们最后选中的是他。

那么最后我们按下确定之后呢,这里呢它输出的信息呢就是这个size display,如果它为空的话,当然也就不会呃,我会保存这个相应的数据,另外这里如果我们不加上这个标记的话。

那么呢它里面的这个文件好像是不会被显示的,那么这个时候呢它只会显示这个目录,那么这个时候打开来里面它的所有的文件啊,就看不到了啊,如果要显示文件的话,我们必须来再把这个标记呢加上。

好那么最后呢还有一个bf 1 d i t的,这个我们加上这个呢可以自己输入它的一个路径也是可以的,当然我们最后我们所要所需要取得的应当是呃它的一个路径哈,游戏所在的一个目录路径。

那么我们实际上需要用到它的一个返回数值,因为它的一个返回数值呢也是一个结构,这个atti divist,那么这个呢它是一个相互相相应的,也是一个表格啊,这个时候这个i j k,那么这个表格的话啊。

应该是一个指针,那么指向的是这样的一个表格,但这个表格呢我们还需要用另外一个函数来转换,才能够转换成我们的呃,所常用的这个目录路径啊。

需要把它转换过来才可以有一个get possible idlist啊,那么从这个idlist里面获取这个相应的路径,当然这里也需要用到一个缓冲区,那么这个缓冲区的话,我们之前已经这个定义了啊。

在这前面的,在这个位置有一个电音,好好,修改一下,在前面那个不修改,这个我们把它修改一下,好那么这个缓冲区呢就用来获取它的一个返回值,那么最后呢这里呢我们也可以把用户调试信息来把它打印出来。

那么比如说我们选择这个目录,然后按确定我们看一下,他就会把最后选择到这个名字,以及他所在的目录呢会返回,那么当然我们还可以做一个相应的判断啊,到时候也就是说我们最后选择它,如果不是这个游戏的这个名字啊。

也就是说不是选择了这个名字的话,我们就呃所选择错误啊,或者说在这个路径下面,我们没有检测到这个文件呢,我们就说呃这个选择的路径啊错误,那么这个时候我们可以看到它实际上呢最后返回的路径呢。

就是这个路径就是这个路径,所以说在这里呢最后呢我们也可以给它做一个相应的一个判断,判断一下最后它的一个这个size display得出一个数值。

如果这个size d display它不等于我们的这个lt p e x e的话,那么我们就说了这个选择的路径是错误的,就抱着提示一个对于用户来进行一个提示啊。

所以说这个size display呢说起来呢它还是有一定用处的啊,那最后呢我们可以做一个判断,哒哒哒哒哒哒哒哒哒,嗯,打了,那么如果这个时候我们选择错了之后返回来这里呢,它就会有一个提示啊。

就会有一个错误的一个提示,那么如果选择对了的话,他就不会有这个提示,就ok了,好那另外呢我们再把上面的这两个字出来做一下修改,把它的一个呃路径呢给它计算出来嗯我们来看一下,首先呢我们要获得这个路径的话。

我们需要获得这前面的这个路径,在前面的这个路径取出来之后呢,我们再要要加上,那么后面所在的要加上一个相应的一个后缀,the pass and clean,我们看一下啊,应当来说的话。

我们只需要把它的这个路径取出来就ok了,实际上实际上后面的这个long起跳ex一了,我们需要把它去掉呃,这样的话才能够保证了我们的路径能才是正确的,那么这样的话我们可以来,可以先找一下哈。

在我们的这个字串里面找一下这个相应的这个字串,然后来进行一个替换,那么我们可以用s t i s t r a,那么这个函数来来搜索它的一个子串,在我们的,size跟hod 2里面进行搜索。

那么搜索的指出来也就是我们前面的这个拉琴啊,e x1 ,那么如果他搜索到的话,它最重要csp的这个数值呢,它会大于大于零,也就是说它不等于我们的,它不等于空,那么这个时候呢我们对它进行一个判断。

那么实际上这里有错误的话,我们就返回后面这段呢我们就不用再执行啊,如果在他后面啊没有找到这个lunch的x一的话,那么在这里呢我们就可以了,不需要这个相应的这个判断都可以。

那么我们直接来往这个csp里面写数零啊,也就是我们的字符的一个结束啊,结束的字符,然后在这里呢我们再打印出我们的相应的一个路径就可以,因为之前在这里呢他就反过来,所以说这里的话他必定他不可能为零。

肯定是可以找到的,当然为了安全起见呢,在这里呢我们还可以加上一个一个csp等一个判断,那么如果这个cs p它不是一个空气值呢,我们再来进行这个协助,不然的话这里会报错啊,那么我们再来看一下处理的结果。

好那那这次呢我们最后的最终的这个取得的这个路径,那么这个路径有了之后的话,那么其他的这个我们就很方便,活成我们后面的这个相应的客户端的这个地址呢,我们就很好过去了。

在这里呢我们也可以把这个客户端的配置了,也进行一个,那么这个客户端的地址的话,我们就等于把这个游戏所在的目录的一个地址先给它复制过去,然后呢我们再用sr,再给它添加这个相应的字串键,追加到后面就可以了。

真compass,谁给老21n t啊,那么理论上的话,这样我们就可以找到它的这个这个相应的这个地址twice,然后呢我们再输出,那么这这是最终的这个地址输出的啊。

一个是我们浪起他所在的就是一个是clem所在的这个地址,那么另外一个呢我们就是要活成我们其他的呃,这个多看目录的这个地址,那么这个地址的话,我们在这里边呢实际上有相应的在登录的。

这个按钮里面呢有活成相应的这个地址,这里是登录啊,那么登录的时候呢,我们还需要来进行一个检测啊,也就是在选区的时候看一下,那么这里呢没有涉及到多开,还没有那么多开的话。

我们还需要呢要改变一个这个目录的这个地址,那么也就是最终呢要修改的这个c2 info呢,它里面的一个参数,那么我们需要进行一个检测,这里呢有一个跟clean pass啊。

那么这个路径呢我们需要来对它进行修改,实际上我们是需要,好的,那么这个修改了,我们在把相应的这个目录建成了之后呢,我们在下一节课呢再继续进行探讨,那么这节课呢我们就先分析到这里,好的。

P135:146-游戏多开准备-复制目录文件 - 教到你会 - BV1DS4y1n7qF

大家好,我是郁金香老师,那么由于这个游戏的多,看来需要复制这个游戏客户端的这个目录,那么所以说这节课呢我们自己来编写一个函数啊,嗯来复制,把我们游戏的这个客户端的这个目录呢啊。

复制到一个新的这个目录里面啊,以便我们在多开的时候会使用。

那么我们打开145克的代码,但。

那么实际上这个游戏的选区的话,这里呢我们已经不需要了啊,呃在这里的话我们呢还是最终呢通过创建一个新的进程,用游戏的这个登录器来来实现啊,实际上这些功能呢我们都都不需要了,嗯当然我们测试的时候呢。

我们可以在里边呢做一个相应的测试,那么这里呢我们直接选选就多开就可以了,嗯登录的时候呢,我们选择,u p c啊,然后呢或者是我们用一个列表框来表示它的一个多看,come on books。

这里呢我们就叫做启动游戏,哒哒哒哒哒,这个,然后我们相应的这个share in for,那么这个结构呢我们就在我们的这个combbox里边,它来进行一个相应的初始化,二,好当然这只是一个我们相应的设计。

那么在多开之前呢,我们需要做的准备呢,也就是要检测我们相应的这些目录呢,它有没有复制好,那么没有复制好的话,我们需要来一一的跟他进行一下复制,那么这里呢我们首先呢呃来编写,另外添加一个按钮。

用来做一个测试,呃检测航目录,嗯嗯嗯嗯嗯,那么在这之前呢,我们先自己来写一个相应的这个函数,第二,嗯,啊,那么这个函数呢它有两个参数,那么第一个参数呢这个是我们的呃,因为当时游戏的客户端啊,s t r。

啊这个相应的资源的这个路径,然后呢这个是我们目的地的啊,to di,然后我们需要来把这个路径里面的所有的文件以及子文件,将里面的文件呢全部来复制到我们的目标的这个目录里面去啊,这个函数的作用。

那么这样呢我们可以通过,可以通过一个api函数来实现,也就是一个文件的一个操作的这样的一个函数,那么最主要的呢是它的一个结构的一个参数,那么这个函数的调用呢很简单,我们只需要一个指令就可以了。

那我们先到msd里面看一下它的一个说明。

也可以到我们的论坛上查看相关的一些信息,那么来这里呢涉及到一个,s h file啊。

op struct这样的一个结构,那么我们在它之前呢,先定义这样的一个结构,那么这样的话理论上编译上我们编译呢我们就能够通过了,但是这个结构的话,我们还要给他做一些初始化,说实话我们可以用win设体。

那么也可以直接全部给它-0,那么当然这个结构里面呢,它还有我们的一些信息啊,这里呢也必须要有一个返回值,那么我们进到这个结构里面去看一下它的一些相关的信息,那么第一个呢也是指呃。

给他指定一个显示信息的一个呃这个所属的一个窗口啊,那么这个呢我们一般呢可以设置为空啊,表示我们的这个根目录啊,那么也就是说他在复制的时候呢,会显示一些进度条的这些信息。

那么呢我们可以来给他做一下相应的一个设置,那么最重要的两个设置了一个就是这个flow以及这个to啊,这两个相应的一个设置噗,然后他要考到复制到的一个目的地啊,我们需要给他做一个设置。

然后呢它有它的一个操作类型,那么我们在这里呢是要复制文件啊,所以说cfo cp,那么这个呢w f u n c了,这个我们需要进行一个设置,这个表示是复制的一个操作。

然后呢这里这个标志呢我们需要做一个设置,那么这里的标志的话,我们所需要的是要复制文件以及呃复制这个目录,那么所以说在这里呢我们需要做一下相应的选择,那么这个呢是好像是显示一个独立的一个,不显示名字啊。

这时候是显示了一个进度条的时候呢,不显示这个好像名字,那么这个人不是必须的,我们所需要的应该是,file固定,这里表示的只复制我们的文件啊,但是我们所需要的呢是要复制文件,还要复制这个目录。

那么在这里呢我们可以呢呃设置第一个标记就可以了啊,呃他允许了这个标记的是允许了呃,撤销啊,比如说我们呃当有同名文件的时候呢,他把它删除的时候呢,他不直接删除,好像是会把它放到这个回收站里面,好的。

那么我们只需要设置一个标记就可以了,默认的情况下呢,它会显示一个进度条,那么这个进进度条呢我们可以呢呃设置一些信息啊,他的这个标题啊,然后正在就是先切稍后,好的,那么我们先进行一下测试。

那么测试的时候呢,我们也需要呃存两个参数性能,那么传参数的时候呢,我们只需要传相应的这个目录就可以了,呃所以说在这里呢我们还要需要来做一点修改,嗯要给它加上一个参数。

表示把这个目录下的所有文件呢我们都复制过去,啊,那么这里呢我们需要来给他带一个通配服务,然后呢在这里呢我们就复制这个目录,那么这个检测的检测目录呢,我们就在下一节课呢再进行交流,那么在这里的话。

我们在这里啊,我们就复制相应的这个目录,在这里呢我们就调用之前的这个函数,然后呢是我们,这是我们的游戏目录,那么我们看一下还要做一些什么处理,跟pass应该是一个啊,跟clean pass。

那么目标的这个目录的一个路径的话,我们还需要呢来进行一下处理,那么目标的这个路径呢,我们需要随机地进行一个生成,啊,那么首先呢我们把这个游戏的游戏目录的这个地址呢把它复制过来,那么复制过来之后呢。

我们在后边呢给它添加了相应的这个字串,然后我们用用s p r i n t f把它进行一个格式化,哒哒哒哒,爱你爱到不对,那么格式化呢我们呃前面呢用零来给它对齐啊,补齐啊,只显示两个字节。

那么后面呢是我们的这个技术啊,在这里呢我们用mp amp表示,另外呢我们用一个静态的一个变量,那么每次呢我们呃这个格式化之后呢,让他自增一,当然这个也可以把它写在后边,那这样的话可能呢便于理解一些。

那么进行格式化之后呢,我们再把相应的这个字数来追加到后面,追加到我们的这个目标路径的后边,打开好的,那么追加到后面之后呢,我们把这一段信息呢呃目标路径显示出来,看一下,二,好那么我们再重新编译。

我们首先看一下我们生成的呃,这两个路径是否正确,twice嗯,然后呢,真好,好先运行测试一下,然后呢在这里呢我们检测一下目录,但是这里呢他没有打印出相应的这个调试信息,那么可能是没有执行到这个地方。

有可能啊,我们在它的头部再加一段调试信息,check,第,再重新生成一下,那么这一段的代码的话根本就没有被执行啊,那么这个时候的话我们看一下错误在什么地方。

那么首先我们看一下他空间世界里面的一个关联选项,应该是执行到这个目录里边来了,呃但是呢我没有看到任何的一个调试信息,再重新申请一下,嗯,那么这段代码的话没有被执行到啊,可能是他前面的一个关联。

那可能是没有关联的,好,我们你到前边来看一下,那相应的,but 1000,那么我们需要把之前的这个映射呢需要给它删掉,不然的话消息映射到另外一个这个地址里边去了哈,所以说它不会转到这里来执行好的。

我们再来看一下,嗯那么这个时候呢就正常了,正常之后呢,我们再对代码来做一下修改啊,这个提示信息呢就不要了,这一段我们也可以不要了,然后我们再重新编译生成一下,先设置一下有心步履,好那我选择正确之后呢。

我们再检测一下目录,那么这个时候呢我们可以看到提示信息,那么是复制这个目录下面的所有文件呃,到我们的傲视群雄林林里面啊,那么当然这里呢呃有一个字符对齐啊,是错的,因为我们在游戏里边的话。

它的一个路径点呢,这前面还有一段啊,cl i e n t,我们是把后面的nt两个字来替换成了零零啊,这样呢才是正确的啊,不然的话我们制服呢不能够对齐,那么不能够对齐的话。

可能呢它产生了这个入侵呢就不正确啊,当然我们理论上来说小于之前的这个容量的话,应该不会出错,但是不能够大于,大于之后的话,它可能影响到其他的数据,好的,那么我们再重新来测试一下。

那么这个时候呢生存的路径呢就是正确的了,而且第二次复制的时候呢,它就会简称另外一个例子呢,这里呢会产生一个路径的一个序列啊,当然这个检测的这个工作呢,我们现在还没有检测自己指定的这个目录是否存在。

那么我们先来测试一下复制啊,复试的这个函数,那么在复制之前呢,我们可以来把之前的这个目录可以删掉,或者是我们从这里呢,我们从零一啊,从一开始这个number的这个数值跳过零零的这个目录。

好然后我们再来检测,那么这个时候呢它会提示啊某一个步入了文件夹,不存在,该文件可能已经被移动或者是删除,是否要进行创建,那么四的话他肯定就会自动的创建啊,当然这个时候呢我们呃杀毒软件呢我们把它关一下啊。

这个时候呢它会显示一个进度条,然后呢复制过去啊,这是正常的情况啊,他会这样的做,然后呢第二个第三个他都会i9 i9 的进行一个复制,当然我们还有另外一种方法啊,我们可以来设置一些参数来进行一个控制。

那么比如说这个地方啊,呃flag这个地方呢我们可以了,让他没有任何的一个信息的一个提示,我们可以把这个标记了,加上它就不会有任何的一个提示啊,那么它会直接就会创建一个默认的一个目录。

那么也不会有这个进度条出现,那么在这里呢我们把它改为二层,从第二根目录开始进行测试,嗯那我们再来看一下呃,应该还有一些信息,这个是不显示,啊这个是建立目录的时候呢,不显示相应的信息,好像是要把呃这个。

啊要把这个标志加上,才是我们在检测目录的时候呢,呃忽略掉相应的检测,windo,忽略掉相应的一个信息,好的,那么我们这里呢再改一下,我们从第三根目录开始,那么这里呢已经建立了啊三个部落。

那么我们从零三这个时候开始,那么我们再来检测一下,那么这个时候呢它理论上就不会有任何的这个提示啊,还有这个进度啊,这个定进度呢我们也可以不显示啊,那么我们需要把这个标志啊加上啊。

然后呢我们把这个标志改为四,技术,这个杀毒软件我们可以退出,那么这个时候呢他不会有任何的提示信息,就不会有啊,零四,然后如果我们再点一下的话,它就是零五,那么这个时候呢他直接就复制过去了啊。

而不会有任何的提示信息,我们来看一下武器的步骤。

那么这个时候领土这个部落呢它也呃建立好了,而且它的大小的话应当符合我们的这个最新的客户端大小是一样的,那么如果我们再继续的话,它会来零六啊,会建立这样的一个目录,也会复制过去,那么再继续了就零七啊零八。

然后呢它就会建立相应的一个目录,当然我们要完善这个代码的话。

最好呢我们还要加上一个呃相应路径这个目录的一个检测,那么如果这个指定的文件它已经存在了呃,我们呢就不去呃进行相应的这样一个复制,如果这个文件不存在呢,我们再把相应的这个文件呢给他复制过去,好的。

那么我们接下来再加上一个文件检测的一个代码,那么这个呢我们有一个呃相应的一个函数可以用来检测啊,这个is啊,这个函数呢可以用来检测文件的一个属性,那么它的这个属性零呢表示检测文件呢是否存在。

那么这个参数如果为二的话,表示来检测这个文件呢是否可读,那么四呢检测它是否可以写,第五人表示检测这个文件是否可以读写,当然它的一个返回值啊,返回值如果它的返回值是-1的话。

就表示了文件不存在或者不具备他们指定的这个属性,那么我们可以通过这个这个函数来来进行一个检测,那么文件呢它不存在的时候呢,我们再来进行这个读取,那么只有它的返回值为-1的时候呢。

我们说的表示了这个文件不存在嗯,那么我们可以用游戏的这个ex e这个文件哈指定的呃,来表示了它是否存在,那么这里呢我们可以再建一个临时的一个变量,啊,那么建立好了之后呢,我们这里它有一个相应的一个路径。

那么我们先把这个路径呢啊录制过来,那么这个路径过来之后呢,我们再加上后面的这个文件名就可以了,然后呢再给他嗯追加一段这个字串进去,大,好吧,那么这个时候我们在访问他的时候啊,呃如果呢这个文件不存在。

那么我们再进行一个复制,当然要使用这个文件的话,我们也需要包含一个相应的头文件,好的,那么我们再次来看一下啊,把,那么我们把最后这个标志来去掉,那么这个时候来复制呢,它会显示出一个进度条。

那么第六个的时候,第九个的时候啊,这个时候呢呃因为呢相应的这个目录呢它不存在相应的文件呢,它没有检测到,所以说呢他才去啊进行了相应的这个复制,那么这个时候呢我们可以看到啊,可以看到。

好的,那么这节课呢我们就讲到这里,那么下一节课呢我们再进行呃多开的一个编写。

当然在这个时候呢,我们已经建立了这个相应的这个目录,那么如果这个目录它不存在的话,我们就给它建立,那么下一节课呢我们再接触这节课的内容,来继续的来探讨啊,接下来的代码的一个编辑,好的。

P136:147-写游戏多开代码 - 教到你会 - BV1DS4y1n7qF

大家好。

我是郁金香老师,那么这节课让我们一起来编写游戏多开的代码,先打开146克的代码,然后我们在启动游戏这里,这两行因为我们要实现的是多开,不是登录器,那么所以说在这两行的话,我们需要来把它进行一个修改。

需要把它注视掉,而且在这里的话,我们在启动我们的客服端这里,我们需要来也需要把它注视掉,而不是我们直接的启动客服端,那么这是我们启动客服端的代码,那么在这里我们启动客服端的话,是由我们的登录器来完成。

而不是由我们去更改它,那么所以说我们先要打开游戏的登录器,那么主要我们用Creative Process来完成,用它来打开我们的游戏的登录器,那么这个函数我们先做一下了解,它有几个必要的一个参数。

必须的一个参数,那么第一个也就是命令行,还有一个就是我们的当前目录,以及我们指向我们的一个开始的一个信息,主要是用来显示窗口,还有这个是返回进程的一些信息,当然最重要的是一个创建的标志。

那么创建标志我们需要把它设置为暂停的一个状态,需要设置这个标志,然后我们再用Resume Sealed来恢复这个进程,因为如果我们不采用这个标志的话,那么一旦创建之后。

它就已经执行了我们的检测游戏多开的代码,那么就实现不了多开,那么我们必须要把它暂停掉,创建进程之后,然后再把它pass掉,修改过检测的代码之后,再让它这个进程来执行,以达到绕过多开的一个目的,好的。

那么我们先来创建游戏的登录器,那么游戏登录器,我们也需要通过之前的代码来获得我们游戏的运行的一个目录,在这里的话,我们之前已经获得了,我们打个比方,已经在获得了游戏路径的情况下,那么我们来使用这个函数。

那么使用这个函数,我们需要传递的参数,我们需要先把它准备好,那么其中两个是结构,那么我们需要在这里的定义相应的信息,结构信息,那么另外一个来使用作为一个返回的一个进程的一个信息,好。

然后有了这两个结构之后,我们就可以直接的调用这个函数,那么我们来看一下,它有很多的参数,那么之前的这些,我们都可以把它复阅掉,然后第二个参数,命令行这个我们必须要要是它的一个全路禁评。

那么在这里它的一个全路禁评的话,我们需要另外的定义一个次算来对它进行一个活程,然后是由我们的,这个游戏的路径里面再来加上登录器的一个名字,那么这个是我们去掉的一个登录器的一个名字。

这个时候我们把它相当于是恢复过来,再加上登录器的一个名字,那么这是它的第二个参数,那么第三个参数,我们可以默认的可以把它复阅掉,那么第4个参数,我们可以是否继承,这个我们也可以。

那么在下面一个标志是我们的进程创建的一个标志,那么这个标志的话就是我们的一个关键,那么我们需要把它挂起,在创建进程的时候,我们可以在这个标志上面把它加上这个名字来订阅这个标志。

那么现在我们可以看到这个标志是我们的一个关键的一个标志,那么这个标志是我们的一个关键的一个标志,那么还有一个设置一个当前的一个目录,那么这个目录的话就等于我们这个游戏所在的,这个目录。

那么后面是两个相关的一个信息,是一个结构指针,start,嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯啊,我們還需要來進行一下轉換,我們現在是在做一個轉換,我們現在是在做一個轉換。

我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換。

我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換。

我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換。

我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換。

我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換。

我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換。

我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換。

我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換。

我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換。

我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換。

我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換。

我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換。

我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換。

我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換。

我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換,我們現在是在做一個轉換,當然這兩個地址了,我們先把它複製過來,我們先把它複製過來。

(音樂),(音樂),這個是進程劇本,我們打開之後,然後是它的一個起始地址,要寫入的地址了,我們直接把它傳入進來,那麼要寫入的一個緩衝區,我們需要在之前給它準備一下,(音樂),然後要寫入的大小是一個字節。

最後這裡是實際寫入的字節數,這裡我們可以另外給它傳一個數據出來,By Red,(音樂),那麼理論上的話,這樣我們就能夠實現多開了,但是我們還是做一下檢測,檢測一下這個函數是否執行成功了。

那麼如果執行成功的話,它會返回一個非0的數值,那麼這裡是傳入它的一個地址,好的,我們再重新來看一下,首先也是設置它的一個目錄,那麼這裡的BR是唯一的,那麼唯一的這個時候,我們就可以開啟多個登錄器。

那麼這個時候,第一步,第一個多開的這個項,實際上已經被繞過了,那麼我們接下來要做第二項,繞過我們客服端的一個檢測,那麼也就是需要修改一個它的路徑,讓它客服端啟動的時候,需要修改一個路徑,那麼這個路徑。

它也保存在我們這個登錄器裏面,那麼我們直接修改它的地址就可以了,那麼它的地址的話,在449714這個地方,那麼我們來用這個CE來看一下這個地址。

那麼這個地址實際上它是一個字串,我們只需要把這個相應的數據來跟它寫進去,那麼實際上我們只需要寫的,應當是這個NT這個地方,NT這個地方的話大概是09,從這個位置開始寫,那麼我們再把這個地方做一下修改。

或者也可以直接從14這個地方改也是可以的,但是要改的話,我們就需要改的是整個字串,從斜槓這個地方開始改,那麼我們先需要來自己形成這樣一個字串,把這個字串我們複製一下,那麼從這個地方開始改。

那麼我們現在生成的一個格式的話,是這種格式,00到我們的09,這類的或者是0A0B的這種格式,那麼所以說在這裏,我們也需要給它這個緩衝區的話,也需要生成這樣的格式才可以。

那麼我們可以把前面的這段複製一下,也需要給它生成一個這樣的緩衝區,緩衝區,然後,然後,好,(音量注意),(音量注意),(音量注意),(音量注意),(音量注意),(音量注意),(音量注意),(音量注意)。

♪ 音乐 ♪,♪ 音乐 ♪,注意这里有个转移字符,是一个双斜杠才表示一个斜杠,那么在这里我们需要改动的是这个地方,那么它这个地方的一个改动,我们是通过这个Combo Box来改动。

它里面所选择的这个数字,来进行一个改动,那么在这里我们需要为它关联相应的变量,♪ 音乐 ♪,♪ 音乐 ♪,♪ 音乐 ♪,♪ 音乐 ♪,好的,那么我们在这里我们通过我们列表框里面选择的数值来更改。

它的这个来更改相应的一个字串,♪ 音乐 ♪,♪ 音乐 ♪,那么它当前选择的这个相应的下标的话,我们就可以作为它的客户端路径的后边的这两个字,那么我们在这里来用另外建立一个Armbit,♪ 音乐 ♪。

那么这样我们只取它的一个字节就行,然后用PRMTF来格式化它,♪ 音乐 ♪,那么这样的话我们就能够生成一个我们固定格式的一个字串,♪ 音乐 ♪,类似于这样的一个字串,或者是那么当然这里这个字串的话。

它可以很大,可以从00到FF可以容纳256个不同的路径,当然还有更多的需要的话,我们可以从这前面可以改,这里可以改为3X,那么这样的话,当然我们一般来说的话,一个游戏最多几十开上百开的话就已经够了。

所以说在这里的话,我们只用2X来就够了,那么这个路径生成之后,我们把它追加到把它写到我们的相应的进程里面去,把前面的这一段复制一下,♪ 音乐 ♪,然后这里是我们要修改的一个地址。

那么这里是它的一个缓冲区,当然现在缓冲区我们变了变成size,当然在前面的地址符号我们也可以不要了,那么这里我们需要,它的一个需要写的一个字节数,字节数的话就是字串的一个长度,♪ 音乐 ♪,好的。

那么我们再重新编译申请一下,♪ 音乐 ♪,♪ 音乐 ♪,但是我们要注意到,这个时候BR2它写入的数据,返回之为0,说明的话,这里它没有写入成功,我们可以复加到里面去看一下,那么如果这里写成功的话。

它应该是00,这个地方应该是从00这里开始,或者是03,应该是02这一类的,那么所以说这里的话,我们还要找一下原因,它为什么写入失败了,那么我们可以把它的最后的一个错误代码。

抓出来看一下,get master,好的,那么我们再次编译申请一下,刚才这里路径设置错了之后。

另外的复制了一个文件,我们把它删掉。

那么再次运行我们测试一下,那么我们从这里来我们能够看到有一个错误代码是998,那么它的错误代码的话,我们可以来到论坛去查询一下,它是一下是一个什么意思,在这里我们搜索一下,然后一到998这里。

那么这里他说的是内存的一个访问无效,内存的分配或者是一个访问无效,但是我们这个地址它是存在的,而我们写入这个内存的话。

它需要的是一个读写的一个属性,当然在这里的话,我们是需要写入的一个属性,那么如果不存在的,我们可以尝试来用另外的一个函数来更改这个页面的一个属性。

那么这里我们可以用这个Virtual Protect来更改一下它的一个属性,这里我们更改十个字节大小的一个属性,那么它新的一个属性,我们来进来看一下,它有哪些属性,那么我们至少需要一个写入的一个属性。

配置,ReadWrite,那么我们选这个可读可写可执行,那么完成了之后,我们再把相应的属性给它恢复过去,好的,那么我们再次测试一下,那么这个时候的话,我们可以发现了它写入是成功的。

我们再用这个C1来附加进去看一下,那么这个时候它写入的地址是00,看来是页面属性的一个问题,那么我们再次启动第6个登录器,再用C1我们进去看一下,那么这里它还是00。

那么实际上我们这是因为我们没有另外选择的原因,这里我们要自动的要选择一下启动的游戏的时候,这里是01了,那么理论上这样的话我们就能够实现,多开,那么我们再来测试一下。

那么这样我们就能够达到一个完美的多开,多开,好,有點氣味,他剛剛好,起了氣味,為什麼,這個,我還看了一段,我還看了一段,我都還沒看完,是誰,好像也沒看完,可是他今天,他今天晚上,坐在我面前。

他前面還不肯排隊,他現在就沒有進來,他現在是沒有進來,他現在是有點氣味,他剛才說什麼,我們這節課,大致的內容就到這裡,當然我們還可以做一些細節上的一個修改,比如說,我們在這段代碼後邊,我們還可以。

讓他自動的列表,自動的移到下一個,自動的選擇下一個,當前選擇的下標,讓他自動的+1,另外,我們默認的讓他選擇第一個下標,在這裡,內視圖裏面我們再做一些修改,嗯,嗯,(錄影起點),(錄影起點),好的。

那麼我們再次運行,(錄影起點),那麼這樣的話,它啟動第一次之後,它自動的就會移到下一個選擇的這個地方,(錄影起點),好,那麼再次啟動的時候,它就是另外的一個路徑,這個時候來保證我們兩個登錄器裏面的路徑。

它不一樣,(錄影起點),這是00,下面這個是01,那麼這樣就能夠打到了繞過客戶端的一個多刊,還有繞過一個登錄器的一個多刊,從而實現真正意義上的一個多刊,對於這個遊戲來說,(錄影起點),好的。

那麼這節課我們就交流到這裏,那麼我們下期再見。

谢谢大家,(今天的時間差不多,下次見)。

P137:148-游戏自动登录原理 - 教到你会 - BV1DS4y1n7qF

大家好,我是郁金香老师,那么这节课呢我们呃来大致的看一下自动登录的一个设计,那么游戏的自动登录呢,一般来说我们都是通过呃按键的一个模拟来实现的,那么这种设计的话也比较有通用性,那么我们先来看一下呃。

以这个热血江湖为例,来看一下它的一个登录设计,那么首先呢我们肯定是要按照之前多开的一个过程过程,先打开游戏的登录器,然后用鼠标模拟呢来选区啊,那么在选区的时候我们就需要了呃获得这个相应的坐标点啊。

那么这个呢我们在后边等的过程里面呢详细的分析啊,呃那么我们先来看一下这个代码的一个打字的设计啊,反正这里呢主要是用鼠标模拟点击,比如说我们选择网通四区,点击这个坐标,然后呢点击之后呃。

等待一段时间之后呢,再点击游戏开始啊,那么游戏开始之后呢,我们再等待一段时间或者写相应的代码来判断游戏的客户端,正常的打开了之后呢,然后我们输入它的一个账号或密码,那么呃游戏的相对复杂一点的。

可能就是输入这个密码以及选择这个人物相关的信息,那么另外呢还有一个就是在不同的电脑上,它的时间啊,登录的时间不一样嗯那么为了提高这个效率的话,我们可以来写一些判断的代码。

当然如果是嗯在设计的时候不考虑这个效率的话,我们可以了,尽量的把这个等待的时间设长一点,那么我们先来看一下我写的一部分代码啊。

那么首先呢我设计了一个结构用来存放呃,它相应的游戏的选区以及游戏的角色和选择的呃,还有我们的呃账号封闭嘛这一些信息,那么最终我们设计好之后呢,我们可可以实现一个批量的一个登录啊。

然后把我们嗯大量的账号呢保存在一个文件里面啊,当然现在只是测试阶段啊,一个测试的一个阶段,然后登录的这个库呢设计在这个logo里边,那么首先呢我们这个呢也是先创建一个登录器的客户端。

通过这个college process,然后创建之后呢,把这个登录器的进程来挂起,挂起之后呢,然后呢我们呃修改多开相关的代码,这个在我们之前已经呃做过测试,然后呢把这个七五这一次节来改为1b啊。

跳过一个多开的检测,然后呢我们再恢复这个相应的一个线程啊,当然之前的话我们为了躲开绕过它一个目录路径的一个检测呢,我们还需要呢在这里呢可视化它的一个呃目录路径啊,在这个登录器里面,然后我们再恢复啊。

这样这一部分前边这一部分呢是为了实现一个多开而设计的,那么这后边的话就根据我们传进来的一个账号的一个信息啊,也就是选择的分析了分区哈,通过鼠标模拟啊,进入到这个库里边啊,来模拟我们鼠标的一个点击啊。

那么鼠标点击之后呢,我们等待一段时间,或者另外写一个代码来判断,那么这个判断呢也就是说呃他把这个分区的信息呢嗯初始化好,那么游戏开始的按钮呢呃呈现出来啊,那么接下来呢我们就点击这个开始游戏。

开始游戏之后呢,我们要等待一段时间啊,要让我们的客户端启动,要让我们的这个账号和密码的这个框来弹出来,然后呢我们再用键盘啊模拟来输入我们的这个嗯用户名,那么用户名输入完了之后呢,我们再输入我们的密码。

在前面呢,我们需要按下一个tab键啊,做一个切换啊,或者用鼠标来模拟给某一个位置登录也是可以的,当然这里用回车键呢登录呢要方便一些,然后呢再是自动选线,选线之后呢。

呃选项之前呢我们需要把这个窗口呢把它置换到顶端啊,然后让这个窗口来获得一个焦点,嗯然后呢再次选择一个教主角色,那么角色选择选择完了之后呢,我们在这里呢,因为呃角色选了之后登录到游戏的时间呢。

等待的时间比较长啊,这里为了提高效率呢,我们呃就用一个循环来判断这个游戏是否正常的登录了,嗯这里呢我设置的是呃一个一分钟的一个判断,在这一分钟之内呢不停的啊,每隔60ms呢就去读取一次人物的信息。

那么如果读取出来了,那么我们就退出这个循环,就表示已经正常的进入到我们的这个游戏里面,那么当然这里呢我们也可以直接的,你可以直接设计为实力,那么可能的话这个等待的时间就比较长啊。

没有我们这种循环的判断呢效率这么高啊,那么我们也可以把这个循环直接把它注释掉啊,等待一分钟或者两分钟之后呃,再来了,进行一个接下来的操作,比如说我们开启外挂啊这一类的,自动开启,自动开启挂机啊。

自动去任务啊这一类的,好的,那么我们先来测试一下。

嗯,啊这个时候呢都是我们的代码呢,它自动的在控制我们的啊鼠标以及我们键盘的一个输入,好这个时候呢他需要等待一段时间,当然这个期间的话啊,我们是不能够去控制鼠标的一个操作的啊,进行一个操作的。

需要它自动进行的,至少呢我们需要这个游戏的窗口呢需要自前啊,需要前置,而且这个时候呢我们选中人物角色之后呢,我们需要把它的标题需要改一下,因为不然的话我们多个窗口之间呢,我们就无法的呃不方便啊。

进行一个分辨,因为下一个下一个客户端启动的时候呢,它也是同样的标题的话,我们就不能呢对它的窗口来进行一些相关的操作,那么这个时候进正常的进入游戏之后呢,它会自动的打开第二个客户端。

然后呢他等待一段时间之后呢,会再次的输入第二个账号,我第二个密码,啊然后呢它会自动的去选择我们的呃人部,等待一段时间之后选择轮毂,然后选择完了之后呢,他会把这个他的标题名来设置为账号的一个名字啊。

这样呢就完成了一个自动的登录啊,当然这里呢我还打印了一些调试的一些信息嗯,大家可以把所有的这个调试信息呢都打印出来啊,这样的对我们呃调试这个角色呢有一些呃有一些帮助啊,这样的话,好的。

那么大致呢我们就是这样的一个设计啊,那么下一节课呢我们再一步一步的详细的来呃,来介绍一下哈,这个数据的一些提取啊,啊还有我们账号密码的呃,输入的这些函数的啊设计,那么这节课呢我们就大致的介绍到这里了。

大致我们就用了这些技术啊,那么大家也可以下去呃,先自己编写代码进行一下尝试,好的,那么我们下一节课了再来讨论这些细节的东西。

P138:149-游戏自动登录设计-自动选游戏分区 - 教到你会 - BV1DS4y1n7qF

大家好,我是郁金香老师,那么这节课呢我们来编写自动登录呃里面的游戏分区,分区选择的这一部分代码,那么我们先打开vs 2010。

那么新建一个工程,那么这个工程呢我们就叫做自动登录,哈哈哈,那么为了方便我们代码的遗址呢,我们都把自动登录相关的呃代码呢把它封装成函数的形式啊,方便后边呢我们把它进行代码的一个移植,你好。

那么首先呢我们把147个的代码代码打开,那么里边的有关于游戏多开的这部分呢。

我们直接把它移植过来,那么这一部分呢是关于我们游戏多开的啊,呃我们把这段数据呢啊直接把它复制一下,然后粘贴过来,然后我们先编译一下,看还有没有其他的数据呢,呃需要进行移植。

那么关于这里呢有红线提示的这一部分呢,那么这几个变量的定义呢,我们需要把它呃复制过来,相关的一个数据,那么我们找一下,那么这一段呢我们也先把它注释掉,那么这相关的这个参数的话。

我们另外的定义一个把它定义成一个静态的一个变量,这里,做一下修改,好再次编译生成一下,感觉,好了设置好之后呢,我们再次编译生成一项,编译通过了之后呢。

这个时候我们先测试一下是否能够正常的打开我们的客户端,呃那么说明我们的路径哈可能设置还有一些问题,我们再来看一下。

对了这里我们还需要呢在我们的这个按钮里边的关联,相相应的这个函数需要调用一些,好的再次我们测试一下,好那么这个时候登录器打开之后呢,我们接下来要编写的代码就是选择这个分区。

那么现在它的分区的话一共有十个分区,那么我们因为是通过鼠标来模拟呢,需要取得这些啊分区的鼠标点击的一个位置,那么这个呢我们可以呢呃借助一些软件来获取它的一个位置。

那么这里我采用的方法呢是先把这个图片啊先保存下来,那么保存下来之后。

我们可以利用一些工具呢来确定它的一个坐标的一个位置,当然我们也可以自己编程实现嗯,那样显得的话要相对的复杂一些,那么这里呢我利用的这个画图的程序里边,它有一个相应的坐标。

那么这里呢就是它相应的呃零零点坐标的一个起始位置,那么这里面比如说我要点击这个网通一区,我们从这下面这里呢它会显示一个坐标,那么现在坐标的位置的话是216115啊。

那么我们这就是我们这个游戏分区的第一个分区啊,网通一区的位置,那么我们就可以把这个位置呢先记录下来,是226112,那么后面的位置呢我们也可以全部把它固化,当然还有另外一种比较简单的方式呢。

我们可以来呃把这里的坐标记一下,它的y坐标是100左右,我们可以看到,那么这里的y坐标呢我们看到的是多少呢,是大概是400啊,394的样子,那么我们394减掉100的话,就有一个差值,大概是294啊。

大概在295的样子啊,那么我们再来看一下是这个位置啊,99大概是到这个位置,396,那么396到我们的99之间的话,大概是有400左右的,约等于嘛,我们说的约等于400,这样的一个像素的一个距离。

那么400的话我们除以它十个分期的话,十个分区,那么每一个分区它占用的这个,也就是说这个点与这个点之间的一个距离的话,那大概来就是40啊或者是39都可以,那么也就是说它的一个呃分区的坐标计算方式呢。

我们可以这样来给他表示,就是后面呢就是一个i乘以三九或者是四零都可以啊,这里我们取三九,那么这个i的值就等于我们的09啊,或者是呃19都可以,那么理论说理论上来说应当是0~9才对啊。

因为后面第一个坐,标的话它后面的数值应当被啊忽略掉,好的,那么接下来呢我们通过这个坐标取得的坐标,来来编写一个啊选择分区的呃一个函数,那么我们所需要准备的主要用到的api函数呢。

就是这个鼠标相关的,那么鼠标呢它有一个呃按下按左键的一个动作,或一个弹起左键的一个动作啊,这里有一个lion和lift up,那么我们需要有这两个动作,好的。

那么我们嗯先回到我们的这个v s010 那边,那么写一个相应的函数,那么这个n d n d x呢就是我们的分区,那么这里呢我们写为一到12,这样方便理解,好的,那么我们接下来呢需要用到两个函数。

一个呢是设置我们的鼠标的一个坐标,那么需要调用一个设置鼠标位置的一个函数,那么这个位置呢就是我们需要用到一个xy的一个坐标,我们之前呢可以定义这个x和y,那么我们来看一下我们记录的啊,226112。

226,112,那么把它写在这里,但是这个坐标的话是相对于我们窗口的一个坐标,但是我们在设置这个坐标呢,它是针对整个屏幕啊,桌面的,那么所以说我们还需要转换一下,在这之前呢。

我们需要来取得这个窗口的一个左上角的一个坐标,也就是我们再次把震动器打开。

我们需要取得这个位置的坐标啊,如果它本身是在这个位置的话,我们就可以直接调用。

但是呢我们所取得的这个坐标的话是相对于这个登录窗口的,所以说我们需要取得登录窗口的左上角的一个坐标,那么这个呢我们可以先取得我们窗口的一个距离,那么打开我们的工序啊,派加一下,那么取得它的一个标题啊。

匿名,这个我们可以省略掉取得它的一个标题,然后呢我们找到之后哈,那么如果这个窗没有找到,没有找到的话,它等于零啊,返回的句柄的为空,那么我们直接就返回啊fs,那么如果找到了。

那么我们就用其他的这个函数来获取该window,我们获得一个这个窗口的指定窗口的这个矩形上下左右的一个坐标,那么它另外还需要一个参数,那我在这边打,啊这样的话我们可以取得一个上下左右的一个距离。

保存在这个结构里面,那么这个xy的话我们还要什么呢,要加上这个窗口的他的x呢需要加上它的left题啊,也就是我们左边的这个边界的这个坐标,那么y呢我们要加上他还是一点拓扑啊。

那么top的话也就是这个顶点的这个y坐标,内地的是这个边的一个x坐标,那么我们加上之后呢,呃加上之前的这个226和112的这个偏移的话,那么这样加上呃,它现在的这个边界呢就组成了它在屏幕上的这个位置啊。

也就是在某个点的啊,这个网通一区的啊,屏幕上的一个位置,它就过去了,那么获取了之后呢,我们然后呢可以把鼠标移动到这里,移动到这里好的,那么我们接下来我们可以先测试一下。

当然这里呢我们的y坐标还需要加上一个参数,加上我们的nd index t减一,因为它是从零开始的,这里要减一,然后再乘以我们的三九,这是我们所分析的这个数据,啊这是它的坐标的一个公式。

那么这样的话我们就能够把我们的鼠标移动到移动到游戏相应的分区,散,那么移动到这个分区上之后呢,我们还要还要就是说呃,点击点击鼠标左键,或者说鼠标单击左键,那么这个时候呢我们需要用到另外一个api函数。

那么我们再来看一下我们sdn。

那么它的第一个参数我们需要来左键按下传递一下,那么后面呢我们都可以省略掉,后边这些参数呢我们用不到呃,因为这里呢我们用的是一个绝对的一个坐标,不是相对坐标,所以说后面的他这个什么dx dy y呢。

我们就用不上了,那么另外呢它还需要一个动作,按一下之后呢,我们还要弹琴,好,需要这两个动作,那么这两个动作之间呢,我们最后呢再加上一个sleep,好的,那么我们测试一下,另外啊用一个按钮来测试它。

选择分区,比如说我们选择啊分区一,当然我们也可以把这个常量来把把它定义成红啊,定义成这个网通一区,网通二区啊,这样的红啊也可以,比如说在这里听一下,啊也可以这样的定义,好,那么我们再次来看一下。

那么这个时候呢我们点击这里的时候呢,它首先它会自动的把鼠标移动到这个地方啊,然后呢再点击一下,再点击一下,当然如果你想要这个鼠标的指针啊,没有这个显示的话。

可以来先把这个鼠标的指针呢呃用另外的一个函数来把它保存起来,我们可以用先用get,先用这个函数呢把我们的鼠标呢那指针的位置先保存一下,那么调用完了之后呢,我们再把它移动回来,哈哈哈,咳咳咳。

啊这个类型当然是不一样啊,sor,这个类型好的,那么我们再次来测试一下,啊这样的话啊如果时间比较短暂的话,他感觉视觉上来就感觉到这个鼠标它它是没有移动的啊,直接就点开了。

这个时候呢我们可以把选择分区这个函数呢,把它加到呃我们的自动登录里面,好这个是我们登录器打开哦,那么这个呢我们需要前置做一个说明啊,在它的前面做一个说明,这样才能够最终的调用。

因为这个函数呢我们现在写到它的后边去了,好,那么我们再次测试,那么这里呢我们还需要等待一段过程的,好那我们再去测试一下,那么我们还需要做到一点啊,就是需要把我们的这个分区呢窗口打开之后呢,需要把它前值。

那如果不把它前置的话,呃,这个时候呢它也会点击不到我们相应的这个分区,好的,那么这个时候呢我们再做一些修改,测试的时候,我们再让这个等待的时间稍微长一点,主要是我们要让它显示出我们的这个登录界面之后呢。

我们才能够选择这个分区,那么我们可以加一个循环,那么加一个循环的作用是什么呢,就是直到我们的这个窗口呢,它出现之后,我们嗯再选择这个相应的分区,那么在这个循环里面呢,我们一直查找这个窗口。

看这个窗口呢它是否创建的啊,那么如果我们找到了这个窗口,这个窗口呢它不为空,那么在这里的话,我们呃sleep呃,然后再退出,那么也就是说等待一个登录器打开哈,然后呢我们再进行一个分区的一个选择。

那么接下来我们再测试一下,然后我们在这里呢输出相应的调试信息,我们看一下它是否选择了相应的这个分区,那么这个时候的话我们看到我们这段调试信息呢,呃没有被执行,那么应该是我们可能循环里面出了一些问题。

没有正常的退出,那么我们在到这个循环信息这里呢,再加上一段调试信息啊,哈哈,那么我们看它是否检测到这个登录器是否已经打开,如果打开的话,它应当啊会执行到这一句,那么这个循环的话。

我们也要给它加上一个实力谱啊才对啊,60ms的时间,如果没有加上实力谱的话,可能他很快就把这个循环呢完成了,外面我们还应该要加上你的实力吧,好那么这个时候的话呃,这个分区呢应当是正常的选择了啊。

正常的选择,好那么我们再次测试一下,那么在这里呢我们选择分区2号试一下,四分区啊,我们看一下,我们把它移开一点,那么鼠标尺寸呢在这个位置上,那么我们看到他闪了一下,然后就回到了这个位置。

从这里的话我们看不到,那我们要登录游戏之后呢,才能够从里面能看到它的一个分区,那么我们就进入游戏之后呢,再来看一下,那,么这个时候的话可能是他的这个分区的话选错了啊,所以说呢他说这个相应的账号没有激活。

我们再来看一下它的一个坐标的一个选择呃,657328,这是x坐标328,我们来看一下啊,那么我们最好呢是在测试阶段呢,把这个还原鼠标位置的这个把它去掉啊,这一段还有这个保存我们鼠标信息的这一段呢。

我们先把它去掉,那这样呢我们能够直接的看到鼠标的一个位置,然后移动到这个分区上面之后啊,移动到这里之后呢,我们这里的延迟呢我们加长一点,方便我们观察它移动的位置是否正确。

啊这个时候呢他选的是电信的一区啊,它什么呢,他少选了,应该是下移了一位,在这里的话应该是这个nd的话要减二才对,乘以39i乘以39y坐标26112,我们再来看一下26 1120,要不叫我。

这个位置到这个位置三三十九的样子啊,那是加上39,加上九的话就是这个位置,不是幺幺,那么我们把它写成211106的样子,再做一下更改,然后你们就,这里我们传进来的分区,我们看一下是几分区。

这里是四四的话,应该是往这里剪了之后呢,就是3106+3,这里看起来的话是没有错的啊,我们再次进行一下测试,那么从我们选择的结果来看的话,应当是我们所处的这个位置应当是取错了。

那么我们在选择一分区的时候,看会不会输错,但是这个之间的距离呢我们计算错了,那么一分区的时候呢,它是没有出错的,那么我们再来看一下它的距离呃,那么这个位置到这个位置之间的距离呢,我们要把它计算出来。

我们再来看一下现在这个位置的一个这个顶点的啊,这里的一个y坐标大概是100左右,在这里的话是396啊,刚才我们是用396除以的10,这样得得出来的39,但是我们忘记了,还要减掉前面的这个100。

那么实际上他这个位置应当等于29左右吧,我们再把它进行一下修改,这里应该是29啊,而不是三九,做一下测试,那么这个时候移动的位置的话应当是正确的正确的,那么下一步呢我们就要点击这个游戏开始。

那么开始这个位置的话,我们来看一下在什么地方,在这个注册账号,这个地方大概是六六啊,48,那么我们一起在选择这个分区里面完成66428,我们把它记录一下,这里是二九,然后游戏开始的位置。

66428这个位置,那么66428的话,我们也需要再次改变我们x坐标和y坐标,那么这个时候x坐标等于我们的嗯r一点left,加上我们的六六这个偏移y坐标呢我们要重新复制啊。

因为之前呢我们做了一些修改为r leder top,加上我们的48这个位置,然后我们再移动我们的鼠标,这个时候是移动到游戏开始的位置,然后呢我们再次模拟一次鼠标的单机。

啊当然这个测试呢我们可以这个延迟呢我们可以去掉了,刚才测试已经成功了,好那么我们再次编译申请一下,在运行测试,那么这个时候呢我们就能够打开登录器了,但是我们还要注意一点呃,它登录器打开的时候呢。

在这里呢它需要一段反应的时间啊,如果这里的反应时间不够的话,它初始化没有完成,再单击我们的游戏开始的话,可能呢呃这个时候呢打不开我们的游戏客户端,那么实际上我们应当在这个游戏的开始前面呢。

我们还要隔一段时间要让我们的这个游戏开始了,等待游戏开始的这个按钮显示出来,那么这个呢我们可以用sleep来把这个舒适的设置比较大就可以了,那么另外一种比较保险的做法呢。

也就是我们可以另外的写代码来来检测这个按钮是否显示出来,但是现在呢我们直接用实例先写,那么后面呢我们可以通过这个窗口的这个颜色这一类的来做一些判断。

或者是一些找一些呃这个相应的这个人能够判断它的一些机制,来判断它是否我完成了一个相应的初始化,那么完成了之后呢,我们再来打印,打开它的一个这个客户端,好的。

那么下一节课呢我们再来完成这个账号和密码的一个输入啊,所用到的这个api函数的话,就是这个k,啊嗯也就是这个api函数。

它是用来模拟我们键盘输入的。

好的,那么这节课呢我们暂时就讨论到这里。

P139:150-游戏自动登录设计-自动输入账号与密码 - 教到你会 - BV1DS4y1n7qF

大家好,我是郁金香老师,那么这节课呢我们一起来呃进行这个自动登录设计啊,输入账号与密码这一部分,那么自动输入账号和密码呢,一般我们都不是通过扩来实现的,因为如果我们通过q来实现的话,它的这个数据啊。

这些都是加密的啊,这个密码呢是不能够直接找到的,嗯那么所以说如果是早课的话,呃,它通用性不强,另外呢就是说呃它的分析呢比较复杂,那么所以说我们大部分游戏的自动登录的话。

都是通过呃我们键盘的一个模拟来输入我们的账号和密码,那么这节课呢我们主要是来讨论一下,怎么通过这个k b d r u n t r这个函数来模拟一个键盘,输入我们的一个账号和密码。

那么这个函数的话我们可以在百度上可以查一下呃。

它的一些相关的说明,那么也可以看一下msdn,那么这个呢它主要是用来活成一次啊这个旗舰的这个事件啊。

那那么它的第一个参数呢就是一个虚拟键嘛,啊也就是1~254之间啊,一共有二个这个键值,那么我们所要用到的这个账号和密码的话,一般是由字母语与这个数字啊组成的,那么我们今天的一个模拟呢。

也主要是针对一个呃数字和这个字母的一个组合组合,那么我们举个例子吧,呃我们先定义一个结构啊,这样方便呢存放我们账号密码以及分区的一些信息,还有角色的,那么我们举个例子,如果游戏账号。

是sn啊哈这个y j x p03 ,如果游戏密码是用今天说看,那么我们以这个为例子来说明一下怎么输入我们的账号和密码,好的我们继续打开我们149克的代码。

在159克的代码上呢,我们它的基础上呢,我们进行修改。

那么首先呢我们要设计一个函数用来输入我们的账号和密码,那么我们的账号和密码呢,在这里呢我们都是用一个字符串来表示的啊,都是一个字符串,那么所以说我们在设计函数的时候呢。

实际上也就是要把这个字符串呢呃输入到我们的这个游戏里边啊,进行一个按键的呃,一个操作,一个按键的一个模拟好的,那么在这里呢我们写出一个嗯写一个相应的函数,23322,那么在设计这个函数的时候呢。

肯定这里它传进来的呢,也就是我们要输入的一个字符串啊,那么这个字符串的话,我们最初呢要通过这个函数来模拟,但是我们这个函数的话呃,它一次来只能模拟一个啊某一个键的一个按下和抬起的一个操作。

那么我们需要用到一些案件的信息。

那么首先呢我们第一次按下的时候呢,呃需要传入的一个是他的一个虚拟键码,1~254之间,还有一个呢是我们要指定一个值啊,cup,那么cup呢表示是释放啊,如果没有指定这个值的话,表示是按下啊,看一下。

也就是说第二次的时候呢,我们需要了嗯,需要释放一下啊,它的格式的话,我们可以按照这种格式来写,这种格式,那么这里呢举了一个例子,我们可以参照这个格式来写,比如说按下的a键啊。

当然这个呢它实际上按下的话是一个小写的a键啊,这个时候大写的话,我们需要呢呃把大小写这个开关呢把它打开,这一点我们要区别的对待对待啊,如果是大写的,一个是除了按下我们的大小写键。

另外一个呢我们是配合这个上档键来使用,也就是需要一个组合键啊,这样的来使用。

好的,那么我们来看一下哈。

是不是,在这里呢首先呢我们要进行一个区分,看似数字键呢还是我们的嗯这个字母键做一个区分,那么我们首先来做一个判断啊,首先呢我们是一个小写的字母a到我们的zz。

那么另外一种情况呢是大写的a到我们的大写的z,因为这样的话它的模拟方式呢,呃如果它的范围不一样,我们模拟输入的方式呢也有一点小的一个区别,另外呢还有就是一个09的一个数字,09的一个数字。

那么这里呢我们可以进行一个判断,首先呢我们需要用一个循环来进行一个判断啊,啊,那么这个for循环的话,它的一个大小的话应当是要小于嗯,等于他的一个字符串的一个结束啊。

应该是应该是小于等于n t r n size,然后呢i加加,然后我们依次的在这里边呢来建立整个字符串,把字符串里面的每一个字符呢我们取出来进行判断啊,做一个衣服结构是啥子,这是t r k i。

那么这样就取出它的这个字符数组里面的某一个字符,那么我们对它进行一个判断,当它大于等于a那么并且,这个i呢在小于等于我们的小写的z啊,在这个范围之内大于等于,那么这个时候呢我们用一种输入的方式。

那么这个时候呢我们就需要把我们的大小写这个锁定键的关掉,啊这个时候呢我们需要关闭大小写锁定键,嗯,然后呢在模拟,按下锁定键,那么这个时候按下的话,我们就是这个size,这是tk my这个数字传进来。

那么自然也就是它的一个虚拟码啊,传进来的,那么后面呢我们这里呢这里呢表示的是按下按下,那么按下来之后呢,我们再等待一段时间啊,然后呢我们再释放掉相应的这个键值,然后这里呢它释放的时候呢。

还有一个这个cup释放,松开相应的这个键值,但是要注意一点,如果这个时候它传进来的本身就是一个小写字母,那么这个时候按键的话,它是不会有反应的,那么所以说在这里的话。

我们要把这个小写的还需要把它转换成大写,才是它真正的这个蓄力键嘛,啊需要有一个转换,那么这个我们可以通过大写的字母a减掉我们小写的字母a,它中间呢有一个差值,那么我们加上这个差值之后呢。

它就成了我们大写的这个字母的a啊,也就成了他相应的也就是字母a的一个虚拟键嘛,实际上它输入的大小写取决于我们的大小写,锁定键啊,也就是键盘上有一个,cs lock这个键,那么这个键打开之后呢。

相应的这个copy lock的这个指示灯呢,他会练,指示灯亮的话,我们输的就是大型啊,指示灯灭了,那我们就是输入小写啊,那么我们关于这个大小写锁定键的呃,它的一个这个开关呢,我们啊等一会儿再讨论啊。

那么我们先输入这种嗯小写的情况,那么如果他本来就是输入的字母是大写的话,那么就是另外一种情况在这里,那么如果这个大写它本来就是在a到大写的z之间的话,那么这里呢我们就不需要这个转换了啊。

就直接它的这个x码呢,也就是它的一个虚拟建模,直接这样我们就可以来模拟一次啊,这个键盘的按下和或抬起就完成了某一个键的嗯这个输入,那么当然还有另外的一种情况,也就是是字符啊,字符的这种情况。

那么是这种情况的话,它就是09,09,那么是09的话,我们直接呢就按下相应的这个09的这个数字键就可以了,它本身这个0~9呢就是它的这个虚拟建模啊,直接这样按下就可以了。

当然还有其他的这种情况啊,那么其他的这种情况的话,我们在在申请这个账号的时候呢,我们就呃申请的账号和密码呢就要求呃是这个字母或数字来组成的啊,其他的任务,所以说其他的情况呢我们暂时不考虑好。

那么这样的话我们就能够完成呢,呃到这里的话就是我们的这个for循环结束four,那么理论上的话,这样呢我们就能够完成呢,呃账号或者是密码的一个输入,好的,那么我们在自动登录里边呢。

我们加上我们相应的代码,那么这里呢是选择分区,那么选择分区之后呢,我们等待这个时候我们要等待进入游戏,那么这里呢我们尽量的把时间给它设置长一点,后面我们再来讨论一下怎么准确的判断这个时间。

那么这里呢我们把它设成八秒的这个时间,让他呃进入这个输入的界面,然后呢我们再输入我们的账号,pdt啊,那么这个账号呢我们说了,我们这里呢给他设计了一个结构,那么既然设计了这个结构的话。

我们在这个登录的时候呢,我们就传入这个结构,那么这里面呢就包含了我们的账号密码信息啊,然后我们在这里呢就输入嗯,我们的账号信息显示using name,那么输入完成之后呢,我们再按下tab键。

合法键盘切换到密码,密码可以解,然后呢我们再输入我们的密码,嗯嗯password,好那么tab键呢我们在这里呢我们可以直接用k或者用来实现,这里我们有它的vk嗯。

tab然后呢在这里呢我们后面传入零就可以了,然后呢我们再释放掉我们的tab键,好那么这里完成了之后呢,我们再按一下我们的回车键,那么回车键的话,这里呢我们也有它的这个相应的虚拟键盘的一个定义,这是碳。

啊这是按下我们的回车键,当然这之间呢我们可以用个sleep呢,最好是有一定的这个间隔好,那么我们编译生成一下,那么这个input的尺寸呢,我们把它前置声明一下,这样我们才能够在前面的函数这里的呃。

调用它,那么这里的话我们还需要定义一个结构,那么首先呢我们是游戏的分区,我们选c啊,这里嗯,然后呢是他的账号,然后是他的密码,嗯嗯嗯,还有我们选择的这个角色啊,这里呢我们也有设置。

默认呢我们选第一个角色,然后呢再传相应的数值进去,那么这里边呢我们选择选择分区这一行呢我们也可以进行一些改动,那么这里呢我们都从这个结构参数里边呢把它传送进来啊,这是相应的这个分区好再编译生成一下应。

好,好接下来我们进行测试,那么这个时候呢我们发现了它每一个字符呢都输入了两次啊,而且tab键呢也没有按下,那么我们来看一下是出现了什么样的这个问题。

那么说明我们这个input string这里应当是出了问题,那么这里代码呢我们还应当进行一些修改,那么这里呢我们一般加一个continue啊,让他继续进行下一次循环。

那么另外呢可能是我们这里的这个按键的这个处理啊,他up的时候呢可能呃被认为是再一次的按下了这个键啊,那么我们在这里面修改一下它的这个参数,这个参数好像是第三个这个位置,我们把它的这个位置来放错了,啊。

好的,那么我们再重新编译生成一下,这个呃还有一点tab键,关于table键和回车键,这里呢我们也需要进行一些修改,好再重新申请一下,哈哈,好那么这个时候呢我们看一下。

这个时候呢全部就是由我们的代码来完成的这个自动登录啊,那么下一节课呢我们再来呃实现这个选区啊,也就是进入到这个服务器啊,这里呢我们选区啊啸天或者是这个碧海这一类的选区啊,然后呢这里选线啊。

选择保存一个线,那么选项进去之后呢,我们还要需要来选择我们的角色啊,选择角色一,角色二或者最多呢,它可以有四个角色,那么角色选完了之后呢,这里呢还有个双击这个角色呢,呃进入江湖啊,可以双击这个角色。

或者是点下面的这个进入进入江湖都可以啊,那么还有这些我们需要通过嗯操作我们的鼠标模拟来完成,当然我们说的还有一点呢,我们需要完善的,也就是这个输入输入我们账号和密码的时候呢,我们要需要一个完善的地方。

也就是要关闭一个大小写锁定键,那么下面这里的话我们要输入大写的情况呢,应当是要打开,打开我们的大小写锁文件啊,那么关于这个大小写锁定键的这个控制呢,我们在下一节课呢嗯再来完成。

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

P14:025-完善选怪功能 - 教到你会 - BV1DS4y1n7qF

大家好,我是郁金香老师,q1503367 ,欢迎大家参加郁金香技术编程培训,那么这节课呢我们继续来完善啊,选中怪物,选中npc啊,选中玩家,那么在选中呃另一个对象之前呢,它还有一个动作。

也就是要取消掉啊,之前的一个对象的一个选中,那么也就是我们如果要写这个飞机相应的功能的话,它有几个步骤,网在一起的时候,我们要注意这些,首先呢它要取消之前选中的对线,然后呢这是选中当前对线。

还有两个过程,当然如果我们只是写一个相应的一个i d到我们这个网站对象的偏移,这里的话,那么呢它就只有一个步骤,写到1498这里,那么这个呢我们上一节课已经做过测试了,直接往这个地方写的话。

它也是可以的,但是呢他有一点不完美,也就是那个血条的话,它不会显示出来,还有相应的一个呃就是这种标志吧,啊被选中的这个标志了,他不会被选中出来,那么现在呢我们加上这一步呢,它就实际上是三个步骤。

然后呢我们要往这个地址里面呢,要写入我们的一个对象的一个相当于是一个i d,咳,啊取消之前的一个选中对象,然后是写入这个i d,然后选中我们当前的录像大致是这样一个过程,那么我们再来分析一下啊。

嗯当时我们分析的选中怪物的话,显示这个选中的标志,它就是显示一个血条,它的权益在314这个位置,那么我们今天呢我们来分析玩家啊,看他的314这个位置是不是也有这样一个状态,那么首先呢我们打开c。

附加到游戏里面,那么复起来之后呢,我们看一下嗯,这个时候呢是选中自己的和这两个平台会有一个标志,那么这个时候呢我们可以搜一下啊,数11,但是为了达到一个最好的一个过滤的一个效果呢。

我们先把玩家对象的一个地址先把它拖出来啊,那么玩家对象的一个地址的是从2d b这里开始了啊,现在那么我们就从这个地方来开始收益,就那么搜出来哪一个呢还是比较多啊,那么只有前面那几个呢。

这段来说我们比较近,那么我们再选中另外的怪物对象,那么这个时候呢它这个标志呢无疑问,那么这个时候以2d b开始的话,我们看啊就只有这一个了嘛,就只有这一个了,那么他们之间的一个偏移是多少。

那么我们在这里下一个访问的断点就能够看到我们这一片,它的偏移呢是二点c,那么我们再看一下详细的信息,e a x来恰好就是我们对象玩家的一个对象啊,那么这个二点升的这个偏移就出来了。

那么也就是说我们不同的对象啊,它的这个选中状态,它是不同的,那么如果我们以后啊要写其他的,要选中其他的一个对象,比如说我们是选中其他的玩家对象,p社对象,那么我们要去另外找这个相应的偏移的话。

这样封装起来比较麻烦一点,那么我们看有没有能不能找到一个扣啊,来直接调用某一个空啊,能不能够来选中某一个对象啊。

那么我们可以做一下尝试,打开我们的o d。

好,嗯,帮我打开之后呢,我们附加到五器里面,我们要先需要先把c里面的这个调试器呢要把它呃关掉,那么关掉之后呢,我们开始附加。

好那么附加进去之后,我们把刚才的这个地址来计算一下。

那么也就是这个地址加上我们的2d0 c嗯,就是一些代表着我们来选中啊。

搞什么,那么这里呢我们看一下啊,没有选中自己,那么我们更改数值为一的话,这个时候呢它就会显示选中了自己,那么如果我们用鼠标选中自己的时候呢,它会往这个地址来写出一个呃一的一个标志,往这里写。

那么我们可以下一个内存写入的一个断点,看他会不会断下来,点自己的血条,那么这个时候它就断下来了,在这里呢选中选中吧,在这个地方选中了自己,那么在这个地方选中了自己,那么在他之前或者是之后。

那么应该有一个选中或者是取消在一个破一个选中或者是曲线,那我们看一下in d x一往前面走一下,哦哦那么我们看一下啊,先看一下上层库,那么上层课的这个可能性可能是最大的,那么上乘客的话。

我们执行到返回呢,它将执行到这个地方,那么就先让他跑起来,直接到这,那么他就是在这个扩展里面呢,望他写出了一个一让我们这个对象写出来一个e,那么我们就试着来调用一下这个库,看看是不是选中我们自己。

那么我们再下一个断点,下断点的目的呢,我们是取出这个ei的这个值i好的,我们再点击一下这个血条,点击血条,那么在这里呢它会先断下,把这个断掉了,取消掉,然后呢我们执行到返回返回来会返回到这个位置。

啊因为刚才我们是写英文,这个时候呢它是写入的一个零,这个过嘛,这个库呢它应该是取消,取消选中的事情,刚才我的那么这里显灵了这个地方,我们发现,那么再往后面,那么再按f81 直执行。

因为这个断点我们已经取消掉了,那么过了这个课之后呢,我们发现呢这里唯一了一了,然后跑起来,而且我们发现的话,这两个库这一前一后,这两个货的话参数都都是差不多的,01450,这个是00450啊。

这里都是coe x cos x,那么这种情况的话,这个是零,那么我们就往这相应的这个二点在这里写出来一个零,那么这里是一,它也往这里写出来一个一啊,那么这里就是取消选中。

这里呢就是应该是一个选项选中自己,那么是不是呢,我们可以先来做一个测试啊,那么这一次呢我们看一下这个ecx它的一个来源,14x还来源的话是来源于这个对象列表里。

那么这个对象列表的话,在前面几个的话,我们也有过分析对象列表,这里边也有我们的玩家,有背包对象,还有动作的对象啊,还有人物啊,同一个对象它是一个总的一个列表。

那么我们再从这个地方下段再来一步一步的分析,再选中这个血条,那么在选中选择之后,我们看一下,现在ex了,它等于1249,那么这个1649是什么呢,我们先,好不过了之后呢,e4 x呢它取了一个对象出来。

所以这个对象的话我们看一下三四比八,恰好就是我们自己从这里面取出来,就是这个三四平八,而这个12049呢我们看一下,恰好就是我们这个0c这个位置,你在我们之前呢,我们把它叫做id呃。

实际上呢它是这个对象列表的一个下标下标。

那我应该把它回复一下,嗯,以后我们就知道啊,在对象的家里,现在这个位置实际上是我们这个数组的一个下标,这是一个下标这个编号,那么它取出来这个对象之后呢,这里就是我们的相当于就是把这里面的地址取出来。

就是这个三次,比方,这是1s x分之一,那么取出来之后我们看他怎么走呢,首先它判断取出来的值是不是为零,如果是零的话,就跳到后面这些,那么顾问里面,那么我们呢就一步一步的执行取出来,转到一个库里面去。

那么转到之后呢,我们相应的这个二点售这个选项状态栏就会指明了,然后我们又往后面又执行,执行到这里的时候呢,我们发现这个e i的指令,它也是我们自己,然后我们发现了它叫什么同一个空啊,这里调用了同一个库。

那么然后呢这里就11了,好的我们也按照他这个思路来写一下,首先我们把这个代码复制一下,那么ex呢我们说的它是一个对象的ip,那么我们自己看看id是多少,我们看一下叫你先进的位置,1249,第四次。

那么取出来之后呢,后面呢我们就可以一步一步的把汇编指令复制出来,按下空格键,是看好后面的指令呢,我们都可以,不是你可以自己写啊,然后再是一个0450,然后这是cox,那么这就是取消啊,取消选中。

那么实际上按照他的这个写法的话,他不是要取消自己,他应该是要先取消掉之前选中的这个对象,因为这个ex的话,我们看一下,它恰好是从这个e d i a加上一个一四平八这里取出来的。

那么我们完整的写法应该还要加上一句,加上前面这一句,这样写,那么这个e d i的话啊,我们闭着眼睛猜可能都知道啊,他就是我们的这个玩家对象的封印,这里的14p啊,这个偏移我很熟悉啊,啧好的。

那么我们再把e d i这个值初始化一下,那么就是现在这个样子了,那么这样呢我们就能够取消掉前一个选中的一个对象,无论是前一个选中的对象是谁,都能够这样取消选中。

那我们来试一下,那么这个时候是选中了自己输入到主线里面,取消这个时候取消掉了,如果我们选中的是零,等一下也取消掉吧,取消选中,那么取消选中了之后呢,我们要选中我一个对象应该怎么办。

那么这个参数呢我们按照它的一个写好的话啊,这里呢就值1111的话就是选中,我们再来试一下,那么就是当前的那个i t它已经存在了,我们一起改变,那么选中,首先我们取消,然后我们再选中啊。

那么这个实际上它不是一个真的选中,它只是这个一个标志,一个标识而已啊,标识而已,那么如果我们要真的要选中一个对象的话,我们还要加上这一句,加上这一句,那么这一句的话我们需要通过编程的话片音来完成。

那么完整的步骤呢,我们先写一个逻辑啊,清理一下,那么先取消啊,取消这个是可以的吧,这里选择取消,选中血条,然后通过骗离我们的怪物,或者是其要选中其他的对象呢,骗离了之后呢,我们把它写到。

把他的i d啊,也就是我们这前面这个数组的一个下标写上。

我写到我们的一四比八这个地方,然后呢,我们再选中把这个id的一个血条来给它显示出来,也可以用上这一句,这样写一下就可以了。

那我们来看一下它是怎么写的,你si,他e s i的一个来源的话在前边。

啊可能是传了一个对象进来,但我们这里我们自己要写的话,我们就通过一个片名来完成一个考点,那么这里写入之后呢,我们选中这个对象再改为一啊,这改为机,那么前前面是一个对象的i d。

那么我们也可以来做这个系列啊。

先加上一下142,那么现在我们选中的对象呢是加二比三啊。

这个怪物我看一下,然后第三个是在头顶楼啊,12b3 ,那么我们可以把代码来稍微改一下,幺二比三就是b2 b3 ,那么就选中他,取消之前的mac,选错了,那么我们就可以这样写,复制出来。

你再看一下逻辑有没有错啊,首先呢幺二比三往一边写,六部写入了之后呢,这里呢应该我们先把这个压力平放到e x里,123,那么这里先用e x,那么在这里呢是ex层次,就把它取出来,取出来之后。

这种车只要一句就可以了,那么取出这个对象,然后呢一个显示的一个状态,取出对象,它的函数法,求函数介值,然后显示状态,这里要是没杀掉,这是之前的那一个取消掉,读出来啊,那我应该是这样写的。

那么我们切换到游戏,那我们看一下,我们先选中另外一头牛,然后再注入我们的代码,我们发现了这个牛头呢被取消掉了,而且选中的是汤,而我们这个时候呢他也能够啊去打这个怪啊。

因为这里我们的确啊写入了我们的这个i d的,那么测试成功之后呢,下一节课呢我们对这个代码呢再进行一个相应的封装。

P140:151-游戏自动登录设计-自动输入账号与密码修改完善 - 教到你会 - BV1DS4y1n7qF

大家好。

我是郁金香老师,那么这节课呢我们来完善一下账号密码啊的这个自动输入的,这个函数的一个完善,首先呢我们先打开150克的代码。

那么我们在他的基础上来进行一些修改,嗯嗯,那么在这个地方我们对我们的这个字串来进行判断,如果它是小写的字母的话,那么这个时候呢我们键盘输入的话呃,实际上我们需要做一个判断,就是判断如果我们大写呃。

大小写锁定键嗯的这个灯它是亮着的,那么我们输入的这个时候就是大写啊,就容易出错,就会造成我们输入的账号和密码不对,那么所以说我们在这里呢需要加上一个判断,判断大小写锁定键是否就是这个灯是否亮啊。

那么这个判断呢我们可以调用一个相应的api函数。

来判断一个键的一个状态啊,实际上是一个k d,那么以通过这个键盘传入一个虚拟的键子啊,然后呢他返回的是一个呃shot类型的一个整数,然后我们判断它的低位是否为一啊。

那么如果他的高位为一来表示了这个键来按下,那么其他的情况呢表示这个价呢就是说已经释放掉了,那么它的第一位啊,它的这个低位的这个字节如果为一的话,呃那么呢我们就表示了这个价呢。

他已经就是说这个灯接下来它会开启啊的一个状态啊,表示,那么所以说我们要判断的是这个第一位的这个字节啊,嗯的这个数字是否为一,那么我们可以来先调用一下它,来看一下,那么我们在添加这段代码之前呢。

我们可以先测试一下这个状态,那么我们把这个注释掉,好那么这里呢我们就调用啊,我们刚才的这个函数,那么这里呢传入它的这个虚拟键值,大小写锁定键的,那么传入之后呢,我们再用twice打印出它的一个返回值。

哎,那么现在我键盘上的大小写锁定键呢,它的这个灯的话是灭掉的,那么我们看一下它的这个返回值的是零,然后呢我再把这个大小写锁定键呢,那按一下,那么打开我们的这个大写状态,然后我们再来测试了。

它的返回值呢是一啊,返回值是一,然后我们再关掉之后呢,它的返回值是零,但是我们要取它的返回值的话,实际上是要取它的低位,那么低位的话实际上呢这里呢我们要进行一个呃这个且运算啊。

那么我们在这里呢要把它与我们的这个一呢进行一个这个位运算啊,那么这样取出来的值呢才是正确的啊,理论上当然我们也可以从它的这个返回值来说呢,他本来也是返回的一,但是我们在写表达式的时候呃。

最后呢我们判断这个键盘的灯啊,就是大小写是否点亮的时候呢,我们是应该是用这个值啊,还表示大小写锁定键的状态,那么这是一种方式,好按下啊,这个灯开启的时候呢,这个时候v1 v一啊。

那么正确的表达式的写法的话,应该是这种啊写法,那么我们要取他的低位的一个状态啊,按照这里的一个说法啊,应该是高位啊,就是低位,这样来判断,好的,那么另外一种方法呢,我们除了这种方法之外呢。

我们还有另外一个键,它可以获得整个这个键盘的一个状态,还有一个k board study,那么这个呢是去的整个键盘256个呃,这个虚拟键的一个状态啊,0~255之间的所有这个序列。

那么这里呢它的这个参数的话是一个256啊,大体的一个数组,那么我们也可以用它来啊获得一个渐进的一个状态,那么在这里呢我们需要先定义一个数组by的微信,再把这个数组呢传送进他的地址啊,传进去。

然后它的一个返回值啊,这个时候呢就能够表示一个大小写的一个状态,好然后呢我们再以这个我们的虚拟键值呢为为它的这个下标再来取,再来就取它的这个低位啊,嗯我们再来看一下啊,相应的这个结果。

好那么这个时候呢当大小写锁定键这个键没有按下,也就是说它这个指示灯没有亮的时候呢,它返回的状态呢都是零,当按下之后呢,这两个状态呢都是一都是一,所以说通过这两种方式,实际上呢都能够判断某个键啊。

他是否能他的一个就是这个指示灯的一个状态啊,是否已经被按下了哈,那么具体的说明的话,实际上可以从这一句里面能够能够看出,他说那要比如这个大小写锁定键啊,它的这个开关被按下之后的话。

那么它的这个被关掉的时候呢,它的这个低位栏为零,如果这个键它被按下啊,呃好像它的这个定位呢呃就是一这个就就是一,那么大概是这个意思啊,我的英文也不是挺好,所以说我们在这里呢。

我们再回过头来就可以用这个绿色的这个代码来来判断,当然选用前一种方式呢,这个选择呢比较简单一些,那么我们在前面的定义一个相应的变量,然后在这里呢做一个判断,啊,那么如果这个大小写键它是呃。

就是说它的指示灯量是亮的啊,那么就会执行到这里,嗯,那么如果这个指示灯它的这个状态是开着的啊,这个指示灯,那么这个开关是开着的话,那么我们再次按下这个按键呢,关掉啊,相应的这个指示灯,打。

当然如果是另外的情况,那么我们就不用管它啊,然后再把这一段来复制一下,那么是大写的这个情况呢,我们也需要来做一个判断,但是他的情况呢相反啊,相反,那么如果这个词的没有打开的情况下,这里呢我们的相反。

如果他没有打开这个为零的时候呢,那么我们需要再次按下这个大消息锁定键,那么如果是其他的情况呢,啊我们就不用啊啊打开这个大小写中,这里是当时打开看大型大小写状态,大写状态啊,这里是关闭大写状态,好的。

那么这样的话我们理论上呢我们的这个呃相应的这个就完善了啊,输入密码,那么如果不加上这一句的话,那么可能呢我们输入的大写的话,他可能就是有目的啊,在我们的这个大小写按键呃,这个开关就是说呃他开着的情况下。

那么可能呢就会有布啊,那么现在的话他有了这个判断之后,来否认我们是按照大写还是小写的,他都能够正常的输入好的,那么我们再做一次相应的测试,那么刚才的测试呢,他就是说呃失败了。

因为是我们的这个等待的时间太短了啊,在输入账号之前,那么我们再把这个时间呢给它改长一点,那么最好呢我们在这里呢是另外的写一个函数,来判断它是否就是说正常的进进入这个登录的界面,那么我们很简单的啊。

可以做一些处理,比如说我们可以从窗口的这个登录界面,这个窗口的这个颜色来来进行一个判断,那么那个正常的进入这个窗口之后的话,这上面的这个点的颜色的话,它是不一样的,那么比如说我们取这这个点的这个颜色啊。

呃来进行一个判断就可以,那,么我们可以取一下它相应的这个坐标,或者我们可以抓一下这个窗口的图片,然后保存一下,看一下,看一下它相应的这个点的这个颜色。

那么比如说我们在289150这个地方的这个颜色啊,我们把它记录一下,当然这里呢它取不到他的颜色,我们可以把那个这个坐标呢嗯坐标点可以去下呃,取一下288152,那么这里的颜色的话。

它可能呢应该是这个黄色的啊,我们从这里能够看出来,288150啊,那么我们把这个坐标记一下,那么我们可以先取一下这个地方的颜色,取出来,那么下次我们就是说循环判断,那么等待这个颜色的数字。

啊等于我们保存的这个数字,那么呢我们才开始输入我们的电,那么这样来做的话,理论上来就不会出错了啊,这样就不会出错了,那么关于这段内容呢,我们就在下一节课呢我们继续来呃交流讨论一下。

那么这节课呢我们暂时呢呃就交流到这里。

嗯,那么一种方法的话,实际上就是让他等待足够长的这个时间,那么另外一种方法呢,也就是呃来判断它的这个游戏的窗口,这个界面的这个颜色它显示出来了,或者是判断一些机制也是可以的,但是判断颜色来说的话。

这个是最简单的,那么这一段呢也可以单独的测试一下,它是一个开启我们大小写这个锁定键的,我们可以在这里再添加一个按钮来测试一下,啊这是tab键盘嗯,当我们这里是,大小写锁定键能可以做一个判断。

那么我们现在呢这个灯它是灭着的啊,如果我们这个呢按下了这个大小写锁定键之后呢,我们再来开的时候呢,它的状态呢是唯一,同时呢这个键盘上的指示灯呢它会亮啊,再次按下它的时候呢,它为零。

同时呢这个键盘上的大小写此事件呢这个指示灯呢它会略掉了,好的,那么我们这节课就到这里。

P141:152-游戏自动登录设计-等待登录窗口显示代码 - 教到你会 - BV1DS4y1n7qF

大家好,我是郁金香老师,那么这节课呢我们主要探讨一下呃,就是等待的等待,我们登录界面显示这段时间啊,我们编写一段代码来等待他的这个界面窗口的显示出来,然后呢再去进行这个账号和密码的一个输入。

因为这个时间换的话,在不同的电脑上,它的时间由于我们电脑或系统配置不相同,它的时间呢呃肯定也不一样,那么在这里呢我们编写代码来来等待的话,它就能够呃修复这个问题,好的我们打开152号。

151克的代码,在它的基础上呢我们进行修改,那么我们找到输入密码的前篇,这里有一个选择我们的分区,然后呢是等待进入游戏,那么这个等待时间呢我们用一个代码啊来检测它,检测我们的这个是否正常的登录到了游戏。

是否可以输入了密码,那么这就是我们这一节课的内容,那么上一节课呢我们取了一个坐标啊,288150这个地方,那么我们先把它这个点的颜色呢呃取下来,那么另外呢我们添加一个测试按钮。

这里呢我们选这个颜色的这个数字,那么要取这个颜色的话,我们需要先取得这个窗口的设备啊,绘图的设备,那么首先呢我们需要取得他的那窗口句柄,你当成正常的,那么首先呢我们先取得一下它的这个窗口标题。

打开我们的工具派。

加强,把窗口的标题哈复制下来,二,那么找到啊,如果没有找到窗口的话,那么我们这里给出一段调试信息啊,就是说这个窗口呢呃客户端会打开,然后从这里呢我们返回就可以了,那么如果我们的客户端正常的打开了啊。

然后呢我们取得他的这个设备啊,绘图的这个设备,那么注意这里我们是它的这个绿的里边它有它的一个成员函数,我们要加一个作用呃,前面要加一个啊作用域的啊,限定,然后取得了这个设备之后呢,我们用这个标题啊。

嗯这个p i x e l的话,这个函数,那么用它呢第一个参数是传入我们的这个窗口的设备啊,然后呢我们就是这里取得的两个坐标x轴y啊,ktpx,2881把它的这个颜色值呢呃取出来,好我们先编译生成一下。

知道,然后我们把这个点的颜色呢打印出来,当然也可以显示在我们的呃这个窗口上边,那么我们测试看一下,这个时候他报的是客户端为正常的进入,啊我们这里能当当它等于空的时候呢,我们才报这个信息。

这个时候的窗口呢不能够被遮挡,被遮挡的话,它就不能够啊出现正确的数字,这个时候是它的这个颜色的数值,那么我们把这个颜色点到这个数字呢,那可以取出来,然后呢我们就可以它作为一个判断。

当然我们还可以加上一些窗口前置的一些呃代码,或者是我们就是说呃后台选颜色的一些代码配合使用好,那么这个颜色取出来了之后,我们接下来呢就可以完善啊,之前的这个代码。

那么这里的等待呢我们就可以设置为一个for循环,然后这个循环呢我们这边呢也用一个sleep啊,但是呢这里呢我们呃每次呢只是等待50ms的时间,然后呢我们就做这个相应的检测。

就检测这个坐标点它的颜色呢是否等于这个颜色,那么如果等于这个颜色的话,我们呢就表示了正常的进入了这个客户端,我们再把下边的这一段代码复制一下,这个sleep sleep了,可以放在后边啊。

然后这里呢我们,对这个颜色来做一个判断,那么如果这个颜色取出来的数值啊,等于这个数值,那么说明呢已经进到了客户端,我们这里呢就blg退出我们的这个循环,然后呢就进行了我们键盘的一个输入就可以了。

那么这里这个return应该要去掉啊,因为我们需要等待一段时间呢,它的这个窗口了才会显示出来,如果直接从这里返回的话,后面的所有代码呢呃就不能够被执行,这里呢写成continue啊,继续啊。

我们的下一次循环,好那么我们再次测试一下,嗯那么下面呢会不断地显示啊这个它的这个颜色的数值,那么一直呢等到这个颜色的数值呢,等于我们所取得的这个数字呢,它才输入账号,那么之前的这个颜色的话。

他都不会啊去输入我们的账号,那么关于这几个呃,这个我们颜色的获取方取点取色的这个相关的教程的话,可以回顾一下这个c加加的这个教程里面啊,相关的章节嗯好的,那么这节课呢我们就到这里啊。

呃下一节课呢我们再继续,当然其他的我们比如说我们之前的一个初始化。

嗯,在我们这个分区选择之后,这里它会显示一个开始的按钮,那么这里的话它也可以用这种颜色来来判断进行一个等待啊,当然这个例子呢我就不一一写了,大家下去之后呢,可以帮他呃进行逐步的完成嗯。

那么下一节课呢我们再进行后面的这个选项啊,以及我们的人物角色的这个选择啊,的相关代码的这个设计好的。

P142:153-游戏自动登录设计-选线选人物角色 - 教到你会 - BV1DS4y1n7qF

大家好,我是郁金香老师,那么这节课呢我们继续设计我们自动登录的相关代码嗯,这节课的目标呢一个是选择服务器的,一个是选项,还有呃还有一个选区啊,服务器选项,选区选项呃,服务器的一个选择。

另外一个是人物角色的一个选择啊,以及我们的介入游游戏哈,那么首先呢我们是通过鼠标来模拟完成的,那么所以说在这里的话,我们需要来先获取它相关的这个数据。

那么这里呢抓了几幅图啊,首先呢它服务器的这个选区的话是在这个位置啊,我们可以在这里的话,在这个下面这个位置来看到它的一个大致的一个坐标啊,那么这里下下来之后呢,我们他一共呢最多的这个服务器的话,嗯。

它的一个选区的话最多也可以有十个,但是下边这里是空白的,那么这里我们看到它的y坐标是305,到这里的话,它是515左右哈,516,那么大概有,幺六到我们这前面的3。5,大概是210左右哈,除以10的话。

一共还有十个选区,那么这里的高度呢也就是21,那么这里呢它的y坐标呢可以是相同的,只是我们的x坐标不一样,那么最终取出来的结果的话,那么大概的话因为这个前面的这个坐标的话。

实际上它是可以在这个二幺这个范围变动的啊,这里呢它可以在这个范围内变动,那么最终取出来了,大致上就是啊前面这个坐标啊,283316啊,后面的这个y坐标的话,他从呃为每一个分区之前呢,相隔的距离是21啊。

就是我们的i乘以21啊,好的这个数值来为0~9,那么为九的话肯定就是选的这个分区啊,在这个范围内它的坐标来我们看它是变动的啊,我是取得大概是在这个位置的坐标啊,只要是在这个范围内的坐标呢都是可以的。

好那么这里是一个单机的动作,那么另外一个这里是498316过去的啊,大概是在这个位置,大概是在这个位置鼠标指向的,那么这个位置下来的话,它的每一格呢也是加上21,这个到到这个地方的距离的是21。

这里到这里的地方呢是21,所以说它也有一个公式啊,那么这是选择我们的服务器限相关的数据,那么服务器线啊选择好了之后呢,然后呢就是我们的人物角色在选择的时候呢需要一些数据。

那么这里的坐标呢大概是呃我取得是取得136啊,168这个数据大家开始在这个位置,啊136168,而他从这个位置是149150的样子,到这里的话,我们看一下是310的样子。

那么大概就是说这四个呢占了160个距离,那么160的话除以四啊,大概每一格呢是所占的距离呢是40,那么选择角色的话啊,那么现在的话这个角色的话如果有更多的这个角色。

但是但是目前这个游戏呢只支持四个角色啊,所以说这里呢是03,那么如果有更多的角色呢,可以是09这一类的,以此类推就可以了,那么这里选角色的时候呢,我们是单击选择,选了之后进。

入游戏我们可以双击这个人物或者是这个进入江湖这个字,那么这里呢需要双击,这里呢我们只是单机就可以了,那么我选的是这个位置啊,单机进入游戏就是最后的啊,单机进入游戏,那么这就是我们所要准备的这个数据。

那么这些数据准备好了之后呢,我们就可以编写我们的代码,那么打开156克的代码,那么首先呢我们可以来设计一个单击或双击这个的一个函数,那么这个函数的参数呢就是相应的一个坐标。

然后呢我们直接调用这个函数的话,就选择了比较简单一些。

那么我们先移动到登录部分,那么首先在这里我们这个结构的话好像是要添加相应的数据,我们来看一下需不需要再添加,还要需要设计一个服务器区的呃,这样一个数据,那么这里呢我们已经设计了一个游戏的分区啊。

但是呢我们还有一个游戏还要选几线啊,呃服务器线我们需要实际上这个服务器限呢,我们最好是因为它有可能是某一个线,可能会买掉,最好是智能的进行一个选项啊,那么现在呢我们先先给它设置一个这个服务器的线。

然后再是选角色,然后选我们的,选项,五,好那么在相关的这个结构我们定义好之后呢,接下来我们就呃写两个这个游戏啊,单击或双击的这个函数,那么我们就把这个单机的函数呢把它写在这个选区的前面。

那么这个呢是我们的单机啊,然后呢我们传送两个坐标信息,ter x乘y,那么在这里的话,我们首先呢要找找到我们的这个窗口坐标,那么我们看一下里边有类似的代码,我们把它复制一下,你。

那么如果找到了这个窗口呢,然后呢我们取得这个窗口的位置,哈哈,那么取得这个位置之后呢,我们需要来把这个传送进来的这个坐标啊,还需要来加上我们的这个本身窗口的呃,这个x坐标和y坐标啊。

也就是左上角的这个这个坐标,那么这个x它的质量我们还需要对它进行改变,net加上y呢复制为我们的y加上aron。co它的顶点坐标,那么加上了之后呢,我们再模拟鼠标的单机。

那么我们首先呢需要把这个坐标移动到指定的这个位置,然后呢再执行我们的单机的一个操作,那么这里有单机的操作,我们把它复制一下,哈哈哈哈,好我们编译生成一下代码,看有没有错误。

然后把这一段代码呢呃如果是没有错误的话,我们把它复制一下,再写一个双击的代码,双击的话,这里呢就是单击两次,实际上,哈哈,one啊,或者是直接改为一,然后呢这里呢我们再把它复制一下啊。

这后面这一部分代码,那么这是第一次按下释放,按下释放,那么以后呢这里就是两次,好那么这个代码写好了之后呢,我们直接出来就可以,到我们的登录部分和完成我们的代码,那么登录游戏之后呢,我们还需要一段时间哈。

等待,那么我们还需要呢用代码来判断它是否进入了我们的这个服务器,那这个选择的界面啊,这个需要一段时间,那么这里的话我们用实力来看,等待三秒来实现,然后呢我们就可以了,按照我们这里所准备的数据啊。

单击这个位置,那么我们把这个公式啊复制进来,哈哈哈,啊跟啊,我们需要把这个函数呢,这两个函数需要把它前置一下哈,不然的话我们调用不了,然后我们把它的坐标传进去,283316。

然后呢后面这个再加上一个i乘以二一或者是二幺神,以我们的,传进来的这个参数,我们看一下参数的名字,lloy dirt,那么这里是服务器啊啊选区的某一个区,啊然后我们把后面这里呢是双击,我们把它改一下。

然后呢呃也需要等待几秒的时间,比如说,然后呢我们这里呢再次选线,这里是498316,然后呢在后面的这个选项的数据传送进来,然后我们最后呢再次选嗯嗯等待进入这个游戏角色的界面。

那么这里呢我们先等三秒钟或者是五秒钟的时间,然后这里呢也是单机,单机的话,我们把前面的这里是双击,我们改一下函数名字,单击呢我们把前面的这个函数哈复制一下,选角色,这里是136168,四零十一。

然后在这里呢它的参数的话是角色,第几个角色,最后这里是进入游戏,这里呢也需要等待一段时间,但是这里等待的时间可以比较短啊,等于零点啊,等待0。5秒的时间,然后呢再次单击进入游戏,598好。

后面的这里会有相应的参数了啊,然后呢在,等你大一点嗯,这里呢也需要一段时间,当然这个时间的话,具体具体需要多少呢,我们最好是用一个像之前的用一个循环去进行判断,那么我们后边呢再完善哈。

这种等待时间的呃一个完善,那么今天呢我们先做一下我们的测试,看能否正常地进入到游戏里面去。

那么最后的话执行到这里的时候呢,我们也打印一段调试信息。

那么在这个我们发现的话,这个时候呢在我们的这个选区和选线的时候呢,他出了这个问题啊,他不能这个选择,那么说明我们的代码呢有问题,那么我们继续的来查看一下哈,可能是这里的等待的一个时间呢太短了。

那么我们把它设置为六秒钟的时间啊,这个时候,然后呢在后边我们加上我们的单机,之前呢我们加上相应的调试信息。

那么这个时候呢我们发现的话应当是我们的呃,这个选区的信息呢没有传送进去呃。

我们还要对这个结构来进行一个初始化才可以,那么在这里的话,我们还有一些数据呢没有进行初始化,呃因为我们之前指的这个分区的话,它是四分区,是登录的这个分区,那么我们还要进到这个游游戏客户端呢。

有一个这个分区,那么这里呢有一个选项哈,呃我们选择比如说选择三线,那么三线之前呢,我们还应当有一个,这里我们把它改一下,这是游戏客户端的一个显现显示啊,这里是我们登录器的一个选项。

那么我们移到这个结构里面啊,把它进行一下修改,这是选择哈游戏分区登录器,然后呢我们在这里的话,是游戏客户端的一个分区选择,那么我们把它区分开来,哈哈,你,这里是选线啊。

那么另外还有一个游戏客户端的一个选区,我们需要给他打进行一个副词,那么我们选择二啊,这里,那么实际上的话我们呢因为它的下标是从零开始的,我们传进来的时候呢,呃是从一开始的。

这里呢我们还要需要来减掉一个一,这里我们需要减一,那么这样的话最终的结果才是正确的。

好的,那么我们再次开始测试。

那么最后呢还有一个地方呢他选角色的时候呢,我们的坐标呢也需要减一啊,在这里,因为他也是从零开始的,这里呢也需要减一,那么最后呢传进来的数字才是正确的,再保存一下,那么最终呢这个时候呢就能够完成呃。

大致能够完成我们的正常登录了,那么还有一点的话,我们可以根据这个血量来判断它是否能正常的进入到了游戏啊,等待进入游戏这里呢,我们可以从从人物的基础或者是人物的血量啊数据来判断。

那么如果是进入到了游戏里边,那么人物的这个机制它肯定是有,相应的数值的,那么通过一般编程的话,我们知道它需要对这个指针来进行一个初始化,那么初始化的时候呢,这个人物的机子呢一般呢都是初始化为空。

那么也就是为零,那么只有在正常登录游戏之后啊,那一段时间呢他才会给这个人物指针机制来进行一个赋值,那么这个时候产生的数值呢才是一个非零的一个数值。

那么所以说我们比如说在这里要等待游戏正常正正常进入之后再开启,我们开启我们的这个脚本去挂机打怪的话,那么这里的话我们可以通过这个人物机制这一,类呢来进行判断。

那么相关的代码呢我们在下一节课我们再来完善啊,那么这一节课的话我们就到这个嗯,就到这里了,好的,那么我们下一节课再见,那么下一节课我们可以把这些呃等待的啊,比如说等待的比较长的这些地方呢。

服务器还选择界面,这里的话啊,我们都可以来把它写成通过颜色来判断,或者是通过这个游戏的机制来判断啊。

这一类的进行完善好。

P143:154-游戏自动登录设计-等待与出错处理 - 教到你会 - BV1DS4y1n7qF

大家好,我是郁金香老师傅,那么这节课呢我们继续呃进行自动登录的设计。

那么主要我们是这节课的目标呢,是等待与出错的这方面的一些处理和完善,那么首先我们打开153课的代码,那么我们移动到登录函数这里,那么首先呢我们在这里呢给他来一个返回值,那么如果是执行完的话。

在这里来返回一个增值,那么容易出错的就是在分区之后,我们输入的这个账号,这里呢可能这个密码呢可能会出错,那么我们看一下,那么在这里呢我们是输入密码前,我们在判断,那么这个密码是否可以输入。

那么如果我们输入的这个密码正确的话,那么288150这个点的这个颜色的话应该会变化,因为它画面切换了,那么所以说呢呃会变化,那么在这里的话,我们啊输入了账号与我们的这个密码之后呢。

在这个等待这个位置的话,呃我们可以加一个判断,那么我们再把在前面的这段代码复制下来啊,就可以,那么这段代码呢也可以再进行一下修改,那么如果我们就是说呃这个窗口它会一直寻找这个窗口。

那么如果这个窗口一直没有打开,那么并且呢这个循环的次数也快达到啊,1000次之后,这里的话呃我们可以呢就判定这个客户端呢没有打开,那么就可以直接返回,不用进行后面的操作。

那么这里呢我们还可以加上一个条件,那么这个条件呢就是这个i的值当它大于等于999之后啊,那么我们给它一个条件,那么这个循环呢我们还可以稍微设置设置大一点,就可不是设置为2000。

那么在这里的话大于等于1000,那么我们就跟他呃做一个结论哈,下一个结论就是说我们客户端打开失败,那么在这里呢直接return,当然这个因为是我们自动登录失败了啊,这个时候呢我们返回一个价值。

那么这是我们撼动我们的分区之后,游戏开始是否正确正常的呃登录了我们的这个游戏客户端,那么这个1000呢就相当于呃是因为下面这里有个实力谱五零,那么就相当于的话在这里等待了50秒的时间啊。

50秒的一个超时啊检测,那么如果是超过了50秒都还没有检测到我们的这个客户端存在的话,那么在这里呢就直接判断我们打开了啊这个登录器啊,客户端啊失败啊,还有这个客户端就判断我们的自动登录失败啊。

那么这段代码的话,我们可以把它复制一下,还可以用在后边就是输入账号完成之后,那么在这里呢检测我们的这个密码是否了输入正确,那么在这里的话,我们就因为前面都都已经执行了。

那么说明的话这个窗口肯定是已经找到的,那么这一段呢我们可以把它省略掉,那么在前面的这一段呢,我们可以直接的把这个定义成一个全局的一个变量,把它定义到我们的头部,啊这里已经有一个全局的这个句柄可以使用。

那么另外呢还有我们的一个这个htc,那么在这里呢我们也把它移到头部这个客户端的htc,好那么我们再来看一下,那么后面这一类的变量呢,我们就可以呃就可以直接的使用啊。

因为前面我们已经打开了这个相应的呃设备,那么在这里呢我们可以直接的呃获取它猛一点的这个颜色,当然在这里的一个判断的话,因为是引擎,我们密码引擎进行输入了,那么输入如果是正常的情况下的话。

这个画面肯定它是电的啊,应该是零点几秒的时间呢,呃它这个画面呢就会发生这个改变,那么所以说在这里的话,我们呢嗯或者是这个sleep呢,我们都可以把它去掉,也可以啊,或者把它设设置小一点,应该也是可以的。

那么在这里的话,我们就要检测它的这个画面,如果这个画面呢一直等于我们的,还是等于我们这个颜色点的话,那么说明的话我们的密码的话应该是输入错了,那么一种呢反正是没有正常登录的情况下,可能是重复登录了。

或者是账号密码不对,或者是相应的这个账号呢没有激活造成了啊,登陆失败啊,那么这里的话我们就直接return啊,就是bk了,直接return fans,那么这里的话甚至都不需要这个循环来进行一个检测。

那么如果是加了这个循环的话,我们也可以给它加上一个延迟,再多加一个条件的一个判断呃,多加一个这个变量i的一个判断,它的次数大于等于10,那么大概的话或者大于等于20,的一个延迟的一个判断。

那么如果是另外一种情况,另外一种情况的话,也就是说它的这个颜色不相等,那么在颜色不相等的时候呢,我们再break,退出这个循环,那么如果是相等的情况下呢,那么我们在这里呢,嗯sleep。

那么这里的话50x20,大概也是一秒冲到4000啊,不断的检测,那么实际上之前的这个判断呢,都是可以的,那么在这里为了有的电脑反应慢的话,我们可以来把这个数值来设置大一点,这里呢我们应该是检测。

检测我们的账号密码是否输入正确,那么如果这里的颜色啊,它产生了这个变化,那么你就判断嗯账号对面正确,继续下一步操作,好那么这是我们的账号和密码的一个输入,那么还有我们后边哈。

这里呢上一节课我们呃忘了加上这个括号啊,这里呢我们给它加上,这是在后面的时候我发现了,所以说当时没有跟成这个错误啊,这里如果是不加括号的话,它相当于是简单一减的是一啊,那么如果我们是要减的是啊。

在这里的话应该是要减掉21个啊,这个像素的这个距离才是正确的,所以说我们在后面的这个选项的话,应当要用括号把它括起来啊,同样的这里也需要用括号括起来,那么呃游戏呃我们点了之后,人物角色也选了之后呢。

那么在这个位置的话,我们需要了嗯进行一个判断,判断我们这个游戏啊正常登录之后呢,我们才可以啊,比如说游戏正常进入啊,比如说我们可以开始挂机啊,比如说挂机打怪啊这一类的。

可以启用其他的这个动作或者是脚本这一类的,那么所以说这里呢我们也需要一个检测,那么这里的这个检测的话,我用的是这个人物机制来完成的,啊用了这段代码,那么这里呢已经完成了之后的话。

我们可以来啊关掉相应的这个距离,那么之前的这段代码我们来看一下它的一个逻辑,那么这一段呢我们都是用来等待我们的这个人物角色正常的进入了,当然这段呢我们在之前他已经有找这个窗口句柄,这段我们可以取消掉啊。

那么我们在这里呢直接获取它的一个进程句柄,那么我们在这里呢是通过人物角色的一个机制来进行一个判断的,因为经过测试的话,我们发现啊这个人物角色的这个机制呃,那么如果在未进入我们的游戏画面之前呢。

它是为它是一个空子层啊,是一个空值值里面的数据来为零,那么如果正常的进入游戏之后呢,它就是我们角色的对象,地址,那么这个对象地址加八呢,这里就是我们人物角色的名字。

那么所以说我们可以先打开这个进程的句柄啊,具有一个读写权限的,那么执行到这里之后呢,我们也可以把它的标题了,就设置我为我们人物角色的名字,那么或者是呃如果是要设置为人物角色的名字呢。

我们需要在这后边来添加完成,那么在这里呢我们是把它设置为我们的登录账号的这个名字,然后我们在这里呢也是用一个循环来判断啊,每个60ms的时间让我们去读一次呢这个人物角色的这个机制。

当然这里呢我们需要先更新一下机制,那么更新之后呢,我们最好是把我们的这个嗯相应的这个单元哈。

那么我们就只需要一个头文件,把这里生成的这个bs根啊。

这个bg,它就能够认识啊这个相应的机制,那么这呃这个时候呢我们就读出这个机子里面的数据,然后呢保存在这个人物角色的相关信息里面,那么如果我们读取出来的这个数字呢一直为零啊。

那么并且这个i的数值这个是用来计算超时的,那么如果大于等于1000的时候呢,这个是呃随意我们后面的这个岩石延迟哈,那么也就是60秒的时间,一分钟的时间,如果都还没有进入游戏的话。

那么我们就结束了呃这个客户端的这个进程,然后呢就退出啊,也就打印一段调试信息,说这个登录失败,那么如果是另外的一种情况啊,如果他读出来的这个信息大于零,说明我们的这个人物角色的这个指针它读取成功了啊。

那么这里我们可以输出一段调试信息,正确读取屏幕信息,那么这里我们就说明了我们的游戏引擎正常的进入,那么后边的话我们就可以来进行其他的一些操作,比如说在这后边我们嗯开启,外挂啊,挂机打怪。

或者是执行我们的挂机任务啊,这类的就可以做一些其他的一个动作啊,大致就是这样一个流程,好的,我们先生成一下,看代码有没有错误,然后我们先测试一下,看能不能够正常的登录。

那么这个时候我们看一下它的标题名呢已经设置好了啊,但是我们这里我们看一下它的一个输出的一个调试信息,来看一下,那么呢我们大概是执行在这个位置,说明还没有真正的登录,那么这个时候登录真正的登录之后呢。

他就说啊正确的读取了这个人物的信息啊,牛批已经正常登登录啊,以及呢正常的进入游戏,那么这个时候我们也可以来看一下,这个客户端把我们的这个机子加进来看一下。

那么现在的话它里面肯定是放存放到我们对象角色的这个指针,不是这个指针,他的加幺八,这个位置就是我们的人物角色名,就是我们的人物角色名,那么如果我们重新再进一次看一下,那么这个时候我们附加进我们的客户端。

那么它的这个机子的话是零的,而在这里面的这个数据呢,所有数据我们看它都是不能够正常读出的。

握手变大,输入一下,那么这个时候的话我们看一下呃,到了这个界面的话,实际上它的这个尺子呢呃都是为零,或或者是呢不能够读出啊,那么直到了我们这个画面啊,还没有正常的进入游戏之前呢。

这里的这个数字呢它都是文明。

那么一直到我们的这个游戏了,正常读出来,这个纸质呢才被初始化,那么这里呢我们也是对这个数值来进行初始化的,那么即使他读不出正确的信息呢,它的这个数值呢都是为零的啊,所以说他能够正常的判断。

那么如果这里呢它读取这个信息失败,最终呢他就会呃结束掉这个进程,那么我们再换一下,在这个登录信息里面,那么如果我们账号和密码输入错了的时候呢,我们嗯也结束一下相应的这个进程,我们把这个代码再改一下。

那么把这段代码呢我们再进行一下修改,把这个数据呢也前置一下进程具备的这种,那么这一段呢我们也把它前置,那这个的话我们暂时在在在这个地方定义,就是就考一考,也应该是考虑的,还是把它前置一下,复制。

我们看一下我们输入密码,这里,那么如果这里我们输入的账号或者密码错了的话,那么我们就,3030我们看大概是1。5秒的时间进行了一个判断,那么我们就把这个进程把它结束掉。

那么这一段呢我们可以把它放在这个外边检测账号密码,这,好那么我们再次编译生成一下,然后切换到我们的资源视图,那么我们可以把这个账号或者是密码啊,故意的啊把它输错,那么我们看一下它能否检测到。

那么这个时候我们等待一段时间,看它的检测的这个结果,那么这个时候的话我们发现了他没有呃正常的结束它呃,而是来继续的在执行后面的这个代码,那么说明我们的这个代码的这个检测的话应当是有问题。

啊可能是那这里还有一个这个客户端呢,他应该是找到另外一个客户端那里去了,那么我们把它关掉之后再来进行测试,那么这里的检测啊应当是错的,那么我们再来看一下它的一个输出,账号密码输入正确,继续下一步操作。

幺零比f1 f,那么这个条件呢我们加错了,那么应当是加在这里边才正确,那么应该这样写才可以啊,不然的话当这个i呢它等于30的时候,那么也会转到这里来啊,而且当这个颜色呢它等于这个值的时候。

但是呢i的值然它不符合条件的时候,也会转到这里,所以说我们在这里呢得另外的写一行啊,大于等于30的时候,这样呢进行一个判断,那么这个是账号密码输入了之后呢,他没有按下这个回车键。

那么我们再来检测一下我们的这个代码,那么回车键呢他在我们这下一步哈哈,我们应当把这个嗯回车登录呢放在它的前边啊,这个逻辑上才是正确的,那么这个时候呢他已经退出这个自动登录。

但是呢他没有结束的这个游戏进程,这个地方,那么我们看一下这个游戏进程的这个作品,那么这个要关闭我们的游戏进程的话,它需要这一个权限,我们在这个open,open process里面来看一下。

他需要的是这个权限啊,那是我们的这个所有访问权限的话,那么我们再来进行一下尝试,在这里呢我们在关闭的时候,我们把这个进程的距离打印出来看一下,嗯嗯,那么我们看一下这个函数呢,它是否执行成功了。

好的为了方便测试了,这里我们把它的这个数字呢呃延迟的时间呢改小一点,那么我们可以看到这个时候他应当是这个进程打开失败啊,呃我们再来检测,可能是我们的p i d这个时候还没有出来。

那也就是说我们的这个p i d在之前的话他没有出来,我,那么我们看一下之前有有没有对这个窗口句柄进行一个复制,这个地方我们应该说之前的这一句应当放在前边,那么我们应当把这两句呢都放在前边啊。

进行一个初始化,这里我们把它注释掉,在这个位置,我们再看一下,这里有一个find the window,在前面呢也有对这个finder window h来进行一个赋值,但是这里是登录器的。

那么我们后边呢我们再找一次这个地方,好的,那么再重新生成一下,那么这个时候呢我们看到如果是没有正常登录的话,它就会自动的退出,好的,那么我们再次把密码改成正确啊,再试一次。

那么这个时候呢他也判断了一个账号密码输入的有误,那么应当是我们等待的这个时间太短,那么这里的话至少我们可能要设置为50以上啊,那么50我们加上50的话,大概是2。5秒的时间左右。

那么或者是尽量的把它设置大一点,这个数字,对了这个sleep呢在后边来了啊,呃我们在continue之前呢,应当是把这个实力放在这个地方对啊,不然的话他的这个循环的话很快呢就会执行完。

那么如果是执行过快了的话,他也会啊一瞬间就执行了几十次,那么这个i的值呢变得非常大,它就会判断了输入不正确啊,因为这个颜色没有变化,那么这个时候看起来的话应该会正常的登录账号。

密码输入有优化也被结束掉了,那么这里35的话大概是1。5秒的时间,我们把这个时间扩展到五秒钟的时间,再来做一下测试,那么五秒钟的时间的话,刚才实际上我们看到这个颜色的话是呃,实际上已经有变化了。

应该是执行到这个地方来,退出这个循环才做的,啊这个时候呢我们是注意看了一下呃,因为当时这个画面呢它的这个颜色呢实际上是没有改变的,这个点来说,因为他取得这个点的话。

呃,跟录的这个界面我们再来看一下啊,因为这个这个我们取得大概是这个点的颜色哈,但是他登录之后照这个点,但是这个点的话,它的颜色呢同样没有变化,我们选的点有问题啊,我们到另外选一个点,登录前后的一个区别。

那么实际上我们可以选选这一个点啊,通知这两这个点的颜色,那么这个点的颜色的话,它登录之后的话,它肯定有变化。

好的,那么我们把这个坐标呢啊得把这个坐标来改一下啊,那么在测试这里呢。

我们有取它的这个点的颜色,那么我们看一下刚才这个点的颜色应该是多少,我们必须要找一个有变化的啊,这个颜色,在这个位置的话,大概是呃29296418这个位置。

那么我们这里选296,这里是418。

再看一下,对不对,大概是296418,好的,我们再次启动一下游戏。

那么我们这个时候测试一下,点一下测试,看一下这里的啊canon的颜色,那么实际上我们可以把这个坐标,这两个点的坐标颜色来一起把它打出来啊,296468,这样好,然后把麦克,那么这里呢我们需要选调试。

查看的是调试信息,那么然后我们再输入一下我们的账号密码,那么我们现在再来取一下它的这个颜色,那么这个时候呢我们的颜色呢变成了这个数值啊,这是,账号密码正确,正确的话,这个是选服务器的这个鉴定啊。

这是账号密码界面的颜色,那么我们再取一次,看这个颜色它会不会变化,那么我们取了很多次之后来发现这个颜色的话非常的稳定啊,都是这个颜色,那有了这个颜色的话,我们实际上判断的话就更加的简单了。

这个时候啊我们先退出一下,那么在移到我们前面的这个判断这里,那么之前的这个颜色的话应该还是可以用的,在之前的之前呢,我们可以不改,但是这个地方呢我们必须要改,它的坐标在965,然后呢这里的颜色我们。

要改一下啊,这是之前的这个颜色,那么我们如果等于这个颜色的话,需要的在这里啊进行一下判断,那么如果是另外一种情况的话,我们在这里呢也可以加一个判断啊,控制,那么如果这个颜色它直接就等于这个数值啊。

那么我们直接来就可以停止这个循环,那么这是另外一种情况,当然这个也可以不加在这个20里面,也可以把这个去掉也是可以的,好的,那么我们再次进行调试,那么甚至我们还还有一些值得改进的地方,就是这里了。

等待这个服务器界面啊,这个8000的话我们可以把它注释掉,对我们只需要对这个颜色啊进行判断,那么如果是等于这个颜色的话,才跳到这个地方的话,那么我们在这个等待时间的啊,直接可以去掉啊。

直接可以去掉到这里,这个等待时间呢就不用药了,因为这个时候了,它已经检测这个颜色的话,已经等于我们的这个服务器什么颜色啊,好的,那么我们最后进行一下测试,直接就过去了,因为我们呃判断的话更加的准确一些。

因为这个时候已经停在了我们选择服务器啊,选择这个服务器相应的这个线啊的时候,那这个界面,那么我们在这里等待了。

就可以把它取消掉啊,选区选项啊。

好的,那么我们再次把这个账号和密码把它输出啊,呃再进行一下测试,它实际上还有一种更准确的方法,就是我们判断啊,这个时候呢我们的进程已经成功地结束了啊,从这里看到,从画面上也能够看到。

那么实际上还有另外的一种判断的一种方法。

因为如果我们输错了这个账号密码的话,这个位置呢它会出现一个通知,那么这里的颜色它是变化的啊,那么我们只需要判断这个点的颜色,就能够判断它是否密码是否输错了,因为密码输错和这个账号不对。

它弹空的位置都是一样的啊,这种方法你会了之后呢,你,可以自己去完善你自己的代码,好的,那么这节课呢我们就交流到这里。

P144:155-游戏自动登录设计-界面设计 - 教到你会 - BV1DS4y1n7qF

大家好,我是郁金香老师,那么这节课呢我们继续设计我们的游戏的自动登录啊。

那么主要这节课呢我们主要是设计一个嗯窗口的一个界面,那么我们打开154克的代码。

在他的基础上我们进行一些修改,咳咳咳咳,啊,那么打开之后呢,我们调整一下窗口的大小嗯,把这几个测试的按钮呢放到左边嗯,然后我们第一个来添加一个list country,找一下,那么这个历史题刚出来。

我们主要是一个表格用来保存呢,呃自动登录的一个账号,我们密码相关的一些信息,那么下面呢我们再添加两个文本框,用来就是输入我们的账号和密码的信息,然后呢调整一下啊,让他顶端对齐。

那么接下来呢我们在添加四个啊,combbox用来第一个我们是用来选择游戏的一个大区啊,也就是我们在登录的时候的这个游戏的网通一区二区,还有电信一区到六区,那么第二个呢就是选择某一个区的服务器。

那么服务器后边呢我们在需要选择的是它的一个线路啊,线路后边呢我们是选择的这个游戏的角色,大致是这样几个部分,选择顶端对齐,然后呢我们做上一些标记,在这里呢我们把上边的这个静态文本的方法再复制一下。

按住ctrl键拖动鼠标,那么第一个呢我们写,游戏大区选择,然后呢我们再次嗯游戏辅助器选择,然后再是服务器的线路选机,最后呢再是我们的人物角色选择,那么大概是这几个,然后呢我们让它顶端对齐,嗯。

那么调整之后呢,然后我们再进行一些初始化数据选择,那么首先呢我们属性里面呢,我们把这个自动排序啊,给它关掉啊,防止它自动进行排序,然后呢我们把我们相关的一些信息呢把它放进去啊。

初始化的这里游戏大区呢就是往东一区到市区,电信一区到六区,那么我们在他的d a t选项里面啊,给它进行一个初始化,然后把他的id改一下就更好,你第一个炮塔游戏大区的一个选择,然后再是一个服务器的选择。

啧啧这里的id改一下u p的一个线路选择,最后呢我们是游戏的一个人物角色的一个选择,嗯,然后这里呢我们是密码,那么这里呢是我们的一个账户,嗯然后我们再需要一个,这个button按钮。

那么这里呢是添加我们的信息呢,添加到我们上边的这个框里面去,嗯,表格里边去,我们把这个表格再往后移,那么这里顶端我们再给它对齐一下,然后呢自动登录,我们移到这个位置了,那么自动登录的话。

实际上最后呢我们可能会以这个复选框的呃这个形式呃来该出,那么我们暂时呢我们就这样设计了这个测试呢,我们把它调小一点,好的,我们先保存一下,然后呢我们要对嗯对它进行了一些初始化啊。

然后呢这个服务器的一个初始化的话,它是根据它所选的这个分区,比如说我们网通一区呢有这几个服务器,那么我们在选择网通一区的时候呢,这个combbox这个列表里边的话,我们就需要添加这几个服务器的信息。

那么如果我们选择是网通二区的时候呢,那么这里呢我们添加啊这里的一些信息,那么这里的编号的话,我们就是来从零最后来到九啊,那么我们双击这里啊,双击这个空间,那么当这个控件它的选择改变的时候。

那么我们在这里呢添加我们的这个相关分支的代码switch,当然呢我们首先呢需要取得这个控件的这个指针啊,那么我们在这里呢可以了,直接复制它的这个代码。

那么我们再来看一下这个代码是怎么写的。

那么首先呢我们取得啊这个相应的控件的一个指针,先取得这个comb列表框的这个游戏的大区啊,及big part,那么这个指针取下来之后啊,我们呢先取得他所选择的服呃这个序号啊,如果是零。

那么我们就是网通的一区,那么我们就给他添加这几个数字,那么在这一行呢我们就清空列表对对,那么这个列表的话,我们是指的这个服务器啊,选择了这个列表,那么先取得这个控件的这个指针。

然后呢我们对这个第二个啊控件呢就添加我们相应的服务器啊,添加我们相应的服务器,好的,我们先运行一下,看一下它的一个效果。

那么这个时候呢这里我们如果选择网通一区的时候呢,那么这里面呢它会出来相应的一些信息,当然这个列表呢呃我们还需要调整它的大小,不然的话看不到啊,这里面的这些信息。

那么我们先把它调整一下,点一下这个三角形,然后我们把这个往下拉,然后点一下这个服务器的啊,这个三角形往下拉一下,呃服务器线路的啊,往下拉一下,等一下这个空间的也忘了,下边来拉一下。

好那么这个时候呢我们相应的电信六区啊,最后这个区呢呃没有输入完整,那么我们选网通二区的时候呢,就是8年或雄霸这两个服务器,只有选网通一区的时候呢,它有四个服务器,那么选电信六的时候呢,它只有三个服务器。

那么选网通四的时候呢有两个啊啊有的有两个,有的也有一个的,这里也是两个,那么服务器线路的话,那么一般情况下啊,嗯它都是啊六个都是零到啊,一到十啊,一共都是十条线路啊,只有特殊的情况呢。

它的线路呢可能只有五条或者是六条啊,那么所以说在这里的话,我们呢就不用再通过这个服务器去去关联啊,直接呢我们就给它默认的呃,把它设置为十条线路啊,好那么最后这个是人物角色的这个信息哈。

那么角色的话我们就用角色1234这样来代替,好复制一下,那么一般情况呢是四个角色啊,那么在这里呢我们就添加四个啊相关的信息,那么最后的话实际上我们保存的话,保存的时候呢,我们都按照序号来保存就可以了。

给它添加相应的这个信息就可以了,那么这是一个界面的一个设计啊,那么我们这这个表格呢,我们这里呢还还需要一些初始化,那么我们首先来设置它的一个这个表格的一个i d啊,重新把它设置一下,那么设置之后呢。

我们找到这个窗口内,然后它的这个初始化函数转进去,在最后哈,这里呢我们添加我们自己的代码,那么这段代码添加进去,说实话这个,账户登录相关第二个,我看那么首先呢我们也是需要先取得啊。

先取得一下这个相应的指针,这一行呢我们得把它注释掉,这一行不需要,然后呢我们取得它的一个样式啊,然后我们把它设置为这个reporting这种这种表格的样式啊。

然后呢在后面呢我们是设置它的一个扩展的一个信息,啊,然后这里设置网格线啊,后边呢我们就呃设置了相应这个列的一些信息,好的我们再次编译生成一下啊。

好那么这里呢我们账号的信息呢最主要添加在在这个表格。

密码,我们添加在这个表格,然后呢是游戏的一个大区啊,它的信息呢我们添加在在这个表格里边啊,然后呢我们这里是服务器啊,它的一个线路信息呢我们添加在这里嗯。

最后呢我们是人物角色的添加在这里大致就是这样一个信息啊,啊,好的嗯,那么我们保存一下,那么这节课呢我们界面的设计呢,我们就到这个位置,那么下一节课呢我们再来设计一个相关的一个代码啊。

比如说我们添加账户的一个信息,这里呢我们应该还有一个呃删除的一些按键啊,这两个的话我们可以来把它隐藏掉啊,或者改一下它的名字了,那么我们还是另外添加两个按钮,那么这里呢我们用来了添加或删除。

把它设置小一点,还可以,八点,那么这个呢我们就是删除,那么这个visible这里呢我们把它设置为不可见哈,好的,那么这就是大致的一个界面的一个自动登录的一个界面的一个设。

设置了,就是这样,那么还有一点呢我们也可以进行一个设置,在它呃初始化的时候,那么我们在这里呢我们选择了默认的给它设置一个选中的行啊。

嗯,那么这里呢默认我们选择这个网通四区的话,也就是三,那么既然是默认的选择了网通四区的话,我们呢在后边呢也要做一些初始化啊,那么我们再退回来啊,这里呢我们要调用这个k3 的相关的一个代码。

还有我们需要对这个组织来进行初始化。

好再次我们生成一下,啊这个时候呢网通是去他默认选择的是这个第一个服务器啊,那么这就是我们的一些初始化,那么线路这里呢我们也可以跟他初始化一下。

还有人物角色,这里你跟他初始化一下,这样来看起来呢它有一个默认的设置啊,不是那么单调啊,嗯那么我们可以来在后边呢再次添加相关的信息,首先我们在这里呢没有关联相应的控件,我们就跟它指定相应的这个指针。

最后一个我们是人物角色的,好的我们再次申请一下,好那么这里呢都有一些呃初始值,那么这里需要一个账号和密码嗯,然后呢我们就其他的这个代码呢,我们在下节课呢再来陆续的完成。

那么这一节课我们界面的一个设计的话啊。

就到这里。

P145:156-游戏自动登录设计-批量账号信息处理 - 教到你会 - BV1DS4y1n7qF

大家好,我是郁金香老师,这一节课呢我们一起来呃,编写批量账号啊,信息处理的相关的代码,那么首先复制一下155克的代码。

打开,那么首先呢我们把账号密码以及我们这些游戏登录的啊,这六个部分的信息呢添加到我们的这张表格里边去啊,在添加登录信息这里,这里呢我们首先改变一下好i d的一些信息,好的。

然后呢我们双击在这里呢添加代码,那么在设计代码之前呢,我们需要定义一些结构啊,那么这个结构的话实际上与之前的嗯这个登录账号时候的这个结构呢,他的信息是一样的啊,只是这个名字呢我们把它修改了一下。

好的我们先复制一下这个结构,那么这个结构呢我们主要是要定义一个vcd的呃,这个动态数组用来存放多个账号的这个信息,这个用来用于存放多个账号信息,那么也就是表格里面显示的这些信息的话,就存在里面,好的。

然后呢我们在这里呢相当于定义了一个全局变量,我们把这个定义的结构呢放在它的头部,然后呢我们需要来这里用到了这个vector,然后我们需要包含相关的头文件,那么接下来呢我们需要用到一些呃相关的控件呢。

因为我们没有关联相关的变量,那么所以说在这里的话,我们就是呃在添加信息的时候呢,我们需要先把这几个控件啊,这个是账号的密码的啊,大分区的,然后这是服务器的,然后这是服务器选项的,这是人物角色的。

那么这些控件呢我们需要呢呃或者它相关的这个指针啊,控件的,然后取出相关的这个信息啊,保存到我们的呃这个结构里边,然后呢添加到这个表里边啊,好的,我们先把这一行代码复制一下,添加登录信息这里。

那么所以这个函数呢我们是把这个表格里边的维克的这个表格里边,动态数组里边的这个数据呢更新到我们这个控件里边去啊,这个函数呢我们等会儿一起来写,那么现在我们还要注意的是一个问题呢。

呃这段代码呢它并没有被执行到,我们看一下,那么可能平时的时候呢,我们如果是改掉了这个id的话,也会出现这样的问题,那么我们看点击这里的时候的话,那么实际上这里呢没有调试信息的输出。

那么实际上这下边的所有代码都没有被执行到,那么这是什么原因呢,啊像这种的话我们也经常出现这种情况,一般来说就是我们修改了这里的i d,但是之前呢它有一个呃有一个这个数值相同的id呢。

关联了另外的一个函数,那么我们一起去看一下,比如说之前的这个啊呃克里克8x4啊,这个呢它实际上我们搜索一下就能够找到啊,他前面的关联了另外的一个函数。

那么我们可以看到这个i d c8 乘四与我们的这个登录信息的,这两个的话,它的职能都是1011啊,相当于是他的i d,那么实际上我们我们就是说单机的时候呢,它转到了这个啊8x4这个函数里面去执行。

后面的呢就被省略掉了,所以说在这个地方呢我们需要把它注释掉啊,或者是删掉这一行信息,那么同样的这样删掉之后呢,后面的函数体呢我们也需要啊给它删掉,当然这个函数体不删掉的话。

实际上这个时候呢它也能够呃执行到我们的这个代码里边来了啊,因为消息的映射的话,它已经映射到我们的函数里面了。

当然我们也可以把这一段代码多余的代码删掉,另外我们转到他的头文件里面啊,也把这个相应的函数定义呢也给它处理掉。

那么这个时候我们添加的登录信息呢,实际上是添加到了我们的这个动态数组,维克的动态数组里面的,但是呢我们还需要来把这个动态数组里边的数据,显示在我们这个表格里边哈,因为这样的设计。

而不是直接把数据添加到这个表格来,是考虑到后边后边我们需要把它呃设置成一个啊配置信息啊,保存到文件里边啊,所以说有这样的一个设计好。

那么我们继续来看一下,那么这里呢我们将写一个函数啊,用来把我们的这个数据呢呃更新到这个list country啊,这个表格里面去啊,那么我们来看一下这个函数我们需要怎么写,咳咳,好了。

那么我们再次回到我们的这个vs 20100,那么首先呢我们这个函数的话,它必须作为一个这个绿的一个成员函数,那么是类的成员函数呢,我们还需要到头文件里边的那进行一下定义。

啊那么这里呢我们没有消息的映射啊,所以说呢我们啊直接这样写,加上一个封号就可以了,但是这个时候编译呢是通不过的啊,因为它里边呢还涉及到呃其他的几个函数。

他应该是这一段代码,那么我们看一下还有哪些地方我们需要进行修改的,那么这里呢有两个啊,我们另外又写了两个函数,那么我们先来熟悉一下它的逻辑,那么在更新这个数据到我们的这个表格的时候呢,实际上我们也是呃。

那么我们再切换到这个资源窗口看一下,那么实际上呢我们在这里呢呃这个表格里边呢有六个单元,那么我们实际上是需要在这六个单元里边呢添加不同的这个数据啊,应该是大区的啊,那么大学的我们在这一个呢。

我们首先呢在这里呢呃这个应该是我们首先是日复明,然后呢再是我们的密码,然后呢再是我们的账号,是这样来的,那么主要是我们的,用户名密码和账号啊,这个应当是我们的大区,选服务器的这个大区。

但这个大区的话它传进来的我们获得的是他的一个嗯,保存的时候呢,我们保存的是它的一个这个下标,那么所以说我们要把它转换成文字啊,那么这里呢我们需要用一个函数来进行转换。

那么我们来看一下这个函数我们是怎么写的啊,啊,那么这个函数呢也很简单,我们根据它传进来的这个序号,然后呢给它返回一个相应的字串啊,比如说是零的时候呢,我们就返回网通一区啊,这个很简单,是九的时候呢。

我们就返回我们电信的六区啊,就是这样一个简单的函数,那么我们把它复制一下啊,那么这是这是一个这个游戏啊,游戏分区的相关信息,那么另外一个呢是这个登录进我们游戏客户端之后啊。

它有一个客户端里面有一个选服务器,那么这个服务器的话要稍微复杂一点,它要根据我们的首先要判断是哪一个大区啊,所以说它需要有两个参数,一个是这个游戏的一个大的一个分区的参数。

那么另外一个呢是他选择了这个服务器的这个编号啊,是第几号,那么我们来看一下这个函数的设计,那这个函数呢我们用两个开始结构啊,那么如果是前面大区,比如说是一,那么我们就在这里面去找。

那么它的这个第二个下标如果是二啊,如果是一,就是这个服务器,如果是零的,就是这个,那么所以说这里呢我们用了两个开始结构,这里用到两个开始结构,外外层的这个case结构呢是一个这个大的一个分区的一个分支。

那么每一个这个大的一个分区里边呢,我们给它另外啊设计了一个小的这个十witch开始的一个结构化,然后来选,比如说我们这里是呃网通一区啊,如果是传入的是零一的话,那么也就是龙争虎斗啊。

这个服务器如果是传入的是一一,那么就是雄霸啊,这个如果是传递的是三和一,那么就是电信四区的呃,这个啸天这个服务器啊,就这样的一个设计好的,我们把这段代码复制一下,我拍的。

好那么我们在编译生成。

这个时候我们再来看一下它的一个效果,咳咳添加登录信息啊,这里是账号的信息密码的啊,然后选的是网通四区啊,服务器是必行线路啊,是一啊,第一个角色,那么这里呢我们就可以选其他的啊,比如说我们选电信六区啊。

那么电信六区呢我们选心酸啊,这个线路呢我们选六角色呢,比如说选三啊,那么这样呢我们都是可以添加的啊,但是还要涉及到一个重复添加的一个这个问题重复添加,那么最好呢我们有这方面的这个项链。

也就是看一下有没有账号啊,相同的啊,这个账号账号它是不能够相同的,这里呢我们可以写一个相关的检测,也可以不写,那么另外一个呢就是这个选中算出这个选中行,比如说某一个信息我们输错了哈。

那么我们要把它删除啊,那么我们看一下这段代码我们应该怎么写呢。

那么这一段呢是我们删除这个相应行的这个相关的代码。

那么首先呢我们是通过呃,首先呢我们获得他的第一个选中的一个位置啊,位置信息,然后通过这个位置呢来获得它这个选中的这个行号啊,也就是我们要删除的某一行啊,然后我们可以把这段信息打印出来。

那么接下来的话如果他选中了这个行号啊,如果是没有选中的话,那么他取得的信息呢可能是-1啊,-1的话就是小于零的,那么我们就不处理,直接返回,那么如果是大于等于零的啊,它的行号因为是从零开始。

那么大于等于零的呢,我们就去删除相应的这个数据数据,那么删除的数据的话,我们用这个啊s啊这个函数函数来删除这个维克特里面的原,那么删除之后的话,我们的这个数据呢它也变动了。

那么我们需要了把这个表格里面的数据需要更新到我们的表格里边啊,等一会我们再来看一下是怎么更新的,然后我们这里呢必须要加一个break退出,那么如果这个它相应的这个微课里面数组的数据它变动了啊,移动了。

那么你再按照这个循环去再按照之前的一个循环去循环的话,那么就有可能出错啊,所以说这里呢一定要加一行不对口啊,那么如果他这个行号我没有找到啊,这里呢我们这个i的指南我们需要加一啊,就是继续搜索这个行号。

因为本身呢我们这个呃微课程设计的时候呢,我们在它的这个元素里面没有设计行号这个,但是呢我们可以呢呃顺序的去骗你的啊,因为它也是一个顺序的一个结构啊,相当于是就是说它是不断的压榨,它也是有一定的顺序的啊。

好的,那么我们再来看一下啊。

它能不能够删除我们的相应的数据,好那么比如说我们专属的第三行,最后一行,第一行,啊那么这里呢它都会显示出这个相应的行号啊,获得的好,那么最后我们再来看一下怎么把数据啊更新到我们的这个表格的。

那么这个表格的话,这里呢很简单,实际上呢就是我们刚才我们也说了一下啊,就是插入这个数据啊,把这个相应的数据来啊插入进去啊,如果它本身是字符串类型的直接差异,那么不是字符串类型的。

我们用这个相应的函数呢把它转换一下啊,那么这里呢我们呃选线路的时候呢,我们再把它格式化一下,那么这个线路呢替换这个百分之s的位置,那么2%d的啊,它替换,那么后面这里呢一定要加一啊。

还有这里的这个角色也要加一,因为呃我们在这个获取的时候呢,它是从零开始的啊。

那么我们只有加一之后呢。

这个呢呃考读性呢会更高一些,那么如果是不加这个一的话,那么这里呢可能就会显示线路零,那我们来这里呢可能就会呃显示这个角色的话,可能就会显示嗯第一个角色啊,因为这里的它的这个缩缩影的话是从01234。

0123这样来排列的啊,好的,那么这节课呢我们就到这里,那么下一节课呢我们这里呢给大家留一个作业啊,就是这个比如说这个账号添加重复的情况下呢,我们给出一个提示啊,就是说这个账号信息呢重复的输入啊。

那么如果我们在这里的时候,他去反复的登录同一个账号的话,这样也会出错啊,那么这个信息呢流成一个作业啊,大家下去完成一下,哈哈,那么重复检测的这个账号信息的话,我们密码这些都可以呃,不检测啊。

需要检测这个账号就行了,账号的名字如果一样,那么我们就不能够听在咨询,如果在那么检测的时候要注意,我们不用去检测这个表格啊,那么我们检测的是这个动态的这个数据,因为我们的数据呢从这里边更新进去的。

那么另外呃我们下一节课所要做的呢,可能就是把我们的这个数据啊,因为我们不可你说我们这个程序啊退出了之后。

那么我们下次嗯再去启动这个软件的时候。

我们又要重复去输入这个账号的信息,这样显得比较麻烦,那么所以说我们在这个程序出的时候,或者是在添加信息的时候呢,我们就把我们的这个账户信息呢保存到文件里面,那么下次我们打开这个呃软件的时候呢。

我们自动的就从文件里面来加入我们相关的数据,到这个我高低给啊。

posted @ 2024-09-30 11:13  绝不原创的飞龙  阅读(0)  评论(0编辑  收藏  举报