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

424 lines
13 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 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
--服饰物品恒定数量为11=人物 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