HomeServer/Server/AllServer/GameServer/Shop/GeneralShop.lua

655 lines
30 KiB
Lua
Raw Permalink Normal View History

2024-11-20 15:41:09 +08:00
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