local skynet = require "skynet" local oo = require "Class" local log = require "Log" local pb = require "pb" local dataType = require "DataType" local errorInfo = require "ErrorInfo" local shop = require "Shop" local GeneralShop = oo.class(shop) GeneralShop.MaxSpecialGoodsCount = 1 -- 特殊最大商品数量 GeneralShop.MaxGeneralGoodsCount = 6 -- 普通最大商品数量 GeneralShop.BuyStatus_Suc = 1 -- 成功 GeneralShop.BuyStatus_NoMoney = 2 -- 余额不足 GeneralShop.BuyStatus_NoExistShop = 3 -- 无法购买该家具 GeneralShop.RefreshStatus_Suc = 1 -- 成功 GeneralShop.RefreshStatus_NoMoney = 2 -- 余额不足 GeneralShop.RefreshStatus_NoExistShop = 3 -- 不存在商店类型 GeneralShop.BuyShopType_Coin = 1 -- 家具金币购买类型 GeneralShop.BuyShopType_AD = 2 -- 广告购买类型 GeneralShop.BuyShopType_Clovers = 3 -- 家具四叶草购买类型 GeneralShop.BuyShopType_Flower = 7 -- 花店购买类型 GeneralShop.DecorateBuyType_Coin = 1 -- 装修金币购买类型 GeneralShop.DecorateBuyType_Clovers = 2 -- 装修四叶草购买类型 function GeneralShop:Init() end -- 显示一种类型 function GeneralShop:Show(player, c2sData, s2cData) c2sData.data = assert(pb.decode("C2SShopShow", c2sData.data)) local shopType = c2sData.data.shopType local curShop = player.gameData.shop[shopType] local data = {} data.shopInfo = {} -- 只有花盆的特殊商品需要根据等级填充花盆数据 if dataType.ShopType_Seed == shopType then local flowerpotList = self:GetUnLockFlowerpot(player, self.FlowerpotType_Seed) for k1, v1 in pairs(flowerpotList) do local isExistFlowerpot = false -- 是否存在花盆 for k2, v2 in pairs(curShop.specialGoods) do if v1 == v2.id then isExistFlowerpot = true break end end if not isExistFlowerpot then -- 玩家可以购买该花盆 table.insert(curShop.specialGoods, { id = v1, buyCount = 0 }) end end end -- 时间超过了,刷新新的一批 if skynet.GetTime() >= curShop.nextRefreshTime then self:RefreshShop(player, shopType) end local phoneId = 0 if dataType.ShopType_Furniture == shopType then phoneId = 5 elseif dataType.ShopType_Cinnabar == shopType then phoneId = 6 elseif dataType.ShopType_Seed == shopType then phoneId = 11 end skynet.server.msgTips:ReduceAll(player, phoneId) -- 获取最新的商店数据 data.shopInfo = self:GetShopData(player, shopType) local cfgAllFlowerpot = skynet.server.gameConfig:GetPlayerAllCfg(player, "Flowerpot") -- local filterFlowerpot = {} -- for k, v in pairs(cfgAllFlowerpot) do -- if v.shopType == 1 then -- table.insert(filterFlowerpot, v) -- end -- end local nextSeedId = 0 -- 下一个解锁花盆需要的种子 local specialGoods = player.gameData.shop[shopType].specialGoods -- for k, v in pairs(filterFlowerpot) do -- if not skynet.server.common:IsExistForID(v.id, specialGoods) then -- nextSeedId = v.seedId -- break -- end -- end for k, v in pairs(cfgAllFlowerpot) do if v.unlockPotBefore >= 1 then if not skynet.server.common:IsExistForID(v.id, specialGoods) then nextSeedId = v.seedId break end end end -- for k, v in pairs(cfgAllFlowerpot) do -- if v.unlockPotBefore >= 1 then -- if not skynet.server.common:IsExistForID(v.id, specialGoods) then -- nextSeedId = v.seedId -- break -- end -- end -- end if 0 == nextSeedId then data.plantCount = 0 else data.plantCount = skynet.server.flowerpot:GetPlantCountForSeed(player, nextSeedId) end -- log.info('花店展示',skynet.server.common:TableToString(data)) s2cData.cmd = pb.enum("MsgType", "CMD_S2C_ShopShow") s2cData.data = assert(pb.encode("S2CShopShow", data)) end -- 刷新商店类型 function GeneralShop:Refresh(player, c2sData, s2cData) c2sData.data = assert(pb.decode("C2SShopRefresh", c2sData.data)) local shopType = c2sData.data.shopType local methodType = c2sData.data.methodType -- 加速类型 local adType = "AppClothesRefresh" if shopType == 1 then adType = "AppHomeFurnitureRefresh" elseif shopType == 2 then adType = "AppHomeOrnamentsRefresh" end local data = {} local cfgSValue = skynet.server.gameConfig:GetPlayerAllCfg(player, "SValue") data.shopInfo = {} local isSuc = false if methodType == dataType.AccelerateType_Volute then -- 消耗玩家蜗壳币 local refreshPrice = self:GetRefreshShopPrice( player , shopType ) local eventId = pb.enum("EnumMoneyChangeEventID","EventID_1") if refreshPrice then if player:MoneyChange(dataType.MoneyType_Volute, -refreshPrice, eventId) then -- 使用蜗壳币进行刷新 修改相关数据 player.gameData.todayGain.updateUseCount = player.gameData.todayGain.updateUseCount + 1 if player.gameData.todayGain.updateUseCount == cfgSValue.triggerUpdatePack[1] then skynet.server.store:TriggerPack(player, skynet.server.store.TriggerPack_Update) end isSuc = true else s2cData.code = errorInfo.ErrorCode.NoEnoughMoney end else s2cData.code = errorInfo.ErrorCode.NoExistShopType end elseif methodType == dataType.AccelerateType_AccTicket and skynet.server.bag:GetGoodsCount(player, dataType.GoodsType_Prop, 4) > 0 then --消耗玩家一个刷新券 skynet.server.bag:RemoveGoods(player , dataType.GoodsType_Prop, 4 , 1) isSuc = true elseif methodType == dataType.AccelerateType_ADTicket and skynet.server.ad:CanWatch(player, adType) and skynet.server.ad:PayADTicket(player, adType) then isSuc = true elseif methodType == dataType.AccelerateType_WatchAD and skynet.server.ad:CanWatch(player, adType) then skynet.server.ad:Update(player, adType) isSuc = true end if isSuc then self:RefreshShop(player, shopType) data.shopInfo = self:GetShopData(player, shopType) skynet.server.achieveTask:Modify(player, 34, 1) skynet.server.taskListEvent:Modify( player ,34, 1) --新手暖屋礼包 if player.gameData.level <= cfgSValue.newplayerFurniturePack[1] and player.gameData.level >= cfgSValue.storeUnlockLvl then if not player.gameData.storePack.triggerPackTimeField[cfgSValue.newplayerFurniturePack[4]] then player.gameData.storePack.triggerPackTimeField[cfgSValue.newplayerFurniturePack[4]] = {} table.insert(player.gameData.storePack.triggerPackTimeField[cfgSValue.newplayerFurniturePack[4]],skynet.GetTime()) else --将超时的记录清除 for i, v in pairs(player.gameData.storePack.triggerPackTimeField[cfgSValue.newplayerFurniturePack[4]]) do if skynet.GetTime() - v > 3600*cfgSValue.newplayerFurniturePack[2] then table.remove(player.gameData.storePack.triggerPackTimeField[cfgSValue.newplayerFurniturePack[4]] , i) else break end end if not player.gameData.storePack.storePackInfo[ cfgSValue.newplayerFurniturePack[4] ] then table.insert(player.gameData.storePack.triggerPackTimeField[cfgSValue.newplayerFurniturePack[4]],skynet.GetTime()) else if player.gameData.storePack.storePackInfo[ cfgSValue.newplayerFurniturePack[4] ].failureTime < skynet.GetTime() and player.gameData.storePack.storePackInfo[ cfgSValue.newplayerFurniturePack[4] ].buyTimes == 0 then table.insert(player.gameData.storePack.triggerPackTimeField[cfgSValue.newplayerFurniturePack[4]],skynet.GetTime()) else --直接跳过剩下的判断逻辑节约性能 goto continueFurniturePack end end end --判断是否满足触发Y次的条件 if #player.gameData.storePack.triggerPackTimeField[cfgSValue.newplayerFurniturePack[4]] >= cfgSValue.newplayerFurniturePack[3] then skynet.server.store:TriggerPack( player , skynet.server.store.TriggerPack_NewPlayerFurniture ) end --判断出口防止做多余判断浪费性能 ::continueFurniturePack:: end end s2cData.cmd = pb.enum("MsgType", "CMD_S2C_ShopRefresh") s2cData.data = assert(pb.encode("S2CShopRefresh", data)) end -- 刷新商店类型 function GeneralShop:RefreshShop(player, shopType) local level = player.gameData.level player.gameData.shop[shopType].isBuySpecialGoods = false local randGoodsList = {} local historyGoods = {} if dataType.ShopType_Furniture == shopType or dataType.ShopType_Cinnabar == shopType then -- 家具和摆件 -- 特别商品 historyGoods = self:GetHistoryGoods(player, shopType, true) local isSuc, randGoodsList = self:GetNoHistoryFurniture(player, shopType, historyGoods, level, 1, self.BuyShopType_Clovers) if not isSuc then -- 没有成功,就清历史记录,再刷新 player.gameData.shop[shopType].historySpecialGoods = {} historyGoods = {} isSuc, randGoodsList = self:GetNoHistoryFurniture(player, shopType, historyGoods, level, 1, self.BuyShopType_Clovers) end self:SetShopData(player, shopType, dataType.GoodsType_Furniture, randGoodsList, true) -- 普通商品随机 historyGoods = self:GetHistoryGoods(player, shopType, false) isSuc, randGoodsList = self:GetNoHistoryFurniture(player, shopType, historyGoods, level, 6, self.BuyShopType_Coin) if not isSuc then -- 没有成功,就清历史记录,再刷新 player.gameData.shop[shopType].historyGeneralGoods = {} historyGoods = {} isSuc, randGoodsList = self:GetNoHistoryFurniture(player, shopType, historyGoods, level, 6, self.BuyShopType_Coin) end self:SetShopData(player, shopType, dataType.GoodsType_Furniture, randGoodsList, false) elseif dataType.ShopType_Seed == shopType then -- 种子相关 local oldGeneralGoods = {} if player.gameData.shop[shopType].isFirstRefresh then -- 第一次刷新2这个种子不参与随机 table.insert(oldGeneralGoods, { id = 2, buyCount = 0 }) end randGoodsList = self:GetRandSeed(player, self.FlowerpotType_Seed, oldGeneralGoods, level, 5) -- 5个普通种子 if player.gameData.shop[shopType].isFirstRefresh then -- 第一次刷新第一个种子给指定的种子 player.gameData.shop[shopType].isFirstRefresh = false randGoodsList[1] = 2 end table.insert(randGoodsList, 11) -- 1个奇异种子 self:SetShopData(player, shopType, dataType.GoodsType_Flowerpot, randGoodsList, false) elseif dataType.ShopType_GardenShop == shopType then -- 青青园艺相关 local cfgGarden = skynet.server.gameConfig:GetPlayerAllCfg(player, "Garden") -- 青青园艺信息 local curShop = player.gameData.shop[shopType] local landscapes = {} local recreation = {} for k, v in pairs(cfgGarden) do if v.shopType == 2 and v.quality == 1 and v.gardenType == 1 then table.insert(landscapes, v.id) elseif v.shopType == 2 and v.quality == 1 and v.gardenType == 2 then table.insert(recreation, v.id) end end -- 随机货架上的6个普通景观 local count = 6 curShop.generalGoods = {} for i = 1, count do local ri = math.random(i, #landscapes) local tmp = landscapes[ri] table.remove(landscapes, ri) table.insert(curShop.generalGoods, { id = tmp, buyCount = skynet.server.bag:GetGoodsCount(player, dataType.GoodsType_Garden, tmp) }) end -- 随机货架上的1个普通娱乐商品 local countTwo = math.random(1, #recreation) curShop.specialGoods = {} curShop.specialGoods[1] = { id = recreation[countTwo], buyCount = skynet.server.bag:GetGoodsCount(player, dataType.GoodsType_Garden, recreation[countTwo]) } end local nextRefreshTime = 0 if level <= 6 then -- 小于6级时,刷新时间只有十分钟 nextRefreshTime = 600 + skynet.GetTime() else local timeCoefficient = skynet.server.store:GetTimeCoefficient(player, 1) -- 月卡权益 时间系数 nextRefreshTime = math.ceil(self:GetRefreshTime(player, shopType) * timeCoefficient) + skynet.GetTime() end player.gameData.shop[shopType].nextRefreshTime = nextRefreshTime log.debug(string.format("玩家 %d 通用商店 刷新时间 %s", player.userId, skynet.server.common:GetStrTime(player.gameData.shop[shopType].nextRefreshTime))) end -- 商店购买 function GeneralShop:Buy(player, c2sData, s2cData) c2sData.data = assert(pb.decode("C2SShopBuy", c2sData.data)) local shopType = c2sData.data.shopType local specialGoods = c2sData.data.specialGoods local generalGoods = c2sData.data.generalGoods local data = {} if not self:IsVaildShopType(shopType) then s2cData.code = errorInfo.ErrorCode.NoExistShopType else local curShop = player.gameData.shop[shopType] local isBuySuc = false -- 特殊商品购买 if specialGoods then for k, v in pairs(curShop.specialGoods) do -- if specialGoods.id == v.id and not player.gameData.shop[ shopType ].isBuySpecialGoods then if specialGoods.id == v.id then -- 存在该商品 local goodsCount = math.abs(specialGoods.count) local moneyType, moneyCount = 0, 0 if dataType.ShopType_Furniture == shopType or dataType.ShopType_Cinnabar == shopType then -- 家具和摆件 moneyType, moneyCount = skynet.server.gameConfig:GetBuyMoney(player, "Furniture", v.id) local costCoin = moneyCount * goodsCount local eventId = pb.enum("EnumMoneyChangeEventID", "EventID_53") if dataType.ShopType_Cinnabar == shopType then eventId = pb.enum("EnumMoneyChangeEventID", "EventID_84") end if moneyType and player:MoneyChange(moneyType, -costCoin, eventId) then skynet.server.bag:AddGoods(player, dataType.GoodsType_Furniture, v.id, goodsCount) -- 任务添加 if dataType.ShopType_Furniture == shopType then skynet.server.levelTask:Modify(player, 1, goodsCount) skynet.server.dailyTask:Modify(player, 1, goodsCount) skynet.server.npcTask:Modify(player, 1, goodsCount) skynet.server.taskListEvent:Modify( player ,1, 1) else skynet.server.levelTask:Modify(player, 2, goodsCount) skynet.server.dailyTask:Modify(player, 2, goodsCount) skynet.server.taskListEvent:Modify( player ,2, 1) end local cfgFurniture = skynet.server.gameConfig:GetPlayerCurCfg(player, "Furniture", v.id) if 16 == cfgFurniture.subType then -- 电器 skynet.server.levelTask:Modify(player, 88, goodsCount) skynet.server.taskListEvent:Modify( player ,88, goodsCount) elseif 17 == cfgFurniture.subType then -- 宠物 skynet.server.levelTask:Modify(player, 87, goodsCount) skynet.server.taskListEvent:Modify( player ,87, goodsCount) end skynet.server.achieveTask:Modify(player, 58, 1) skynet.server.taskListEvent:Modify( player ,58, 1) player.gameData.shop[shopType].specialGoods[k].buyCount = 1 -- 任务添加 if moneyType ==pb.enum("EnumGoodsType","Coin") then --在逸家家居使用金币 skynet.server.taskListEvent:Modify( player ,122, math.abs(costCoin)) end isBuySuc = true curShop.isBuySpecialGoods = true end elseif dataType.ShopType_Seed == shopType then -- 花盆 goodsCount = 1 moneyType, moneyCount = skynet.server.gameConfig:GetBuyMoney(player, "Flowerpot", v.id) -- self:GetFlowerpotPrice( v.id ) local costCoin = moneyCount * goodsCount local eventId = pb.enum("EnumMoneyChangeEventID", "EventID_86") if moneyType and player:MoneyChange(moneyType, -costCoin, eventId) then curShop.consumeCoin = curShop.consumeCoin + (moneyCount * goodsCount) skynet.server.bag:AddGoods(player, dataType.GoodsType_Flowerpot, v.id, goodsCount) curShop.specialGoods[k].buyCount = 1 curShop.isBuySpecialGoods = false isBuySuc = true if player:IsOldIOS() then local oldData = player.gameData.oldData if oldData and oldData.flowerpots then local nextFlowerpotId = v.id + 1 --下一个花盆ID --花盆老数据进入升序 table.sort( oldData.flowerpots ,function (a,b) return a.id < b.id end) for k1, v1 in pairs( oldData.flowerpots ) do if nextFlowerpotId == v1.id then --如果下一个花盆曾经拥有就直接赠送 skynet.server.bag:AddGoodsNoExp( player , dataType.GoodsType_Flowerpot , nextFlowerpotId , 1 , true ) table.insert( curShop.specialGoods , { id = nextFlowerpotId , buyCount = 1} ) --赠送的花盆该种子直接给默认种植次数 local cfgFlowerpot = skynet.server.gameConfig:GetPlayerCurCfg( player , "Flowerpot" , nextFlowerpotId ) local ripePlantSeedsCount = player.gameData.ripePlantSeedsCount local isExistRipePlant = false for k2, v2 in pairs( ripePlantSeedsCount ) do if cfgFlowerpot.seedId == v2.id then v2.count = v2.count + cfgFlowerpot.plantValue isExistRipePlant = true end end if not isExistRipePlant then table.insert( ripePlantSeedsCount , { id = cfgFlowerpot.seedId , count = cfgFlowerpot.plantValue } ) end --再看看下一个花盆是否曾经拥有 nextFlowerpotId = nextFlowerpotId + 1 end end end end end end if isBuySuc then data.shopType = shopType data.specialGoods = { id = v.id, buyCount = 1 } log.debug(string.format("玩家 %d 通用商店 购买特殊商品成功 商品 %d 扣除四叶草 %d",player.userId, v.id, moneyCount)) else s2cData.code = errorInfo.ErrorCode.NoEnoughMoney end end end end isBuySuc = false -- 普通商品购买 if generalGoods then for k, v in pairs(curShop.generalGoods) do if generalGoods.id == v.id then -- 存在该商品 local goodsCount = math.abs(generalGoods.count) local moneyType, moneyCount = 0, 0 if dataType.ShopType_Furniture == shopType or dataType.ShopType_Cinnabar == shopType then -- 家具和摆件 moneyType, moneyCount = skynet.server.gameConfig:GetBuyMoney(player, "Furniture", v.id) local costCoin = moneyCount * goodsCount local eventId = 0 local eventId = pb.enum("EnumMoneyChangeEventID", "EventID_53") if dataType.ShopType_Cinnabar == shopType then eventId = pb.enum("EnumMoneyChangeEventID", "EventID_84") end if moneyType and player:MoneyChange(moneyType, -costCoin, eventId) then skynet.server.bag:AddGoods(player, dataType.GoodsType_Furniture, v.id, goodsCount) local cfgFurniture = skynet.server.gameConfig:GetPlayerCurCfg(player, "Furniture", v.id) if 16 == cfgFurniture.subType then -- 电器 skynet.server.levelTask:Modify(player, 88, goodsCount) skynet.server.taskListEvent:Modify( player ,88, goodsCount) elseif 17 == cfgFurniture.subType then -- 宠物 skynet.server.levelTask:Modify(player, 87, goodsCount) skynet.server.taskListEvent:Modify( player ,87, goodsCount) end -- 任务添加 if dataType.ShopType_Furniture == shopType then -- 家具 skynet.server.levelTask:Modify(player, 1, goodsCount) skynet.server.dailyTask:Modify(player, 1, goodsCount) skynet.server.taskListEvent:Modify( player ,1, 1) elseif dataType.ShopType_Cinnabar == shopType then -- 摆件 skynet.server.levelTask:Modify(player, 2, goodsCount) skynet.server.dailyTask:Modify(player, 2, goodsCount) skynet.server.taskListEvent:Modify( player ,2, 1) end skynet.server.achieveTask:Modify(player, 58, 1) skynet.server.taskListEvent:Modify( player ,58, 1) curShop.generalGoods[k].buyCount = 1 -- 任务添加 if moneyType ==pb.enum("EnumGoodsType","Coin") then --在逸家家居使用金币 skynet.server.taskListEvent:Modify( player ,122, math.abs(costCoin)) end isBuySuc = true end elseif dataType.ShopType_Seed == shopType then -- 种子 moneyType, moneyCount = skynet.server.gameConfig:GetBuyMoney(player, "Seed", v.id) -- self:GetSeedPrice( v.id ) local costCoin = moneyCount * goodsCount local eventId = pb.enum("EnumMoneyChangeEventID", "EventID_85") if moneyType and player:MoneyChange(moneyType, -costCoin, eventId) then curShop.consumeCoin =curShop.consumeCoin + costCoin skynet.server.bag:AddGoods(player, dataType.GoodsType_Seed, v.id, goodsCount) curShop.generalGoods[k].buyCount =skynet.server.bag:GetGoodsCount(player, dataType.GoodsType_Seed, v.id) isBuySuc = true -- skynet.server.map:CheckUnlockFlowerShop( player , player.gameData.shop[ shopType ].consumeCoin ) skynet.server.levelTask:Modify(player, 45, 1) skynet.server.taskListEvent:Modify( player ,45, 1) skynet.server.taskListEvent:Modify( player ,7, 1) -- 解锁言叶 skynet.server.friend:InitNpc(player, 3) end --通行证任务 --在植物小铺购买种子累积超过%份 skynet.server.taskListEvent:Modify( player , 120 , goodsCount ) end if isBuySuc then data.shopType = shopType data.generalGoods = { id = v.id, buyCount = goodsCount } log.debug(string.format( "玩家 %d 通用商店 购买普通商品成功 商品ID %d 扣除金币 %d", player.userId, v.id, moneyCount)) else s2cData.code = errorInfo.ErrorCode.NoEnoughMoney end end end end end s2cData.cmd = pb.enum("MsgType", "CMD_S2C_ShopBuy") s2cData.data = assert(pb.encode("S2CShopBuy", data)) end -- 设置商店数据 function GeneralShop:SetShopData(player, shopType, goodsType, randGoodsList, isSpecial) -- 是否为特殊商品 if isSpecial then player.gameData.shop[shopType].specialGoods = {} else player.gameData.shop[shopType].generalGoods = {} end -- 是否购买 for k, v in pairs(randGoodsList) do local buyCount = 0 if player:IsBuyGoods(goodsType, v) then buyCount = 1 end if dataType.ShopType_Furniture == shopType or dataType.ShopType_Cinnabar == shopType then -- 家具和摆件 self:AddHistoryGoods(player, shopType, v, isSpecial) end if isSpecial then table.insert(player.gameData.shop[shopType].specialGoods, { id = v, buyCount = buyCount }) log.debug(string.format( "玩家 %d 通用商店 设置特殊商店数据 商店类型 %d 商品ID %d 是否购买 %d", player.basicInfo.userID, shopType, v, buyCount)) else table.insert(player.gameData.shop[shopType].generalGoods, { id = v, buyCount = buyCount }) log.debug(string.format( "玩家 %d 通用商店 设置普通商店数据 商店类型 %d 商品ID %d 是否购买 %d", player.basicInfo.userID, shopType, v, buyCount)) end end end -- 获取商店数据 function GeneralShop:GetShopData(player, shopType) local shopInfo = {} shopInfo.shopType = shopType shopInfo.specialGoods = player.gameData.shop[shopType].specialGoods -- 种子计算下最新的数量 if dataType.ShopType_Seed == shopType then for k, v in pairs(player.gameData.shop[shopType].generalGoods) do v.buyCount = skynet.server.bag:GetGoodsCount(player, dataType.GoodsType_Seed, v.id) end end -- 青青园艺计算下最新的数量 if dataType.ShopType_GardenShop == shopType then for k, v in pairs(player.gameData.shop[shopType].generalGoods) do v.buyCount = skynet.server.bag:GetGoodsCount(player, dataType.GoodsType_Garden, v.id) end player.gameData.shop[shopType].specialGoods[1].buyCount = skynet.server.bag:GetGoodsCount(player, dataType.GoodsType_Garden, player.gameData.shop[shopType].specialGoods[1].id) end -- shopInfo.generalGoods = player.gameData.shop[ shopType ].generalGoods shopInfo.generalGoods = player.gameData.shop[shopType].generalGoods shopInfo.nextRefreshTime = player.gameData.shop[shopType].nextRefreshTime return shopInfo end -- 增加历史商品 function GeneralShop:AddHistoryGoods(player, shopType, goodsId, isSpecial) local historyGoods = nil if isSpecial then historyGoods = player.gameData.shop[shopType].historySpecialGoods else historyGoods = player.gameData.shop[shopType].historyGeneralGoods end local isExistGoods = false for k, v in pairs(historyGoods) do if goodsId == v.id then isExistGoods = true break end end if not isExistGoods then table.insert(historyGoods, { id = goodsId }) end end -- 刷新历史商品(废弃) function GeneralShop:RefreshHistoryGoods(player, shopType) local goods = player.gameData.shop[shopType].historyGoods for k, v in pairs(goods) do -- 每个商品都加1 v.count = v.count + 1 -- 大于3次就置空 if v.count > 3 then goods[k] = nil end end end -- 获取历史商品 function GeneralShop:GetHistoryGoods(player, shopType, isSpecial) if isSpecial then return player.gameData.shop[shopType].historySpecialGoods else return player.gameData.shop[shopType].historyGeneralGoods end end skynet.server.generalShop = GeneralShop return GeneralShop