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
liuzujun
翻倍掉落活动,商城免费宝箱
|
6
|
DoubleDrop = 2, -- 双倍掉落
|
024370be
liuzujun
双倍掉掉落bug
|
7
8
9
10
|
FoodSell = 3, --贩卖周 料理
DrawHero = 4, --抽卡周 招募
AdvDraw = 5, --拾荒抽周 资助
OpenBox = 6, --拆解周 时钟箱
|
51d9d20b
liuzujun
付费签到,应用市场反馈
|
11
|
PaySignIn = 7, --付费签到
|
93f6e69b
liuzujun
拾荒选择时间,抽卡增加sr保底
|
12
13
|
SsrUpPoolChange = 10, -- 特定英雄活动,切卡池
|
e51ff6d2
zhouhaihai
冒险~
|
14
|
}
|
be83d162
zhouahaihai
登陆成功。 增加数据结构修正功能
|
15
|
|
9a1c54b2
zhouhaihai
活动
|
16
|
|
e51ff6d2
zhouhaihai
冒险~
|
17
18
19
20
|
local function checkActivityType(activityType)
if type(activityType) == "string" then
activityType = Activity.ActivityType[activityType]
end
|
ea40710f
zhouhaihai
活动
|
21
|
return activityType or 0
|
e51ff6d2
zhouhaihai
冒险~
|
22
23
24
25
26
27
|
end
function Activity:ctor(properties)
Activity.super.ctor(self, properties)
|
9a1c54b2
zhouhaihai
活动
|
28
|
self._isOpen = {}
|
e51ff6d2
zhouhaihai
冒险~
|
29
|
end
|
be83d162
zhouahaihai
登陆成功。 增加数据结构修正功能
|
30
31
|
|
e51ff6d2
zhouhaihai
冒险~
|
32
|
Activity.schema = {
|
be4e8031
zhouhaihai
活动 拾荒
|
33
|
actime = {"table", {}}, -- 最近检查某项活动的开始时间 {id = time}
|
7f9f002d
liuzujun
循环周活动
|
34
|
round = {"table", {}}, -- 记录活动到了第几轮 {id = roundnum}
|
ea40710f
zhouhaihai
活动
|
35
|
act1 = {"table", {}}, -- {0 = day, 1= -1, 2 = -1} == 签到活动
|
7f9f002d
liuzujun
循环周活动
|
36
37
38
39
|
act3 = {"table", {}}, -- {0 = 抽卡次数, 1=1, 2=1} 抽卡周活动 1表示领取过该档位的奖励
act4 = {"table", {}}, -- {0 = 贩卖数量, 1=1, 2=1} 贩卖周活动 1表示领取过该档位的奖励
act5 = {"table", {}}, -- {0 = 拆解数量, 1=1, 2=1} 拆解周活动 1表示领取过该档位的奖励
act6 = {"table", {}}, -- {0 = 拾荒消耗远古金币数量, 1=1, 2=1} 拾荒周活动 1表示领取过该档位的奖励
|
51d9d20b
liuzujun
付费签到,应用市场反馈
|
40
|
act7 = {"table", {}}, -- {1 = 1, 2 = 1} == 付费签到活动
|
e51ff6d2
zhouhaihai
冒险~
|
41
|
}
|
be83d162
zhouahaihai
登陆成功。 增加数据结构修正功能
|
42
|
|
e51ff6d2
zhouhaihai
冒险~
|
43
44
|
function Activity:data()
return {
|
be4e8031
zhouhaihai
活动 拾荒
|
45
|
actime = self:getProperty("actime"),
|
7f9f002d
liuzujun
循环周活动
|
46
|
round = self:getProperty("round"),
|
ea40710f
zhouhaihai
活动
|
47
|
act1 = self:getProperty("act1"),
|
7f9f002d
liuzujun
循环周活动
|
48
49
50
51
|
act3 = self:getProperty("act3"),
act4 = self:getProperty("act4"),
act5 = self:getProperty("act5"),
act6 = self:getProperty("act6"),
|
51d9d20b
liuzujun
付费签到,应用市场反馈
|
52
|
act7 = self:getProperty("act7"),
|
e51ff6d2
zhouhaihai
冒险~
|
53
|
}
|
be83d162
zhouahaihai
登陆成功。 增加数据结构修正功能
|
54
55
|
end
|
e51ff6d2
zhouhaihai
冒险~
|
56
|
|
9a1c54b2
zhouhaihai
活动
|
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
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
活动
|
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
|
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
活动
|
116
117
|
function Activity:isOpen(activityType)
activityType = checkActivityType(activityType)
|
ea40710f
zhouhaihai
活动
|
118
119
120
121
122
123
124
|
return self._isOpen[activityType]
end
function Activity:getActData(actType)
actType = checkActivityType(actType)
return self:getProperty("act" .. actType)
end
|
9a1c54b2
zhouhaihai
活动
|
125
|
|
ea40710f
zhouhaihai
活动
|
126
127
128
|
function Activity:updateActData(actType, data, notNotify)
actType = checkActivityType(actType)
self:updateProperty({field = "act" .. actType, value = data, notNotify = notNotify})
|
9a1c54b2
zhouhaihai
活动
|
129
130
|
end
|
ea40710f
zhouhaihai
活动
|
131
|
|
9a1c54b2
zhouhaihai
活动
|
132
|
-- 跨天刷新 --登录刷新
|
ea40710f
zhouhaihai
活动
|
133
134
|
function Activity:checkActivityStatus(now, isCrossDay, notify)
self._isOpen = {}
|
be4e8031
zhouhaihai
活动 拾荒
|
135
|
local actime = self:getProperty("actime")
|
ea40710f
zhouhaihai
活动
|
136
|
local change = false
|
be4e8031
zhouhaihai
活动 拾荒
|
137
|
for actType, actData in pairs(csvdb["activity_ctrlCsv"]) do
|
ea40710f
zhouhaihai
活动
|
138
139
140
141
|
local isOpen, startTime = self:isOpenRaw(actType, now)
self._isOpen[actType] = isOpen
if isOpen then
|
be4e8031
zhouhaihai
活动 拾荒
|
142
|
if actime[actType] and actime[actType] == startTime then -- 还是之前的状态 开放中
|
ea40710f
zhouhaihai
活动
|
143
|
else -- 重置
|
be4e8031
zhouhaihai
活动 拾荒
|
144
|
actime[actType] = startTime
|
ea40710f
zhouhaihai
活动
|
145
146
147
148
149
|
self:closeActivity(actType, notify, true)
self:initActivity(actType, isCrossDay, notify)
change = true
end
else
|
be4e8031
zhouhaihai
活动 拾荒
|
150
|
if actime[actType] then
|
ea40710f
zhouhaihai
活动
|
151
|
self:closeActivity(actType, notify)
|
be4e8031
zhouhaihai
活动 拾荒
|
152
|
actime[actType] = nil
|
ea40710f
zhouhaihai
活动
|
153
154
155
156
157
|
change = true
end
end
end
if change then
|
be4e8031
zhouhaihai
活动 拾荒
|
158
|
self:updateProperty({field = "actime", value = actime, notNotify = not notify})
|
ea40710f
zhouhaihai
活动
|
159
|
end
|
9a1c54b2
zhouhaihai
活动
|
160
161
|
end
|
ea40710f
zhouhaihai
活动
|
162
|
local activityFunc = {}
|
9a1c54b2
zhouhaihai
活动
|
163
|
|
ea40710f
zhouhaihai
活动
|
164
165
166
167
168
169
170
171
172
173
174
175
176
|
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
活动 拾荒
|
177
|
local actData = csvdb["new_signInCsv"]
|
ea40710f
zhouhaihai
活动
|
178
179
180
181
182
183
|
if curData[0] > #actData then return end -- 满了就忽略了
-- 没满更新一下
self:updateActData(actType, curData, not notify)
end,
}
|
9a1c54b2
zhouhaihai
活动
|
184
|
|
7f9f002d
liuzujun
循环周活动
|
185
186
187
188
|
--loop1:累计料理贩卖N次
--loop2:累计招募N次
--loop3:累计资助N次
--loop4:时钟箱拆解N个
|
93f6e69b
liuzujun
拾荒选择时间,抽卡增加sr保底
|
189
|
function Activity:checkWeeklyAct(actType, notify, count, pool)
|
7f9f002d
liuzujun
循环周活动
|
190
191
192
193
194
195
|
local actInfoMap = {
[Activity.ActivityType.DrawHero] = {mailId = MailId.ActDrawCardReward, table = "activity_loop2Csv"},
[Activity.ActivityType.AdvDraw] = {mailId = MailId.ActAdvDrawReward, table = "activity_loop3Csv"},
[Activity.ActivityType.OpenBox] = {mailId = MailId.ActOpenBoxReward, table = "activity_loop4Csv"},
[Activity.ActivityType.FoodSell] = {mailId = MailId.ActSellFoodReward, table = "activity_loop1Csv"}
}
|
93f6e69b
liuzujun
拾荒选择时间,抽卡增加sr保底
|
196
197
198
|
if actType == Activity.ActivityType.DrawHero and pool == DrawCardType.FriendDraw then
return
end
|
7f9f002d
liuzujun
循环周活动
|
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
|
local info = actInfoMap[actType]
if not info then return end
local curData = self:getActData(actType)
local roundData = self:getProperty("round")
local curRound = roundData[actType] or 0
local ctrlData = csvdb["activity_ctrlCsv"][actType]
if not ctrlData then return end
if curRound >= ctrlData.condition then
return
end
curData[0] = (curData[0] or 0) + count
local totalCnt = 0
local finishCnt = 0
local maxCondition = 0
for k, cfg in pairs(csvdb[info.table] or {}) do
totalCnt = totalCnt + 1
if maxCondition < cfg.condition1 then
maxCondition = cfg.condition1
end
if not curData[cfg.id] and curData[0] >= cfg.condition1 then
if info.mailId then
|
c59e058b
zhouhaihai
新一批日志记录
|
221
222
223
224
|
self.owner:log("activity", {
activity_id = cfg.id, -- 活动ID(或活动指定任务的ID)
activity_type = actType, -- 活动类型,见活动类型枚举表
|
887c1843
zhouhaihai
日志新一批
|
225
|
activity_reward = cfg.reward:toNumMap(), -- 活动奖励,json格式记录,{'itemid1':123,'itemid2':456,………...}
|
c59e058b
zhouhaihai
新一批日志记录
|
226
227
|
})
|
7f9f002d
liuzujun
循环周活动
|
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
|
self.owner:sendMail(info.mailId, nil, cfg.reward, {cfg.condition1})
curData[cfg.id] = 1
end
end
if curData[cfg.id] then
finishCnt = finishCnt + 1
end
end
if totalCnt == finishCnt then
roundData[actType] = curRound + 1
for k,v in pairs(curData) do
if k == 0 then
curData[k] = curData[0] >= maxCondition and curData[0] - maxCondition or 0
else
curData[k] = nil
end
end
self:updateProperty({field = "round", value = roundData, notNotify = not notify})
end
self:updateActData(actType, curData, not notify)
end
-- 抽卡周
activityFunc[Activity.ActivityType.DrawHero] = {
|
93f6e69b
liuzujun
拾荒选择时间,抽卡增加sr保底
|
252
253
|
["check"] = function(self, actType, notify, count, pool) -- 检查
self:checkWeeklyAct(actType, notify, count, pool)
|
7f9f002d
liuzujun
循环周活动
|
254
255
256
257
258
259
260
261
262
|
end,
["init"] = function(self, actType, isCrossDay, notify)
local roundData = self:getProperty("round")
roundData[actType] = 0
self:updateProperty({field = "round", value = roundData, notNotify = not notify})
end,
-- ["close"] = function(self, actType, notify)
-- end,
["crossDay"] = function(self, actType, notify)
|
7f9f002d
liuzujun
循环周活动
|
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
|
self.owner:sendMail(MailId.ActDrawCard)
end,
}
-- 售卖周
activityFunc[Activity.ActivityType.FoodSell] = {
["check"] = function(self, actType, notify, count) -- 检查
self:checkWeeklyAct(actType, notify, count)
end,
["init"] = function(self, actType, isCrossDay, notify)
local roundData = self:getProperty("round")
roundData[actType] = 0
self:updateProperty({field = "round", value = roundData, notNotify = not notify})
end,
-- ["close"] = function(self, actType, notify)
-- end,
["crossDay"] = function(self, actType, notify)
|
7f9f002d
liuzujun
循环周活动
|
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
|
self.owner:sendMail(MailId.ActSellFood)
end,
}
-- 拾荒周
activityFunc[Activity.ActivityType.AdvDraw] = {
["check"] = function(self, actType, notify, count) -- 检查
self:checkWeeklyAct(actType, notify, count)
end,
["init"] = function(self, actType, isCrossDay, notify)
local roundData = self:getProperty("round")
roundData[actType] = 0
self:updateProperty({field = "round", value = roundData, notNotify = not notify})
end,
-- ["close"] = function(self, actType, notify)
-- end,
["crossDay"] = function(self, actType, notify)
|
7f9f002d
liuzujun
循环周活动
|
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
|
self.owner:sendMail(MailId.ActAdvDraw)
end,
}
-- 拆解周
activityFunc[Activity.ActivityType.OpenBox] = {
["check"] = function(self, actType, notify, count) -- 检查
self:checkWeeklyAct(actType, notify, count)
end,
["init"] = function(self, actType, isCrossDay, notify)
local roundData = self:getProperty("round")
roundData[actType] = 0
self:updateProperty({field = "round", value = roundData, notNotify = not notify})
end,
-- ["close"] = function(self, actType, notify)
-- end,
["crossDay"] = function(self, actType, notify)
|
7f9f002d
liuzujun
循环周活动
|
314
315
316
317
|
self.owner:sendMail(MailId.ActOpenBox)
end,
}
|
51d9d20b
liuzujun
付费签到,应用市场反馈
|
318
319
320
321
322
323
324
325
326
|
-- 付费签到
activityFunc[Activity.ActivityType.PaySignIn] = {
["init"] = function(self, actType, isCrossDay, notify)
self:updateActData(actType, {}, not notify)
end,
-- ["close"] = function(self, actType, notify)
-- end,
}
|
ea40710f
zhouhaihai
活动
|
327
328
329
330
331
332
333
334
335
336
|
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
|
7f9f002d
liuzujun
循环周活动
|
337
338
339
|
if Activity.schema["act".. actType] then
self:updateActData(actType, Activity.schema["act" .. actType][2], not notify or notUpdateAct)
end
|
ea40710f
zhouhaihai
活动
|
340
341
342
343
344
345
346
347
348
349
|
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
活动
|
350
351
|
end
|
ea40710f
zhouhaihai
活动
|
352
|
function Activity:checkActivity(notNotify, activityType, ...)
|
9a1c54b2
zhouhaihai
活动
|
353
|
if not activityType then return end
|
ea40710f
zhouhaihai
活动
|
354
355
356
|
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
活动
|
357
358
359
|
end
end
|
706b517e
liuzujun
翻倍掉落活动,商城免费宝箱
|
360
361
362
363
364
365
366
367
368
|
-- 获取此次挂机掉落翻倍时长
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
|
024370be
liuzujun
双倍掉掉落bug
|
369
|
if nowTs > openTs and nowTs > lastTs then
|
706b517e
liuzujun
翻倍掉落活动,商城免费宝箱
|
370
371
372
373
374
375
376
377
|
return nowTs - lastTs
else
return 0
end
end
return 0
end
|
93f6e69b
liuzujun
拾荒选择时间,抽卡增加sr保底
|
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
|
-- 获取活动卡池id
function Activity:getActivityPool(mainType, subType)
if not self:isOpen(Activity.ActivityType.SsrUpPoolChange) then
return 0
end
local actData = csvdb["activity_ctrlCsv"][Activity.ActivityType.SsrUpPoolChange]
if not actData then return 0 end
local poolMap = actData.condition2:toMap(true, "=")
local key = mainType .. "_" .. subType
for k, v in pairs(poolMap) do
if k == key then
return v
end
end
return 0
end
|
51d9d20b
liuzujun
付费签到,应用市场反馈
|
396
397
|
-- 付费签到可领奖励
function Activity:getPaySignReward()
|
7754304d
zhouhaihai
bug
|
398
|
local actGoodsFlag = self.owner.storeData:getProperty("actGoodsFlag")
|
51d9d20b
liuzujun
付费签到,应用市场反馈
|
399
400
401
402
403
404
405
406
|
local index = GetActGoodsIndex("paySignIn")
local flag = actGoodsFlag[index] or 0
if flag == 0 then return {} end
if not self.owner.activity:isOpen("PaySignIn") then return {} end
local diffDay = diffFromOpen() + 1
|
37bb4611
liuzujun
付费签到,抽卡阶段奖励,探索指令
|
407
|
local curData = self:getActData("PaySignIn")
|
51d9d20b
liuzujun
付费签到,应用市场反馈
|
408
|
local reward, change = {}
|
37bb4611
liuzujun
付费签到,抽卡阶段奖励,探索指令
|
409
|
for day, csvData in pairs(csvdb["pay_signInCsv"]) do
|
51d9d20b
liuzujun
付费签到,应用市场反馈
|
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
|
if day <= diffDay then
if not curData[day] then
curData[day] = 1
-- 奖励
for itemId, count in pairs(csvData.reward:toNumMap()) do
reward[itemId] = (reward[itemId] or 0) + count
end
end
else
break
end
end
return reward, curData
--if next(reward) then
--role.activity:updateActData("PaySignIn", curData)
--reward, change = role:award(reward, {log = {desc = "actPaySign"}})
--end
--role:log("activity", {
-- activity_id = curData[0], -- 活动ID(或活动指定任务的ID)
-- activity_type = role.activity.ActivityType.PaySignIn, -- 活动类型,见活动类型枚举表
-- activity_reward = reward, -- 活动奖励,json格式记录,{'itemid1':123,'itemid2':456,………...}
--})
--SendPacket(actionCodes.Activity_actPaySignRpc, MsgPack.pack(role:packReward(reward, change)))
end
|
e51ff6d2
zhouhaihai
冒险~
|
437
|
|
706b517e
liuzujun
翻倍掉落活动,商城免费宝箱
|
438
|
return Activity
|