| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291 |
- -- 送万元充值活动
- -- 每个挡位礼包数量有限,全区共享
- --db
- --[=[
- human.db.levelGift = {
- record = nil, -- 领取记录, key为配置中的id
- }
- ]=]--
- local Msg = require("core.Msg")
- local Grid = require("bag.Grid")
- local BagLogic = require("bag.BagLogic")
- local Broadcast = require("broadcast.Broadcast")
- local Lang = require("common.Lang")
- local LevelGiftCfg = require("excel.WanYuanReward").Sheet1
- local YunYingLogic = require("yunying.YunYingLogic")
- local CommonDB = require("common.CommonDB")
- local CommonDefine = require("common.CommonDefine")
- local YunYingExcel = require("excel.yunying")
- local LOGTYPE = "LevelGift"
- local ENTRANCE_ACT_ID = 36
- local ACT_ID = 7601
- local MAXNUM = 10000 --总额度
- local function initData(human)
- human.db.levelGift = {}
- human.db.levelGift.record = {}
- end
- local function getData(human)
- return human.db.levelGift
- end
- local function updateData(human, idx)
- local levelGiftData = getData(human)
- if not levelGiftData then
- initData(human)
- levelGiftData = getData(human)
- end
- levelGiftData.record[idx] = true
- end
- -- 获取本服所有道具的领取记录
- local function getItemSrvRecord()
- local recordList = CommonDB.getValueByKey(CommonDB.KEY_LEVELGIFT_GETRECORD)
- return recordList
- end
- -- 获取本服某个道具已经领取数量
- local function getItmGetNum(idx)
- local num = 0
- local recordList = getItemSrvRecord()
- if recordList and recordList[idx] then
- num = recordList[idx]
- end
- return num
- end
- -- 更新本服某个道具的领取数量
- local function updateItemRemaindeNum(idx)
- local recordList = getItemSrvRecord()
- recordList = recordList or {}
- recordList[idx] = (recordList[idx] or 0) + 1
- CommonDB.updateValue(CommonDB.KEY_LEVELGIFT_GETRECORD, recordList)
- end
- -- 更新本服多个道具的领取数量
- local function updateItemsRemaindeNum(newRecordList)
- CommonDB.updateValue(CommonDB.KEY_LEVELGIFT_GETRECORD, newRecordList)
- end
- -- 计算已经领取的额度
- local function calcGetWeight(human)
- local weight = 0
- local levelGiftData = getData(human)
- local recordData = levelGiftData and levelGiftData.record
- for idx in pairs(recordData or {}) do
- local cfg = LevelGiftCfg[idx]
- if cfg then
- weight = weight + cfg.count
- end
- end
- return weight
- end
- -- 获取道具状态
- local function getAwardState(human, idx, giftCfg)
- local levelGiftData = getData(human)
- local recordData = levelGiftData and levelGiftData.record
- local state = CommonDefine.COMMON_PRIZE_STATE_NOGET
- if recordData and recordData[idx] then
- state = CommonDefine.COMMON_PRIZE_STATE_GET
- else
- if human.db.lv >= giftCfg.lv then
- -- local num = getItmGetNum(idx)
- local num = calcGetWeight(human)
- if giftCfg.count + num <= MAXNUM then
- state = CommonDefine.COMMON_PRIZE_STATE_CANGET
- end
- end
- end
- return state
- end
- -- 获取所有奖励的剩余份数
- local function getItemsSubNum()
- local getNum, totalNum = 0,0
- for idx, v in ipairs(LevelGiftCfg) do
- getNum = getNum + getItmGetNum(idx)
- totalNum = totalNum + v.count
- end
- return math.max(totalNum-getNum, 0)
- end
- -- 填充协议
- local function populateGiftMsg(human, net, idx, giftCfg)
- net.itemArr[0] = 0
- net.state = 0
- net.levelCond = 0
- -- net.remaindeNum = 0
-
- net.itemArr[0] = #giftCfg.reward
- for i, itemInfo in ipairs(giftCfg.reward) do
- Grid.makeItem(net.itemArr[i], itemInfo[1], itemInfo[2])
- end
- net.levelCond = giftCfg.lv
- net.state = getAwardState(human, idx, giftCfg)
- -- local num = getItmGetNum(idx)
- -- net.remaindeNum = math.max(giftCfg.count - num, 0)
- end
- -- 是否显示入口。没有能领取的奖励后关闭,如果奖励没领完且奖励份数>=1则不关闭
- -- 新修改: 额度不足则关闭
- local function isShowEntrance(human)
- local levelGiftData = getData(human)
- local recordData = levelGiftData and levelGiftData.record or {}
- local getWeight = calcGetWeight(human)
- if getWeight >= MAXNUM then
- return false
- end
- for idx, v in ipairs(LevelGiftCfg) do
- local state = getAwardState(human, idx, v)
- if state == CommonDefine.COMMON_PRIZE_STATE_CANGET then
- return true
- end
- if not recordData[idx] then
- -- local num = getItmGetNum(idx)
- -- if num < v.count then
- -- return true
- -- end
- if v.count + getWeight <= MAXNUM then
- return true
- end
- end
- end
- return false
- end
- -- 是否有可领取奖励
- local function isCanGet(human)
- for idx, v in ipairs(LevelGiftCfg) do
- local state = getAwardState(human, idx, v)
- if state == CommonDefine.COMMON_PRIZE_STATE_CANGET then
- return true
- end
- end
- return false
- end
- -- 主动刷新一次红点
- local function updateRedDot(human)
- local config = YunYingExcel.func[ACT_ID]
- YunYingLogic.sendGroupUpdate(YYInfo[ACT_ID], human, config.panelID)
- -- YunYingLogic.sendIconUpdate(ENTRANCE_ACT_ID, human)
- YunYingLogic.updateIcon(YYInfo[ACT_ID], human, true)
- end
- -- 升级
- function onLevelUp(human, oldLv, newLv, funcID)
- updateRedDot(human)
- end
- function isOpen(human, YYInfo, funcConfig)
- return isShowEntrance(human)
- end
- function isRed(human)
- if not isOpen(human) then
- return false
- end
- return isCanGet(human)
- end
- -- 查询
- function LevelGift_Query(human)
- local msgRet = Msg.gc.GC_LEVELGIFT_QUERY
- msgRet.list[0] = 0
- msgRet.levelNow = human.db.lv
- msgRet.isStart = 1
- msgRet.isEnd = 0
- msgRet.remaindeNum = 0
- local getWeight = calcGetWeight(human)
- msgRet.remaindeNum = math.max(MAXNUM - getWeight, 0)
- local len = 0
- local msgOnceLen = 10
- local cfgNum = #LevelGiftCfg
- for idx, v in ipairs(LevelGiftCfg) do
- len = len + 1
- msgRet.list[0] = len
- populateGiftMsg(human, msgRet.list[len], idx, v)
- 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 LevelGift_GetReward(human)
- local itemList = {}
- -- local recordList = getItemSrvRecord()
- for idx, v in ipairs(LevelGiftCfg) do
- local state = getAwardState(human, idx, v)
- if state == CommonDefine.COMMON_PRIZE_STATE_CANGET then
- -- recordList = recordList or {}
- -- recordList[idx] = (recordList[idx] or 0) + 1
- updateData(human, idx)
- for _, itemInfo in ipairs(v.reward) do
- local itemId, itemNum = itemInfo[1], itemInfo[2]
- itemList[itemId] = (itemList[itemId] or 0) + itemNum
- end
- end
- end
- if not next(itemList) then
- return Broadcast.sendErr(human, Lang.HO_NO_CAN_GET)
- end
- -- updateItemsRemaindeNum(recordList)
- -- 发放道具
- BagLogic.addItemList(human, itemList, LOGTYPE)
- LevelGift_Query(human)
- updateRedDot(human)
- end
|