AbsReachRankLogic.lua 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. local Msg = require("core.Msg")
  2. local Util = require("common.Util")
  3. local Lang = require("common.Lang")
  4. local AbsActLogic = require("absAct.AbsActLogic")
  5. local AbsReachRankDB = require("absAct.AbsReachRankDB")
  6. local Broadcast = require("broadcast.Broadcast")
  7. local YunYingLogic = require("yunying.YunYingLogic")
  8. local AbsIceDragonRank = require("absAct.AbsIceDragonRank")
  9. --[[
  10. abs开服排名类活动 现有[合服活动充值排名]
  11. local:
  12. getDayLeftTime() -- 获得当天剩余时间秒
  13. getActLeftTime() -- 得到活动需要用到的时间秒
  14. public:
  15. isActive() -- 激活状态
  16. isOpen() -- 活动开启
  17. getLeftTime() -- 得到活动剩余时间
  18. getAndSendMsg() -- 发送活动信息
  19. rewardQuery() -- 奖励详情
  20. onCharge() -- 充值回调
  21. onZeroAll() -- 零点处理回调
  22. --]]
  23. local function getDayLeftTime()
  24. local now = os.time()
  25. local endTime = Util.getDayStartTime(now) + 86400
  26. return endTime - now
  27. end
  28. local function getActLeftTime(funcID, funcRankType)
  29. for tempFuncRankType,typeInfo in ipairs(AbsReachRankDB.FUNC_RANK_TYPE_INFOS) do
  30. if funcRankType == tempFuncRankType then
  31. if typeInfo.isDayReward then
  32. return getDayLeftTime()
  33. else
  34. local ret, endTime, startTime = AbsActLogic.isStarted(human, funcID)
  35. if ret == true then
  36. return endTime - os.time()
  37. else
  38. return 0
  39. end
  40. end
  41. end
  42. end
  43. end
  44. function isActive(human, YYInfo, funcConfig)
  45. return not isOpen(human, YYInfo, funcConfig)
  46. end
  47. function isOpen(human, YYInfo, funcConfig)
  48. return AbsActLogic.isStarted(human, funcConfig.funcID)
  49. end
  50. function getLeftTime(human, YInfo, funcConfig)
  51. return getActLeftTime(funcConfig.funcID)
  52. end
  53. function getAndSendMsg(human, funcID)
  54. AbsIceDragonRank.query(human)
  55. local actLeftTime = getActLeftTime(funcID, funcRankType)
  56. local maxSendRank = AbsReachRankDB.getMaxSendRank(funcID)
  57. local msgRet = Msg.gc.GC_ABS_REACH_RANK_QUERY
  58. msgRet.actId = funcID
  59. local len = 0
  60. for funcRankType,typeInfo in ipairs(AbsReachRankDB.FUNC_RANK_TYPE_INFOS) do
  61. if AbsReachRankDB.getMinRankValue(funcID, funcRankType) then
  62. len = len + 1
  63. msgRet.list[len].funcRankType = funcRankType
  64. msgRet.list[len].leftTime = getActLeftTime(funcID, funcRankType)
  65. AbsReachRankDB.wrapOwnerData(funcID, funcRankType, msgRet.list[len].onwerData, human.db._id)
  66. for rank = 1,maxSendRank do
  67. AbsReachRankDB.wrapRankList(funcID, funcRankType, msgRet.list[len].list[rank], rank)
  68. end
  69. msgRet.list[len].list[0] = maxSendRank
  70. end
  71. end
  72. msgRet.list[0] = len
  73. Msg.send(msgRet, human.fd)
  74. end
  75. function rewardQuery(human, funcID, funcRankType)
  76. if funcRankType == 3 then
  77. AbsIceDragonRank.queryReward(human)
  78. else
  79. local msgRet = Msg.gc.GC_ABS_REACH_RANK_REWARD_QUERY
  80. AbsReachRankDB.rewardQuery(human, funcID, funcRankType, msgRet)
  81. end
  82. end
  83. function onCharge(human, price, funcID)
  84. local funcConfig = YunYingLogic.getFuncConfig(funcID)
  85. if not funcConfig then return end
  86. if not isOpen(human, nil, funcConfig) then return end
  87. if funcConfig.param[1] == "topupRank" then -- 是充值排行榜
  88. AbsReachRankDB.onValueAdd(human, funcID, price)
  89. end
  90. end
  91. function onZeroAll(funcID)
  92. AbsReachRankDB.onRewardSend(funcID)
  93. AbsIceDragonRank.onZero(funcID)
  94. end
  95. function updateDaily(human, funcID)
  96. AbsReachRankDB.updateDaily(human, funcID)
  97. end