星河彩虹独立端知识库
文档目录
客户端说明

彩虹独立端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>

二、全局对象

lua脚本寻找当前窗口下指定子控件
说明:通过lua脚本去寻找子控件,需要在Onload函数下进行。Onload是创建完界面触发,需要创建完所有窗口控件,才可以去寻找窗口下所有子控件。

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变量赋值为当前页ID

11、界面播放特效

代码示例
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的值就是thiswnd

8、显示控件函数

代码示例
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的纹理ID

Lable控件特有函数 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(); -- 获取点击该物品框的索引ID

Edit控件特有函数

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-100

2、发送触发服务端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参数为000000

OtherTipsCfg中可以使用 {$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("灵兽系统未开放"); -- 客户端显示游戏弹出窗口,仅为一个提示。