local skynet = require "skynet" local oo = require "Class" local log = require "Log" local protoc = require "protoc" local pb = require "pb" local json =require "json" local dataType = require "DataType" local GameConfig = oo.class() skynet.cfgRoomCenter = {} skynet.cfgRoomCenter.CheckRoomTime = 30 --多少时间检测一下所有房间 skynet.cfgRoomCenter.MaxTimeNoStart = 30 --最长多少秒不开始游戏(秒) skynet.cfgRoomCenter.MaxTimeGame = 900 --一局游戏最长时间 function GameConfig:GetClusterServerConfig( name ) for k, v in pairs(skynet.server.gameConfig.ClusterServerConfig) do if name == v.serverName then return v end end end function GameConfig:LoadConfig() log.info("开始加载配置") local cmd = string.format("find %s -name *.config","Server") local fp = io.popen(cmd) for filename in fp:lines() do self:LoadOneConfig(filename) end fp:close() log.info("结束加载配置") end function GameConfig:LoadOneConfig(filename) local newModule = {} if filename then local f = assert(io.open(filename)) local source = f:read "*a" f:close() assert(load(source, "@"..filename, "t", newModule))() end for name,config in pairs(newModule) do GameConfig[name] = config local str = string.format("加载配置文件 %s 变量名 %s",filename, name) log.info(str) end end function GameConfig:LoadJson() log.info("开始加载JSON配置") local cmd = string.format("find %s -name *.json","Server") local fp = io.popen(cmd) for filename in fp:lines() do self:LoadOneJson(filename) end --转换染色家具 --[[ self.oldFruniture = {} -- 保存下需要改动的旧家具ID,方便后面转换老用户的数据 for k, v in pairs(self.Furniture) do --家具配置对染色家具ID进行转换 if 2 == #v.dyeFurTrans and 0 == math.floor( v.id /1000000 ) then local oldId = v.id v.id = v.dyeFurTrans[2] * 100000 + v.dyeFurTrans[1]; self.oldFruniture [ oldId ] = v.id end end for k1, v1 in pairs(self.FurnitureBook) do for k2, v2 in pairs(v1.furnitrueId) do local newId = skynet.server.gameConfig.oldFruniture[ v2 ] if newId then v1.furnitrueId[ k2 ] = newId end end end ]] fp:close() log.info("结束加载JSON配置") end function GameConfig:LoadOneJson(filename) if filename then local f = assert(io.open(filename)) local source = f:read("*all") f:close() local startPos = string.find(filename ,"GameConfig/") + #"GameConfig/" local endPos = string.find(filename ,"_" ) - 1 local newFileName = string.sub(filename,startPos ,endPos) if "SValue" ==newFileName then GameConfig[ newFileName ] = json:decode(source) else GameConfig[ newFileName ] = json:decode(source)["items"] end log.info(string.format("加载配置文件 %s 变量名 %s",filename, newFileName)) end end --载入PB协议 function GameConfig:LoadProto() log.info("开始加载ProtoBuf") local cmd = string.format("find %s -name *.proto","Server") local fp = io.popen(cmd) for filename in fp:lines() do self:LoadOneProto(filename) end fp:close() log.info("结束加载ProtoBuf") end function GameConfig:LoadOneProto(filename) local newModule = {} if filename then local f = assert(io.open(filename)) log.info("加载ProtoBuf文件" , filename) local source = f:read "*a" f:close() protoc:load(source) end end --获取当前服的集群配置 function GameConfig:GetCurClusterServerCfg( id ) for k, v in pairs( self.ClusterServerConfig ) do if id == v.serverId then return v end end return nil end --获取当前植物的配置 function GameConfig:GetCurPlantCfg( id ) for k, v in pairs( self.Plant ) do if id == v.id then return v end end return nil end --获取当前家具配置 function GameConfig:GetCurFurnitureCfg( id ) --将染色的家具id转化为正常id id = self:RestoreGeneralID( id ) for k, v in pairs( self.Furniture ) do if id == v.id then return v end end return nil end --将染色的家具id转化为正常id function GameConfig:RestoreGeneralID( id ) if id >= 100000 then id = id % 100000 end return id end --获取当前装修配置 function GameConfig:GetCurDecorationCfg( id ) for k, v in pairs( self.Decoration ) do if id == v.id then return v end end return nil end --获取最大进度值 function GameConfig:GetTaskConfig( id ) local cfgTask = skynet.server.gameConfig.Task --任务配置 for k, v in pairs( cfgTask ) do if id == v.id then return v end end return nil end --获取色彩配置 function GameConfig:GetColorCfg( id ) local cfg = skynet.server.gameConfig.Color for k, v in pairs( cfg ) do if id == v.id then return v end end return nil end --获取方案配置 function GameConfig:GetSchemeCfg( id ) local cfg = skynet.server.gameConfig.Scheme for k, v in pairs( cfg ) do if id == v.combineID then return v end end return nil end --获取植物商品的配置 function GameConfig:GetPlantCfg( goodsId ) local cfgPlant = skynet.server.gameConfig.Plant for k, v in pairs( cfgPlant ) do if goodsId == v.id then return v end end return nil end --获取装修的配置 function GameConfig:GetDecorationCfg( goodsId ) local cfgPlant = skynet.server.gameConfig.Decoration for k, v in pairs( cfgPlant ) do if goodsId == v.id then return v end end return nil end --获取手机消息 function GameConfig:GetPhoneMsgCfg( msgId ) local cfgPhone = skynet.server.gameConfig.PhoneMsg for k, v in pairs( cfgPhone ) do if msgId == v.id then return v end end return nil end --获取手机消息 function GameConfig:GetLevelCfg( level ) local cfgLevel = skynet.server.gameConfig.Level for k, v in pairs( cfgLevel ) do if level == v.level then return v end end return nil end --获取每日任务 function GameConfig:GetEventsDailyTaskCfg( id ) local cfg = skynet.server.gameConfig.DailyTask for k, v in pairs( cfg ) do if id == v.id then return v end end return nil end --获取商场价格 function GameConfig:GetStorePriceCfg( id ) local cfg = skynet.server.gameConfig.StorePrice for k, v in pairs( cfg ) do if id == v.storePackId then return v end end return nil end --获取当前配置 function GameConfig:GetCurCfg( cfgName , id ) local cfg = skynet.server.gameConfig[ cfgName ] for k, v in pairs( cfg ) do if id == v.id then return v end end return nil end function GameConfig:Is() end --获取所有配置 function GameConfig:GetAllCfg( cfgName ) local cfg = skynet.server.gameConfig[ cfgName ] return cfg end --获取购买货币信息 function GameConfig:GetBuyMoney( cfgName , id ) local cfgCur = skynet.server.gameConfig:GetCurCfg( cfgName , id ) if dataType.MoneyType_No == cfgCur.currencyBuy then return cfgCur.currencyBuy , 0 elseif dataType.MoneyType_Coin == cfgCur.currencyBuy then return cfgCur.currencyBuy , cfgCur.coin elseif dataType.MoneyType_Map == cfgCur.currencyBuy then return cfgCur.currencyBuy , cfgCur.mapCoin elseif dataType.MoneyType_Volute == cfgCur.currencyBuy then return cfgCur.currencyBuy , cfgCur.voluteCoin end end --通过awardId获取对应奖励的信息 货币奖励Player:GiveReward()处理 function GameConfig:AwardInfo( rewardId ) local Reward = self.Reward --获取配置文件Reward中的数据 local Furniture = self.Furniture --获取配置文件Furniture中的数据 local Clothes = self.Clothes --获取配置文件Clothes中的数据 local PetClothes = self.PetClothes --获取配置文件PetClothes中的数据 local ClothesSuit = self.ClothesSuit --获取配置文件ClothesSuit中的数据 local reward = {} for k ,v in pairs(Reward) do if rewardId==v.id then --场景物品(恒定数量为1) 1=furniture 2=decoration 物品类型_物品id 1_123 if next(v.sceneObject) ~=nil then for k1 ,v1 in pairs(v.sceneObject) do local arr = skynet.server.common:Split(v1 , "_") arr[1],arr[2] = tonumber(arr[1]),tonumber(arr[2]) if arr[1]==1 then local type = pb.enum("EnumGoodsType" , "Furniture") table.insert(reward , {type=type, id=arr[2] ,count=1}) elseif arr[1]==2 then local type = pb.enum("EnumGoodsType" , "Decorate") table.insert(reward , {type=type, id=arr[2] ,count=1}) end end end --服饰物品(恒定数量为1)1=人物 2=宠物 类型_衣服id 1_123 if next(v.appearanceObject) ~=nil then for k1 ,v1 in pairs(v.appearanceObject) do local arr = skynet.server.common:Split(v1 , "_") arr[1],arr[2] = tonumber(arr[1]),tonumber(arr[2]) if arr[1]==1 then local type = pb.enum("EnumGoodsType" , "Clothes") table.insert(reward , {type=type, id=arr[2] ,count=1}) elseif arr[1]==2 then local type = pb.enum("EnumGoodsType" , "PetClothes") table.insert(reward , {type=type, id=arr[2] ,count=1}) end end end --套装物品(恒定数量为1) 1=家装 2=服装 类型_套装id 1_1 if next(v.suitObject)~=nil then for k1 ,v1 in pairs(v.suitObject) do local arr = skynet.server.common:Split(v1 , "_") arr[1],arr[2] = tonumber(arr[1]),tonumber(arr[2]) if arr[1]==1 then --获取家具对应的套装物品 for k2 ,v2 in pairs(Furniture) do if v2.suitType == arr[2] then local type = pb.enum("EnumGoodsType" , "Furniture") table.insert(reward , {type=type, id=v2.id ,count=1}) end end elseif arr[1]==2 then local type = nil for k2 ,v2 in pairs(ClothesSuit) do if v2.id==arr[2] then --获取该套装类型 type = v2.type end end if type == 1 then --获取人物服装对应的套装物品 for k2 ,v2 in pairs(Clothes) do if v2.suitId == arr[2] then local type = pb.enum("EnumGoodsType" , "Clothes") table.insert(reward , {type=type, id=v2.id ,count=1}) end end elseif type == 2 then --获取动物服装对应的套装物品 for k2 ,v2 in pairs(PetClothes) do if v2.suitId == arr[2] then local type = pb.enum("EnumGoodsType" , "PetClothes") table.insert(reward , {type=type, id=v2.id ,count=1}) end end end end end end --道具 类型_数量 id 3_10 if next(v.ticket)~=nil then for k1 ,v1 in pairs(v.ticket) do local arr = skynet.server.common:Split(v1 , "_") arr[1],arr[2] = tonumber(arr[1]),tonumber(arr[2]) local type = pb.enum("EnumGoodsType" , "Prop") table.insert(reward , {type=type, id=arr[1] ,count=arr[2]}) end end --种子 id_数量 id 3_10 if next(v.seed)~=nil then for k1 ,v1 in pairs(v.seed) do local arr = skynet.server.common:Split(v1 , "_") arr[1],arr[2] = tonumber(arr[1]),tonumber(arr[2]) table.insert(reward , {type=dataType.GoodsType_Seed, id=arr[1] ,count=arr[2]}) end end end end return reward end --是否正式服 function GameConfig:IsOnline() return self.BasicConfig.isOnline end --是否开启审核 function GameConfig:IsAudit() return self.BasicConfig.isAudit end skynet.server.gameConfig = GameConfig return GameConfig