AbsActLogic.lua 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542
  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. local LotteryByDiamondLogic = require("absAct.LotteryByDiamondLogic")
  49. local DuoBaoQiBingLogic = require("absAct.DuoBaoQiBingLogic")
  50. local AbsLoginRewardLogic = require("absAct.AbsLoginRewardLogic")
  51. local AbsDiscountStoreLogic = require("absAct.AbsDiscountStoreLogic")
  52. local AbsLotteryCardLogic = require("absAct.AbsLotteryCardLogic")
  53. local CycleActivityLogic = require("yunying.CycleActivity")
  54. ABS_ACT_TYPE_LIST = nil
  55. function initAfterHot()
  56. ABS_ACT_TYPE_LIST = {}
  57. local now = os.time()
  58. local len = 0
  59. for k, config in pairs(AbsActExcel.absActivity) do
  60. config.realStartTime = config.realStartTime or 0
  61. config.realEndTime = config.realEndTime or 0
  62. if next(config.startDate) and next(config.endDate) then
  63. config.startDate.hour = 0
  64. config.startDate.min = 0
  65. config.startDate.sec = 0
  66. config.endDate.hour = 0
  67. config.endDate.min = 0
  68. config.endDate.sec = 0
  69. config.realStartTime = os.time(config.startDate)
  70. config.realEndTime = os.time(config.endDate)
  71. end
  72. ABS_ACT_TYPE_LIST[config.type] = ABS_ACT_TYPE_LIST[config.type] or {}
  73. ABS_ACT_TYPE_LIST[config.type][#ABS_ACT_TYPE_LIST[config.type] + 1] = k
  74. end
  75. NewHeroLogic.initAfterHot()
  76. end
  77. function onLogin(human)
  78. local sendLisg = {}
  79. local absActConfig = AbsActExcel.absActivity
  80. -- 清除过期活动
  81. for id in pairs(human.db.absAct) do
  82. checkAbsActClean(human,id)
  83. end
  84. -- 是否有新增活动
  85. for k,v in pairs(absActConfig) do
  86. local ok,realEndTime, realStartTime = isStarted(human,k)
  87. if ok and human.db.absAct[k] then
  88. --- 同步结束时间
  89. local nowTime = os.time()
  90. local finishTime = human.db.absAct[k].finish or nowTime
  91. if finishTime >= nowTime and finishTime ~= realEndTime then
  92. human.db.absAct[k].finish = realEndTime
  93. end
  94. if not human.db.absAct[k].realStartTime or human.db.absAct[k].realStartTime ~= realStartTime then
  95. human.db.absAct[k].realStartTime = realStartTime
  96. end
  97. end
  98. if ok and not human.db.absAct[k] then
  99. human.db.absAct[k] = {}
  100. local f = load("return require(\"" .. v.moduleFn .. "\")")()
  101. if f and f.genAbsActData then
  102. human.db.absAct[k] = f.genAbsActData(v, human)
  103. end
  104. human.db.absAct[k].finish = realEndTime -- 记录活动结束时间
  105. human.db.absAct[k].realStartTime = realStartTime
  106. end
  107. end
  108. -- 登录奖励重置
  109. for k, config in pairs(AbsActExcel.absLogin) do
  110. local state,id = isStartedByType(human, config.absType)
  111. if state and id then
  112. if not human.db.absAct[id] then
  113. human.db.absAct[id] = {}
  114. end
  115. -- 每日登录领取
  116. if config.type == AbsActDefine.ABS_LOGIN_REWARD_TYPE_2 then
  117. local lastTime = human.db.absAct[id].loginDayGetTime or 0
  118. if not Util.isSameDay(lastTime) then
  119. human.db.absAct[id].loginDayGetTime = os.time()
  120. sendLisg[#sendLisg + 1] = k
  121. end
  122. end
  123. end
  124. end
  125. if #sendLisg > 0 then
  126. for _, id in ipairs(sendLisg) do
  127. local config = AbsActExcel.absLogin[id]
  128. if config.mailID > 0 then
  129. local mailConfig = MailExcel.mail[config.mailID]
  130. local title = mailConfig.title
  131. local senderName = mailConfig.senderName
  132. local content = mailConfig.content
  133. MailManager.add(MailManager.SYSTEM, human.db._id, title, content, config.item, senderName)
  134. end
  135. end
  136. end
  137. end
  138. local function transTime(cfg)
  139. local realEndTime = 0
  140. local realStartTime = 0
  141. local state = false
  142. if next(cfg.startDate) and next(cfg.endDate) then
  143. cfg.startDate.hour = 0
  144. cfg.startDate.min = 0
  145. cfg.startDate.sec = 0
  146. cfg.endDate.hour = 0
  147. cfg.endDate.min = 0
  148. cfg.endDate.sec = 0
  149. realStartTime = os.time(cfg.startDate)
  150. realEndTime = os.time(cfg.endDate)
  151. state = true
  152. end
  153. return state, realEndTime, realStartTime
  154. end
  155. -- 判断活动是否开启
  156. function isStarted(human, id)
  157. local Log = require("common.Log")
  158. local config = AbsActExcel.absActivity[id]
  159. if not config then
  160. Log.write(Log.LOGID_DEBUG, "[isStarted] 配置不存在 - 活动ID: "..tostring(id))
  161. return
  162. end
  163. local nNowOpenDay = CommonDB.getServerOpenDay()
  164. -- Log.write(Log.LOGID_DEBUG, "[isStarted] 开服天数检查 - 活动ID: "..tostring(id)..", 当前开服天数: "..tostring(nNowOpenDay)..", 需要开服天数: "..tostring(config.openDay))
  165. if nNowOpenDay < config.openDay then
  166. -- Log.write(Log.LOGID_DEBUG, "[isStarted] 开服天数不足 - 活动ID: "..tostring(id)..", 当前: "..tostring(nNowOpenDay)..", 需要: "..tostring(config.openDay))
  167. return
  168. end
  169. local _,realEndTime,realStartTime = transTime(config)
  170. local now = os.time()
  171. -- Log.write(Log.LOGID_DEBUG, "[isStarted] 时间检查 - 活动ID: "..tostring(id)..", 当前时间: "..tostring(now)..", 开始时间: "..tostring(realStartTime)..", 结束时间: "..tostring(realEndTime))
  172. if 0 == realEndTime or 0 == realStartTime then
  173. -- Log.write(Log.LOGID_DEBUG, "[isStarted] 时间为0,检查循环活动 - 活动ID: "..tostring(id))
  174. local nState, nEndTime, nBeginTime = CycleActivityLogic.isStarted(human, id)
  175. -- Log.write(Log.LOGID_DEBUG, "[isStarted] 循环活动检查结果 - 活动ID: "..tostring(id)..", 状态: "..tostring(nState)..", 开始: "..tostring(nBeginTime)..", 结束: "..tostring(nEndTime))
  176. if true == nState and 0 < nBeginTime and 0 < nEndTime then
  177. -- Log.write(Log.LOGID_DEBUG, "[isStarted] 循环活动判断通过 - 活动ID: "..tostring(id))
  178. return nState, nEndTime, nBeginTime
  179. else
  180. -- Log.write(Log.LOGID_DEBUG, "[isStarted] 循环活动判断失败 - 活动ID: "..tostring(id))
  181. end
  182. end
  183. if now < realStartTime or now >= realEndTime then
  184. --Log.write(Log.LOGID_DEBUG, "[isStarted] 不在活动时间内 - 活动ID: "..tostring(id)..", 当前: "..tostring(now)..", 开始: "..tostring(realStartTime)..", 结束: "..tostring(realEndTime))
  185. return
  186. end
  187. --Log.write(Log.LOGID_DEBUG, "[isStarted] 活动开启判断通过 - 活动ID: "..tostring(id))
  188. return true, realEndTime, realStartTime
  189. end
  190. -- 判断活动是否开启
  191. function isStartedByType(human, type)
  192. if not ABS_ACT_TYPE_LIST[type] then return end
  193. for k, v in ipairs(ABS_ACT_TYPE_LIST[type]) do
  194. local config = AbsActExcel.absActivity[v]
  195. local ok , realEndTime,realStartTime = isStarted(human,v)
  196. if config and ok then
  197. return true, v, realEndTime, realStartTime
  198. end
  199. end
  200. end
  201. -- 根据actID 获取 Id
  202. function getIDByActID(human, actID)
  203. for id, v in pairs(AbsActExcel.absActivity) do
  204. if v.actId == actID and isStarted(human, id) then
  205. return id
  206. end
  207. end
  208. end
  209. function getIsClearDB(actID)
  210. local config = AbsActExcel.absActivity[actID]
  211. if not config then
  212. return false
  213. end
  214. if config.type ~= AbsActDefine.ABS_ACT_TYPE_12 and config.type ~= AbsActDefine.ABS_ACT_TYPE_28
  215. and config.type ~= AbsActDefine.ABS_ACT_TYPE_29 and config.type ~= AbsActDefine.ABS_ACT_TYPE_86 then
  216. return true
  217. else
  218. return false
  219. end
  220. end
  221. function checkAbsActClean(human, id)
  222. local config = AbsActExcel.absActivity[id]
  223. -- 活动没有配置 清楚对应数据
  224. if not config then
  225. print("[checkAbsActClean] 活动没有配置 清除对应数据 id = \n", id)
  226. human.db.absAct[id] = nil
  227. return
  228. end
  229. -- 不清理数据活动直接返回
  230. if AbsActDefine.ABS_ACT_NOCLEARID[config.type] == 1 then
  231. print("[checkAbsActClean] abs活动不清理活动数据直接返回 id = \n", id)
  232. return
  233. end
  234. local _,realEndTime = transTime(config)
  235. local now = os.time()
  236. --临时处理积分兑换 下版本删掉
  237. if human.db.absAct[id] and not human.db.absAct[id].finish then
  238. if config.type == AbsActDefine.ABS_ACT_TYPE_7 then
  239. human.db.absAct[id] = nil
  240. else
  241. human.db.absAct[id].finish = realEndTime
  242. end
  243. end
  244. if human.db.absAct[id] and now >= human.db.absAct[id].finish then
  245. -- 累计达标中的 累计充值到期 需要发送邮件
  246. if config.type == AbsActDefine.ABS_ACT_TYPE_71 then
  247. --TotalReachLogic.clean(human,id)
  248. end
  249. --限时周卡,铂金周卡活动设定是即使活动结束也要让玩家领完奖励,所以这里活动结束后暂时不清除数据,在对应模块中做清除数据操作
  250. --古玉充能活动,活动后不清除数据
  251. -- if config.type ~= AbsActDefine.ABS_ACT_TYPE_12 and config.type ~= AbsActDefine.ABS_ACT_TYPE_28
  252. -- and config.type ~= AbsActDefine.ABS_ACT_TYPE_29 then
  253. -- print("[checkAbsActClean] 清除数据 id = "..id)
  254. -- human.db.absAct[id] = nil
  255. -- end
  256. if getIsClearDB(id) then
  257. human.db.absAct[id] = nil
  258. end
  259. end
  260. end
  261. -- 活动详情查询
  262. function actDetailQuery(human, id)
  263. local Log = require("common.Log")
  264. local config = AbsActExcel.absActivity[id]
  265. if config == nil then
  266. --Log.write(Log.LOGID_DEBUG, "[actDetailQuery] 配置不存在 - 玩家: "..tostring(human.db.name)..", 活动ID: "..tostring(id))
  267. return
  268. end
  269. -- 判断活动是否开启
  270. local startFlag, realEndTime, realStartTime = isStarted(human, id)
  271. if startFlag == nil then
  272. checkAbsActClean(human, id)
  273. return --Broadcast.sendErr(human, Lang.ACT_NOT_START)
  274. end
  275. -- 确保活动数据已初始化
  276. if not human.db.absAct[id] then
  277. human.db.absAct[id] = {}
  278. -- 尝试加载模块,添加错误处理
  279. local success, f = pcall(function()
  280. return load("return require(\"" .. config.moduleFn .. "\")")()
  281. end)
  282. if not success then
  283. -- 模块不存在,使用空数据继续
  284. human.db.absAct[id].finish = realEndTime
  285. elseif f and f.genAbsActData then
  286. human.db.absAct[id] = f.genAbsActData(config, human)
  287. human.db.absAct[id].finish = realEndTime -- 记录活动结束时间
  288. else
  289. human.db.absAct[id].finish = realEndTime
  290. end
  291. else
  292. --Log.write(Log.LOGID_DEBUG, "[actDetailQuery] 活动数据已存在 - 玩家: "..tostring(human.db.name)..", 活动ID: "..tostring(id))
  293. end
  294. if config.type == AbsActDefine.ABS_ACT_TYPE_1 then-- 超值礼包
  295. PremiumGiftLogic.getAndSendMsg(human, id, config.actId)
  296. elseif config.type == AbsActDefine.ABS_ACT_TYPE_2 then-- 盲盒
  297. MangHeLogic.query(human, id, config.actId)
  298. elseif config.type == AbsActDefine.ABS_ACT_TYPE_6 then
  299. DropExchangeLogic.query(human, id, true)
  300. elseif config.type == AbsActDefine.ABS_ACT_TYPE_4 then
  301. PerpleHeroLogic.getAndSendMsg(human,id)
  302. elseif config.type == AbsActDefine.ABS_ACT_TYPE_5 then
  303. HeroLogLogic.getAndSendMsg(human,id)
  304. elseif config.type == AbsActDefine.ABS_ACT_TYPE_7 then
  305. AbsJifenDrawLogic.getAndSendMsg(human, id, config)
  306. elseif config.type == AbsActDefine.ABS_ACT_TYPE_8 then
  307. HeroLoginPickLogic.query(human, id)
  308. elseif config.type == AbsActDefine.ABS_ACT_TYPE_9 then
  309. AbsZhanbuLunpanLogic.getAndSendMsg(human, id)
  310. elseif config.type == AbsActDefine.ABS_ACT_TYPE_10 then
  311. RechargeBackLogic.query(human, id)
  312. elseif config.type == AbsActDefine.ABS_ACT_TYPE_12 then
  313. AbsWeeklyCardLogic.getAndSendMsg(human, id, config)
  314. elseif config.type == AbsActDefine.ABS_ACT_TYPE_13 then
  315. Abs365CardLogic.getAndSendMsg(human, id, config)
  316. elseif config.type == AbsActDefine.ABS_ACT_TYPE_14 then
  317. AbsSurpriseChest.getAndSendMsg(human, id, config)
  318. elseif config.type == AbsActDefine.ABS_ACT_TYPE_18 then
  319. SevenDayLogic.getAndSendMsg(human, id, config.actID)
  320. elseif config.type == AbsActDefine.ABS_ACT_TYPE_16 then
  321. local success, err = pcall(function()
  322. DrumBlastingLogic.getAndSendMsg(human, id, config.actID)
  323. end)
  324. if not success then
  325. error(err)
  326. end
  327. elseif config.type == AbsActDefine.ABS_ACT_TYPE_17 then
  328. SpecialCustomLogic.getAndSendMsg(human, id, config.actID)
  329. elseif config.type == AbsActDefine.ABS_ACT_TYPE_19 then
  330. HeroComeLogic.getAndSendMsg(human, id, config.actId)
  331. elseif config.type == AbsActDefine.ABS_ACT_TYPE_20 then
  332. WishGiftLogic.getAndSendMsg(human, id, config.actId)
  333. elseif config.type == AbsActDefine.ABS_ACT_TYPE_21 then
  334. EveryDayPrayLogic.getAndSendMsg(human, id, config.actId)
  335. elseif config.type == AbsActDefine.ABS_ACT_TYPE_22 then
  336. ExclusiveTaskLogic.getAndSendMsg(human, id, config.actId)
  337. elseif config.type == AbsActDefine.ABS_ACT_TYPE_26 then
  338. AbsReachRankLogic.getAndSendMsg(human, id)
  339. elseif config.type == AbsActDefine.ABS_ACT_TYPE_46 then
  340. AbsOpenServerTotalConsume.getAndSendMsg(human, id, config.actId)
  341. elseif config.type == AbsActDefine.ABS_ACT_TYPE_72 then
  342. SingleReachLogic.getAndSendMsg(human, id)
  343. elseif config.type == AbsActDefine.ABS_ACT_TYPE_71 then
  344. TotalReachLogic.getAndSendMsg(human, id)
  345. elseif config.type == AbsActDefine.ABS_ACT_TYPE_73 then
  346. AbsActBillboardLogic.getAndSendMsg(human, id)
  347. elseif config.type == AbsActDefine.ABS_ACT_TYPE_23 then
  348. SeckillGiftLogic.getAndSendMsg(human, id)
  349. elseif config.type == AbsActDefine.ABS_ACT_TYPE_24 then
  350. UseDiamondLogic.getAndSendMsg(human, id)
  351. elseif config.type == AbsActDefine.ABS_ACT_TYPE_25 then
  352. WishCupLogic.getAndSendMsg(human, id)
  353. elseif config.type == AbsActDefine.ABS_ACT_TYPE_27 then
  354. DailyFixedTaskLogic.getAndSendMsg(human, id)
  355. elseif config.type == AbsActDefine.ABS_ACT_TYPE_28 then
  356. FestivalSevenDayCardLogic.getAndSendMsg(human, id)
  357. elseif config.type == AbsActDefine.ABS_ACT_TYPE_29 then
  358. LotteryByDiamondLogic.Query(human, id)
  359. elseif config.type == AbsActDefine.ABS_ACT_TYPE_30 then
  360. AbsSignGiftLogic.getAndSendMsg(human, id)
  361. elseif config.type == AbsActDefine.ABS_ACT_TYPE_31 then
  362. DailyFixedTaskLogic.getAndSendMsg(human, id)
  363. elseif config.type == AbsActDefine.ABS_ACT_TYPE_32 then
  364. DuoBaoQiBingLogic.Query(human, id)
  365. elseif config.type == AbsActDefine.ABS_ACT_TYPE_33 then
  366. FestivalSevenDayCardLogic.getAndSendMsg(human, id)
  367. elseif config.type == AbsActDefine.ABS_ACT_TYPE_35
  368. or config.type == AbsActDefine.ABS_ACT_TYPE_36
  369. or config.type == AbsActDefine.ABS_ACT_TYPE_37 then
  370. NewHeroLogic.getAndSendMsg(human, id)
  371. elseif config.type == AbsActDefine.ABS_ACT_TYPE_75 then
  372. AbsLoginRewardLogic.Query(human, id)
  373. elseif config.type == AbsActDefine.ABS_ACT_TYPE_76 then
  374. AbsDiscountStoreLogic.Query(human, id)
  375. elseif config.type == AbsActDefine.ABS_ACT_TYPE_78 then
  376. AbsLotteryCardLogic.Query(human, id)
  377. end
  378. end
  379. -- 活动抽卡
  380. function getLuckDraw(human,luckDraw,randomIndex,isAct,op)
  381. if isAct == AbsActDefine.OA_ACT_TYPE_501 then
  382. return LimitPerpleHeroLogic.getLuckDraw(human, op)
  383. end
  384. if not randomIndex then
  385. return
  386. end
  387. if isAct == AbsActDefine.ABS_ACT_TYPE_3 then
  388. -- 判断活动是否存在
  389. local state,actID = isStartedByType(human, AbsActDefine.ABS_ACT_TYPE_3)
  390. -- 根据单抽十连抽判断是否中签
  391. if state then
  392. checkAbsActClean(human, actID)
  393. local actConfig = HeroUpLogic.getConfigByActID(actID)
  394. local randomNum = math.random(1,10000)
  395. if op == DrawCardLogic.DRAWCARD_OP_1 then
  396. if randomNum <= actConfig.singlePer then
  397. luckDraw = true
  398. end
  399. elseif op == DrawCardLogic.DRAWCARD_OP_2 then
  400. if randomNum <= actConfig.tenPer and randomIndex then
  401. luckDraw = true
  402. end
  403. end
  404. end
  405. if luckDraw then
  406. local actConfig = HeroUpLogic.getConfigByActID(actID)
  407. return actConfig.heroId
  408. end
  409. elseif isAct == AbsActDefine.ABS_ACT_TYPE_4 then
  410. -- 判断活动是否存在
  411. local state,actID = isStartedByType(human, AbsActDefine.ABS_ACT_TYPE_4)
  412. if state then
  413. checkAbsActClean(human, actID)
  414. local actConfig = PerpleHeroLogic.getConfigByActID(actID)
  415. local randomNum = math.random(1,10000)
  416. if randomNum <= actConfig.rate then
  417. luckDraw = true
  418. end
  419. local noTargetHeroCnt = human.db.absAct[actID].noTargetHeroCnt or 0
  420. if op == DrawCardLogic.DRAWCARD_OP_2 then
  421. noTargetHeroCnt = noTargetHeroCnt + 10
  422. else
  423. noTargetHeroCnt = noTargetHeroCnt + 1
  424. end
  425. human.db.absAct[actID].noTargetHeroCnt = noTargetHeroCnt
  426. if not luckDraw and noTargetHeroCnt >= actConfig.cnt then
  427. luckDraw = true
  428. end
  429. if luckDraw then
  430. if human.db.absAct[actID] then
  431. human.db.absAct[actID].noTargetHeroCnt = 0
  432. end
  433. return human.db.absAct[actID].perpleHero
  434. end
  435. end
  436. elseif isAct == AbsActDefine.ABS_ACT_TYPE_19 then
  437. -- 判断活动是否存在
  438. local state,actID = isStartedByType(human, AbsActDefine.ABS_ACT_TYPE_19)
  439. if state then
  440. checkAbsActClean(human, actID)
  441. local actConfig = HeroComeLogic.getConfigByActID(actID)
  442. local randomNum = math.random(1,10000)
  443. if randomNum <= actConfig.rate then
  444. luckDraw = true
  445. end
  446. local noTargetHeroCnt = human.db.absAct[actID].noTargetHeroCnt or 0
  447. if op == DrawCardLogic.DRAWCARD_OP_2 then
  448. noTargetHeroCnt = noTargetHeroCnt + 10
  449. else
  450. noTargetHeroCnt = noTargetHeroCnt + 1
  451. end
  452. human.db.absAct[actID].noTargetHeroCnt = noTargetHeroCnt
  453. if not luckDraw and noTargetHeroCnt >= actConfig.cnt then
  454. luckDraw = true
  455. end
  456. if luckDraw then
  457. if human.db.absAct[actID] then
  458. human.db.absAct[actID].noTargetHeroCnt = 0
  459. end
  460. return human.db.absAct[actID].perpleHero
  461. end
  462. end
  463. end
  464. end
  465. function onHour(hour)
  466. -- if hour == 23 then
  467. -- AbsActBillboardLogic.sendBillboardReward()
  468. -- end
  469. -- if hour == 1 then
  470. -- AbsActBillboardLogic.cleanBillBoardDB()
  471. -- end
  472. end
  473. function updateBillBoard(humanDb)
  474. if not humanDb.absAct then return end
  475. local now = os.time()
  476. for k, data in pairs(humanDb.absAct) do
  477. local config = AbsActExcel.absActivity[k]
  478. if config and config.type == AbsActDefine.ABS_ACT_TYPE_26 then
  479. AbsReachRankDB.loadBoardData(data, k, humanDb._id, now)
  480. end
  481. end
  482. end
  483. function updateBillBoardRank()
  484. AbsReachRankDB.loadBoardRank()
  485. end