今天我们来讲一下如何运用UI实现签到的功能。首先先弄个UI:
对勾表示玩家已经签到过了,当然你也可以改成其它形式。之后打开触发器。
打开这个页面一般会在玩家进入游戏的时候打开。所以先打开页面
之后呢,就是让对勾隐藏了。如果这一天没有签到就将对勾隐藏,签到了就让对勾显示。
那么怎么做呢?首先得有个容器存储玩家哪一天签了,哪一天没签。那么这个容器就是字符串组了
这里呢,编号几就是代表第几天,然后将默认值输入“无”,代表这一天还没有签到。如果这一天签到了,字符串会是签到的日期。
接下来就是对勾的问题了。我们可以先让对勾隐藏,然后再逐一判断字符串之后显示。
下面要判断字符串了,如果这一天已经签到了那就显示对勾。上面说了字符串在没有签到的时候会变成“无”,那要判断是不是已经签到,就是判断字符串是不是“无”
接着运行下个触发器。下个触发器和第一天的差别不大,只是字符串组的位置、对勾元件和下次运行的触发器不同
第一天:
第二天:
第三天:(条件就不截图了,都差不多,只是编号变化)
第四天:
第五天:
第六天:
第七天:这里就不用运行下个触发器了,这是最后一个触发器。
关闭:关闭就没什么好讲的了
现在就到了核心环节,点击签到按钮。
比如现在是第一天,那么点击按钮时,字符串组第一个位置的字符串有三种可能:
那么该如何做呢?那就是点击按钮的时候运行3个触发器
在点击按钮里添加运行这个触发器,之后会运行3个触发器
因为字符串是可以自己定义的,那么这里定义日期的格式是年月日。比如今天是2021年8月25日,那么字符串 就是2021825。那么先判断是否签到过,也就是判断字符串是不是今天的日期。
签到过了就会提示签到之类的话,这里可以自由改
接着没签到过,也就是字符串为”无“,动作就是提示签到成功和添加物品之类。最后别忘了,把对勾设置成显示。
当然为了触发器完整,还得设置字符串为今天的时间
那如果这两个条件都不满足,那就会运行下三个触发器了。
剩下三个触发器和第一个也不差太多,只是所有这个变化:
一共要弄7组这样的触发器,所以慢慢复制吧(/打脸滑稽
第七天签到之后要进行初始化,要把字符串组中所有字符串都设置成”无“,准备下一轮签到。
之后要隐藏对勾,之前的打开页面是可以隐藏页面的,所以最后运行触发器。
但是,第七天重置后点签到会签到第一天的,而不会提示已签到。所以要再设置一个私有变量,这个私有变量表示上次签到完成的日期。
这里把它设置为这天的日期
(后面都是一样的)
再在第一天里添加条件就可以了,后面的字符串拼接都是一样的
以下是脚本实现方法:
local UIID = [[6999883093680815218]]--界面ID
local y1, y2, y3, y4, y5, y6, y7 = [[6999883093680815218_27]],[[6999883093680815218_28]],[[6999883093680815218_29]],[[6999883093680815218_30]],[[6999883093680815218_31]],[[6999883093680815218_32]],[[6999883093680815218_33]]--对勾的元件ID
local button_close = [[6999883093680815218_5]]--关闭按钮的ID
local mainID = [[6999883093680815218_23]]--签到按钮ID
local i1, i2, i3, i4, i5, i6, i7 = {}, {}, {}, {}, {}, {}, {}--每一天是否签到私有变量
local last = {}--上次签到一轮的日期
local function registerEvent(event_str,func)--注册事件的函数
ScriptSupportEvent:registerEvent(event_str,function(event)
local a, b = pcall(func, event)
if a == false then
Chat:sendSystemMsg('#R脚本错误:'..b)
error('#R脚本错误:'..b)
end
end)
end
local function UIclose(event)--关闭页面
if event.btnelenemt == button_close then
Player:hideUIView(event.eventobjid,UIID)
end
end
local function UIopen(event)--打开页面
Player:openUIView(event.eventobjid,UIID)
--判断是否为空,这里不用像触发器一样先隐藏后判断
if i1[event.eventobjid] == nil then Coustomui:hideElement(event.eventobjid, UIID, y1)end
if i2[event.eventobjid] == nil then Coustomui:hideElement(event.eventobjid, UIID, y2)end
if i3[event.eventobjid] == nil then Coustomui:hideElement(event.eventobjid, UIID, y3)end
if i4[event.eventobjid] == nil then Coustomui:hideElement(event.eventobjid, UIID, y4)end
if i5[event.eventobjid] == nil then Coustomui:hideElement(event.eventobjid, UIID, y5)end
if i6[event.eventobjid] == nil then Coustomui:hideElement(event.eventobjid, UIID, y6)end
if i7[event.eventobjid] == nil then Coustomui:hideElement(event.eventobjid, UIID, y7)end
end
local function click(event)--点击签到按钮
local now = os.date('%Y-%m-%d')
if event.btnelenemt == mainID and last[event.eventobjid] ~= now then--按钮判断和上次签到一轮的日期判断
if i1[event.eventobjid] == now or i1[event.eventobjid] == nil then--如果是今天或者是空就进来
if i1[event.eventobjid] == now then--已经签过了
Player:notifyGameInfo2Self(event.eventobjid,'你今天已经签到过了,明天再来吧~')
elseif i1[event.eventobjid] == nil then--签到
i1[event.eventobjid] = now
Player:notifyGameInfo2Self(event.eventobjid, '签到成功~')
Coustomui:showElement(event.eventobjid, UIID, y1)
end
else--既不是今天也不是空
if i2[event.eventobjid] == now or i2[event.eventobjid] == nil then
if i2[event.eventobjid] == now then
Player:notifyGameInfo2Self(event.eventobjid,'你今天已经签到过了,明天再来吧~')
elseif i2[event.eventobjid] == nil then
i2[event.eventobjid] = now
Player:notifyGameInfo2Self(event.eventobjid, '签到成功~')
Coustomui:showElement(event.eventobjid, UIID, y2)
end
else
if i3[event.eventobjid] == now or i3[event.eventobjid] == nil then
if i3[event.eventobjid] == now then
Player:notifyGameInfo2Self(event.eventobjid,'你今天已经签到过了,明天再来吧~')
elseif i3[event.eventobjid] == nil then
i3[event.eventobjid] = now
Player:notifyGameInfo2Self(event.eventobjid, '签到成功~')
Coustomui:showElement(event.eventobjid, UIID, y3)
end
else
if i4[event.eventobjid] == now or i4[event.eventobjid] == nil then
if i4[event.eventobjid] == now then
Player:notifyGameInfo2Self(event.eventobjid,'你今天已经签到过了,明天再来吧~')
elseif i4[event.eventobjid] == nil then
i4[event.eventobjid] = now
Player:notifyGameInfo2Self(event.eventobjid, '签到成功~')
Coustomui:showElement(event.eventobjid, UIID, y4)
end
else
if i5[event.eventobjid] == now or i5[event.eventobjid] == nil then
if i5[event.eventobjid] == now then
Player:notifyGameInfo2Self(event.eventobjid,'你今天已经签到过了,明天再来吧~')
elseif i5[event.eventobjid] == nil then
i5[event.eventobjid] = now
Player:notifyGameInfo2Self(event.eventobjid, '签到成功~')
Coustomui:showElement(event.eventobjid, UIID, y5)
end
else
if i6[event.eventobjid] == now or i6[event.eventobjid] == nil then
if i6[event.eventobjid] == now then
Player:notifyGameInfo2Self(event.eventobjid,'你今天已经签到过了,明天再来吧~')
elseif i6[event.eventobjid] == nil then
i6[event.eventobjid] = now
Player:notifyGameInfo2Self(event.eventobjid, '签到成功~')
Coustomui:showElement(event.eventobjid, UIID, y6)
end
else
if i7[event.eventobjid] == now or i7[event.eventobjid] == nil then
if i7[event.eventobjid] == now then
Player:notifyGameInfo2Self(event.eventobjid,'你今天已经签到过了,明天再来吧~')
elseif i7[event.eventobjid] == nil then
i7[event.eventobjid] = now
Player:notifyGameInfo2Self(event.eventobjid, '签到成功~')
--初始化
Coustomui:showElement(event.eventobjid, UIID, y7)
Coustomui:hideElement(event.eventobjid, UIID, y1)
Coustomui:hideElement(event.eventobjid, UIID, y2)
Coustomui:hideElement(event.eventobjid, UIID, y3)
Coustomui:hideElement(event.eventobjid, UIID, y4)
Coustomui:hideElement(event.eventobjid, UIID, y5)
Coustomui:hideElement(event.eventobjid, UIID, y6)
Coustomui:hideElement(event.eventobjid, UIID, y7)
i1[event.eventobjid] = nil
i2[event.eventobjid] = nil
i3[event.eventobjid] = nil
i4[event.eventobjid] = nil
i5[event.eventobjid] = nil
i6[event.eventobjid] = nil
i7[event.eventobjid] = nil
end
else
--走到这实际上是出现错误了,初始化
Player:notifyGameInfo2Self(event.eventobjid,'你今天已经签到过了,明天再来吧~')
Coustomui:hideElement(event.eventobjid, UIID, y1)
Coustomui:hideElement(event.eventobjid, UIID, y2)
Coustomui:hideElement(event.eventobjid, UIID, y3)
Coustomui:hideElement(event.eventobjid, UIID, y4)
Coustomui:hideElement(event.eventobjid, UIID, y5)
Coustomui:hideElement(event.eventobjid, UIID, y6)
Coustomui:hideElement(event.eventobjid, UIID, y7)
i1[event.eventobjid] = nil
i2[event.eventobjid] = nil
i3[event.eventobjid] = nil
i4[event.eventobjid] = nil
i5[event.eventobjid] = nil
i6[event.eventobjid] = nil
i7[event.eventobjid] = nil
end
end
end
end
end
end
end
elseif event.btnelenemt == mainID then--和上一轮正好是一天
Player:notifyGameInfo2Self(event.eventobjid,'你今天已经签到过了,明天再来吧~')
end
end
--注册事件
registerEvent('UI.Button.Click',UIclose)
registerEvent('Game.AnyPlayer.EnterGame',UIopen)
registerEvent('UI.Button.Click',click)
今天的内容就到这里,谢谢~