MonthCard.lua 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. local Util = require("common.Util")
  2. local ObjHuman = require("core.ObjHuman")
  3. local MonthCardExcel = require("excel.present").monthCard
  4. local Msg = require("core.Msg")
  5. local Grid = require("bag.Grid")
  6. local ItemDefine = require("bag.ItemDefine")
  7. local BuyLogic = require("topup.BuyLogic")
  8. local BagLogic = require("bag.BagLogic")
  9. local YunYingLogic = require("yunying.YunYingLogic")
  10. local PanelDefine = require("broadcast.PanelDefine")
  11. local YyHandler = require("yunying.Handler")
  12. local KingWorldLogic = require("present.KingWorldLogic")
  13. local HeroLogic = require("hero.HeroLogic")
  14. local MONTH_CARD_STATE_0 = 0 -- 已过期
  15. local MONTH_CARD_STATE_1 = 1 -- 未过期
  16. local MONTH_CARD_STATE_2 = 2 -- 已领取
  17. --- 功能修改 前 已经有不删档 服 开启 所以 DB 以原有的为标准 大体不去修改
  18. local function getState(monthCardDB)
  19. local now = os.time()
  20. if monthCardDB.endTime >= 0 and monthCardDB.endTime < now then
  21. return MONTH_CARD_STATE_0
  22. end
  23. if monthCardDB.getTime then
  24. if Util.isSameDay(monthCardDB.getTime) then
  25. return MONTH_CARD_STATE_2
  26. else
  27. return MONTH_CARD_STATE_1
  28. end
  29. else
  30. local day = Util.diffDay(monthCardDB.startTime) + 1
  31. if monthCardDB.endTime > 0 and day > monthCardDB.day then
  32. return MONTH_CARD_STATE_1
  33. elseif monthCardDB.endTime < 0 and not monthCardDB.getTime then
  34. return MONTH_CARD_STATE_1
  35. end
  36. end
  37. return MONTH_CARD_STATE_2
  38. end
  39. local function checkDB(human,id)
  40. if not MonthCardExcel[id] then
  41. assert(nil,id)
  42. end
  43. human.db.monthCard = human.db.monthCard or {}
  44. human.db.monthCard[id] = human.db.monthCard[id] or {day = 0,startTime = 0,endTime = 0,money = 0, get = 0}
  45. local monthCardDB = human.db.monthCard[id]
  46. if monthCardDB.startTime > 0 and getState(monthCardDB) == 0 then
  47. human.db.monthCard[id] = {day = 0,startTime = 0,endTime = 0,money = 0, get = 0}
  48. end
  49. return human.db.monthCard[id]
  50. end
  51. -- 获取特权参数
  52. function getPowerArgs(human, powerType)
  53. -- 检查 是否开了 永久月卡
  54. local monthCardDB = checkDB(human, 2)
  55. if getState(monthCardDB) ~= MONTH_CARD_STATE_0 then
  56. local config = MonthCardExcel[2]
  57. return config[powerType] or 0
  58. end
  59. local monthCardDB = checkDB(human, 1)
  60. if getState(monthCardDB) ~= MONTH_CARD_STATE_0 then
  61. local config = MonthCardExcel[1]
  62. return config[powerType] or 0
  63. end
  64. return 0
  65. end
  66. function query(human)
  67. local len = 0
  68. local msgRet = Msg.gc.GC_MONTH_CARD_QUERY
  69. msgRet.jiacheng = 0
  70. msgRet.drawZhekou = 0
  71. msgRet.heroBagAdd = 0
  72. for k, v in ipairs(MonthCardExcel) do
  73. local id = k
  74. len = len + 1
  75. local net = msgRet.list[len]
  76. local monthCardDB = checkDB(human,id)
  77. net.id = id
  78. net.name = v.name
  79. net.startTime = monthCardDB.startTime
  80. net.endTime = monthCardDB.endTime
  81. local day = Util.diffDay(monthCardDB.startTime) + 1
  82. net.day = v.day - day
  83. net.get = monthCardDB.get or 0
  84. net.state = getState(monthCardDB)
  85. Grid.makeItem(net.yuanbao,ItemDefine.ITEM_ZUANSHI_ID,v.yuanbao)
  86. Grid.makeItem(net.instantly,ItemDefine.ITEM_ZUANSHI_ID,v.instantly)
  87. -- Grid.makeItem(net.maxYuanbao,ItemDefine.ITEM_ZUANSHI_ID,v.yuanbao * v.day + v.instantly)
  88. BuyLogic.fontBuyItem(human, net.buyItem, v.buyID)
  89. msgRet.jiacheng = v[7]
  90. msgRet.drawZhekou = v[21]
  91. msgRet.heroBagAdd = v[12]
  92. end
  93. msgRet.list[0] = len
  94. Msg.send(msgRet,human.fd)
  95. end
  96. function get(human,id)
  97. local monthCardDB = checkDB(human,id)
  98. if getState(monthCardDB) ~= MONTH_CARD_STATE_1 then
  99. return
  100. end
  101. local config = MonthCardExcel[id]
  102. local addYuanbao = config.yuanbao
  103. if config.day > 0 then
  104. monthCardDB.day = Util.diffDay(monthCardDB.startTime) + 1
  105. end
  106. monthCardDB.get = monthCardDB.get or 0
  107. monthCardDB.get = monthCardDB.get + 1
  108. monthCardDB.getTime = os.time()
  109. ObjHuman.addZuanshi(human,addYuanbao,"monthCard")
  110. BagLogic.sendItemGetList(human, {{ItemDefine.ITEM_ZUANSHI_ID,addYuanbao}}, "monthCard")
  111. local msgRet = Msg.gc.GC_MONTH_CARD_GET
  112. Msg.send(msgRet,human.fd)
  113. query(human)
  114. for k, v in pairs(funcID) do
  115. YunYingLogic.updateIcon(YYInfo[k], human)
  116. YunYingLogic.sendGroupUpdate(YYInfo[k], human, PanelDefine.PANEL_ID_3303)
  117. break
  118. end
  119. end
  120. function buyMonthCard(human,id)
  121. local monthCardDB = checkDB(human,id)
  122. if getState(monthCardDB) == MONTH_CARD_STATE_1 then
  123. return
  124. end
  125. local config = MonthCardExcel[id]
  126. local now = os.time()
  127. monthCardDB.startTime = Util.getDayStartTime(now)
  128. if config.day > 0 then
  129. monthCardDB.endTime = monthCardDB.startTime + config.day * 86400
  130. else
  131. monthCardDB.endTime = -1
  132. end
  133. ObjHuman.addZuanshi(human,config.instantly,"monthCard")
  134. BagLogic.sendItemGetList(human, {{ItemDefine.ITEM_ZUANSHI_ID,config.instantly}}, "monthCard")
  135. --YunYingLogic.updateIcon(KingWorldLogic.YYInfo, human)
  136. for k, v in pairs(KingWorldLogic.funcID) do
  137. YunYingLogic.updateIcon(KingWorldLogic.YYInfo[k], human)
  138. break
  139. end
  140. query(human)
  141. if monthCardDB.endTime == -1 then
  142. HeroLogic.sendHeroBagCap(human)
  143. end
  144. end
  145. -- 是否购买
  146. function isActive(human, YYInfo, funcConfig)
  147. local monthCardDB = checkDB(human, 1)
  148. if getState(monthCardDB) == MONTH_CARD_STATE_0 then
  149. return
  150. end
  151. monthCardDB = checkDB(human, 2)
  152. if getState(monthCardDB) == MONTH_CARD_STATE_0 then
  153. return
  154. end
  155. return true
  156. end
  157. function isRed(human, YYInfo, funcConfig)
  158. local monthCardDB = checkDB(human,1)
  159. if getState(monthCardDB) == MONTH_CARD_STATE_1 then
  160. return true
  161. end
  162. local monthCardDB = checkDB(human,2)
  163. if getState(monthCardDB) == MONTH_CARD_STATE_1 then
  164. return true
  165. end
  166. return
  167. end