From da026be2f92572779052c55b355290b6d38c9ee3 Mon Sep 17 00:00:00 2001 From: zqj <582132116@qq.com> Date: Sat, 7 Aug 2021 11:51:08 +0800 Subject: [PATCH] fix: 一番赏 扭蛋机刷新机制 使用定时器刷新,每秒检测一次。 --- src/models/Capsule.lua | 64 ++++++++++++++++++++++++++++++++++++---------------------------- src/services/capsuled.lua | 13 ++++++++----- 2 files changed, 44 insertions(+), 33 deletions(-) diff --git a/src/models/Capsule.lua b/src/models/Capsule.lua index 17cff91..28f6f7b 100644 --- a/src/models/Capsule.lua +++ b/src/models/Capsule.lua @@ -145,7 +145,20 @@ function Capsule:isShow() return true end -function Capsule:resetTimeOut(curTime, now) +function Capsule:reset2TimeOut(curTime, now) + now = now or skynet.timex() + local interval + if now >= curTime then + self:init() + self:create() + else + interval = curTime - now + end + interval = (interval)* 100 + skynet.timeout(interval, handler(self,self.reset3TimeOut)(curTime)) +end + +function Capsule:reset3TimeOut(curTime, now) now = now or skynet.timex() local cur4Time = curTime or (specTime({hour = 4},now)) @@ -162,8 +175,8 @@ function Capsule:resetTimeOut(curTime, now) local nextTime = dayLater(now) interval = nextTime - now end - interval = (interval + 1)* 100 - skynet.timeout(interval, handler(self,self.resetTimeOut)) + interval = (interval)* 100 + skynet.timeout(interval, handler(self,self.reset3TimeOut)) end function Capsule:reset4TimeOut(curTime, now) @@ -180,19 +193,30 @@ function Capsule:reset4TimeOut(curTime, now) return false end - interval = (interval + 1)* 100 + interval = (interval)* 100 skynet.timeout(interval, handler(self,self.reset4TimeOut)) end -function Capsule:checkTime(resetArr, now) - if resetArr[1] == "3" then +function Capsule:checkTime(reset, now) + local resetArr = reset:toArray(true, "=") + if not next(resetArr) then return false end + + if resetArr[1] == 2 then + if self:getGoodsAmount() > 0 then return false end + local drawEndTime = self:getProperty("drawEndTime") or 0 + if drawEndTime == 0 then return false end + if now - drawEndTime >= resetArr[2] then return true end + --self:reset2TimeOut(drawEndTime + resetArr[2], now) + elseif resetArr[1] == 3 then local cur4Time = specTime({hour = 4},now) if now == cur4Time then return true end - self:resetTimeOut(cur4Time, now) - elseif resetArr[1] == "4" then + --self:reset3TimeOut(cur4Time, now) + elseif resetArr[1] == 4 then if now == resetArr[2] then return true end - self:reset4TimeOut(resetArr[2], now) + --self:reset4TimeOut(resetArr[2], now) end + + return false end function Capsule:refreshing(now) @@ -204,29 +228,13 @@ function Capsule:refreshing(now) if reset == "0" then return false elseif reset == "1" then - if self:getProperty("resetTimes") == 1 then + if self:getProperty("resetTimes") == 0 then + self:setProperty("resetTime", 1) return true end return false else - local resetArr = reset:toArray(true, "=") - if not next(resetArr) then return false end - - if resetArr[1] == "2" then - if self:getGoodsAmount() > 0 then return false end - - local drawEndTime = self:getProperty("drawEndTime") or 0 - if drawEndTime == 0 then return false end - - if now - drawEndTime >= resetArr[2] then - return true - end - return false - - else - self:checkTime(resetArr, now) - end - + return self:checkTime(reset, now) end return false diff --git a/src/services/capsuled.lua b/src/services/capsuled.lua index 4095c3d..b5b8be8 100644 --- a/src/services/capsuled.lua +++ b/src/services/capsuled.lua @@ -81,7 +81,7 @@ end local function add(roleId, capsuleId) local capsule = capsules[capsuleId] - if not capsule then skynet.error("not capsule: " .. capsuleId) return end + if not capsule then skynet.error("add not capsule: " .. capsuleId) return end if next(capsule) then capsule:join(roleId) broadCastCapsule(roleId, capsuleId, {notifyType= NotifyChangeType.JOIN, roleId = roleId}) @@ -91,10 +91,12 @@ local function add(roleId, capsuleId) return nil end -local function capsuleRefreshing() - local now = skynet.timex() +local function capsuleRefreshing(now) for _, v in pairs(capsules) do if v:refreshing(now) then + print("刷新机器looooook....") + print(v:getProperty("id")) + print(v:getProperty("room")) v:init() v:create() end @@ -103,8 +105,9 @@ end --扭蛋机刷新 local function check_capsules() - pcall(capsuleRefreshing) - skynet.timeout(60, check_capsules) + local now = skynet.timex() + pcall(capsuleRefreshing, now) + skynet.timeout(100, check_capsules) end function CMD.reset() -- libgit2 0.21.2