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


  • 管理员

    概念:GA的接口使用
    接口说明:http://lua.cgdev.me/doku.php
    -- 一般接口 --
    一般接口可以直接参照文档使用
    例:Battle.Encount(UpIndex, DownIndex, [Data])

    -- callback接口 --
    callback接口必须先使用注册函数
    例:CharTalkedCallBack(_MePtr, _TalkPtr)

    Char.SetTalkedEvent(nil,"CharTalkedCallBack",Index); --先注册
    function CharTalkedCallBack(_MePtr, _TalkPtr) --当某对象与此对象说话时,便会触发
    ...
    end

    实战:
    实例一: 当玩家战斗时,提示战斗了!
    Delegate.RegDelBattleStartEvent("BattleStart_Event");

    function BattleStart_Event(battle)
    for BPWhile=0,9 do
    local BPlayerIndex = Battle.GetPlayer(battle,BPWhile);
    if(BPlayerIndex >= 0 and Pet.IsPet(BPlayerIndex) ~= 1) then
    NLG.TalkToCli(BPlayerIndex,-1,"您进入了战斗!!",%颜色_红色%,%字体_中%);
    end
    end
    end

    解释:首先注册战斗开始事件Delegate.RegDelBattleStartEvent("BattleStart_Event");
    在战斗开始事件内部,我们获取了位置位于0~9的对象,也就是人物所在的位置,我们可以通过Battle.GetPlayer(battle,BPWhile)来获取人物位置。
    为了避免空指针,我们使用if(BPlayerIndex >= 0) then 来进行一下安全判断

    实例二: 当双方玩家PK时,提示所有玩家战斗了!
    Delegate.RegDelBattleStartEvent("BattleStart_Event");
    function BattleStart_Event(battle)
    for BPWhile=0,19 do
    local BPlayerIndex = Battle.GetPlayer(battle,BPWhile);
    if(BPlayerIndex >= 0 and Pet.IsPet(BPlayerIndex) ~= 1) then
    NLG.TalkToCli(BPlayerIndex,-1,"您进入了战斗!!",%颜色_红色%,%字体_中%);
    end
    end
    end

    解释:在pk战斗中,一共最多可能有20个对象,分别是10个玩家和10只宠物,我们可以用Pet.IsPet(BPlayerIndex)来排除掉宠对象。

    实例三: 当玩家战斗时,提示一共有几只怪物 !
    Delegate.RegDelBattleStartEvent("BattleStart_Event");
    function BattleStart_Event(battle)
    for BPWhile=10,19 do
    local BPlayerIndex = Battle.GetPlayer(battle,BPWhile);
    local count = 0;
    if(BPlayerIndex >= 0) then
    count = count + 1;
    end
    end ...
    end
    解释,怪物的所站位置肯定为上方,所以循环从10开始,到19为止,然后,我们通过判断BPlayerIndex >= 0(是否存在)来获取当前位置是否有怪物。
    然后,我们可以通过一个变量作为count计数器,当此位置存在怪物时,我们让计数器加一,当循环完毕后,我们输出对话给玩家。

    实例四: 当玩家战斗时,提示一级宠物 !
    Delegate.RegDelBattleStartEvent("LvOnePet_Event");
    function LvOnePet_Event(battle)
    for BWhile=10,19 do
    local PlayerIndex = Battle.GetPlayer(battle,BWhile);
    if(BPlayerIndex >= 0) then
    for BPWhile=0,9 do
    local BPlayerIndex = Battle.GetPlayer(battle,BPWhile);
    if(BPlayerIndex >= 0 and Pet.IsPet(BPlayerIndex) ~= 1) then
    NLG.TalkToCli(BPlayerIndex,-1,"[★☆★一级宠物★☆★]发现一级宠物「"..Char.GetData(PlayerIndex,%对象_名字%).."」出现!",%颜色_红色%,%字体_中%);
    end
    end
    end
    end
    end

    解释:怪物的所站位置肯定为上方,所以循环从10开始,到19为止,此处用了一个嵌套循环,所以程序执行按照以下的格式:
    1;先判断10号位置是否有怪物,如果有的话,就开始循环0~9号位置玩家,开始输出。
    2;再次判断11号位置是否有怪物,如果有的话,就开始循环0~9号位置玩家,开始输出,类推。
    所以实际上,程序执行了10*10次判断,也就是100次。

    练习: 当玩家战斗时,提示一级宠物,并且提示其生命值 !
    练习2: 实例三未提示数量给玩家,补全实例三 !



  • 膜拜中。。。。


登录后回复