188 lines
9.0 KiB
Lua
188 lines
9.0 KiB
Lua
|
|
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
|