e51ff6d2
zhouhaihai
冒险~
|
1
|
local Activity = class("Activity", require("shared.ModelBase"))
|
be4e8031
zhouhaihai
活动 拾荒
|
2
|
local string_format = string.format
|
be83d162
zhouahaihai
登陆成功。 增加数据结构修正功能
|
3
|
|
e51ff6d2
zhouhaihai
冒险~
|
4
|
Activity.ActivityType = {
|
ea40710f
zhouhaihai
活动
|
5
|
Sign = 1, -- 签到
|
706b517e
测试
翻倍掉落活动,商城免费宝箱
|
6
|
DoubleDrop = 2, -- 双倍掉落
|
e51ff6d2
zhouhaihai
冒险~
|
7
|
}
|
be83d162
zhouahaihai
登陆成功。 增加数据结构修正功能
|
8
|
|
9a1c54b2
zhouhaihai
活动
|
9
|
|
e51ff6d2
zhouhaihai
冒险~
|
10
11
12
13
|
local function checkActivityType(activityType)
if type(activityType) == "string" then
activityType = Activity.ActivityType[activityType]
end
|
ea40710f
zhouhaihai
活动
|
14
|
return activityType or 0
|
e51ff6d2
zhouhaihai
冒险~
|
15
16
17
18
19
20
|
end
function Activity:ctor(properties)
Activity.super.ctor(self, properties)
|
9a1c54b2
zhouhaihai
活动
|
21
|
self._isOpen = {}
|
e51ff6d2
zhouhaihai
冒险~
|
22
|
end
|
be83d162
zhouahaihai
登陆成功。 增加数据结构修正功能
|
23
24
|
|
e51ff6d2
zhouhaihai
冒险~
|
25
|
Activity.schema = {
|
be4e8031
zhouhaihai
活动 拾荒
|
26
|
actime = {"table", {}}, -- 最近检查某项活动的开始时间 {id = time}
|
ea40710f
zhouhaihai
活动
|
27
|
act1 = {"table", {}}, -- {0 = day, 1= -1, 2 = -1} == 签到活动
|
e51ff6d2
zhouhaihai
冒险~
|
28
|
}
|
be83d162
zhouahaihai
登陆成功。 增加数据结构修正功能
|
29
|
|
e51ff6d2
zhouhaihai
冒险~
|
30
31
|
function Activity:data()
return {
|
be4e8031
zhouhaihai
活动 拾荒
|
32
|
actime = self:getProperty("actime"),
|
ea40710f
zhouhaihai
活动
|
33
|
act1 = self:getProperty("act1"),
|
e51ff6d2
zhouhaihai
冒险~
|
34
|
}
|
be83d162
zhouahaihai
登陆成功。 增加数据结构修正功能
|
35
36
|
end
|
e51ff6d2
zhouhaihai
冒险~
|
37
|
|
9a1c54b2
zhouhaihai
活动
|
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
function Activity:updateProperty(params)
local type, default = table.unpack(self.schema[params.field])
if params.delta then
self:incrProperty(params.field, params.delta)
if not params.notNotify then
self.owner:notifyUpdateProperty(params.field, self:getProperty(params.field))
end
return true
end
if params.value then
self:setProperty(params.field, params.value)
if not params.notNotify then
self.owner:notifyUpdateProperty(params.field, self:getProperty(params.field))
end
return true
end
return false
end
|
ea40710f
zhouhaihai
活动
|
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
|
function Activity:isOpenRaw(activityType, now)
activityType = checkActivityType(activityType)
local actData = csvdb["activity_ctrlCsv"][activityType]
if not actData then return end
if actData.time == "" then -- 关闭
return false
end
local st = 0
local et = 0
local now = skynet.timex()
if actData.ttype == 0 then -- 时间开放
local openTimes = actData.time:toArray(false, "=")
if openTimes[1] ~= "0" then
st = toUnixtime(openTimes[1]..string_format("%02x", RESET_TIME))
end
if openTimes[2] ~= "0" then
et = toUnixtime(openTimes[2]..string_format("%02x", RESET_TIME))
end
elseif actData.ttype == 1 then -- 周期开放
local openTimes = actData.time:toArray(true, "=")
local resetTime = toUnixtime(tostring(openTimes[1]) .. string_format("%02x", RESET_TIME))
local r = math.floor((now - resetTime) / (openTimes[3] * 86400))
st = resetTime + r * (openTimes[3] * 86400)
et = st + openTimes[2] * 86400
else
return
end
if now >= st and (et == 0 or now < et) then
return true, st
end
return false
end
-- 缓存开放
|
9a1c54b2
zhouhaihai
活动
|
97
98
|
function Activity:isOpen(activityType)
activityType = checkActivityType(activityType)
|
ea40710f
zhouhaihai
活动
|
99
100
101
102
103
104
105
|
return self._isOpen[activityType]
end
function Activity:getActData(actType)
actType = checkActivityType(actType)
return self:getProperty("act" .. actType)
end
|
9a1c54b2
zhouhaihai
活动
|
106
|
|
ea40710f
zhouhaihai
活动
|
107
108
109
|
function Activity:updateActData(actType, data, notNotify)
actType = checkActivityType(actType)
self:updateProperty({field = "act" .. actType, value = data, notNotify = notNotify})
|
9a1c54b2
zhouhaihai
活动
|
110
111
|
end
|
ea40710f
zhouhaihai
活动
|
112
|
|
9a1c54b2
zhouhaihai
活动
|
113
|
-- 跨天刷新 --登录刷新
|
ea40710f
zhouhaihai
活动
|
114
115
|
function Activity:checkActivityStatus(now, isCrossDay, notify)
self._isOpen = {}
|
be4e8031
zhouhaihai
活动 拾荒
|
116
|
local actime = self:getProperty("actime")
|
ea40710f
zhouhaihai
活动
|
117
|
local change = false
|
be4e8031
zhouhaihai
活动 拾荒
|
118
|
for actType, actData in pairs(csvdb["activity_ctrlCsv"]) do
|
ea40710f
zhouhaihai
活动
|
119
120
121
122
|
local isOpen, startTime = self:isOpenRaw(actType, now)
self._isOpen[actType] = isOpen
if isOpen then
|
be4e8031
zhouhaihai
活动 拾荒
|
123
|
if actime[actType] and actime[actType] == startTime then -- 还是之前的状态 开放中
|
ea40710f
zhouhaihai
活动
|
124
|
else -- 重置
|
be4e8031
zhouhaihai
活动 拾荒
|
125
|
actime[actType] = startTime
|
ea40710f
zhouhaihai
活动
|
126
127
128
129
130
|
self:closeActivity(actType, notify, true)
self:initActivity(actType, isCrossDay, notify)
change = true
end
else
|
be4e8031
zhouhaihai
活动 拾荒
|
131
|
if actime[actType] then
|
ea40710f
zhouhaihai
活动
|
132
|
self:closeActivity(actType, notify)
|
be4e8031
zhouhaihai
活动 拾荒
|
133
|
actime[actType] = nil
|
ea40710f
zhouhaihai
活动
|
134
135
136
137
138
|
change = true
end
end
end
if change then
|
be4e8031
zhouhaihai
活动 拾荒
|
139
|
self:updateProperty({field = "actime", value = actime, notNotify = not notify})
|
ea40710f
zhouhaihai
活动
|
140
|
end
|
9a1c54b2
zhouhaihai
活动
|
141
142
|
end
|
ea40710f
zhouhaihai
活动
|
143
|
local activityFunc = {}
|
9a1c54b2
zhouhaihai
活动
|
144
|
|
ea40710f
zhouhaihai
活动
|
145
146
147
148
149
150
151
152
153
154
155
156
157
|
activityFunc[Activity.ActivityType.Sign] = {
-- ["check"] = function(self, actType, notify) -- 检查
-- end,
["init"] = function(self, actType, isCrossDay, notify)
if not isCrossDay then
activityFunc[Activity.ActivityType.Sign]["crossDay"](self, actType, notify)
end
end,
-- ["close"] = function(self, actType, notify)
-- end,
["crossDay"] = function(self, actType, notify)
local curData = self:getActData(actType)
curData[0] = (curData[0] or 0) + 1
|
be4e8031
zhouhaihai
活动 拾荒
|
158
|
local actData = csvdb["new_signInCsv"]
|
ea40710f
zhouhaihai
活动
|
159
160
161
162
163
164
|
if curData[0] > #actData then return end -- 满了就忽略了
-- 没满更新一下
self:updateActData(actType, curData, not notify)
end,
}
|
9a1c54b2
zhouhaihai
活动
|
165
|
|
ea40710f
zhouhaihai
活动
|
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
|
function Activity:initActivity(actType, isCrossDay, notify)
if activityFunc[actType] and activityFunc[actType]['close'] then
activityFunc[actType]["init"](self, actType, isCrossDay, notify)
end
end
function Activity:closeActivity(actType, notify, notUpdateAct)
if activityFunc[actType] and activityFunc[actType]['close'] then
activityFunc[actType]["close"](self, actType, notify)
end
self:updateActData(actType, Activity.schema["act" .. actType][2], not notify or notUpdateAct)
end
function Activity:refreshDailyData(notify)
for actType, status in pairs(self._isOpen) do
if status then
if activityFunc[actType] and activityFunc[actType]['crossDay'] then
activityFunc[actType]["crossDay"](self, actType, notify)
end
end
end
|
9a1c54b2
zhouhaihai
活动
|
187
188
|
end
|
ea40710f
zhouhaihai
活动
|
189
|
function Activity:checkActivity(notNotify, activityType, ...)
|
9a1c54b2
zhouhaihai
活动
|
190
|
if not activityType then return end
|
ea40710f
zhouhaihai
活动
|
191
192
193
|
if not self:isOpen(activityType) then return end
if activityFunc[activityType] and activityFunc[activityType]['check'] then
activityFunc[activityType]["check"](self, activityType, not notNotify, ...)
|
9a1c54b2
zhouhaihai
活动
|
194
195
196
|
end
end
|
706b517e
测试
翻倍掉落活动,商城免费宝箱
|
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
|
-- 获取此次挂机掉落翻倍时长
function Activity:getActHangDoubleTime(lastTs, nowTs)
local type = "DoubleDrop"
local actId = checkActivityType(type)
local isOpen = self:isOpen(type)
local openTs = self:getProperty("actime")[actId] or 0
local timeNow = skynet.timex()
lastTs = math.max(lastTs, openTs)
if isOpen then
if nowTs > openTs then
return nowTs - lastTs
else
return 0
end
end
return 0
end
|
e51ff6d2
zhouhaihai
冒险~
|
215
|
|
706b517e
测试
翻倍掉落活动,商城免费宝箱
|
216
|
return Activity
|