上一期给大家分享了一些文件的基础知识, 本来想继续分享一下但是又觉得对于新人来说意义不大, 干脆直接开始讲lua吧,本次先分享一下几个最常见的
目录 :
一: 点数兑换,CDK介绍
二: 提示和对话框提示,
一: 点数兑换,CDK介绍
上个文章已经提到了充值的路径Public\Data\Script\event\prize\eprize.lua
该文件主要可以分成两部分
- CDK相关的验证和回调 : 比如常用的财富卡,武圣卡之类的或者是,或者一些物品CDK
- 兑换回调
1.初识Lua
既然我们开始学习相关lua那么先简单来介绍一下,如下:
function x888899_AskNewUserCard( sceneId, selfId, card)
if strlen(card) == 14 then
local nCDKHead = strsub(card,1,4);
if nCDKHead ~= "JZTL" then
BeginEvent(sceneId);
AddText(sceneId, "#{CFWPJH_111101_05}");
EndEvent(sceneId);
DispatchMissionTips(sceneId, selfId);
return 0
end
end
end
这是一个简单的CDK兑换码的检查, 函数名为x888899_AskNewUserCard
他一共有3个入参,其中前两个入参是必须的,sceneId一般代表的是当前场景ID,selfId代表的是调用当前函数的用户Id,card是函数的个性化参数
这里给大家做一下简单的解读: 首先判断card的长度是否是14位, 不是不做任何操作,截取Card前4位并且判断为JZTL继续操作, 弹出客户端提示,并且返回 0
这里一定要注意个东西#{CFWPJH_111101_05}
这个是一种取址符的写法他其实并不是直接输出CFWPJH_111101_05 而是对应一个命名为CFWPJH_111101_05的常量,他的真实输出要根据常量的定义决定,所有的常量定义在StrDictionary中
其实这里用到的所有函数并不是很难,当然有一些内部的写法就需要时间来积累了
2: 将点数兑换为元宝,红利等
正常所有的兑换回调都是调用x888899_BuyRet 函数function x888899_BuyRet( sceneId, selfId, ntype, nPoint, nLeftPoint )
前面两个入参就不说了后面3个分别是调用类型, 点数(具体值) ,第三个没太关注过剩余点数之类的吧
元宝和绑元都有函数可以直接调用,如元宝:
这里举例1:1 此方法一共有三种写法增加元宝,扣除元宝 ,查看剩余元宝
增加元宝: YuanBao(sceneId,selfId,selfId,1,nPoint)
扣除元宝: YuanBao(sceneId,selfId,selfId,2,nPoint)
查看剩余元宝: YuanBao(sceneId,selfId,selfId,3,nPoint)
大家可以发现这里其实变化的只是1,2,3 如果有过编程知识的人其实就能知道 就想上边的回调中有个Ntype类型 ,会根据类型在做一个分流具体是增加元宝,还是扣除元宝,
绑元同样是类似的写法: ZengDian(sceneId,selfId,selfId,1,nPoint) 同样也是三种调用类型
这些都是定义好的有方法可以直接调用的, 下面的红利就比较特殊了
SetMissionData(sceneId,selfId,MD_HONGLI,SetMissionData(sceneId,selfId,MD_HONGLI)+nPoint)
可以明显的发现这个写法变了,红利的写法并没有完整的定义,当然这是单机的写法不知道真实是不是也有类似元宝的写法
那为什么红利写法变成这样了这个会涉及到一系列的东西包括数据库的存储我们后边单独找一章来分析一下
二: 提示和对话框提示
其实提示还有很多种比如系统提示,或者是滚动的提示这些后边会提到 先说一下比较常用的不同的提示和对话框提示
不知道小伙伴们有没有注意过大部分Lua脚本最下面都会有如下的写法
--**********************************
-- 对话窗口信息提示
--**********************************
function x888899_NotifyFailBox( sceneId, selfId, targetId, msg )
BeginEvent( sceneId )
AddText( sceneId, msg )
EndEvent( sceneId )
DispatchEventList( sceneId, selfId, targetId )
end
function x888899_NotifyFail( sceneId, selfId, msg )
BeginEvent( sceneId )
AddText( sceneId, msg )
EndEvent( sceneId )
DispatchMissionTips( sceneId, selfId )
end
还有很多是直接写成在代码需要提示的地方单独写一句
BeginEvent( sceneId )
AddText( sceneId, msg )
EndEvent( sceneId )
DispatchEventList( sceneId, selfId, targetId )
其实都是一样的,只是在写法上封装起来更可读和更好的理解
两个函数其实基本差不多,以后前两个参数我们就不过多解释了直接跳过
targetId 代表的是提示框的npc (存疑, -1默认应该是缺省的当前NPC )
msg 则是具体的提示内容
个人观点: 多的参数应该就是用来确定NPC的
End–