PGRData/Script/matrix/xconfig/XComeAcrossConfig.lua

184 lines
5.2 KiB
Lua

XComeAcrossConfig = XComeAcrossConfig or {}
ComeAcrossGameType = {
GAME_CLICK = 1,
GAME_ELIMINATE = 2,
}
local TABLE_COMEACROSS = "Share/Trust/TrustGameConfig.tab";
local TABLE_COMEACROSS_CLICK_POOL = "Share/Trust/TrustGameClickPool.tab";
local TABLE_COMEACROSS_ELIMINATE_POOL = "Share/Trust/TrustGameEliminatePool.tab";
local TABLE_COMEACROSS_REWARD = "Share/Trust/TrustGameReward.tab";
local TABLE_COMEACROSS_POSITION = "Share/Trust/TrustGamePosition.tab";
local TABLE_COMEACROSS_GRID = "Share/Trust/TrustGameGrid.tab";
local TABLE_COMEACROSS_GAMETYPE = "Share/Trust/TrustGameTypeConfig.tab";
local ComeAcrossConfig = {}
local ComeAcrossClickPoolConfig = {}
local ComeAcrossEliminatePoolConfig = {}
local ComeAcrossRewardConfig = {}
local ComeAcrossPositionConfig = {}
local ComeAcrossGridConfig = {}
local ComeAcrossGameTypeConfig = {}
local GameTypePools = {}
function XComeAcrossConfig.Init()
ComeAcrossConfig = XTableManager.ReadByIntKey(TABLE_COMEACROSS, XTable.XTableTrustGameConfig, "Id")
ComeAcrossRewardConfig = XTableManager.ReadByIntKey(TABLE_COMEACROSS_REWARD, XTable.XTableTrustGameReward, "Id")
ComeAcrossClickPoolConfig = XTableManager.ReadByIntKey(TABLE_COMEACROSS_CLICK_POOL, XTable.XTableTrustGameClickPool, "Id")
ComeAcrossEliminatePoolConfig = XTableManager.ReadByIntKey(TABLE_COMEACROSS_ELIMINATE_POOL, XTable.XTableTrustGameEliminatePool, "Id")
ComeAcrossPositionConfig = XTableManager.ReadByIntKey(TABLE_COMEACROSS_POSITION, XTable.XTableTrustGamePosition, "Id")
ComeAcrossGridConfig = XTableManager.ReadByIntKey(TABLE_COMEACROSS_GRID, XTable.XTableTrustGameGrid, "Id")
ComeAcrossGameTypeConfig = XTableManager.ReadByIntKey(TABLE_COMEACROSS_GAMETYPE, XTable.XTableTrustGameTypeConfig, "Id")
GameTypePools[ComeAcrossGameType.GAME_CLICK] = ComeAcrossClickPoolConfig
GameTypePools[ComeAcrossGameType.GAME_ELIMINATE] = ComeAcrossEliminatePoolConfig
end
--获取小游戏关卡表
function XComeAcrossConfig.GetComeAcrossConfig()
return ComeAcrossConfig
end
--获取小游戏关卡
function XComeAcrossConfig.GetComeAcrossConfigById(id)
if not ComeAcrossConfig then
return
end
return ComeAcrossConfig[id]
end
--获取小游戏内容
function XComeAcrossConfig.GetComeAcrossTypeConfigById(id)
if not ComeAcrossGameTypeConfig then
return
end
return ComeAcrossGameTypeConfig[id]
end
--获取小游戏位置
function XComeAcrossConfig.GetComeAcrossPositionConfigById(id)
if not ComeAcrossPositionConfig then
return
end
return ComeAcrossPositionConfig[id]
end
--获得奖励
function XComeAcrossConfig.GetComeAcrossRewardConfigById(id)
if not ComeAcrossRewardConfig then
return
end
return ComeAcrossRewardConfig[id]
end
--根据类型获取小游戏消除元素
function XComeAcrossConfig.GetComeAcrossGridConfigById(gridType)
if not ComeAcrossGridConfig then
return
end
for _,v in ipairs(ComeAcrossGridConfig) do
if v.Type == gridType then
return v
end
end
return nil
end
--随机获取N个小游戏
function XComeAcrossConfig.RandomNumberGetGameConfig(count)
if not ComeAcrossConfig then
return
end
local length = #ComeAcrossConfig
if length <= count then
return ComeAcrossConfig
end
local temp = {}
for _, v in ipairs(ComeAcrossConfig) do
table.insert(temp, v)
end
local games = {}
for i = 1, count, 1 do
local sum = #temp
local rand = math.random(1, sum)
local gameTable = {}
gameTable.GameConfig = table.remove(temp, rand)
gameTable.TypeOfGames = XComeAcrossConfig.RandomNumberGetGameConfigFormPoolByType(gameTable.GameConfig.Count, gameTable.GameConfig.Type,gameTable.GameConfig.Difficult)
gameTable.Position = ComeAcrossPositionConfig[i]
table.insert(games, gameTable)
end
return games
end
--从游戏类型池随出特定类型和数量的游戏关卡
function XComeAcrossConfig.RandomNumberGetGameConfigFormPoolByType(count, gameType,difficult)
local pools = GameTypePools[gameType]
if not pools or #pools <= count then
return pools
end
--筛选难度
local pool = {}
for _,v in ipairs(pools) do
if v.Difficult == difficult then
table.insert(pool,v)
end
end
if not pool or #pool <= count then
return pool
end
--获取权重总和
local sum = 0
for _, v in ipairs(pool) do
sum = sum + v.Weight
end
--设置随机数种子
math.randomseed(os.time())
--随机数加上权重,越大的权重,数值越大
local weightList = {}
for i, v in ipairs(pool) do
local rand = math.random(0, sum)
local seed = {}
seed.Index = i
seed.Weight = rand + v.Weight
table.insert(weightList, seed)
end
--排序
table.sort(weightList, function(x, y)
return x.Weight > y.Weight
end)
--返回最大的权重值的前几个
local typeOfGames = {}
for i = 1, count, 1 do
local index = weightList[i].Index
if pool[index] then
table.insert(typeOfGames,pool[index] )
end
end
return typeOfGames
end