HomeServer/Server/AllServer/GameServer/Shop/GeneralShop.lua
2024-11-20 15:41:37 +08:00

655 lines
30 KiB
Lua
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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