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