六天学会写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: 实例三未提示数量给玩家,补全实例三 !
-
膜拜中。。。。