Commit 51d9d20b1fd0c47ce983fc8438d0d949c1873ce9
1 parent
ed20b43c
付费签到,应用市场反馈
Showing
14 changed files
with
283 additions
and
6 deletions
Show diff stats
src/GlobalVar.lua
... | ... | @@ -274,6 +274,10 @@ CardType = { |
274 | 274 | PrivilegeCard = 3, --特权卡 |
275 | 275 | GrowFund = 4, --成长助力 |
276 | 276 | BattleCard = 5, --赛季卡 |
277 | + BattlePassCard_1 = 6, -- 探索指令1 | |
278 | + BattlePassCard_2 = 7, -- 探索指令2 | |
279 | + BattlePassCard_3 = 8, -- 探索指令3 | |
280 | + BattlePassCard_4 = 9, -- 探索指令4 | |
277 | 281 | } |
278 | 282 | |
279 | 283 | HeroQuality = { |
... | ... | @@ -290,6 +294,8 @@ MailId = { |
290 | 294 | SuperMonthCardEx = 204, |
291 | 295 | BattleCardAward = 210, |
292 | 296 | |
297 | + PaySignAward = 222, | |
298 | + | |
293 | 299 | ActSellFood = 231, |
294 | 300 | ActDrawCard = 232, |
295 | 301 | ActAdvDraw = 233, | ... | ... |
src/ProtocolCode.lua
... | ... | @@ -45,6 +45,7 @@ actionCodes = { |
45 | 45 | Role_getRandomNameRpc = 130, |
46 | 46 | Role_goldBuyRpc = 131, |
47 | 47 | Role_getDownloadCvRewardRpc = 132, |
48 | + Role_updateFeedbackInfoRpc = 133, | |
48 | 49 | |
49 | 50 | Adv_startAdvRpc = 151, |
50 | 51 | Adv_startHangRpc = 152, |
... | ... | @@ -191,6 +192,7 @@ actionCodes = { |
191 | 192 | Store_getFreeChestRpc = 560, |
192 | 193 | Store_getGrowFundRewardRpc = 561, --成长助力奖励 |
193 | 194 | Store_getBattlePassRewardRpc = 562, --赛季卡奖励 |
195 | + Store_getExploreCommandRewardRpc = 563, --探索指令 | |
194 | 196 | |
195 | 197 | |
196 | 198 | Email_listRpc = 600, |
... | ... | @@ -203,6 +205,7 @@ actionCodes = { |
203 | 205 | Activity_signRpc = 651, |
204 | 206 | Activity_sudokuRewardRpc = 652, |
205 | 207 | Activity_actSignRpc = 653, |
208 | + Activity_actPaySignRewardNtf = 654, | |
206 | 209 | } |
207 | 210 | |
208 | 211 | rpcResponseBegin = 10000 | ... | ... |
src/actions/ActivityAction.lua
... | ... | @@ -178,5 +178,46 @@ function _M.actSignRpc(agent, data) |
178 | 178 | end |
179 | 179 | |
180 | 180 | |
181 | +function _M.actPaySignRpc(agent, data) | |
182 | + local role = agent.role | |
183 | + local msg = MsgPack.unpack(data) | |
184 | + local actGoodsFlag = role.storeData:getProperty("actGoodsFlag") | |
185 | + local index = GetActGoodsIndex("paySignIn") | |
186 | + local flag = actGoodsFlag[index] or 0 | |
187 | + if flag == 0 then return 1 end | |
188 | + | |
189 | + if not role.activity:isOpen("PaySignIn") then return 2 end | |
190 | + | |
191 | + local diffDay = diffFromOpen() + 1 | |
192 | + | |
193 | + local curData = role.activity:getActData("PaySignIn") | |
194 | + local reward, change = {} | |
195 | + for day, csvData in ipairs(csvdb["pay_signInCsv"]) do | |
196 | + if day <= diffDay then | |
197 | + if not curData[day] then | |
198 | + curData[day] = 1 | |
199 | + -- 奖励 | |
200 | + for itemId, count in pairs(csvData.reward:toNumMap()) do | |
201 | + reward[itemId] = (reward[itemId] or 0) + count | |
202 | + end | |
203 | + end | |
204 | + else | |
205 | + break | |
206 | + end | |
207 | + end | |
208 | + if next(reward) then | |
209 | + role.activity:updateActData("PaySignIn", curData) | |
210 | + reward, change = role:award(reward, {log = {desc = "actPaySign"}}) | |
211 | + end | |
212 | + | |
213 | + role:log("activity", { | |
214 | + activity_id = curData[0], -- 活动ID(或活动指定任务的ID) | |
215 | + activity_type = role.activity.ActivityType.PaySignIn, -- 活动类型,见活动类型枚举表 | |
216 | + activity_reward = reward, -- 活动奖励,json格式记录,{'itemid1':123,'itemid2':456,………...} | |
217 | + }) | |
218 | + | |
219 | + SendPacket(actionCodes.Activity_actPaySignRpc, MsgPack.pack(role:packReward(reward, change))) | |
220 | + return true | |
221 | +end | |
181 | 222 | |
182 | 223 | return _M |
183 | 224 | \ No newline at end of file | ... | ... |
src/actions/HeroAction.lua
src/actions/RoleAction.lua
... | ... | @@ -173,6 +173,7 @@ function _M.loginRpc( agent, data ) |
173 | 173 | response.role = role:data() |
174 | 174 | response.result = "SUCCESS" |
175 | 175 | response.serverTime = now |
176 | + response.openTime = getServerOpenTs() | |
176 | 177 | |
177 | 178 | local modules = {} |
178 | 179 | |
... | ... | @@ -1194,4 +1195,16 @@ function _M.getDownloadCvRewardRpc(agent, data) |
1194 | 1195 | return true |
1195 | 1196 | end |
1196 | 1197 | |
1198 | +function _M.updateFeedbackInfoRpc(agent, data) | |
1199 | + local role = agent.role | |
1200 | + local info = role:getProperty("feedback") or {} | |
1201 | + local msg = MsgPack.unpack(data) | |
1202 | + info["flag"] = msg.flag | |
1203 | + info["count"] = msg.count | |
1204 | + info["ts"] = skynet.timex() | |
1205 | + role:updateProperty({field="feedback", value=info}) | |
1206 | + SendPacket(actionCodes.Role_updateFeedbackInfoRpc, MsgPack.pack({})) | |
1207 | + return true | |
1208 | +end | |
1209 | + | |
1197 | 1210 | return _M |
1198 | 1211 | \ No newline at end of file | ... | ... |
src/actions/StoreAction.lua
... | ... | @@ -322,6 +322,7 @@ function _M.getGrowFundRewardRpc(agent, data) |
322 | 322 | return true |
323 | 323 | end |
324 | 324 | |
325 | +-- 赛季卡 | |
325 | 326 | function _M.getBattlePassRewardRpc(agent, data) |
326 | 327 | local role = agent.role |
327 | 328 | local msg = MsgPack.unpack(data) |
... | ... | @@ -376,4 +377,65 @@ function _M.getBattlePassRewardRpc(agent, data) |
376 | 377 | return true |
377 | 378 | end |
378 | 379 | |
380 | +-- 探索指令奖励 | |
381 | +function _M.getExploreCommandRewardRpc(agent, data) | |
382 | + local role = agent.role | |
383 | + local msg = MsgPack.unpack(data) | |
384 | + local id = msg.id -- 探索id | |
385 | + local subId = msg.subId -- 领取的阶段id | |
386 | + | |
387 | + local tab_name = "reward_battlepass_" .. id .. "Csv" | |
388 | + local config = csvdb[tab_name][id] | |
389 | + if not config then return end | |
390 | + | |
391 | + local bpInfo = role.storeData:getProperty("bpInfo") or {} | |
392 | + local info = bpInfo[id] or {} | |
393 | + local flag = info["flag"] or 0 | |
394 | + if flag == 0 then return 1 end | |
395 | + | |
396 | + local freeRecord = info["fr"] or "" | |
397 | + local buyRecord = info["br"] or "" | |
398 | + | |
399 | + local freeFlag = string.char(string.getbit(freeRecord, subId)) | |
400 | + local limitFlag = string.char(string.getbit(buyRecord, subId)) | |
401 | + | |
402 | + if freeFlag == "1" and limitFlag == "1" then | |
403 | + skynet.error("user already get explore command reward") | |
404 | + return 2 | |
405 | + end | |
406 | + | |
407 | + if flag == 1 and limitFlag == "1" then | |
408 | + return 3 | |
409 | + end | |
410 | + | |
411 | + if not role:checkHangPass(config.carbonId) then | |
412 | + return 4 | |
413 | + end | |
414 | + | |
415 | + local gift = "" | |
416 | + if freeFlag == "0" then | |
417 | + gift = config.giftFree | |
418 | + | |
419 | + freeRecord = string.setbit(freeRecord, id) | |
420 | + info["fr"] = freeRecord | |
421 | + end | |
422 | + | |
423 | + if flag == 1 and limitFlag == "0" then | |
424 | + if gift ~= "" then | |
425 | + gift = gift .. " " | |
426 | + end | |
427 | + gift = gift .. config.giftLimit | |
428 | + | |
429 | + buyRecord = string.setbit(buyRecord, id) | |
430 | + info["br"] = buyRecord | |
431 | + end | |
432 | + | |
433 | + role.storeData:updateProperty({field = "bpInfo", value = info}) | |
434 | + | |
435 | + local reward, _ = role:award(gift, {log = {desc = "exploreCommand", int1 = id, int2 = subId}}) | |
436 | + | |
437 | + SendPacket(actionCodes.Store_getExploreCommandRewardRpc, MsgPack.pack({reward = reward})) | |
438 | + return true | |
439 | +end | |
440 | + | |
379 | 441 | return _M |
380 | 442 | \ No newline at end of file | ... | ... |
src/agent.lua
... | ... | @@ -53,6 +53,8 @@ end |
53 | 53 | |
54 | 54 | local _pipelinings = {} --可同时多个序列 栈的形式保证嵌套不出错 |
55 | 55 | function SendPacket(actionCode, bin, client_fd) |
56 | + --print(actionHandlers[actionCode]) | |
57 | + --dump(MsgPack.unpack(bin)) | |
56 | 58 | -- 内部消息不扩散出去 |
57 | 59 | if actionCode == actionCodes.Sys_endlessSeason then |
58 | 60 | if agentInfo.role then | ... | ... |
src/models/Activity.lua
... | ... | @@ -8,6 +8,7 @@ Activity.ActivityType = { |
8 | 8 | DrawHero = 4, --抽卡周 招募 |
9 | 9 | AdvDraw = 5, --拾荒抽周 资助 |
10 | 10 | OpenBox = 6, --拆解周 时钟箱 |
11 | + PaySignIn = 7, --付费签到 | |
11 | 12 | |
12 | 13 | SsrUpPoolChange = 10, -- 特定英雄活动,切卡池 |
13 | 14 | } |
... | ... | @@ -36,6 +37,7 @@ Activity.schema = { |
36 | 37 | act4 = {"table", {}}, -- {0 = 贩卖数量, 1=1, 2=1} 贩卖周活动 1表示领取过该档位的奖励 |
37 | 38 | act5 = {"table", {}}, -- {0 = 拆解数量, 1=1, 2=1} 拆解周活动 1表示领取过该档位的奖励 |
38 | 39 | act6 = {"table", {}}, -- {0 = 拾荒消耗远古金币数量, 1=1, 2=1} 拾荒周活动 1表示领取过该档位的奖励 |
40 | + act7 = {"table", {}}, -- {1 = 1, 2 = 1} == 付费签到活动 | |
39 | 41 | } |
40 | 42 | |
41 | 43 | function Activity:data() |
... | ... | @@ -47,6 +49,7 @@ function Activity:data() |
47 | 49 | act4 = self:getProperty("act4"), |
48 | 50 | act5 = self:getProperty("act5"), |
49 | 51 | act6 = self:getProperty("act6"), |
52 | + act7 = self:getProperty("act7"), | |
50 | 53 | } |
51 | 54 | end |
52 | 55 | |
... | ... | @@ -315,6 +318,15 @@ activityFunc[Activity.ActivityType.OpenBox] = { |
315 | 318 | end, |
316 | 319 | } |
317 | 320 | |
321 | +-- 付费签到 | |
322 | +activityFunc[Activity.ActivityType.PaySignIn] = { | |
323 | + ["init"] = function(self, actType, isCrossDay, notify) | |
324 | + self:updateActData(actType, {}, not notify) | |
325 | + end, | |
326 | + -- ["close"] = function(self, actType, notify) | |
327 | + -- end, | |
328 | +} | |
329 | + | |
318 | 330 | function Activity:initActivity(actType, isCrossDay, notify) |
319 | 331 | if activityFunc[actType] and activityFunc[actType]['close'] then |
320 | 332 | activityFunc[actType]["init"](self, actType, isCrossDay, notify) |
... | ... | @@ -384,5 +396,46 @@ function Activity:getActivityPool(mainType, subType) |
384 | 396 | return 0 |
385 | 397 | end |
386 | 398 | |
399 | +-- 付费签到可领奖励 | |
400 | +function Activity:getPaySignReward() | |
401 | + local actGoodsFlag = self.storeData:getProperty("actGoodsFlag") | |
402 | + local index = GetActGoodsIndex("paySignIn") | |
403 | + local flag = actGoodsFlag[index] or 0 | |
404 | + if flag == 0 then return {} end | |
405 | + | |
406 | + if not self.owner.activity:isOpen("PaySignIn") then return {} end | |
407 | + | |
408 | + local diffDay = diffFromOpen() + 1 | |
409 | + | |
410 | + local curData = self.activity:getActData("PaySignIn") | |
411 | + local reward, change = {} | |
412 | + for day, csvData in ipairs(csvdb["pay_signInCsv"]) do | |
413 | + if day <= diffDay then | |
414 | + if not curData[day] then | |
415 | + curData[day] = 1 | |
416 | + -- 奖励 | |
417 | + for itemId, count in pairs(csvData.reward:toNumMap()) do | |
418 | + reward[itemId] = (reward[itemId] or 0) + count | |
419 | + end | |
420 | + end | |
421 | + else | |
422 | + break | |
423 | + end | |
424 | + end | |
425 | + return reward, curData | |
426 | + --if next(reward) then | |
427 | + --role.activity:updateActData("PaySignIn", curData) | |
428 | + --reward, change = role:award(reward, {log = {desc = "actPaySign"}}) | |
429 | + --end | |
430 | + | |
431 | + --role:log("activity", { | |
432 | + -- activity_id = curData[0], -- 活动ID(或活动指定任务的ID) | |
433 | + -- activity_type = role.activity.ActivityType.PaySignIn, -- 活动类型,见活动类型枚举表 | |
434 | + -- activity_reward = reward, -- 活动奖励,json格式记录,{'itemid1':123,'itemid2':456,………...} | |
435 | + --}) | |
436 | + | |
437 | + --SendPacket(actionCodes.Activity_actPaySignRpc, MsgPack.pack(role:packReward(reward, change))) | |
438 | +end | |
439 | + | |
387 | 440 | |
388 | 441 | return Activity | ... | ... |
src/models/Role.lua
... | ... | @@ -165,6 +165,7 @@ Role.schema = { |
165 | 165 | chatline = {"table", {}}, -- 奖励发放 id=时间 |
166 | 166 | |
167 | 167 | downCvR = {"number", 0}, -- 下载cv扩展包奖励 |
168 | + feedback = {"table", {}}, -- 反馈相关信息 {flag = false, count = 0} flag是否评论过,count 提示次数 | |
168 | 169 | } |
169 | 170 | |
170 | 171 | |
... | ... | @@ -383,6 +384,7 @@ function Role:data() |
383 | 384 | chatline = self:getProperty("chatline"), |
384 | 385 | |
385 | 386 | downCvR = self:getProperty("downCvR"), -- 下载cv扩展包奖励 |
387 | + feedback = self:getProperty("feedback") | |
386 | 388 | } |
387 | 389 | end |
388 | 390 | ... | ... |
src/models/RoleLog.lua
... | ... | @@ -38,6 +38,8 @@ local ItemReason = { |
38 | 38 | startPvp = 124, -- 开始pvp |
39 | 39 | unlockStory = 125, -- 解锁剧情 |
40 | 40 | towerCount = 126, -- 电波塔次数 |
41 | + freeGift = 127, -- 免费礼包 | |
42 | + exploreCommand = 128, -- 探索指令 | |
41 | 43 | |
42 | 44 | |
43 | 45 | advHang = 301, -- 拾荒挂机 |
... | ... | @@ -75,6 +77,7 @@ local ItemReason = { |
75 | 77 | friendPoint = 1005, -- 友情 |
76 | 78 | birth = 1006, -- 出生奖励 |
77 | 79 | actSign = 1007, -- 活动签到 |
80 | + actPaySign = 1008, -- 活动付费签到 | |
78 | 81 | |
79 | 82 | -- 餐厅 |
80 | 83 | greenHourse = 1101, -- 食材获得 | ... | ... |
src/models/RolePlugin.lua
... | ... | @@ -1454,6 +1454,9 @@ function RolePlugin.bind(Role) |
1454 | 1454 | self.storeData:onBuyCard(rechargeData.type, rechargeData.time) |
1455 | 1455 | elseif rechargeData.shop == 3 then -- 礼包商店 |
1456 | 1456 | reward, _ = self:award(rechargeData.itemFirst, {isRecharge = true, log = {desc = "recharge", int1 = id}}) |
1457 | + elseif rechargeData.shop == 4 then -- 付费签到 | |
1458 | + reward, _ = self:award(rechargeData.itemFirst, {isRecharge = true, log = {desc = "recharge", int1 = id}}) | |
1459 | + self.storeData:onBuyPaySignCard(rechargeData.time) | |
1457 | 1460 | else |
1458 | 1461 | skynet.error("invalid recharge shop type " .. id) |
1459 | 1462 | return 3 | ... | ... |
src/models/Store.lua
... | ... | @@ -6,21 +6,33 @@ function Store:ctor(properties) |
6 | 6 | Store.super.ctor(self, properties) |
7 | 7 | end |
8 | 8 | |
9 | +ActGoodsType = { | |
10 | + paySignIn = 1, -- 付费签到 | |
11 | +} | |
12 | + | |
9 | 13 | Store.schema = { |
10 | 14 | buyR = {"table", {}}, -- 购买商品记录 {id=count} |
11 | 15 | payR = {"table", {}}, -- 充值记录 {id=count} |
12 | 16 | growFund = {"number", 0}, -- 成长基金 |
13 | - growFundR = {"string", ""}, -- 成长基金领取记录 | |
17 | + growFundR = {"string", ""}, -- 成长基金领取记录 | |
18 | + | |
14 | 19 | monthCardEx = {"number", 0}, -- 月卡过期时间戳 |
15 | - smonthCardEx = {"number", 0}, -- 超级月卡过期时间戳 | |
20 | + smonthCardEx = {"number", 0}, -- 超级月卡过期时间戳 | |
21 | + | |
16 | 22 | battleCard = {"number", 0}, -- 赛季卡 |
17 | 23 | battleFR = {"string", ""}, -- 免费赛季卡领取记录 |
18 | 24 | battleLR = {"string", ""}, -- 付费赛季卡领取记录 |
25 | + | |
19 | 26 | limitTPack = {"table", {}}, -- 限时礼包 {id=expire_ts} |
20 | 27 | privCardEx = {"number", 0}, -- 特权卡过期时间戳 |
21 | 28 | getMailT1 = {"number",0}, -- 上次发送月卡福利邮件的时间 |
22 | 29 | getMailT2 = {"number",0}, -- 上次发送超级月卡福利邮件的时间 |
23 | - packTrigger = {"table", {}} -- 礼包触发记录 {关卡难度1={id, 通关关卡数,升级数,爬塔层数}, ...} | |
30 | + packTrigger = {"table", {}}, -- 礼包触发记录 {关卡难度1={id, 通关关卡数,升级数,爬塔层数}, ...} | |
31 | + | |
32 | + -- 活动商品购买记录 | |
33 | + actGoodsFlag = {"table", {}}, -- ActGoodsType 1购买,0未购买 | |
34 | + | |
35 | + bpInfo = {"table", {}}, -- battle pass 探索指令 1={flag=0 为1表示买了,br=""付费领取记录, fr=""免费领取记录},2,3,4 | |
24 | 36 | } |
25 | 37 | |
26 | 38 | function Store:updateProperty(params) |
... | ... | @@ -45,6 +57,7 @@ end |
45 | 57 | function Store:onCrossDay() |
46 | 58 | self:sendMonthCardEmail() |
47 | 59 | self:deleteExpireLimitGoods() |
60 | + self:checkPaySignReward() | |
48 | 61 | end |
49 | 62 | |
50 | 63 | -- 删除过期商品 |
... | ... | @@ -176,6 +189,14 @@ function Store:onBuyCard(type, duration) |
176 | 189 | self:updateProperty({field = "growFund", value = 1}) |
177 | 190 | elseif type == CardType.BattleCard then |
178 | 191 | self:updateProperty({field = "battleCard", value = 1}) |
192 | + elseif type == CardType.BattlePassCard_1 or type == CardType.BattlePassCard_2 or | |
193 | + type == CardType.BattlePassCard_3 or type == CardType.BattlePassCard_4 then | |
194 | + local index = type - CardType.BattlePassCard_1 + 1 | |
195 | + local bpInfo = self:getProperty("bpInfo") or {} | |
196 | + local info = bpInfo[index] or {} | |
197 | + info["flag"] = 1 | |
198 | + bpInfo[index] = info | |
199 | + self:updateProperty({field = "bpInfo", value = bpInfo}) | |
179 | 200 | end |
180 | 201 | end |
181 | 202 | |
... | ... | @@ -330,6 +351,47 @@ function Store:OnTriggerLimitTimePack(eventType, param) |
330 | 351 | end |
331 | 352 | end |
332 | 353 | |
354 | +function GetActGoodsIndex(goodsType) | |
355 | + return ActGoodsType[goodsType] or 0 | |
356 | +end | |
357 | + | |
358 | +-- 购买付费签到 按开服时间算奖励 | |
359 | +function Store:onBuyPaySignCard(dur) | |
360 | + local curTs = skynet.timex() | |
361 | + local actGoodsFlag = self:getProperty("actGoodsFlag") or {} | |
362 | + local goodsIndex = GetActGoodsIndex("paySignIn") | |
363 | + if goodsIndex == 0 then | |
364 | + print("get act goods index fail :paySignIn") | |
365 | + return | |
366 | + end | |
367 | + actGoodsFlag[goodsIndex] = 1 | |
368 | + -- 发钱 | |
369 | + local change | |
370 | + local reward, curData = self.owner.activity:getPaySignReward() | |
371 | + if next(reward) then | |
372 | + self.owner.activity:updateActData("PaySignIn", curData) | |
373 | + reward, change = self.owner:award(reward, {log = {desc = "actPaySign"}}) | |
374 | + end | |
375 | + | |
376 | + self.owner:log("activity", { | |
377 | + activity_id = 0, -- 活动ID(或活动指定任务的ID) | |
378 | + activity_type = self.onwer.activity.ActivityType.PaySignIn, -- 活动类型,见活动类型枚举表 | |
379 | + activity_reward = reward, -- 活动奖励,json格式记录,{'itemid1':123,'itemid2':456,………...} | |
380 | + }) | |
381 | + | |
382 | + SendPacket(actionCodes.Activity_actPaySignRewardNtf, MsgPack.pack(self.owner:packReward(reward, change))) | |
383 | + | |
384 | + self.owner:updateProperty({field = "actGoodsFlag", value = actGoodsFlag}) | |
385 | +end | |
386 | + | |
387 | +function Store:checkPaySignReward() | |
388 | + local reward, curData = self.owner.activity:getPaySignReward() | |
389 | + if next(reward) then | |
390 | + self.owner.activity:updateActData("PaySignIn", curData) | |
391 | + self.owner:sendMail(MailId.PaySignAward, nil, reward) | |
392 | + end | |
393 | +end | |
394 | + | |
333 | 395 | function Store:data() |
334 | 396 | return { |
335 | 397 | buyR = self:getProperty("buyR"), |
... | ... | @@ -343,7 +405,9 @@ function Store:data() |
343 | 405 | battleLR = self:getProperty("battleLR"), |
344 | 406 | limitTPack = self:getProperty("limitTPack"), |
345 | 407 | privCardEx = self:getProperty("privCardEx"), |
346 | - packTrigger = self:getProperty("packTrigger") | |
408 | + packTrigger = self:getProperty("packTrigger"), | |
409 | + actGoodsFlag = self:getProperty("actGoodsFlag"), | |
410 | + bpInfo = self:getProperty("bpInfo"), | |
347 | 411 | } |
348 | 412 | end |
349 | 413 | ... | ... |
src/utils/CommonFunc.lua
... | ... | @@ -146,6 +146,31 @@ function crossDayFromOpen(now) |
146 | 146 | return crossDay(openTime, now) |
147 | 147 | end |
148 | 148 | |
149 | +function diffFromOpen() | |
150 | + now = now or skynet.timex() | |
151 | + local openTime = os.time{ | |
152 | + year = tonum(SERV_OPEN:sub(1,4)), | |
153 | + month = tonum(SERV_OPEN:sub(5,6)), | |
154 | + day = tonum(SERV_OPEN:sub(7,8)), | |
155 | + hour = RESET_TIME, | |
156 | + } | |
157 | + if now < openTime then | |
158 | + return 0 | |
159 | + end | |
160 | + | |
161 | + return math.floor((now - openTime) / DAY_SEC) | |
162 | +end | |
163 | + | |
164 | +function getServerOpenTs() | |
165 | + local openTime = os.time{ | |
166 | + year = tonum(SERV_OPEN:sub(1,4)), | |
167 | + month = tonum(SERV_OPEN:sub(5,6)), | |
168 | + day = tonum(SERV_OPEN:sub(7,8)), | |
169 | + hour = RESET_TIME, | |
170 | + } | |
171 | + return openTime | |
172 | +end | |
173 | + | |
149 | 174 | -- 30*86400 = 2592000 |
150 | 175 | function monthLater(now) |
151 | 176 | now = now or skynet.timex() | ... | ... |