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