HomeServer/lualib-src/Server-main/AllServer/GameServer/Shop/GuGuShop.lua

188 lines
9.0 KiB
Lua
Raw 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
--[[测试
player.gameData.shop[ self.shopType ].upfitter = {}
local wallPaper = {}
local floor = {}
local randGoodsList = {}
randGoodsList = self:GetRandDecoration( player , wallPaper , player.gameData.level , 1 , self.FurnitureBuyType_GuGuMarket , dataType.DecorateType_WallPaper )
self:SetDecorateData( player , randGoodsList )
randGoodsList = self:GetRandDecoration( player , floor , player.gameData.level , 1 , self.FurnitureBuyType_GuGuMarket , dataType.DecorateType_Floor )
self:SetDecorateData( player , randGoodsList )
--]]
local curShop = player.gameData.shop[ shopType ]
if not skynet.server.common:IsSameDay( curShop.nextRefreshTime , skynet.GetTime()) then
curShop.nextRefreshTime = skynet.GetTime()
local level = player.gameData.level
local oldGeneralGoods = {}
player.gameData.shop[ self.shopType ].furniture = {}
local randGoodsList = self:GetRandFurniture( oldGeneralGoods , level , 3 , self.FurnitureBuyType_GuGuMarket )
self:SetFurnitureData( player , self.SellType_Furniture , dataType.GoodsType_Furniture , randGoodsList )
randGoodsList = self:GetRandCinnabar( oldGeneralGoods , level , 3 , self.FurnitureBuyType_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 = {}
elseif 6 == dayNum then --周6开启
local wallPaper = {}
local floor = {}
player.gameData.shop[ self.shopType ].upfitter = {}
randGoodsList = self:GetRandDecoration( player , wallPaper , level , 1 , self.FurnitureBuyType_GuGuMarket , dataType.DecorateType_WallPaper )
self:SetDecorateData( player , randGoodsList )
randGoodsList = self:GetRandDecoration( player , floor , level , 1 , self.FurnitureBuyType_GuGuMarket , dataType.DecorateType_Floor )
self:SetDecorateData( player , randGoodsList )
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
data.sellType = sellType
data.furniture = player.gameData.shop[ self.shopType ].furniture
data.upfitter = player.gameData.shop[ self.shopType ].upfitter
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 not goodsType or not buyGoods then
s2cData.code = errorInfo.ErrorCode.ErrRequestParam
else
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 moneyType , moneyCount = skynet.server.gameConfig:GetBuyMoney("Furniture" , v.id )
local costMapCoin = moneyCount * buyGoods.buyCount
if not player:MoneyChange( moneyType , -costMapCoin) then
s2cData.code = errorInfo.ErrorCode.NoEnoughMoney
else
skynet.server.bag:AddGoods( player , dataType.GoodsType_Furniture , v.id , buyGoods.buyCount )
--增加经验
local exp = skynet.server.bag:CalcExp( dataType.GoodsType_Furniture , v.id, buyGoods.buyCount )
player:AddExp( exp )
v.buyCount = 1
--除了摆件才能完成任务
local cfgGoods = skynet.server.gameConfig:GetCurFurnitureCfg( v.id )
if skynet.server.shop.FurnitureType_Cinnabar ~= cfgGoods.type then
skynet.server.levelTask:Modify( player , dataType.GeneralTaskType_GuguMarkeyBuyFurniture , 1 )
end
skynet.server.passCheck:Modify( player , 15 , 1 )
skynet.server.passCheck:Modify( player , 16 , costMapCoin )
log.info(string.format("玩家 %d 咕咕市集 购买家具 商品ID %d" , player.userId , v.id ))
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("Decoration" , v.id )
local costMapCoin = moneyCount * buyGoods.buyCount
if not player:MoneyChange( moneyType , -costMapCoin ) then
s2cData.code = errorInfo.ErrorCode.NoEnoughMoney
else
skynet.server.bag:AddGoods( player , dataType.GoodsType_Decorate , v.id , buyGoods.buyCount )
--增加经验
local exp = skynet.server.bag:CalcExp( dataType.GoodsType_Decorate , v.id, buyGoods.buyCount )
player:AddExp( exp )
v.buyCount = 1
skynet.server.passCheck:Modify( player , 15 , 1 )
skynet.server.passCheck:Modify( player , 16 , costMapCoin )
log.info(string.format("玩家 %d 咕咕市集 购买装修 商品ID %d" , player.userId , v.id ))
end
break
end
end
end
end
data.goodsType = goodsType
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 } )
--table.insert( player.gameData.shop[ self.shopType ].furniture , v )
log.info(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 } )
--table.insert( player.gameData.shop[ self.shopType ].upfitter , v)
log.info(string.format("玩家 %d 咕咕市集 设置装修队数据 商品ID %d 是否购买 %d" , player.basicInfo.userID , v , buyCount ))
end
end
skynet.server.guGuShop = GuGuShop
return GuGuShop