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

192 lines
9.8 KiB
Lua
Raw 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 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