FundLogic.lua 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277
  1. -- 特权
  2. local Config = require("Config")
  3. local Msg = require("core.Msg")
  4. local ObjHuman = require("core.ObjHuman")
  5. local Util = require("common.Util")
  6. local Lang = require("common.Lang")
  7. local DB = require("common.DB")
  8. local PresentExcel = require("excel.present")
  9. local MailExcel = require("excel.mail")
  10. local VipExcel = require("excel.vip")
  11. local BuyExcel = require("excel.buy")
  12. local Grid = require("bag.Grid")
  13. local ItemDefine = require("bag.ItemDefine")
  14. local MailManager = require("mail.MailManager")
  15. local VipLogic = require("vip.VipLogic")
  16. local Broadcast = require("broadcast.Broadcast")
  17. local BuyLogic = require("topup.BuyLogic")
  18. local KingWorldLogic = require("present.KingWorldLogic")
  19. local BagLogic = require("bag.BagLogic")
  20. local ChatPaoMaLogic = require("chat.ChatPaoMaLogic")
  21. local LuaMongo = _G.lua_mongo
  22. local PanelDefine = require("broadcast.PanelDefine")
  23. local YunYingLogic = require("yunying.YunYingLogic")
  24. local SceneHandler = require("scene.Handler")
  25. local FuliExcel = require("excel.fuli")
  26. -- buyid
  27. CONFIG_ID1 = 1 -- 钻石基金
  28. CONFIG_ID2 = 2 -- 钻石基金
  29. CONFIG_ID3 = 3 -- 无限高抽
  30. BUYSTATE0 = 0 -- 未购买
  31. BUYSTATE1 = 1 -- 已购买1
  32. BUYSTATE2 = 2 -- 已购买2
  33. BUYSTATE3 = 3 -- 已购买3
  34. STATE0 = 0 -- 不可领取
  35. STATE1 = 1 -- 可以领取
  36. STATE2 = 2 -- 已经领取
  37. local ACT_ID205 = 205 -- 基金
  38. local ACT_ID311 = 311 -- 无线高抽
  39. -- 获取购买状态
  40. local function getState(db, lv, id, flag)
  41. if db.get[id] then
  42. return STATE2
  43. end
  44. -- 无限高抽
  45. if flag == CONFIG_ID3 then
  46. if db.flag == flag and lv > FuliExcel.growFund[id].lv then
  47. return STATE1
  48. end
  49. else
  50. -- 基金
  51. if db.flag2 == flag and lv >= FuliExcel.growFund[id].lv then
  52. return STATE1
  53. end
  54. end
  55. return STATE0
  56. end
  57. -- 获取礼包获奖范围
  58. local function getRange(flag)
  59. local conf = FuliExcel.growFundDefine[1]
  60. return conf.range[flag], conf.buyID[flag]
  61. end
  62. function initDB(human)
  63. human.db.fundFlag = human.db.fundFlag or { flag = 0, get = { }, flag2 = 0 }
  64. human.db.fundFlag.flag2 = human.db.fundFlag.flag2 or 0
  65. return human.db.fundFlag
  66. end
  67. -- 特权查询
  68. function query(human, type)
  69. local db = initDB(human)
  70. local flag = CONFIG_ID1
  71. if type == CONFIG_ID3 then
  72. flag = db.flag == 0 and CONFIG_ID3 or db.flag
  73. else
  74. flag = db.flag2 == 0 and CONFIG_ID1 or db.flag2
  75. end
  76. local rangeConfig, buyID = getRange(flag)
  77. if not rangeConfig then return end
  78. local bAllBuy = true
  79. for i = rangeConfig[1], rangeConfig[2] do
  80. local state = getState(db, human.db.lv, i, CONFIG_ID1)
  81. if state ~= STATE2 then
  82. bAllBuy = false
  83. break
  84. end
  85. end
  86. if type ~= CONFIG_ID3 and bAllBuy == true then
  87. flag = CONFIG_ID2
  88. rangeConfig, buyID = getRange(flag)
  89. end
  90. local msgRet = Msg.gc.GC_TEQUAN_ZSJIJIN_QUERY
  91. local net = msgRet.data
  92. local len = 0
  93. for i = rangeConfig[1], rangeConfig[2] do
  94. local config = FuliExcel.growFund[i]
  95. len = len + 1
  96. local netNode = net.lvRewardMsg[len]
  97. netNode.id = i
  98. netNode.lv = config.lv
  99. netNode.state = getState(db, human.db.lv, i, flag)
  100. if flag == CONFIG_ID3 then
  101. for j, h in ipairs(config.items) do
  102. Grid.makeItem(netNode.lvReward[j], h[1], h[2])
  103. end
  104. netNode.lvReward[0] = #config.items
  105. else
  106. Grid.makeItem(netNode.lvReward[1], ItemDefine.ITEM_ZUANSHI_ID, config.yuanbao)
  107. netNode.lvReward[0] = 1
  108. end
  109. end
  110. if type == CONFIG_ID3 then
  111. net.fundFlag = db.flag == flag and 1 or 0
  112. else
  113. net.fundFlag = db.flag2 == flag and 1 or 0
  114. end
  115. net.lvRewardMsg[0] = len
  116. BuyLogic.fontBuyItem(human, net.buyItem, buyID)
  117. Msg.send(msgRet, human.fd)
  118. end
  119. -- 钻石基金购买
  120. function fund(human, funcID, buyConf, isFirst, cnt)
  121. local yyConfig = YunYingLogic.getFuncConfig(funcID)
  122. local buyType = buyConf.args[1]
  123. local rangeConfig, buyID = getRange(buyType)
  124. if not rangeConfig then return end
  125. if buyConf.id ~= buyID then return end
  126. if buyType == CONFIG_ID3 then
  127. if yyConfig.panelID ~= PanelDefine.PANEL_ID_3607 then return end
  128. else
  129. if yyConfig.panelID ~= PanelDefine.PANEL_ID_3506 then return end
  130. end
  131. local db = initDB(human)
  132. db.flag2 = db.flag2 or 0
  133. if buyType == CONFIG_ID3 then
  134. db.flag = CONFIG_ID3
  135. YunYingLogic.sendGroupUpdate(YYInfo[funcID], human, PanelDefine.PANEL_ID_3607)
  136. else
  137. if buyType == CONFIG_ID1 or buyType == CONFIG_ID2 then
  138. db.flag2 = buyType
  139. YunYingLogic.sendGroupUpdate(YYInfo[funcID], human, PanelDefine.PANEL_ID_3506)
  140. end
  141. end
  142. Broadcast.sendErr(human, Lang.ITEM_BUY_SUCCESS)
  143. query(human, buyType)
  144. end
  145. -- 获取基金奖励
  146. function fundGet(human, id, type)
  147. local config = FuliExcel.growFund[id]
  148. if not config then return end
  149. local db = initDB(human)
  150. local flag = nil
  151. local rangeConfig = nil
  152. if type == CONFIG_ID3 then
  153. rangeConfig = getRange(db.flag)
  154. if not rangeConfig then return end
  155. if id < rangeConfig[1] or id > rangeConfig[2] then
  156. return
  157. end
  158. flag = db.flag
  159. else
  160. -- 基金判定
  161. rangeConfig = getRange(db.flag2)
  162. if not rangeConfig then return end
  163. if id < rangeConfig[1] or id > rangeConfig[2] then
  164. return
  165. end
  166. flag = db.flag2
  167. end
  168. -- 是否已领取
  169. if getState(db, human.db.lv, id, flag) ~= STATE1 then
  170. return
  171. end
  172. db.get[id] = 1
  173. BagLogic.cleanMomentItemList()
  174. if type == CONFIG_ID3 then
  175. for i = 1, #config.items do
  176. BagLogic.updateMomentItem(BagLogic.ADDITEM_TYPE_1, config.items[i][1], config.items[i][2])
  177. end
  178. for k, v in pairs(funcID) do
  179. YunYingLogic.sendGroupUpdate(YYInfo[k], human, PanelDefine.PANEL_ID_3607)
  180. end
  181. else
  182. BagLogic.updateMomentItem(BagLogic.ADDITEM_TYPE_1, ItemDefine.ITEM_ZUANSHI_ID, config.yuanbao)
  183. for k, v in pairs(funcID) do
  184. YunYingLogic.sendGroupUpdate(YYInfo[k], human, PanelDefine.PANEL_ID_3506)
  185. end
  186. end
  187. BagLogic.addMomentItemList(human, "fundGet")
  188. query(human, type)
  189. end
  190. function isOpen(human,YYInfo,funcConfig)
  191. if not human.db.nFirstBuy or 1 ~= human.db.nFirstBuy then
  192. return false
  193. end
  194. if not SceneHandler.canCharge(human) then
  195. return
  196. end
  197. return true
  198. end
  199. function isRed(human, YYInfo, funcConfig)
  200. local actID = funcConfig.funcID
  201. local db = initDB(human)
  202. if actID == ACT_ID311 then
  203. local rangeConfig = getRange(db.flag)
  204. if rangeConfig then
  205. for i = rangeConfig[1], rangeConfig[2] do
  206. local config = FuliExcel.growFund[i]
  207. if getState(db, human.db.lv, i, CONFIG_ID3) == STATE1 then
  208. return true
  209. end
  210. end
  211. end
  212. elseif actID == ACT_ID205 then
  213. local rangeConfig = getRange(db.flag2)
  214. if rangeConfig then
  215. for i = rangeConfig[1], rangeConfig[2] do
  216. local config = FuliExcel.growFund[i]
  217. if getState(db, human.db.lv, i, db.flag2) == STATE1 then
  218. return true
  219. end
  220. end
  221. end
  222. end
  223. end
  224. function updateDaily(human)
  225. local db = initDB(human)
  226. local rangeConfig = getRange(db.flag)
  227. if rangeConfig then
  228. for i = rangeConfig[1], rangeConfig[2] do
  229. local config = FuliExcel.growFund[i]
  230. db.get[i] = nil
  231. end
  232. end
  233. end
  234. function onLevelUp(human, oldLv, newLv, id)
  235. YunYingLogic.sendGroupUpdate(YYInfo[id], human, PanelDefine.PANEL_ID_3506)
  236. end