forked from endernon/PGRData
596 lines
22 KiB
Lua
596 lines
22 KiB
Lua
--===========================
|
||
--公会战配置读写
|
||
--模块负责:吕天元
|
||
--===========================
|
||
---@class XGuildWarConfig
|
||
XGuildWarConfig = XConfigCenter.CreateTableConfig(XGuildWarConfig, "XGuildWarConfig")
|
||
local XGuildWarConfig = XGuildWarConfig
|
||
--=============== 玩法枚举与常数定义 ===============
|
||
|
||
--region 玩法枚举与常数定义
|
||
--功能关闭测试开关(打开时客户端公会功能会关闭)
|
||
XGuildWarConfig.CLOSE_DEBUG = false
|
||
--公会轮数
|
||
XGuildWarConfig.ROUND_NUM = 3
|
||
-- 遮罩 key
|
||
XGuildWarConfig.MASK_KEY = "GuildWar"
|
||
|
||
--排位榜类型枚举
|
||
XGuildWarConfig.RankingType = {
|
||
Guild = 1, --公会排行榜
|
||
Round = 2, --轮次排行榜
|
||
Node = 3, --节点排行榜
|
||
Elite = 4, --精英怪排行榜
|
||
NodeStay = 5, --节点停留排行榜
|
||
HideNodeRank = 6, --隐藏节点排行榜,ID为轮次ID
|
||
}
|
||
--排位榜排位对象枚举
|
||
XGuildWarConfig.RankingTarget = {
|
||
Guild = 1, --公会排行榜
|
||
Player = 2, --玩家排行榜
|
||
Secret = 3, --隐藏节点排行榜
|
||
}
|
||
--地图节点类型枚举
|
||
XGuildWarConfig.NodeType = {
|
||
Home = 1, -- 基地
|
||
Normal = 2, -- 普通点
|
||
Buff = 3, -- buff
|
||
Sentinel = 4, -- 前哨
|
||
Guard = 5, -- 近卫区
|
||
Infect = 6, -- 感染区
|
||
PandaRoot = 7, -- 二期黑白鲨boss
|
||
PandaChild = 8, -- 二期黑白鲨boss
|
||
TwinsRoot = 9, --三期双子BOSS根节点 也是合体后的节点 策划要求新建种类代码
|
||
TwinsChild = 10, --三期双子BOSS 单体节点 策划要求新建种类代码
|
||
Term3SecretRoot = 11, --三期隐藏节点根节点 (视未来变化 看看是通用节点 还是三期特有节点)
|
||
Term3SecretChild = 13, --三期隐藏节点子节点 (视未来变化 看看是通用节点 还是三期特有节点)
|
||
SecondarySentinel = 12, --三期新增通用节点 次级前哨(小前哨)
|
||
Term4BossRoot = 14, -- 复刷boss节点
|
||
Term4BossChild = 15, -- 复刷boss节点击杀前置后复活后置
|
||
Blockade = 16, --封锁点
|
||
}
|
||
--头目节点类型
|
||
XGuildWarConfig.BossNodeType = {
|
||
[XGuildWarConfig.NodeType.Infect] = true,
|
||
[XGuildWarConfig.NodeType.PandaRoot] = true,
|
||
[XGuildWarConfig.NodeType.TwinsRoot] = true,
|
||
[XGuildWarConfig.NodeType.Term4BossRoot] = true,
|
||
}
|
||
--二期特殊黑白鲨节点类型
|
||
XGuildWarConfig.PandaNodeType = {
|
||
[XGuildWarConfig.NodeType.PandaRoot] = true,
|
||
[XGuildWarConfig.NodeType.PandaChild] = true,
|
||
}
|
||
--三期特殊双子节点类型
|
||
XGuildWarConfig.TwinsNodeType = {
|
||
[XGuildWarConfig.NodeType.TwinsRoot] = true,
|
||
[XGuildWarConfig.NodeType.TwinsChild] = true,
|
||
}
|
||
--四期特殊双子节点类型
|
||
XGuildWarConfig.Term4BossNodeType = {
|
||
[XGuildWarConfig.NodeType.Term4BossRoot] = true,
|
||
[XGuildWarConfig.NodeType.Term4BossChild] = true,
|
||
}
|
||
--最终的关卡类型(BOSS节点)
|
||
XGuildWarConfig.LastNodeType = {
|
||
[XGuildWarConfig.NodeType.Infect] = true,
|
||
[XGuildWarConfig.NodeType.PandaRoot] = true,
|
||
[XGuildWarConfig.NodeType.TwinsRoot] = true,
|
||
[XGuildWarConfig.NodeType.Term4BossRoot] = true,
|
||
}
|
||
--节点状态类型
|
||
XGuildWarConfig.NodeStatusType = {
|
||
Alive = 0, -- 活着
|
||
Revive = 1, -- 复活
|
||
Die = 2, -- 死亡
|
||
}
|
||
--子节点顺序(二期命名PandaType, 四期改为ChildNodeIndex)
|
||
XGuildWarConfig.ChildNodeIndex = {
|
||
None = 0,
|
||
Left = 1,
|
||
Right = 2,
|
||
}
|
||
--任务类型
|
||
XGuildWarConfig.BaseTaskType = {
|
||
Round = 1, --轮次任务
|
||
Global = 2, --全局任务
|
||
}
|
||
--子任务类型
|
||
XGuildWarConfig.SubTaskType = {
|
||
Real = 1, --真任务
|
||
Hp = 2, --基地血量任务
|
||
Difficulty = 3, --难度任务
|
||
Rank = 4, --排行榜任务
|
||
}
|
||
--公会战任务类型(配置表XGuildWarTask的Id)
|
||
XGuildWarConfig.TaskType = {
|
||
First = 1, --第一轮任务
|
||
Second = 2, --第二轮任务
|
||
Third = 3, --第三轮任务
|
||
Activity = 0, --周期任务
|
||
}
|
||
-- 播放行动Action的UI类型
|
||
XGuildWarConfig.GWActionUiType = {
|
||
GWMap = 100, --地图界面
|
||
Panda = 222, --二期黑白鲨界面
|
||
Twins = 333, --三期双子界面
|
||
NodeDestroyed = 900, --节点破坏动画 顺序比较特殊
|
||
}
|
||
-- 行动Action类型 , 与服务器XGuildWarActionType同步
|
||
XGuildWarConfig.GWActionType = {
|
||
MonsterDead = 1, -- 怪物死亡
|
||
MonsterBorn = 2, -- 怪物出生
|
||
MonsterMove = 3, -- 怪物移动
|
||
BaseBeHit = 4, --基地被撞击
|
||
NodeDestroyed = 5, --节点被破坏
|
||
NextTurn = 6, --下一行动回合(并非轮次 而是动画回合) 服务器叫 EightClockAlarm 8点
|
||
TransferWeakness = 7, --交换弱点
|
||
AllGuardNodeDead = 8, -- 全部近卫区死亡,boss准备炮击倒计时
|
||
BaseBeHitByBoss = 9, -- boss炮击基地
|
||
RoundStart = 10, -- 轮次开始时,
|
||
BossMerge = 11, -- BOSS合体
|
||
BossTreatMonster = 12, --BOSS治疗怪物
|
||
--前哨怪物出生时间改变
|
||
--1、小前哨被攻破,减少前哨站怪物出生CD,如果前哨站上刚好有怪物,则怪物满血
|
||
--2、BUFF点效果,延长怪物刷新时间
|
||
MonsterBornTimeChange = 13,
|
||
}
|
||
-- 行动播放类型表 确定某种类型 会播放什么动画并且获取排序(三期是根据UI分类决定动画的列表和顺序 所以播放类型==UI类型)
|
||
-- 以下是三期顺序
|
||
XGuildWarConfig.GWPlayType2Action = {
|
||
[XGuildWarConfig.GWActionUiType.GWMap] = { --地图界面
|
||
XGuildWarConfig.GWActionType.RoundStart, --小前哨、前哨站出生特效
|
||
XGuildWarConfig.GWActionType.MonsterMove, --精英怪移动
|
||
XGuildWarConfig.GWActionType.BaseBeHit, --精英怪碰撞基地
|
||
XGuildWarConfig.GWActionType.MonsterBornTimeChange, --小前哨被击破特效 获得增益(增益生效时才播放)
|
||
XGuildWarConfig.GWActionType.MonsterBorn, --精英怪出生
|
||
XGuildWarConfig.GWActionType.MonsterDead, --精英怪死亡
|
||
XGuildWarConfig.GWActionType.BossMerge, --Boss合体
|
||
XGuildWarConfig.GWActionType.BossTreatMonster, --BOSS治疗怪物
|
||
},
|
||
[XGuildWarConfig.GWActionUiType.Panda] = { --二期黑白鲨界面
|
||
XGuildWarConfig.GWActionType.TransferWeakness,
|
||
},
|
||
[XGuildWarConfig.GWActionUiType.Twins] = { --三期双子界面
|
||
XGuildWarConfig.GWActionType.BossMerge,
|
||
},
|
||
[XGuildWarConfig.GWActionUiType.NodeDestroyed] = { --节点破坏动画 顺序比较特殊
|
||
XGuildWarConfig.GWActionType.NodeDestroyed,
|
||
},
|
||
}
|
||
--FightType, 与服务器XGuildWarFightType同步
|
||
XGuildWarConfig.NodeFightType = {
|
||
FightNode = 1, -- 节点
|
||
FightMonster = 2, -- 怪物
|
||
}
|
||
--动画类型
|
||
XGuildWarConfig.ActionShowType = {
|
||
Now = 1, -- 当前
|
||
History = 2, -- 历史
|
||
}
|
||
--日志类型 战斗
|
||
XGuildWarConfig.BattleLogType = {
|
||
FirstAttack = 1, -- 首刀
|
||
LasAttack = 2, -- 尾刀
|
||
}
|
||
--日志类型 生存 死亡
|
||
XGuildWarConfig.FightRecordAliveType = {
|
||
Alive = 1,
|
||
Die = 2
|
||
}
|
||
--日志文本配置
|
||
XGuildWarConfig.BattleLogTextConfig = {
|
||
[XGuildWarConfig.BattleLogType.FirstAttack] = {
|
||
[XGuildWarConfig.NodeType.Normal] = "GuildWarCommonLog",
|
||
[XGuildWarConfig.NodeType.Sentinel] = "GuildWarCommonLog",
|
||
[XGuildWarConfig.NodeType.Buff] = "GuildWarCommonLog",
|
||
[XGuildWarConfig.NodeType.Guard] = "GuildWarCommonLog",
|
||
[XGuildWarConfig.NodeType.Infect] = "GuildWarCommonLog",
|
||
[XGuildWarConfig.NodeType.PandaRoot] = "GuildWarCommonLog",
|
||
[XGuildWarConfig.NodeType.PandaChild] = "GuildWarCommonLog",
|
||
[XGuildWarConfig.NodeType.TwinsRoot] = "GuildWarCommonLog",
|
||
[XGuildWarConfig.NodeType.TwinsChild] = "GuildWarCommonLog",
|
||
[XGuildWarConfig.NodeType.Term3SecretRoot] = "GuildWarCommonLog",
|
||
[XGuildWarConfig.NodeType.SecondarySentinel] = "GuildWarCommonLog",
|
||
[XGuildWarConfig.NodeType.Term4BossChild] = "GuildWarCommonLog",
|
||
[XGuildWarConfig.NodeType.Term4BossRoot] = "GuildWarCommonLog",
|
||
[XGuildWarConfig.NodeType.Blockade] = "GuildWarCommonLog",
|
||
},
|
||
[XGuildWarConfig.BattleLogType.LasAttack] = {
|
||
[XGuildWarConfig.NodeType.Normal] = "GuildWarNormalLog",
|
||
[XGuildWarConfig.NodeType.Sentinel] = "GuildWarSentinelLog",
|
||
[XGuildWarConfig.NodeType.Buff] = "GuildWarBuffLog",
|
||
[XGuildWarConfig.NodeType.Guard] = "GuildWarGuardLog",
|
||
[XGuildWarConfig.NodeType.Infect] = "GuildWarInfectLog",
|
||
[XGuildWarConfig.NodeType.PandaRoot] = "GuildWarInfectLog",
|
||
[XGuildWarConfig.NodeType.PandaChild] = "GuildWarInfectLog",
|
||
[XGuildWarConfig.NodeType.TwinsRoot] = "GuildWarInfectLog",
|
||
[XGuildWarConfig.NodeType.TwinsChild] = "GuildWarInfectLog",
|
||
[XGuildWarConfig.NodeType.Term3SecretRoot] = "GuildWarNormalLog",
|
||
[XGuildWarConfig.NodeType.SecondarySentinel] = "GuildWarSentinelLog",
|
||
[XGuildWarConfig.NodeType.Term4BossChild] = "GuildWarInfectLog",
|
||
[XGuildWarConfig.NodeType.Term4BossRoot] = "GuildWarInfectLog",
|
||
[XGuildWarConfig.NodeType.Blockade] = "GuildWarNormalLog",
|
||
}
|
||
}
|
||
XGuildWarConfig.BattleDeadNodeLogTextConfig = {
|
||
[XGuildWarConfig.NodeType.Sentinel] = "GuildWarDeadSentinelLog",
|
||
[XGuildWarConfig.NodeType.Infect] = "GuildWarDeadInfectLog",
|
||
[XGuildWarConfig.NodeType.PandaRoot] = "GuildWarDeadInfectLog",
|
||
[XGuildWarConfig.NodeType.PandaChild] = "GuildWarDeadInfectLog",
|
||
[XGuildWarConfig.NodeType.TwinsRoot] = "GuildWarDeadInfectLog",
|
||
[XGuildWarConfig.NodeType.TwinsChild] = "GuildWarDeadInfectLog",
|
||
[XGuildWarConfig.NodeType.Term4BossChild] = "GuildWarDeadInfectLog",
|
||
[XGuildWarConfig.NodeType.Term4BossRoot] = "GuildWarDeadInfectLog",
|
||
[XGuildWarConfig.NodeType.Blockade] = "GuildWarDeadInfectLog",
|
||
}
|
||
--常量配置
|
||
XGuildWarConfig.ActivityPointItemId = 96114 -- 活动体力配置
|
||
--多队伍攻略区域 队伍的数据种类
|
||
XGuildWarConfig.AreaTeamDataType = {
|
||
Uninit = 0, --未初始化
|
||
Custom = 1, --自定义
|
||
Locked = 2, --锁定
|
||
}
|
||
|
||
XGuildWarConfig.RewardStatus = {
|
||
Incomplete = 1,
|
||
Complete = 2,
|
||
Received = 3,
|
||
}
|
||
|
||
--endregion
|
||
|
||
--=============
|
||
--自动配置
|
||
--TableName : 表名,对应需要读取的表的文件名字,不写即为枚举的Key字符串
|
||
--ReadFuncName : 读取表格的方法,默认为ReadByIntKey
|
||
--ReadKeyName : 读取表格的字段名,默认为Id
|
||
--DirType : 读取的文件夹类型XConfigCenter.DirectoryType,默认是Share
|
||
--LogKey : GetCfgByIdKey方法idKey找不到时所输出的日志信息,默认是唯一Id
|
||
--=============
|
||
-- 配置文件所属于的文件夹名称
|
||
XGuildWarConfig.DirectoryName = "GuildWar"
|
||
XGuildWarConfig.TableKey = enum({
|
||
Activity = { TableName = "GuildWarActivity" }, --活动配置
|
||
Config = { TableName = "GuildWarConfig", ReadFuncName = "ReadByStringKey", ReadKeyName = "Key" }, --活动字符串配置
|
||
Difficulty = { TableName = "GuildWarDifficulty" }, --难度配置
|
||
EliteMonster = { TableName = "GuildWarEliteMonster" }, --精英怪配置
|
||
Node = { TableName = "GuildWarNode" }, --节点配置
|
||
ClientConfig = { DirType = XConfigCenter.DirectoryType.Client, TableName = "GuildWarClientConfig", ReadFuncName = "ReadByStringKey", ReadKeyName = "Key" }, --客户端灵活配置
|
||
MonsterPatrol = { TableName = "GuildWarMonsterPatrol" }, --精英怪巡逻配置
|
||
Buff = { TableName = "GuildWarBuff" }, --buff配置
|
||
SpecialRole = { TableName = "GuildWarSpecialRole" }, --特攻角色列表
|
||
SpecialTeam = { TableName = "GuildWarSpecialRoleTeam" }, --特攻角色队伍Buff
|
||
TaskType = { DirType = XConfigCenter.DirectoryType.Client, TableName = "GuildWarTaskType" }, --公会战任务类型配置
|
||
Task = { TableName = "GuildWarTask" }, --公会战任务配置
|
||
Stage = { TableName = "GuildWarStage" }, -- 关卡表
|
||
RankingType = { DirType = XConfigCenter.DirectoryType.Client, TableName = "GuildWarRankingType" },
|
||
Round = { TableName = "GuildWarRound" },
|
||
BossReward = { TableName = "GuildWarBossReward" },
|
||
})
|
||
--关卡配置初始化方法 --
|
||
function XGuildWarConfig.Init()
|
||
end
|
||
--通过当前配置了OpenTimeId的活动ID获取活动配置(只能有一个活动可配OpenTimeId)
|
||
function XGuildWarConfig.GetCurrentActivity()
|
||
for _, cfg in pairs(XGuildWarConfig.GetAllConfigs(XGuildWarConfig.TableKey.Activity)) do
|
||
if cfg.TimeId and cfg.TimeId > 0 then
|
||
return cfg
|
||
end
|
||
end
|
||
-- 策划确实关闭了活动,不配置timeId,故不需要error
|
||
--XLog.Error("XGuildWarConfig.GetCurrentActivity error:没有任何一项活动配置了OpenTimeId!请检查配置:" .. XGuildWarConfig.TableKey.Activity.TableName)
|
||
return nil
|
||
end
|
||
--ShareConfig
|
||
function XGuildWarConfig.GetServerConfigValue(key)
|
||
return XGuildWarConfig.GetCfgByIdKey(XGuildWarConfig.TableKey.Config, key).Value
|
||
end
|
||
--ClientConfig
|
||
function XGuildWarConfig.GetClientConfigValues(Key, valueType)
|
||
local cfg = XGuildWarConfig.GetCfgByIdKey(XGuildWarConfig.TableKey.ClientConfig, Key)
|
||
local values = cfg and cfg.Values
|
||
local tagValues = {}
|
||
|
||
if valueType == "Int" or valueType == "Float" then
|
||
for _, value in pairs(values or {}) do
|
||
table.insert(tagValues, tonumber(value))
|
||
end
|
||
else
|
||
tagValues = values
|
||
end
|
||
|
||
return tagValues
|
||
end
|
||
|
||
--region 难度位置
|
||
local function GetDifficultyConfig(difficultyId)
|
||
local cfg = XGuildWarConfig.GetCfgByIdKey(
|
||
XGuildWarConfig.TableKey.Difficulty,
|
||
difficultyId,
|
||
true
|
||
)
|
||
return cfg
|
||
end
|
||
--获取难度通关奖励
|
||
function XGuildWarConfig.GetDifficultyPassRewardId(difficultyId)
|
||
return XGuildWarConfig.GetClientConfigValues("PassRewardShow", "Int")[difficultyId]
|
||
end
|
||
--获取该难度的战斗事件
|
||
function XGuildWarConfig.GetDifficultyFightEvents(difficultyId)
|
||
local cfg = GetDifficultyConfig(difficultyId)
|
||
return cfg.FightEventIds
|
||
end
|
||
--获取该难度的前置难度(通关前置难度才能挑战)
|
||
function XGuildWarConfig.GetDifficultyPreId(difficultyId)
|
||
local cfg = GetDifficultyConfig(difficultyId)
|
||
return cfg and cfg.PreId or "???"
|
||
end
|
||
--endregion
|
||
|
||
--region 节点配置
|
||
--获取配置
|
||
function XGuildWarConfig.GetNodeConfig(id)
|
||
return XGuildWarConfig.GetCfgByIdKey(XGuildWarConfig.TableKey.Node, id)
|
||
end
|
||
--获取节点类型
|
||
function XGuildWarConfig.GetNodeType(nodeId)
|
||
return XGuildWarConfig.GetNodeConfig(nodeId).Type
|
||
end
|
||
--获取节点头像
|
||
function XGuildWarConfig.GetNodeIcon(nodeId)
|
||
return XGuildWarConfig.GetNodeConfig(nodeId).Icon
|
||
end
|
||
--获取节点的难度
|
||
function XGuildWarConfig.GetNodeDifficultyId(nodeId)
|
||
return XGuildWarConfig.GetNodeConfig(nodeId).DifficultyId
|
||
end
|
||
--获取怪物头像
|
||
function XGuildWarConfig.GetNodeShowMonsterIcon(nodeId)
|
||
return XGuildWarConfig.GetNodeConfig(nodeId).ShowMonsterIcon
|
||
end
|
||
--获取怪物名字
|
||
function XGuildWarConfig.GetNodeShowMonsterName(nodeId)
|
||
return XGuildWarConfig.GetNodeConfig(nodeId).ShowMonsterName
|
||
end
|
||
--获取节点名字
|
||
function XGuildWarConfig.GetNodeName(nodeId)
|
||
return XGuildWarConfig.GetNodeConfig(nodeId).Name
|
||
end
|
||
--获取节点描述
|
||
function XGuildWarConfig.GetNodeDesc(nodeId)
|
||
return XGuildWarConfig.GetNodeConfig(nodeId).Desc
|
||
end
|
||
--获取工会战关卡配置ID
|
||
function XGuildWarConfig.GetNodeGuildWarStageId(nodeId)
|
||
return XGuildWarConfig.GetNodeConfig(nodeId).GuildWarStageId
|
||
end
|
||
--通过难度获取该难度下所有节点ID
|
||
function XGuildWarConfig.GetNodeIdsByDifficultyId(difficultyId)
|
||
local result = {}
|
||
local configs = XGuildWarConfig.GetAllConfigs(XGuildWarConfig.TableKey.Node)
|
||
for _, config in pairs(configs) do
|
||
if config.DifficultyId == difficultyId then
|
||
table.insert(result, config.Id)
|
||
end
|
||
end
|
||
return result
|
||
end
|
||
-- 获取节点模型显示
|
||
function XGuildWarConfig.GetNodeModelId(nodeId)
|
||
return XGuildWarConfig.GetNodeConfig(nodeId).ModelId
|
||
end
|
||
--获取该难度下推荐的工会活跃度
|
||
function XGuildWarConfig.GetDifficultyRecommendActivation(difficultyId)
|
||
local cfg = GetDifficultyConfig(difficultyId)
|
||
return cfg and cfg.RecommendActive or "???"
|
||
end
|
||
--获取节点的攻击伤害(BOSS节点才使用的功能)
|
||
function XGuildWarConfig.GetNodeAttackBaseDamage(nodeId)
|
||
local config = XGuildWarConfig.GetNodeConfig(nodeId)
|
||
return config and config.AttackBaseDamage
|
||
end
|
||
--获取路线上的前一个节点
|
||
function XGuildWarConfig.GetFrontNodeIdsByNodeId(nodeId)
|
||
local ids = XGuildWarConfig.GetNodeIdsByDifficultyId(XGuildWarConfig.GetNodeDifficultyId(nodeId))
|
||
local result = {}
|
||
for _, id in ipairs(ids) do
|
||
if table.contains(XGuildWarConfig.GetNodeConfig(id).LinkIds, nodeId) then
|
||
table.insert(result, id)
|
||
end
|
||
end
|
||
return result
|
||
end
|
||
|
||
--region 子节点系统
|
||
local _ChildNodes = {}
|
||
-- id array
|
||
-- 获取子节点配置
|
||
local function GetNodesChildren(nodeId)
|
||
if not _ChildNodes[nodeId] then
|
||
local nodeConfig = XGuildWarConfig.GetAllConfigs(XGuildWarConfig.TableKey.Node)
|
||
local childNodes = {}
|
||
for id, config in pairs(nodeConfig) do
|
||
if config.RootId == nodeId then
|
||
childNodes[#childNodes + 1] = config.Id
|
||
end
|
||
end
|
||
_ChildNodes[nodeId] = childNodes
|
||
table.sort(childNodes, function(a, b)
|
||
return a < b
|
||
end)
|
||
end
|
||
return _ChildNodes[nodeId]
|
||
end
|
||
-- 获取子节点虚弱文字
|
||
function XGuildWarConfig.GetChildNodeTextWeakness(nodeId, childIndex)
|
||
local nodes = GetNodesChildren(nodeId)
|
||
local id = nodes[childIndex]
|
||
local config = XGuildWarConfig.GetNodeConfig(id)
|
||
return config and config.DescWeakness or "???"
|
||
end
|
||
-- 获取子节点ID
|
||
function XGuildWarConfig.GetChildNodeId(nodeId, childIndex)
|
||
local nodes = GetNodesChildren(nodeId)
|
||
local id = nodes[childIndex]
|
||
return id
|
||
end
|
||
-- 获取所有子节点ID
|
||
function XGuildWarConfig.GetNodesChildren(nodeId)
|
||
return GetNodesChildren(nodeId)
|
||
end
|
||
-- 获取子节点数量
|
||
function XGuildWarConfig.GetChildrenNumber(nodeId)
|
||
local nodes = GetNodesChildren(nodeId)
|
||
local number = #nodes
|
||
return number
|
||
end
|
||
-- 获取子节点模型显示
|
||
function XGuildWarConfig.GetChildNodeModelId(nodeId, childIndex)
|
||
local nodeId = XGuildWarConfig.GetChildNodeId(nodeId, childIndex)
|
||
return XGuildWarConfig.GetNodeConfig(nodeId).ModelId
|
||
end
|
||
-- 获取子节点在父节点的顺序
|
||
function XGuildWarConfig.GetChildNodeIndex(nodeId)
|
||
local parentNodeId = XGuildWarConfig.GetNodeConfig(nodeId).RootId
|
||
if not parentNodeId then
|
||
return 0
|
||
end
|
||
local index = 1
|
||
while true do
|
||
local childId = XGuildWarConfig.GetChildNodeId(parentNodeId, index)
|
||
if childId then
|
||
if childId == nodeId then
|
||
return index
|
||
end
|
||
index = index + 1
|
||
else
|
||
break
|
||
end
|
||
end
|
||
return 0
|
||
end
|
||
--endregion
|
||
|
||
--region 二期黑白鲨节点专用
|
||
--获取黑白鲨子节点类型
|
||
function XGuildWarConfig.GetChildIndexByNodeId(nodeId)
|
||
return XGuildWarConfig.GetChildNodeIndex(nodeId)
|
||
end
|
||
--endregion
|
||
|
||
--endregion
|
||
|
||
-- 获取特攻角色数据
|
||
function XGuildWarConfig.GetSpecialRoles()
|
||
return XGuildWarConfig.GetAllConfigs(XGuildWarConfig.TableKey.SpecialRole)
|
||
end
|
||
|
||
-- 获取特攻角色数据
|
||
function XGuildWarConfig.GetSpecialRole(characterId)
|
||
local cfg = XGuildWarConfig.GetAllConfigs(XGuildWarConfig.TableKey.SpecialRole)[characterId]
|
||
if not cfg then
|
||
XLog.Error("GuildWarConfig Does not exist special role:" .. characterId)
|
||
end
|
||
return cfg
|
||
end
|
||
|
||
-- 获取关卡ID
|
||
function XGuildWarConfig.GetStageId(guildWarStageId)
|
||
return XGuildWarConfig.GetCfgByIdKey(XGuildWarConfig.TableKey.Stage, guildWarStageId).StageId
|
||
end
|
||
|
||
-- 获取关卡推荐战力
|
||
function XGuildWarConfig.GetStageAbility(guildWarStageId)
|
||
return XGuildWarConfig.GetCfgByIdKey(XGuildWarConfig.TableKey.Stage, guildWarStageId).Ability
|
||
end
|
||
|
||
-- 获取精英怪配置
|
||
function XGuildWarConfig.GetEliteMonsterConfig(id)
|
||
return XGuildWarConfig.GetCfgByIdKey(XGuildWarConfig.TableKey.EliteMonster, id)
|
||
end
|
||
|
||
-- 获取BUFFEvent
|
||
function XGuildWarConfig.GetBuffFightEventId(groupId, hpPercent)
|
||
XGuildWarConfig.__GroupId2Configs = XGuildWarConfig.__GroupId2Configs or {}
|
||
local groupId2Configs = XGuildWarConfig.__GroupId2Configs[groupId]
|
||
if groupId2Configs == nil then
|
||
groupId2Configs = {}
|
||
local configs = XGuildWarConfig.GetAllConfigs(XGuildWarConfig.TableKey.Buff)
|
||
for _, config in ipairs(configs) do
|
||
if config.GroupId == groupId then
|
||
table.insert(groupId2Configs, config)
|
||
end
|
||
end
|
||
XGuildWarConfig.__GroupId2Configs[groupId] = groupId2Configs
|
||
end
|
||
for _, config in ipairs(groupId2Configs) do
|
||
if hpPercent >= config.HpPercent then
|
||
return config.FightEventId
|
||
end
|
||
end
|
||
return groupId2Configs[#groupId2Configs].FightEventId
|
||
end
|
||
|
||
--region 战斗事件
|
||
--描述
|
||
function XGuildWarConfig.GetFightEventDesc(eventId)
|
||
return XFubenConfigs.GetStageFightEventDetailsByStageFightEventId(eventId).Description
|
||
end
|
||
--名字
|
||
function XGuildWarConfig.GetFightEventName(eventId)
|
||
return XFubenConfigs.GetStageFightEventDetailsByStageFightEventId(eventId).Name
|
||
end
|
||
--图标
|
||
function XGuildWarConfig.GetFightEventIcon(eventId)
|
||
return XFubenConfigs.GetStageFightEventDetailsByStageFightEventId(eventId).Icon
|
||
end
|
||
--endregion
|
||
|
||
--region BossReward
|
||
function XGuildWarConfig.GetBossReward(difficultyId)
|
||
local result = {}
|
||
local allConfig = XGuildWarConfig.GetAllConfigs(XGuildWarConfig.TableKey.BossReward)
|
||
for i, config in pairs(allConfig) do
|
||
if config.Difficulty == difficultyId then
|
||
result[#result + 1] = config
|
||
end
|
||
end
|
||
return result
|
||
end
|
||
|
||
---@param node XGWNode
|
||
function XGuildWarConfig.GetBossRewardId(node)
|
||
local level = node:GetBossLevel()
|
||
local difficultyId = node:GetDifficultyId()
|
||
local allConfig = XGuildWarConfig.GetAllConfigs(XGuildWarConfig.TableKey.BossReward)
|
||
local rewardId
|
||
local curLevel = 0
|
||
for i, config in pairs(allConfig) do
|
||
if config.Difficulty == difficultyId then
|
||
local limitLevel = config.LimitLevel
|
||
if limitLevel > curLevel and level >= limitLevel then
|
||
curLevel = limitLevel
|
||
rewardId = config.RewardId
|
||
end
|
||
end
|
||
end
|
||
if not rewardId then
|
||
-- 找不到返回 level 1
|
||
for i, config in pairs(allConfig) do
|
||
if config.Difficulty == difficultyId then
|
||
if level == 1 then
|
||
rewardId = config.RewardId
|
||
end
|
||
end
|
||
end
|
||
end
|
||
return rewardId or 0
|
||
end
|
||
|
||
function XGuildWarConfig.IsBossRewardCanReceive(node, configBossReward)
|
||
local level = node:GetBossLevel()
|
||
return level > configBossReward.LimitLevel
|
||
end
|
||
--endregion BossReward
|