FundLogic.lua 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293
  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. local nBuyAll = bAllBuy and 1 or 0
  87. if type ~= CONFIG_ID3 and bAllBuy == true then
  88. local bAdd = false
  89. if flag == CONFIG_ID2 then
  90. flag = CONFIG_ID2 + 2
  91. elseif flag < CONFIG_ID2 then
  92. flag = CONFIG_ID2
  93. else
  94. flag = flag + 1
  95. bAdd = true
  96. end
  97. rangeConfig, buyID = getRange(flag)
  98. if not rangeConfig and not buyID and true == bAdd then
  99. rangeConfig, buyID = getRange(flag - 1)
  100. end
  101. end
  102. local msgRet = Msg.gc.GC_TEQUAN_ZSJIJIN_QUERY
  103. local net = msgRet.data
  104. local len = 0
  105. for i = rangeConfig[1], rangeConfig[2] do
  106. local config = FuliExcel.growFund[i]
  107. len = len + 1
  108. local netNode = net.lvRewardMsg[len]
  109. netNode.id = i
  110. netNode.lv = config.lv
  111. netNode.state = getState(db, human.db.lv, i, flag)
  112. if flag == CONFIG_ID3 then
  113. for j, h in ipairs(config.items) do
  114. Grid.makeItem(netNode.lvReward[j], h[1], h[2])
  115. end
  116. netNode.lvReward[0] = #config.items
  117. else
  118. Grid.makeItem(netNode.lvReward[1], ItemDefine.ITEM_ZUANSHI_ID, config.yuanbao)
  119. netNode.lvReward[0] = 1
  120. end
  121. end
  122. if type == CONFIG_ID3 then
  123. net.fundFlag = db.flag == flag and 1 or 0
  124. else
  125. net.fundFlag = db.flag2 == flag and 1 or 0
  126. end
  127. net.lvRewardMsg[0] = len
  128. BuyLogic.fontBuyItem(human, net.buyItem, buyID)
  129. Msg.send(msgRet, human.fd)
  130. end
  131. -- 钻石基金购买
  132. function fund(human, funcID, buyConf, isFirst, cnt)
  133. local yyConfig = YunYingLogic.getFuncConfig(funcID)
  134. local buyType = buyConf.args[1]
  135. local rangeConfig, buyID = getRange(buyType)
  136. if not rangeConfig then return end
  137. if buyConf.id ~= buyID then return end
  138. if buyType == CONFIG_ID3 then
  139. if yyConfig.panelID ~= PanelDefine.PANEL_ID_3607 then return end
  140. else
  141. if yyConfig.panelID ~= PanelDefine.PANEL_ID_3506 then return end
  142. end
  143. local db = initDB(human)
  144. db.flag2 = db.flag2 or 0
  145. if buyType == CONFIG_ID3 then
  146. db.flag = CONFIG_ID3
  147. YunYingLogic.sendGroupUpdate(YYInfo[funcID], human, PanelDefine.PANEL_ID_3607)
  148. else
  149. local trangeConfig, nbuyConfID = getRange(buyType)
  150. if buyType == CONFIG_ID1 or buyType == CONFIG_ID2 or (trangeConfig and nbuyConfID == buyID) then
  151. db.flag2 = buyType
  152. YunYingLogic.sendGroupUpdate(YYInfo[funcID], human, PanelDefine.PANEL_ID_3506)
  153. end
  154. end
  155. Broadcast.sendErr(human, Lang.ITEM_BUY_SUCCESS)
  156. query(human, buyType)
  157. end
  158. -- 获取基金奖励
  159. function fundGet(human, id, type)
  160. local config = FuliExcel.growFund[id]
  161. if not config then return end
  162. local db = initDB(human)
  163. local flag = nil
  164. local rangeConfig = nil
  165. if type == CONFIG_ID3 then
  166. rangeConfig = getRange(db.flag)
  167. if not rangeConfig then return end
  168. if id < rangeConfig[1] or id > rangeConfig[2] then
  169. return
  170. end
  171. flag = db.flag
  172. else
  173. -- 基金判定
  174. rangeConfig = getRange(db.flag2)
  175. if not rangeConfig then return end
  176. if id < rangeConfig[1] or id > rangeConfig[2] then
  177. return
  178. end
  179. flag = db.flag2
  180. end
  181. -- 是否已领取
  182. if getState(db, human.db.lv, id, flag) ~= STATE1 then
  183. return
  184. end
  185. db.get[id] = 1
  186. BagLogic.cleanMomentItemList()
  187. if type == CONFIG_ID3 then
  188. for i = 1, #config.items do
  189. BagLogic.updateMomentItem(BagLogic.ADDITEM_TYPE_1, config.items[i][1], config.items[i][2])
  190. end
  191. for k, v in pairs(funcID) do
  192. YunYingLogic.sendGroupUpdate(YYInfo[k], human, PanelDefine.PANEL_ID_3607)
  193. end
  194. else
  195. BagLogic.updateMomentItem(BagLogic.ADDITEM_TYPE_1, ItemDefine.ITEM_ZUANSHI_ID, config.yuanbao)
  196. for k, v in pairs(funcID) do
  197. YunYingLogic.sendGroupUpdate(YYInfo[k], human, PanelDefine.PANEL_ID_3506)
  198. end
  199. end
  200. BagLogic.addMomentItemList(human, "fundGet")
  201. query(human, type)
  202. end
  203. function isOpen(human,YYInfo,funcConfig)
  204. if not human.db.nFirstBuy or 1 ~= human.db.nFirstBuy then
  205. return false
  206. end
  207. if not SceneHandler.canCharge(human) then
  208. return
  209. end
  210. return true
  211. end
  212. function isRed(human, YYInfo, funcConfig)
  213. local actID = funcConfig.funcID
  214. local db = initDB(human)
  215. if actID == ACT_ID311 then
  216. local rangeConfig = getRange(db.flag)
  217. if rangeConfig then
  218. for i = rangeConfig[1], rangeConfig[2] do
  219. local config = FuliExcel.growFund[i]
  220. if getState(db, human.db.lv, i, CONFIG_ID3) == STATE1 then
  221. return true
  222. end
  223. end
  224. end
  225. elseif actID == ACT_ID205 then
  226. local rangeConfig = getRange(db.flag2)
  227. if rangeConfig then
  228. for i = rangeConfig[1], rangeConfig[2] do
  229. local config = FuliExcel.growFund[i]
  230. if getState(db, human.db.lv, i, db.flag2) == STATE1 then
  231. return true
  232. end
  233. end
  234. end
  235. end
  236. end
  237. function updateDaily(human)
  238. local db = initDB(human)
  239. local rangeConfig = getRange(db.flag)
  240. if rangeConfig then
  241. for i = rangeConfig[1], rangeConfig[2] do
  242. local config = FuliExcel.growFund[i]
  243. db.get[i] = nil
  244. end
  245. end
  246. end
  247. function onLevelUp(human, oldLv, newLv, id)
  248. YunYingLogic.sendGroupUpdate(YYInfo[id], human, PanelDefine.PANEL_ID_3506)
  249. end