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

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

P162:173-纯LUA函数中的参数与返回值与print函数 - 教到你会 - BV1DS4y1n7qF

大家好,我是郁金香老师,那么这节课呢我们来了解一下成都啊函数中的呃参数与返回值啊,那么我们主要还有就是呃成都啊的这个函数的一些呃标准的定义,应该怎么定义,哈哈那么首先呢我们先建一个lua的这个脚本啊。

比如说我们进校一点txt啊,就是这个记事本里面编辑,当然我们也可以用一些专业的工具啊,那么在编辑的时候呢,还有一些提示,那么我们呃在编辑起来呢会更加的方便啊,那么这节课呢我们暂时来先用记事本来编辑它。

那么这个路啊里边的这个函数的话,它呢是以是以我们的这个fine这个关键字来开始,然后呢以n的结束,那么翻开起后边呢跟的是一个反函数名,比如说这里呢我们是my f u n啊,就是我的函数。

那么后边呢是参数列表,那么注意它的这个参数的话,它不像我们这个c加加里边啊,有一个什么int a int b,那么不是这样显示的声明,那么比如说它是它的这个直接定义两个变量a或者是b。

也可以是呃有参数的或者是无参数的,那么比如说我们第一个函数呃,用参数的一个函数来做一个示例好,那么这个它的这个point这个函数来,与我们c语言当中的这个point tf来也也有一些不一样。

那么首先呢它没有一个格式化字串的一个支持,那么直接打印,那么后边呢呃如果要打印某一个变量的值的话,那么呢它可以只直接是a或者是一个常量啊,但是这个a呢必须得先定义一下,比如说跟他分一个初值啊。

那么这样呢就算定义了一个相应的这个变量,那么这个函数他写好了之后呢,他也要有一个执行的一个主体,那么在我们c语言当中呢,比如说就是我们的这个盲函数啊,那么这两个减号来表示了此行是注释。

那么这个min函数呢,它也就是在图立于独立在这个函数体外边的这个代码呢,它都会被执行啊,比如说在这里呢我调用一下看书,好那么这样呢就是一个罗瓦的脚本文件,那么就在这个地方。

那么我们就可以用它的一些控制台来来调用它,当然我们532日的控制台呢也可以调用它。

就是用直接用这个do file加文件名的方式,那么我们也可以用515的这个版本,那么网上流传的资料最广的了,也就是这个5。1的这个版本啊,但是呢这两个版本呢有一些差异啊,等一会儿我们可以看到。

那么这个时候呢它的这个结果呢就会被打印出来,就调用了我们相应的这个函数,那么同样的我们可以来再次编辑成这个相应的代码。

那么我们再编写一个函数,当然我们也可以在这里边呢添加我们的一些代码,它的这个pointer函数来,它会自动换行啊,212112,那么呢他不用这个换行图,这个转移字符换行了也是可以的,但是呢他会换两行。

这个时候那么我们可以仔细看一下,这个时候呢它会多多空一行出来,实际上它自动的就有一个换行的一个功能,自动修理一个换行成功了。

当然这个执行呢啊不同的这个并联行版本呢,它执行呢呃虽然说有些差异,但是大部分它是相同的好。

那么我们再来看一下第二种函数的一种形式啊,那么第二种一种是有参数的,一种就是五参数的,那么比如说那么这里呢我们打印几个参数啊,四个参数,那么这四个参数呢它可能是整形的,也可能是字符串型的啊。

也可能是宝典类型的,也可能是其他啊,任任意类型的啊,都有可能,那么具体呢要看我们传什么数据进去啊,那么在这里的话我们要打印出它的话,我们可以直接好你这个相应的变量进来,嗯,嗯cd看看。

那么关键是看我们在传参数的时候会传一些什么参数进去,好那么我们再保存一下,那么这里呢我们传了四个参数性能,那么这是打印我们的相应的这个数字,那么它的这个point f呢。

它就与我们的这个c语言当中的point f呢不一样,首先呢它不用百分之d啊这一类的格式化,那么一般我们要打印的c语言当中的话,我们需要格式化,再次我们相应的这个变量啊。

这里那么它里边不需要它这个变量呢可以是任何类型的,它不不用显示的声明,那么如果是在我们c语言里边的话,这里呢我们可能就会进行整形,那么后边呢我们可能是会定义为字符串的类型这里的,但是它里面都这么定义啊。

它不是显示的,那么所以说这样呢它灵活性更大一些,但是呢这样的程序呢它缺乏一个健壮性啊,好的,那么我们再来看一下另外的一种函数的调用方式,那么函数呢它肯定是可以有返回值的。

那么在这里呢比如说我们给它返回一个值与特111,那么返回值呢在这里呢返回式也可以是任意的类型,那么可以是指针啊,也可以是我们的布尔类型,那么也可以是我们的字串啊,都是可以的。

那么我们来看一下有返回值的情况,那么我们可以把这几行代码先注释掉,那么注释多行代码的时候呢,我们可以用两个减号啊,两个括号,那么这里呢也用两个括号哈。

两个减号,这样来达到一个柱石的一个物体代码的一个注释,后面就不会被运行,那么这个时候呢我们测试一下,那这个二是个函数,那么我们要打印它的返回值的话,直接问他,那么后面跟这个函数。

那么这样打印出来的话就会是它的一个返回值,然后我们看一下啊,这样我们就能够把它的一个返回值111打印出来,但是呢它也可以是一个尺寸的一个类型,也是可以的,那么这样呢我们打印出的是它的一个返回值啊。

在这里,那么我们可以来加上一个,再保存一下,再测试一下,但是呢我们注意这个时候呢我们前面呢没有传递我们相应的参数进去,那么所以说呢他在这里的时候呃,在打印的时候我们就打印出来的了,是一个空的一个类型。

n i l呢它表示是空啊,就是没有相应的地方呢,它没有这个相应的这个参数,那么在这里的话我们需要相应的参数呢,我们可以的呃,给他传递我们相应的参数进去,比如说这里我们传递a,b,三啊传递这几个参数进去。

再看一下它的一个法分子,看这个可可不可以清屏嗯,好,那么返回值呢它可以是字串,也可以是任何的数字,那么而且它还有一个特点呢,就是返回值呢可以有多个,那么也可以是整数,那么也可以是字串啊这一类的。

再保存一下看一下,那么我们可以看到啊,它既可以是我们的浮点数,那么也可以是整数,也可以是字串,而且返回指南可以有多个啊,那么还有一种形式呢,就是变成的这种形式,那么比如说我们再举一个例子啊。

那么变成呢就是它的个数呢不确定,啊,好,那么变成了它其中的这个参数的个数呢,放在这个a i g n里面,那么我们看一下它参数的个数,那么在这其他的代码呢,我们也把它移到我们的数字行里边。

那么在这个地方呢我们来调用这个拥有变成的这个函数,打,到,那么它的参数的个数的话是可变的,而且也可以是任意的类型,哈哈咳咳,哈哈哈,那么但是呢我们这个时候我们注意他这里的参数的个数呢,它没有打印出来。

实际上呢它是认不到这个变量啊,在我们的nova里边呢。

它叫做表,那么我们倒是用下边这个来执行一下,但是这个时候呢它会显示出它参数的个数,这里是一个啊。

这里是七个参数,123456啊,这里还有一个参数。

它的数量是七,那么这就是我们的这个所用的这个平台,它不一样啊,平台的版本不一样,那么呃我发现的话这个515之后的这个版本呢,他都不能够认识这个相应的这个表a r g。

它实际上相当于我们c语言里面的一个结构,那么它结构里面的这个成员函数n呢,里边呢存放着这个参数的数量,但是这个版本呢呃他不是不认识。

那么所以说我们后面的这个版本的话,我们可能就会以这个路虎妖股的这个版本呢来做相应的这个例子,因为这个呃应当来说的话,这个532的这个版本呢,他也有办法来获取这个变量的这个数。

因为这个532的话它是最新的这个版本,那么网上的话它相应的这些资料呃不是很齐啊,找不到相关的资料,那我不知道他把它保存在某一个地方啊,还没有相应的这个文档做一个参考,好的,那么这一节课的话。

我们就暂时讨论到这里,那么下一节课呢我们在下载515的这个相应的源代码来编译,生成我们的这个静态库啊,那么只有生成了我们的静态库呢,在c语言里面的时候呢,我们这些呃指令呢我们才能够认识。

因为在网上资料最多的也是这个5。7的这个版本的,他的资料呢最多最完善啊,嗯但是这个五三日他可能增加了一些新的功能啊,去掉了一些旧的功能,所以说它的兼容性能向下的一个兼容性能啊,感觉不是很好。

好的,那么这节课呢我们对这个函数的了解呢,呃暂时呢就到这个地方。

P163:174-LUA中的变量 - 教到你会 - BV1DS4y1n7qF

大家好,我是郁金香老师,那么这节课呢我们一起来认识了解一下呃,la当中啊,la脚本里面的这个变量啊,那么努尔的这个脚本的话呃,它也可以来独立的运行,也可以依附于我们的这个c c加加来运行。

那么它里面呢也可以使用变量以及数组啊这一类的,但是它的这个变量的话,它可以不指定他的类型的,那么而我们c加加的话,所有的这个变量的类型的话都需要来显示的啊,声明给它定义。

而这个lua当中呢它的变量的一个类型呢,它取决于它的一个赋值啊,那么比如说我们的,而且它的语法上来与我们c语言呢有一些区别,那么我们还是通过代码的一个测试来来做一下啊,呃区别啊。

那么我们首先呢可以建立一个相应的文本文件,当然它的后缀名呢我们可以是任意的或者是没有后缀名额都可以,那么我们在这里呢它方便编辑把它取名为lue的这个后缀名,那么只要我们这个不是写在函数里面的话。

那么它这个脚本里面的这个代码在do firever都会被运行啊,那么我们首先呢我们来看一下这一段代码,那么这一段代码呢我们加了一个loc的这样一个关键字,表明了它只是一个局部的一个变量。

不是全局的这个应用啊,那么在函数里面的话呃,它就只有了这个函数里面能够使用到另外的这个函数呢,他就不能够使用这两个变量啊,不能够访问它的一个数值,好的,那么我们先保存一下,然后呢我们打开之后啊。

515的这个版本都发一下。

好保存一下,那么我们再次执行一下,后面这个括号好像写错了,do file,然后75,那么第二行的时候,他说那个什么啊,这个时候对的,都坏了,当地好,那么这个时候呢他输出了一个数字啊,551或一啊。

那么实际上呢就是输出的这两个变量的一个数字,那么要注意这里的这个变量呢,如果他在后面的话,它是按照这个顺序来赋值的啊,如果是是与我们的多个变量进行一个赋值的话,它可以来定义,定义之后呢。

可以单独的啊这个进行一个赋值,那么这里如果他不给他付一个初值的话,那么相当于来这个变量就没有定义,实际上因为它的这个变量呢啊默认的话它就会呃为一个啊空子啊,就是有一个数字啊。

n i l l它表示了会复制啊,那么我们再保存一下,看一下他现在的这个情况,那么这个时候呢它就会提示到一个呃这个相应的一个错误啊,就是说这个数值的话它没有赋值的话。

就不能够进行一个相应的一个运算的一个操作,那么如果我们没有进行运算的操作,我们再来看一下它的一个值呢,就是这个n l l l就表示了这个相应的变量,它是未赋值的或者是未定义的啊啊那么如果我们不定义的话。

它也是一样的,直接使用,那么他的情况啊,结果呢都是一样的,那么所以说呢我们一般在定义的时候呢,都会给它赋予一个初值,那么如果我们不加这个loker,直接给它赋值了,它就是一个全局的一个变量啊。

这个时候表示的啊就是一个全局的一个变量,它的作用预览不一样啊,这个时候那么当然当这个局部变量和全局变量的这个概念呢,呃与我们的这个c语言当中呢呃是类似的,那么所有的这个变量呢。

它默认的这个情况下默认都试了,全局变量都是全局的,那么除非除非让我们用这个loco这个关键字啊放在前面,那么这样的定义的变量呢,它才是一个局部的变量,那么另外呢除了这两种啊变量之外呢。

我们还有一种呢变量的关键字呢就是table,那么这个table的话它有一点类似了我们的这个数组啊,等一会儿我们一一的来测试,那么我们先测试一下这一段代码,好那么我们把保把它保存一下哈。

然后呢再来做一下测试,那么这个时候呢我们都会输出它相应的一个数值,再保存一下,那么在后面的这个数值呢,这里面没有输出啊,那么我们把下面这段代码给他改进一下,加一下,加上我们相应的一个输出。

那么这里的数值呢我们也可以改一下,嗯,嗯。

那么这里呢我们就是一输出的这几个point输出的一个数值,那么我们来对比啊看一下,那么首先呢我们是输出了一个df的一个数值,就是一个局部变量的五幺和一个全局变量的一好,那么这个呢它都没有定义它的类型。

因为它的类型呢就根据它的一个赋值的一个情况呢,来决定了我们这个变量的一个类型,那么我们继续往后边看啊,那么这个时候呢我们再一次输出的啊,同样是这个类似的一个语句,pd或f。

那么这个时候呢输出的就是幺幺或二三,因为在这里定义的话,那么前边的这个地啊,这个地呢它本身就是一个局部变量,那么在这里重新定义之后呢,就相当于它的生命周期了,就已经结束了啊,就结束了。

那么这个f呢是一个全局变量,那么按理说的话,这个f呢在这里呢它是有用的,但是呢这里我们输出的为什么是二三呢,因为这里的局部变量哈,它的一个定义呢离我们这个语句呢最近,那么所以说它有一个就近的一个原则。

那么来说一说它最终输出的一个数据的会是23,是这个局部变量f的一个数值,那么后边呢这个df呢又重新的呃进行了一个复制啊,那么重新进行复制之后呢,我们再次输出啊,就是我们的二或三三啊。

那么最后来这里这里呢又占一次的给他复制,那么这个d啊就赋值为1333f呢,因为后边呢没有一个负值的语句啊,那么所以说呢相当于把这个f呢删除掉了啊,所以说这个f呢在这里呢他最后呢是一个n i l l啊。

表示了它没有进行一个复制,或者说这个变量它已经不存在了啊,已经被删掉了,大致是这样的一个意思,好的,那么我们再来看一下他其他的一个类型呃,那么类型的话它除了前面的我们的一个整形的一个数字啊。

那么它还有呢也有一个布尔的一个类型,那么比如说我们这一段啊,那么这里是注释的一个语句哈,他不会参与运行,然后我们把这一段哈保存保存一下,那么同样的前边这一段呢我们也可以拿出死掉,啊把这个整个块注释掉。

那么他最后输出的结果来将是这一段,那么我们再用光标键移动啊,再次do file,那么这里呢他说出现了一个括号的这个问题,在第11行应当是在这个地方,哦这里有一个括号的一个声明。

那么我们把这个删掉再保存一下咳,那么这个时候呢它会输出啊相应的这个数值啊,就是一个增值和一个假值,那么在这里呢我们首先呢呃这个f一它赋值为增值,这里复制为假值啊,然后呢在这里呢我们先输出的是f3 。

但是f3 他后边呢改变了它的类型,改变为整齐了,所以说输出的第一个是一,然后呢我们再把这个f3 呢又复制为f2 ,因为f2 呢它本身的类型呢是布尔值。

那么所以说这里呢就相当于把他的f3 的这个类型的强制转换,然后呢f3 的输出的最终的输出了就是fs啊,那么这里呢f一或f2 啊,这就是最新的一个数字改成一个奖啊,那么这是我们的一个不能类型啊。

当然所有的变量呢它都是不用显示的生命,它的类型,它的类型的话,都要看它最终的由它的这个呃赋值的这个常量,来决定了一个变量的一个呃最终的一个类型。

那么还有一种类型呢,我们就是呃比如我们的这个数字类型,那么数字类型除了整形之未来,还有我们的佛典类型,还有双精度佛点数这一类的,那么我们来测试一下,那么把前面的这一段啊嗯注释掉。

那么我们测试一下数字的这个类型,保存一下。

我没有建议移动啊,那么这个时候呢我们可以看到它输出的一个数值,首先呢这个my where are,这个变量它首先呢是相当于是一个整形的,那么然后呢打印出这个整形的数值,然后这一行呢他复制为可能是保存的。

按照他的这个路网里面的这个数据存储的方式的话,它应该是把它保存为一个双精度的一个类型的double,好那么这里呢它是一个double的类型,然后来打印出来,那么这里呢他也是这样的一个类型啊。

那么所以说这个变量的话,我们也可以这样的理解哈,呃就是说这个定义定义了一个整形的一个变量,存放了111这个数字,然后呢在这里呢他删除了之前的这个变量,然后呢重新又申请了一个同名的变量。

那么也可以说呢就是说同一个变量,它的这个呃它的类型呢可以不断的和自动的转换,这个关关键在于自己的一个理解,那那么这是一种数字的一种类型,那么当然它还有了我们的,也可以是我们的字串的一个类型,那么都可以。

那么一旦呢它这里的话复制为一个字串的话,那么前面的这几个变量的生命周期呢也都相当于啊结束掉了,而且呢这几个变量呢它都没有加我们的这个loco呃,这个关键字表明了它都是一个全局的一个变量。

那么在后面这个它的类型改变之后呢,那么前面的这个空间呢也就相当于释放掉了,好的,那么我们再来看一下,保存一下,输出一下它的数值,那么最后呢这里是一个字串人啊,一个类型。

那么另外呢它还有一种,因为它这个la这个语言里面呢,它没有数组的这个类型,但是呢它有一种类似的一个类型叫做table,而这个table类型的话,它的赋值的方式呢也与我们c语来一些相似。

但是呢它的功能的话比我们的这个数组的话还要强大一些啊,也要复杂一些,那么我们现在现阶段的话,我们暂时来就可以把它当成是一个数组来使用啊,这个table好的。

我们把这个tab相关的数据啊移到里边啊啊这个注释这里加到最后边,那么前面这段代码呢都成了这个注释,就没有相应的这个不会被运行。

然后再保存一下,再到这个控制台下执行一下好多file,那么这个时候我们来看一下它所嗯它的一个意义,那么首先呢我们这里呢这个my vr,那么这里呢也就相当于是我们c语言当中这个数组的指针的哈,守地址啊。

这里那么当他访问第一个元素的时候,一啊这里打印出来贴补,那那么这里呢取的是他这个元素里面第一个数字幺幺,然后呢我们的下标为二的时候呢,是取的第二个数值,那么下标为六的时候取出来就是665啊。

但下跌为期的时候呢,它下标越界了哈,相当于这个数值呢并不存在不存在呢,那么呢就是说这个呢为父子未初始化,他最终输出的是ni a l啊,他是不认识这个相应的这个变量,因为没有做相应的一个赋值啊,是这样的。

而且呢还要注意一点,它的这个下标的话是从一开始,而不是从零开始,那么如果大家对这个lua语言不是很熟悉的话,那么大家呢呃可以了,就是经常的写一些代码,然后呢在我们的控制台下面呢进行一下测试啊。

当然这个这一段呢相应的这个代码的话,也可以在我们这个呃c加加的这个平台下啊,运行在他的控制台里面输出相应的这个代码也是可以的,那么还有一点呢就是我们的比如说我们用这个记事本啊,上一节课我们也说了。

用这个记事本来编译这个脚本的话,就是显得了呃很复杂,那么有很多关键字来看到我们嗯记不了。

那么可以,所以说我们这个卢瓦脚本的话,它实际上也有很多这个集成开发的环境啊。

类似于我们的这个vc加加的这样一个开发环境,那么呢它有大量的提示,也可以直接的呃直接的进行一些简单的语法的一个检测啊和调试。

那么比如说我在这里呢也安装了一个啊,在网上下载了一个这个啊破解版的这个lua studio啊,studio,那么这个环境的话它就可以了呃。

提供了一个集成的开发环境,那么同样的我们把刚才的这个脚本打开。

它也可以在里面的这个集成环境下面啊,直接就运行,然后我们把这两个选项啊加上。

然后的话我们可以看到啊,这里的话他也可以有一个它的一个控制台,但是我们要注意它的这个控制台版本的话,最好呢我们在vc加加编译的,为了方便哈同步的话,因为它的这个版本的话,这里呢是515的这个版本。

那么所以说呢在这里呢我用控制台测试的时候呢。

也是用的这个515的这个版本,而不是用的最新最新的这个5320或者四五个三零,那么因为这里的话它有一些区别啊,所以说这一点在这个平台的话,它不是越新越好嘛,是够用就好,还有呢就说我们515这个版本的话。

5。1版本的话。

网上的资料是最全的啊,那么在这个集成环境下面开发的话,那么他很多呢都是也可以就是批量的哈,注释也可以去掉注释,啊,那么这里呢所以说它的也有提示啊,它也有一些提示符,那么这样的话我们编辑起来了啊。

最终我们保存之后呢,也可以保存它最最后啊,那么这样的话我们比较容易呃来编辑我们的这个脚本,以及检测它的这个语法,那么也可以来直接啊运行。

但是呢我这个版本因为是它也有一些毛病啊。

有时候呢无缘无故的就退出。

那么答案也可以直接在这下边的输出结果啊,让他说一说,非常的方便我们的这个调试,那么大家呢可以到论坛去下载一个,那么这个版本呢我也传到了论坛,是一个绿色的一个版本,那么我日出一点小错误了。

