XExpeditionConfig = XExpeditionConfig or {} --基础角色表 local TABLE_EXPEDITION_BASE_CHARACTER = "Share/Fuben/Expedition/ExpeditionBaseCharacter.tab" --角色表 local TABLE_EXPEDITION_CHARACTER = "Share/Fuben/Expedition/ExpeditionCharacter.tab" --远征章节表 local TABLE_EXPEDITION_CHAPTER = "Share/Fuben/Expedition/ExpeditionChapter.tab" --远征关卡表 local TABLE_EXPEDITION_STAGE = "Share/Fuben/Expedition/ExpeditionStage.tab" --玩法配置 local TABLE_EXPEDITION_CONFIG = "Share/Fuben/Expedition/ExpeditionConfig.tab" --角色基础组合羁绊表 local TABLE_EXPEDITION_COMBO = "Share/Fuben/Expedition/ExpeditionCombo.tab" --角色组合羁绊子分类表 local TABLE_EXPEDITION_CHILDCOMBO = "Share/Fuben/Expedition/ExpeditionChildCombo.tab" --角色分类展示表 local TABLE_EXPEDITION_CHARACTER_TYPE = "Share/Fuben/Expedition/ExpeditionCharacterType.tab" --角色阶级升级表 local TABLE_EXPEDITION_CHARACTER_ELEMENTS = "Client/Fuben/Expedition/ExpeditionCharacterElements.tab" --羁绊大类表 local TABLE_EXPEDITION_COMBO_TYPENAME = "Client/Fuben/Expedition/ExpeditionComboTypeName.tab" --螺母购买刷新次数表 local TABLE_EXPEDITION_DRAW_CONSUME = "Share/Fuben/Expedition/ExpeditionDrawConsume.tab" --全局增益羁绊 local TABLE_EXPEDITION_GLOBAL_COMBO = "Share/Fuben/Expedition/ExpeditionGlobalCombo.tab" --队伍位置表 local TABLE_EXPEDITION_TEAMPOS = "Share/Fuben/Expedition/ExpeditionTeamPos.tab" --招募概率表 local TABLE_EXPEDITION_DRAWPR = "Share/Fuben/Expedition/ExpeditionDrawPR.tab" --招募概率星数对照表 local TABLE_EXPEDITION_DRAWRANK = "Share/Fuben/Expedition/ExpeditionDrawRank.tab" --关卡层对照表 local TABLE_EXPEDITION_STAGETIER = "Client/Fuben/Expedition/ExpeditionStageTier.tab" --关卡层对照表 local TABLE_EXPEDITION_DEFAULT_TEAM = "Share/Fuben/Expedition/ExpeditionDefaultTeam.tab" local BaseConfig = {} local ChildComboConfig = {} local ComboConfig = {} local CharacterTypeConfig = {} local CharacterConfig = {} local CharacterElements = {} local BaseCharacterConfig = {} local ChapterConfig = {} local EStageConfig = {} local ComboTypeNameConfig = {} local DrawConsumeConfig = {} local GlobalComboConfig = {} local TeamPosConfig = {} local DrawPRConfig = {} local DrawRankConfig = {} local StageTierConfig = {} local DefaultTeamConfig = {} local Type2CharacterDic = {} local Rank2CharacterDic = {} local Chapter2StageDic = {} local Chapter2StageTierDic = {} local Chapter2ConfigDic = {} local Chapter2TeamPosDic = {} local Chapter2DefaultTeamDic = {} local Order2ComboTypeDic = {} local DefaultTeamId2ChildComboDic = {} local TierId2StageIdDic = {} local Chapter2StageIdDic = {} local NewBaseConfigIndex = 0 --local BaseComboStatus = {} 废弃 local BaseComboDic = {} local StageToEStageDic = {} local ComboConditionList = { [1] = "MemberNum", -- 检查合计数量 [2] = "TotalRank", -- 检查合计等级 [3] = "TargetMember", -- 检查对应角色等级 [4] = "TargetTypeAndRank", -- 检查指定特征的高于指定等级的人 } --===================== --关卡难度枚举 --===================== XExpeditionConfig.StageDifficulty = { Normal = 1, --普通难度 NightMare = 2, --噩梦难度 } XExpeditionConfig.DifficultyName = { [1] = "Normal", [2] = "NightMare", } XExpeditionConfig.TierType = { Normal = 1, --普通层(包含剧情关卡与普通战斗关卡) Infinity = 2, --无尽层 } XExpeditionConfig.StageType = { Story = 1, -- 1 剧情关 Battle = 2, -- 2 战斗关 Infinity = 3, -- 3 无尽关 AfterBrush = 4, -- 4 复刷关 } -- 关卡前置条件类型 XExpeditionConfig.PreStageCheckType = { And = 1, Or = 2, } XExpeditionConfig.MemberDetailsType = { RecruitMember = 1, FireMember = 2 } local InitConfig = function() BaseConfig = XTableManager.ReadByIntKey(TABLE_EXPEDITION_CONFIG, XTable.XTableExpeditionConfig, "Id") ComboConfig = XTableManager.ReadByIntKey(TABLE_EXPEDITION_COMBO, XTable.XTableExpeditionCombo, "Id") ChildComboConfig = XTableManager.ReadByIntKey(TABLE_EXPEDITION_CHILDCOMBO, XTable.XTableExpeditionChildCombo, "Id") ChapterConfig = XTableManager.ReadByIntKey(TABLE_EXPEDITION_CHAPTER, XTable.XTableExpeditionChapter, "Id") EStageConfig = XTableManager.ReadByIntKey(TABLE_EXPEDITION_STAGE, XTable.XTableExpeditionStage, "Id") BaseCharacterConfig = XTableManager.ReadByIntKey(TABLE_EXPEDITION_BASE_CHARACTER, XTable.XTableExpeditionBaseCharacter, "Id") CharacterConfig = XTableManager.ReadByIntKey(TABLE_EXPEDITION_CHARACTER, XTable.XTableExpeditionCharacter, "Id") CharacterTypeConfig = XTableManager.ReadByStringKey(TABLE_EXPEDITION_CHARACTER_TYPE, XTable.XTableExpeditionCharacterType, "Id") ComboTypeNameConfig = XTableManager.ReadByIntKey(TABLE_EXPEDITION_COMBO_TYPENAME, XTable.XTableExpeditionComboTypeName, "Id") DrawConsumeConfig = XTableManager.ReadByIntKey(TABLE_EXPEDITION_DRAW_CONSUME, XTable.XTableExpeditionDrawConsume, "Id") GlobalComboConfig = XTableManager.ReadByIntKey(TABLE_EXPEDITION_GLOBAL_COMBO, XTable.XTableExpeditionGlobalCombo, "Id") CharacterElements = XTableManager.ReadByIntKey(TABLE_EXPEDITION_CHARACTER_ELEMENTS, XTable.XTableExpeditionCharacterElements, "Id") TeamPosConfig = XTableManager.ReadByIntKey(TABLE_EXPEDITION_TEAMPOS, XTable.XTableExpeditionTeamPos, "Id") DrawPRConfig = XTableManager.ReadByIntKey(TABLE_EXPEDITION_DRAWPR, XTable.XTableExpeditionDrawPR, "Level") DrawRankConfig = XTableManager.ReadByIntKey(TABLE_EXPEDITION_DRAWRANK, XTable.XTableExpeditionDrawRank, "Id") StageTierConfig = XTableManager.ReadByIntKey(TABLE_EXPEDITION_STAGETIER, XTable.XTableExpeditionStageTier, "Id") DefaultTeamConfig = XTableManager.ReadByIntKey(TABLE_EXPEDITION_DEFAULT_TEAM, XTable.XTableExpeditionDefaultTeam, "TeamId") end local GetNewBaseConfigId = function() for id, cfg in pairs(BaseConfig) do if cfg.TimeId and cfg.TimeId > 0 then NewBaseConfigIndex = id return end end XLog.Error("XExpeditionConfig:没有任何一项配置了TimeId!请检查表格:" .. TABLE_EXPEDITION_CONFIG) end local InitComboConfig = function() for _, comboCfg in pairs(ComboConfig) do if not BaseComboDic[comboCfg.ChildComboId] then BaseComboDic[comboCfg.ChildComboId] = {} end table.insert(BaseComboDic[comboCfg.ChildComboId], comboCfg) end for _, comboTypeCfg in pairs(ComboTypeNameConfig) do Order2ComboTypeDic[comboTypeCfg.OrderId] = comboTypeCfg end end local InitStages = function() for _, tier in pairs(StageTierConfig) do if not Chapter2StageTierDic[tier.ChapterId] then Chapter2StageTierDic[tier.ChapterId] = {} end Chapter2StageTierDic[tier.ChapterId][tier.OrderId] = tier if not Chapter2StageDic[tier.ChapterId] then Chapter2StageDic[tier.ChapterId] = {} end if not Chapter2StageDic[tier.ChapterId][tier.Difficulty] then Chapter2StageDic[tier.ChapterId][tier.Difficulty] = {} end --if not Chapter2StageTierDic[eStage.ChapterId] then Chapter2StageTierDic[eStage.ChapterId] = {} end --if not Chapter2StageTierDic[eStage.ChapterId][eStage.TierId] then Chapter2StageTierDic[eStage.ChapterId][eStage.TierId] = {} end Chapter2StageDic[tier.ChapterId][tier.Difficulty][tier.OrderId] = tier end for id, eStage in pairs(EStageConfig) do --Chapter2StageTierDic[eStage.ChapterId][eStage.TierId][eStage.OrderId] = eStage if not StageToEStageDic[eStage.StageId] then StageToEStageDic[eStage.StageId] = eStage end if not TierId2StageIdDic[eStage.TierId] then TierId2StageIdDic[eStage.TierId] = {} end TierId2StageIdDic[eStage.TierId][eStage.OrderId] = id if not Chapter2StageIdDic[eStage.ChapterId] then Chapter2StageIdDic[eStage.ChapterId] = {} end table.insert(Chapter2StageIdDic[eStage.ChapterId] , id) end end local InitCharacter = function() for _, v in pairs(BaseCharacterConfig) do for _, type in pairs(v.Type) do if not Type2CharacterDic[type] then Type2CharacterDic[type] = {} end if not Type2CharacterDic[type][v.Id] then Type2CharacterDic[type][v.Id] = 1 end end Rank2CharacterDic[v.Id] = {} end end local InitRank2CharacterDic = function() for _, v in pairs(CharacterConfig) do Rank2CharacterDic[v.BaseId][v.Rank] = v if not Rank2CharacterDic[v.BaseId].MaxRank or Rank2CharacterDic[v.BaseId].MaxRank < v.Rank then Rank2CharacterDic[v.BaseId].MaxRank = v.Rank end end end local InitTeam = function() for _, v in pairs(TeamPosConfig) do if not Chapter2TeamPosDic[v.ChapterId] then Chapter2TeamPosDic[v.ChapterId] = {} end table.insert(Chapter2TeamPosDic[v.ChapterId], v) end for id, chapter in pairs(ChapterConfig) do if not Chapter2DefaultTeamDic[id] then Chapter2DefaultTeamDic[id] = {} end for order, defaultTeamId in pairs(chapter.DefaultTeamIds) do Chapter2DefaultTeamDic[id][order] = XExpeditionConfig.GetDefaultTeamCfgByTeamId(defaultTeamId) end end for id, childCombo in pairs(ChildComboConfig) do if childCombo.DefaultTeamId > 0 then DefaultTeamId2ChildComboDic[childCombo.DefaultTeamId] = childCombo end end end function XExpeditionConfig.Init() InitConfig() GetNewBaseConfigId() InitStages() InitCharacter() InitRank2CharacterDic() InitComboConfig() InitTeam() end function XExpeditionConfig.GetExpeditionConfig() return BaseConfig end function XExpeditionConfig.GetExpeditionConfigById(Id) return BaseConfig[Id] or BaseConfig[NewBaseConfigIndex] end function XExpeditionConfig.GetLastestExpeditionConfig() if NewBaseConfigIndex == 0 then return BaseConfig[1] end return BaseConfig[NewBaseConfigIndex] end function XExpeditionConfig.GetEChapterCfg() return ChapterConfig end function XExpeditionConfig.GetChapterCfgById(chapterId) if not ChapterConfig[chapterId] then XLog.ErrorTableDataNotFound("XExpeditionConfig.GetChapterCfgById", "虚像地平线章节数据", TABLE_EXPEDITION_CHAPTER, "Id", tostring(chapterId)) return nil end return ChapterConfig[chapterId] end function XExpeditionConfig.GetChapterRewardIdById(chapterId) return ChapterConfig[chapterId] and ChapterConfig[chapterId].RewardId or 0 end --============== --根据章节返回【【关卡层】】列表 --返回的是关卡层列表,不是关卡 --============== function XExpeditionConfig.GetEStageListByChapterId(chapterId) return Chapter2StageDic[chapterId] or {} end --============== --根据关卡层Id返回该层所有关卡Id列表 --返回的是关卡 --============== function XExpeditionConfig.GetEStageIdsByTierId(tierId) if not TierId2StageIdDic[tierId] then XLog.ErrorTableDataNotFound( "XExpeditionConfig.GetEStageIdsByTierId", "虚像地平线关卡数据", TABLE_EXPEDITION_STAGE, "TierId", tostring(tierId)) return nil end return TierId2StageIdDic[tierId] end --============== --根据章节Id返回该章节所有关卡Id列表 --返回的是关卡 --============== function XExpeditionConfig.GetEStageIdsByChapterId(chapterId) if not Chapter2StageIdDic[chapterId] then XLog.ErrorTableDataNotFound( "XExpeditionConfig.GetEStageIdsByChapterId", "虚像地平线关卡数据", TABLE_EXPEDITION_STAGE, "chapterId", tostring(chapterId)) return nil end return Chapter2StageIdDic[chapterId] end function XExpeditionConfig.GetStageList() return StageToEStageDic end function XExpeditionConfig.GetEStageByStageId(stageId) return StageToEStageDic[stageId] end function XExpeditionConfig.GetEStageIdByStageId(stageId) return StageToEStageDic[stageId] and StageToEStageDic[stageId].Id end function XExpeditionConfig.GetOrderIdByStageId(stageId) return StageToEStageDic[stageId].OrderId end function XExpeditionConfig.GetBaseCharacterCfg() return BaseCharacterConfig end function XExpeditionConfig.GetBaseCharacterCfgById(baseId) return BaseCharacterConfig[baseId] end function XExpeditionConfig.GetBaseIdByECharId(eCharacterId) return CharacterConfig[eCharacterId].BaseId end function XExpeditionConfig.GetCharacterIdByBaseId(baseId) return BaseCharacterConfig[baseId] and BaseCharacterConfig[baseId].CharacterId or 0 end function XExpeditionConfig.GetCharacterElementByBaseId(baseId) return BaseCharacterConfig[baseId] and BaseCharacterConfig[baseId].Elements or {} end function XExpeditionConfig.GetCharacterMaxRankByBaseId(baseId) return Rank2CharacterDic[baseId].MaxRank end function XExpeditionConfig.GetCharacterCfgByBaseIdAndRank(baseId, rank) local base = Rank2CharacterDic[baseId] if not base then return nil end if base.MaxRank < rank then return base[base.MaxRank] else return base[rank] end end function XExpeditionConfig.GetCharacterCfgs() return CharacterConfig end function XExpeditionConfig.GetCharacterCfgById(Id) if not CharacterConfig[Id] then XLog.ErrorTableDataNotFound("XExpeditionConfig.GetCharacterById", "虚像地平线角色", TABLE_EXPEDITION_CHARACTER, "Id", tostring(Id)) end return CharacterConfig[Id] end function XExpeditionConfig.GetEStageCfg(EStageId) if not EStageConfig[EStageId] then XLog.ErrorTableDataNotFound("XExpeditionConfig.GetEStageCfg", "虚像地平线关卡", TABLE_EXPEDITION_STAGE, "Id", tostring(EStageId)) return nil end return EStageConfig[EStageId] end function XExpeditionConfig.GetCharacterElementById(elementId) return CharacterElements[elementId] end function XExpeditionConfig.GetComboTable() return ComboConfig end function XExpeditionConfig.GetChildComboTable() return ChildComboConfig end --================ --根据子羁绊类型Id获取具体羁绊列表 --================ function XExpeditionConfig.GetComboByChildComboId(childComboId) if not BaseComboDic[childComboId] then XLog.ErrorTableDataNotFound( "XExpeditionConfig.GetComboByChildComboId", "虚像地平线成员组合数据", TABLE_EXPEDITION_COMBO, "ChildComboId", tostring(childComboId)) return nil end return BaseComboDic[childComboId] end function XExpeditionConfig.GetChildComboById(id) if not ChildComboConfig[id] then XLog.ErrorTableDataNotFound("XExpeditionConfig.GetEStageCfg", "虚像地平线羁绊子分类数据", TABLE_EXPEDITION_CHILDCOMBO, "Id", tostring(id)) return nil end return ChildComboConfig[id] end function XExpeditionConfig.GetComboById(comboId) if not ComboConfig[comboId] then XLog.ErrorTableDataNotFound("XExpeditionConfig.GetComboById", "虚像地平线阵容", TABLE_EXPEDITION_COMBO, "Id", tostring(comboId)) return nil end return ComboConfig[comboId] end function XExpeditionConfig.GetCharactersByCharacterType(typeId) if not Type2CharacterDic[typeId] then XLog.ErrorTableDataNotFound("XExpeditionConfig.GetCharactersByCharacterType", "虚像地平线角色词条", TABLE_EXPEDITION_CHARACTER_TYPE, "Id", tostring(typeId)) return nil end return Type2CharacterDic[typeId] end function XExpeditionConfig.IsCharacterHasTypes(characterId, typeIds) for _, typeId in pairs(typeIds) do local id = tonumber(typeId) if not Type2CharacterDic[id] or not Type2CharacterDic[id][characterId] then return false end end return true end function XExpeditionConfig.GetBaseComboTypeConfig() return ComboTypeNameConfig end function XExpeditionConfig.GetBaseComboTypeCfgByOrderId(orderId) return Order2ComboTypeDic[orderId] end function XExpeditionConfig.GetBaseComboTypeNameById(id) return ComboTypeNameConfig[id].Name or "" end function XExpeditionConfig.GetBuyDrawMaxTime() return #DrawConsumeConfig end function XExpeditionConfig.GetDrawPriceByCount(count) return DrawConsumeConfig[count] and DrawConsumeConfig[count].ConsumeCount or 0 end function XExpeditionConfig.GetGlobalConfigs() return GlobalComboConfig end function XExpeditionConfig.GetGlobalConfigById(comboId) return GlobalComboConfig[comboId] end function XExpeditionConfig.GetRankByRankWeightId(index) return DrawRankConfig[index] and DrawRankConfig[index].Rank or 1 end --================ --获取队伍位置数据 --@param teamPosId:位置ID --================ function XExpeditionConfig.GetTeamPosCfgById(teamPosId) if not TeamPosConfig[teamPosId] then XLog.ErrorTableDataNotFound( "XExpeditionConfig.GetTeamPosCfgById", "虚像地平线队伍位置数据", TABLE_EXPEDITION_TEAMPOS, "Id", tostring(teamPosId)) return nil end return TeamPosConfig[teamPosId] end --================ --获取队伍位置数量 --================ function XExpeditionConfig.GetTeamPosListByChapterId(currentChapterId) if not TeamPosConfig or not Chapter2TeamPosDic or not Chapter2TeamPosDic[currentChapterId] then return 0 end return Chapter2TeamPosDic[currentChapterId] end --================ --获取招募概率配置表 --================ function XExpeditionConfig.GetDrawPRConfig() return DrawPRConfig end --================ --获取招募星数对照表配置 --================ function XExpeditionConfig.GetDrawRankConfig() return DrawRankConfig end --================ --获取所有关卡层配置 --================ function XExpeditionConfig.GetAllStageTierConfig() return StageTierConfig end --================ --根据章节ID获取关卡层列表(按OrderId排列)配置 --@param chapterId:章节ID --@param noTips:是否要打印错误日志信息 --================ function XExpeditionConfig.GetStageTierListByChapterId(chapterId, noTips) if not Chapter2StageTierDic[chapterId] then if not noTips then XLog.ErrorTableDataNotFound( "XExpeditionConfig.GetStageTierListByChapterId", "虚像地平线关卡层数据", TABLE_EXPEDITION_STAGETIER, "ChapterId", tostring(chapterId)) end return nil end return Chapter2StageTierDic[chapterId] end --================ --根据关卡层ID获取关卡层配置 --@param tierId:关卡层ID --@param noTips:是否要打印错误日志信息 --================ function XExpeditionConfig.GetStageTierConfigByTierId(tierId, noTips) if not StageTierConfig[tierId] then if not noTips then XLog.ErrorTableDataNotFound( "XExpeditionConfig.GetStageTierConfigByTierId", "虚像地平线关卡层数据", TABLE_EXPEDITION_STAGETIER, "Id", tostring(tierId)) end return nil end return StageTierConfig[tierId] end --================ --获取所有预设队伍配置 --================ function XExpeditionConfig.GetAllDefaultTeamCfgs() return DefaultTeamConfig end --================ --根据章节ID获取预设队伍配置列表 --@param chapterId:章节ID --@param noTips:是否要打印错误日志信息 --================ function XExpeditionConfig.GetDefaultTeamCfgsByChapterId(chapterId, noTips) if not Chapter2DefaultTeamDic[chapterId] then if not noTips then XLog.ErrorTableDataNotFound( "XExpeditionConfig.GetDefaultTeamCfgsByChapterId", "虚像地平线关卡层数据", TABLE_EXPEDITION_CHAPTER, "Id", tostring(chapterId)) end return nil end return Chapter2DefaultTeamDic[chapterId] end --================ --根据预设队伍ID获取预设队伍配置 --@param teamId:队伍Id --@param noTips:是否要打印错误日志信息 --================ function XExpeditionConfig.GetDefaultTeamCfgByTeamId(teamId, noTips) if not DefaultTeamConfig[teamId] then if not noTips then XLog.ErrorTableDataNotFound( "XExpeditionConfig.GetDefaultTeamCfgByTeamId", "虚像地平线关卡层数据", TABLE_EXPEDITION_DEFAULT_TEAM, "TeamId", tostring(teamId)) end return nil end return DefaultTeamConfig[teamId] end --================ --根据预设队伍ID获取对应队伍羁绊配置 --@param teamId:队伍Id --@param noTips:是否要打印错误日志信息 --================ function XExpeditionConfig.GetChildComboByDefaultTeamId(teamId, noTips) if not DefaultTeamId2ChildComboDic[teamId] then if not noTips then XLog.ErrorTableDataNotFound( "XExpeditionConfig.GetChildComboByDefaultTeamId", "虚像地平线基础羁绊数据", TABLE_EXPEDITION_CHILDCOMBO, "DefaultTeamId", tostring(teamId)) end return nil end return DefaultTeamId2ChildComboDic[teamId] end