| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490 |
- local Config = require("Config")
- local AbsActExcel = require("excel.absAct")
- local Lang = require("common.Lang")
- local Util = require("common.Util")
- local Msg = require("core.Msg")
- local AbsActDefine = require("absAct.AbsActDefine")
- local PremiumGiftLogic = require("absAct.PremiumGiftLogic")
- local ObjHuman = require("core.ObjHuman")
- local Broadcast = require("broadcast.Broadcast")
- local MangHeLogic = require("absAct.MangHeLogic")
- local MailExcel = require("excel.mail")
- local MailManager = require("mail.MailManager")
- local HeroUpLogic = require("absAct.HeroUpLogic")
- local CommonDB = require("common.CommonDB")
- local DropExchangeLogic = require("absAct.DropExchangeLogic")
- local PerpleHeroLogic = require("absAct.PerpleHeroLogic")
- local HeroLogLogic = require("absAct.HeroLogLogic")
- local AbsJifenDrawLogic = require("absAct.AbsJifenDrawLogic")
- local HeroLoginPickLogic = require("absAct.HeroLoginPickLogic")
- local AbsZhanbuLunpanLogic = require("absAct.AbsZhanbuLunpanLogic")
- local DrawCardLogic = require("drawCard.DrawCardLogic")
- local LimitPerpleHeroLogic = require("present.LimitPerpleHeroLogic")
- local RechargeBackLogic = require("absAct.RechargeBackLogic")
- local Abs365CardLogic = require("absAct.Abs365CardLogic")
- local AbsWeeklyCardLogic = require("absAct.AbsWeeklyCardLogic")
- local AbsSurpriseChest = require("absAct.AbsSurpriseChest")
- local SpecialCustomLogic = require("absAct.SpecialCustomLogic")
- local SevenDayLogic = require("absAct.SevenDayLogic")
- local DrumBlastingLogic = require("absAct.DrumBlastingLogic")
- local HeroComeLogic = require("absAct.HeroComeLogic")
- local WishGiftLogic = require("absAct.WishGiftLogic")
- local EveryDayPrayLogic = require("absAct.EveryDayPrayLogic")
- local ExclusiveTaskLogic = require("absAct.ExclusiveTaskLogic")
- local AbsActBillboardMiddleLogic = require("absAct.AbsActBillboardMiddleLogic")
- local AbsActBillboardLogic = require("absAct.AbsActBillboardLogic")
- local SingleReachLogic = require("absAct.SingleReachLogic")
- local TotalReachLogic = require("absAct.TotalReachLogic")
- local UseDiamondLogic = require("absAct.UseDiamondLogic")
- local WishCupLogic = require("absAct.WishCupLogic")
- local SeckillGiftLogic = require("absAct.SeckillGiftLogic")
- local AbsOpenServerTotalConsume = require("absAct.AbsOpenServerTotalConsume")
- local AbsReachRankLogic = require("absAct.AbsReachRankLogic")
- local AbsReachRankDB = require("absAct.AbsReachRankDB")
- local FestivalSevenDayCardLogic = require("absAct.FestivalSevenDayCardLogic")
- local DailyFixedTaskLogic = require("absAct.DailyFixedTaskLogic")
- local AbsSignGiftLogic = require("absAct.AbsSignGiftLogic")
- local NewHeroLogic = require("absAct.NewHeroLogic")
- local LotteryByDiamondLogic = require("absAct.LotteryByDiamondLogic")
- local DuoBaoQiBingLogic = require("absAct.DuoBaoQiBingLogic")
- local AbsLoginRewardLogic = require("absAct.AbsLoginRewardLogic")
- local AbsDiscountStoreLogic = require("absAct.AbsDiscountStoreLogic")
- local AbsLotteryCardLogic = require("absAct.AbsLotteryCardLogic")
- local CycleActivityLogic = require("yunying.CycleActivity")
- ABS_ACT_TYPE_LIST = nil
- function initAfterHot()
- ABS_ACT_TYPE_LIST = {}
- local now = os.time()
-
- local len = 0
- for k, config in pairs(AbsActExcel.absActivity) do
- config.realStartTime = config.realStartTime or 0
- config.realEndTime = config.realEndTime or 0
- if next(config.startDate) and next(config.endDate) then
- config.startDate.hour = 0
- config.startDate.min = 0
- config.startDate.sec = 0
- config.endDate.hour = 0
- config.endDate.min = 0
- config.endDate.sec = 0
- config.realStartTime = os.time(config.startDate)
- config.realEndTime = os.time(config.endDate)
- end
- ABS_ACT_TYPE_LIST[config.type] = ABS_ACT_TYPE_LIST[config.type] or {}
- ABS_ACT_TYPE_LIST[config.type][#ABS_ACT_TYPE_LIST[config.type] + 1] = k
- end
- end
- function onLogin(human)
- local sendLisg = {}
- local absActConfig = AbsActExcel.absActivity
- -- 清除过期活动
- for id in pairs(human.db.absAct) do
- checkAbsActClean(human,id)
- end
- -- 是否有新增活动
- for k,v in pairs(absActConfig) do
- local ok,realEndTime = isStarted(human,k)
- if ok and human.db.absAct[k] then
- --- 同步结束时间
- local nowTime = os.time()
- local finishTime = human.db.absAct[k].finish or nowTime
- if finishTime >= nowTime and finishTime ~= realEndTime then
- human.db.absAct[k].finish = realEndTime
- end
- end
- if ok and not human.db.absAct[k] then
- human.db.absAct[k] = {}
- local f = load("return require(\"" .. v.moduleFn .. "\")")()
- if f and f.genAbsActData then
- human.db.absAct[k] = f.genAbsActData(v)
- end
- human.db.absAct[k].finish = realEndTime -- 记录活动结束时间
- end
- end
- -- 登录奖励重置
- for k, config in pairs(AbsActExcel.absLogin) do
- local state,id = isStartedByType(human, config.absType)
- if state and id then
- if not human.db.absAct[id] then
- human.db.absAct[id] = {}
- end
- -- 每日登录领取
- if config.type == AbsActDefine.ABS_LOGIN_REWARD_TYPE_2 then
- local lastTime = human.db.absAct[id].loginDayGetTime or 0
- if not Util.isSameDay(lastTime) then
- human.db.absAct[id].loginDayGetTime = os.time()
- sendLisg[#sendLisg + 1] = k
- end
- end
- end
- end
- if #sendLisg > 0 then
- for _, id in ipairs(sendLisg) do
- local config = AbsActExcel.absLogin[id]
- if config.mailID > 0 then
- local mailConfig = MailExcel.mail[config.mailID]
- local title = mailConfig.title
- local senderName = mailConfig.senderName
- local content = mailConfig.content
- MailManager.add(MailManager.SYSTEM, human.db._id, title, content, config.item, senderName)
- end
- end
- end
- end
- local function transTime(cfg)
- local realEndTime = 0
- local realStartTime = 0
- local state = false
- if next(cfg.startDate) and next(cfg.endDate) then
- cfg.startDate.hour = 0
- cfg.startDate.min = 0
- cfg.startDate.sec = 0
- cfg.endDate.hour = 0
- cfg.endDate.min = 0
- cfg.endDate.sec = 0
- realStartTime = os.time(cfg.startDate)
- realEndTime = os.time(cfg.endDate)
- state = true
- end
- return state, realEndTime, realStartTime
- end
- -- 判断活动是否开启
- function isStarted(human, id)
- local config = AbsActExcel.absActivity[id]
- if not config then return end
- local nNowOpenDay = CommonDB.getServerOpenDay()
- if nNowOpenDay < config.openDay then
- -- print("[isStarted] 当前活动未开启 进行额外判断 id = "..id.." nNowOpenDay = "..nNowOpenDay.." config.openDay = "..config.openDay)
- return
- end
- local _,realEndTime,realStartTime = transTime(config)
- local now = os.time()
- if 0 == realEndTime or 0 == realStartTime then
- -- print("[isStarted] 当前活动未开启 进行额外判断 id = "..id)
- local nState, nEndTime, nBeginTime = CycleActivityLogic.isStarted(human, id)
- if true == nState and 0 < nBeginTime and 0 < nEndTime then
- -- print("[isStarted] 当前活动未开启 进行额外判断, 额外判断通过 id = "..id, nEndTime, nBeginTime)
- return nState, nEndTime, nBeginTime
- end
- end
- if now < realStartTime or now >= realEndTime then
- return
- end
- return true, realEndTime, realStartTime
- end
- -- 判断活动是否开启
- function isStartedByType(human, type)
- if not ABS_ACT_TYPE_LIST[type] then return end
- for k, v in ipairs(ABS_ACT_TYPE_LIST[type]) do
- local config = AbsActExcel.absActivity[v]
- local ok , realEndTime,realStartTime = isStarted(human,v)
- if config and ok then
- return true, v, realEndTime, realStartTime
- end
- end
- end
- -- 根据actID 获取 Id
- function getIDByActID(human, actID)
- for id, v in pairs(AbsActExcel.absActivity) do
- if v.actId == actID and isStarted(human, id) then
- return id
- end
- end
- end
- function getIsClearDB(actID)
- local config = AbsActExcel.absActivity[actID]
- if not config then
- return false
- end
- if config.type ~= AbsActDefine.ABS_ACT_TYPE_12 and config.type ~= AbsActDefine.ABS_ACT_TYPE_28
- and config.type ~= AbsActDefine.ABS_ACT_TYPE_29 and config.type ~= AbsActDefine.ABS_ACT_TYPE_86 then
- return true
- else
- return false
- end
- end
- function checkAbsActClean(human, id)
- local config = AbsActExcel.absActivity[id]
- -- 活动没有配置 清楚对应数据
- if not config then
- print("[checkAbsActClean] 活动没有配置 清除对应数据 id = \n", id)
- human.db.absAct[id] = nil
- return
- end
- -- 不清理数据活动直接返回
- if AbsActDefine.ABS_ACT_NOCLEARID[config.type] == 1 then
- print("[checkAbsActClean] abs活动不清理活动数据直接返回 id = \n", id)
- return
- end
- local _,realEndTime = transTime(config)
- local now = os.time()
- --临时处理积分兑换 下版本删掉
- if human.db.absAct[id] and not human.db.absAct[id].finish then
- if config.type == AbsActDefine.ABS_ACT_TYPE_7 then
- human.db.absAct[id] = nil
- else
- human.db.absAct[id].finish = realEndTime
- end
- end
- if human.db.absAct[id] and now >= human.db.absAct[id].finish then
- -- 累计达标中的 累计充值到期 需要发送邮件
- if config.type == AbsActDefine.ABS_ACT_TYPE_71 then
- --TotalReachLogic.clean(human,id)
- end
- --限时周卡,铂金周卡活动设定是即使活动结束也要让玩家领完奖励,所以这里活动结束后暂时不清除数据,在对应模块中做清除数据操作
- --古玉充能活动,活动后不清除数据
- -- if config.type ~= AbsActDefine.ABS_ACT_TYPE_12 and config.type ~= AbsActDefine.ABS_ACT_TYPE_28
- -- and config.type ~= AbsActDefine.ABS_ACT_TYPE_29 then
- -- print("[checkAbsActClean] 清除数据 id = "..id)
- -- human.db.absAct[id] = nil
- -- end
- if getIsClearDB(id) then
- human.db.absAct[id] = nil
- end
- end
- end
- -- 活动详情查询
- function actDetailQuery(human, id)
- -- 判断传入ID是否合法
- local config = AbsActExcel.absActivity[id]
- if config == nil then
- return
- end
- -- 判断活动是否开启
- print("[actDetailQuery] name = "..human.db.name.." id = "..id)
- local startFlag = isStarted(human, id)
- if startFlag == nil then
- checkAbsActClean(human, id)
- return Broadcast.sendErr(human, Lang.ACT_NOT_START)
- end
- print("[actDetailQuery] 判断通过")
- if config.type == AbsActDefine.ABS_ACT_TYPE_1 then-- 超值礼包
- PremiumGiftLogic.getAndSendMsg(human, id, config.actId)
- elseif config.type == AbsActDefine.ABS_ACT_TYPE_2 then-- 盲盒
- MangHeLogic.query(human, id, config.actId)
- elseif config.type == AbsActDefine.ABS_ACT_TYPE_6 then
- DropExchangeLogic.query(human, id, true)
- elseif config.type == AbsActDefine.ABS_ACT_TYPE_4 then
- PerpleHeroLogic.getAndSendMsg(human,id)
- elseif config.type == AbsActDefine.ABS_ACT_TYPE_5 then
- HeroLogLogic.getAndSendMsg(human,id)
- elseif config.type == AbsActDefine.ABS_ACT_TYPE_7 then
- AbsJifenDrawLogic.getAndSendMsg(human, id, config)
- elseif config.type == AbsActDefine.ABS_ACT_TYPE_8 then
- HeroLoginPickLogic.query(human, id)
- elseif config.type == AbsActDefine.ABS_ACT_TYPE_9 then
- AbsZhanbuLunpanLogic.getAndSendMsg(human, id)
- elseif config.type == AbsActDefine.ABS_ACT_TYPE_10 then
- RechargeBackLogic.query(human, id)
- elseif config.type == AbsActDefine.ABS_ACT_TYPE_12 then
- AbsWeeklyCardLogic.getAndSendMsg(human, id, config)
- elseif config.type == AbsActDefine.ABS_ACT_TYPE_13 then
- Abs365CardLogic.getAndSendMsg(human, id, config)
- elseif config.type == AbsActDefine.ABS_ACT_TYPE_14 then
- AbsSurpriseChest.getAndSendMsg(human, id, config)
- elseif config.type == AbsActDefine.ABS_ACT_TYPE_18 then
- SevenDayLogic.getAndSendMsg(human, id, config.actID)
- elseif config.type == AbsActDefine.ABS_ACT_TYPE_16 then
- DrumBlastingLogic.getAndSendMsg(human, id, config.actID)
- elseif config.type == AbsActDefine.ABS_ACT_TYPE_17 then
- SpecialCustomLogic.getAndSendMsg(human, id, config.actID)
- elseif config.type == AbsActDefine.ABS_ACT_TYPE_19 then
- HeroComeLogic.getAndSendMsg(human, id, config.actId)
- elseif config.type == AbsActDefine.ABS_ACT_TYPE_20 then
- WishGiftLogic.getAndSendMsg(human, id, config.actId)
- elseif config.type == AbsActDefine.ABS_ACT_TYPE_21 then
- EveryDayPrayLogic.getAndSendMsg(human, id, config.actId)
- elseif config.type == AbsActDefine.ABS_ACT_TYPE_22 then
- ExclusiveTaskLogic.getAndSendMsg(human, id, config.actId)
- elseif config.type == AbsActDefine.ABS_ACT_TYPE_26 then
- AbsReachRankLogic.getAndSendMsg(human, id)
- elseif config.type == AbsActDefine.ABS_ACT_TYPE_46 then
- AbsOpenServerTotalConsume.getAndSendMsg(human, id, config.actId)
- elseif config.type == AbsActDefine.ABS_ACT_TYPE_72 then
- SingleReachLogic.getAndSendMsg(human, id)
- elseif config.type == AbsActDefine.ABS_ACT_TYPE_71 then
- TotalReachLogic.getAndSendMsg(human, id)
- elseif config.type == AbsActDefine.ABS_ACT_TYPE_73 then
- AbsActBillboardLogic.getAndSendMsg(human, id)
- elseif config.type == AbsActDefine.ABS_ACT_TYPE_23 then
- SeckillGiftLogic.getAndSendMsg(human, id)
- elseif config.type == AbsActDefine.ABS_ACT_TYPE_24 then
- UseDiamondLogic.getAndSendMsg(human, id)
- elseif config.type == AbsActDefine.ABS_ACT_TYPE_25 then
- WishCupLogic.getAndSendMsg(human, id)
- elseif config.type == AbsActDefine.ABS_ACT_TYPE_27 then
- DailyFixedTaskLogic.getAndSendMsg(human, id)
- elseif config.type == AbsActDefine.ABS_ACT_TYPE_28 then
- FestivalSevenDayCardLogic.getAndSendMsg(human, id)
- elseif config.type == AbsActDefine.ABS_ACT_TYPE_29 then
- LotteryByDiamondLogic.Query(human, id)
- elseif config.type == AbsActDefine.ABS_ACT_TYPE_30 then
- AbsSignGiftLogic.getAndSendMsg(human, id)
- elseif config.type == AbsActDefine.ABS_ACT_TYPE_31 then
- DailyFixedTaskLogic.getAndSendMsg(human, id)
- elseif config.type == AbsActDefine.ABS_ACT_TYPE_32 then
- DuoBaoQiBingLogic.Query(human, id)
- elseif config.type == AbsActDefine.ABS_ACT_TYPE_33 then
- FestivalSevenDayCardLogic.getAndSendMsg(human, id)
- elseif config.type == AbsActDefine.ABS_ACT_TYPE_35 then
- NewHeroLogic.getAndSendMsg(human, id)
- elseif config.type == AbsActDefine.ABS_ACT_TYPE_75 then
- AbsLoginRewardLogic.Query(human, id)
- elseif config.type == AbsActDefine.ABS_ACT_TYPE_76 then
- AbsDiscountStoreLogic.Query(human, id)
- elseif config.type == AbsActDefine.ABS_ACT_TYPE_78 then
- AbsLotteryCardLogic.Query(human, id)
- end
- end
- -- 活动抽卡
- function getLuckDraw(human,luckDraw,randomIndex,isAct,op)
- if isAct == AbsActDefine.OA_ACT_TYPE_501 then
- return LimitPerpleHeroLogic.getLuckDraw(human, op)
- end
- if not randomIndex then
- return
- end
- if isAct == AbsActDefine.ABS_ACT_TYPE_3 then
- -- 判断活动是否存在
- local state,actID = isStartedByType(human, AbsActDefine.ABS_ACT_TYPE_3)
- -- 根据单抽十连抽判断是否中签
- if state then
- checkAbsActClean(human, actID)
- local actConfig = HeroUpLogic.getConfigByActID(actID)
- local randomNum = math.random(1,10000)
- if op == DrawCardLogic.DRAWCARD_OP_1 then
- if randomNum <= actConfig.singlePer then
- luckDraw = true
- end
- elseif op == DrawCardLogic.DRAWCARD_OP_2 then
- if randomNum <= actConfig.tenPer and randomIndex then
- luckDraw = true
- end
- end
- end
- if luckDraw then
- local actConfig = HeroUpLogic.getConfigByActID(actID)
- return actConfig.heroId
- end
- elseif isAct == AbsActDefine.ABS_ACT_TYPE_4 then
- -- 判断活动是否存在
- local state,actID = isStartedByType(human, AbsActDefine.ABS_ACT_TYPE_4)
- if state then
- checkAbsActClean(human, actID)
-
- local actConfig = PerpleHeroLogic.getConfigByActID(actID)
- local randomNum = math.random(1,10000)
- if randomNum <= actConfig.rate then
- luckDraw = true
- end
- local noTargetHeroCnt = human.db.absAct[actID].noTargetHeroCnt or 0
- if op == DrawCardLogic.DRAWCARD_OP_2 then
- noTargetHeroCnt = noTargetHeroCnt + 10
- else
- noTargetHeroCnt = noTargetHeroCnt + 1
- end
- human.db.absAct[actID].noTargetHeroCnt = noTargetHeroCnt
- if not luckDraw and noTargetHeroCnt >= actConfig.cnt then
- luckDraw = true
- end
-
- if luckDraw then
- if human.db.absAct[actID] then
- human.db.absAct[actID].noTargetHeroCnt = 0
- end
- return human.db.absAct[actID].perpleHero
- end
- end
- elseif isAct == AbsActDefine.ABS_ACT_TYPE_19 then
- -- 判断活动是否存在
- local state,actID = isStartedByType(human, AbsActDefine.ABS_ACT_TYPE_19)
- if state then
- checkAbsActClean(human, actID)
-
- local actConfig = HeroComeLogic.getConfigByActID(actID)
- local randomNum = math.random(1,10000)
- if randomNum <= actConfig.rate then
- luckDraw = true
- end
- local noTargetHeroCnt = human.db.absAct[actID].noTargetHeroCnt or 0
- if op == DrawCardLogic.DRAWCARD_OP_2 then
- noTargetHeroCnt = noTargetHeroCnt + 10
- else
- noTargetHeroCnt = noTargetHeroCnt + 1
- end
- human.db.absAct[actID].noTargetHeroCnt = noTargetHeroCnt
- if not luckDraw and noTargetHeroCnt >= actConfig.cnt then
- luckDraw = true
- end
-
- if luckDraw then
- if human.db.absAct[actID] then
- human.db.absAct[actID].noTargetHeroCnt = 0
- end
- return human.db.absAct[actID].perpleHero
- end
- end
- end
- end
- function onHour(hour)
- -- if hour == 23 then
- -- AbsActBillboardLogic.sendBillboardReward()
- -- end
- -- if hour == 1 then
- -- AbsActBillboardLogic.cleanBillBoardDB()
- -- end
- end
- function updateBillBoard(humanDb)
- if not humanDb.absAct then return end
-
- local now = os.time()
-
- for k, data in pairs(humanDb.absAct) do
- local config = AbsActExcel.absActivity[k]
-
- if config and config.type == AbsActDefine.ABS_ACT_TYPE_26 then
- AbsReachRankDB.loadBoardData(data, k, humanDb._id, now)
- end
- end
- end
- function updateBillBoardRank()
- AbsReachRankDB.loadBoardRank()
- end
|