|
|
@@ -0,0 +1,310 @@
|
|
|
+-- 代金券投资
|
|
|
+-- db
|
|
|
+--[=[
|
|
|
+ human.db.voucherInvestData = {
|
|
|
+ getRecord = { -- 领取记录数组, 初始为nil
|
|
|
+ idx1,
|
|
|
+ idx2,
|
|
|
+ }
|
|
|
+ isBuy = nil, 是否已经充值, 充值成功后为true
|
|
|
+ nowRound = nil, 当前轮数, 默认为1
|
|
|
+ }
|
|
|
+]=]--
|
|
|
+
|
|
|
+local Util = require("common.Util")
|
|
|
+local Lang = require("common.Lang")
|
|
|
+local Broadcast = require("broadcast.Broadcast")
|
|
|
+local Msg = require("core.Msg")
|
|
|
+local Grid = require("bag.Grid")
|
|
|
+local BagLogic = require("bag.BagLogic")
|
|
|
+local BuyLogic = require("topup.BuyLogic")
|
|
|
+local YunYingLogic = require("yunying.YunYingLogic")
|
|
|
+local voucherInvestConfig = require("excel.VoucherInvest").Sheet1
|
|
|
+local CommonDefine = require("common.CommonDefine")
|
|
|
+local YunYingExcel = require("excel.yunying")
|
|
|
+
|
|
|
+
|
|
|
+local LOGTYPE = "VoucherInvest" -- 日志标识
|
|
|
+local ACT_ID = 8203 -- 活动Id
|
|
|
+
|
|
|
+
|
|
|
+local function initData(human)
|
|
|
+ human.db.voucherInvestData = {
|
|
|
+ nowRound = 1,
|
|
|
+ isBuy = false,
|
|
|
+ }
|
|
|
+end
|
|
|
+
|
|
|
+local function getData(human)
|
|
|
+ if not human.db.voucherInvestData then
|
|
|
+ initData(human)
|
|
|
+ end
|
|
|
+ return human.db.voucherInvestData
|
|
|
+end
|
|
|
+
|
|
|
+local function updateBuyState(human, buyState)
|
|
|
+ local voucherInvestData = getData(human)
|
|
|
+ voucherInvestData.isBuy = buyState
|
|
|
+end
|
|
|
+
|
|
|
+local function updateGetRecord(human, idx)
|
|
|
+ local voucherInvestData = getData(human)
|
|
|
+ voucherInvestData.getRecord = voucherInvestData.getRecord or {}
|
|
|
+ table.insert(voucherInvestData.getRecord, idx)
|
|
|
+end
|
|
|
+
|
|
|
+local function resetData(human, newRound)
|
|
|
+ local voucherInvestData = getData(human)
|
|
|
+ voucherInvestData.nowRound = newRound
|
|
|
+ voucherInvestData.isBuy = false
|
|
|
+ Util.initTable(voucherInvestData.getRecord)
|
|
|
+end
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+-- 是否已经充值
|
|
|
+local function isBuy(human)
|
|
|
+ local voucherInvestData = getData(human)
|
|
|
+ return voucherInvestData.isBuy
|
|
|
+end
|
|
|
+
|
|
|
+-- 通过轮数获取购买项Id
|
|
|
+local function getBuyIdByRound(round)
|
|
|
+ for _, v in ipairs(voucherInvestConfig) do
|
|
|
+ if v.round and v.round == round then
|
|
|
+ return v.buyid
|
|
|
+ end
|
|
|
+ end
|
|
|
+end
|
|
|
+
|
|
|
+-- 通过轮数获取配置Id
|
|
|
+local function getRounCfgIdArr(round)
|
|
|
+ local idArr = {}
|
|
|
+ for id, v in ipairs(voucherInvestConfig) do
|
|
|
+ if v.round and v.round == round then
|
|
|
+ idArr[#idArr+1] = id
|
|
|
+ end
|
|
|
+ end
|
|
|
+
|
|
|
+ return idArr
|
|
|
+end
|
|
|
+
|
|
|
+-- 获取最大轮数
|
|
|
+local function getMaxRound()
|
|
|
+ return voucherInvestConfig[#voucherInvestConfig].round
|
|
|
+end
|
|
|
+
|
|
|
+-- 奖励状态
|
|
|
+local function getAwardState(human, id)
|
|
|
+ local voucherInvestData = getData(human)
|
|
|
+ local getRecordData = voucherInvestData.getRecord or {}
|
|
|
+
|
|
|
+ if table.find(getRecordData, id) then
|
|
|
+ return CommonDefine.COMMON_PRIZE_STATE_GET
|
|
|
+ else
|
|
|
+ if not isBuy(human) then
|
|
|
+ return CommonDefine.COMMON_PRIZE_STATE_NOGET
|
|
|
+ end
|
|
|
+
|
|
|
+ local cfg = voucherInvestConfig[id]
|
|
|
+ if human.db.zhandouli >= cfg.power then
|
|
|
+ return CommonDefine.COMMON_PRIZE_STATE_CANGET
|
|
|
+ end
|
|
|
+ end
|
|
|
+
|
|
|
+ return CommonDefine.COMMON_PRIZE_STATE_NOGET
|
|
|
+end
|
|
|
+
|
|
|
+-- 填充协议结构
|
|
|
+local function populateAwardMsg(human, net, id, cfg)
|
|
|
+ net.state = getAwardState(human, id)
|
|
|
+ Grid.makeItem(net.item, cfg.reward[1], cfg.reward[2])
|
|
|
+end
|
|
|
+
|
|
|
+-- 主动刷新一次红点
|
|
|
+local function updateRedDot(human)
|
|
|
+ YunYingLogic.sendBanner(human)
|
|
|
+ local config = YunYingExcel.func[ACT_ID]
|
|
|
+ YunYingLogic.sendGroupUpdate(YYInfo[ACT_ID], human, config.panelID)
|
|
|
+end
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+function isOpen(human, YYInfo, funcConfig)
|
|
|
+ return true
|
|
|
+end
|
|
|
+
|
|
|
+function isRed(human)
|
|
|
+ if not isOpen(human) then
|
|
|
+ return false
|
|
|
+ end
|
|
|
+
|
|
|
+ if not isBuy(human) then
|
|
|
+ return false
|
|
|
+ end
|
|
|
+
|
|
|
+ local voucherInvestData = getData(human)
|
|
|
+ local nowRound = voucherInvestData.nowRound
|
|
|
+ local maxRound = getMaxRound()
|
|
|
+ -- 已经领完最后一轮
|
|
|
+ if nowRound > maxRound then
|
|
|
+ return false
|
|
|
+ end
|
|
|
+
|
|
|
+ local ids = getRounCfgIdArr(nowRound)
|
|
|
+ for _, id in ipairs(ids) do
|
|
|
+ local awardState = getAwardState(human, id)
|
|
|
+ if awardState == CommonDefine.COMMON_PRIZE_STATE_CANGET then
|
|
|
+ return true
|
|
|
+ end
|
|
|
+ end
|
|
|
+
|
|
|
+ return false
|
|
|
+end
|
|
|
+
|
|
|
+function onCharge(human, price, funcID, buyID)
|
|
|
+ if not isOpen(human) then
|
|
|
+ return
|
|
|
+ end
|
|
|
+
|
|
|
+ if isBuy(human) then
|
|
|
+ return
|
|
|
+ end
|
|
|
+
|
|
|
+ local voucherInvestData = getData(human)
|
|
|
+ local nowRound = voucherInvestData.nowRound
|
|
|
+ local buyId = getBuyIdByRound(nowRound)
|
|
|
+ if buyId ~= buyID then
|
|
|
+ return
|
|
|
+ end
|
|
|
+
|
|
|
+ updateBuyState(human, true)
|
|
|
+
|
|
|
+ updateRedDot(human)
|
|
|
+end
|
|
|
+
|
|
|
+-- 战力更新
|
|
|
+function onZhandouli(human)
|
|
|
+ if not isOpen(human) then
|
|
|
+ return
|
|
|
+ end
|
|
|
+
|
|
|
+ if not isBuy(human) then
|
|
|
+ return
|
|
|
+ end
|
|
|
+
|
|
|
+ updateRedDot(human)
|
|
|
+end
|
|
|
+
|
|
|
+-- 战力更新
|
|
|
+function PowerUpdate(human)
|
|
|
+ if not isOpen(human) then
|
|
|
+ return
|
|
|
+ end
|
|
|
+
|
|
|
+ if not isBuy(human) then
|
|
|
+ return
|
|
|
+ end
|
|
|
+
|
|
|
+ updateRedDot(human)
|
|
|
+end
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+-- 查询
|
|
|
+function VoucherInvest_Query(human)
|
|
|
+ if not isOpen(human) then
|
|
|
+ return Broadcast.sendErr(human, Lang.YUNYING_ERR_TIME)
|
|
|
+ end
|
|
|
+
|
|
|
+ local voucherInvestData = getData(human)
|
|
|
+ local nowRound = voucherInvestData.nowRound
|
|
|
+ local maxRound = getMaxRound()
|
|
|
+ nowRound = math.min(nowRound, maxRound)
|
|
|
+ local buyId = getBuyIdByRound(nowRound)
|
|
|
+
|
|
|
+ local msgRet = Msg.gc.GC_VOUCHER_INVEST_QUERY
|
|
|
+ BuyLogic.fontBuyItem(human, msgRet.buyItem, buyId)
|
|
|
+
|
|
|
+ msgRet.isBuy = voucherInvestData.isBuy and 1 or 0
|
|
|
+ msgRet.awardArr[0] = 0
|
|
|
+ msgRet.isEnd = 0
|
|
|
+
|
|
|
+ local ids = getRounCfgIdArr(round)
|
|
|
+ local cfgNum = #ids
|
|
|
+ local len, msgOnceLen = 0, 15
|
|
|
+
|
|
|
+ for _, id in ipairs(ids) do
|
|
|
+ len = len + 1
|
|
|
+ msgRet.awardArr[0] = len
|
|
|
+ local cfg = voucherInvestConfig[id]
|
|
|
+ populateAwardMsg(human, msgRet.awardArr[len], id, cfg)
|
|
|
+
|
|
|
+ if len >= msgOnceLen then
|
|
|
+ cfgNum = cfgNum - len
|
|
|
+ if cfgNum <= 0 then
|
|
|
+ msgRet.isEnd = 1
|
|
|
+ return Msg.send(msgRet, human.fd)
|
|
|
+ end
|
|
|
+
|
|
|
+ Msg.send(msgRet, human.fd)
|
|
|
+ len = 0
|
|
|
+ end
|
|
|
+ end
|
|
|
+
|
|
|
+ if len > 0 then
|
|
|
+ msgRet.isEnd = 1
|
|
|
+ Msg.send(msgRet, human.fd)
|
|
|
+ end
|
|
|
+end
|
|
|
+
|
|
|
+-- 领奖
|
|
|
+function VoucherInvest_Get(human)
|
|
|
+ if not isOpen(human) then
|
|
|
+ return Broadcast.sendErr(human, Lang.YUNYING_ERR_TIME)
|
|
|
+ end
|
|
|
+
|
|
|
+ if not isBuy(human) then
|
|
|
+ return Broadcast.sendErr(human, Lang.SHARE_GROUP_GET_ERR_CNT)
|
|
|
+ end
|
|
|
+
|
|
|
+ local voucherInvestData = getData(human)
|
|
|
+ local nowRound = voucherInvestData.nowRound
|
|
|
+ local maxRound = getMaxRound()
|
|
|
+
|
|
|
+ if nowRound > maxRound then
|
|
|
+ return Broadcast.sendErr(human, Lang.SHARE_GROUP_GET_ERR_CNT)
|
|
|
+ end
|
|
|
+
|
|
|
+ local ids = getRounCfgIdArr(voucherInvestData.nowRound)
|
|
|
+ local itemList = {}
|
|
|
+
|
|
|
+ for _, id in ipairs(ids) do
|
|
|
+ local cfg = voucherInvestConfig[id]
|
|
|
+ local awardState = getAwardState(human, id)
|
|
|
+
|
|
|
+ if awardState == CommonDefine.COMMON_PRIZE_STATE_CANGET then
|
|
|
+ -- 更新领取记录
|
|
|
+ updateGetRecord(human, id)
|
|
|
+
|
|
|
+ local itemId, itemNum = cfg.reward[1], cfg.reward[2]
|
|
|
+ itemList[itemId] = (itemList[itemId] or 0) + itemNum
|
|
|
+ end
|
|
|
+ end
|
|
|
+
|
|
|
+ if not next(itemList) then
|
|
|
+ Broadcast.sendErr(human, Lang.SHARE_GROUP_GET_ERR_CNT)
|
|
|
+ end
|
|
|
+
|
|
|
+ BagLogic.addItemList(human, itemList, LOGTYPE)
|
|
|
+
|
|
|
+ -- 领完则进入下一轮
|
|
|
+ if #voucherInvestData.getRecord == #ids then
|
|
|
+ resetData(human, voucherInvestData.nowRound + 1)
|
|
|
+
|
|
|
+ updateRedDot(human)
|
|
|
+ end
|
|
|
+
|
|
|
+ VoucherInvest_Query(human)
|
|
|
+end
|