他也不会影响我们的使用,好的,那么我们关掉这个环境。

那么这一节课我们的这个测试呢就到这里。

P164:175-LUA中的运算符与if语句 - 教到你会 - BV1DS4y1n7qF

大家好,我是郁金香老师,那么这一节课我们一起来了解一下,Lua当中的运算服,以及它的衣服语句,那么首先我们来看一下。

那么运算服的话,包括我们的算术运算服,加减乘除主要是这4个运算,那么关系运算服就是大于小于等于以及不等于,这一类的,逻辑运算服就是Underworld,那么这个与我们C语言当中。

Under就相当于在C语言当中,用这两个符号来表示,那么我在C语言当中,用这两个符号来表示,那用感叹号来表示,当然还有控制结构,也与我们的C语言有一些不一样,还有代码块,这些都有一定的不同。

那么另外我们的关系运算服,只有不等于,它不一样,不等于它是用符号加上等号来表示的,那么符号在数字1的旁边,就是数字1前面的这一个,数字1键盘上前面的这个键,用这个来表示一个不等于,好的。

那么我们接下来打开我们的集成环境,来做一个相应的测试,那么我们先做试着运算的一个测试,那么我们这个时候运行一下,运行之前它需要先保存,那么这个时候我们能够看到它的一个结果,大致的一个结果。

那么这就是我们的一个市场运算,那在后面是一个表达式,它的复制方式,因为我们的C语言是类似的,都是用一个等号后面跟一个表达式,那么它也支持一个变量的一个运算,比如说在这里,我们本来它的结果是4。

那么4我们再加上它之前的结果7,那么最后来等于11这个地方,加C可以支持一个变量的一个相加,好的,那么这就是我们的市场运算,市场运算它与我们的C语言的,里面的运算是一致的。

那么我们再来看一下关系的一个运算,关系运算,那么调整一下输出这里,那么我们来看一下,这里我们也定义了两个整形的变量,然后我们对它做一个关系的一个运算,关系它有大于小于,那么首先我们在这里来输出这个变量。

这里输出一个字符类型的大于符号,然后它们两个比较,比较的一个结果,我们最后这里是一个关系的一个表达式,大于小于,那么它们的一个结果最终是一个Bool。

那么我们运行一下,那么最后它是一个Bool字。

这里出现的,那么首先我们A=22,B=212,那么我们可以看到这两个22显然是要小于212的,所以说这里是False,那么这里它本身是小于,它这个关系成立,那么是true,那么22=不成立。

这里是False,那么22=不等于,这个是成立的,只有两个,一个为真值,一个为假值,只有这两个数字关系表达式,这个与我们的C云也是类似的,那么需要注意的就是不等于,它需要用这个来表示。

如果你写成C云的不等于的话,那么这个时候在这里它会有提示,但是在我们C云,如果是集成在我们C云的开发环境当中的话,它是检测不到错误的,好的,那么这里我们可以做一些集成环境的一个好处。

它就是可以检测这一些相应的错误,那么这就是我们的一个逻辑的一个表达式,那么除了一个逻辑的一个表达,上面的是一个关系的一个运算图,接下来我们要看的才是一个逻辑的一个表达式,那么逻辑的逻辑运算图。

以及逻辑的一个表达式的话,它与我们的C云也有一些不同,主要是它的注记符不一样,那么其他的意义上它是一样的,那么这个"under"它在我们C云当中是用这两个符号来表示,这个"under"运算的。

而这个"work"在C云当中用这两个符号来表示,而"not"在C云当中用我们的感叹号来表示,那么同样的是之前的这两个数值,那么我们可以对它做一个相应的一个运算,先把它注释掉,那么我们看一下。

首先看一下它运算的一个结果,那么首先我们在这里看一下,"b"最后它的一个数值21222,"not",那么这是最终的它的一个数值,"not"这里它表现的最后是一个不二值,而我们"a"和"b"。

那么这里它等于22,那么我们这里为了一个可读性,我们也可以把它修改一下,然后我们再来申请一下,那么这个时候我们看一下"under"的数值,它应该是做的一个二进制的一个位的运算,那么我们可以把这里为1。

这里为2这样来运算一下,那么我们可以发现了"under"的操作的话,它实际上应该是一个位运算在这里面,那么它实际上相当于我们把计算器打开看一下,二进制的"1"与我们二进制的"2"。

它加起来了就是一个"11",就是说相应的这个位它进行一个相加的操作,那么这是对我们的一个对一个二进制位的一个运算,但是它用来做一个关系表达式的话,比如说这两个是一个真值或假值的时候,看一下这种情况。

关键是那么"under"的时候,它必须是两个同时为真的时候,那么这个值才为真,那么其中有一个值为真的时候,在进行这个"work"操作的时候,那么它就为真,那么主要逻辑运算服。

我们主要是用于这个误人类型的一个运算,在这个"Lua"里面,那么我们可以改变一下它的数值,如果这两个同时为真的时候,那么这个"under"它最终的结果才是一个真值,这里才是一个真值。

那么也只有这两个都为一个假值的时候,那么这个"work"它才为一个假值,那么再有一个假值,但是这几个操作服的话,在"Lua"里面很少用于我们的一个数字的一个运算,是很少的。

一般是用来做一个逻辑的一个运算服,那么另外我们来看一下衣服语句,衣服语句它一般有三种形式控制结构,那么一般是这三种形式,一个就是衣服,然后"under",然后这种形式最复杂。

那么我们先来看一下方式1的一个应用,那么这个时候它有一个条件,比如说我们3也可以定义两个变量,A=33,B=1,那么比如说我们A>B的时候,打印一个字串,A>B,或者是这样来打印,A>B。

我们来看一下后边我们写有一些测试语句,直接用来测试一下,那么如果有A和B两个字,那么我们来看一下它最终的一个运算结果,那么后边我们先注释掉,那么这个时候我们可以看到,33>1,也就是A>B。

那么如果是另外一种情况,这个是111<=,那么我们就是输入<=,那么这就是一个关系运算符,那么上面这一句就相当于我们C云的,然后这里的PointA,其他的都是类似的,那么在这里只是我们C云当中的。

一幅二次,它有一些不一样,那么它这里是用under来代表相应的,这个括号,这里中间可以包含多个语句,代码块,好,那么这是其中的一种形式,一种形式,那么我们注释一下,再来看一下另外一种形式。

那么实际上的另外一种形式,与我们刚才的类似,我们这里用不等于来代替的,那么我们再来看一下它的一个结果,那么最后33就不等于我们这个数字,那么如果等于的时候看一下,它选择的执行的语句就是这上面的这一句。

当然它也可以包含只包含一句简单的,那么就没有这下面这一句,这样的结构也是可以,这是最简单的一种形式,那么这个条件成立了,它就打印这个语句,那么不成立的时候,它就不打印,那么当然我们可以把条件给它改一下。

这个时候条件成立之后将会打印语句,那么我们接着来看一下后面的,那么最后这种形式相对要复杂一点,它有几个分支条件,那么如果这个条件不满足的时候,接着执行这个条件的一个判断,但是它只会这几个语句当中。

它只会执行其中的一个,不可能都会执行,那么可能这个是盗版的原因。

它过一段时间它就会自动的把它关掉。

好的,那么我们再来看一下,那么这个时候它会走不等于的分支,那么如果我们大于的时候,不等于的时候条件成立了,那么后面大于条件它也是成立的,但是前面的条件成立了之后,它就会退出分支了。

就不会再做相应的后面的判断,那么只有我们在这里把它改一下,这里改为等于,那么我们再做一个判断,那么这个时候来能够判断出来是大于,另外一种小于的时候,我们再来看一下,那么它也走了分支结构。

那么另外它实际上也是不等于的,但是前面条件它执行了之后,它实际上就退出整个Event的语句快软,那么后面这一句也不会被执行,那么实际上的话,这个语句的话,基本上它永远都不会被执行。

那么除非到我们这个条件再跟它改一下,或者是这个条件不要,我们把这一段把它注释掉,那么最后的才有可能被执行,这个时候会执行不等于,因为前面这两个条件都没有满足,一个是大于没有满足,一个是等于没有满足。

然后才走到最后,这个不等于,这一节课我们就了解了一下,它的一个关系运算服以及它的一个市值运算,当然了我也没有做更多的测试,那么如果有一些这个遗漏的地方,大家自己下去测试的结果为准,好的。

那么我们下一节课再见,多謝您,(音樂停止),(音樂停止),(音樂停止),(音樂停止)。

(音樂停止),(音樂停止),(音樂停止)。

(字幕製作人:十分難聽,請用音樂方式翻譯)。

P165:176-LUA中的三种循环(while,for,repeat) - 教到你会 - BV1DS4y1n7qF

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

那么这节课呢我们一起来了解一下ra当中的循环,呃,它的这个循环呢与我们c语言里面的这个循环的话基本上是一致的,呃但是在语法上呢。

这个规则上呢有一点点不同啊,呃那么这节课呢我们借助这个卢瓦的这个集成环境。

来测试一下它的三种循环,那么首先第一种呢我们测试一下啊,这个vision循环,那么y的循环呢首先呢它是一个循环的条件,那么这个条件的话为真的时候啊,那么这个循环的条件呢,它等于我们的出啊。

为一个增值的时候呢,它执行下边的一个代码块,那么如果当这个条件呢它为一个价值的时候呢,则退出这个循环,那么比如说我们这一个循环,首先定义一个变量,它的初始值为零,那么在小于等于的时候呢,我们执行它啊。

那么也就是说它会输出呃,如果我们这个改变它这个变量数值的语句在后边的话,它应当是要输出一道一时的啊,这个整数啊,quantic好的,那么我们来看一下嗯嗯,那么这里呢我们能够看到一个调试的一个输出哈。

呃一到意识,那么如果他的这个条件我们是呃大于等于一时的时候才执行,那么这个时候为零的话,他一次都不会不执行啊,一次都不会再去执行,那么比如说我们在这个时候呢,我们可以写一下啊,小于等于三。

那么它就会执行四次,这个时候01234,那么这个就是我们的这个y2 的循环,那么这里呢是它的一个条件啊,这里是一个代码块啊,那么我们都相信大家对c语言的这个y循环呢都有一定的了解。

那么这里呢我们就过多的做这个研究,那么我们再来看一下第二种啊,循环repa,那么这个repeat的这个循环的话,那么这里的这个循环呢它至少呢会被执行一次,因为他的这个条件呢为真的时候呢,它就结束了哈。

就结束,那么这一点呢有一点不一样啊,结束的一个条件,好的,那么我们来看一下,那么同样是要输出呃,一到十的这个整数的话,我们可以这样的写,那么复制一个初值repeat,那么中间呢这里是代码块啊。

最后呢这里我们要给它加一个条件,i小于再进行历时的时候呢,我们才执行,那因为他最后呢至少会被执行一次的,在这里头我们哒哒哒哒哒打印,变量i的这个数值好,那么我们执行一下,那么我们要注意的一点呢。

就是它这个条件与我们之前的这个挖掘这个条件呢它不一样啊,它是一个结束的一个条件,当这个一啊,所以说它这里呢只会循环一次,因为这个一呢它小于等于一时,这个条件成立了,他直接就退出这个循环了。

那么所以说我们这里呢应该用大鱼啊,大于等于一时的时候呢,我们才退出,但是呢这里呢它会一直的这个执行,因为我没有去改变它的一个数值,所以说这里成了一个呃这个死循环语。

他。

嗯。

好那么我们再来测试一下,那么这样呢他输出最后呢会输出1~10的这个序列啊,最后呢当这个等于一时的时候呢,他就退出这个循环,我们保存一下。

那么实际上呢只输输出了1~9,因为我们的这个相应的初值呢它是放在后边的,那么我们需要放到前边啊,或者说在这里呢我们把它的条件呢改为大于一时的时候呢才退出,那么这样的才是输出的。

最终来输出的数字呢是1~10,那么所以说这两个条件它是不一样的,这里是条件为真的时候呢,呃它结束啊,那么前面这个循环条件的话,它是条件为增值的时候了,继续地执行我们的循环体啊,代码块啊。

而这个下面这个条件成立呢,他就退出这个循环体啊,代码块,那么所以说这两点啊是不一样的,那么还有第三种循环是最常见的,也就是我们的一个for循环啊,哈哈哈,那么这个for循环的话。

它首先呢变量初值循环的结束的一个数值,那么这个循环的结束的数字呢是指的这个变量的这个数值,在大禹等于这个数字的时候,好像就会结束啊,我们具体呢我们来测试一下。

因为它与我们的c语言里面的这个格式了有一些不同,啊那么这种格式的话,我们要算一下,这种呢是有关这个表的一种循环啊,暂时来说设计,那么在这里呢初值,然后呢是它的最终的一个数值,这个呢是不长啊。

那么我们测试一下,那么这个时候呢我们就输出的是1~10的这个数值,那么这个部长怎么理解的啊,以前我们应当也有用过,在david点啊,嗯这里的话就是说i的质量它每次加二啊,就相当于。

那我每次增加到这个数值,那么如果这里是五的话,我们呢就执行两次哈,执行两次,因为i的初值呢是一,那么他第一次来输入一,第二次加五之后呢,就等于六啊,那么第三次6+5的话就等于幺幺。

那么幺幺呢它大于大于一四之后呢,所以说他就退出了,他最多也只能等于等于它的时候呢,大于等于它的呃,应该说是大于它的时候就结束了,只有小于等于的时候呢才执行好,那么这个数值的话。

也就是说最终它要执行循环体的条件呢,是这个变量要小于等于我们的循环,那么这个部长呢就是每次这个变量增加到这个数值补偿就行,好我们再来测试一下,那么比如说这里为三啊,那么幺八的时候呢就会结束啊。

因为二幺的话它超出了啊,这个时候呢我们每次的步长呢会是三,当然我们这一个最终的步长呢也可以省略掉啊,省略掉,我们看一下会是什么样的情况,那么那么省略掉了,实际上它就与我们这种形式相等的。

就相当于步长是一啊,相当于我们的补偿信息这种情况,那么这个是一的情况下呢,我们一般可以省略掉,那么另外呢我们还有一种呃在循环体里面呢,我们还有一个呃break关键字。

那break呢比如说现在本来是可以呃运行20次,啊21次应当是双方,那么我们可以给它加一个条件,判断逆,那么i的值如果大于一时,那么就不k那么我们再来执行看一下哈,那么等于一时的时候呢,它就可以执行。

那么大于的时候呢,他就不会执行啊,就不会实现了,那么或者说我们可以嗯,就是条件成立的时候呢,他就啊退出了我们整个循环体不会被执行的,这个与我们c语言当中的break,它的意义呢也是一样的啊,也是一样的。

那么我们也可以呢呃在大于它的时候来才打印啊,嗯,不太卡,嗯嗯那么我们也可以再等于某一个数字的时候呢才退出也是可以的,不知道,但是这里边的话好像它是没有这个卡片,好像也有这个关键词,看一下。

他们有这个继续的这个执行的,只有用我们的这个衣服语句来来进行一个控制日,好的,那么这节课呢关于我们这个几种循环的这个形式啊,那么我们就讨论到这里,那么如果还有不清楚的地方呢,建议大家下去之后呢。

呃多做一些测试啊,多做一些测试,好的,那么我们下一节课再见。

P166:177-更换环境为LUA5.1.5版本 - 教到你会 - BV1DS4y1n7qF

大家好,我是郁金香老师,那么这节课呢,我们把532的这个卢瓦的这个版本来改为我们有五的版本啊。

呃因为532的这个新版的话,它对我们嗯就是一些脚本的支持呢不是很完善,那么也可能是他升级之后呢有了一些大的修改,那么比如说我们能随意的写上一段脚本,那么主要是对我们一个便餐的一个支持的感觉。

不是很完善,哈哈哈哈哈。

那么我们还是习惯性的用我们的这个集成开发环境,来写一段我们的代码。

那么比如说我们写一个累加的,那么这是一个支持变仓的一个函数,那么这里呢我们上一节课呢学了这个for循环,那么这里呢我们也设置一个循环啊,一到我们a r g。

那么这个a i g n呢表示获取它变成的这个参数的一个数量,那么获取到这个数量之后呢,它打印出每一个变参的值,那么这个变成了它是一张表,我们可以把它认为是一个数组,一个隐藏的一个数组。

然后呢我们另外定义一个number,来进行有效,number就只为,加上我们传进来的这些参数,那么最后呢我们返回这个数字啊,好那么在这个主程序里边呢,我们就打印出相应的这个结果,电脑板。

然后比如说我们在这里幺三这几个数字相加,然后我们执行一下,最后呢就是1359,那么最终的这个结果,把你家的接过来,就是这一个,就是我们的数字9135相加,那么但是恰好这段代码的话。

在我们的呃五三日的版本上呢,它就不能够运行啊,比如说我们在五三日的版本来运行我们的刚才的这个脚本,在这个地方啊。

177in fire,要七七,那么这个时候呢它会提示出错啊,它会提示一个语法的一个错误,好的,那么我们再来看一下5。5的这个版本,那么同样的是哦对了,这里我们刚才输入的时候也有一些错误,17768。

那么我们来看一下5。5的这个版本,177,那么这个这个呢它就能够输出正常的结果,而且我们在c加加里面调用这个脚本的时候,如果我们用的这个呃。

相应的静态库是52的这个版本之前的这个版本的话,那么同样的他不能够得到正常的结果好,那么所以说我们在这里呢就用把它改为5。5的这个版本,那么网上关于这个5。1的这个版本里头的话。

它的相关的资料呢也是最多的,新版的他改动了之后呢,我们暂时还找不到相关的资料好,那么这个大家可以到我们的论坛下载,这个已经啊已经编译好的这个相应,的静态链接库包。

那么我们可以在这里搜索一下啊。

然后呢在这里呢我们下载啊,那么下载下来之后呢,就是这个文件,这个文件呢我们把它解压出来,然后解压出来之后,我们把它放到一个固定的一个目录下边,那么解压出来就是这一刻啊。

那么我们可以把它放到c盘或者d盘任意的一个位置嗯。

那么我一般一般呢选择呢是把它放在c盘下面。

放在下边下边之后呢,我们看一下它的目录构成,那么这里是两个版本的控制台编译升级的,这个是我们发布版本的。

发布版本的要小一点啊,这个是第八个版本的呃,功能都差不多,但是静态库呢我们也分了两个版本,一个是第八个的啊,以d结尾的是第八个版本,那么这个是release的这个版本好,那么有了这些相关的数据之后呢。

我们再进行相关的设置。

那么打开我们的vs 2010。

那么在这里呢我们也也已运行这个171撸啊哈。

明目地呃,所以说我们把它建在桌面上,这个项目。

好的,那么现在建立好了之后呢,我们呃把它切换到属性管理器这里哈,展开他的第八个这个项目一定要展开,展开之后呢,我们选择这个win 32 user啊,这然后呢再改变它的这个c夹角的这个目录。

这个目录呢我们进行一下编辑,删掉之前的这个所有的这个目录,然后呢这个包含目录的话就是头文件的啊,第二个h的这个目录我们把它设置啊设置好,然后呢在这下面来库的这个目录。

我们也把它进行一下重新的设置这个level啊,这里面包含的是库啊,然后呢点一下应用,那么我们看一下,是不是这样的一个结构,那么这里面呢我们主要是包含这些头文件啊,需要把它包含进了。

那么这是我们第八个的这个版本,当然我们还有一个链接器啊,这里的我们一个常规输入啊,那么在这里呢我们,需要如果是这里没有这个logo要逮捕的话,我们需要在这里编辑给他加上啊,这里需要加上点确定。

然后呢我们再展开release的这个版本,那么如果这里呢它没有这个nova 515 r2 的话,那么我们在这里点编辑了,给它加上加上,那么另外我们的vc加加这个目录,这里呢我们也需要来做一下更改啊。

包含的这个目录现在已经更改过来了啊,停下啊,确定再来看一下,好的,那么这样的话我们基本上就可以编译生成,没大,然后呢我们可以写代码来运行我们177的这个脚脚本,好,首先是相应的库函数的。

你的支持nova的头文件,然后再是小米的附加库,打,lil库,然后最后再是我们的国家库,好那么这三个库包含了之后呢,我们首先呢也是呃环境支撑创建,初始化我们的一个环境。

然后呢我们再打开我们的一个库的一个支持,然后再是我们的do file,最后呢我们关掉,网,好的。

那么我们看一下我们的177啊,卢瓦,那么这个时候呢我们需要放到他的第八个目录下面啊。

生存在这个地方,让它保存在同一个目录,ex一哦,这个啊,然后我们再重新编译生成一下,那么这里呢我们还差一个环境指针啊,做这个变量,对,那么注意这里的是低版本啊,反正不是。

那么如果是我们的r2 版本与这个debug debug的这个环境下面编译的话,那么它就会出现下面这些警告的一些信息,那么所以说我们这里呢刚才改的时候没有注意,那么我们需要在这个地方呢再重新编辑一下。

还有我们第八个的这个版本,然后再应用一些,再重新编译生成,好的,那么这个时候呢我们执行一下,但是这个时候呢我们呢的控制台呢会一闪而过,那么我们需要停下来的话,可以用pos指令让他站起来,或者是用gtp。

