AbsActLogic.lua 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360
  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. ABS_ACT_TYPE_LIST = nil
  48. function initAfterHot()
  49. ABS_ACT_TYPE_LIST = {}
  50. local now = os.time()
  51. local len = 0
  52. for k, config in pairs(AbsActExcel.absActivity) do
  53. config.realStartTime = config.realStartTime or 0
  54. config.realEndTime = config.realEndTime or 0
  55. ABS_ACT_TYPE_LIST[config.type] = ABS_ACT_TYPE_LIST[config.type] or {}
  56. ABS_ACT_TYPE_LIST[config.type][#ABS_ACT_TYPE_LIST[config.type] + 1] = k
  57. end
  58. end
  59. function onLogin(human)
  60. local sendLisg = {}
  61. for k, config in pairs(AbsActExcel.absLogin) do
  62. local state,id = isStartedByType(human, config.absType)
  63. if state then
  64. checkAbsActClean(human, id)
  65. if config.type == AbsActDefine.ABS_LOGIN_REWARD_TYPE_1 and not human.db.absAct[id].openGet then
  66. human.db.absAct[id].openGet = 1
  67. sendLisg[#sendLisg + 1] = k
  68. elseif config.type == AbsActDefine.ABS_LOGIN_REWARD_TYPE_2 then
  69. local lastTime = human.db.absAct[id].loginDayGetTime or 0
  70. if not Util.isSameDay(lastTime) then
  71. human.db.absAct[id].loginDayGetTime = os.time()
  72. sendLisg[#sendLisg + 1] = k
  73. end
  74. end
  75. end
  76. end
  77. if #sendLisg > 0 then
  78. for _, id in ipairs(sendLisg) do
  79. local config = AbsActExcel.absLogin[id]
  80. if config.mailID > 0 then
  81. local mailConfig = MailExcel.mail[config.mailID]
  82. local title = mailConfig.title
  83. local senderName = mailConfig.senderName
  84. local content = mailConfig.content
  85. MailManager.add(MailManager.SYSTEM, human.db._id, title, content, config.item, senderName)
  86. end
  87. end
  88. end
  89. end
  90. -- 判断活动是否开启
  91. function isStarted(human, id)
  92. local config = AbsActExcel.absActivity[id]
  93. if not config then return end
  94. local now = os.time()
  95. if now < config.realStartTime or now >= config.realEndTime then
  96. return
  97. end
  98. return true, config.realEndTime, config.realStartTime
  99. end
  100. -- 判断活动是否开启
  101. function isStartedByType(human, type)
  102. if not ABS_ACT_TYPE_LIST[type] then return end
  103. for k, v in ipairs(ABS_ACT_TYPE_LIST[type]) do
  104. local config = AbsActExcel.absActivity[v]
  105. if config and isStarted(human, v) == true then
  106. return true, v, config.realEndTime, config.realStartTime
  107. end
  108. end
  109. end
  110. -- 根据actID 获取 Id
  111. function getIDByActID(human, actID)
  112. for id, v in pairs(AbsActExcel.absActivity) do
  113. if v.actId == actID and isStarted(human, id) then
  114. return id
  115. end
  116. end
  117. end
  118. function checkAbsActClean(human, id)
  119. local config = AbsActExcel.absActivity[id]
  120. if human.db.absAct[id] and human.db.absAct[id].endTime == config.realEndTime then
  121. else
  122. -- 两个卡不清 领完才能清
  123. if config.type == AbsActDefine.ABS_ACT_TYPE_12 then -- 铂金周卡
  124. if not human.db.absAct[id] then
  125. human.db.absAct[id] = { endTime = config.realEndTime }
  126. end
  127. elseif config.type == AbsActDefine.ABS_ACT_TYPE_13 then -- 365王卡
  128. if not human.db.absAct[id] then
  129. human.db.absAct[id] = { endTime = config.realEndTime }
  130. end
  131. else
  132. human.db.absAct[id] = { endTime = config.realEndTime }
  133. end
  134. end
  135. end
  136. -- 活动详情查询
  137. function actDetailQuery(human, id)
  138. -- 判断传入ID是否合法
  139. local config = AbsActExcel.absActivity[id]
  140. if config == nil then
  141. return
  142. end
  143. -- 判断活动是否开启
  144. local startFlag = isStarted(human, id)
  145. if startFlag == nil then
  146. return Broadcast.sendErr(human, Lang.ACT_NOT_START)
  147. end
  148. checkAbsActClean(human, id)
  149. if config.type == AbsActDefine.ABS_ACT_TYPE_1 then-- 超值礼包
  150. PremiumGiftLogic.getAndSendMsg(human, id, config.actId)
  151. elseif config.type == AbsActDefine.ABS_ACT_TYPE_2 then-- 盲盒
  152. MangHeLogic.query(human, id, config.actId)
  153. elseif config.type == AbsActDefine.ABS_ACT_TYPE_6 then
  154. DropExchangeLogic.query(human, id, true)
  155. elseif config.type == AbsActDefine.ABS_ACT_TYPE_4 then
  156. PerpleHeroLogic.getAndSendMsg(human,id)
  157. elseif config.type == AbsActDefine.ABS_ACT_TYPE_5 then
  158. HeroLogLogic.getAndSendMsg(human,id)
  159. elseif config.type == AbsActDefine.ABS_ACT_TYPE_7 then
  160. AbsJifenDrawLogic.getAndSendMsg(human, id, config)
  161. elseif config.type == AbsActDefine.ABS_ACT_TYPE_8 then
  162. HeroLoginPickLogic.query(human, id)
  163. elseif config.type == AbsActDefine.ABS_ACT_TYPE_9 then
  164. AbsZhanbuLunpanLogic.getAndSendMsg(human, id)
  165. elseif config.type == AbsActDefine.ABS_ACT_TYPE_10 then
  166. RechargeBackLogic.query(human, id)
  167. elseif config.type == AbsActDefine.ABS_ACT_TYPE_12 then
  168. AbsWeeklyCardLogic.getAndSendMsg(human, id, config)
  169. elseif config.type == AbsActDefine.ABS_ACT_TYPE_13 then
  170. Abs365CardLogic.getAndSendMsg(human, id, config)
  171. elseif config.type == AbsActDefine.ABS_ACT_TYPE_14 then
  172. AbsSurpriseChest.getAndSendMsg(human, id, config)
  173. elseif config.type == AbsActDefine.ABS_ACT_TYPE_18 then
  174. SevenDayLogic.getAndSendMsg(human, id, config.actID)
  175. elseif config.type == AbsActDefine.ABS_ACT_TYPE_16 then
  176. DrumBlastingLogic.getAndSendMsg(human, id, config.actID)
  177. elseif config.type == AbsActDefine.ABS_ACT_TYPE_17 then
  178. SpecialCustomLogic.getAndSendMsg(human, id, config.actID)
  179. elseif config.type == AbsActDefine.ABS_ACT_TYPE_19 then
  180. HeroComeLogic.getAndSendMsg(human, id, config.actId)
  181. elseif config.type == AbsActDefine.ABS_ACT_TYPE_20 then
  182. WishGiftLogic.getAndSendMsg(human, id, config.actId)
  183. elseif config.type == AbsActDefine.ABS_ACT_TYPE_21 then
  184. EveryDayPrayLogic.getAndSendMsg(human, id, config.actId)
  185. elseif config.type == AbsActDefine.ABS_ACT_TYPE_22 then
  186. ExclusiveTaskLogic.getAndSendMsg(human, id, config.actId)
  187. elseif config.type == AbsActDefine.ABS_ACT_TYPE_26 then
  188. AbsReachRankLogic.getAndSendMsg(human, id)
  189. elseif config.type == AbsActDefine.ABS_ACT_TYPE_46 then
  190. AbsOpenServerTotalConsume.getAndSendMsg(human, id, config.actId)
  191. elseif config.type == AbsActDefine.ABS_ACT_TYPE_72 then
  192. SingleReachLogic.getAndSendMsg(human, id)
  193. elseif config.type == AbsActDefine.ABS_ACT_TYPE_71 then
  194. TotalReachLogic.getAndSendMsg(human, id)
  195. elseif config.type == AbsActDefine.ABS_ACT_TYPE_73 then
  196. AbsActBillboardLogic.getAndSendMsg(human, id)
  197. elseif config.type == AbsActDefine.ABS_ACT_TYPE_23 then
  198. SeckillGiftLogic.getAndSendMsg(human, id)
  199. elseif config.type == AbsActDefine.ABS_ACT_TYPE_24 then
  200. UseDiamondLogic.getAndSendMsg(human, id)
  201. elseif config.type == AbsActDefine.ABS_ACT_TYPE_25 then
  202. WishCupLogic.getAndSendMsg(human, id)
  203. elseif config.type == AbsActDefine.ABS_ACT_TYPE_27 then
  204. DailyFixedTaskLogic.getAndSendMsg(human, id)
  205. elseif config.type == AbsActDefine.ABS_ACT_TYPE_28 then
  206. FestivalSevenDayCardLogic.getAndSendMsg(human, id)
  207. elseif config.type == AbsActDefine.ABS_ACT_TYPE_30 then
  208. AbsSignGiftLogic.getAndSendMsg(human, id)
  209. elseif config.type == AbsActDefine.ABS_ACT_TYPE_31 then
  210. DailyFixedTaskLogic.getAndSendMsg(human, id)
  211. elseif config.type == AbsActDefine.ABS_ACT_TYPE_33 then
  212. FestivalSevenDayCardLogic.getAndSendMsg(human, id)
  213. end
  214. end
  215. -- 活动抽卡
  216. function getLuckDraw(human,luckDraw,randomIndex,isAct,op)
  217. if isAct == AbsActDefine.OA_ACT_TYPE_501 then
  218. return LimitPerpleHeroLogic.getLuckDraw(human, op)
  219. end
  220. if not randomIndex then
  221. return
  222. end
  223. if isAct == AbsActDefine.ABS_ACT_TYPE_3 then
  224. -- 判断活动是否存在
  225. local state,actID = isStartedByType(human, AbsActDefine.ABS_ACT_TYPE_3)
  226. -- 根据单抽十连抽判断是否中签
  227. if state then
  228. checkAbsActClean(human, actID)
  229. local actConfig = HeroUpLogic.getConfigByActID(actID)
  230. local randomNum = math.random(1,10000)
  231. if op == DrawCardLogic.DRAWCARD_OP_1 then
  232. if randomNum <= actConfig.singlePer then
  233. luckDraw = true
  234. end
  235. elseif op == DrawCardLogic.DRAWCARD_OP_2 then
  236. if randomNum <= actConfig.tenPer and randomIndex then
  237. luckDraw = true
  238. end
  239. end
  240. end
  241. if luckDraw then
  242. local actConfig = HeroUpLogic.getConfigByActID(actID)
  243. return actConfig.heroId
  244. end
  245. elseif isAct == AbsActDefine.ABS_ACT_TYPE_4 then
  246. -- 判断活动是否存在
  247. local state,actID = isStartedByType(human, AbsActDefine.ABS_ACT_TYPE_4)
  248. if state then
  249. checkAbsActClean(human, actID)
  250. local actConfig = PerpleHeroLogic.getConfigByActID(actID)
  251. local randomNum = math.random(1,10000)
  252. if randomNum <= actConfig.rate then
  253. luckDraw = true
  254. end
  255. local noTargetHeroCnt = human.db.absAct[actID].noTargetHeroCnt or 0
  256. if op == DrawCardLogic.DRAWCARD_OP_2 then
  257. noTargetHeroCnt = noTargetHeroCnt + 10
  258. else
  259. noTargetHeroCnt = noTargetHeroCnt + 1
  260. end
  261. human.db.absAct[actID].noTargetHeroCnt = noTargetHeroCnt
  262. if not luckDraw and noTargetHeroCnt >= actConfig.cnt then
  263. luckDraw = true
  264. end
  265. if luckDraw then
  266. if human.db.absAct[actID] then
  267. human.db.absAct[actID].noTargetHeroCnt = 0
  268. end
  269. return human.db.absAct[actID].perpleHero
  270. end
  271. end
  272. elseif isAct == AbsActDefine.ABS_ACT_TYPE_19 then
  273. -- 判断活动是否存在
  274. local state,actID = isStartedByType(human, AbsActDefine.ABS_ACT_TYPE_19)
  275. if state then
  276. checkAbsActClean(human, actID)
  277. local actConfig = HeroComeLogic.getConfigByActID(actID)
  278. local randomNum = math.random(1,10000)
  279. if randomNum <= actConfig.rate then
  280. luckDraw = true
  281. end
  282. local noTargetHeroCnt = human.db.absAct[actID].noTargetHeroCnt or 0
  283. if op == DrawCardLogic.DRAWCARD_OP_2 then
  284. noTargetHeroCnt = noTargetHeroCnt + 10
  285. else
  286. noTargetHeroCnt = noTargetHeroCnt + 1
  287. end
  288. human.db.absAct[actID].noTargetHeroCnt = noTargetHeroCnt
  289. if not luckDraw and noTargetHeroCnt >= actConfig.cnt then
  290. luckDraw = true
  291. end
  292. if luckDraw then
  293. if human.db.absAct[actID] then
  294. human.db.absAct[actID].noTargetHeroCnt = 0
  295. end
  296. return human.db.absAct[actID].perpleHero
  297. end
  298. end
  299. end
  300. end
  301. function onHour(hour)
  302. if hour == 23 then
  303. AbsActBillboardLogic.sendBillboardReward()
  304. end
  305. if hour == 1 then
  306. AbsActBillboardLogic.cleanBillBoardDB()
  307. end
  308. end
  309. function updateBillBoard(humanDb)
  310. if not humanDb.absAct then return end
  311. local now = os.time()
  312. for k, data in pairs(humanDb.absAct) do
  313. local config = AbsActExcel.absActivity[k]
  314. if config and config.type == AbsActDefine.ABS_ACT_TYPE_26 then
  315. AbsReachRankDB.loadBoardData(data, k, humanDb._id, now)
  316. end
  317. end
  318. end
  319. function updateBillBoardRank()
  320. AbsReachRankDB.loadBoardRank()
  321. end