MonthCard.lua 6.5 KB

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