那么一般来说用gta还要简单一些,不用去,另外还要包含一个头文件,那么另外一个原因呢,他没有找到这个文件啊。

他实际上没有找到文件的话,也不能够正常的呃执行。

那么这里没有任何的信息,因为我们的这个exe所在的这个调试目录与我们文件生成的目录呢,它不在同一个目录啊,所以说我们要把这个输出目录的路径呢呃更改为我们的这个调试的啊,工作目录这样。

的话我们才能够让它生成啊。

那么在这个时候呢它就能够出来正确的一个结果,那么如果我们是用之前的52的版本的话,它就不能够出来正确的啊一个结果,那么好的,那么这节课呢我们就讲到这里。

P167:178-LUA中Talbe结构及相关操作-lua数组 - 教到你会 - BV1DS4y1n7qF

大家好,我是郁金香老师,那么这节课呢我们一起来探讨一下lua当中撸a当中的这个数组啊,那么实际上我们是探讨的一个这个table结构,它与我们的数组呢有一些类似啊,但是呢他提供的这个功能和操作呢呃更多啊。

以及它的存储方式呢也有一些不一样,好的,那么我们这一节课呢作为一些了解。

那么首先呢我们也打开这个word啊。

集成开发环境呃,在这里呢创建一个项目啊,保存一下,啊,那么首先我们来看一下啊这个表的一个定义,那么表的定义的话很简单哈,那么这一段呢我们就是定义一个表,那么这是定义一个呃空表。

相当于那么这里呢我们把它重新给它赋一个初值啊,这里那么负了这个数值之后呢,我们要这里边它就比如说我们可以做一下小小的测试,那么第一个元素我们就可以以数,类似于c加加里边这个数组的方式来对它进行访问。

为什么说类似呢,因为它的这个下标的话是从一开始的,而不是从零开始,那么我们看一下它的一个结果就是一啊,那么如果我们访问它的第二个元素,那么就是二,那么第三个元素呢,我们这里用16进制来表示的就是一五啊。

那么我们也可以来写一段代码,或者是写一个函数来偏离它的整张表啊,那么比如说我们可以写一个啊这样的函数,好把前面这段代码去掉,因为它其中有一个table啊,它本身这个有一点像我们的c加加里面的瑞克啊。

实际上呢它也是一张表,那么这个table这张表里面呢它包含了一个函数啊,我们就可以简单的把这个整体当成是一个函数来使用,那么这个函数的参数呢就是我们的这个表的名字,那么比如说我们的table啊。

get n,那么在整个这一段呢就表示了啊,取得我们这个my table这张鸟的大小啊,它的元素的个数啊,那么当当在这个my table呢是参数啊,相当于传进来的,那么我们要这样写了一个函数之后呢。

它的作用呢就是呃从一到这个元素的个数啊,偏离我们整张表,把元素里边的表里面的这个数字来打印出来,那么比如说我们刚才定义的这张表,my where,那么我们就可以在他的这个主程序里边啊。

相当于是我们的c加加林的这段代码呢将会被执行啊,海vs,然后呢偏离我们的这张表,把我们的这个表的名字那么传进去,那么这样呢就能够达到一个偏离整个表的作用,我们可以看到12154567啊。

这就对我们整张表进行一个操作,那么这个呢我们可以改一下啊,啊这样看起来的话可能更加的清晰啊,这样的我们就偏离了我们的整张表,那么这里呢我们还可以给他加一个啊,偏离表结束,那么前面呢是偏离整个表的开始。

那么主要是要理解啊这个函数啊,gp嗯,然后呢他是获得我们表的一个大小,那么这里的大小呢他肯定是七啊,这个表的大小就是1~7啊,当然我们也可以把这个表的大小也可以打印出来看一下。

然后我们可以在这里呢可以看到就是我们表的大小的数值器,当然后边呢我们可以呃再给它增加相应的这个元素啊,那么这样那么这是一种方式来对它进行一个初始化,那么另外还有一种初始化的方式。

当然如果是按照前面这个初始化的话,它就是一个公子表的大小就为零,我们也可以用一个循环来对它进行一个初始化,比如说我们要像这个元素里面啊写入一些数值或者增加一些数值的话,我们都可以来进行讨论。

就说1~10啊,然后呢我们对这个表进行复制,i war下标,复制为我们i的这个数值,然后我们再次偏离的时候,就能够看到它元素里面的数字呢是一时啊,那么我们也可以在后边呢来改变它当中的一个数字。

好这是偏离之后,那么我们也可以来在这张表的基础上来增加啊,或者是改变,比如说这里面的可能是这个数字,那么我们也可以按照这这里一到十之后呢,我们可以把这张整个表格数字来给他改变掉啊。

就是说这里面的数字呢没有作用,或者是在它的基础上呢来增加,那么我们可以来可以先获得它表的一个大小,在这个循环之前,我们用一个参数n来获得这个表的大小,然后呢我们i的数字呢从n加一啊到n加十,这样开始。

然后我们再来骗你,看是多少,n等于t啊,这里是my war,这样才可以,那么这样的话我们表里面的元素呢它将有20个这个商,因为我们这里来对它进行了改变啊,这个我们改变去掉,然后我们再来看一下。

啊1233就是在前面的数字呢它不会改变啊,就是12345678~20,这是后面增加的一个序列,那么这是一些表的基本的一个操作啊,那么呢我们这个表的话,它还提供了其他的一些函数来对它进行操作。

比如说这个排序排序呢,它能够来这个sht,能够把整个表的元素呢按照从小到大的这个顺序来排列它啊,那么我们这边呢也可以进行一个测试,然后比如说现在的话你看一下本来应该是12233,那么如果排列之后的话。

这个2233可能就会移到后边去,我们可以进行一下测试推广说的,那么我,好那么我们再重新输出一下,那么我们可以看到前面的这两个较大的数值呢,就移到最后边去了啊,二二或三三啊。

那么这个时候呢实行了一个我们的排序,那么我们整张表呢,它它还可以用你这个因子呢在某个位置啊插入某个元素,那么比如说我们在第二个位置插入二哈,本来他是二和三,这个元素是没有的,那么我们再来排序之后。

我们再来进行一个操作,试一下,table their insert,然后表的名字,那么我们在第二个位置插入元素三啊,或者是操作元素二的,那么我们再试一下,那么我们可以看到这里的元素呢会多出一个二出来哈。

后面的元素呢会继续的往后移动啊,后面的元素呢也是存在的,那么这是插入,那么插入之后,比如说我们要把这个第九个元素哈,把它移除掉,那么第九个,那么实际上呢我们这里序列的它是它的下标的应当是排序之后的话。

应当是八啊,排序之后如果是未排序之前呢,他应当是啊第九课啊,所以说我们在排序之后对它进行一个这里插入之后,看到了之前的这个基础,我们table那么人物我们也可以移动移除掉某一个元素,那么比如说我们把嗯。

这个元素我们数一下它的下标1234567,应当是第八个元素,我们把它移除掉好,那么我们再来看一下,也就是这个数字九会不会已经出掉,那这个时候我们就不能够发现这个数字九它就不存在了。

那么也可以移除掉其他的元素,比如说移除掉哈,第一个元素,那么我们在输出的时候啊,这个第一个元素来就没有了,那么我们可以在某个位置插入一个新元素,也可以在某个位置来啊删除掉哈某个元素啊。

那么这就是我们表的一些啊最基本的一个操作,而且他的一个访问方式就跟我们的数组的访问方式一样啊,啊但是这个表呢也可以是多维的啊,它还有一些呃不常用的这个操作啊,那么我们就在下一节课我们再来继续的讨论。

当然这个表的类型的话,因为它都有一个特点,它的这个类型的话,它里边的这个类型呢也可以包含我们的字串啊,这一类系统都是考虑的,嗯这个如果是比较的,这个字符如果包含了字符的话,这个说他他就不能够工作了。

啊啊啊,这样工作还是没有问题的好那么这一点呢要注意一下,如果所有的元素都是数字类型的,那么呢它可以工作啊,比如说这里我们是16进制的,那么呢它是可以工作的,这个说的。

那么所以说这个使用这个sort排序的这个函数要注意,那么所有的这个呢都需要是数字的,就用这个s等于164好的,那么这节课呢我们就。

就讨论到这里。

P168:179-Talbe结构高级运用-多维数组及pairs函数 - 教到你会 - BV1DS4y1n7qF

大家好,我是俞其鑫老师,那么这节课我们继续来看一下,Table结构的一个运用,那么首先我们来了解一下,它有一个叫Pairs的函数,那么这个函数,当然还有一个叫IPairs,那么这两个函数的话。

它都可以用来骗你一张表,它但是要截获我们的,这个FOR循环来使用。

那么我们一起来看一下,这个函数,比如说我们在这里建一张表叫myTable,那么这里边我们可以给它随便,付一些数值,然后我们之前的话,我们要骗你这张表的话,我们可以这样的去骗你。

那么我们需要用Table里面的,GTN这个函数来获取表的一个元素的一个个数,然后我们再对它进行一个骗你,那么我们可以用这种形式去进行一个骗你,那么这个时候我们看到前面是它的一个下标。

后边是它元素的一个数值,但是我们还可以用另外的一种形式来,就是IPairs,这里也是一个变量,那么这里的语句的话,我们也可以用相同的语句,那么它们的功能的话是一样的,当然这里我们也需要把这张表传进来。

那么我们把它分隔一下,好的,再来对比一下,那么我们发现的话,这两个接口的话实际上是一样的,当然这一句我们还可以用另外的更简便的方式来写,第一个是下标,第二个是它取出的元素的值,那么直接可以用位来代替。

那么位来取出来的就是它元素的数值,那么这样来用的话就比较有用,但是我们还有另外的一种情况,就是说这个表它本身是一个无序的一个表,比如说我们把上面的这一句注释掉,也可以不注释都可以。

那么相当于我们把这个结构跟它重定义一下,那么这种表它就是一个无序的一个表,它要通过一个相应的一个,有一点像我们C源里面的结构的形式来对它进行一个,访问,好的,比如说当然这里边它也可以包含整数,这里也行。

那么这种情况的话我们看一下,再来骗你的话会出现什么样的情况,那么这个时候我们发现的话骗你的话,它都不会有任何的结果,关键是它只对有序的这种表进行一个骗你,我们要把前缀跟它去掉,这个Pulse。

然后我们发现的话后面它就能够对它进行一个骗你,然后按1,然后这个是1,最后也是按1,因为这里边的数据的话,我们没有给它进行一个相应的,要把它区别出来,分别进行复制,那么我们可以看到这里,按1231。

这里是一个Dirt,那么在前面,这个爱它就不是它的下标了,而是它元素无序的元素的后面的数字,电量的一个数字相当于是,所以说我们Pulse它主要的话是运用于我们这种无序表的一个进行的骗你。

那么我们可以发现这个时候骗你的话,它也是有用的,那么这个时候骗你,如果它本身这里是一个有序的一个表,再加上无序的话,它也会正常的对它进行所有的元素,都进行一个相应的骗你,那么但是前面的话,这个骗你的话。

分割线之前的,它就只能对有序的这一部分进行一个骗你,那么所以说要完整的骗你的话,很多时候我们还要借助于Pulse这个函数,好的,当然过有过的优点也过有过的缺点,大家下去之后可以多做一下相关的测试。

那么我们把这段注释掉,接下来我们来看一下,多维的一个数字,那么我们知道我们C园里面都有多维的数字,那么实际上在Lua里面,它也可以用这个表来构建一个多维的一个数字,那么比如说我们有一个表1,A。

那么里面它包含了一些元素,比如说是串,A1,A2,A3,那么有这样的一张表,那么有一张,另外有一张表,表B,那么它里面也是,比如说是7,8,9,那么这两张表,那么又一张表来,C,那么这张表里面的话。

它就包含了我们的A和B,那么或者还有其他的表,C,那么这个时候的话,我们的C的话就是一张多维的表,也可以看成是多维数,那么这个时候我们就可以这样的形式去访问它,那么首先是C1,然后再是C2。

那么我们看打印出来的元素是多少。

那么这个时候打印出来的是A1。

那么如果我们这里选2,那么我们打印出来的就是它的元素是7,那么如果是24,就是打印的元素,那么这就是我们的一个多维的一个表,当然也可以对它进行一个片里,可以进行一个分开的一个片里,那么多维这个表的话。

当然还有其他的一种形式,比如说无序的表,它也可以做一个多维的表,当然这种形式的话要更加的复杂一些,那么我们再来看一段代码,比如说看一下,那么这种也是一个表的一个形式,那么我们把这段代码也把它注销掉。

那么这种我们用上一节课的一个函数来进行一个片里,那么上一节课我们在这里写了一个片里有序表的一个函数,那么我们看一下它的一个结果,那么实际上它也片里了这两张表,一个是列这个表,一个是代替,这个表。

那么我们也可以分别的来片里它,但是这个函数的话,这个表的话它就是一个无序的一个表,它里面也包含多个成分,也算是一种多维数组的一种形式,当然像前面这种多维数组的话,可能运用的要多一些。

当然这些如果有不理解的地方,大家下去之后多做一些相关的测试,要多测试多练,好的,那么这一期课我们暂时了就了解到这里,謝謝大家。

不太能回頭。

P169:180-Lua文件读写操作 - 教到你会 - BV1DS4y1n7qF

大家好,我是郁其鑫老师。

这一节课我们一起来看一下,Lua里面它内置了一些函数,可以来对我们文件来进行操作,我们这一节课主要是探讨一下,Lua对文件的一个读和写的一个操作。

好的,那么我们可以用即是本来编辑,也可以用一些集成开发环境来测试。

这个脚本,那么首先我们来看一下,Lua当中它怎么来创建一个文件,那么实际上它创建一个文件的话,相当的简单,它有一个内置的函数,在IO这张表里面,那么用IO open来打开一个文件名。

那么后面的操作方式如果是W的话,那么它就会检测这个文件是否存在,如果是存在的话,它就覆盖它,如果是不存在,它会创建一个新的空文件,以方便我们写入,那么我们来看一下这段代码,那么我写了一个函数。

那么保存一下,然后发明,那么这个函数在这里,我们首先用这一段代码来创建一个,TestX Lua的文件,那么如果是创建成功的话,它肯定就不等于我们的空,不等于NIL这个标记,那么如果是创建失败。

那么肯定就等于NIL这个标记,表示了就是说未创建成功,它会返回一个NIL的标记,空标记,那么另外一种情况,如果是不等于标记的话,就证明了创建成功了,我们就可以用write,向里面写入我们的字串。

那么比如说我们在这里的,当然这里我们它另外有一个OS的表里面,有一个data的函数,它是返回的一个时间的这样的一个数值,那么后边这里我们写入了两行文本数据,其中我们也可以用转译字符,斜杠加N来进行换行。

那么也可以用这一段代码来进行一个换行的操作,它另外这个串这张表里面,它内置了一些对字符串的一个操作,那么这个腰顶它也等价于换行,那么好的,那么我们在这里运行这一段函数的代码,来看一下保存一下。

然后执行脚本,那么执行完了之后,我们到桌面上看一下,因为这个时候它调试目录是在桌面上的。

这个时候我们看到这里,它有两个换行,这里换了一个行,这里换了一个行,然后把我们的相应的字串写进去了。

如果我们把这一行注释掉,那么它就只有一个标准的换行。

那么我们再次执行它,那么我们也可以在控制台下边来执行。

或者是在我们的C:里面,好的,我们先把这个文件来删除掉,Defile。

那么我们可以看到这个时候,它马上创建了这样的一个文件,那么这是我们一个很简单的对我们。

这个Rule对文件的一个写的操作。

那么当然我们还可以写,写完了之后,一般我们要用它里面的相当于是一个对象的,一个成员函数的一个形式,实际上它是一张表,这里面它用close这个函数来关掉文件,那么这里的话。

它返回的MyFile相当于是文件句,或者是文件指针的这样的一个变量,那么我们除了对文件的一个写入的操作之外,我们也需要来对它进行一个读取的操作,那么读的话,我们一般会用这样的方式来读取。

那么首先我们也是要打开,但是我们读取的话,这里的后边我们用R这个模式,写入来我们用W这个模式,那么如果是追加的话,这里用A这个模式,好的,那么我们打开成功之后,这下边我们就是打开成功,那么成功之后。

我们在这里我们就可以设置一个循环,那么我们循环读取里面的数据,那么后边这个是一个格式化的一个支撑,那么L的话就相当于读取一行,那么我们也可以在论坛上搜一下,牛网文件操作相关的,那么我们能够找到一些资料。

这里面,那么这里面它也有说用N是读取一个数字,用CN是读取整个文件,用CNL,我认识读取下一行的一个内容,如果文件尾不到文件尾的话,它仿佛一个NIL的一个标记,那么Number是读取指定字节的一个字符。

那么如果是直接是数字的话,就是表示一次性读取多少个字节,那么读到文件尾,它也会仿佛一个空,那么如果这里它为空,我们就退出循环,那么这是一种方式用来读取我们的文件,那么这里文件也是这一个文件名。

当然如果我们都对这个文件名进行操作的话,我们可以把它设置一个File Name,在前面我们可以设置一个全体的一个变量,那么这里我们直接对发热链这个变量做一个相应的操作,好的,那么打开成功了之后。

这里我们它读取一行之后,也相当于是一个支串类型的,那么我们打印出这一行,最后循环退出,好的,那么我们看一下读出来的数据是什么,那么前面的我们就可以把它关掉,注释掉,Eof,那么我们这里多了一个End。

我们看一下,这里是Endive相当于是,那么这里应该是Endwhile,那么while循环之前的话,我们看一下应该是这个地方是我们的Endwhile,那么我们把它这里有一个是里面的一个锐嵌的一个E。

然后是Endwhile,我们把它锁定一下这个地方,设置一下它的格式,然后这个是外层的E,这里是End,这里我们少了一个括号,所以说其实这个语法一个错误,好的。

那么我们再来看一下,读取这个文件的一个内容,那么我们也可以自己添加几行内容在里面,让他来读取,然后我们可以运行控制台。

也可以直接的读取,读取,Eof,那么直到了最后来读取为空,当空这个我们可以更改它的代码。

在为空的时候,我们就不进行输出,我们可以把这个Contentline写在UnderEf的后边,这样我们也可以直接运行。

那么我们可以看到最后空它就不会被读取出来。

那么这是一种操作的方式,那么还有另外的一种方式,那么另外一种,我们一般就是你另外写一个函数,你的test看一下,这个它也能够读取整个这个函数,那么这里是我们的发热类,直接用全球变量来表示。

那么这里打开文件输出,这里我们打开成功,那么成功之后,我们也可以用这个FOR循环来对它进行处理,那么这个FOR这里我们可以整行的读取它,这个None,那么这里也有这个None函数的,相关的一个介绍。

我们来看一下,那么返回一个迭代函数,它叫每次调用户的文件中的一行内容,当文件,当到文件尾的时候返回空,那么这是一个迭代的一个文件,那么I,我们的这个None,那么用这种格式来写,那么读到文件尾的时候。

它自动会退出循环,那么用这种模式,它也能够读取我们的文件,好了,那么我们调用一下,这个,Webfire Test,那么我们直接用Webfire的方式。

这个时候我们可以发现了,它也能够成功的读取。

当然我们也可以直接修改这一段代码,可以在计时本里面进行一些修改,比如说我们可以给它加上一些调试信息,然后我们可以用这个Webfire的方式来输入这个文件,好的。

那么我们保存一下,然后我们再用Webfire可以来看一下,它会多出一行信息,这个时候更方便我们的一个调试。

那么我们也可以这两个一起来调用,然后我们可以看到这里是Test。

两个Test,我们再看一下。

这里是注释掉的,那么我们可以把这一行取消掉,用一个风格线来风格区分一下。

然后我们再次运行读取,测试一下,好的,那么我们可以看到这种两种方式,它实际上读取的一个效果,都是一样的。

当然读写的这两个操作是最常用,那么其他它也有一些另外的一些函数。

那么这些函数我们在以后的时候如果用到的话,那么我们再来做一个相应的了解,好的,那么这一节课我们就暂时谈到这里,下一节课我们再见。

(音量),謝謝。

P17:028-封装选怪打怪功能 - 教到你会 - BV1DS4y1n7qF

大家好,我是郁金香老师,qq 1533057,欢迎大家参加滤镜像技术编程的区,那么这节课呢我们对函数和自动选贵的这个函数来进行封装,那么之前呢我们只封装了一个啊,根据他的这个下标来选中相应的一个对象。

那么这节课呢我们另外再封装一个函数,专门用来选中怪物的,而且是选中我们的呃,静观啊,这里呢我们附加参数软件,让它自动的选择一个附近的怪物,离得比较近的,好了,那么我们打开之前27克的代码。

那么这个函数封装好之后的话,我们再加上一个攻击动作,就可以实现自动挂机打怪了。

然后我们先一到这个结构单元,在我们的属性里面啊,呃角色的这个结构里面的添加相应的函数,那么这个呢就是选怪啊,尽管比较近的怪物,啊,嗯哼哼,那么在原文件里面我们遇到最后,嗯。

那么在这里的话我们需要进行两个步骤,一个是偏离整个包含了怪物的一个内容,那么实际上这个怪物列表的话,它也包含了我们的玩家对象,它实际上是一个对象附近的一个对象列表。

