setmetatable(_G, {__index =MainMenuBar_Env});
local skillnum=GetActionNum("skill")
Button_Action5=35
for i=1,skillnum do
local theAction=EnumAction(i-1,"skill")
if theAction:GetDefineID()==35 then
Button_Action5:SetActionItem(theAction:GetID())
Button_Action5:Bright()
break
end
end
if DataPool:IsCanDoAction() then
MAINMENUBAR_BUTTONS[nIndex]:DoAction();
else
PushDebugMessage("你不能这么做。")
return;
end
第一步
服务端lua
strlen 获取字符串长度
strsub(字符串,开始位置,结束位置) 提取字符串
split(字符串,分隔符) 分割字符串
strfing(字符串,要查找的字符) 返回要查找的字符在字符串中的位置
天龙CDK应用部分
strchar(ASC码) 返回ASC码对应的字符
strbyte("字符") 返回字符对应的ASC码
local name="lingyun"
local wz=strfind(name,"yun")
此时 wz=5 说明yun这个字符串出现在 lingyun 这个字符串的第5个位置
如果要查找的字符串未出现在 原字符串中 则返回 nil 所以后面可跟判断
if wz==nil then
说明没有找到相关信息
end
gsub(原字符串,要被替换的字符串,替换成的字符串) 字符串替换
代码local str=gsub(Data,"&BS%w%w%w","")的解释如下:
gsub(Data, pattern, replacement): 这是一个gsub函数的调用,它会对字符串Data执行全局替换。
"&BS%w%w%w": 这是要查找的模式。
&BS: 匹配字面字符串&BS。
%w: 匹配任何单个字母数字字符,等价于[a-zA-Z0-9_]。
%w%w%w: 因此,这部分匹配三个连续的字母数字字符。
"": 这是替换的字符串。在这里,它是一个空字符串,意味着所有匹配&BS%w%w%w模式的子串都会被替换为空字符串,即被删除。
local str = ...: 这部分将gsub函数的结果赋值给局部变量str。gsub函数返回替换后的新字符串和替换的次数。但是在这里,你只关心替换后的新字符串,因此str将包含替换后的字符串。
综上所述,这行代码的作用是从Data字符串中删除所有以&BS开头并跟随三个字母数字字符的子串,并将结果存储在str中。
nSign = "&DZ("..strrep("%d",8)..")".."(%w)".."("..strrep("%d",8)..")".."(%w)".."("..strrep("%d",8)..")"
strrep(s, n): 这是一个字符串重复函数,它将字符串s重复n次。在这里,它被用来生成由8个数字字符(%d)组成的字符串。
"..": 这是Lua中的字符串连接操作符,用于将多个字符串片段连接成一个字符串。
"%d": 这是一个模式,用于匹配任何单个数字字符。
"%w": 这是一个模式,用于匹配任何单个字母数字字符,等价于[a-zA-Z0-9_]。
现在,让我们逐步解析这个字符串的构建过程:
strrep("%d",8): 这将生成一个由8个%d组成的字符串,即"%d%d%d%d%d%d%d%d"。
"&DZ("..strrep("%d",8)..")": 这将生成一个字符串,以&DZ(开头,后面跟着8个%d,然后以)结尾。例如:&DZ(%d%d%d%d%d%d%d%d)。
"..(%w)..": 这将在上一步生成的字符串后面添加一个%w模式。
"..("..strrep("%d",8)..")": 这将再次添加一个由8个%d组成的字符串,并用括号括起来。
"..(%w)..": 这将在上一步生成的字符串后面再次添加一个%w模式。
"..("..strrep("%d",8)..")": 这将再次添加一个由8个%d组成的字符串,并用括号括起来。
最终,nSign变量将包含以下字符串:
复制代码
&DZ(%d%d%d%d%d%d%d%d)(%w)(%d%d%d%d%d%d%d%d)(%w)(%d%d%d%d%d%d%d%d)
这个字符串是一个Lua模式,它可能用于后续的string.match、string.gmatch或string.find等函数中来查找匹配此模式的子串。该模式描述了一个特定的格式,其中包括一个固定的字符串&DZ,后面跟着三个括号包裹的由8个数字字符组成的序列,并且在第二个和第三个数字序列之间有一个字母数字字符。
例如,字符串"&DZ(12345678)a(98765432)b(01234567)"将匹配这个模式。
local name="lingyun"
local newname=gsub(name,"yun","wu")
此时 newname="lingwu" 将“lingyun”中的“yun”替换成"wu"
local name,level="lingyun",15
local str=format("玩家%s,现在等级%d",tostring(name),level)
format格式化字符串 %s 则后面需要对应一个 字符串类型 %d 后面跟整数型
此语句后 str 的值为 "玩家lingyun,现在等级15"
数值运算学习
ceil(15/14) 无论结果小数点后是几 都将整数部分+1 例如15/14=1.1 则返回2 15/7=2.1 返回3 15/10=1.5 返回 2
mod(15,10) 取余数 返回5
floor(15/11) 取整数部分 返回 1 例如floor(15/7) 返回2 无视小数点后的数字
数组列表学习
local myarr={1,2,3}
getn(myarr) 返回数组中的元素数量 例如这里 返回3 表示数组中有3个元素
local name={}
tinsert(name,"lingyun")
tinsert(name,"xuewu")
此时 name[1]="lingyun" name[2]=xuewu
tremove(name,1)
此时 删除name数组中的第一个元素 第二个元素向前移name[1]="xuewu" name[2]=nil
local myarr={[102]={1,2,3},[115]={4,5,6},}
local tmparr={0,0,0}
for i,tmp in myarr do
--进入第一次循环 此时 tmp[i] = myarr[102] i=102
for j=1,3 do
tmparr[j]=tmparr[j]+tmp[j]
--进入第一次循环 此时tmp[j] 相当于 myarr[102][1] 此时 j=1
end
end
客户端部分lua
local PrizeAction = GemMelting:UpdateProductAction(tonumber(shuzu[i])) --这里tonumber(shuzu[i]) 是获取到的物品ID
XiaoXiang_DuiHuanUI2_Bk_Icon[i]:SetActionItem(PrizeAction:GetID());--这里显示出对应的图标信息
local theAction = EnumAction(nIndex-1, "packageitem") --这里获取到背包位置的物品信息
if theAction:GetID() ~= 0 then
local nPacketItemID = tonumber(theAction:GetDefineID()) --获取到该物品的真实ID
:SetActionItem(PrizeAction:GetID()); --设置容器需要显示的 图标信息
strName = Pet : GetStrAptitude(nIndex); --获取力量资质
Pet_StrAptitude : SetText( strName );
strName = Pet : GetIntAptitude(nIndex); --获取灵气资质
Pet_NimbusAptitude : SetText( strName );
strName = Pet : GetPFAptitude(nIndex); --获取体力资质
Pet_PhysicalStrengthAptitude : SetText( strName );
strName = Pet : GetStaAptitude(nIndex); --获取定力资质
Pet_StabilityAptitude : SetText( strName );
strName = Pet : GetDexAptitude(nIndex); --获取身法资质
Pet_DexterityAptitude : SetText( strName );
strName = Pet : GetStr(nIndex);--获取力量属性
XB_PetLL_SX : SetText( strName );
strName = Pet : GetInt(nIndex);--获取灵气属性
XB_PetLQ_SX : SetText( strName );
strName = Pet : GetPF(nIndex);--获取体力属性
XB_PetTL_SX : SetText( strName );
strName = Pet : GetSta(nIndex);--获取定力属性
XB_PetDL_SX : SetText( strName );
strName = Pet : GetDex(nIndex);--获取身法属性
XB_PetSF_SX : SetText( strName );
以上是客户端
function x830004_jiance(sceneId,selfId,parmPetIndex,petGUID_H,petGUID_L)
local shuxing={}
local nStrPer = LuaFnGetPet_StrPerception(sceneId,selfId,parmPetIndex);
if nStrPer > x830004_g_ZZSX then
LuaFnSetPetData(sceneId,selfId,petGUID_H,petGUID_L,6,x830004_g_ZZSX)
x830004_Tip( sceneId,selfId,"当前宠物力量资质已达上限" )
return
end
local nSprPer = LuaFnGetPet_SprPerception(sceneId,selfId,parmPetIndex);
if nSprPer > x830004_g_ZZSX then
LuaFnSetPetData(sceneId,selfId,petGUID_H,petGUID_L,7,x830004_g_ZZSX)
x830004_Tip( sceneId,selfId,"当前宠物灵气资质已达上限" )
return
end
local nConPer = LuaFnGetPet_ConPerception(sceneId,selfId,parmPetIndex);
if nConPer > x830004_g_ZZSX then
LuaFnSetPetData(sceneId,selfId,petGUID_H,petGUID_L,8,x830004_g_ZZSX)
x830004_Tip( sceneId,selfId,"当前宠物体力资质已达上限" )
return
end
local nIntPer = LuaFnGetPet_IntPerception(sceneId,selfId,parmPetIndex);
if nIntPer >x830004_g_ZZSX then
LuaFnSetPetData(sceneId,selfId,petGUID_H,petGUID_L,9,x830004_g_ZZSX)
x830004_Tip( sceneId,selfId,"当前宠物定力资质已达上限" )
return
end
local nDexPer = LuaFnGetPet_DexPerception(sceneId,selfId,parmPetIndex);
if nDexPer > x830004_g_ZZSX then
LuaFnSetPetData(sceneId,selfId,petGUID_H,petGUID_L,10,x830004_g_ZZSX) --改回最大值
x830004_Tip( sceneId,selfId,"当前宠物身法资质已达上限" )
return
end
for i=0 ,4 do
shuxing[i+1]=LuaFnGetPet_AttrLevel1(sceneId,selfId,parmPetIndex,i) --这里获取到宠物的 力量 灵气 体力 定力 身法 的属性
if shuxing[i+1] >x830004_g_ZZSX then
LuaFnSetPetData(sceneId,selfId,petGUID_H,petGUID_L,i,x830004_g_ZZSX) --改回最大值
end
end
end
以上是服务端
转载请注明:雪宝小站-雪宝的小知识库 » 天龙笔记 » 天龙笔记一
发表评论