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