----------------------------------------------------------------- -- 超值首充 -- db.firstCharge -- firstCharge[type].ts 激活时间 -- firstCharge.getList 奖励领取次数 firstCharge.getList[id] = cnt -- firstCharge.freeTime 每日登陆奖励领取时间 firstCharge.freeTime[type] = time ----------------------------------------------------------- local Msg = require("core.Msg") local Util = require("common.Util") local PresentExcel = require("excel.present") local Grid = require("bag.Grid") local BagLogic = require("bag.BagLogic") local Broadcast = require("broadcast.Broadcast") local PanelDefine = require("broadcast.PanelDefine") local ChatPaoMaLogic = require("chat.ChatPaoMaLogic") local YunYingLogic = require("yunying.YunYingLogic") local SceneHandler = require("scene.Handler") local ObjHuman = require("core.ObjHuman") local FIRST_CHARGE_TYPE1 = 1 -- 首充赠礼 local FIRST_CHARGE_TYPE2 = 2 -- 100元赠礼 -- 状态 STATE_CANT_GET = 0 -- 不可领 STATE_CAT_GET = 1 -- 可领 STATE_HAD_GET = 2 -- 已领 function isOpenByType(human,giftType) if not human.db.firstCharge or not human.db.firstCharge[giftType] then return true end for id,config in ipairs(PresentExcel.firstCharge) do if giftType == config.type then if getState(human, id, true) ~= STATE_HAD_GET then return true end end end end function isRedByType(human,giftType) if not human.db.firstCharge or not human.db.firstCharge[giftType] then return end for id,config in ipairs(PresentExcel.firstCharge) do if giftType == config.type then if getState(human, id) == STATE_CAT_GET then return true end end end end function isOpen(human,YYInfo,funcConfig) if not SceneHandler.canCharge(human) then return end if isOpenByType(human,FIRST_CHARGE_TYPE1) or isOpenByType(human,FIRST_CHARGE_TYPE2) then return true end end function isRed(human,YYInfo,funcConfig) if isRedByType(human,FIRST_CHARGE_TYPE1) or isRedByType(human,FIRST_CHARGE_TYPE2) then return true end end -- 封装结构体 local function fontNet(net, human, id, cf) if not net then return end net.id = id net.status = getState(human, id) net.items[0] = #cf.reward for i, item in ipairs(cf.reward) do Grid.makeItem(net.items[i], item[1], item[2]) end end function sendQuery(human,giftType) ObjHuman.updateDaily(human) local msgRet = Msg.gc.GC_FIRST_CHARGE_GIFT_QUERY msgRet.value = human.db.topupAcount or 0 msgRet.type = giftType msgRet.list[0] = 0 msgRet.red[0] = 0 for id, cf in ipairs(PresentExcel.firstCharge) do if cf.type == giftType then msgRet.list[0] = msgRet.list[0] + 1 local index = msgRet.list[0] fontNet(msgRet.list[index], human, id, cf) end if id == 2 or id == 4 then msgRet.red[0] = msgRet.red[0] + 1 msgRet.red[msgRet.red[0]] = getState(human, id) end end --Msg.trace(msgRet) Msg.send(msgRet, human.fd) end function getItems(human, type) ObjHuman.updateDaily(human) -- 领取奖励 local items = {} local len = 0 for id, cf in ipairs(PresentExcel.firstCharge) do if cf.type == type then local state = getState(human, id) if state == STATE_CAT_GET then local cf = PresentExcel.firstCharge[id] if cf then human.db.firstCharge.getList = human.db.firstCharge.getList or {} human.db.firstCharge.getList[id] = (human.db.firstCharge.getList[id] or 0) + 1 if cf.day == 0 then human.db.firstCharge.freeTime = human.db.firstCharge.freeTime or {} human.db.firstCharge.freeTime[cf.type] = os.time() end for k,v in pairs(cf.reward) do local itemID = v[1] local itemCnt = v[2] items[itemID] = items[itemID] or 0 items[itemID] = items[itemID] + itemCnt len = len + 1 end end end end end if len > 0 then BagLogic.addItemList(human, items, "shouchong") for k, v in pairs(funcID) do YunYingLogic.updateIcon(YYInfo[k], human) YunYingLogic.sendGroupUpdate(YYInfo[k], human, PanelDefine.PANEL_ID_3302) break end sendQuery(human, type) end end local TYPE_2_NEED = nil function getNeedList() if not TYPE_2_NEED then TYPE_2_NEED = {} for id, cf in pairs(PresentExcel.firstCharge) do TYPE_2_NEED[cf.type] = cf.need end end return TYPE_2_NEED end -- 状态 function getState(human, id, byMax) local cf = PresentExcel.firstCharge[id] if not cf then return STATE_CANT_GET end local data = human.db.firstCharge and human.db.firstCharge[cf.type] if not data or not data.ts then return STATE_CANT_GET end if cf.day == 0 and not byMax then local freeTime = human.db.firstCharge.freeTime and human.db.firstCharge.freeTime[cf.type] or 0 if Util.isSameDay(freeTime) then return STATE_HAD_GET end end local getCnt = human.db.firstCharge.getList and human.db.firstCharge.getList[id] or 0 if getCnt >= cf.getMax then return STATE_HAD_GET end local day = Util.diffDay(data.ts) + 1 if cf.day > day then return STATE_CANT_GET end return STATE_CAT_GET end -- 激活首充 function activateFirstCharge(human, ftype) human.db.firstCharge = human.db.firstCharge or {} if human.db.firstCharge[ftype] then return end human.db.firstCharge[ftype] = {} human.db.firstCharge[ftype].ts = os.time() if ftype == FIRST_CHARGE_TYPE1 then ChatPaoMaLogic.broadcast(human, ChatPaoMaLogic.PAOMA_TYPE_BROAD_TYPE15, 0) end return true end -- 充值回调 function onCharge(human) local needList = getNeedList() local isChange = nil for ftype, need in pairs(needList) do if (human.db.topupAcount or 0) >= need and activateFirstCharge(human, ftype) then isChange = true sendQuery(human, ftype) end end if isChange then for k, v in pairs(funcID) do YunYingLogic.updateIcon(YYInfo[k], human) break end end end function updateDaily(human) if human.db.firstCharge then human.db.firstCharge.freeTime = nil end end -- 是否已激活首充 function isActive(human, YYInfo, funcConfig) if not human.db.firstCharge or not human.db.firstCharge[FIRST_CHARGE_TYPE1] then return end return true end