-- 商店数据 local Store = class("Store", require("shared.ModelBaseMysql")) function Store:ctor(properties) Store.super.ctor(self, properties) end function Store:onLoad() local monEx = self:getProperty("monthCardEx") local monId = self:getProperty("monthCardId") local flag = false if monEx > 0 and monId == 0 then self:updateProperty({field = "monthCardId", value = 101}) self:updateProperty({field = "getMailT1", value = 0}) flag = true end end ActGoodsType = { paySignIn = 1, -- 付费签到 } Store.schema = { id = {"number", 0, "pri"}, -- 角色id buyR = {"table", {}}, -- 购买商品记录 {id=count} payR = {"table", {}}, -- 充值记录 {id=count} growFund = {"number", 0}, -- 成长基金 growFundR = {"string", ""}, -- 成长基金领取记录 monthCardEx = {"number", 0}, -- 期数 monthCardId = {"number", 0}, -- 月卡id firstMonthCard = {"number", 0}, -- 首次订阅月卡 monthCardReceive = {"number", 0}, -- 月卡奖励领取记录 当天 0-未领取, 1-已经领取 smonthCards = {"table", {}}, --特刊信息 {[id]={["buyCount"]=0, ["periods"]=0}} buyCount: 购买次数,periods: 剩余期数, smonthCardReceive = {"number", 0}, -- 特刊奖励领取记录 当天 0-未领取, 1-已经领取 firstSMonthCard = {"table", {}}, -- 首次订阅当期特刊 battleCard = {"number", 0}, -- 赛季卡 battleFR = {"string", ""}, -- 免费赛季卡领取记录 battleLR = {"string", ""}, -- 付费赛季卡领取记录 limitTPack = {"table", {}}, -- 限时礼包 {id={expire_ts, trigger_type}} privCardEx = {"number", 0}, -- 特权卡过期时间戳 getMailT1 = {"number",0}, -- 上次发送月卡福利邮件的时间 getMailT2 = {"number",0}, -- 上次发送超级月卡福利邮件的时间 --packTrigger = {"table", {}}, -- 礼包触发记录 {关卡难度1={id, 通关关卡数,升级数,爬塔层数}, ...} -- 活动商品购买记录 actGoodsFlag = {"table", {}}, -- ActGoodsType 1购买,0未购买 bpInfo = {"table", {}}, -- battle pass 探索指令 1={flag=0 为1表示买了,br=""付费领取记录, fr=""免费领取记录},2,3,4 totalRR = {"string", ""}, -- 累计充值奖励领取记录 dailyShop = {"table", {}}, weekShop = {"table", {}}, dayLimitInfo = {"table", {}}, -- {[id]={count=0, trigger=0}} } function Store:updateProperty(params) params = params or {} if not self.schema[params.field] then return end local oldValue = self:getProperty(params.field) if params.value then self:setProperty(params.field, params.value) elseif params.delta then self:incrProperty(params.field, params.delta) else return end local newValue = self:getProperty(params.field) if not params.notNotify then self:notifyUpdateProperty(params.field, newValue, oldValue) end end function Store:onCrossDay() --self:sendMonthCardEmail() self:deleteExpireLimitGoods() --self:checkPaySignReward() self:resetDayLimitPackTriggerCount() --刷新商店 self:flushDailyShop() --重置月卡、特刊奖励领取记录 self:updateProperty({field = "monthCardReceive", value = 0}) self:updateProperty({field = "smonthCardReceive", value = 0}) end function Store:refreshWeekData(notify) self:flushWeekShop() end local function getSMonthCardPeriods(self, id) local smonthCards = self:getProperty("smonthCards") or {} local smonthCard = smonthCards[id] or {} return smonthCard["periods"] or 0 end local function getCardItemDailyReward(self, id) local cur_ex = getSMonthCardPeriods(self, id) if cur_ex == 0 then return nil, nil end cur_ex = cur_ex - 1 local card = csvdb["shop_cardCsv"][id] or {} local reward, change = self.owner:award(card["itemDaily"], {log = {desc = "smonthCardReward", int1 = id, int2 = cur_ex}}) local smonthCards = self:getProperty("smonthCards") or {} local smonthCard = smonthCards[id] or {} smonthCard["periods"] = cur_ex self:updateProperty({field = "smonthCards", value = smonthCards}) return reward, change, cur_ex end local function getCardItemFirstReward(self, id) local card = csvdb["shop_cardCsv"][id] or {} local reward, _ = self.owner:award(card["itemFirst"], {isRecharge = true, log = {desc = "recharge", int1 = id}}) return reward end -- 删除过期商品 function Store:deleteExpireLimitGoods() local timeNow = skynet.timex() local limitGoodsList = self:getProperty("limitTPack") for k, v in pairs(limitGoodsList) do if timeNow > v[1] then limitGoodsList[k] = nil end end self:updateProperty({field = "limitTPack", value = limitGoodsList, notNotify = true}) end -- 每日充值循环限时礼包的触发次数 function Store:resetDayLimitPackTriggerCount() local dayLimitInfo = self:getProperty("dayLimitInfo") for k, v in pairs(dayLimitInfo) do v['trigger'] = nil end self:updateProperty({field = "dayLimitInfo", value = dayLimitInfo, notNotify = true}) end -- 发送月卡邮件 function Store:sendMonthCardEmail() local timeNow = skynet.timex() local tabs = {{ex="monthCardEx", t="getMailT1", id= self:getProperty("monthCardId")}, {ex="smonthCardEx", t="getMailT2", id=self:getProperty("smonthCardId")}} for _, v in ipairs(tabs) do local ex = self:getProperty(v.ex) local ts = self:getProperty(v.t) or 0 local cfg = csvdb["shop_cardCsv"][v.id] or {} local mailId = cfg.email local alertId = cfg.email_2 local alertTs = dayLater(ex) - DAY_SEC if ex > timeNow then local cnt = 0 if ts == 0 then cnt = 1 else local diff = math.floor((dayLater(timeNow) - dayLater(ts))/DAY_SEC) diff = diff < 0 and 0 or diff diff = diff > 31 and 31 or diff cnt = diff end for i = cnt - 1, 0, -1 do local createTs = timeNow - i * DAY_SEC self.owner:sendMail(mailId, createTs) -- 过期头一天发提醒邮件 if dayLater(createTs) == alertTs then self.owner:sendMail(alertId, createTs) end end if cnt > 0 then self:updateProperty({field=v.t, value=timeNow}) end end end end function Store:isMonthCardExpire() return self:getProperty("monthCardEx") == 0 end function Store:isSuperMonthCardExpire(id) return false end function Store:isPrivCardExpire() local timeNow = skynet.timex() local ts = self:getProperty("privCardEx") return ts < timeNow end -- 挂机栏位 特权卡额外个数 function Store:getHangSlotExtraCount() if self:isPrivCardExpire() then return 0 end return globalCsv.shop_priv_card_hang_slot_cnt or 4 end -- 探索加速/餐厅加速 特权卡系数 function Store:getProduceItemSpeedCoef() if self:isPrivCardExpire() then return 1 end local coef = (globalCsv.shop_priv_card_produce_coef or 25)/ 100 return 1 + coef end -- 拆解室栏位 特权卡额外个数 function Store:getTimeBoxSlotExtraCount() if self:isPrivCardExpire() then return 0 end return globalCsv.shop_priv_time_box_slot_cnt or 3 end -- 齿轮兑换 特权卡系数 function Store:getGearExchangeCoef() if self:isPrivCardExpire() then return 1 end local coef = (globalCsv.shop_priv_exchange_gear_coef or 50)/ 100 return 1 + coef end -- 奖励关卡 特权卡额外数量 function Store:getBonusExtraFightCount() if self:isPrivCardExpire() then return 0 end local cnt = globalCsv.bonus_extra_fight_count or 1 return cnt end -- 挂机道具掉落系数 特权卡挂机掉落系数 function Store:getHangDropCoef() if self:isPrivCardExpire() then return 1, 1 end return (1 + globalCsv.hang_drop_exp_coef) or 1, (1 + globalCsv.hang_drop_item_coef) or 1 end function Store:getCurMonthCardLvl(isSuper) local id = 0 if isSuper then id = self:getProperty("smonthCardId") or 0 else id = self:getProperty("monthCardId") or 0 end local cfg = csvdb["shop_cardCsv"][id] if not cfg then return 0 end return cfg.level or 0 end --获取月卡每日奖励 function Store:getMonthCardDailyReward(id) if not id then return nil end if self:isMonthCardExpire() or self:getProperty("monthCardReceive") == 1 then return nil, nil end local before_ex = self:getProperty("monthCardEx") self:updateProperty({field = "monthCardEx", delta = -1}) local cur_ex = self:getProperty("monthCardEx") local actCfg = csvdb["shop_cardCsv"][id] or {} local award = actCfg.itemDaily:toNumMap() local reward, change = self.owner:award(award, {log = {desc = "monthCardReward", int1 = id, int2 = cur_ex}}) --今日月卡奖励已经领取 self:updateProperty({field = "monthCardReceive", value = 1}) self.owner:log("month_card", { item_type = CardType.NormalMonthCard, item_id = id, --月卡id before_ex = before_ex, --未领取奖励前的期 cur_ex = cur_ex, --剩余期数 reward_time = skynet.timex(), --奖励时间 month_reward_detail = reward, }) return reward, change end --获取特刊每日奖励 function Store:getSMonthCardDailyReward(id) if not id then return nil end local before_ex = getSMonthCardPeriods(self, id) local reward, change, cur_ex= getCardItemDailyReward(self, id) --今日特刊奖励已经领取 self:updateProperty({field = "smonthCardReceive", value = 1}) self.owner:log("month_card", { item_type = CardType.SuperMonthCard, item_id = id, --月卡id before_ex = before_ex, --未领取奖励前的期 cur_ex = cur_ex, --剩余期数 reward_time = skynet.timex(), --奖励时间 month_reward_detail = reward, }) return reward, change end function Store:firstBuyMonthCard(id) if self:getProperty("firstMonthCard") == 0 then self:updateProperty({field = "firstMonthCard", value = 1}) local card = csvdb["shop_cardCsv"][id] or {} return self.owner:award(card["itemOnce"], {log = {desc = "firstMonthCardReward", int1 = id}}) end return nil end function Store:firstBuySMonthCard(id) local firstSMonthCard = self:getProperty("firstSMonthCard") or {} if not firstSMonthCard[id] or firstSMonthCard[id] == 0 then firstSMonthCard[id] = 1 self:updateProperty({field = "firstSMonthCard", value = firstSMonthCard}) local card = csvdb["shop_cardCsv"][id] or {} return self.owner:award(card["itemOnce"], {log = {desc = "firstSMonthCardReward", int1 = id}}) end return nil end function Store:isSMonthCardExpired(id) return getSMonthCardPeriods(self, id) == 0 end function Store:buySMonthCardLimit(buylimit) local smonthCards = self:getProperty("smonthCards") or {} for k, v in pairs(buylimit) do if k == 1 then if v == 101 then if self:isMonthCardExpire() then skynet.error("月卡过期") return false end else if smonthCards[v] == nil then skynet.error("没有购买增刊里的条件, %d", v) return false end end elseif k == 2 then if smonthCards[v] == nil and v ~= 101 then skynet.error("没有购买增刊条件里的特刊, %d", v) return false end if self:isSMonthCardExpired(v) == false and v ~= 101 then skynet.error("上期特刊奖励没领完") --策划yc+hbw 没领完上期特刊,新一期特刊不展示,不允许购买 return false end end end return true end function Store:buySMonthCard(id) local smonthCards = self:getProperty("smonthCards") or {} local BuyMonthCard = {} BuyMonthCard["renewal"]= function() --续刊 local card = csvdb["shop_cardCsv"][id] or {} if card["buyLimit"] and card["buyLimit"] ~= "" then if self:buySMonthCardLimit(card["buyLimit"]:toNumMap()) == false then skynet.error("不满足购买条件") return false end end local smonthCard = smonthCards[id] or {} if next(smonthCard) then smonthCard["buyCount"] = (smonthCard["buyCount"] or 0) + 1 local periods = (smonthCard["periods"] or 0) + (card["amount"] or 30) smonthCard["periods"] = periods self:updateProperty({field = "smonthCards", value = smonthCards}) return true end end BuyMonthCard["order"] = function() --增刊 local card = csvdb["shop_cardCsv"][id] or {} if card["buyLimit"] and card["buyLimit"] ~= "" then if self:buySMonthCardLimit(card["buyLimit"]:toNumMap()) == false then skynet.error("不满足增刊条件") return false end end smonthCards[id] = {["periods"] = (card["amount"] or 30), ["buyCount"] = 1} self:updateProperty({field= "smonthCards", value = smonthCards}) return true end if self:isSMonthCardExpired(id) then local smonthCard = smonthCards[id] or {} if next(smonthCard) then return BuyMonthCard["renewal"]() else return BuyMonthCard["order"]() end else return BuyMonthCard["renewal"]() end end -- 购买通行证 function Store:onBuyCard(type, duration, id, actid) local timeNow = skynet.timex() if type == CardType.NormalMonthCard then if self:isMonthCardExpire() then self:updateProperty({field = "monthCardId", value = id}) end self:updateProperty({field = "monthCardEx", value = self:getProperty("monthCardEx") + 30}) local reward = {} local tmpreward, _ = self:firstBuyMonthCard(id) --初回特典 仅首次购买月卡 if tmpreward then table.rewardMerge(reward, tmpreward) end tmpreward = getCardItemFirstReward(self, id) --订阅奖励 if next(tmpreward) then table.rewardMerge(reward, tmpreward) end return reward elseif type == CardType.SuperMonthCard then if self:buySMonthCard(id) then local reward = getCardItemFirstReward(self, id) or {} local tmpreward, _ = self:firstBuySMonthCard(id) if tmpreward then table.rewardMerge(reward, tmpreward) end return reward end skynet.error("特刊购买失败:"..id) return nil elseif type == CardType.NormalMonthCardLevelUp then if self:isMonthCardExpire() then skynet.error(string.format("month card expired, can not level up,%d,%d",self.owner:getProperty("id"), id)) else local cfg = csvdb["shop_cardCsv"][id] if not cfg then return end local dif = cfg.level - self:getCurMonthCardLvl(false) if dif > 1 and dif < 0 then return end self:updateProperty({field = "monthCardId", value = id}) self:updateProperty({field = "monthCardEx", value = self:getProperty("monthCardEx") + duration}) end self:sendMonthCardEmail() elseif type == CardType.SuperMonthCardLevelUp then if self:isSuperMonthCardExpire() then skynet.error(string.format("super month card expired, can not level up,%d,%d",self.owner:getProperty("id"), id)) else local cfg = csvdb["shop_cardCsv"][id] if not cfg then return end local dif = cfg.level - self:getCurMonthCardLvl(true) if dif > 1 and dif < 0 then return end self:updateProperty({field = "smonthCardId", value = id}) self:updateProperty({field = "smonthCardEx", value = self:getProperty("smonthCardEx") + duration}) end self:sendMonthCardEmail() elseif type == CardType.PrivilegeCard then if self:isPrivCardExpire() then self:updateProperty({field = "privCardEx", value = timeNow + duration}) else self:updateProperty({field = "privCardEx", value = self:getProperty("privCardEx") + duration}) end elseif type == CardType.GrowFund then self:updateProperty({field = "growFund", value = 1}) elseif type == CardType.BattleCard then self:updateProperty({field = "battleCard", value = 1}) elseif type == CardType.PaySignCard then self:onBuyPaySignCard(duration) elseif type == CardType.BattlePassCard then local index = id - 400 -- 401:初级 402:中级 403:高级 404:终极 local bpInfo = self:getProperty("bpInfo") or {} local info = bpInfo[index] or {} info["flag"] = 1 bpInfo[index] = info self:updateProperty({field = "bpInfo", value = bpInfo}) elseif type == CardType.ActBattleCommandCard then if not self.owner.activity:isOpenById(actid, "ActShopGoods") then return nil end local actCfg = csvdb["activity_ctrlCsv"][actid] if not actCfg then return end local actData = self.owner.activity:getActData("BattleCommand") or {} actData["unlock"] = 1 if actCfg.condition ~= 0 then actData["lvl"] = (actData["lvl"] or 0) + actCfg.condition self.owner:mylog("act_action", {desc="buyBcLvl", int1=actCfg.condition, int2=actData["lvl"]}) end self.owner:mylog("act_action", {desc="buyBc", int1=id, int2=actData["lvl"] or 0}) self.owner.activity:updateActData("BattleCommand", actData) local rechargeData = csvdb["shop_rechargeCsv"][id] if rechargeData then return self.owner:award(rechargeData.itemFirst, {isRecharge = true, log = {desc = "recharge", int1 = id}}) end end return nil, nil end --检测购买是否超过限制数量 function Store:checkRechargeRecord(limit, id) local rechargeRecord = self:getProperty("payR") or {} if limit ~= 0 and limit <= (rechargeRecord[id] or 0) then skynet.error(string.format("[recharge] recharge id:%d count over limit, user id:%d", id, self.owner:getProperty("id"))) return false end rechargeRecord[id] = (rechargeRecord[id] or 0) + 1 self:updateProperty({field = "payR", value = rechargeRecord}) return true end function Store:notifyUpdateProperty(field, newValue, oldValue) local datas = { key = field, newValue = newValue, oldValue = oldValue, } SendPacket(actionCodes.Store_updateproperty, MsgPack.pack(datas)) end -- 赛季卡重置 需要把未能领取的奖励通过邮件发送 function Store:onBattleCardReset() local gift = {} local function concatGift(data) for key, v in pairs(data:toNumMap()) do gift[key] = (gift[key] or 0) + v end end local battleCardFlag = self:getProperty("battleCard") local battleCardFreeRecord = self:getProperty("battleFR") local battleCardLimitRecord = self:getProperty("battleLR") local battlePoint = self.owner:getProperty("battlePoint") for id, config in pairs(csvdb["reward_battlepassCsv"]) do if config then local freeFlag = string.char(string.getbit(battleCardFreeRecord, id)) local limitFlag = string.char(string.getbit(battleCardLimitRecord, id)) if battlePoint < config.point then break end if freeFlag == "0" then concatGift(config.giftFree) end if limitFlag == "0" and battleCardFlag == 1 then concatGift(config.giftLimit) end end end self.owner:sendMail(MailId.BattleCardAward, nil, gift) -- 计算剩余奖励 self:updateProperty({field = "battleCard", value=0}) self:updateProperty({field = "battleFR", value=""}) self:updateProperty({field = "battleLR", value=""}) self.owner:updateProperty({field = "battlePoint", value=0}) end -- 重置购买记录 function Store:resetStoreReored(resetId) local payRecord = self:getProperty("payR") or {} local buyRecord = self:getProperty("buyR") or {} for k, v in pairs(payRecord) do local config = csvdb["shop_rechargeCsv"][k] if config then if config.resetTime == resetId then payRecord[k] = nil --通行证商店 if config.shop == 2 then if config.type == CardType.BattleCard then self:onBattleCardReset() end end end else payRecord[k] = nil end end self:updateProperty({field = "payR", value = payRecord}) for k, v in pairs(buyRecord) do local config = csvdb["shop_normalCsv"][k] if config then if config.resetTime == resetId then buyRecord[k] = nil end else buyRecord[k] = nil end end self:updateProperty({field = "buyR", value = buyRecord}) end --触发限时礼包 function Store:OnTriggerLimitTimePack(eventType, param) local limitPack = self:getProperty("limitTPack") --local payRecord = self:getProperty("payR") local timeNow = skynet.timex() local config = nil for id, cfg in pairs(csvdb["shop_packCsv"]) do if cfg.type == eventType and (cfg.condition == param or cfg.isLoop ~= 0) then config = cfg break end end if not config then return end -- 每日循环弹窗 local typeMap = {[TriggerEventType.DrawHero] = 1, [TriggerEventType.FoodSell] = 1, [TriggerEventType.RuneUp] = 1, [TriggerEventType.CostDiamond] = 1, [TriggerEventType.HeroTalent] = 1} if typeMap[eventType] then local dayInfo = self:getProperty("dayLimitInfo") local info = dayInfo[eventType] or {} local count = (info["count"] or 0) + param local triggerCount = info["trigger"] or 0 local flag = nil if count >= config.condition then if triggerCount < config.triggerLimit then info["trigger"] = triggerCount + 1 info["count"] = 0 flag = true else info["count"] = config.condition - 1 end else info["count"] = count end dayInfo[eventType] = info self:updateProperty({field = "dayLimitInfo", value = dayInfo}) if not flag then return end end local rechargeCfg = csvdb["shop_rechargeCsv"][config.packId] if rechargeCfg then limitPack[rechargeCfg.id] = {timeNow + rechargeCfg.time, config.id} self.owner:log("push_gift", { gift_id = rechargeCfg.id, --礼包ID gift_name = rechargeCfg.descId, --礼包名称 }) if config.isLoop ~= 0 then local payR = self:getProperty("payR") if payR[rechargeCfg.id] then payR[rechargeCfg.id] = nil self:updateProperty({field = "payR", value = payR}) end end -- 每日抽卡限时礼包 触发重置 --if eventType == TriggerEventType.DrawHeroCnt then -- local payR = self:getProperty("buyR") -- if payR[rechargeCfg.id] then -- payR[rechargeCfg.id] = nil -- self:updateProperty({field = "buyR", value = payR}) -- end --end self:updateProperty({field = "limitTPack", value = limitPack}) end --if next(result) then -- self:updateProperty({field = "packTrigger", value = triggerRecord}) --end end function GetActGoodsIndex(goodsType) return ActGoodsType[goodsType] or 0 end function Store:SetActGoodsFlag(goodsType, flag) local actGoodsFlag = self:getProperty("actGoodsFlag") or {} local goodsIndex = GetActGoodsIndex(goodsType) if goodsIndex == 0 then print("get act goods index fail :paySignIn") return end actGoodsFlag[goodsIndex] = flag self:updateProperty({field = "actGoodsFlag", value = actGoodsFlag}) end -- 购买付费签到 按开服时间算奖励 function Store:onBuyPaySignCard(dur) local curTs = skynet.timex() curTs = getServerOpenTs() self:SetActGoodsFlag("paySignIn", curTs) local actData = self.owner.activity:getActData("PaySignIn") actData[0] = 1 self.owner.activity:updateActData("PaySignIn", actData) --local actGoodsFlag = self:getProperty("actGoodsFlag") or {} --local goodsIndex = GetActGoodsIndex("paySignIn") --if goodsIndex == 0 then -- print("get act goods index fail :paySignIn") -- return --end --actGoodsFlag[goodsIndex] = 1 --self:updateProperty({field = "actGoodsFlag", value = actGoodsFlag}) -- 发钱 --local change --local reward, curData = self.owner.activity:getPaySignReward() --if next(reward) then -- self.owner.activity:updateActData("PaySignIn", curData) -- reward, change = self.owner:award(reward, {log = {desc = "actPaySign"}}) --end --self.owner:log("activity", { -- activity_id = 0, -- 活动ID(或活动指定任务的ID) -- activity_type = self.owner.activity.ActivityType.PaySignIn, -- 活动类型,见活动类型枚举表 -- activity_reward = reward, -- 活动奖励,json格式记录,{'itemid1':123,'itemid2':456,………...} --}) --SendPacket(actionCodes.Activity_actPaySignRewardNtf, MsgPack.pack(self.owner:packReward(reward, change))) end function Store:checkPaySignReward() local reward, curData = self.owner.activity:getPaySignReward() if next(reward) then self.owner.activity:updateActData("PaySignIn", curData) self.owner:sendMail(MailId.PaySignAward, nil, reward) end end -- 临时用 登录触发限时礼包 时间点以后 function Store:OnTriggerLimitTimePackAfterTs(eventType, param) local limitPack = self:getProperty("limitTPack") local timeNow = skynet.timex() local config = nil for id, cfg in pairs(csvdb["shop_packCsv"]) do local ts = toUnixtime(""..cfg.condition) if cfg.type == eventType and ts < param then config = cfg if config ~= nil then local rechargeCfg = csvdb["shop_rechargeCsv"][config.packId] if rechargeCfg then if not limitPack[rechargeCfg.id] then limitPack[rechargeCfg.id] = {timeNow + rechargeCfg.time, config.id} self.owner:log("push_gift", { gift_id = rechargeCfg.id, --礼包ID gift_name = rechargeCfg.title, --礼包名称 }) self:updateProperty({field = "limitTPack", value = limitPack, notNotify = false}) end end end end end end local function checkShopFinish(shop, shopPool) local tmpShop = shopPool[shop.id] or {} if next(tmpShop) then if tmpShop.expire_ts then if skynet.timex() > tmpShop.expire_ts then shopPool[shop.id] = nil return true else return false end else tmpShop.expire_ts = skynet.timex() + tmpShop.cool_time * DAY_SEC return false end else return true end end --随机日/周商店随机两个商品 -- 1. 让缓存里的商品进入冷却时间 -- 2. 删除缓存里的已经冷却好的商品 -- 3. 随机两件商品放入缓存中 function Store:flushDailyShop() local dailyShop = self:getProperty("dailyShop") or {} local tmpDailyShop = {} for id, data in pairs(csvdb["shop_normalCsv"]) do if data.shop == 1 and data.shopType == 3 then if data.resetTime == 1 and checkShopFinish(data, dailyShop) then tmpDailyShop[id] = {["id"] = data.id, ["weight"] = 100, ["cool_time"] = data.cool_time} end end end --随机两件商品放入缓存 跨天刷新 if next(tmpDailyShop) then local id = math.randWeight(tmpDailyShop) if id then dailyShop[id] = tmpDailyShop[id] tmpDailyShop[id] = nil end id = math.randWeight(tmpDailyShop) if id then dailyShop[id] = tmpDailyShop[id] tmpDailyShop[id] = nil end end self:updateProperty({field="dailyShop", value= dailyShop}) end function Store:flushWeekShop() local weekShop = self:getProperty("weekShop") or {} local tmpWeekShop = {} for id, data in pairs(csvdb["shop_normalCsv"]) do if data.shop == 1 and data.shopType == 3 then if data.resetTime == 2 and checkShopFinish(data, weekShop)then tmpWeekShop[id] = {["id"] = data.id, ["weight"] = 100, ["cool_time"] = data.cool_time} end end end --随机两件商品放入缓存 跨周刷新 if next(tmpWeekShop) then local id = math.randWeight(tmpWeekShop) if id then weekShop[id] = weekShop[id] tmpWeekShop[id] = nil end id = math.randWeight(tmpWeekShop) if id then weekShop[id] = weekShop[id] tmpWeekShop[id] = nil end end self:updateProperty({field="weekShop", value= weekShop}) end function Store:data() self:OnTriggerLimitTimePackAfterTs(TriggerEventType.AfterTs, skynet.timex()) return { buyR = self:getProperty("buyR"), payR = self:getProperty("payR"), growFund = self:getProperty("growFund"), growFundR = self:getProperty("growFundR"), monthCardEx = self:getProperty("monthCardEx"), battleCard = self:getProperty("battleCard"), battleFR = self:getProperty("battleFR"), battleLR = self:getProperty("battleLR"), limitTPack = self:getProperty("limitTPack"), privCardEx = self:getProperty("privCardEx"), --packTrigger = self:getProperty("packTrigger"), actGoodsFlag = self:getProperty("actGoodsFlag"), bpInfo = self:getProperty("bpInfo"), totalRR = self:getProperty("totalRR"), monthCardId = self:getProperty("monthCardId"), firstMonthCard = self:getProperty("firstMonthCard"), firstsMonthCard = self:getProperty("firstsMonthCard"), monthCardReceive = self:getProperty("monthCardReceive"), smonthCards = self:getProperty("smonthCards"), smonthCardReceive = self:getProperty("smonthCardReceive"), dailyShop = self:getProperty("dailyShop"), weekShop = self:getProperty("weekShop"), } end return Store