那么我们叫他怪物列表的话可能不是很恰当的,那么偏离之后呢,我们要做判断,首先我们要判断是不是怪物,那么是怪物的话啊,才继续,那么如果是怪物的话,我们就判断它的距离,判断距离,那么距离啊选最近距离的。

那么选最近近距离的这个怪物的话,我们就可以调用之前的这个函数,选中对象,那么要经历这几个过程,那么首先呢我们建立起的全局变量,那么第一个全局变量呢它用来存放我们的下标,相应的我们找到。

那么第二个呢我们用来存放的是它的一个去年,都对它进行一下初始化,首先我们把这个距离呢so die,这个下边也行啊,所以那么首先我们判定整个列表,听到这个,那么在偏离这个列表之前呢。

我们先把这个怪物列表的名称给它改一下,因为它这个它不是一个纯粹的怪物列表,它里面呢还包含了其他的对象,在我们之前的测试里面,那么我们就改这里边的一个数据,在获取这个数据的时候,这题这题初始化的时候。

我们把它数据给它过滤一下,这里有一个21,那么这里他执行下一次之后的话,我们还有一个问题就是什么呢,如果这里我们继续下一次循环之后呢,它相应的单元啊,就是问题就没有写入这个数据,这里已经有这个判断了吧。

这个判断等于2g那么这个2g呢我们最好是另外再添加一个新的项,用来定义我们这些对象的一个类型,当然还有一个玩家的类型,其他我们也发现几个被包啊,动作的这些对象的类型,暂时我们用网上的网口进入。

这个13样之前有过分析,那么这里我们就可以改一下,这里我们包含这个相应的零件进,外部的这里类型判断了之后呢,我们还应该有一点看一下这个下标,我们还要还是从这个数组一这里来开始给它添加啊。

这样我们方便判断,那么我们就需要另外还有一个下标,下标这个下面呢我们来表示的是,我们这个对象列表里面看,这里取的是怪物列表,那么我们这个人呢我们需要改一下,那么这个就不是怪物猎人呃。

这个是我们的附近的对象内容,但是没有,我这辈子听不听话,那么替换了之后呢,我们另外再给它准备一个下标接,在这之前我们给它定义一个变量问题,已经借这个来用来计数。

啊这个用的技术用来给这个我们自己的数据进行一个技术,或者我们这样改要容易一些啊,这里改成intel,这里改成int j,那么这里我们只需要改这一个地方就行了,偏离我们附近的一个列表。

那么这个i的这个下标尺呢,它要执行到在后面呢,我们嗯才给它加一这个i才加成,这样改看一下,逻辑上,这是你啊,它跟相应的这个我们的怪物列表了,初始化之后呢,再让它的坐标呢进行加一,那这里的话看一下角色的。

回去再去,编译一下,那么这个j呢它是什么呢,j这里是附近各项数据是,啊这个写好了之后,我们移到最后嗯这里呢我们对它进行相应的一个判断,那么这里因为他之前呢已经有判断了,在那个怪物列表。

那么所以说我们用不着新的判断,首先我们看一下t master,good time,那么这里呢我们需要做一个判断,判断这个数组里面它是否有东西,对了我们要它,它还有一个我们还需要添加一个属性。

也就是它的下标文这一段这个调到一个下面,再看一下请你出什么关系,下调c前面的初始方法,那么我们要先判断一下这个单元呢它是否为零,它的这个数组里面的数据呢是否合理,初始化了,如果他是初始化的话。

我们就不用去学它,就不用取这个值,如果这个数值等于零的话,那么我们继续下一次循环,好,那么下面呢我们先来判断一下它的一个缺点,好在前面阶段呢复制一下,那么取出它距离的一个属性。

那么判断这个距离它是否要小于我们的这个n distance,如果是小于这个距离的话,那么我们就把这个小的这个距离呢写到它就可以了,那么这里面就存放最小的一个距离,并且呢我们这个n n d这个下标啊。

它也存放我们就是最小距离的这个怪物的一个下标,那么在这里呢取出来相应的一个下标尺,蓝处理下表,好那么经过这前面整个循环之后的话,这样不停的比较,那么最终剩下来的话,这个距离呢它就是最小的一个距离。

而这个下标的话就是距离我们最近的那个怪物的id啊,是它的一个下标,那么它取出来了之后啊,嗯这里呢我们就不用判断是否是怪物了,因为在我们之前的初始化当中,它已经有相应的判断。

那么最后呢我们就是执行相应的选中set option,然后呢我们选中达就可以,好然后再编译一下,那么最后这里呢实际上我们还应该要做一个判断,如果它整个这个列表都偏离完了之后啊,如果我们把这个nd啊。

这个下标的值它还没有改变的话,还是等这个0x f f的,那么我们就就相当于是这个选中失败了,我们还需要加上一个题,如果这个值等于这个连x f x的话,那么这里呢我们就返回,但是就调用就相当于失败。

就没有实现损坏的这样一个功能,哈哈哈哈哈,这个我们加错物质,那么加在这个位置,然后再编一下,然后那么选贵的部分,那么我们完成了,那么选贵的部分完成了,接下来我们就调用了它的一个攻击的一个动作啊。

就可以封装成我们这个打怪了啊,自动打怪,那么这里呢我们就做一个自动打怪的一个函数,还是特别,那,么自动打怪呢我们也要经历两个步骤啊,第一呢我们就是要选怪,要自动的一个悬挂。

然后呢我们再调用我们的攻击动作啊,这两个当然选会的话,之前我们空中的这个函数的话就可以实现,但是呢我们也要有一个条件,如果当前的怪物我们还没有把它解决掉的话,我们就去选另外的怪物的话。

这个时候呢也显得很不效率,那么所以说我们还要做一个判断判断就是当前的怪物太适合了,已经被我们就是说判断我们当前没有选中和怪物,那么我们在执行我们的攻击动作,那么在这里呢我们加上一个判断。

那么当前选中的看有没有车,md就是我们这一代属性的玩家选中的,那么这个属性我们取出来之后呢,我们再需要取出它的一个对象,取出来要做一下判断,因为有的时候呢我们可能是选中了自己,也可能选中了其他的玩家。

那么我们选取出当前选中的i t取出,这里我们这个下边我们给他改一下当前这个数字,我们看这个数字有没有初始化,这个数值是初始化的,看在这个在这里在这里我们有读出它,那么我们还需要取这个当前对象的呃。

它的一个类型,我们需要把它取出来,那么如果我们是做一个简单的,我们先做一个简单的判断,然后我们再来完善它,这里我们可以直接这样写,我是说一个简单的判断题,只要这个数值呢它不等于。

如果说它是等于我们的0x f f的话,那么我们才进行一个选换,如果就是怪物被打掉之后呢,他会自动的对这个选中的id来进行一个清零,相当于啊这里呢它会附上这个-1这个数字啊,嗯冲自己的也就是连x f f。

那么如果是这种情况的话,那么我们再进行一个选怪,那么这里选择了我们前面啊,好那么选过之后呢,我们再执行一个相关的动作就行了,这music风气,那么这样的话我们基本上就可以实现一个自动的卡怪。

这个选过这里呢,我们还没有进行更精确的一个判断,那么只有当这种情况下,只有他没有选中我们自己的时候才有效,那么因为我们选中自己的话,这样攻击自己肯定是不正确的,那么先还是来做一下相应的一个测试。

把这个自动档位的函数呢我们添加到测试的代码里面,自动打破它,当然这个不是真正意义上的自动打怪,只是说每次啊呃点击这个按钮呢,它会去选择一个,如果是当前没有选中怪物了。

还会去选中一个怪物,然后去攻击它,那么如果要实现真正意义上的自动打怪啊。

我们还需要嗯加一个定时器或者是一个线程来不断的调用,这个时候呢他们没有错,因为我们选用的是自己,这个时候,啊这个时候呢他可以选,因为就是刚才我们说还要加另外一个判断的话。

就是要判断他当前选中的是否是怪物,这个时候他就可以了,好那我们测试测试是成功的,那么具体要完善的一点呢,就是前面我们这个判断呢,我们还要判断他是否是否选中了玩家,或者是选中了我们自己这一类的。

这里这个选怪的判断,我们需要嗯再细致一些,再细致一些,当然这里不加上这个判断,实际上他也可以选,但是呢他会不断的换怪,当当前怪物还没倒,还没有,就是说把它解决掉的时候呢,它又会继续其他的这个怪物。

那么这个判断呢我们在下一节课再来完善,再分钟啊,关于这个选怪的一个判断,好的,那么这节课我们就讲到这里下。

P170:181-修改Lua文件让它支持中文函数 - 教到你会 - BV1DS4y1n7qF

大家好,我是郁金香老师,那么在这个我们来探讨一下。

让我们的路由网脚本支持一个中文,函数的注册,那么我们说到中文函数的注册,也就是说它的,比如说我们在注册的时候,这个Register,那么我们注册为英文的这种函数的话,它能够正常的编译执行。

如果是脚本里面这样写,那么但是如果我们是注册的是一个中文的,那么我们的脚本,它将不会被正常的编译执行,那么所以说我们这样用起来的话不是很方便,那么这节课我们就通过修改它的一个源代码。

来增加一个中文的一个支持,好的,那么我们先建一个。

打开VS2010来建立一个工程。

来做一下相应的测试,嗯,嗯,嗯,嗯,嗯,嗯,嗯,嗯,嗯,嗯,那么我们把这一段写好的测试代码添加到里面去,我们再说一下,它大致的一个拼音,那么这一段我们就在这里,首先是这个ID的number。

那么同一个函数的话,我们在注册的时候,我们可以注册了几个不同的名字,那么但是现在的话,我们没有修改之前,它是不支持下面的中文的,那么像现在这种情况,那么这两个注册名的话,它都能够正常的调用。

然后会转到我们的ID的number这里来,执行一个累加的操作,那么我们在172之前的代码我们有写过,那么现在的话我们打个比方,那么现在如果在下面有一个相关的脚本的话,它调用了它。

比如说叫做test-new,这样的一个脚本文件,那么它里面无论是APP123,或者是APP2,那么实际上最终,它调用的这个函数的话,都将是同一个函数,那么这个时候都会被正常的执行,好的。

我们来连接生成一下,那么这个时候这两个函数。

我们实际上123和345,这两个脚本的话都会被正常的执行。

计算出一个正常的结果,但是如果我们在这里把它注册了成中文的,比如说这个ID的number,我们把它注册为+法,或者是累加这一类的,那么比如说我们后面中文支持测试,那么这个函数它就是打印这样的一段信息。

那么如果它测试成功的话,我们直接调用函数,它就会打印出这段信息,好的,我们也来进行测试一下,Defile Nuantest,然后我们改一下它相应的脚本,一个是执行一个+法,好,我们保存一下。

再次编译执行,那么这个时候它将不会有任何的信息输出。

因为它里面的话,它在编译的时候,这两个中文的函数,它就认不了,还有中文的变量这一类的,好像它也不会认识,那么我们把它注册之后的话。

它再次编译了,又能够正常的执行,但是这样我们在写脚本的时候的话。

就非常的不方便,那么所以说在这里的话,我们自己通过修改它的一个源代码。

来添加一些中文支持的一个功能,好的。

那么我们找到它的相应的一个源代码。

那么我们之前把它放到了Separate,然后Lua不要无底,这里我们建立了一个工程,我们打开它,那么打开它,我们一会主要是修改这个原文件,那么我们把要修改的源代码,先进行一个备份,防止我们修改错误。

那么我们先找一下,那么我们一会修改的是这个原文件,我们先把它备份一个副本出来,然后我们就可以了找到它相应的文件,进行修改,那么我们双击打开这个文件,然后我们在里边搜索LilaXR这个函数,那么向上搜索。

那么最终将搜索到这样的一个函数,那么这个函数我们在里边的话,它就有关于制服的一个处理,在这里,Divide,那么在这里的话,首先它会判断它是否是一个空字母,然后判断是否是数字。

那么这个地方判断是否是字母,或一个下滑线,那么我们要添加的处理的话,就应该是修改了它的这一段代码,那么因为这一段代码就是我们的函数的,这一类的一个关键字的一个处理,它这里边也叫做我们的保留字,标识。

那么这里也就是我们的中文函数名,要支持它的话就要修改这里的代码,因为它这里有一个Save and Next,那么这个处理的话,因为我们的中文好像是两个字节,它要占的字节数。

那么这里它每次来只处理一个字节,那么如果是中文的话,我们应该是处理两个字节,好像是,当然这一段代码我也看的不是很懂,在这里我自己来参照网上的收集的代码,把它进行了一些修改,那么首先我们要自己写一个函数。

来读取我们的一个中文的字符的处理,那么首先在这里用一个红来对它进行了一个判断,如果 X大于了80的,我们就把它认为是一个0X80的,那么我们就把它认为是一个中文,好的,我们先把这一段函数先把它复制进去。

那么这段函数复制进去之后,我们把它添加到这个函数的前边的任意位置都可以,只要是独立在函数之外就可以了,好,那么我们先编译生成一下,看这个函数的代码有没有问题,那么添加进去之后。

前面的函数的功能就是处理一个中文的字符,那么实际上如果是中文的字符的话,这里我们就要执行两个SELF和NEXT,这样一个处理,那么如果是另外一种情况,我们只需要执行一次,那么如果不是中文。

这里对它进行一个判断,处理下滑线是中文的话,我们需要,需要调用两次,那么如果是英文和下滑线的,只需要调用一次,这个函数,那么这里它的一个结束一个条件的话,就是,循环的一个条件。

那么必须是这种三种情况之一,一个是它是一个下滑线,或者是一个我们的一个数字,那么或者在这里,它是一个我们的中文,好的,那么我们来看一下我们需要在什么地方,进行修改,那么这里一直往下找。

找到这个Define,那么这里我们说了,这里是空字符的一个处理,比如说我们的空格,还有退稿这类的隐藏字符,还有我们的对齐键,还是这个Table这一类的字符,我们看不见,不会显示的。

那么我们就在这里进行一个处理,那么这里是一个数字的一个处理,那么关键我们就是这里,这里我们要添加一个,那么这里我们都是进行的一个,过运算,那么这里来添加一个,Challenge Code。

那么取得它当前的一个相当于可能是一个字符,这一类的,那么添加了这个判断之后,添加中文,那么添加了之后,我们这里还需要对它进行处理,那么我们看到了我们刚才在上面有一个类似的一个处理。

写在我们的自己的函数里面也有这样的一个处理,那么只是我们这里边,它加了一个中文的一个判断的一个处理,还有这里的它的一个字符处理的一个形式,有一点不同,这里我们说的要掉两次。

那么既然我们在这个函数里面已经进行处理了,那么这里的读文就是一个多余的,那么我们就需要把这一行先把它注释掉,注释掉之后,我们把它替换成我们上面的函数,然后我们把LOS传进去,那么因为这个函数里面的话。

它就已经包含了这个功能,在我们之前的这里,它用了一个红来替换,因为红它又分为两种形式,它又分为两种形式,它通过预编译中文的这里的一个判断,然后写了两个条件分支,那么如果是不支持中文的话。

那么就直接是它以前的代码相当于给它还原了,那么这一段代码也就是我们这里注释掉的这一段代码,这两段代码是等价的,我们可以看到一个是下划线,一个是这里数字的一个判断,然后我们再看一下,这里是一个括号,好的。

那么我们首先来生成一下,看有没有错误,那么没有错误的话,大致上可能就应当是可以了,那么我们再来看一下我们前面的代码对焦一下,那么从前面的代码来看的话,应当是可以的,那么只是我们在这里已经判断了一次。

那么这一次判断我们已经在函数里面有一个判断了,那么判断的话实际上我们可以不要,应当是可以不要的,那么直接在这里把这一段代码替换成函数,应当就可以了,应当还是要添加上,那么是中文的时候才会执行到这里。

好的,我们再次的变异生成,那么生成的时候,我们在里面这里写一下中文的字词,给他加一个下滑线,然后我们看一下,静态库生成到,是到这个levelD的下面,那么我们把这里他设置的一个环境,电量复制到这里。

表示在我们的工程下面有一个levelD,然后我们重新生成一下,好的,然后我们打开这个levelD,那么打开之后,我们把这一个文件复制到我们的levelD里面,然后我们在release下面,这个配置下面。

我们这里给他改一下,点击调试这里,工作目录,我们用调试的工作目录,再加上这个levelR,表示是发布的版本,然后再重新生成一下,让他也支持中文的变量,好的,生成之后,我们再次打开,levelD。

插一个levelR,这里我们选择release,再重新变异生成一下,那么再次,我们切换到他的目录下面,这个levelR,下面我们这里加上一个CN,复制一下,复制到他的相应的目录下面,CN我们表示在这里。

我们表示中文,那么之前的这两个版本可以要也可以不要,这是一个中文的一个支持,那么改好了之后,我们进行保存,然后我们再切换到我们刚才的环境下面,对输入里面进行一下修改。

那么最好我们是切换到他的属性管理器里面,然后首先第8个这里,然后我们选他的链接器输入,R CN,这里是D CN,那么我们进行一下保存,那么再展开release,U132这里。

这里我们改成R CN附加像这里,那么其他的地方都可以不改,点应用,我发现这里好像是输入这里,改了之后,这个地方它会跟着变,所以说这个时候我们需要自己手动的再改一下,切换到解决方案这里。

那么我们在这里把它调为D的这个版本,重新再升级一下。

好的,然后我们再切换到它的目录下边,把它改为中文的脚本,再进行测试,这个时候我们发现中文的支持的话。

已经成功了,中文支持,这个时候,那么说明我们修改的代码起了相应的作用。

那么这期我们就讲到这个地方,那么我们下一期再见,拜拜,请大家以后在网上发表新的视频,我们会把新的视频和网站放在一起,大家可以去订阅我们的网站,我们会把新的视频和网站放在一起,大家可以去订阅我们的网站。

我们会把新的视频和网站放在一起,我们会把新的视频和网站放在一起,大家可以去订阅我们的网站,我们会把新的视频和网站放在一起,我们会把新的视频和网站放在一起,我们会把新的视频和网站放在一起。

我们会把新的视频和网站放在一起,我们会把新的视频和网站放在一起,我们会把新的视频和网站放在一起,我们会把新的视频和网站放在一起,我们会把新的视频和网站放在一起,我们会把新的视频和网站放在一起。

我们会把新的视频和网站放在一起,我们会把新的视频和网站放在一起,我们会把新的视频和网站放在一起,我们会把新的视频和网站放在一起,我们会把新的视频和网站放在一起,我们会把新的视频和网站放在一起。

我们会把新的视频和网站放在一起,我们会把新的视频和网站放在一起,我们会把新的视频和网站放在一起,我们会把新的视频和网站放在一起,我们会把新的视频和网站放在一起,我们会把新的视频和网站放在一起。

我们会把新的视频和网站放在一起,我们会把新的视频和网站放在一起,我们会把新的视频和网站放在一起,我们会把新的视频和网站放在一起,我们会把新的视频和网站放在一起,我们会把新的视频和网站放在一起。

我们会把新的视频和网站放在一起,我们会把新的视频和网站放在一起,我们会把新的视频和网站放在一起,我们会把新的视频和网站放在一起,我们会把新的视频和网站放在一起,我们会把新的视频和网站放在一起。

我们会把新的视频和网站放在一起,我们会把新的视频和网站放在一起,我们会把新的视频和网站放在一起,我们会把新的视频和网站放在一起,我们会把新的视频和网站放在一起,我们会把新的视频和网站放在一起。

我们会把新的视频和网站放在一起,我们会把新的视频和网站放在一起,我们会把新的视频和网站放在一起,我们会把新的视频和网站放在一起,我们会把新的视频和网站放在一起,我们会把新的视频和网站放在一起。

我们会把新的视频和网站放在一起,我们会把新的视频和网站放在一起,我们会把新的视频和网站放在一起,我们会把新的视频和网站放在一起,我们会把新的视频和网站放在一起,我们会把新的视频和网站放在一起。

我们会把新的视频和网站放在一起,我们会把新的视频和网站放在一起,我们会把新的视频和网站放在一起,我们会把新的视频和网站放在一起,我们会把新的视频和网站放在一起,我们会把新的视频和网站放在一起。

我们会把新的视频和网站放在一起,我们会把新的视频和网站放在一起,我们会把新的视频和网站放在一起,我们会把新的视频和网站放在一起,我们会把新的视频和网站放在一起,我们会把新的视频和网站放在一起。

我们会把新的视频和网站放在一起,我们会把新的视频和网站放在一起,我们会把新的视频和网站放在一起,我们会把新的视频和网站放在一起,我们会把新的视频和网站放在一起,我们会把新的视频和网站放在一起。

我们会把新的视频和网站放在一起,我们会把新的视频和网站放在一起。

我们会把新的视频和网站放在一起,我们会把新的视频和网站放在一起,我们会把新的视频和网站放在一起。

我们会把新的视频和网站放在一起,我们会把新的视频和网站放在一起。

我们会把新的视频和网站放在一起,我们会把新的视频和网站放在一起。

P171:182-为LUA封装调试函数dbgprint_mine - 教到你会 - BV1DS4y1n7qF

