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

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