FundLogic.lua 9.2 KB

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