大家好,我是郁金香老师,那么这节课呢,我们嗯先注册一个调试函数啊,那么让我们的这个脚本呢,也能够打印一些调试信息,在这个第八个第八个view啊,里边呢来显示这些调试信息,那么之前的话我们也写个。

写过一个这个debug啊,point挺慢,但是呢,它是在这个动态链接库里面来调用的。

那么首先呢这一节课,我们先打开之前139克的代码。

那么打开之后呢,我们在这个跟代替单元栏,这里添加一个新的筛选器呃,取名为我们的ua脚本或者是脚本相关的,那么我们就在里面来实现,然后呢我们添加一个新建的项,摩根,然后呢再添加一个新建项图文件的,好的。

那么这两个添加进来之后呢,头文件里面当然我们也包含它相关的呃,一个头文件,啵啵,那么我们把之前的这个相关的这个,头文件呢,也包含到这个头文件的这一部分里面来,然后呢我们要写的这个函数呢。

我们也可以在前边呢把它前置一下,然后就是代码的这一部分呢,我们把这一段代码直接复制过来,然后呢我们来看一下它的一个大致的意义,好的,我们先编译生成一下,那么首先呢我们后边的这个函数呢。

我们需要呃前置一下哈,我们可以把它放到头文件里面,那么也可以放到前边啊,进行一下前置,那么另外呢我们还需要包含windows这个图文件,啊,好的,包含了windows的这个图文件之后呢。

我们就可以开始写我们的这个嗯,打印的这个信息啊,调试信息,lol的ur debug好换,那么在打印之前呢,我们,嗯需要先注册一个啊,环境变量,那在这里呢,我们把它写成一个全局的一个变量,好。

那么我们首先来看我们的这个打印信息的,呃,谈调试信息的这个函数额是怎么写的,那么首先呢我们取得它参数的一个个数啊,通过这个moon gt,获得参数的一个做数码传进来的,那么获取这个参数的个数之后呢。

如果参数的个数为零的话,我们就不用打印这个调试信息呃,那么如果这个参数的个数大于零的话,那么那么我们首先呢,把它转化成这个字符串啊,那么这这里注意,我们那这个脚本文件里边的这个传进来的,所有数据呢。

我们都是可以通过这个路啊,图出来进行一个转换的,无论它是否点类型还是整数还是自创啊,那么呢,我们都可以用这种方式来来进行一个转换,那么转换我们注意他,最后来返回到这个类型的话。

是一个concept恰的一个类型啊,这里,那么如果我们这里不用这个constant标记,那么呢这里是编译通过的啊,所以要注意这个标记,那么这个字串我们取出来之后呢,这里我们分配了一款这个缓冲区啊,嗯。

那么这个就是我们调试,调试信息计算的一个冲区,那么这个呢嗯可以把它定义的大一些啊,那么这里呢我定义为1000个,16进制的100个字节,那么我们取出来之后呢,我们就把它放到这个size啊。

s t r这个缓冲区里边,然后呢我们再从这个啊再定一个for循环哈,因为我们之前已经取了一个这个参数,数据了出去,那么这里呢我们从下边来从二开始循环,那么直接呢呃循环它的这个次数呢。

最终取决于它参数的一个个数啊,那么每次来只要它里边有这个参数啊,是这个数字的,或者是嗯这个字串类型的,那么我们在这里呢都给它,进行一个转换啊,那么转换了之后呢,我们放到这个csp这个指针。

指向这个缓冲区,然后呢,我们在后边呢给他追加一个字串,到缓冲区的地方,这里呢再把我们取得的参数来进行,追加到这个字串的后边啊,当然这里呢就有一点,类似于我们的40寸的一个操作啊。

就是复制路再次t2 加上我们的c s p r,相当于有这样的一个操作,那么这里呢添加了一个逗号的一个分隔符,好那么这个函数我们写好了之后呢,嗯我们还需要,当然它也需要有一个返回值啊,那么在这里呢。

我们最后来给他复习一个返回值,那么这里呢返回一个参数啊,这里给它一个返回值,那么这里呢用我们的alt或t8 个尺寸呢,打印出我们的这个调试字串,当然这个函数我们要使用的话。

我们还需要用这个lua regic,来进行一个注册,那么这里呢我们为了后边啊,其他的函数来方便注册了,我们定义了一个数组,那么这个数组呢,呃前边我们这里注册的是一个这个,ra ring的一个呃结构啊。

结构的一个数组,那么这个结构我们先来看一下,它首先是一个嗯函数的一个注册名,后边呢是一个函数的一个地址啊,是这样的一个结构,那么定义了这个结构之后呢,我们在前面呢我们注,意成呃。

注册为两个名字啊啊都指向同一个函数,当然我们也可以呢,再注册一个中文的也可以,好的,那么这里我们注册好了之后呢,一共有三个注册的函数,那么这里呢通过一个size of呃,这个取得它的一个字节的一个大小。

来除以这个结构的一个大小呢,最终能够获得这里边的,一个元素的一个个数啊,比如说现在的话,它元素的个数呢应该是等于三啊,比如说我们把这一行加上的话,应当是等于三,好编译成功之后呢。

我们实际上这里呢是i9 ,i9 的一个一个的注册方,当然还有一些比较简单的这个方法,比如说这个呢它可以批量的注册,这个结构化,那么这个是5。15的这个版本呢,他没有这个函数啊。

另外呢还有一个这个lol啊,logic他跟也可以来批量的注册啊,那么这一句的话,那么这一个语句呢,就相当于后面的这一个循环的一个注册法,那么现在呢我们就用这种循环的方式。

来一次的调用这个noa register,来一次的注入注册每一个这个函数,那么注册好了之后呢,我们可以来到mf c的这个界面,来进行相应的测试,那么这里呢我们添加两个按钮。

那么一个按钮呢是一个环境的一个初始化,那么另外一个呢我们就是do file,然后在这里呢,我们需要包含我们刚才的这个图文件,那么包含进来之后呢,我们先要做一个初始化,初始化它的一个指针。

那么有一个全局指针,刚才我们有注册,那么打开我们相应的机器库,然后呢我们需要来注册这个函数啊,我们在这里有写一个注册的函数,我们来看一下啊,当然这个注册的函数,我们也需要在头文件里面进行一下前值。

哈哈哈,那么注册好了之后呢,我们接下来呢就可以执行这个do file,那比如说我们这个名字是lua,testing啊啊testing lua,当然这个呢,我们必须要放在一个固定的目录下面。

比如说我们c盘下边的这个文件,那么或者呢,我们因为注入的动态链接库的话,最后呢它是当它的当前目录呢,是我们这个游戏客户端所在的这个目录啊,所以说这个文件呢也会呢,我们需要啊放到这个游戏的客户端。

这个目录下面啊,如果是用的相对路径,那么首先呢我们先编译生成一下,然后呢,他会说找不到这个相应的这些外部符号,那么在这里的话,我们改一下他的这个输入啊,输入,那么重新我们再生成一下,好的成功之后呢。

我们就注入到游戏里边,啊啊进行测试。

那么测试的时候呢,我们先初始化啊,挂接我们的主线程,然后呢do fire之前呢,我们需要切换到我们的性目录下边。

先写一个测试的啊啊,那么我们先写一个简单的,把这个test路过来。

复制到我们的游戏目录下边,当然你启动的是某一个客户端里,就复制在某一个客户端下边好的,那么我们把调试信息查看器啊打开,然后呢我们执行一下do fi,但是这个时候呢,我们看不到不振活的这个信息。

那可能是我们这里的有一个file,那么我们把它取消掉,那么或者我们在编写这个test vr的时候呢,我们在这里的呃,给它加上加上一个过滤头,然后呢我们再来执行to file。

那么这个时候呢我们就能够看到啊,我的调试信息啊,因为必须必须要有前面的这个前缀嗯,当然我们也可以在写这个函数的时候呢,加入我们的这个前缀,那么在这里呢我们可以取消掉,给它加一个统一的前缀。

那么在这里呢我们注意加字串的时候呢,我们嗯首先呢在之前就给他加一个这个,调试信息的前缀,啊然后再保存再重新编译生成,然后我们可以来把这个那调试信息的脚本,能且复杂一点,比如说a1 a和a b负责为。

那么c呢我们这就复制为一个常量,好的我们再次保存一下。

再次注入我们的动态链接库。

然后呢挂接到主线层啊,这个可以不挂机就可以了,初始化,然后呢我们看一下调试信息,那么这个时候的话,我们发现了他所有的这个调试信息的话啊,说出来都是正确的,那么我们再对照一下我们的脚本。

那么首先是这些变量啊的一个字串哈,这两个是字串类型的,这个是整形的,那么这个33123呢是佛点类型的,那么后边呢这里是一个场面哈,那么999这里呢也是一个常量哈,前面这个是整整形的。

那么后后边这个呢是佛点类型好的,那么这节课呢我们就讲到这里,那么这节课呢也给大家布置一个作业啊,大家可以下去之后呢,把这个。

把我们的寻路廓啊进行一下封装。

嗯,那么封装好之后呢,我们要求在我们的这个lua脚本里面呢,我们直接比如说我们写一个啊移动到,啊每一个坐标,那么我们就会直接的去调用,我们的这个寻路库啊,直接就会就会移到我们指,指定的这个坐标啊。

当然我们这里呢也可以用变量来表示,然后我们可以打印出我们的一些调试信息,嗯,好的我们的作业的话就是要求了这一段呃,脚本呢能够会正常的执行。

那么我我们再来看一下我们的这个呃代码,那么首先呢我们是需要了,我们是直接把我们新写的这个函数的话,需要呢在这个地方呢进行一个注册啊,注册之后呢才可以用,那么另外它的这个取我们的这个参数的话。

我们直接用这个撸啊啊,to lab就可以了,嗯,当然这个可以先参考一下,我们前边的代码啊,好的,那么我们下一节课呢将一起来啊,编辑这个寻路的这个函数啊,的这个脚本接口,那么这节课呢我们站起来,就到这里。

P172:183-LUA封装寻路函数FindWay - 教到你会 - BV1DS4y1n7qF

大家好,我是欲擒相老師,那麼這期我們一起來封裝一下,尋路函數,首先我們打開182克的代碼。

那麼首先我們轉到我們的Lua單元,在cpp裏面添加我們的尋路函數的代碼,那麼我們可以按照它的標準來寫一個,Lua的尋路代碼,Reget,那麼最後我們有一個返回詞,那麼如果是成功執行的話。

我們給它複習一個返回詞,那麼如果是成功,我們給它複習一個返回詞,當然在這裏我們需要先獲得,從我們的Lua腳本傳進來的參數,我們先獲得它參數的一個個數,那麼我們定一個變量。

Number來獲得參數的一個個數,通過一個函數LuaGetTable來獲得,那麼我們首先來對參數的個數進行一下判斷,因為我們如果是尋路的參數的話,至少是兩個參數多餘的,我們把它省略掉。

那麼我們需要了前面的兩個參數,X座標和Y座標,那麼所以說如果它的參數小於兩個的話,我們直接就返回,那麼直接返回的時候,我們給它返回一個數字0,或者是一個不認識,那麼如果是剛好參數的個數是正確的話。

那麼我們就把它轉換成我們的X和Y座標,那麼還有一個座標,它在它的位置在裏面的第二個位置,當然有了這兩個座標,實際上我們就可以調用我們的MSGFundXY,但是為了我們這裏的一個統一的規範。

我們都把相關的函數,我們在Lua腳本裏面調用的函數,都把它封裝在功能封裝的函數裏面,這個規範,那麼我們在功能封裝這個函數裏面,我們默認把它取名為FundCatal,Fcatal小寫。

那麼這個函數暫時還沒有封裝,我們在這個單元裏面進行相應的功能封裝,然後在CPP裏面,我們直接原代碼裏面,我們直接調用無線程單元的MSGFundXY,好,那麼經過封裝之後,我們點擊生成,那麼現在的話。

代碼的話看起來是沒有錯,然後我們再把剛才的出車函數,前置一下,在頭文件裏面,那麼這個函數,我們把它放在第一的位置,因為這是一個註冊函數,那麼這裏我們全部小寫了第一個字母,好。

然後我們對這個函數來進行註冊,到它的註冊函數裏面,那麼首先,這裏是它註冊的名字,也就是我們在編寫腳本代碼的時候,我們以怎樣的方式來調用它,這裏我們直接是移動到,那麼我們也可以給它註冊一個英文的名字。

好的,然後我們再次編輯生成,那麼這個註冊的英文名字,我們就把這個註冊的英文名字,給它註冊到這個英文的名字裏面,然後我們就給它註冊一個英文的名字,這個英文名字的註冊名字是,英文的註冊名字。

然後這個註冊名字的註冊名字是,英文的註冊名字,那麼這個註冊的英文名字,我們就把它註冊到這個英文的註冊名字裏面,然後我們切換到我們的遊戲的客服端目錄下面。

修改我們的腳本,那麼首先我們也輸出一個調試信息,然後這裏調用Finder位,比如說我們要移動到333,然後333這個位置,保存一下。

輸入成功之後先掛接我們的出現程。

初始化,然後我們看一下我們的調試信息,再看一下我們的人物角色,測試一下,那麼這個時候我們發現了,它就移到了指定位置的附近,但是沒有具體的移動到指定位置,那麼可能是指定位置了,它不能夠達到。

那麼我們看一下現在的位置大概是361230,1223,我們設定為目的地的地址,為這個地址再來測試一下。

那麼我們先移動一下,移動到這個位置,然後再做一個測試,那麼這個時候我們發現了,它可以移動到我們指定的地址,321220,那麼我們改變一下,看它對大小寫是否敏感。

然後我們再次移動一下。

那麼我們發現的話,如果是大小寫不正確的話,它也不能夠執行,所以說如果我們是註冊為英文腳本的時候,一定要注意大小寫。

那麼我們再次執行,那麼我們發現的話,是大小寫正確的話,它就能夠正常的執行,那麼我們再試一下中文的腳本,把上面這一行註實掉,那麼我們就用下邊這一個移動到,好的,我們再次測試,讀反了,那麼這個時候。

它也能夠正確的執行,最終到達我們的目的地地址,321220,好的,那麼這一節我們暫時就討論到這個地方,那麼我們下一節討論再見,那麼這幾個也跟大家佈置了一個座列。

那麼座列就是獲得當前的這兩個座標,那麼它的大致的函數的形式框架,我都跟大家寫好了,那麼大家自己需要在這個位置添加自己的代碼,那麼以及註冊函數,好的,那麼我們下一節再見,主要是我們這裡需要回傳這個函數。

那麼怎麼在我們的腳本端,把這個函數打印出來,好。

那麼我們下一節可能再探討,再會。

P173:184-LUA获取人物角色坐标GetXy - 教到你会 - BV1DS4y1n7qF

大家好,我是郁金香老师,那么这节课呢我们呃写一个获取人物这个坐标的这个脚本接口,首先呢我们打开183克的代码。

那么首先我们在他的头文件里面进行一下说明,按照统一的一个前缀啊个体,所以我们习惯,那么写好之后呢,我们移到cpp单元添加代码,我们把上一节课的这个代码呢把它复制进去。

当时是需要了在这个位置来添加我们自己的一个代码,当然现在我们这一部分代码呢我们还没有添加,那么我们要添加的话,实际上也非常的容易,我们一种很简单的方法呢,我们就是利用全局变量的变化,这个get代替。

然后呢它里面有一个当前的坐标,那么这是一种很简单的写法,但是这种写法呢它并不是很安全啊,嗯但是出错的几率也很小,也就是呃在因为只要不是挂机,在主线程的话,它都容易产生这种数据的一个冲突。

就是在主线程它还没有更新完这个坐标的时候,我们就去读取它,那么造成了我们读取的这个坐标来就不全,但一般情况下是不会出现的好,那么我们先用这种方法呢,嗯先进行一下测试,等一会让我们再讨论更安全的一种做法。

那么这里写好之后的话,我们就可以了,呃在前边的注册我们的函数,那么这里呢我们最好统一为小写啊,因为在书写脚本的时候的话,这个大小写的这个语法错误,它是根本就检测不到的。

那么所以说这里呢我们最好统一用这个小写,啊这样避免了一个大小写的一个检测,同样的前面这个函数呢我们也可它求一个小写啊,这样的话呃容易了避免一个错误,好那么注册之后呢。

我们也可以来给他注册一个中文的这个脚本函数啊,那么可以参照这前边的方法来进行一个注册,那么注册好了之后,我们就可以编辑申请这个解决方案,然后我们可以看到我们这里呢是给它定义了两个返回的参数。

那么这里呢我们是传入的一个x,这里呢我们传入的是y按照这种格式书写之后呢,我们在编写脚本的时候呢,我们就可以了呃。

与这个数字来对应起来,那么关于这一点的话,我们之前还没有做过相应的尝试,多个返回值,那么我们要获获取多个返回值的话,这里呢我们就可以了啊,直接在这里呢。

它的格式呢就是直接定义两个变量来获取它的一个返回值呃,这个时候就可以了,当然这个是一个全局的变量,我们也可以用一个no ko嗯,加上一个局部的一个变量的一个修饰符,也是可以的。

当然一般来说的话我们不用加这个修饰符,那么因为我们在后边如果是重复的运行,用到这个变量之后的话,我们再次定义的时候呢,前面的这个变量的话,它的作用域呢就相当于已经结束了啊,好的。

我们在这里呢编写了这样的一个脚本,那么我们测试一下啊。

注入到我们的游戏里角,首先呢我们需要挂接我们的主线程初始化啊,然后呢我们可以看一下现在的坐标的话是308308,那么我们看一下这个坐标是正确的还是错误的,那么这个我们发现呢呃他的这个作品的话是316啊。

那么是只获取了这个x坐标,那么y坐标呢没有正常的获取,因为我们这里传入的这个坐标的话啊,都是我们的x坐标,那么我们也就是说我们实际上有嗯也是正确的啊,因为我们这里代码输出的一个错误。

那么我们再重新编译生成一下,好的挂机主线程初始化,do five。

那么3161206啊,我们再移动一下。

再做34276啊,现在是1281bf啊,2761681,那么所以说这个时候我们取得的这个坐标的话,它都是正确的啊,当然这种做法的话也是可以的,从编写这个脚本来说的话肯定是可以的。

但是我们说的我们最好所有的这个代码呢,都要放到我们的主线程里面去呃执行,那么所以说我们在这里的话,最好是来给它在我们的这个功能封装的单元呢,给它封装一个功能函数,那么在主线程单元呢。

我们先跟他呃注册两个相应的这个函数,那么在获取坐标的时候呢,我们可以一次性的把它当成是一个数组啊,把它读取出来,我们可以添加这样的一段代码,那么首先来定义一个相应的,相应的这个消息,那么定义好了之后呢。

我们做一个前置的说明,那么这一段呢是在我们c p p单元里面添加我们的这个函数,那么这里呢它是一个一个智者呃,这个指针的形式传送进来,那么传送过去之后呢,我们需要在开始语句里边来给它添加这样一段代码。

找到主线程代码的一个处理,移到最后,那么这一句呢我们也就是先把它转换成指针,然后取它的第一个元素啊,往它的这个空间来写入我们的x坐标,然后写入我们的y坐标,在这个地方,当然还加上一个break。

好那么我们再次编译生成一下,那么这里我们添加了这个函数之后呢,然后我们到功能封装的这个地方呢,也添加两个函数嗯,可以分别的添加获取我们当前角色的x坐标和y坐标,啊加上我们的f前缀啊。

这个功能单元的我们都给它加上了嗯,然后我们在他cp p单元里面呢添加如下载代码,然后记得他的加上一个f的小写的f的一个前缀,用来进行一个区分,然后这里呢我们是定义一个数组嗯。

进去之后呢获得相应的这个坐标的一个数字,然后呢最后呢返回它相应的,因为这里呢表示的是零呢是我们的x坐票,一的话是存放的我们的y坐标啊,这个地方是按照xy这样来分布的好,那么这样书写之后的话。

我们这个如果单元的我们这两个语句呢,我们就可以另外一种更安全的一个写法,嗯嗯嗯,那么这样呢我们可以获得我们的两个坐标,然后呢把它相应的参数的一个个数呢一定要传送回去啊,这是返回值的一个个数。

因为呢我们获取坐标的话需要有两个返回值啊,那么所以说我们在这里写它这个脚本的时候呢,它这里呢也是用两个变量来获取他的一个反馈值,那么注意这一点的话,与我们的c语言的话是很大的不同。

还有这个point f的话,在我们动态链接库里边做测试的话,它基本上没有用,因为这个point tf呢它是将我们的这个控制台输出我们的信息,那么所以说在这里呢我们另外写了一个调试信息的函数啊。

用来打印我们的一些调试信息啊,这个x y的一个数值好的,然后呢我们再次嗯来进行我们的输出,那么重新编译生成一下,那么再次我们查看一下我们的xy坐标,那么2761281我们再移动一下啊。

现在是2201326,那么我们再来测试一下2201326,那么这个时候呢我们获取的坐标的话都是正确的啊,好的,那么我们这节课呢我们就讨论到这里。

P174:185-LUA使用物品函数接口 - 教到你会 - BV1DS4y1n7qF

啊啊,大家好,我是郁金香老师,那么今天呢我们一起,那么使用这个路修本来编写一个这个使用物品的函数接口,好的,那么我们先打开184克的代码。

