HomeServer/lualib-src/Server-main/Common/Player/Player.lua

805 lines
36 KiB
Lua
Raw Normal View History

2024-11-20 15:41:09 +08:00
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