彩虹独立端Lua脚本相关说明
星河彩虹独立端客户端Lua脚本相关说明
一、xml控件触发事件
1、主窗口事件
<OnLoad>
OnLoad(); <!-- 创建窗口完成触发,如界面中有页签,切页也触发 -->
</OnLoad>
<OnCUIMsg>
OnCUIMsg(); <!-- 服务端消息事件 -->
</OnCUIMsg>
<OnDraw>
OnDraw(); <!-- 界面每帧调用事件 -->
</OnDraw>
<OnMsgBoxConfirm>
OnMsgBoxConfirm(); <!-- 提示框确定消息事件 -->
</OnMsgBoxConfirm>
<OnFresh>
OnFresh(); <!-- 刷新界面事件 -->
</OnFresh>2、GoodGrid专用事件(仅为物品框使用)
<OnReceiveDrag>
OnReceiveDrag(); <!-- 物品框放入物品触发 -->
</OnReceiveDrag>
<OnDragAway>
OnDragAway(); <!-- 物品框取出物品触发 -->
</OnDragAway>3、点击事件(button控件、lable控件、checkbutton控件、GoodGrid控件)
<OnClick>
OnClick(); <!-- 点击事件 -->
</OnClick>4、XML中打开窗口
<OnClick>
UpdateWindow("RechargeWnd"); <!-- XML中打开“RechargeWnd”窗口 -->
</OnClick>二、全局对象
thiswnd -- 表示当前窗口
1、寻找按钮函数
FindButtonByName()
thiswnd:FindButtonByName("btnname") -- 寻找当前窗口下指定名字控件,btnname为XML中配置控件的name
local btn = thiswnd:FindButtonByName("btnname"); -- 申明btn变量为按钮控件对象2、寻找复选框函数
FindRadioByName()
thiswnd:FindRadioByName("chkRecharge") -- 寻找当前窗口下指定名字控件,chkRecharge为XML中配置控件的name
local chk = thiswnd:FindRadioByName("chkRecharge"); -- 申明chk变量为复选框控件对象3、寻找输入框函数
FindEditByName()
thiswnd:FindEditByName("edtAccount") -- 寻找当前窗口下指定名字控件,edtAccount为XML中配置控件的name
local edt = thiswnd:FindEditByName("edtAccount"); -- 申明edt变量为输入框控件对象4、寻找物品框函数
FindGoodGridByName()
thiswnd:FindGoodGridByName("ggItem") -- 寻找当前窗口下指定名字控件,ggItem为XML中配置控件的name
local grid = thiswnd:FindGoodGridByName("ggItem"); -- 申明grid变量为物品框控件对象5、寻找子窗口函数
FindWindowByName()
thiswnd:FindWindowByName("subWndTest") -- 寻找当前窗口下指定名字控件,subWndTest为XML中子窗口控件的name
local subwnd = thiswnd:FindWindowByName("subWndTest"); -- 申明subwnd变量为子窗口控件对象6、寻找进度条函数
FindProgressByName()
thiswnd:FindProgressByName("ProTest") -- 寻找当前窗口下指定名字控件,ProTest为XML中进度条控件的name
local pro = thiswnd:FindProgressByName("ProTest"); -- 申明pro变量为进度条控件对象7、寻找ui控件函数
FindUIByName()
thiswnd:FindUIByName("ui_item") -- 寻找当前窗口下指定名字控件,ui_item为XML中ui控件的name
local ui = thiswnd:FindUIByName("ui_item"); -- 申明ui变量为ui控件对象8、寻找其他控件
FindControlByName()
thiswnd:FindControlByName("uiItembg") -- 寻找当前窗口下指定名字控件,uiItembg为XML中配置控件的name
local uibg = thiswnd:FindControlByName("uiItembg"); -- 申明uibg变量为物品框控件对象9、切换到指定页签
SwitchToPage()
thiswnd:SwitchToPage(0); -- 切换页签到第1页
thiswnd:SwitchToPage(1); -- 切换页签到第2页10、获取当前页签id
GetCurPage()
thiswnd:GetCurPage() -- 获取当前窗口页签id
local id = thiswnd:GetCurPage(); -- 申明id变量赋值为当前页ID11、界面播放特效
PlayUIEffect()
thiswnd:PlayUIEffect(1, 3, 120, 320) -- 在当前界面播放特效,特效坐标X为120,y为320--参数说明:
--参数1:特效序列号
--同时执行两个播放特效函数,序列号不同,特效会同同时播放,互相不影响
--同时执行两个播放特效函数,序列号相同,特效就会按顺序播放,第一个特效播放完后,再播放第二个特效
--参数2:动画ID
--在客户端Config/UIEffect.ini文本中配置相应动画
--参数3:坐标X
--动画在界面中X的位置
--参数4:坐标Y
--动画在界面中Y的位置12、关闭窗口
CloseWindow()
thiswnd:CloseWindow() -- 关闭当前窗口三、操作控件对象相关函数
示范XML中配置:
<Windows name = "BaozangWnd">
<Script file = "customui/BaozangWnd.lua" /> <!-- 该XML是添加 customui/BaozangWnd.lua 可加载lua脚本; -->
<Offset x = "0" y = "0" align = "Center" />
<BackTexture index = "27117" />
<Scripts>
<OnLoad>
OnLoad(); <!-- 添加了 OnLoad 事件; -->
</OnLoad>
</Scripts>
<Button name = "btnAward">
<Offset x = "62" y = "100" />
<NormalTexture index = "01101" />
<HighlightTexture index = "01102" />
<PushedTexture index = "01103" />
<DisableTexture index = "01104" />
<NormalTextColor value = "ee9955"/>
<HighlightTextColor value = "ddbb99"/>
<PushedTextColor value = "775544"/>
<DisableTextColor value = "998877"/>
<ButtonText text = "装备回收" />
<Font name = "FONT_DEFAULT" size = "12" />
</ButtonText>
<Scripts>
<OnClick>
OnClickBtn();
</OnClick>
</Scripts>
</Button>
</Windows>Lua脚本如下:
-- lua脚本下,先申明全局变量并赋值为nil,这样就可以供下面OnLoad函数去调用全局变量赋值
local btn = nil; -- 申明全局变量btn,赋值为nil (空)
function OnLoad()
btn = thiswnd:FindButtonByName( "btnAward" ) -- 在OnLoad函数下,我们将btn赋值按钮对象,XML中name为"btnAward"按钮控件
end通过以下函数对btn控件进行操作,(以下函数支持所有控件)
1、获取控件X坐标函数
GetX()
local x = btn:GetX();2、获取控件Y坐标函数
GetY()
local y = btn:GetY();3、获取控件宽度函数
GetWidth()
local width = btn:GetWidth();4、获取控件高度函数
GetHeight()
local height = btn:GetHeight();5、获取控件对于屏幕x坐标函数
GetScreenX()
local x = btn:GetScreenX();6、获取控件对于屏幕y坐标函数
GetScreenY()
local y = btn:GetScreenY();7、获取父控件函数
GetParent()
local parent = btn:GetParent(); -- parent的值就是thiswnd8、显示控件函数
Show()
btn:Show(); -- 在界面显示按钮控件9、隐藏控件函数
Hide()
btn:Hide(); -- 在界面隐藏按钮控件10、该控件是否显示函数,返回bool类型
IsShow()
if btn:IsShow() then -- 检测btn控件是否显示11、设置空间可用函数
Enable()
btn:Enable(); -- 按钮设置为可用状态12、设置空间禁用函数
Disable()
btn:Disable(); -- 按钮设置为禁用状态13、该控件是否可用,返回bool类型
IsEnable()
if btn:IsEnable() then -- 检测btn控件是否可用14、移动控件到指定坐标
Move()
btn:Move(200, 300) -- 将按钮移动到X为200,Y为300的坐标上Button控件特有函数
1、按钮重新设置纹理函数
ReloadTex()
btn:ReloadTex(01101, 01102, 01103, 01104); -- 设置按钮4个状态的纹理(普通,高亮,按下,禁用)进度条控件特有函数
1、设置进度条进度数值
SetPercent()
pro:SetPercent(50); -- 设置进度条进度为50%ui控件特有函数 1、设置ui控件纹理
ReloadTex(id,pack,render) -- 纹理ID,package,渲染模式 ( pack和渲染模式两个参数可忽略 )
ui:ReloadTex(55001,3); -- 设置iterface中55001的纹理IDLable控件特有函数 1、获取文本函数
GetText()
local s = lab:GetText(); --s的值为获取到Lab控件的文本字符2、设置文本函数
SetText()
lab:SetText("注:充值元宝成功后有一定时间的延迟才会到账"); -- 将控件lab的文字设置显示指定文字)3、获取lab控件文字颜色函数
GetColor()
local color = lab:GetColor(); --color的值为获取到Lab的颜色数值4、设置lab控件文字颜色函数
SetColor()
lab:SetColor(4294901760); -- 将控件lab的文字颜色设置指定颜色数值(10进制)CheckButton控件特有函数
1、将多个复选框设置关联函数
AddBuddy()
chk1:AddBuddy(chk2); --将chk1与chk2两个控件设置关联,关联后只能二选一2、设置复选框状态函数(传入参数true/false)
SetChecked()
chk:SetChecked(true); --chk复选框设置为选中状态
chk:SetChecked(false); --chk复选框设置为未选中状态3、检测复选框是否选中,返回bool类型
IsChecked()
if chk:IsChecked() then -- 检测chk勾选框是否选中状态4、设置复选框互斥选中
SetRadio()
chk:SetRadio(0); --设置选中指定多关联复选框
示范:
chk1:AddBuddy(chk2);
chk1:AddBuddy(chk3); -- 将chk1、chk2、chk3关联,这一步主要是三个复选框只能勾选一个。
chk1:SetRadio(0); -- 执行此语句,chk1选中状态,chk2和chk3不选中
chk1:SetRadio(1); -- 执行此语句,chk2选中状态,chk1和chk3不选中
chk1:SetRadio(2); -- 执行此语句,chk3选中状态,chk1和chk2不选中GoodGrid控件特有函数
1、获取物品框中的物品对象函数
GetGood()
grid:GetGood(0); --获取物品框中的物品对象,(通俗的说法,就是获取物品框中放入的物品,因为物品框可以设置很多排很多列,有很多格子,0就是表示第一个格子)2、获取物品框中的物品ID函数
GetID()
local id = grid:GetID(); -- 获取物品框中的物品ID
local id = grid:GetID(1); -- 获取物品框中的物品ID ( 如果多行多列物品框,可以指定获取哪一个,从0开始 )3、设置物品框中的物品ID
SetID()
grid:SetID(0); --设置物品框物品ID为0 ,为0就是物品框没有物品了4、设置物品框物品信息
AddCommonGood()
grid:AddCommonGood("圣战戒指", 0, 3); -- GridType="50"类型的物品框,可以使用该函数设置grid物品框显示圣战戒指,looks不用设置为0,数量3个,
grid:AddCommonGood("高级技能书", 197, 0); -- GridType="98"类型的物品框,可以使用该函数设置grid物品框tips显示高级技能书,looks设置为197,数量不用设置为0,5、清空物品框格子信息
ClearCommonGood()
grid:ClearCommonGood(); -- 清除grid物品框类的显示信息6、获取点击物品框索引ID
GetCellIndex()
local id = grid:GetCellIndex(); -- 获取点击该物品框的索引IDEdit控件特有函数
1、设置输入最大长度
SetMaxLength()
edt:SetMaxLength(10); -- 10就是10个字符(1个中文占2个字符)2、设置显示字符数量
SetVisualWords()
edt:SetVisualWords(5); -- 比如最大长度是10,可以只显示5个3、设置只能输入数字
SetDigital()
edt:SetDigital(true); -- 输入框只能输入数字4、设置光标颜色数值
SetCursorColor()
edt:SetCursorColor(4294901760); -- 输入框设置光标为指定颜色数值(10进制)5、设置是否为密码输入框
SetPwd()
edt:SetPwd(true); -- 设置输入框为密码输入框6、检测输入框是否为密码输入框
IsPwd()
if chk:IsPwd() then -- 检测edt输入框是否为密码输入框7、获取文本字符参数
GetText()
local s = edt:GetText(); -- 获取输入的字符8、获取输入的数字
GetNum()
local n = edt:GetNum(); -- 获取输入的数字9、清空输入框内容
Clear()
edt:Clear(); -- 清空输入框内容四、获取人物相关数据函数
通过lua对应函数获取对象相关游戏数值
SELF-- 对象:自己
1、获取等级
GetLevel()
local n = SELF:GetLevel(); -- 获取自己等级2、获取金币数量
GetGold()
local n = SELF:GetGold(); -- 获取自己金币数量3、获取绑定金币数量
GetBindGold()
local n = SELF:GetBindGold(); -- 获取自己绑定金币数量4、获取元宝数量
GetGameGold()
local n = SELF:GetGameGold(); -- 获取自己元宝数量5、获取绑定元宝数量
GetBindGameGold()
local n = SELF:GetBindGameGold(); -- 获取自己绑定元宝数量6、获取职业
GetCareer()
local n = SELF:GetCareer(); -- 获取自己职业7、获取精力值
GetJingLi()
local n = SELF:GetJingLi(); -- 获取自己精力值(时长版)8、获取包裹物品数量
CountGood()
local n = SELF:CountGood("圣灵精华"); -- 获取自己包裹中圣灵精华总数量9、获取人物对应货币数量
GetMoney(X) -- X为货币类型 货币类型:0:金币 / 1:元宝 / 2:绑金 / 3:绑元 / 4:行会银两 / 5:声望 / 6:自定义 / 7:自定义 / 8:自定义 / 9:自定义
local n = SELF:GetMoney(0); -- 获取自己金币数量10、获取人物天人类型,天人等级
GetAmbit()
local n,m = SELF:GetAmbit(); -- 获取自己天人类型,等级五、客户端与服务端通讯相关函数
通过lua函数发送到服务端触发对应文本中标签
1、触发服务端指定UINpc脚本
SendClickNPC(1); -- 执行后相当于点击Envir\UINpc_def\UINpc-1.txt文本中[@main]标签
SendClickNPC(2); -- 执行后相当于点击Envir\UINpc_def\UINpc-2.txt文本中[@main]标签
-- 注意:参数中“1”表示UINpc-1.txt,参数范围:1-1002、发送触发服务端QUIFunction-0.txt中指定标签函数
SendQUIFunction("@sendtest"); -- 发送到服务端执行QUIFunction-0.txt文本中[@sendtest]标签3、发送触发当前NPC下执行指定标签函数
SendNPCLabel("@testnpc"); -- 发送到服务端触发当前NPC下[@testnpc]标签,NPC脚本中[@main]下面需要</@testnpc>这个按钮标签4、发送触发自定义界面文本中执行指定标签
SendCustomUILabel(1, "@充值_勾选"); -- 触发自定义界面标签,1表示"UINpc_def"目录下"CustomUI-1.txt"脚本,触发[@充值_勾选]标签
-- 注意:客户端所发送过来的执行标签,服务端都需要在Envir\AllowUIScriptLable.txt文本中添加,否则服务端不允许触发标签5、给服务端推送指定参数
PushCUIParam()
PushCUIParam("圣战戒指"); -- 给服务端推送指定参数
PushCUIParam(tostring(n)); -- 给服务端推送整数型参数,需要使用函数转换成字符型6、发送参数到服务端
SendCUIParams()示范脚本如下:
-- 客户端lua脚本:
function SendSerParam()
PushCUIParam("裁决"); -- 推送指定参数
PushCUIParam("圣战戒指"); -- 推送指定参数
PushCUIParam("蟠龙傲天戒指"); -- 推送指定参数
SendCUIParams() -- 将以上3个参数发送到服务端
SendCustomUILabel(2, "@SendParam"); -- 触发服务端 UINpc_def 目录下 CustomUI-2.txt 脚本,触发[@SendParam]标签并返回参数
end-- 服务端脚本:
[@SendParam]
#ACT
SENDMSG 5 <$CUIPARAM(0)> //参数为:裁决
SENDMSG 5 <$CUIPARAM(1)> //参数为:圣战戒指
SENDMSG 5 <$CUIPARAM(2)> //参数为:蟠龙傲天戒指
break
-- 注意:服务端接收到参数为lua发送顺序依次获取六、服务端发送客户端通讯相关函数
服务端发送参数给客户端lua脚本获取对应数据
gamedata-- 游戏数据对象
1、获取服务端发来的参数
GetSvrCUIParam()
local n = gamedata:GetSvrCUIParam(0); -- 获取服务端自定义界面发来的参数2、获取服务端发来的指定参数
GetSvrParam()
local n = gamedata:GetSvrParam("Val"); -- 获取服务端发来的指定参数示范XML中配置:
<Windows name = "BaozangWnd">
<Script file = "customui/BaozangWnd.lua" /> <!-- 该XML是添加 customui/BaozangWnd.lua 可加载lua脚本; -->
<Offset x = "0" y = "0" align = "Center" />
<BackTexture index = "27117" />
<Scripts>
<OnLoad>
OnLoad(); <!-- 添加了 OnLoad 事件; -->
</OnLoad>
<OnCUIMsg>
OnCUIMsg(); <!-- 添加了 OnCUIMsg 服务端消息事件; -->
</OnCUIMsg>
</Scripts>
</Windows>Lua脚本如下:
function OnLoad()
SendCustomUILabel(1, "@充值_勾选"); -- 使用OnLoad函数,表示界面创建好了触发到[@充值_勾选]标签
end相关脚本如下:
[@main]
#IF
True
#ACT
OpenCustomUI BaozangWnd //服务端脚本打开客户端 BaozangWnd 界面
break
//服务端打开这个界面后,界面会立即触发OnLoad函数,将执行录下"CustomUI-1.txt"脚本,触发[@充值_main]标签
[@充值_main]
#IF
True
#ACT
PUSHCUIPARAM $GOLDCOUNT ;// 推送金币数量
PUSHCUIPARAM $GAMEGOLD ;// 推送元宝数量
SENDCUIPARAMS ;// 把参数发送给客户端
SENDCUIMSG BaozangWnd 0 ;// 发给送客户端BaozangWnd界面,消息ID为:0 (引擎可以设置消息ID范围:0-65535)
break
//在 BaozangWnd.xml添加OnCUIMsg事件,可通过lua脚本OnCUIMsg函数来接收消息并获取对应参数
function OnCUIMsg()
local msgID = thiswnd:GetCUIMsgID(); -- 申明msgID变量,获取服务端发来的消息ID
if msgID == 0 then -- 检测服务端发来的消息id 等于0
local val_Gold = gamedata:GetSvrCUIParam(0); -- 定义val_Gold来获取引擎发来第1个参数,金币数量
local val_GameGold = gamedata:GetSvrCUIParam(1); -- 定义val_GameGold来获取引擎发来第2个参数,元宝数量
lab1:SetText(val_Gold); -- 将界面上的lab1控件设置显示为金币数量
lab2:SetText(val_GameGold); -- 将界面上的lab2控件设置为元宝数量
end
end
【注意:引擎发来的参数,客户端使用GetSvrCUIParam()函数依次顺序来获取】服务端发送客户端参数第2种命令
服务端脚本
[@main]
#IF
True
#ACT
SENDSVRPARAMS ItemName_1 圣战戒指 ItemNum_1 100 ;// 给客户端发送两个参数,ItemName_1为圣战戒指,ItemNum_1为100
break
客户端lua脚本接收参数
local val_1 = gamedata:GetSvrParam("ItemName_1"); -- 获取服务端发送指定参数数值
local val_2 = gamedata:GetSvrParam("ItemNum_1"); -- 获取服务端发送指定参数数值七、客户端确认弹窗相关函数
1、弹出一个确认窗口函数
PopSimpleConfirm()
PopSimpleConfirm("你需要开启自动续费功能吗?\\请点击确认开启", 10, thiswnd); -- 客户端显示游戏弹出窗口,10是消息ID,thiswnd表示当前窗口。用于玩家点击确定按钮后做出相关处理示范XML中配置:
<Windows name = "BaozangWnd">
<Script file = "customui/BaozangWnd.lua" /> <!-- 该XML是添加 customui/BaozangWnd.lua 可加载lua脚本; -->
<Offset x = "0" y = "0" align = "Center" />
<BackTexture index = "27117" />
<Scripts>
<OnLoad>
OnLoad();
</OnLoad>
<OnMsgBoxConfirm>
OnMsgBoxConfirm(); <!-- 添加了 OnMsgBoxConfirm 事件; 添加此事件后,弹窗消息才能在lua脚本中处理 -->
</OnMsgBoxConfirm>
</Scripts>
<Button name = "btnTest">
<Offset x = "62" y = "100" />
<NormalTexture index = "01133" />
<HighlightTexture index = "01134" />
<PushedTexture index = "01135" />
<DisableTexture index = "01133" />
<Scripts>
<OnClick>
OnClickBtn();
</OnClick>
</Scripts>
</Button>
</Windows>Lua脚本如下:
function OnClickBtn() -- 通过点击按钮的函数来执行弹窗
PopSimpleConfirm("你需要开启自动续费功能吗?\\请点击确认开启", 10, thiswnd); -- 客户端显示游戏弹出窗口,玩家点击确定按钮后,会执行 OnMsgBoxConfirm 函数
end
function OnMsgBoxConfirm()
local msgID = thiswnd:GetConfirmID(); -- 申明msgID变量,获取弹窗发来的消息ID
if msgID == 10 then -- 检测服务端发来的消息id 等于10
-- 判断等于10,可以去执行其他操作
end
end八、客户端消息提示函数
1、客户端发送文字消息
该函数参数1,与服务端 Sendmsg 参数1一致,例如为5,则消息样式与服务端SENDMSG 5 一致
SysMsg()
SysMsg(5, "星河彩虹独立端游戏引擎元神功能开启"); -- 客户端消息栏提示红色文字信息九、设置tips参数
给OtherTipsCfg.xml中根据tips "name" 设置指定参数
该命令只针对OtherTipsCfg,其他XML则无效!
SetTipsParam(tipsname, id, val) -- id支持(0-9)
SetTipsParam("testtips", 0, "000000"); -- 设置OtherTipsCfg中name为testtips,$p0参数为000000OtherTipsCfg中可以使用 {$p0} {$p1} {$p2} {$p3} {$p4} {$p5} {$p6} {$p7} {$p8} {$p9} 显示指定参数
十、播放客户端音效
1、播放客户端音效
播放客户端目录下music.ini中[other]下声音
PlayAudio(id, loop) -- loop:是否循环(0/1)
PlayAudio(5, 0); -- 播放音乐,不循环2、停止播放客户端音效
StopAudio(id)
StopAudio(5); -- 停止播放音乐十一、客户端弹窗提示
1、客户端弹窗文字提示
该命令与服务端MESSAGEBOX命令样式一致
PopSimpleAlert()
PopSimpleAlert("灵兽系统未开放"); -- 客户端显示游戏弹出窗口,仅为一个提示。