那么首先呢我们展开我们的lua脚本的单元,那么在这里呢我们注册呃,先写一个使用物品的函数,哒哒哒,啊哒哒哒,然后我们转到cpp单元哈,添加相应的源代码,那么在这里呢我们需要来调用呃。

我们这个功能封装里面的相应的使用物品的函数,那么我们先给它一个返回值,那么转到我们的功能分状态里啊,在这里呢我们也写一个函数,那么然后在这里呢我们调用我们的m s里边的,因为go的分类。

然后直接返回它相关的呃一个数值,好的,我们先编译生成一下,那么我们在这个时候呢,我们再倒回来到我们的啊路啊脚本这里,那么在这里呢我们先要取得他这个物品的名字,因为我们在写脚本的时候。

肯定是以这样的格式来写啊,比如说我们就可能是使用物品,然后呢这里是物品的名字,咳咳那么一般会这样来调用,但是这个时候的话肯定要传传进来一个字符串啊,那么在这里呢我们需要来把这个字符串来取出来。

那么首先我们也是确定一下它参数的个数啊,ngpp好来决定这个啊函数啊,传进来参数的一个个数,那么如果这个参数个数它小于啊小于一的话,那么肯定呢我们就直接就返回,那么就返回一个参数,出新用途啊。

比如说这个时候呢我们突袭一个数值零或者是-1啊,这一类的,用来表示失败,那最后成功的话,我们也会给他传递一个参数,那么这个时候呢我们常用的参数呢是一个非零的一个数字,那么如果它的这个参数的话啊。

大于一个哈,呃或者一个以上,因为后面的参数呢我们都会忽略掉啊,我们只取第一个参数,那么这个时候呢会传送一个物品的名字进来,那么我们呃在这里呢先取得这个相应的这个名字,啧。

那么这个时候呢我们把参数把取出来,当然也可以就是说如果他有多个参数的话,嗯那么我们也可以来把多个参数来都取出来,连续的它可以一次性的使用几个物品的情况下,这个看怎么设计啊。

比如说我们也可以按照这种设计啊,four five,那么我们也可以依次取出它相关的这个数值,那么这里呢我们就用这个i来表示它,当然我们也可以在之前呢会判断一下它是否是一个字串的一个类型,嗯,咳咳。

那么如果不是字串流类型的话,我们仅记去了下一次的一个循环,那么四字处理的时候才会执行到这里,那么我们把这上取取出来,需要来调用一个功能函数嗯,那么功能函数在前面加一个f在这,好的在这个地方我们调用一下。

那么编译生成影响,好的,那么这个时候的话我们就把我们的这个物品使用的这个接口啊写好了,然后呢我们需要注册一下这个函数,然后我们把它移到前边这个位置,咳咳咳咳,那,么我们也给他注册一个中文的名字。

这样的话中文和英文呢它都是支持的啊,注意这个是英文的符号,所以这个我们注册的英文名字的时候呢,我们全部来呃让它小写,好的,然后再次便申请一下,那么上次之后呢,我们还对另外的一个地方来做一下修改。

来到这个主线程单元,对对这个获获取游戏句柄,这里呢我们增加相应的代码,那么很有可能就是说有时候我们嗯取得了这个游戏的机制,它过期了啊,但是这里呢它同样的能够读出相应的数据。

但是读出来的呢它有可能不是我们的主窗口句柄,那么说明这个时候的话,我们的这个机子的话需要更新,那么判断它是否是这个窗口句柄呢,我们可以用一个windows函数,就是windows啊来进行一个判断。

那么如果他最终获取的一个数值的话,复古为真的话,那么说明呢这个机子已经失效了啊,那么我们这里呢打印出一段调试信息,好的,再次编译生成一下,然后呢我们打开游戏。

8号,那么编译生成之后,我们这里有一个错误,我们看一下无法解释的符号,那么这两个地方的类型啊可能是不一样的,呃这里呢我们需要把它设置一下,那么再重新编译生成一下,好的,这一次呢我们运行。

这里我们要修修改一下它的调试目录,嗯嗯,好的。

好,那么我们再次输入一下代码,那么做了之后的话,我们也要挂接主线程哈,做一个初始化,然后需要到我们的游戏目录下边呢,写一个测试的呃脚本。

啊,那么这里呢我们以这个精装要小啊为例来进行一下使用,那么我们看一下背包里面啊金疮药,然后我们把调试信息打开啊,进行测试,那么这里呢我们发现呢就有一个错误说这个机子呢需要更新啊。

可能是由于我们游戏更新了啊,所以说相关的机制呢我们也需要进行一下更新,那么打开我们的机制更新的呃工具,那么在这里呢我们把最新的这个机制把它复制进。

那么再重新编译生成一下,然后挂机主线程啊初始化,然后呢,我们再次do file,那么这次的话应当是正确的使用了,我们切换到游戏里面,可以看到do file,这个时候呢会成成功的使用,然后我们还可以呃。

因为我们刚才写这个脚本的时候呢,嗯这里的话它是支持这个多个参数的,我刚刚才写的时候,那么后边呢我们还可以跟一个啊啊使用物品啊,人生或者再来一个金疮药中,那么这样呢我们就能够同时的啊同时来使用高物品,好。

那么我们再来看一下在do file,那么这个时候的话,我们看到这个人身和精装要小的话都已经使用了,但是这个金创药中的话没有使用,我们再来看一下,他只使用了一个金疮药小,还有一个人参。

那么我们再来看一下我们的脚本,呃金疮药中啊,呃人生,那么这里的话代码的话我们看起来是没有问题的。

那么我们再来看一下我们路网里边的这个代码,看一下它是怎么写,那么实际上在这里的话,我们返回值的话呃,可以返回为它相应的,这个使用物品的这个个数啊,然后我们再来看一下,看看continue。

那么可能是某一个呢它某一个参数呢他被判断为不是字串,还有它的这个下标的话呃我们应该是从呃一开始才对,因为从零开始的话,他就少执行了一次循环啊,感觉的话,我们再来看一下a接拉,下标应当是从一开始。

好的我们再来重新编译一下,再次来挂机主线程初始化吧,然后我们听到游戏里面看一下do fire之后的一个结果,那么这个时候我们发现了我们的金疮药中还是没有被使用,这个很奇怪啊。

那么我们再来看一下我们的脚本代码,金创药中,那么我们把人生移动到后边来看一下,再保存,在to five,那么可能是我们这个金创药中他的这个名字啊,使用错了,我们单独的使用一下这个金创药宗,看能否使用。

但是很奇怪的是,我们单独的使用这个金疮药菌的话,它也是可以使用的,那为什么在这里它不能够使用呢,大家,那么可能也是这个它中间没有一个时间的缓冲,或者是时间使用的时间的一个间隔太短了。

我们可以把这个金疮要小和金疮药中的位置来给它调整一下,再来试一下吧,那么的确是同一类看来呃,我们这个游戏的话,它对同一类的这个药品的话,可能有一个时间段间隔的一个限制啊,它不能够使用的太频繁。

那么在这里的话,我们需要给它加上一个sleep,再来试一下,金疮药中,那么这个时候的话只执行了第一个啊,第二个的话根本就没有,根本就没有执行,那么我们再来看一下它参数的个数是否对呃。

还有它是否执行到下边这个地方啊,嗯嗯,好那么我们继续再重新生成一下,那么挂机主线程初始化,然后我们执行一次,看一下它的调试信息,那么我们的调试信息的话,发现的话,这个路啊啊,相关的调试信息,既然没有。

那么可能是我们编译的时候呢,编译的不成功,首先我们再编译一次,那么重新生成一下,动态链接库没有卸载掉,我们再次卸载掉我们的动态链接库,啊再重新编译生成,八戒主线程说实话都怪我,然后再看一次精通。

要中精通,要小人生啊,三个都是执行道德,但是呢我们这里的话它只有一个成功,嗯这个是很奇怪的,那么我们再把这个时间给它加大一点,好那么我们再重新输入一下,化解主线成初始化合,那么金创药中和金创要小的话。

实际上呢都运行了,而可能是这个人设呢,现在他没有了,我们没有注意啊,我们到药药店来去买几个这个人生再做测试好的,那么我们再次测试一下,那么这个时候有了延迟之后呢,这三个物品呢它都能够正常的使用。

那么我们再次把这个延迟的时间给它去掉之后,我们看有没有用,那么再次挂接主线程初始化,再执行一次,那么再次执行的时候呢,我们发现这个金创要小的话呃,没有被执行,应当是从这一点来说的话。

他应当呢需要需要一个时间片才可以,而我们再来测试一下,单独的分开写这个脚本,那么在这里呢使用金疮药中,那么下边呢我们使用金疮药小,然后呢我们再使用人声再试一下,那么我们发现这个时候的话精通要小的话。

它依然啊不能够使用嗯,应当还是就是说两个物品在使用的时候呢,它需要有一个时间片,那么如果是执行过多的话,他可能就会呃就会被啊忽略掉一部分,然后比如说我们连续的使用这个人声,应当也是不可以的。

比如说我们连续的使用很多个人生,再来测试一下,那么这个速速度过快的话,它只能使用一个啊,它有一个时间的一个间隔,那么这个间隔的话应当可能通过分析的话,也可能能够呃找出呃相应的解决办法,那么大啊。

关键是看这个物品的一个使用的一个频率,它是本地检测的还是服务器来做的一个检测,那么在这里的话我们发现的话可能就是呃100ms左右的话,它应当应当是可以的,那么我们现在调主线程之后再来看一下。

嗯逛街九线程,然后呢我们再次执行,那么这个时候我们发现的话能够使用三个人生,那么证明的话它的时间的一个间隔的话大概是200ms左右啊,因为我们在这个la tastic里面的话啊,写的是,大概是七个啊。

需要使用七个人生,那么在这里的话,他应该是时间的间隔来,应该是呃服务器简单的时间间隔可能是200ms左右,那么在这样的一个时间间隔的话,它能够来重复的使用,好那么我们再次看一下。

那么这个时候呢我们能够使用四个人生哈,那么说明他的一个时间检测的一个间隔的话还要久一久一些,那么我们是测成300ms再来测试一次,啊。

那么这个时候的话我们发现呢他能够基本上七个人生呢,他是能够呃完整的使用1234567啊,那么在这个时间呢我们暂定为300ms,那么可能的话也可能是在200多到300之间,这个数字需要测试。

那么有空的时候呢,大家可以分析一下啊,这个呃物品是同一类物品的一个使用的一个间隔呃,它究竟是多少时间,看他究竟是本地的检测,还是那我们服务器的简称,那么这个要分析的话,思路也很简单啊。

在这里我可以说一下,那么大家可以直接调用这个呃发包来使用这个物品,就能够做一个相关的一个检测,那么如果发包它还有这个限制的话,说明他的这个检测的话肯定是在服务器上的啊,就过不了,那么如果是在本地的呃。

如果我们通过发包,他没有这个时间限制的话,那么呢我们可以直接利用发包呢来使用这个物品,好的,那么这节课呢我们暂时呢就讨论到这里。

P175:186-LUA封装使用技能接口 - 教到你会 - BV1DS4y1n7qF

大家好,我是郁金香老师,这节课我们一起用这个lua封装一下技能的接口,首先呢我们打开185克的代码,嗯。

打开之后我们先展开我们的这个lua脚本的单元以及功能封装的单元,还有我们的呃主线程单元,这几个单元要添加或修改我们的代码,那么首先呢我们在功能封装的这个单元添加一下相应的说明。

先在他的头文件里面添加一个技能使用的扣啊,在cp里边呢我们进行一个简单的调用,调用下mg qe和雷达这一个函数,那么移动到最后,那么注意了,但是我们这里是const加一个前缀啊。

但是这个过它没有添加我们相应的前缀,所以说在这里的话,我们为了通过编辑的话,正常进行一个编辑,在这里呢我们需要的呃呃进行一个相应的修饰,那么同样的影响到的还有这个函数,它的一个声明。

那么以及在他cpp里边的一个生命,好的,然后我们先编译一下,看有没有什么错误,那么这里呢我们还需要转到他的头文件进行一下修改,不然的话还会有错误,好的,那么这样的话我们在功能单元里面呢就封装好了。

我们的这个fu人scarefully,然后我们就可以在我们的脚本函数里面来进行调用,那么我们在脚本函数里边呢也需要在头文件里边呢给他注册一下啊,使用技能的这个空,当然这个名字的话可以自己修改。

然后呢转到c p p里面呢,我们需需要来添加啊,不下载这个代码,我们来看一下,那么首先呢我们也是与之前的函数来类似,取得参数的个数啊,如果没有这个参数的话,我们直接就返回了,然后返回一个数字零,这里是。

这,里是参数返回的,那么在这里呢我们取得啊如果有参数的话,我们就以字符串的方式来取得相应的这个参数,取出来之后呢,用这个指针的指向它的这个缓冲区啊,然后在这里的话我们呢呃对我们的这个扩了进行一个调用啊。

在这个地方,那么这里呢就调用我们的这个功能库,最后呢我们这里调用完成之后呢,返回我们的数值就可以了,那么实际上这个封装的话很简单啊,也就是我们把这里的参数取出来,然后传递给我们的这个功能参数。

然后这个功能参数呢再转到m s几啊,我们的主线程单元去执行,然后呢再通过我们的这个消息来啊,转发到我们的这个主线成立平去调用我们相应的一个扩,嗯再调用我们的这个f一到f 10里面的这个uk分类啊。

嗯好的,那么我们接下来呢进行一个测试,当然在测试之前的话,我们还需要来帮我们写的这个函数来进行一个注册,需要到我们前边这里这个地方啊,进行我们函数的一个注册,那么在在这里的话。

我们也可以来写一个英文的secure,啊可以注册两个啊,或者是两个以上的啊,当然自己喜欢用哪一种都是可以的,usq,那么写好了之后,我们再次编译生成,那么编译成功之后呢,我们需要了在写相应的一个脚本啊。

比如说我们这个里面的测试脚本呢,就是这个技能啊,逆天降魔好的,我们转到游戏的客户端所在的这个目录,然后在这里找到我们的这个脚本文件啊,进行我们的修改,那么我们在这里来使用这个技能,或者是用这个英文的啊。

uc去瞧瞧,好那么我们先选中一个怪物,然后呢我们注入我们的动态链接库啊,挂机初始化,那么这个时候我们可以看到它会使用这个对这个怪物来使用这个技能,那么我们再换一个,啊,这个时候好像是掉线的啊。

啊掉线断开了,那么实际上我们的测试呢是已经成功的啊,那么我们再次打开游戏之后呢。

再做一下测试,那么这次呢我们把上面这个注释掉啊,使用下面这个英文的usq啊。

注册的名字再来调用名字保存,然后呢再次注入到游戏领域,这个时候已经选中了一个怪物,挂机出现成初始化,那么我们可以看到它自动的啊使用这个技能,那么如果另外的选择一个怪物,在do file。

那么这个时候呢它同样的会使用这个逆天,比如说我们再测试一下这个逆天煞星。

保存一下,好的,那么所有的测试的话都很成功,那么其他的这个函数的话呃,大家自己的啊封装一下啊,这里呢主要是探讨的一个封装这种函数接口的一个方法,好的,那么我们下一节课了再见。

那么这节课呢也给大家留了一个作业嗯。

那么作业的话就是大家分装一个选怪啊,选怪的一个脚本的接口,那么这个函数的话,这个脚本的话要求呢就是我们选块,然后呢他如果是没有参数的情况下来,我们就自动血周围的任意怪物,那么如果是带参数的情况下。

那么比如说这里有挂也不一,那么这个时候呢我们有一个怪物列表,然后呢就需要按照前面的这个顺序来的,看一下优先顺序,那么要求要有这样的一个功能好的,那么这节课呢我们暂时到这里。

P176:189-封装功能函数-获得选中怪物信息(含必杀状态) - 教到你会 - BV1DS4y1n7qF

大家好,我是郁金香老师,这节课我们一起来封装一个功能函数呃。

获取选中怪物的信息,那么同时呢我们把之前的代码来做一些哈规范或整理,首先呢我们打开187克的代码。

哈。

啊,那么首先呢我们嗯添加这个必杀啊,怪物是否可以使用必杀技的这个状态呢,我们把它添加进去进去,同时我们把之前用到的这些偏移呢都把它定义为红,那么这样修改的时候呢,我们方便修改。

当然这个相应的红呢我们可以放在嗯头文件里面,也可以放在cp p这边,一般呢我们放在这个git代替这展开我们的功能结构单元。

找到,怪物的这个get到体制,怪物列表初始化,这,或者我们把这个红蓝就定义在它的结构的前边啊,这样也是可以的,好那么另外再定义一个这个怪物列表大小的一个红。

六,走,当然这个所谓的怪物列表里面呢,它也包含了其他的对象啊,所以说我们也可以说是呃附近的这个对象列表的一个大小,那么我们暂时把它定义为100,那么定义好了之后呢,我们这节课主要是写一个相应的函数啊。

呃来获取我们选中的这个怪物对象的一个信息,那么首先呢我们在嗯这个怪物列表达呃,里边哪天这个录音里面的结构啊,结构里边我们添加一个呃相应的这个成员函数,添加这个成员函数之后。

然后我们转到它个体代替的后边好先要修改一下呃,get对比这个函数,因为我们首先呢我们要替换这些相应的偏移,那么这个我们要把它改一下啊,那么这里我们全部用人的方式来表示。

那么这里我们要进行替换,同时呢我们还要添加一个层面变量,啊那么这个结构呢我们也把它改一下啊,当然实际上我们只加了一个啊,只是注释来看起来不一样,那么其他都是一样的好,那么这里呢我们添加了一个成员。

用来表示这个必杀技的这个状态啊,怪物是否可以使用这个必杀技,那么我们添加了这些状态之后的话,我们在get gt里面呢,我们已经可以了呃,获取这个使用必杀技的这个状态,那么这个信息我们获取了之后呢。

我们另外再编写一个函数,用来获得一个当前选中怪的呃,相应的一个信息,那么也就是这一段代码把它添加到我们的cp端元,那么我们来看一下思路,首先呢我们需要在头文件里面啊进行一个说明,啊对了。

这里我们用的是引用,这里我们需要用指针,那么首先呢我们是要获得我们当前选中的这个呃对象的i d,那么我们获取这个id之后啊,也就是这个i d,那么如果它是等于0x x f f这个f的话。

表示了我们没有选中任何的对象嗯,那么如果是选中了对象的话,我们继续执行后边的,当然我们还可以加上一个条件嗯,如果是,当然我们这要需要之后来做一个判断,就是看他是否它的这个类型呢,是否是这个怪物的类型。

如果不是怪物的类型的话,嗯我们也不能够也不能够返回正确的这个信息,那么所以说我们在这里的话,取出我们的这个啊,或者我们就是呃如果选中了这个不是怪物的话,我们在这里遍地的时候呢,我们会体现出来。

那么如果我们这里呢我们是对整个这个附近的怪物列表呢,初始化,初始化之后信息会存到这个呃对象数组里面,然后我们就骗你整个数组,看里边呢有没有我们选择的这个,那么如果是在整个列表里面找不到的话。

那么证明他不是啊,那么证明找到的呢不是我们的这个怪物啊,应该是其他的这个对象,当然我们这里还需要做一个判断,应当是要做一个判断才可,那么找到这个对象之后的话,那么这是我们对象的这个地址,那么对象地址呢。

我们家零四这个地方呢,嗯我们可以做一个判断,就是它的一个类型,啊,咳,然后我们把这个地方的数字来取出来,当然如果写的更细致一点的话,我们可以把它写成函数来获取这个类型。

那么这里呢我们也可以直接把它读出来啊,呃读出来之后的话,如果这个地方等于我们的0x或者一,那么这个时候呢我们表明的是怪会,那么否则的话我们就不是怪物,然后我们就返回,当他返回之前呢。

为了呃我们上边的函数啊,方便判断,那么我们在这里呢给他做一个win city,做一个初始化,那么如果他是是这个怪物的话,那么我们直接来复制这个对象啊,那在这个地方复制,好。

那么因为这里呢要读取到这个内存的信息,我们最好是加上一个异常的一个除了嗯,咳咳,222,好的我们再次编译生成一下,那么这里的话基本上我们就封装好了,那么但是呢我们需要在脚本里边啊。

这些进行调用的时候的话,我们肯定要在主线程单元单元啊,封装另外的函数,那么这里呢我们在主线程单元呢也可以进行相应的封装,那么首先呢我们是听一谈相关的这个消息,然后呢再次定义啊相关的函数说明。

然后这里呢我们把消息的传递进去,传到我们的这个窗口过程里面,然后我们需要在窗口过程里边呢来处理我们的这个消息,那我们看一下这段代码怎么写。

那么首先这里涉及到这个结构呢,需要放在这个case的外边啊,放在里边的时候呢,它便一通不过,好那么这个时候呢我们在这个回调函数里边啊,也就是我们的贺口啊,主线程里面呢我们调用呃相关的这个获取选中。

怪不得这个信息,那么这个信息来最终还是需要传递一个结构进来啊,那么在这个信息我们处理完了之后啊,在这里呢我们可以做一个呃相应的判断,那么我们这里呢是通过它的这个对象地址来判断的。

如果没有正常的获得他对象的地址的话,它让这里来返回的将是呃,这个门设计设置的这个数是零啊,那么如果他这里数值不为零的话,证明了我们调用这个函数成功了啊。

