AbsActLogic.lua 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399
  1. local Config = require("Config")
  2. local AbsActExcel = require("excel.absAct")
  3. local Lang = require("common.Lang")
  4. local Util = require("common.Util")
  5. local Msg = require("core.Msg")
  6. local AbsActDefine = require("absAct.AbsActDefine")
  7. local PremiumGiftLogic = require("absAct.PremiumGiftLogic")
  8. local ObjHuman = require("core.ObjHuman")
  9. local Broadcast = require("broadcast.Broadcast")
  10. local MangHeLogic = require("absAct.MangHeLogic")
  11. local MailExcel = require("excel.mail")
  12. local MailManager = require("mail.MailManager")
  13. local HeroUpLogic = require("absAct.HeroUpLogic")
  14. local CommonDB = require("common.CommonDB")
  15. local DropExchangeLogic = require("absAct.DropExchangeLogic")
  16. local PerpleHeroLogic = require("absAct.PerpleHeroLogic")
  17. local HeroLogLogic = require("absAct.HeroLogLogic")
  18. local AbsJifenDrawLogic = require("absAct.AbsJifenDrawLogic")
  19. local HeroLoginPickLogic = require("absAct.HeroLoginPickLogic")
  20. local AbsZhanbuLunpanLogic = require("absAct.AbsZhanbuLunpanLogic")
  21. local DrawCardLogic = require("drawCard.DrawCardLogic")
  22. local LimitPerpleHeroLogic = require("present.LimitPerpleHeroLogic")
  23. local RechargeBackLogic = require("absAct.RechargeBackLogic")
  24. local Abs365CardLogic = require("absAct.Abs365CardLogic")
  25. local AbsWeeklyCardLogic = require("absAct.AbsWeeklyCardLogic")
  26. local AbsSurpriseChest = require("absAct.AbsSurpriseChest")
  27. local SpecialCustomLogic = require("absAct.SpecialCustomLogic")
  28. local SevenDayLogic = require("absAct.SevenDayLogic")
  29. local DrumBlastingLogic = require("absAct.DrumBlastingLogic")
  30. local HeroComeLogic = require("absAct.HeroComeLogic")
  31. local WishGiftLogic = require("absAct.WishGiftLogic")
  32. local EveryDayPrayLogic = require("absAct.EveryDayPrayLogic")
  33. local ExclusiveTaskLogic = require("absAct.ExclusiveTaskLogic")
  34. local AbsActBillboardMiddleLogic = require("absAct.AbsActBillboardMiddleLogic")
  35. local AbsActBillboardLogic = require("absAct.AbsActBillboardLogic")
  36. local SingleReachLogic = require("absAct.SingleReachLogic")
  37. local TotalReachLogic = require("absAct.TotalReachLogic")
  38. local UseDiamondLogic = require("absAct.UseDiamondLogic")
  39. local WishCupLogic = require("absAct.WishCupLogic")
  40. local SeckillGiftLogic = require("absAct.SeckillGiftLogic")
  41. local AbsOpenServerTotalConsume = require("absAct.AbsOpenServerTotalConsume")
  42. local AbsReachRankLogic = require("absAct.AbsReachRankLogic")
  43. local AbsReachRankDB = require("absAct.AbsReachRankDB")
  44. local FestivalSevenDayCardLogic = require("absAct.FestivalSevenDayCardLogic")
  45. local DailyFixedTaskLogic = require("absAct.DailyFixedTaskLogic")
  46. local AbsSignGiftLogic = require("absAct.AbsSignGiftLogic")
  47. --local NewHeroLogic = require("absAct.NewHeroLogic")
  48. ABS_ACT_TYPE_LIST = nil
  49. function initAfterHot()
  50. ABS_ACT_TYPE_LIST = {}
  51. local now = os.time()
  52. local len = 0
  53. for k, config in pairs(AbsActExcel.absActivity) do
  54. config.realStartTime = config.realStartTime or 0
  55. config.realEndTime = config.realEndTime or 0
  56. if next(config.startDate) and next(config.endDate) then
  57. config.startDate.hour = 0
  58. config.startDate.min = 0
  59. config.startDate.sec = 0
  60. config.endDate.hour = 0
  61. config.endDate.min = 0
  62. config.endDate.sec = 0
  63. config.realStartTime = os.time(config.startDate)
  64. config.realEndTime = os.time(config.endDate)
  65. end
  66. ABS_ACT_TYPE_LIST[config.type] = ABS_ACT_TYPE_LIST[config.type] or {}
  67. ABS_ACT_TYPE_LIST[config.type][#ABS_ACT_TYPE_LIST[config.type] + 1] = k
  68. end
  69. end
  70. function onLogin(human)
  71. local sendLisg = {}
  72. local absActConfig = AbsActExcel.absActivity
  73. -- 清除过期活动
  74. for id in pairs(human.db.absAct) do
  75. checkAbsActClean(human,id)
  76. end
  77. -- 是否有新增活动
  78. for k,v in pairs(absActConfig) do
  79. local ok = isStarted(human,k)
  80. if ok and not human.db.absAct[k] then
  81. human.db.absAct[k] = {}
  82. local f = load("return require(\"" .. v.moduleFn .. "\")")()
  83. if f and f.genAbsActData then
  84. human.db.absAct[k] = f.genAbsActData()
  85. end
  86. end
  87. end
  88. -- 登录奖励重置
  89. for k, config in pairs(AbsActExcel.absLogin) do
  90. local state,id = isStartedByType(human, config.absType)
  91. if state and id then
  92. if not human.db.absAct[id] then
  93. human.db.absAct[id] = {}
  94. end
  95. -- 每日登录领取
  96. if config.type == AbsActDefine.ABS_LOGIN_REWARD_TYPE_2 then
  97. local lastTime = human.db.absAct[id].loginDayGetTime or 0
  98. if not Util.isSameDay(lastTime) then
  99. human.db.absAct[id].loginDayGetTime = os.time()
  100. sendLisg[#sendLisg + 1] = k
  101. end
  102. end
  103. end
  104. end
  105. if #sendLisg > 0 then
  106. for _, id in ipairs(sendLisg) do
  107. local config = AbsActExcel.absLogin[id]
  108. if config.mailID > 0 then
  109. local mailConfig = MailExcel.mail[config.mailID]
  110. local title = mailConfig.title
  111. local senderName = mailConfig.senderName
  112. local content = mailConfig.content
  113. MailManager.add(MailManager.SYSTEM, human.db._id, title, content, config.item, senderName)
  114. end
  115. end
  116. end
  117. end
  118. local function transTime(cfg)
  119. local realEndTime = 0
  120. local realStartTime = 0
  121. local state = false
  122. if next(cfg.startDate) and next(cfg.endDate) then
  123. cfg.startDate.hour = 0
  124. cfg.startDate.min = 0
  125. cfg.startDate.sec = 0
  126. cfg.endDate.hour = 0
  127. cfg.endDate.min = 0
  128. cfg.endDate.sec = 0
  129. realStartTime = os.time(cfg.startDate)
  130. realEndTime = os.time(cfg.endDate)
  131. state = true
  132. end
  133. return state, realEndTime, realStartTime
  134. end
  135. -- 判断活动是否开启
  136. function isStarted(human, id)
  137. local config = AbsActExcel.absActivity[id]
  138. if not config then return end
  139. local _,realEndTime,realStartTime = transTime(config)
  140. local now = os.time()
  141. if now < realStartTime or now >= realEndTime then
  142. return
  143. end
  144. return true, realEndTime, realStartTime
  145. end
  146. -- 判断活动是否开启
  147. function isStartedByType(human, type)
  148. if not ABS_ACT_TYPE_LIST[type] then return end
  149. for k, v in ipairs(ABS_ACT_TYPE_LIST[type]) do
  150. local config = AbsActExcel.absActivity[v]
  151. local ok , realEndTime,realStartTime = isStarted(human,v)
  152. if config and ok then
  153. return true, v, realEndTime, realStartTime
  154. end
  155. end
  156. end
  157. -- 根据actID 获取 Id
  158. function getIDByActID(human, actID)
  159. for id, v in pairs(AbsActExcel.absActivity) do
  160. if v.actId == actID and isStarted(human, id) then
  161. return id
  162. end
  163. end
  164. end
  165. function checkAbsActClean(human, id)
  166. local config = AbsActExcel.absActivity[id]
  167. local _,realEndTime = transTime(config)
  168. local now = os.time()
  169. if human.db.absAct[id] and now >= realEndTime then
  170. -- 累计达标中的 累计充值到期 需要发送邮件
  171. if config.type == AbsActDefine.ABS_ACT_TYPE_71 then
  172. TotalReachLogic.clean(human,id)
  173. end
  174. human.db.absAct[id] = nil
  175. end
  176. end
  177. -- 活动详情查询
  178. function actDetailQuery(human, id)
  179. -- 判断传入ID是否合法
  180. local config = AbsActExcel.absActivity[id]
  181. if config == nil then
  182. return
  183. end
  184. -- 判断活动是否开启
  185. local startFlag = isStarted(human, id)
  186. if startFlag == nil then
  187. checkAbsActClean(human, id)
  188. return Broadcast.sendErr(human, Lang.ACT_NOT_START)
  189. end
  190. if config.type == AbsActDefine.ABS_ACT_TYPE_1 then-- 超值礼包
  191. PremiumGiftLogic.getAndSendMsg(human, id, config.actId)
  192. elseif config.type == AbsActDefine.ABS_ACT_TYPE_2 then-- 盲盒
  193. MangHeLogic.query(human, id, config.actId)
  194. elseif config.type == AbsActDefine.ABS_ACT_TYPE_6 then
  195. DropExchangeLogic.query(human, id, true)
  196. elseif config.type == AbsActDefine.ABS_ACT_TYPE_4 then
  197. PerpleHeroLogic.getAndSendMsg(human,id)
  198. elseif config.type == AbsActDefine.ABS_ACT_TYPE_5 then
  199. HeroLogLogic.getAndSendMsg(human,id)
  200. elseif config.type == AbsActDefine.ABS_ACT_TYPE_7 then
  201. AbsJifenDrawLogic.getAndSendMsg(human, id, config)
  202. elseif config.type == AbsActDefine.ABS_ACT_TYPE_8 then
  203. HeroLoginPickLogic.query(human, id)
  204. elseif config.type == AbsActDefine.ABS_ACT_TYPE_9 then
  205. AbsZhanbuLunpanLogic.getAndSendMsg(human, id)
  206. elseif config.type == AbsActDefine.ABS_ACT_TYPE_10 then
  207. RechargeBackLogic.query(human, id)
  208. elseif config.type == AbsActDefine.ABS_ACT_TYPE_12 then
  209. AbsWeeklyCardLogic.getAndSendMsg(human, id, config)
  210. elseif config.type == AbsActDefine.ABS_ACT_TYPE_13 then
  211. Abs365CardLogic.getAndSendMsg(human, id, config)
  212. elseif config.type == AbsActDefine.ABS_ACT_TYPE_14 then
  213. AbsSurpriseChest.getAndSendMsg(human, id, config)
  214. elseif config.type == AbsActDefine.ABS_ACT_TYPE_18 then
  215. SevenDayLogic.getAndSendMsg(human, id, config.actID)
  216. elseif config.type == AbsActDefine.ABS_ACT_TYPE_16 then
  217. DrumBlastingLogic.getAndSendMsg(human, id, config.actID)
  218. elseif config.type == AbsActDefine.ABS_ACT_TYPE_17 then
  219. SpecialCustomLogic.getAndSendMsg(human, id, config.actID)
  220. elseif config.type == AbsActDefine.ABS_ACT_TYPE_19 then
  221. HeroComeLogic.getAndSendMsg(human, id, config.actId)
  222. elseif config.type == AbsActDefine.ABS_ACT_TYPE_20 then
  223. WishGiftLogic.getAndSendMsg(human, id, config.actId)
  224. elseif config.type == AbsActDefine.ABS_ACT_TYPE_21 then
  225. EveryDayPrayLogic.getAndSendMsg(human, id, config.actId)
  226. elseif config.type == AbsActDefine.ABS_ACT_TYPE_22 then
  227. ExclusiveTaskLogic.getAndSendMsg(human, id, config.actId)
  228. elseif config.type == AbsActDefine.ABS_ACT_TYPE_26 then
  229. AbsReachRankLogic.getAndSendMsg(human, id)
  230. elseif config.type == AbsActDefine.ABS_ACT_TYPE_46 then
  231. AbsOpenServerTotalConsume.getAndSendMsg(human, id, config.actId)
  232. elseif config.type == AbsActDefine.ABS_ACT_TYPE_72 then
  233. SingleReachLogic.getAndSendMsg(human, id)
  234. elseif config.type == AbsActDefine.ABS_ACT_TYPE_71 then
  235. TotalReachLogic.getAndSendMsg(human, id)
  236. elseif config.type == AbsActDefine.ABS_ACT_TYPE_73 then
  237. AbsActBillboardLogic.getAndSendMsg(human, id)
  238. elseif config.type == AbsActDefine.ABS_ACT_TYPE_23 then
  239. SeckillGiftLogic.getAndSendMsg(human, id)
  240. elseif config.type == AbsActDefine.ABS_ACT_TYPE_24 then
  241. UseDiamondLogic.getAndSendMsg(human, id)
  242. elseif config.type == AbsActDefine.ABS_ACT_TYPE_25 then
  243. WishCupLogic.getAndSendMsg(human, id)
  244. elseif config.type == AbsActDefine.ABS_ACT_TYPE_27 then
  245. DailyFixedTaskLogic.getAndSendMsg(human, id)
  246. elseif config.type == AbsActDefine.ABS_ACT_TYPE_28 then
  247. FestivalSevenDayCardLogic.getAndSendMsg(human, id)
  248. elseif config.type == AbsActDefine.ABS_ACT_TYPE_30 then
  249. AbsSignGiftLogic.getAndSendMsg(human, id)
  250. elseif config.type == AbsActDefine.ABS_ACT_TYPE_31 then
  251. DailyFixedTaskLogic.getAndSendMsg(human, id)
  252. elseif config.type == AbsActDefine.ABS_ACT_TYPE_33 then
  253. FestivalSevenDayCardLogic.getAndSendMsg(human, id)
  254. --elseif config.type == AbsActDefine.ABS_ACT_TYPE_35 then
  255. --NewHeroLogic.getAndSendMsg(human, id)
  256. end
  257. end
  258. -- 活动抽卡
  259. function getLuckDraw(human,luckDraw,randomIndex,isAct,op)
  260. if isAct == AbsActDefine.OA_ACT_TYPE_501 then
  261. return LimitPerpleHeroLogic.getLuckDraw(human, op)
  262. end
  263. if not randomIndex then
  264. return
  265. end
  266. if isAct == AbsActDefine.ABS_ACT_TYPE_3 then
  267. -- 判断活动是否存在
  268. local state,actID = isStartedByType(human, AbsActDefine.ABS_ACT_TYPE_3)
  269. -- 根据单抽十连抽判断是否中签
  270. if state then
  271. checkAbsActClean(human, actID)
  272. local actConfig = HeroUpLogic.getConfigByActID(actID)
  273. local randomNum = math.random(1,10000)
  274. if op == DrawCardLogic.DRAWCARD_OP_1 then
  275. if randomNum <= actConfig.singlePer then
  276. luckDraw = true
  277. end
  278. elseif op == DrawCardLogic.DRAWCARD_OP_2 then
  279. if randomNum <= actConfig.tenPer and randomIndex then
  280. luckDraw = true
  281. end
  282. end
  283. end
  284. if luckDraw then
  285. local actConfig = HeroUpLogic.getConfigByActID(actID)
  286. return actConfig.heroId
  287. end
  288. elseif isAct == AbsActDefine.ABS_ACT_TYPE_4 then
  289. -- 判断活动是否存在
  290. local state,actID = isStartedByType(human, AbsActDefine.ABS_ACT_TYPE_4)
  291. if state then
  292. checkAbsActClean(human, actID)
  293. local actConfig = PerpleHeroLogic.getConfigByActID(actID)
  294. local randomNum = math.random(1,10000)
  295. if randomNum <= actConfig.rate then
  296. luckDraw = true
  297. end
  298. local noTargetHeroCnt = human.db.absAct[actID].noTargetHeroCnt or 0
  299. if op == DrawCardLogic.DRAWCARD_OP_2 then
  300. noTargetHeroCnt = noTargetHeroCnt + 10
  301. else
  302. noTargetHeroCnt = noTargetHeroCnt + 1
  303. end
  304. human.db.absAct[actID].noTargetHeroCnt = noTargetHeroCnt
  305. if not luckDraw and noTargetHeroCnt >= actConfig.cnt then
  306. luckDraw = true
  307. end
  308. if luckDraw then
  309. if human.db.absAct[actID] then
  310. human.db.absAct[actID].noTargetHeroCnt = 0
  311. end
  312. return human.db.absAct[actID].perpleHero
  313. end
  314. end
  315. elseif isAct == AbsActDefine.ABS_ACT_TYPE_19 then
  316. -- 判断活动是否存在
  317. local state,actID = isStartedByType(human, AbsActDefine.ABS_ACT_TYPE_19)
  318. if state then
  319. checkAbsActClean(human, actID)
  320. local actConfig = HeroComeLogic.getConfigByActID(actID)
  321. local randomNum = math.random(1,10000)
  322. if randomNum <= actConfig.rate then
  323. luckDraw = true
  324. end
  325. local noTargetHeroCnt = human.db.absAct[actID].noTargetHeroCnt or 0
  326. if op == DrawCardLogic.DRAWCARD_OP_2 then
  327. noTargetHeroCnt = noTargetHeroCnt + 10
  328. else
  329. noTargetHeroCnt = noTargetHeroCnt + 1
  330. end
  331. human.db.absAct[actID].noTargetHeroCnt = noTargetHeroCnt
  332. if not luckDraw and noTargetHeroCnt >= actConfig.cnt then
  333. luckDraw = true
  334. end
  335. if luckDraw then
  336. if human.db.absAct[actID] then
  337. human.db.absAct[actID].noTargetHeroCnt = 0
  338. end
  339. return human.db.absAct[actID].perpleHero
  340. end
  341. end
  342. end
  343. end
  344. function onHour(hour)
  345. if hour == 23 then
  346. AbsActBillboardLogic.sendBillboardReward()
  347. end
  348. if hour == 1 then
  349. AbsActBillboardLogic.cleanBillBoardDB()
  350. end
  351. end
  352. function updateBillBoard(humanDb)
  353. if not humanDb.absAct then return end
  354. local now = os.time()
  355. for k, data in pairs(humanDb.absAct) do
  356. local config = AbsActExcel.absActivity[k]
  357. if config and config.type == AbsActDefine.ABS_ACT_TYPE_26 then
  358. AbsReachRankDB.loadBoardData(data, k, humanDb._id, now)
  359. end
  360. end
  361. end
  362. function updateBillBoardRank()
  363. AbsReachRankDB.loadBoardRank()
  364. end