六天学会写GA Lua脚本(一)


  • 管理员

    以下教程的接口和概念,均已GA为基础(GA商业版,GA免费版,two-click版),在其他引擎中可能会存在不兼容情况。
    每一教程均已理论+实战的形式展示

    目录
    (一)lua与GA的基础知识 实战I - 第一个lua程序,hello world
    (二)GA的接口使用 实战II - 使用lua提示一级宠物
    (三)Lua的流程控制语句 实战III - 使用lua实现原地登录 (取消)(改:lua与脚本交互 - 名字变色卡制作 )
    (四)综合实战脚本I 实战IV - pk战自动匹配系统
    (五)综合实战脚本II 实战V - lua与脚本交互 - 名字变色卡制作 (改:自动出售道具系统)
    (六)综合实战脚本III 实战VI - 自动出售宠物系统

    阅读之前,必须对lua或者其他编程语言具有初步了解。

    GA的基础知识
    --对象(Object)--
    玩家,NPC,怪物,道具等一类具有形态的东西,我们称为对象。

    --属性--
    简单的来说,就是对象本身固有的状态。比如说,玩家的血值,怪物的位置,道具的耐久等。

    --方法--
    用于主动对对象执行的函数,我们称为方法。例如:传送玩家,删除NPC,制作道具等,是lua脚本中最常用的一类函数。

    --事件(回调函数)--
    事件的概念和方法相反,是对象被动执行的函数,我们称为事件。例如:在玩家被传送后,我们还需执行什么函数,道具丢地后,还需执行什么函数,这所执行的函数,我们称为事件,也可以称之为回调函数。

    实例一:当玩家登录游戏后,向自己发送公告,欢迎来到XX魔力!
    分析:首先,我们需要向自己发送消息,必须使用公告方法,但在此之前,必须获得当前玩家对象,即使用登录事件。
    这时我们可以用Delegate类来注册一个登录事件,以便于玩家在登录的时候,获取玩家对象。如下语句:


    Delegate.RegDelLoginEvent("LoginEvent");

    这句话的意思是,说明我们注册了一个名字为LoginEvent的登录事件,当玩家登录游戏的时候,这个LoginEvent事件就会被动执行。我们先写出LoginEvent事件的格式,如下:
    function LoginEvent(player)
    ......
    end
    在事件函数内部,我们可以通过NLG.SystemMessage(player,message)方法来对当前的player对象,发送message信息。
    完整的例子如下:
    Delegate.RegDelLoginEvent("LoginEvent");
    function LoginEvent(player)
    NLG.SystemMessage(player,"欢迎来到XX魔力!");
    end

    实例二:当玩家登录游戏后,向自己发送公告,欢迎某某某来到XX魔力!
    首先,这个实例只是在前一个实例加上了玩家的名字,所以之前的思路一样,重点在于我们要怎么获取玩家的名字。这时,我们就应该使用到对象属性,在GA中,我们使用Char.GetData(player,index)方法来获取对象属性,完整实例如下:
    Delegate.RegDelLoginEvent("LoginEvent");
    function LoginEvent(player)

    local name = Char.GetData(player,%对象_名字%);
    **
    NLG.SystemMessage(player,"欢迎"..name.."来到XX魔力!");**
    end
    以上脚本中,我们还看到了一个local name,这是lua的变量声明格式,我们可以申请一个临时变量,来存储玩家的名字,接下来我们还看到 "欢迎"..name.."来到XX魔力!" 这里的双点,代表字符串连接符,用于把三个文本,连接文本一个文本,具体的lua语言语法,请自行搜索百度,以下将不再重点讲解。

    练习:当玩家登录游戏后,向全体玩家发送公告,欢迎某某某来到XX魔力!
    答案第二章公开。

    lua的基础知识
    --全局变量和局部变量,作用域--
    lua中全局变量无需任何修饰声明,直接建立变量名即可使用,局部变量则需要在变量名前加local
    例子:
    NAME = "blue"; -- 全局变量
    local NANE = "blue"; --局部变量
    全局变量在任何地方的代码均可以访问,局部变量则有作用域,作用域的范围是外包含内,例如


    local a = 2;
    local b;
    if a >1 then
    b = 1;

    end
    a = b;
    以上为正确的写法。


    local a = 2;

    if a >1 then
    local b = 1;

    end
    a = b;

    以上为错误的写法。

    多层嵌套作用域会在第三章详细解释。

    --表(table)--
    lua中,表的作用很常用,lua中的表可以当做数组,哈希表等数据结构使用,例:
    数组:
    local a = {[1]="a",[2]="b",[3]="C"};
    值得注意的是,lua与大部分编程语言不同,下标是从1开始的。

    哈希表:
    local a = {};
    a = 1;
    a["free"] = 1;
    在lua中,表可以嵌套使用,例如
    local a = {};
    local b ={};
    b[0] = 1;
    b[1] = 1;
    a = b;
    值得注意的是,使用table作为哈希表时,数据并不会被垃圾回收器回收,必须在合适的时间内,手动回收数据,如下:
    a = nil;



  • WOW~~~好詳細,第一次看懂LUA



  • blue的luaFrame框架,当年让我震撼了好几天了,大家好好跟blue大神学习了



  • ~~前排膜拜大神~!!!~~看看再



  • 不懂编程的 看懂了- -



  • 第二章不太明白,数组和哈希表有详细的解释吗,学习中......



  • 受益匪浅
    :)



  • 我来学习学习下


登录后回复