因为我们这个sdm message symmessage这个函数的话,它本身的这个返回值的话,不是从我们这个地方来获得的啊,不是不是这个这个地方的返回值,那么所以说我们需要另外的方式来来进行判断,好的。

那么这里我们封装好了之后呢,我们再到我们的功能单元来进行一下封装,那么这个只是写一个简单的接口啊,非常的方便,就直接调用一下我们这个主线程单元的函数就可以了,因为这里呢不需要添加其他的功能。

但是我们在这里写一次之后呢,以后我们要调用的时候呢,全部就到这个图文件里面来找我们所要的这个功能函数,那么就不用去调用其他单元的这个函数啊,那么在这样的话呢,那么甚至呢我们可以把它写成一个内盘啊。

这样的话调用起来的话会更加的方便,那么也可以写成一个静态的类啊,通过一个全局的一个静态类的来访问里面的这些函数嘛,好的,那么编译成功之后呢,我们接下来呢呃先进行测试,那么这里呢我们需要先定义一个结构。

然后把它的这个相应的地址传送进去,你的枪,然后对它进行一个判断,这个时候那么如果调用成功的话,我们就打印出它相应的这个信息,如果没有成功的话,我们打印出另外的一段调试信息,关注,呼呼呼。

好的我们再次编译生成,然后测试一下,二。

那么这个时候呢我没有选中这个怪物对象啊,然后我们选中一个这个时候再测试啊,那么它相关的这个信息呢就会显示出来,当然我们呃上一节课所分析的呢,也就是它的一个呃必杀技的一个状态啊。

那么下一节课呢我们再根据这个呃选中怪物的对象呢,来自动的调用这个必杀技啊,那么这也是这节课的一个作业啊。

大家下去演示一下,就是说加上这个自动使用这个必杀技的人这个函数啊,助力,好。

的。

P177:190-LUA接口封装-延时函数-等待函数 - 教到你会 - BV1DS4y1n7qF

大家好,我是俞其鑫老師,那麼在這一期。

我們簡單的封裝一個Lua延時的一個接口,有時候我們要用到等待,類似於Sleep的功能,在我們的腳本裏面,那麼我們也需要一個等待的時間。

比如說是放技能,或者是其他的一些操作,那麼延遲等待的功能的話。

我們用的比較的多,首先我們打開189克的代碼,然後我們直接展開我們的腳本單元。

在這裏添加一個等待的函數,接著我們就開始做一個Lua的接口了,接著我們就開始做一個Lua的接口了,那麼首先我們對它的參數的個數來進行一個判斷,那麼如果沒有參數傳入的情況下,我們給它默認的等待100毫秒。

直接調用我們的Sleep函數,那麼如果是另外的情況的話,我們就接著執行後面的操作,接著我們就開始做一個Lua的接口了,那麼我們就開始做一個Lua的接口了,那麼如果是在後面我們有一個參數的情況下。

我們就取出參數的數字,那麼或者是直接調用Sleep,Lua推進,那麼這個接口寫好之後,我們把它註冊到相應的環境裏面,那麼在註冊的時候,我們可以寫成小寫的,全部我們小寫,或者是等待或者是延遲,都是可以的。

好的,那麼註冊好了之後,接下來我們進行一下測試,首先我們編寫一個相應的腳本。

Test Lua,比如說我們編寫這樣的一個腳本,一個自動攻擊的這樣的一個循環的腳本,那麼在這裏我們需要等待一段時間,另外我們給它定一個全局的一個變量,用來計數,好,好的,那麼我們接下來測試一下。

那麼在這裏了,我們首先掛接我們的主線程,那麼這個時候來顯示我們的機子來需要更新,那麼我們首先更新一下我們的機子。

然後把相應的機子的生成的同文件複製過來,再重新編輯生成一下,那麼從這個時候來看的話,我們的腳本應當是沒有執行成功,我們再來看一下,打印調試信息,那麼我們這裏是輸出調試信息,這個相應的函數沒有註冊。

然後我們把腳本改一下,好,但是這個,(音量注意),(音量注意),(音量注意),(音量注意),(音量注意),(音量注意),(音量注意),(音量注意),(音量注意),(音量注意),(音量注意)。

(音量注意),(音量注意),這個動態面積庫,現在之後我們再重新編譯一下,好的,我們重新測試,這個時候它會執行到開始掛機二這個位置,我們看一下,說明這個地方它已經執行了,但是在後邊這一段的腳本,因為沒有。

所以說它不會被執行,那麼執行到這裡出錯了,我們寫的腳本出錯了,所以說它不會接著執行,那麼我們再重新執行一下,那麼這個時候它就會顯示,我們看一下,相應的數字,它會用每個一秒的時間重新的執行一次。

但是這個時候我們可以循環的輸出相應的信息,那麼在這裡我們可以看到每隔一秒鐘的時間,它會打印相應的調試信息出來,說明的我們的功能的話是完善的,但是這個時候執行的話,我們的相應的窗口。

它由於Sleep的一個阻塞,所以說它會停止,停止響應,那麼這個時候我們要解決這個問題的話,我們就需要把它放到一個單獨的線程裡面,來執行我們的腳本,那麼也就是說我們這一句代碼需要進行修改。

DoFile也就是執行腳本,我們需要放在一個獨立的線程裡面,那麼我們先把這一句注釋掉,在這裡我們給它創建一個線程,(音樂),(音樂),(音樂),(音樂),(音樂),(音樂),(音樂),(音樂)。

(音樂),(音樂),(音樂),在Define的話,我們就把它放到獨立的現場裏面來執行,當然這裏我們簡單的討論一下,在後面的這個過程裏面,我們再深入的來討論,怎麼控制這個現場,這幾個我們就先測試到這裏。

我們再次打開遊戲測試一下。

同時我們修改一下腳本,這裏剛才是0。1秒,這個時候我們改為2秒的時間,(音樂)。

這時候我們就要來測試一下,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試。

我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試。

我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試。

我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試。

我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試。

我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試。

我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試。

我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試。

我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試。

我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試。

我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試。

我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試。

我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試。

我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試。

我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試。

我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試。

我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試。

我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試。

我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試。

我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試。

我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試,我們先打開遊戲測試。

我們先打開遊戲測試,嗯,好,大已终于拿到了。

P178:191-LUA接口封装-自动释放必杀技 - 教到你会 - BV1DS4y1n7qF

大家好,我是俞其鏘老師,這一節課我們一起來工裝自動四方必殺技的函數,首先我們打開190克的代碼。

然後我們展開腳本單元,那麼我們在這裡需要做一些準備,那麼我們上一節課我們編寫了一個自動四方必殺技的這樣的一個函數,那麼這一節課我們主要是封裝一個接口,然後來做一個測試。

那麼首先我們在同文件裡面添加腳本的接口,然後在我們的cpp文件裡面添加我們相應的代碼,那麼我們在這裡需要做一些準備,然後我們在這裡需要做一些準備,那麼在前面我們還需要另外的使用一個功能函數。

在這裡封裝一個簡單的在功能函數的模塊,那麼這個函數我們主要就是通過判斷的一個,先獲取一個當前選中怪物的一個必殺技的一個狀態,那麼如果它狀態可用的話,那麼我們就使用必殺技,然後來返回一個相應的一個數值。

那麼我們現在來看一下這個狀態吧,好的,我們再來看一下我們封裝的代碼的邏輯,那麼首先我們是取得當前選中怪物的信息,然後我們判斷這個怪物是否可以使用必殺技,那麼如果可以使用的話,我們就調用相應的技能。

把必殺技的名字傳進去,這是必殺技的名字,那麼如果使用成功,那麼返回一個真實,好,那麼這裡封裝了這個函數之後,我們接著來看一下我們這個路網接口的函數的封裝,那麼首先它會使用腳本的時候。

它會以這樣的形式來調用,比如說使用必殺技,某一個必殺技的名字,那麼使用之後的話,在這裡的我們就需要來取得它參數的個數,那麼如果參數的沒有傳遞參數進來,那麼在這裡我們就直接就返回一個假,假是吧。

只返回一個參數,那麼如果是另外的情況,我們就取得必殺技的名字,然後在這裡我們調用使用必殺技的功能函數,那麼如果是使用不成功,也就是說或者是沒有選中怪物,或者是怪物沒有達到使用的要求,它沒有提示。

沒有發光,那麼我們就在這裡來返回一個Fans,那麼另外一種情況我們就肯定就是使用成功了,那麼我們返回一個真實,然後這個函數寫好之後,我們在前面這個地方註冊一下,好,然後我們編譯生成,那麼這樣的話。

理論上我們就能夠自動的進行判斷,我們大部分功能都在C++裏面來實行,當然我們也可以有另外的一種方式,把我們的這些條件暴露出去,那麼我們直接來就調用技能使用的函數來調用它。

比如說我們把相應的條件判斷的這些條件的數據暴露給我們的路亞接口註冊成,然後我們在腳本裏面判斷,然後調用我們的技能庫,那麼這也是可以的,那麼但是我們如果是腳本是給一般人使用的話。

我們建議把腳本設計的簡單一點,邏輯部分全部在C++裏面來實現可能要好一些,當然我們現在是為了做一個交流,就是說討論一下這個路亞的這些功能,邏輯的主要是為了探討學習,好的,我們來看一下,那麼註冊好了之後。

接下來我們就進行測試,比如說我們寫了這樣的一個循環,那麼這裡比如說等待兩秒鐘的時間,或者是一秒鐘的時間,這樣可能好一些,那麼我們或者就在上一節課的腳本上面進行一些更改,然後來做一個調試。

那麼這個循環的話肯定也就是我們在路亞腳本裏面來實現的一個自動打怪,但是它有一個弱點,也就是什麽,就是不能夠控制它,暫時不能夠控制它什麽時候結束這個循環,當然這個疑問我們就成是作為一個作例。

大家下去思考一下,那麼我們現在做一下測試。

然後我們到我們的腳本裏面開始進入,那麼在這裏進行一個修改,那麼修改了就是增加一個使用必殺技的這樣的一個功能,那麼首先我們選中怪物之後,我們就首先來判斷一下是否需要使用必殺技。

那麼我們還可以來給它定一個變量,那麼是否成功的使用了必殺技,以下是翼手我們體驗結果,(遊戲畫面),(遊戲畫面),(遊戲畫面),(遊戲畫面),(遊戲畫面),(遊戲畫面),(遊戲畫面),(遊戲畫面)。

(遊戲畫面),(遊戲畫面),當然這段代碼,因為我們現在還沒有跟它設置一個,循環結束的條件,理論上,這段代碼暫時不會被執行到,好的,我們來測試一下我們的腳本有沒有問題,(遊戲畫面)。

從這裡來看的話。

它應當是被執行,但是由於周圍沒有怪物,所以說它沒有,選中怪物,沒有進行打怪,那麼我們找到一個地方,(遊戲畫面),那麼而且從這裡來看的話,可能我們的,這個腳本,還有一些問題,那麼只是我們執行到。

開始掛機這個地方,但是後邊這裡的話,好像是沒有被執行的,我們可以在這個地方,找到一個地方,(遊戲畫面),(遊戲畫面),(遊戲畫面)。

我們來看一下註冊時候的名字,使用B12級,那麼在這個地方,我們增加一個,調試信息的,判斷,(遊戲畫面),好的我們退出來之後呢,重新,生成一下,(遊戲畫面),然後再次呢,嘗試,掛機主線程,初始化。

然後讀份,那麼我們看一下有沒有,這個時候好像自動的在,這個時候,自動的在執行,這個時候成功的使用了,一次必殺技,只要怪物的狀態,顯示了就自動的使用了一次,(遊戲畫面),這個時候我們可以看出來。

它是成功的,使用了必殺技的,當然剛剛才已經把這個,腳本的結束退出了,好的我們來看一下,調試信息,那麼每次它都會,自動的進入我們的,User Skill,自動的使用,必殺技的這個Core裡面。

然後在這裡呢,我們的這個,怪物的,必殺技的狀態呢,它就是有了這個狀態之後呢,使用了一次我們的,必殺技,那麼而且這裡它顯示出了,是在多少次的時候,也就是一個技術,在我們這個,Lua Testbook裡面。

那麼因為它每次會+1,開始掛機,但是沒有,執行到這個,因為這個現成的是被,直接的結束掉了,那麼所以說後邊的這一段代碼,它實際上不會被,執行到 但是這種設計的話,不是很好,那麼所以說我們在這裡來給。

大家一個助力 也就是說,那麼我們怎麼樣來控制,我們Syjia那邊,怎麼樣來控制,這一個循環的,退出 或者說,怎麼給它一個條件,讓它知道我們,需要退出這個現成,需要退出這個循環,好的 那麼我們下一節。

再接著來討論這一類的問題,那麼這一節,我們暫時就到這裡,(音樂),(音樂),(音樂),(音樂),(音樂),(音樂),(音樂),您bling bling 你bling bling,和您的愿望。

祝愿对藍莓还有大家 过愉快的一年。

愿意 过愉快的一年,祝愿我们的家人 共同渲满,因此希望,祝愿我们的家人 共同渲满,人们选择的良圣的幸福。

祝愿我们的家人 共同享业,祝愿我们的家人 共同享业。

為民主,立法也。

P179:193-封装LUA使用物品的接口 - 教到你会 - BV1DS4y1n7qF

大家好,我是郁金香老师,这一节课我们一起来编写物品使用的接口。

首先我们打开192克的代码。

然后展开我们的lua脚本单元,在这里呢我们添加相应的接口,因为在之前的话我们已经有一个使用物品的函数啊,在功能封装的单元,那么在这里呢我们直接添加相应的接口就可以。

那么首先呢我们在这里呢呃判断我们传进来的参数的数量,然后如果这个数量小于厘米,就是没有传递参数进来的话,那么我们在这里呢就退出啊,那么如果有参数传进来,我们先取得这个参数呃,当然也可以做一下判断。

看它是否是我们的这个字符串类型的嗯,那么在这里呢我们把它转换成我们的字串啊,直接转换啊,然后来调用我们的物品使用的这个功能,那么调用成功之后呢,我们给它返回一个增值啊,如果这里没有传递参数呢。

我们给它啊,我一个呃vs,那么简单的话就是这样啊,然后呢我们需要在这个region reaction这里来添加我们的注册接口,那么这样的话我们就编写好了一个相应的使用物品的一个接口。

那么接下来呢我们就可以进行相应的测试。

那么首先我们转到游戏所在的这个单元啊。

它的这个路径,然后呢在这里呢我们修改和motxt,那么在这里呢我们调用,比如说我们要使用这个金疮药这一个物品,那么我们就在这里来写入相应的这个脚本,然后呢我们做一下测试,跨界主线程啊。

初始化to file,那么这个时候我们看到就能够使用我们相应的这个物品,那么比如说这个野山参啊,在这里呢我们也可以改一下啊,嗯嗯嗯嗯嗯。

然后我们再调用我们的脚本啊,那么每调用一次来,这个时候呢我们就会啊使用一次这个野山参啊,那么实际上很简单。

因为我们之前呢已经把这个相应的接口函数了,已经封装好了,那么这里呢我们只需要给它呃转换一下我们的参数,然后呢嗯把我们的路网脚本里面的这个参数呢把它转换过来,然后调用一下我们的功能函数,那么就可以了。

那么其他的功能函数呢我们都可以用类似的方法来完成,那么但是呢这里另外的一个问题,那么也就是说我们在编写脚本的时候啊,比如说我们在这个写脚本的时候,肯定我们不可能说每一次循环打了怪之后呢。

我们就使用一次这个物品,那么我们需要给它加一个条件,在什么样的情况下才使用这个物品,比如说我们的呃使用金疮药的时候,那么我们的这个呃当我们的hp这个选值低于某个数字。

那么或者是当我们的这个嗯它所占的这个百分比啊,hp也就是它的由我们最大血量的这个百分比低于多少的时候,我们在使用某一个物品,那么我们使用这个野山参的时候呢,我们可能也要做一些判断。

判断了我们的这个当前的呃mp啊,也就是这个蓝的这个数值低于某一个数值,或者是低于某一个百分比的时候呢,呃我们才使用,那么这个的话我们呢嗯可以了。

把另外的函数或者是把本身我们人物角色的这个数据来把它套出来啊,让我们的这个脚本呢呃来访问这些相关的数值,那么这样的话我们的脚本呢将更加的灵活啊,当然这个是针对了比较专业的这个人员呢。

我们才提供这么多的这个数据啊,啊套出到我们的这个la脚本里面,那么如果如果是一般的情况呢。

我们只需要呃把我们这些功能集成在我们的这个函数里边,比如说在这里边我们就给它添加了这个相应的条件啊,但是这样的灵活性没有这么大啊,嗯那么我们下一节课呢再一起来探讨一下啊。

怎么来套出我们人物角色的这些状态啊,比如说我们的h p m p这些数字啊,呃那么这节课呢我们就就到这里。

P18:029-完善自动打怪功能 - 教到你会 - BV1DS4y1n7qF

大家好,我是郁金香老师,那么在上节课我们选会的时候,一个判断的如果只加一个当前的这个选中的id,是不是等于这个max f f呢,那么它的判断呢并不是很准确,那么如果我们选中的是玩家。

或者选中的是我们自己,那么这个id的话,那判断它就不会这么准确了,所以说我们还需要加上一个判断,其实我们要需要判断的是当前选中啊的这个对象,它的一个类型究竟是不是怪物了这个类型。

那么这样结合起来判断的话,才能够完善这个选外的一个功能,那么我们把第28块的代码打开。

啊,那这个时候呢我们再打开游戏的结构啊,我们再来一个玩家这个对象,角色对象里面呢,我们再添加一个函数,用来获取当前的返回类型,那么需要这样一个函数,那么这个函数呢实际上它就是用来帮助我们的对象地址。

加上max 8这个地方它的一个类型,那么如果是怪物的话,它最终的法国在我们就是里面开始日益这个好的,那么大概的原理我们知道了,我们看一下该怎么添加我们的代码,写到最后。

那我们先定一个变量用来获取这个法复制,那么最后呢我们放这个微型,那么这个类型的话我们需要有一个步骤,这个我们也需要读一些路程地址的一个操作,那么我们加上一个异常的一个处理,哈哈哈哈。

那么在这里呢我们需要几个步骤,那么首先呢,我们根据当前选中的it其他整顿的对象,那么这个我们需要用到呃,用到一个相应的一个机制,这个这个所有对象数据,那么我们首先我们第一,这样我们就取出当前的id。

当前选中这个,那么我们要先去,那么当前选中了这个id的话,等于在整部的角色啊啊初始化,初始化取出我们当前选中的,然后取出来之后呢,我们再用来获得我们当前选中的对象,那么当前选中对象我们都知道有一个公式。

那么在这里呢我们在第一个片面,如果去掉当前的对象的时候,就指定,那么它加上四乘以我们当前的这个i p,数组的下标也就40,那么取出了这个对象之后呢,我们呃还要取他的一个类型,那就太多,这不。

再加上max 8这个位置,然后我们取出这个地方呢,就是取出了相应的还有一个类型,然后呢我们看就可以了,如果出现了异常的话,当然了,这里就发挥啊,回答的是五零,那么有了这个判断的话。

我们上一节课的那一个选中啊,怪不得这个扩自动打怪了啊,就相对就完善了,那我们接下来进行一下测试,那么这个加八这个的偏移以后,我们用的地方比较多啊,为了防止这个游戏更新之后这个偏移发生变化呢。

我们把它把它放入,放到这个加八,这个我们用一个门外表示,我喜欢这,那么我们专门可以定义一个偏移的一个单元来存放这个红,我之前呢我们的这个偏移呢都是集中放在这个相应的初始化函数里。

那么我们也可以想一下思考一下这个呃这个标志我们放在哪啊,这个地方好一些,那么我们暂时的放在这个结构的条件里,暂时放在这里,好,的再编译一下,那么现在我们就更改我们自动打怪的这个地方。

那么这里呢我们就要做一个其他的一个判断,那么在这里呢我们就把这个选中类型的这个判断呢,是否就是说是否没有选中呃,没有选中对象的这个判断呢,我们加杠刚才的那个函数里面,哈哈哈,那么在这个地方。

我们在这还有一些代码,这个上一节课我们这里应该有一个相应的一个bug,应该是get到的答复,这是这个选中的这个,当前群众的id,然后再做一个相应的一个判断,那么如果它是等于这个的话。

我们就直接返回的类型的话,这个时间是一个空啊,这直接因为他这个时候是未选中对象,那么所以说我们把给空把封就行了,那么在这里的话,我们直接怎么判断呢,就直接判断,就调用我们下面的这个函数,gcc态度。

那么直接调用这个函数,我们要进行一个判断,判断呢它是否等于它of master,也就是说是否等于怪物啊,那么如果我们等于这个怪物的话,等于怪物的话,我们就继续啊,实行这个工期就可以了。

就直接使用功能就可以,那么如果不等于怪物来,我们就不等于一的时候呢,我们才进行一个选块的一个操作就可以,那么不是选中了怪物的话,那么我们就进行旋转,然后进行攻击,那么如果他选中的本身就是怪物。

那么这一句呢就不会执行,那么就继续攻击当前的这个怪物,这样就可以了,这样变异形。

