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

192 lines
9.8 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 GuGuShop = oo.class(shop)
GuGuShop.shopType = dataType.ShopType_GuGu
GuGuShop.SellType_Furniture = 1 --售卖家具
GuGuShop.SellType_Clothes = 2 --售卖衣服
GuGuShop.SellType_Toy = 3 --售卖玩乐
--初始化数据
function GuGuShop:InitData( player , shopType )
if not player.gameData.shop[ shopType ] then
player.gameData.shop[ shopType ] = {}
player.gameData.shop[ shopType ].type = shopType
player.gameData.shop[ shopType ].furniture = {} --家具前3家具后3摆件
player.gameData.shop[ shopType ].upfitter = {} --装修队
player.gameData.shop[ shopType ].nextRefreshTime = 0
end
local curShop = player.gameData.shop[ shopType ]
if skynet.GetTime() >= curShop.nextRefreshTime then
curShop.nextRefreshTime = skynet.GetTime() + skynet.server.gameConfig:GetPlayerAllCfg( player , "SValue").marketRefreshTime * 60
local level = player.gameData.level
local oldGeneralGoods = {}
player.gameData.shop[ self.shopType ].furniture = {}
local randGoodsList = self:GetRandFurniture( player , oldGeneralGoods , level , 3 , self.BuyShopType_GuGuMarket )
self:SetFurnitureData( player , self.SellType_Furniture , dataType.GoodsType_Furniture , randGoodsList )
randGoodsList = self:GetRandCinnabar( player , oldGeneralGoods , level , 3 , self.BuyShopType_GuGuMarket )
self:SetFurnitureData( player , self.SellType_Furniture , dataType.GoodsType_Furniture , randGoodsList )
local dayNum = skynet.server.common:GetDayInWeek()
--if 1 == dayNum then --周一关闭
--player.gameData.shop[ shopType ].upfitter = {}
if 6 == dayNum or 7 == dayNum then --周6和周7开启
local wallPaper = {}
local floor = {}
player.gameData.shop[ shopType ].upfitter = {}
randGoodsList = self:GetRandDecoration( player , wallPaper , level , 1 , self.BuyShopType_GuGuMarket , dataType.DecorateType_WallPaper )
self:SetDecorateData( player , randGoodsList )
randGoodsList = self:GetRandDecoration( player , floor , level , 1 , self.BuyShopType_GuGuMarket , dataType.DecorateType_Floor )
self:SetDecorateData( player , randGoodsList )
else
player.gameData.shop[ shopType ].upfitter = {}
end
end
end
--咕咕市集数据展示
function GuGuShop:Show( player , c2sData , s2cData )
c2sData.data = assert(pb.decode("C2SGuGuShopShow", c2sData.data ))
local data = {}
self:InitData( player , self.shopType )
local sellType = c2sData.data.sellType
if not sellType then
s2cData.code = errorInfo.ErrorCode.ErrRequestParam
else
--获取下商品今日购买数量
for k, v in pairs( player.gameData.shop[ self.shopType ].furniture ) do
v.todayBuyCount = skynet.server.bag:GetTodayBuyGoodsCount( player , dataType.GoodsType_Furniture , v.id )
end
data.sellType = sellType
data.furniture = player.gameData.shop[ self.shopType ].furniture
data.upfitter = player.gameData.shop[ self.shopType ].upfitter
data.nextRefreshTime = player.gameData.shop[ self.shopType ].nextRefreshTime
end
s2cData.cmd = pb.enum("MsgType","CMD_S2C_GuGuShopShow")
s2cData.data = assert(pb.encode("S2CGuGuShopShow", data))
end
--咕咕市集购买
function GuGuShop:Buy( player , c2sData , s2cData )
c2sData.data = assert(pb.decode("C2SGuGuShopBuy", c2sData.data ))
local data = {}
self:InitData( player , self.shopType )
local goodsType = c2sData.data.goodsType
local buyGoods = c2sData.data.buyGoods
if goodsType < dataType.GoodsType_Furniture or goodsType >= dataType.GoodsType_End or buyGoods.buyCount <= 0 then
s2cData.code = errorInfo.ErrorCode.ErrRequestParam
else
local cfgSValue = skynet.server.gameConfig:GetPlayerAllCfg( player , "SValue")
buyGoods.buyCount = math.abs(buyGoods.buyCount)
local curShop = player.gameData.shop[ self.shopType ]
if dataType.GoodsType_Furniture == goodsType then --家具
for k, v in pairs( curShop.furniture ) do
if v.id == buyGoods.id then
local todayBuyCount = skynet.server.bag:GetTodayBuyGoodsCount( player , dataType.GoodsType_Furniture , v.id )
if todayBuyCount + buyGoods.buyCount > cfgSValue.mapMarketDailyLimit then
s2cData.code = errorInfo.ErrorCode.TodayMaxLimit --今日购买数量已经超了
else
local moneyType , moneyCount = skynet.server.gameConfig:GetBuyMoney( player , "Furniture" , v.id )
local costMapCoin = moneyCount * buyGoods.buyCount
local eventId = pb.enum("EnumMoneyChangeEventID","EventID_54" )
if not player:MoneyChange( moneyType , -costMapCoin , eventId) then
s2cData.code = errorInfo.ErrorCode.NoEnoughMoney
else
skynet.server.bag:AddGoods( player , dataType.GoodsType_Furniture , v.id , buyGoods.buyCount )
skynet.server.bag:AddTodayBuyGoodsCount( player , dataType.GoodsType_Furniture , v.id , buyGoods.buyCount )
v.todayBuyCount = todayBuyCount + buyGoods.buyCount
v.buyCount = 1
skynet.server.npcTask:Modify( player , 20 , 1 )
skynet.server.levelTask:Modify( player , 20 , 1 )
-- skynet.server.taskListEvent:Modify( player , 15 , 1 )
-- skynet.server.taskListEvent:Modify( player , 16 , costMapCoin )
skynet.server.taskListEvent:Modify( player , 20 , 1 )
skynet.server.taskListEvent:Modify( player , 126 , costMapCoin ) --在咕咕市集使用三叶币(地图市集)
log.debug(string.format("玩家 %d 咕咕市集 购买家具 商品ID %d" , player.userId , v.id ))
end
end
break
end
end
elseif dataType.GoodsType_Decorate == goodsType then --装修
if player:IsBuyGoods( goodsType , buyGoods.id ) then
s2cData.code = errorInfo.ErrorCode.ExistGoodsInBag
else
for k, v in pairs( curShop.upfitter ) do
if v.id == buyGoods.id then
local moneyType , moneyCount = skynet.server.gameConfig:GetBuyMoney( player , "Decoration" , v.id )
local costMapCoin = moneyCount * buyGoods.buyCount
local eventId = pb.enum("EnumMoneyChangeEventID","EventID_54" )
if not player:MoneyChange( moneyType , -costMapCoin , eventId) then
s2cData.code = errorInfo.ErrorCode.NoEnoughMoney
else
skynet.server.bag:AddGoods( player , dataType.GoodsType_Decorate , v.id , buyGoods.buyCount )
v.buyCount = 1
skynet.server.npcTask:Modify( player , 20 , 1 )
skynet.server.levelTask:Modify( player , 20 , 1 )
skynet.server.taskListEvent:Modify( player , 15 , 1 )
skynet.server.taskListEvent:Modify( player , 16 , costMapCoin )
skynet.server.taskListEvent:Modify( player , 20 , 1 )
skynet.server.taskListEvent:Modify( player , 126 , costMapCoin ) --在咕咕市集使用三叶币(地图市集)
log.debug(string.format("玩家 %d 咕咕市集 购买装修 商品ID %d" , player.userId , v.id ))
end
break
end
end
end
end
data.goodsType = goodsType
data.buyGoods = buyGoods
--data.furniture = player.gameData.shop[ self.shopType ].furniture
--data.upfitter = player.gameData.shop[ self.shopType ].upfitter
end
s2cData.cmd = pb.enum("MsgType","CMD_S2C_GuGuShopBuy")
s2cData.data = assert(pb.encode("S2CGuGuShopBuy", data))
end
--设置商店数据
function GuGuShop:SetFurnitureData( player , sellType , goodsType , randGoodsList )
--是否购买
for k, v in pairs( randGoodsList ) do
local buyCount = 0
if player:IsBuyGoods( goodsType , v ) then
buyCount = 1
end
if self.SellType_Furniture == sellType then
table.insert( player.gameData.shop[ self.shopType ].furniture , { id = v , buyCount = buyCount , todayBuyCount = 0 } )
log.debug(string.format("玩家 %d 咕咕市集 设置家具数据 售卖类型 %d 商品ID %d 是否购买 %d" , player.basicInfo.userID , sellType , v , buyCount ))
end
end
end
--设置商店数据
function GuGuShop:SetDecorateData( player , randGoodsList )
for k, v in pairs( randGoodsList ) do
local buyCount = 0
if player:IsBuyGoods( dataType.GoodsType_Decorate , v ) then
buyCount = 1
end
table.insert( player.gameData.shop[ self.shopType ].upfitter , { id = v , buyCount = buyCount } )
log.debug(string.format("玩家 %d 咕咕市集 设置装修队数据 商品ID %d 是否购买 %d" , player.basicInfo.userID , v , buyCount ))
end
end
skynet.server.guGuShop = GuGuShop
return GuGuShop