| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343 |
- -- 代金券投资
- -- 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 VoucherShopDefine = require("voucher.VoucherShopDefine")
- local LOGTYPE = "VoucherInvest" -- 日志标识
- local ACT_ID = 8203 -- 活动Id
- local VOUCHERSHOP_ACTID = 27
- 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, nowRound, maxRound)
- if nowRound > maxRound then
- net.state = CommonDefine.COMMON_PRIZE_STATE_GET
- else
- net.state = getAwardState(human, id)
- end
- Grid.makeItem(net.item, cfg.reward[1], cfg.reward[2])
- net.needPower = cfg.power
- end
- -- 主动刷新一次红点
- local function updateRedDot(human)
- -- YunYingLogic.sendBanner(human)
- local config = YunYingExcel.func[ACT_ID]
- YunYingLogic.sendGroupUpdate(YYInfo[ACT_ID], human, config.panelID)
- YunYingLogic.sendIconUpdate(VOUCHERSHOP_ACTID, human)
- end
- function isOpen(human, YYInfo, funcConfig)
- if human.version and table.find(VoucherShopDefine.VOUCHER_NO_OPEN_TAG_ARR, human.version) then
- return false
- end
- if human.db.phpChanelID and (human.db.phpChanelID == 13 or human.db.phpChanelID == "13") then
- return false
- end
- if human.db.lv < VoucherShopDefine.VOUCHER_OPEN_LV_COND then
- return false
- end
- if not human.db.nFirstBuy or human.db.nFirstBuy ~= 1 then
- --print("[VoucherShop is open] 33333")
- return false
- end
- 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, nBuyID, buyNum)
- 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 ~= nBuyID then
- return
- end
- updateBuyState(human, true)
- updateRedDot(human)
- VoucherInvest_Query(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
- if voucherInvestData.nowRound > maxRound then
- msgRet.isBuy = 1
- end
- msgRet.awardArr[0] = 0
- msgRet.isEnd = 0
- msgRet.isStart = 1
- local ids = getRounCfgIdArr(nowRound)
- 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, voucherInvestData.nowRound, maxRound)
- 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
- msgRet.isStart = 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)
- end
- updateRedDot(human)
- VoucherInvest_Query(human)
- end
|