local skynet = require "skynet" local oo = require "Class" local json =require "json" local log = require "Log" local dataType = require "DataType" local pb = require "pb" local Player = oo.class() Player.maxLevelLimt = 45 --初始化玩家数据 function Player:ctor( userId , playerData) self.userId = userId self.account = playerData.basicInfo.accountName self.basicInfo = playerData.basicInfo self.gameData = playerData.gameData self.archiveData = playerData.archiveData self.tmpData = {} --self.tmpData = {} --临时数据,只在内存中使用,不保存DB --self.tmpData.putGoods = {} --摆放在房间的家具 end --初始化 function Player:Init( c2sData ) self.basicInfo.appVersion = c2sData.data.version self.basicInfo.loginTime = skynet.GetTime() --新的一天 if not skynet.server.common:IsSameDay(self.basicInfo.lastGameTime , skynet.GetTime()) then self:ResetTodayData() end --新的一周 if skynet.server.common:IsNewWeek(self.basicInfo.lastGameTime) then self:ResetWeekData() end end --初始化商店 function Player:InitShop() for k, v in pairs( self.gameData.unlockSystem ) do if dataType.UnlockSystem_Furniture == v then --家具和摆件,装修,套间 --刷新通用商店 for shopType = dataType.ShopType_Furniture, dataType.ShopType_Cinnabar, 1 do if not self.gameData.shop[ shopType ] then self.gameData.shop[ shopType ] = {} self.gameData.shop[ shopType ].type = shopType self.gameData.shop[ shopType ].isBuySpecialGoods = false --当前商店是否购买了特殊物品 self.gameData.shop[ shopType ].specialGoods = {} self.gameData.shop[ shopType ].generalGoods = {} self.gameData.shop[ shopType ].nextRefreshTime = 0 self.gameData.shop[ shopType ].consumeCoin = 0 --在这里消息的金币 self.gameData.shop[ shopType ].historyGoods = {} --历史刷出来的家具 skynet.server.generalShop:RefreshShop( self , shopType ) else --时间超过了,刷新新的一批 if skynet.GetTime() >= self.gameData.shop[ shopType ].nextRefreshTime then skynet.server.generalShop:RefreshShop( self , shopType ) end end end --装修间 local shopType = dataType.ShopType_Decorate if not self.gameData.shop[ shopType ] then self.gameData.shop[ shopType ] = {} self.gameData.shop[ shopType ].type = shopType self.gameData.shop[ shopType ].wallPaper = {} self.gameData.shop[ shopType ].floor = {} self.gameData.shop[ shopType ].door = {} self.gameData.shop[ shopType ].bar = {} self.gameData.shop[ shopType ].stair = {} self.gameData.shop[ shopType ].handrail = {} self.gameData.shop[ shopType ].nextRefreshTime = 0 self.gameData.shop[ shopType ].firstRefresh = true skynet.server.decorateShop:RefreshShop( self , shopType ) else --时间超过了,刷新新的一批 if skynet.GetTime() >= self.gameData.shop[ shopType ].nextRefreshTime then skynet.server.decorateShop:RefreshShop( self , shopType ) end end elseif dataType.UnlockSystem_Used == v then --闲菜 skynet.server.used:CheckRefreshGoods( self ) elseif dataType.UnlockSystem_Clothing == v then --服装 local shopType = dataType.ShopType_Clothes if not self.gameData.shop[ shopType ] then self.gameData.shop[ shopType ] = {} self.gameData.shop[ shopType ].type = shopType self.gameData.shop[ shopType ].headWear = {} --头饰 self.gameData.shop[ shopType ].clothes = {} --衣服 self.gameData.shop[ shopType ].trousers = {} --裤子 self.gameData.shop[ shopType ].shoes = {} --鞋子 self.gameData.shop[ shopType ].buyGoods = {} self.gameData.shop[ shopType ].nextRefreshTime = 0 skynet.server.clothesShop:RefreshShop( self , shopType ) else --时间超过了,刷新新的一批 if skynet.GetTime() >= self.gameData.shop[ shopType ].nextRefreshTime then skynet.server.clothesShop:RefreshShop( self , shopType ) end end elseif dataType.UnlockSystem_Plant == v then local shopType = dataType.ShopType_Seed --种子商店 if not self.gameData.shop[ shopType ] then self.gameData.shop[ shopType ] = {} self.gameData.shop[ shopType ].type = shopType self.gameData.shop[ shopType ].isBuySpecialGoods = false --当前商店是否购买了特殊物品 self.gameData.shop[ shopType ].specialGoods = {} self.gameData.shop[ shopType ].generalGoods = {} self.gameData.shop[ shopType ].nextRefreshTime = 0 self.gameData.shop[ shopType ].isFirstRefresh = true self.gameData.shop[ shopType ].consumeCoin = 0 --在这里消息的金币 skynet.server.generalShop:RefreshShop( self , shopType ) else --时间超过了,刷新新的一批 if skynet.GetTime() >= self.gameData.shop[ shopType ].nextRefreshTime then skynet.server.generalShop:RefreshShop( self , shopType ) end end shopType = dataType.ShopType_Plant if not self.gameData.shop[ shopType ] then self.gameData.shop[ shopType ] = {} self.gameData.shop[ shopType ].type = shopType --初始化货架数量 self.gameData.shop[ shopType ].shopShelf = {} --货架 for i = 1, skynet.server.plantShop.MaxShelfCount , 1 do self.gameData.shop[ shopType ].shopShelf[ i ] = { shelfId = i , goodsId = 0 , isSell = false , sellTime = 0 } end self.gameData.shop[ shopType ].sellCount = 0 end elseif dataType.UnlockSystem_Map == v then local shopType = dataType.ShopType_Flower --花店 if not self.gameData.shop[ shopType ] then self.gameData.shop[ shopType ] = {} self.gameData.shop[ shopType ].type = shopType self.gameData.shop[ shopType ].bagSeedId = 0 --福袋里刷到的种子 self.gameData.shop[ shopType ].furnitureId =0 --鲜花展示区刷到的家具 self.gameData.shop[ shopType ].recycleId = 0 --高价回收ID, 所有的植物都可以被随到 self.gameData.shop[ shopType ].shelfSeeds = {} --货架上的3个种子 self.gameData.shop[ shopType ].shelfFlowerpot = {} --货架上的2个花盆 self.gameData.shop[ shopType ].shelfFurniture = {} --货架上的2个家具 self.gameData.shop[ shopType ].nextRefreshTime = 0 self.gameData.shop[ shopType ].consumeCoin = 0 --在这里消息的金币 else skynet.server.flowerShop:RefreshShop( self , shopType ) end shopType = dataType.ShopType_Coffee --咖啡店 if not self.gameData.shop[ shopType ] then self.gameData.shop[ shopType ] = {} self.gameData.shop[ shopType ].supplierBoxes = {} --咖啡豆,糖,奶的供货盒子 self.gameData.shop[ shopType ].grids = {} --只显示上面有东西的咖啡格子 self.gameData.shop[ shopType ].currency = {} --最高级咖啡豆,糖奶的数量 self.gameData.shop[ shopType ].coffees = {} --已经解锁的咖啡ID self.gameData.shop[ shopType ].rewards = {} --奖励 self.gameData.shop[ shopType ].mergeCount = 0 --合成次数 --初始化领取材料 table.insert( self.gameData.shop[ shopType ].supplierBoxes , { type = dataType.CoffeeShopGoodsType_CoffeeBean , count = self.maxSupplyCount , nextRefreshTime = 0 , adTimes = 0} ) table.insert( self.gameData.shop[ shopType ].supplierBoxes , { type = dataType.CoffeeShopGoodsType_Sugar , count = self.maxSupplyCount , nextRefreshTime = 0 , adTimes = 0} ) table.insert( self.gameData.shop[ shopType ].supplierBoxes , { type = dataType.CoffeeShopGoodsType_Milk , count = self.maxSupplyCount , nextRefreshTime = 0 , adTimes = 0} ) --初始化格子 for i = 1, 30, 1 do table.insert( self.gameData.shop[ shopType ].grids , { index = i , type = dataType.CoffeeShopGoodsType_Empty , level = 0 } ) end --初始化3种货币 for i = 1, 3, 1 do table.insert( self.gameData.shop[ shopType ].currency , 0 ) end local cfgSValue = skynet.server.gameConfig.SValue local cfgIllustationsReward = cfgSValue.coffeeIllustationReward local idStart = 1 for k, v in pairs( cfgIllustationsReward ) do local reward = skynet.server.common:Split( v , "_" ) table.insert( self.gameData.shop[ shopType ].rewards , { id = idStart, status = dataType.Status_NoGain }) idStart = idStart + 1 end end shopType = dataType.ShopType_Style --造型间 if not self.gameData.shop[ shopType ] then self.gameData.shop[ shopType ] = {} local cfgSValue = skynet.server.gameConfig.SValue local curShop = self.gameData.shop[ shopType ] curShop.type = shopType curShop.grids = skynet.server.styleShop:GenerateGrid( self ) --格子信息 curShop.energy = {} --能量数值 curShop.energy.energy = cfgSValue.styleEnergy curShop.energy.nextRefillTime = 0 curShop.money ={} --货币资源 curShop.money.resource1 = 0 --卷发棒 curShop.money.resource2 = 0 --粉底刷 curShop.money.resource3 = 0 --梳子 curShop.curStyleId = 1 --当前设计的ID curShop.gainRewards = {} --领取的造型奖励,其实就是造型id curShop.attemptCount = 0 --设计次数 end end end if 30 == self.gameData.level then local shopType = dataType.ShopType_PetClothes --宠物商店 if not self.gameData.shop[ shopType ] then self.gameData.shop[ shopType ] = {} self.gameData.shop[ shopType ].type = shopType self.gameData.shop[ shopType ].catClothes = {} --猫的服装 self.gameData.shop[ shopType ].catHat = {} --猫的帽子 self.gameData.shop[ shopType ].catDecoration = {} --猫的装饰品 self.gameData.shop[ shopType ].dogClothes = {} --狗的服装 self.gameData.shop[ shopType ].dogHat = {} --狗的帽子 self.gameData.shop[ shopType ].dogDecoration = {} --狗的装饰品 self.gameData.shop[ shopType ].nextRefreshTime = 0 skynet.server.petClothesShop:RefreshShop( self , shopType ) else --时间超过了,刷新新的一批 if skynet.GetTime() >= self.gameData.shop[ shopType ].nextRefreshTime then skynet.server.petClothesShop:RefreshShop( self , shopType ) end end end end --新的一天 function Player:ResetTodayData() --新的一天,清理今日数据 for k, v in pairs(self.gameData.todayGain) do if "table" == type(v) then self.gameData.todayGain[ k ] = {} else self.gameData.todayGain[ k ] = 0 end end --通行证每日任务数据置0 for k, v in pairs( self.gameData.passCheck.tasks ) do if skynet.server.passCheck.TaskType_Daily == v.type then v.progress = 0 end end --商城每日礼包购买次数重置 if self.gameData.level>=9 then for k ,v in pairs(self.gameData.storePack.storePackInfo) do if next(v.packLimit)~=nil and v.packLimit[1]==1 then v.buyTimes=0 end end end --友圈互动每天默认未互动 for k, v in pairs( self.gameData.friend ) do v.isInteract = false end --每日第一次登录刷新常规签到和新人签到 skynet.server.signIn:InitData( self ) if next(self.gameData.playerLand.signInInfo) ~= nil then skynet.server.playerLand:LoginChangeData( self ) end --刷新每日奖励任务 skynet.server.dailyTask:Refresh( self ) skynet.server.flowerShop:RefreshShop( self , dataType.ShopType_Flower ) log.info("玩家清理今日数据" , self.basicInfo.userID) end --新的一周 function Player:ResetWeekData() --商城每周礼包购买次数重置 if self.gameData.level>=9 then for k ,v in pairs(self.gameData.storePack.storePackInfo) do if next(v.packLimit)~=nil and v.packLimit[1]==2 then v.buyTimes=0 end end end end --货币变化 function Player:MoneyChange( moneyType , count ) local data = {} data.money = {} if dataType.MoneyType_No == moneyType then elseif pb.enum("EnumGoodsType","Coin") == moneyType then if self.gameData.coin + count < 0 then log.info("金币数量不足,无法扣除") return false end self.gameData.coin = self.gameData.coin + count self:AddTodayData("coin" , count) data.money = { type = pb.enum("EnumGoodsType","Coin") , count = self.gameData.coin } skynet.server.playerRecord:Add( self.basicInfo.userID , dataType.RecordType_50 , self.gameData.coin - count, count , self.gameData.coin ) if count < 0 then skynet.server.achieveTask:Modify( self , 42 , math.abs(count)) end elseif pb.enum("EnumGoodsType","Clovers") == moneyType then if self.gameData.clovers + count < 0 then log.info("四叶草数量不足,无法扣除") return false end self.gameData.clovers = self.gameData.clovers + count self:AddTodayData("clovers" , count) data.money = { type = pb.enum("EnumGoodsType","Clovers") , count = self.gameData.clovers } skynet.server.playerRecord:Add( self.basicInfo.userID , dataType.RecordType_51 , self.gameData.clovers - count, count , self.gameData.clovers ) elseif dataType.MoneyType_Volute == moneyType then if self.gameData.volute + count < 0 then log.info("蜗壳数量不足,无法扣除") return false end self.gameData.volute = self.gameData.volute + count self:AddTodayData("volute" , count) data.money = { type = pb.enum("EnumGoodsType","VoluteCoin") , count = self.gameData.volute } skynet.server.playerRecord:Add( self.basicInfo.userID , dataType.RecordType_52 , self.gameData.volute - count, count , self.gameData.volute ) elseif dataType.MoneyType_LoveCoin == moneyType then if self.gameData.loveCoin + count < 0 then log.info("爱心币数量不足,无法扣除") return false end self.gameData.loveCoin = self.gameData.loveCoin + count self:AddTodayData("loveCoin" , count) skynet.server.playerRecord:Add( self.basicInfo.userID , dataType.RecordType_53 , self.gameData.loveCoin - count, count , self.gameData.loveCoin ) elseif dataType.MoneyType_PraiseCoin == moneyType then if self.gameData.praiseCoin + count < 0 then log.info("赞赞币数量不足,无法扣除") return false end self.gameData.praiseCoin = self.gameData.praiseCoin + count self:AddTodayData("praiseCoin" , count) skynet.server.playerRecord:Add( self.basicInfo.userID , dataType.RecordType_54 , self.gameData.praiseCoin - count, count , self.gameData.praiseCoin ) else log.info("不存在该类型的货币") return false end log.info(string.format("玩家 %d 货币类型 %d 数量 %d" , self.basicInfo.userID , moneyType , count)) --[[ data.coin = self.gameData.coin data.clovers = self.gameData.clovers data.volute = self.gameData.volute data.loveCoin = self.gameData.loveCoin data.praiseCoin = self.gameData.praiseCoin ]] skynet.server.gameServer:SendMsgToUser( self.userId , "CMD_S2C_MoneyChange" , data ) return true end --货币变化 消息 function Player:MoneyChangeMsg() --[[ local data = {} data.coin = self.gameData.coin data.clovers = self.gameData.clovers data.volute = self.gameData.volute data.loveCoin = self.gameData.loveCoin data.praiseCoin = self.gameData.praiseCoin skynet.server.gameServer:SendMsgToUser( self.userId , "CMD_S2C_MoneyChange" , data ) ]] end --增加经验 function Player:AddExp( count ) if 0 == count then return true end --超过40级就不增加经验 if self.gameData.level >= self.maxLevelLimt then return true end self.gameData.exp = self.gameData.exp + count self:AddTodayData("exp" , count) skynet.server.playerRecord:Add( self.basicInfo.userID , dataType.RecordType_61 , self.gameData.exp - count, count , self.gameData.exp ) self:CheckUpgrade() local data = {} data.level = self.gameData.level data.exp = self.gameData.exp skynet.server.gameServer:SendMsgToUser( self.userId , "CMD_S2C_Upgrade" , data ) return true end --增加今日数据 function Player:AddTodayData( name ,count ) if true then return true end if self.gameData.todayGain[ name ] and count > 0 then self.gameData.todayGain[ name ] = self.gameData.todayGain[ name ] + count log.info(string.format("玩家 %d 今日数据 %s 新增 %d", self.basicInfo.userID , name , count )) end end --检查是否升级 function Player:CheckUpgrade() local cfgLevel = skynet.server.gameConfig.Level[ self.gameData.level ] if self.gameData.exp >= cfgLevel.requireExp then --升级 self.gameData.level = self.gameData.level + 1 self.gameData.exp = self.gameData.exp - cfgLevel.requireExp if self.gameData.level > self.maxLevelLimt then self.gameData.level = self.maxLevelLimt end --用新等级再获取下奖励 cfgLevel = skynet.server.gameConfig.Level[ self.gameData.level ] self:AddTodayData("level" , 1) log.info(string.format("玩家 %d 升级 最新等级 %d 最新经验 %d", self.basicInfo.userID , self.gameData.level , self.gameData.exp)) skynet.server.playerRecord:Add( self.basicInfo.userID , dataType.RecordType_60 , self.gameData.level - 1, 1 , self.gameData.level ) skynet.server.playerRecord:Add( self.basicInfo.userID , dataType.RecordType_61 , self.gameData.exp - cfgLevel.requireExp, cfgLevel.requireExp , self.gameData.exp ) --解锁新家具 for k, v in pairs(cfgLevel.unlockFurniture) do table.insert( self.gameData.unlockFurniture , v ) end --升级奖励 self:GiveReward( cfgLevel.reward ) --解锁系统 self:CheckUnlockSystem() --初始化下商店信息 self:InitShop() skynet.server.achieveTask:CheckNew( self ) skynet.server.passCheck:CheckNew( self ) skynet.server.map:CheckUnlcokLoc( self) skynet.server.friend:CheckUnlockNpc( self ) skynet.server.friend:CheckNewMsg( self ) skynet.server.house:CheckNew( self ) skynet.server.pet:CheckNew( self ) --每次只升一级,如果升级后还大于就不再升 local cfgNewLevel = skynet.server.gameConfig.Level[ self.gameData.level ] if self.gameData.exp >= cfgNewLevel.requireExp then self.gameData.exp = cfgNewLevel.requireExp - 10 end else return end end --添加解锁系统 function Player:AddUnlockSystem( unlockType ) table.insert( self.gameData.unlockSystem , unlockType ) end --检查是否解锁系统 function Player:CheckUnlockSystem() local cfgSValue = skynet.server.gameConfig.SValue if 1 == self.gameData.level then --默认解锁家具,礼物,挂机3个系统 table.insert( self.gameData.unlockSystem , dataType.UnlockSystem_Furniture ) table.insert( self.gameData.unlockSystem , dataType.UnlockSystem_Gift ) table.insert( self.gameData.unlockSystem , dataType.UnlockSystem_Hang ) end if 2 == self.gameData.level then --任务 table.insert( self.gameData.unlockSystem , dataType.UnlockSystem_Task ) end if cfgSValue.SellAPPUnlockLvl == self.gameData.level then --闲菜 table.insert( self.gameData.unlockSystem , dataType.UnlockSystem_Used ) skynet.server.bag:AddGoods( self , dataType.GoodsType_Furniture , 197 , 1) --破箱子 end if cfgSValue.ClothingAPPUnlockLvl == self.gameData.level then --服装 table.insert( self.gameData.unlockSystem , dataType.UnlockSystem_Clothing ) end if cfgSValue.PlantAPPUnlockLvl == self.gameData.level then --植物 table.insert( self.gameData.unlockSystem , dataType.UnlockSystem_Plant ) end if cfgSValue.MoveAPPUnlockLvl == self.gameData.level then --搬家 table.insert( self.gameData.unlockSystem , dataType.UnlockSystem_MoveHome ) end if cfgSValue.ChatAPPUnlockLvl == self.gameData.level then --友圈 table.insert( self.gameData.unlockSystem , dataType.UnlockSystem_Friend ) end if cfgSValue.storeUnlockLvl == self.gameData.level then --商城 table.insert( self.gameData.unlockSystem , dataType.UnlockSystem_Store ) --九级初始化商店 if next(self.gameData.storePack.storePackInfo)==nil then skynet.server.store:InitData( self) end end if cfgSValue.MapAPPUnlockLvl == self.gameData.level then --地图 table.insert( self.gameData.unlockSystem , dataType.UnlockSystem_Map ) end if cfgSValue.coffeeUnlockLvl == self.gameData.level then --咖啡店 table.insert( self.gameData.unlockSystem , dataType.UnlockSystem_CoffeeShop ) end if cfgSValue.styleUnlockLvl == self.gameData.level then --造型间 table.insert( self.gameData.unlockSystem , dataType.UnlockSystem_StyleRoom ) end if cfgSValue.drawUnlockLvl == self.gameData.level then --设计间 table.insert( self.gameData.unlockSystem , dataType.UnlockSystem_DesignHouse ) self:GiveReward( 292 ) end if cfgSValue.passCheckUnlockLvl == self.gameData.level then --通行证 self:AddUnlockSystem( dataType.UnlockSystem_PassCheck ) end if cfgSValue.levelTaskUnlockLvl == self.gameData.level then self:AddUnlockSystem( dataType.UnlockSystem_LevelTask ) end if cfgSValue.dailyTaskUnlockLvl == self.gameData.level then self:AddUnlockSystem( dataType.UnlockSystem_DailyTask ) --刷新每日奖励任务 skynet.server.dailyTask:Refresh( self ) end if cfgSValue.achTaskUnlockLvl == self.gameData.level then self:AddUnlockSystem( dataType.UnlockSystem_AchieveTask ) end if cfgSValue.signInUnlockLvl == self.gameData.level then --常规签到 table.insert( self.gameData.unlockSystem , dataType.UnlockSystem_SignIn ) --6级初始化常规签到 if next(self.gameData.signIn.signInInfo)==nil then skynet.server.signIn:InitData(self) end end end --是否解锁系统 function Player:IsUnlockSystem( type ) for k, v in pairs( self.gameData.unlockSystem ) do if type == v then return true end end return false end --检查房间ID是否正确 function Player:CheckHouseID( houseId ) return true end --玩家是否存在该商品 function Player:IsBuyGoods( goodsType , goodsId ) for k, v in pairs( self.gameData.bag ) do if goodsType == v.type and goodsId == v.id then return true end end return false end --设置临时放置家具数据 function Player:TmpPutGoods( goodsType , goodsId , count ) --local keyName = string.format("%d_%d" , goodsType , goodsId ) --if not self.tmpData.putGoods[ keyName ] then --self.tmpData.putGoods[ keyName ] = 0 --end --放置的数据小于最新的数量就更新 --if self.tmpData.putGoods[ keyName ] < count then --self.tmpData.putGoods[ keyName ] = count --end end --将老用户的颜色家具ID进行个转换 function Player:TransforColorFurniture() if not self.gameData.onceSign.isCheckColorFruniture then self.gameData.onceSign.isCheckColorFruniture= true --开始检测背包 local newId = nil for k, v in pairs( self.gameData.bag ) do newId = skynet.server.gameConfig.oldFruniture[v.id] if dataType.GoodsType_Furniture == v.type and newId then --转成新的ID v.id = newId end end --检查图鉴 for k, v in pairs( self.gameData.illustration.goodsInfo ) do if dataType.GoodsType_Furniture == v.type then newId = skynet.server.gameConfig.oldFruniture[ v.id ] if newId then --转成新的ID v.id = newId end end end --开始检测室内 for k1, house in pairs( self.gameData.house ) do --遍历该房间下所有方案 for k2, scheme in pairs( house.scheme ) do --当前家具在该方案下的数量 for k3, furniture in pairs( scheme.furniture ) do newId = skynet.server.gameConfig.oldFruniture[ furniture.id ] if dataType.GoodsType_Furniture == furniture.type and newId then furniture.id = newId end end end end --闲菜二手购买 for k, v in pairs( self.gameData.used.buyInfo ) do newId = skynet.server.gameConfig.oldFruniture[ v.goodsId ] if newId then v.goodsId = newId end end --闲菜二手出售 for k, v in pairs( self.gameData.used.sellInfo ) do newId = skynet.server.gameConfig.oldFruniture[ v.goodsId ] if newId then v.goodsId = newId end end --闲菜物流 for k, v in pairs( self.gameData.used.logisticsInfo ) do newId = skynet.server.gameConfig.oldFruniture[ v.goodsId ] if newId then v.goodsId = newId end end log.info(string.format("玩家 %d 背包和室内 颜色家具ID转换" , self.userId )) end end --发奖励 function Player:GiveReward( rewardId , count ) log.info("开始发送奖励") count = count or 1 local cfgReward = skynet.server.gameConfig:GetCurCfg("Reward" , rewardId ) if cfgReward.coin > 0 then self:MoneyChange( dataType.MoneyType_Coin , cfgReward.coin * count) log.info(string.format("玩家 %d 发放金币 %d" , self.userId,cfgReward.coin * count )) end if cfgReward.mapCoin > 0 then self:MoneyChange( dataType.MoneyType_Map , cfgReward.mapCoin * count ) log.info(string.format("玩家 %d 发放地图币 %d" , self.userId,cfgReward.mapCoin * count )) end if cfgReward.voluteCoin > 0 then self:MoneyChange( dataType.MoneyType_Volute , cfgReward.voluteCoin * count) log.info(string.format("玩家 %d 发放蜗壳 %d" , self.userId,cfgReward.voluteCoin * count)) end --场景物品 for k, v in pairs( cfgReward.sceneObject ) do local arr = skynet.server.common:Split(v , "_") arr[1],arr[2] = tonumber(arr[1]),tonumber(arr[2]) if 1 == arr[1] then skynet.server.bag:AddGoods( self , dataType.GoodsType_Furniture , arr[2] , count ) log.info(string.format("玩家 %d 发放家具 %d" , self.userId, arr[2] )) elseif 2 == arr[1] then skynet.server.bag:AddGoods( self , dataType.GoodsType_Decorate , arr[2] , count ) log.info(string.format("玩家 %d 发放装修 %d" , self.userId, arr[2] )) end end --服饰物品 for k, v in pairs( cfgReward.appearanceObject ) do local arr = skynet.server.common:Split(v , "_") arr[1],arr[2] = tonumber(arr[1]),tonumber(arr[2]) if 1 == arr[1] then skynet.server.bag:AddGoods( self , dataType.GoodsType_Clothes , arr[2] , count ) log.info(string.format("玩家 %d 发放服装 %d" , self.userId, arr[2] )) elseif 2 == arr[1] then skynet.server.bag:AddGoods( self , dataType.GoodsType_PetClothes , arr[2] , count ) log.info(string.format("玩家 %d 发放宠物服装 %d" , self.userId, arr[2] )) end end --套装物品 for k, v in pairs( cfgReward.suitObject ) do local arr = skynet.server.common:Split(v , "_") arr[1],arr[2] = tonumber(arr[1]),tonumber(arr[2]) if 1 == arr[1] then --家具 local cfgAllFurniture = skynet.server.gameConfig.Furniture for k, v in pairs( cfgAllFurniture ) do if arr[2] == v.suitType then skynet.server.bag:AddGoods( self , dataType.GoodsType_Furniture , v.id , count ) end end --装修 local cfgAllDecoration = skynet.server.gameConfig.Decoration for k, v in pairs( cfgAllDecoration ) do if arr[2] == v.suitType then skynet.server.bag:AddGoods( self , dataType.GoodsType_Decorate , v.id , count ) end end log.info(string.format("玩家 %d 发放家具套装 %d" , self.userId, arr[2] )) elseif 2 == arr[1] then local cfgClothesSuit = skynet.server.gameConfig.ClothesSuit --获取配置文件ClothesSuit中的数据 local cfgAllClothes = skynet.server.gameConfig.Clothes --人物 local cfgPetClothes = skynet.server.gameConfig.PetClothes --宠物 local type = nil for k ,v in pairs(cfgClothesSuit) do if v.id==arr[2] then --获取该套装类型 type = v.type end end if type == 1 then for k, v in pairs( cfgAllClothes ) do if arr[2] == v.suitId then skynet.server.bag:AddGoods( self , dataType.GoodsType_Clothes , v.id , count ) end end log.info(string.format("玩家 %d 发放衣服套装 %d" , self.userId, arr[2] * count)) elseif type == 2 then --获取动物服装对应的套装物品 for k ,v in pairs( cfgPetClothes ) do if arr[2] == v.suitId then skynet.server.bag:AddGoods( self , dataType.GoodsType_PetClothes , v.id , count ) end end log.info(string.format("玩家 %d 发放宠物套装 %d" , self.userId, arr[2] * count)) end end end --道具类型 for k, v in pairs( cfgReward.ticket ) do local arr = skynet.server.common:Split(v , "_") arr[1],arr[2] = tonumber(arr[1]),tonumber(arr[2]) skynet.server.bag:AddGoods( self , dataType.GoodsType_Prop , arr[1] , arr[2] * count ) log.info(string.format("玩家 %d 发放道具 %d 数量 %d" , self.userId, arr[1], arr[2] * count )) end --种子 for k, v in pairs( cfgReward.seed ) do local arr = skynet.server.common:Split(v , "_") arr[1],arr[2] = tonumber(arr[1]),tonumber(arr[2]) skynet.server.bag:AddGoods( self , dataType.GoodsType_Seed , arr[1] , arr[2] * count) log.info(string.format("玩家 %d 发放种子%d 数量 %d" , self.userId, arr[1], arr[2] * count)) end end --发奖励并批指定NPC好感度 function Player:GiveRewardNpc( rewardId , npcId ) --发放其它奖励 self:GiveReward( rewardId ) --增加指定NPC好感度 local cfgReward = skynet.server.gameConfig:GetCurCfg("Reward" , rewardId ) if cfgReward.relationValue > 0 then local curNpc = self.gameData.npc[ npcId ] if curNpc then skynet.server.friend:AddFavorability( self , curNpc , cfgReward.relationValue) log.info(string.format("玩家 %d 增加好感度 %d" , self.userId,cfgReward.relationValue )) end end end --选择一个发奖励 function Player:SelectOneReward( rewardId , rewardIndex ) local data = {} local cfgReward = skynet.server.gameConfig:GetCurCfg("Reward" , rewardId ) if cfgReward.coin > 0 and rewardIndex == dataType.MoneyType_Coin then self:MoneyChange( dataType.MoneyType_Coin , cfgReward.coin ) data = { type = dataType.MoneyType_Coin , count = cfgReward.coin } end if cfgReward.mapCoin > 0 and rewardIndex == dataType.MoneyType_Map then self:MoneyChange( dataType.MoneyType_Map , cfgReward.mapCoin ) data = { type = dataType.MoneyType_Map , count = cfgReward.mapCoin } end if cfgReward.voluteCoin > 0 and rewardIndex == dataType.MoneyType_Volute then self:MoneyChange( dataType.MoneyType_Volute , cfgReward.voluteCoin ) data = { type = dataType.MoneyType_Volute , count = cfgReward.voluteCoin } end return data end return Player