HomeServer/lualib-src/Server-main/Common/Player/Player.lua
2024-11-20 15:41:37 +08:00

805 lines
36 KiB
Lua
Raw 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 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