好的,那么我们输入到游戏里面进行一下测试。

挂进我们的主线层,然后把游戏调出来看一下,这个时候我们是选中的是自己,那么如果我们上不做今天的一个修改的话,那么他判断的时候呢,它始终就是攻击自己了,就没有效果,那么这个时候我们再点击一下。

我在出现成功,而可能是刚才编译没有成功,那么我们选中自己的时候,他同样的呃没有更改啊。

没有去选择这个怪物,那我们再来看一下我们的逻辑啊,那么首先这一句可能他就没有不执行,再重新再编译一次,好那我们再来测试一下,同样的我们是选中的是自己啊,挂机到主线程啊,这个时候就可以了。

刚才我们编译代码的时候呢,呃没有编译成功,应该是代码没有更新,那么这个时候我们可以添加到定时器或者是线程里面,就可以自动打快了,就可以自动打怪,好的,那么这节课呢我们就讲到这里,那么我们下一节课再见。

P180:194-LUA获取人物信息 - 教到你会 - BV1DS4y1n7qF

大家好。

我是郁金香老师,那么这节课呢我们来探讨一下,怎么在路网脚本里面获取我们c加加里面的,或者是嗯游戏里边的这个人物的信息。

那么首先我们打开100,93克的代码。

我们在全局变量单元里面呢,我们有一个什么属性的这个全局变量,那么这个变量里边呢,呃这个结构变量里面呢就包含有我们人物的这个属性,那么我们直接在脚本单元里面啊,封装一个这样的函数。

获取我们人物信息的这样一个函数,然后我们在cp p单元添加如下的代码,我们先做一下测试,那么这就是我们返回的一些数据啊,你空了有六个返回值,这里,那么这里返回数值之后,我们需要注册一下,获取人物信息。

获取人物信息,然后注册我们的函数,当然这里呢是先做一下测试啊,那么这里我们套出了这个函数之后呢,我们就可以来编写相应的代码来获取我们的这个信息,那么简单的这个脚本的话,我们可以写成这样的形式啊。

比如说这一行,那么我们这里呢因为返回了返回了六个参数,那么在这里接收我们这个相应的返回数值的时候呢,这里呢也需要六个参数啊,比如说a b c d e f6 个参数就可以了,好的我们把这一段调试信息。

那脚本呢写到我们的游戏所在目录。

然后我们保存一下。

然后化解主线成初始化,我们执行我们的代码,这个时候我们执行代码的时候,我们可以看到了呃,可能是某个地方我们写错了啊,他们造成它没有相应的这个信息的输出,获取人物信息,我们看,这个注册的名字对不对。

获取人物信息,然后我们再重新编译生成一下,1234,456个,初始化我们再来看一下吧,这个时候我们就能够输出我们相关的信息了,呃那么这里接收到的这个信息呢,我们这里从脚本里面可以看到。

那么输出的调试信息呢,分别就是我们的对应的几个参数,123456啊,包括这个角色率,它也就分别的存存放在这几个变量里边,那么在这里的话我们就可以替换为我们的人物的这个相应的属性值。

那么比如说我们也是同样的返回六个数值,那么我们返回的是把这个代码进行一下替换,那么在这里呢我们先初始化,这用个体代替呢初始化我们的人物信息,然后呢返回我们的当前的hp,hp的最大数值m p啊。

还有我们的嗯,这里呢应该是mp魔力的这个相应的数值,下面是金钱啊,以及我们人物的名字,那么注意金钱这一项呢,我们要用number,为什么要用number来,因为这一项的话,我们是八字节的。

那么如果我们不用这个number这个类型的话,我们就当这个钱的数额巨大的时候呢,那么我们就显示不完全,因为它的这个number的话在里边呢,实际上它是定义的double的这个类型,恰出来也是八个字节。

那么所以说只有了啊,不能够用我们的这个樱桃卫星,如果用我们的这个int类型的话,那么它传送信息进去的数据呢就是罗网银头,那么只有四个字节啊,这个路英雄呢只有四个字节,啊这里是w64 的,如果是六四的话。

也也可以直接用这个也是可以的,当时没有注意,那么直接不行,可应当也是可以的,它的这个整形的话是64位的,好像是好的,那么我们继续测试,那么首先呢我们挂机主线程啊,初始化啊,测试一下。

那么这个时候呢我们可以看到最后一个呢是人物的名字,那么这个3294呃,这个就是人物的金钱的数量,那么前面呢这里是当前血量的,当前血量,血量的上限378是我们的相应的这个p的这个数值,我们来对照一下。

对不对,那么我们这里能够看到3229496429了,这个就是我们金钱的数量,那么前面这个10071007,分别是当前局血量和当前的这个呃mp以及mp的这个上限。

那么所以说这样的话我们就能够得到这个相应的信息,那么有了这些信息之后呢,我们上一节课的这个问题呢就可以解决了啊,你们就可以在编写脚本的时候呢,我们可以先获取我们的人物信息,然后呢我们可以的做一个假设啊。

这个时候hp小于1000的时候呢,我们就可以使用,那么我们就可以这个时候就有相应的条件呢可以判断啊,然后我们还可以循环的判断,嗯那么循环的判断呢,这里呢我们可以来等待,比如说三比如说三秒的时间。

那么我们每三秒钟呢,我们就检测一下它的血量,那么如果这个血血量小于1000的时候呢,那么呢我们就给它补充这个金疮药中哈,那么我们可以运行一下这一段代码,是吧,那么这个时候的话。

比如说有有有这个怪物在攻击我们的时候,我们的血量减少之后呢,它就会自动的给我们补充相应的这个血量好,那么这个时候呢就会自动地使用这个金疮药好的,那么这节课我们就讲到这里,那么我们下一节课呢啊再见。

P181:195-LUA脚错误检测排除 - 教到你会 - BV1DS4y1n7qF

大家好,我是郁金香老师,这节课我们一起来探讨一下怎么排除lua脚本当中的错误。

那么首先呢我们打开194克的代码。

如果这个时候我们在这一段路啊,脚本里面哈,我们使用了一个错误的命令啊,或者是我们嗯其他的一些呃运行上的错误,比如说这个技能使用这个如果的函数的话,我们没有注册啊,如果我们去调用它。

随便我们用一个相应的技能,比如说蔑视土龙这个,120,嘟嘟嘟嘟哒哒哒,接下来我们执行一下这段代码,那么如果我们是正常的执行完成的话,应当会执行到这个位置,那么我们看到啊执行到这个执行开始之后呢。

在后面呢我们就不能够确定呃某一个地方出现了问题,那么很多时候呢我们也啊光用我们的眼睛来看的话,很难找出呃这个错误的地方,而且我们当我们写的这个脚本越来越庞大的时候呢,那么我们这种检测错误的话啊。

更加的困难,要要排除这种错误,那么所以说这节课呢我们呃就探讨一下呃,怎么来检测它的某一行出现了这个错误,那么实际上呢这个do file我们这里呢是执行的这个do file。

那么do file呢它本身有一个返回的一个数值,那么如果他的这个返回数值不为零的话,那么就证明它出现了相应的错误,我们可以呃加上这个相应的检测啊,对这个do file哎。

那么我们对它的返回值来做一个判断啊,如果这个返回值不为零的话,这个时候肯定就是不错的,但是光检测到这个错误是不行的啊,我们还需要来定位出这个出错的一些信息,因为在lua里面呢。

它这些数据呢都是用它的一个呃,相当于是在我们这个环境的一个堆栈来进行这些数据数据的传送啊,我们可以呢直接的打印出它相关的突破信息啊,那么出错信息呢它是一个字串类型的啊,在我们的堆栈的一个顶部,好的。

我们再次重新编译生成,这个时候我们再一次呢呃注册我们的lua脚本,然后呢再do file,那么这个时候的话他会有一段信息,test挺多啊,六啊呃一个全局的变量啊,既能使用,那么是一个空的一个指针。

一个参数,那么就说明的话是这个技能使用这一项啊,这个函数或者是这个变量呢它没有注册啊,他找不到,那么出错的地方呢是在我们的第六行。

我们来看一下第六行,1234,零六啊,他说的是第六行,1234对吧,基本使用哈,恰好就是这一行,因为这个空的行业来说算上哈,那么最好是我们能有一个编辑就带行号的一个工具。

比如说我们的这个诺studio啊。

这个这一类的,我们把它放进去就能够看到这里呢是第六行,也就是这个指令码出错了。

而且它这里呢也会显示出相应的调试信息,是基本使用嗯,这个变量的没有注册,那么还有另外一种情况也会出错啊,呃比如说我们重新注册一下啊,重新进去,那么如果我们在没有初始化的时候。

也就是没有注册这个nova脚本的时候,我们就开始执行,那么的话他从第二行开始呢就会出错,然后呢就会终止掉整个脚本的一个执行,因为这个时候我们的呃输出调试信息,这个函数呢它也是没有注册的。

所以说我们必须要经过初始化啊,然后呢我们再执行我们的代码啊,那么这个时候呢我们某一个没有注册呢,它就会显示某一个呃某一行的一个出错的一个信息,好我们再来看一下我们的代码。

那么这个时候我们可以找到相应的这一行,把它改正正确啊,这里呢应该是使用技能或者是这一行呢,那把它取消掉也可以,那么这个时候我们看一下哈,把错误纠正好之后呢,它自动了就完成,就能够顺利的完成度快,那。

老公,我们看一下选中怪物这个,这个函数也没有出错,然,劣势屠龙,我们再来看一下这个技能也没有认错,烈士屠龙,好像是这个时候是释放技能没有成功啊啊没有挂机到主线程,应该是嗯嗯,好的,其他的都应该是没有。

这个没有问题,选择怪物,这里好像有一些问题,那么这里呢我们应当传送的这里应该是一个空的函数,表示了属地的选中一个怪物,好的,这个时候呢是参数和传递错误,那么像这种错误的话,我们呢它是检测不到的。

因为他只是把这个当成是一个怪物名,因为这个怪物名不存在,那么所以说就不会真的选中,所以说它只能够我们的这个do fire的这个返回值的话,它只能够返回我们的一个嗯语法上的一个错误,好的。

那么这一节课呢我们就讨论到这里。

P182:196-LUA多线程控制 - 教到你会 - BV1DS4y1n7qF

大家好。

我是郁金香老師,這一節跟我們一起來討論一下,怎麼在Lua裏面控制我們的多線程。

首先我們打開190克的代碼。

我們做一個假設。

假設我們現在有兩個Lua的腳本,那麼一個腳本是用來循環執行打怪的,那麼另外一個腳本是用來檢測,我們的血量的,然後相當於是自動補血的一個功能,但是這兩個功能的話,放在一個循環裏面的話,我們就不是很好控制。

因為我們檢測血量的等待的時間的話,它可能不一樣,而且條件的話,當然實際上也是可以寫在一個線程裏面,但是我們這樣的設計的話,我們分開寫成兩個線程的話,那麼這樣會更好一些,那麼比如說我們要停止打怪。

或者是退出打怪的時候,我們要讓我們的低血保護和線程繼續作用的話,那麼我們這樣設計是很方便的,把它分開,好的,那麼我們來看一下,怎麼來實現這樣兩個線程運行,那麼首先我們把這一段代碼放到我們的遊戲,下面。

那麼首先我們一個是這裡是一個自動打怪的一個,現場選中怪物,然後使用我們的技能,當然這裡也可以直接攻擊,然後來這裡等待相應的秒數,等待8秒鐘的時間,這裡設置為,那麼第二個線程,我們就另外的建一個腳本文件。

那麼裏邊它是我們的檢測我們的血量,進行一個保護,那麼血量低於某一個數值的時候,我們就使用我們的物品,比如說這裡低於500的時候,HP獲取HP的數字,好的,那麼首先我們在這裡展開我們的Lua單元。

我們需要修改一下我們的這個函數,首先我們轉到我們的Lua。java,那麼在這裡我們打開我們相應的附加庫,那麼我們修改一下所謂的函數,那麼修改之後,那麼之前的全局變量相當於就沒有用了。

那麼我們因為這裡要用到多個Lua的狀態環境,那麼所以說另外我們需要建立兩個線程,先轉到我們的資源,那麼之前的初始化我們就不要了,因為它的初始化工作,我們在註冊函數的時候,我們就已經添加了。

所以說這個我們可以刪掉,那麼我們直接的Defile掉就可以了,然後我們這裡的話,我們讓它相對獨立出來,在這個地方我們建立一個,相應的環境指針,那麼建立好了之後,我們在這裡用LuaV9。

然後我們退出的時候,這裡我們在退出的時候,我們關閉它,當然在這裡我們執行LuaV9,執行Defile的時候,它也是有可能出錯的,那麼所以說在這裡的話,我們也可以加上一些異常的一個處理,那麼在這裡的話。

我們可以在這裡做一些更新的操作,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話。

我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話。

我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話。

我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話。

我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話。

我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話。

我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話。

我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話。

我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話。

我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話。

我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話。

我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話。

我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話。

我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話。

我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話。

我們可以在這裡做一些更新的操作,那麼在這裡的話。

我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話。

我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話。

我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話。

我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話。

我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話。

我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話。

我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話。

我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話。

我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話。

我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話。

我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話。

我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話。

我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話。

我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話。

我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話。

我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話。

我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話。

我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話。

我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話。

我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話。

我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話。

我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話。

我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話。

我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話。

我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話。

我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話。

我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話。

我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話。

我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話。

我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話。

我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話。

我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話。

我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作,那麼在這裡的話,我們可以在這裡做一些更新的操作。

P183:197-地上物品列表分析 - 教到你会 - BV1DS4y1n7qF

大家好,我是郁金香老师,这节课我们一起来分析一下地上物品列表嗯,属性哇,那么首先呢我们准备一个是地上物物品列表的一个机制啊,那么这个的话就是我们以前的附近对象的一个列表,那么首先我们进到ot里面看一下。

那么这个时候呢我们的附近的对象的话有三个,分别是310d20490 ,那么这个时候我们,扔掉啊,比如说我们把这个含义十分到我们的地上,那么这个时候呢我们可以看到呃,d10 好像是d10 这一个。

是新增加的,好像是,那么我们看一下里面的这个字串的形式上来看一下,那么我们发现的话,这里有四个小点,大概在,九四的这个位置是它的名字加0x94 ,那么我们可以看到啊,dc。

那么这是我们这个地上物品对象的一个呃名字,那么往往呢我们就需要来通过这个物品的名字来来进行一个物品过滤,真的,因为这个时候的话他只能看到这个物品的名字。

它的属性的话呃需要呢需要捡起这个物品到了背包里边之后呢,我们才有相应的属性,比如说攻击嗯,或者是呃其他的一些属性值,那么我们需要来捡到背包里给你之后呢,才会出出现,那么第二个我们加八这个位置呢。

我们看到它的这个属性值呢为33v33 ,那么我们再看一下,最好我们走到一个呃人少的地方,因为现在的话它也会显示周围的这个npc也会显示,或者是怪物的话,它也会显示,我们也可以走到一个人比较少的地方啊。

周围没有这个怪物的地方,那么这个时候呢我们这个呃对象列表里面呢,它就会只有一个或者是两个这个对象,好的,在这个地方呢我们停下,那么这个时候的话,我们这个对象的话就是我们的人物角色对象。

啊就是我们的人物角色对象,那么另外的这个对象的话,进来的话就应当是我们的,另外的对象进来的话,就应当是我们的这个物品,那么我们扔掉一个物品在地上,那么这个的话就将是我们的物体对象,那么我们再来分析一下。

那么首先33还有加九,是这个地方呢,是我们物品的名字,那么那另外这个物品的话呃,它应当然有一些属性,但是这个时候我们是看不到的,啊,那么我们节目的时候的话是只有通过这个名字来来过滤它。

我们不能够确定它的属性,因为只有捡到了我们的背包里边呢,我们的属性呢才才能够确定啊,那么有一些垃圾物品呢,我们可以呃捡上来,捡到背包之后呢,我们可以到一个地方去把它扔掉,那么这个是这个时候呢。

我们需要对背包里面的这些垃圾物品呢作为一个判断,那么我们接下来来分析一下我们背包物品对象的属性,啊那么这个是我们背包里面的物品对象,那么第一个呢是这个寒铁刀,因为他没有其他的什么属性。

它的这个寒铁刀的话,他的这个攻击力的话就是固定的,那么所以说这这一类的话我们不用做判断,那么强化石的话它也没有属性,那么我们需要做判断的一般呢是含义时呃,另外是金刚石这个啊。

那么我们就来看一下这个防御力是增加好四这个属性在什么地方,那么我们一起来看一下,好的,我们这个时候呢可以到这个列表里面找一下这个数值四,那么最简单的方法呢我们是可以的,用c一来搜一下。

那么这里起始范围我们就是这个对象的起始地址,2f313740 ,那么这里的话我们把它改一下,改为,大概是呃这里来加二,那么这样一个范围的话,应当是足够用的,那么我们搜一下数值四,那么这里有两个地方。

我们来看一下这个地方,第一个地方我们改一下它的这个属性值,看有没有效果,这个数字没有效果,我们改一下这第二个。

那么这个时候我们看到它的防御力的话就有变化了啊,那么这个的话就就应当是他防御力的这个属性的,那么我们来看一下这两个地址相差的距离有多远,那么相差的地址的话恰好是d04 啊。

那么所以说我们在这里呢把它备注一下,物品的属性值是低于四,那么这个属性值周围的的还有一些呃,还有一些属性啊,这里呢还有一些属性我们可以进行修改,看一下它的一个变化,比如说现在这里是防御寒玉石。

那么我们修改这里的话,可以修改它的一个防御力,那么我们看一下cfc这个地方有什么用,那么这个时候呢变成了攻击力啊,那么我们再修改一下,那么这个时候呢变成了生命力啊,那么所以说呢我们cfc这个地方呢。

它也是一个这种带属性物品的啊,一对属性啊,比如说这个含义式,但是金刚石的话我们不知道有没有这一类的属性,我们可以试一下嗯,金刚石的话是第二个物品,加上一个e c f c,那么二的话是防御力。

我们可以看到嗯,三的话同样的是生命力依赖才是我们的攻击力,当然这个的话暂时呢我们可能还没有多大的用处,我们弄出最大的呢是这个背包里边的这个呃带属性,物品的这个属性的这个数值。

那么我们就可以通过呃物品的名字啊,以及它的这个属性值,比如说这个攻击力啊,或者是法律御力低于某一个,比如说它是含韵呃这个含义时,那么另外呢这个含义时的属性呢,我们可以通过这里来判断哈。

应当哦这里应该是它的一个属性是金刚石啊,是海韵石的话,生命力,那么我们可以通过这里来判断啊,如果是含义时的话,他的攻击力啊,如果是小于某一个,因为这里它相当于是一个分类,1234。

如果他的攻击力小于某一个数值,那么我们就可以把它扔掉,或者是防御力小于某一个数值,或者是生命力啊,小于某一个数值,那么我们再修改一下,看数字是什么,那么数字五呢是命中率啊。

那么我们再来看一下数字六的话是什么,那么这个是b,那么我们再来看一下数字七,那么这个是武功攻击力,那么这个是全部气功等级,嗯,这是物品升级成功概率,当然我们可以通过这里来判断。

另外的话他应该还有一个还有一个字串的类型可以进行判断,那么我们来看一下吧,武器合成材料,那么在,他只是在这个位置的,它有一个物品的描述加230,这个位置,我们看一下7230。

那么我们再来看一下第一个物品加热三零,那么生命力意义增加啊,那么第三个物品我们再看一下防御力三增加,那么第四个物品,那么第四个物品呢,它这里呢呃应该是没有好,这里没有,这个是空位,攻击力十增加负。

那么我们也可以通过这个位置的字串来判断也是可以的,那么除了通过刚才的这个属性,那么两种判断方式都是可以的,那么所以再加230,这个地方,那么我们也可以通过这个地方呢来过滤。

或者是扔掉我们的这个垃圾的这个物品,那么我们再来看一下,这个是1212的话,40x,啊这个是戊神单啊,这个才是腰,那么我们这个是678,我看一下啊,像这种不带属性的话,它就没有啊,只有带属性的了。

我们才能够看到它的这个名字,零,那么不带属性的话,我们只有来看到它的呃,这个名字看不到他的这个去制造材料,加c,那么加f一这个地方呢,还有一个这是这是不带属性的啊,那么包括后面这个睡眠,还有这个青玉珠。

那么不带属性的是0f一这个地方来描述它,好知道哦,你f一这个地方呢它本身有本身呢就有一个这个物品的一个介绍啊,武器合成材料啊,这一类的应该是f一这个地,那么上面这个呢应该是一个物品的一个简单的一个说明。

对上面这个地方很相似,物品属性的啊,描述描述啊,说明这个更详细一些啊,相关属性的这个只是一个简单的一个说明,那么都是一个字串,那么这里呢还有一个cd 4,这个地方呢还有一个群的一个阶段嗯嗯。

那么这个呢暂时不知道有什么用啊,好的,那么这节课呢我们就暂时分析到这个地方,那下一节课我们来讨论一下呃,怎么来自动捡物品啊,你就怎么来设计我们的呃物品的一个过滤的一个思路,好的。

posted @ 2024-09-30 11:13  绝不原创的飞龙  阅读(2)  评论(0编辑  收藏  举报