PGRData/Script/matrix/xconfig/XPartnerConfigs.lua

630 lines
20 KiB
Lua
Raw Normal View History

XPartnerConfigs = XPartnerConfigs or {}
local TABLE_PARTNER = "Share/Partner/Partner.tab"
local TABLE_PARTNER_LEVELUP_PATH = "Share/Partner/LevelUpTemplate"
local TABLE_PARTNER_BREAK_THROIGH = "Share/Partner/PartnerBreakThrough.tab"
local TABLE_PARTNER_QUALITY = "Share/Partner/PartnerQuality.tab"
local TABLE_PARTNER_SKILL = "Share/Partner/PartnerSkill.tab"
local TABLE_PARTNER_MAINSKILL_GROUP = "Share/Partner/PartnerMainSkillGroup.tab"
local TABLE_PARTNER_PASSIVESKILL_GROUP = "Share/Partner/PartnerPassiveSkillGroup.tab"
local TABLE_PARTNER_SKILLEFFECT = "Share/Partner/PartnerSkillEffect.tab"
local TABLE_PARTNER_SKILLINFO = "Client/Partner/PartnerSkillInfo.tab"
local TABLE_PARTNER_MODEL = "Client/Partner/PartnerModel.tab"
local TABLE_PARTNER_MODELCONTROL = "Client/Partner/PartnerModelControl.tab"
local TABLE_PARTNER_ITEM_SKIP = "Client/Partner/PartnerItemSkipId.tab"
2024-09-01 20:49:41 +00:00
local TABLE_PARTNER_UI_EFFECT = "Client/Partner/PartnerUiEffect.tab"
local PartnerTemplateCfg = {}
local PartnerBreakthroughCfg = {}
local PartnerQualityCfg = {}
local PartnerSkillCfg = {}
local PartnerMainSkillGroupCfg = {}
local PartnerPassiveSkillGroupCfg = {}
local PartnerSkillEffectCfg = {}
local PartnerSkillInfoCfg = {}
local PartnerModelCfg = {}
local PartnerModelControlCfg = {}
local PartnerItemSkipIdCfg = {}
2024-09-01 20:49:41 +00:00
local PartnerUiEffectCfg = nil
local PartnerBreakthroughDic = {}
local PartnerQualityDic = {}
local PartnerSkillEffectDic = {}
local PartnerSkillInfoDic = {}
local PartnerMainSkillGroupDic = {}
local PartnerPassiveSkillGroupDic = {}
local LevelUpTemplates = {}
local PartnerModelControlDic = {}
2024-09-01 20:49:41 +00:00
local PartnerUiEffectDic = nil
XPartnerConfigs.SkillType = {
MainSkill = 1,
PassiveSkill = 2,
}
XPartnerConfigs.SkillElement = {
Physics = 1,
Fire = 2,
Ice = 3,
Thunder = 4,
Dark = 5,
}
XPartnerConfigs.SortType = {
Ability = 1,--战力
Quality = 2,--品质
Breakthrough = 3,--突破
Level = 4,--等级
SkillLevel = 5,--技能等级
Lock = 6,--上锁
Priority = 7,--优先级
Stack = 8,--堆叠
CanCompose = 9,--可以合成
Carry = 10,--是否佩戴
}
XPartnerConfigs.MainUiState = {
None = 0,
Overview = 1,--总览
Compose = 2,--合成
Property = 3,--养成
}
XPartnerConfigs.PartnerState = {
Standby = 1,--待机模式
Combat = 2,--战斗模式
}
XPartnerConfigs.PartnerType = {
All = 0,
Normal = 1,
Isomer = 2,
}
XPartnerConfigs.CameraType = {
Standby = 1,
Combat = 2,
Overview = 2,
Compose = 3,
Level = 4,
Quality = 5,
Skill = 6,
Story = 7,
StandbyNoSelect = 8,
CombatNoSelect = 9,
}
XPartnerConfigs.DataSyncType = {
Obtain = 1,
Skill = 2,
Carry = 3,
UnlockSkillGroup = 4,
QualityUp = 5,
}
XPartnerConfigs.AttrSortType = {
XNpcAttribType.AttackNormal,
}
XPartnerConfigs.BagShowType = {
View = 1,
Decompose = 2,
}
XPartnerConfigs.BagSortType = {
[0] = XPartnerConfigs.SortType.Quality,
[1] = XPartnerConfigs.SortType.Breakthrough,
[2] = XPartnerConfigs.SortType.Level,
}
XPartnerConfigs.QualityString = {
[1] = "B",
[2] = "A",
[3] = "S",
[4] = "SS",
[5] = "SSS",
[6] = "SSS+",
}
2024-09-01 20:49:41 +00:00
XPartnerConfigs.PriorityTabType = {
Level = 1,
Quality = 2,
Skill = 3,
Story = 4,
}
local PartnerBreakThroughIcon = {
[0] = CS.XGame.ClientConfig:GetString("PartnerBreakThrough0"),
[1] = CS.XGame.ClientConfig:GetString("PartnerBreakThrough1"),
[2] = CS.XGame.ClientConfig:GetString("PartnerBreakThrough2"),
[3] = CS.XGame.ClientConfig:GetString("PartnerBreakThrough3"),
}
local QualityBgPath = {
CS.XGame.ClientConfig:GetString("CommonBagGold"),
CS.XGame.ClientConfig:GetString("CommonBagGold"),
CS.XGame.ClientConfig:GetString("CommonBagRed"),
CS.XGame.ClientConfig:GetString("CommonBagRed"),
CS.XGame.ClientConfig:GetString("CommonBagRed"),
CS.XGame.ClientConfig:GetString("CommonBagRed"),
}
XPartnerConfigs.DefaultNodeName = "Self_ModelRoot"
XPartnerConfigs.MainSkillCount = 1
XPartnerConfigs.PassiveSkillCount = 5
function XPartnerConfigs.Init()
PartnerTemplateCfg = XTableManager.ReadByIntKey(TABLE_PARTNER, XTable.XTablePartner, "Id")
PartnerBreakthroughCfg = XTableManager.ReadByIntKey(TABLE_PARTNER_BREAK_THROIGH, XTable.XTablePartnerBreakThrough, "Id")
PartnerQualityCfg = XTableManager.ReadByIntKey(TABLE_PARTNER_QUALITY, XTable.XTablePartnerQuality, "Id")
PartnerSkillCfg = XTableManager.ReadByIntKey(TABLE_PARTNER_SKILL, XTable.XTablePartnerSkill, "PartnerId")
PartnerMainSkillGroupCfg = XTableManager.ReadByIntKey(TABLE_PARTNER_MAINSKILL_GROUP, XTable.XTablePartnerMainSkillGroup, "Id")
PartnerPassiveSkillGroupCfg = XTableManager.ReadByIntKey(TABLE_PARTNER_PASSIVESKILL_GROUP, XTable.XTablePartnerPassiveSkillGroup, "Id")
PartnerSkillEffectCfg = XTableManager.ReadByIntKey(TABLE_PARTNER_SKILLEFFECT, XTable.XTablePartnerSkillEffect, "Id")
PartnerSkillInfoCfg = XTableManager.ReadByIntKey(TABLE_PARTNER_SKILLINFO, XTable.XTablePartnerSkillInfo, "Id")
PartnerModelCfg = XTableManager.ReadByIntKey(TABLE_PARTNER_MODEL, XTable.XTablePartnerModel, "Id")
PartnerModelControlCfg = XTableManager.ReadByIntKey(TABLE_PARTNER_MODELCONTROL, XTable.XTablePartnerModelControl, "Id")
PartnerItemSkipIdCfg = XTableManager.ReadByIntKey(TABLE_PARTNER_ITEM_SKIP, XTable.XTablePartnerItemSkipId, "PartnerId")
local paths = CS.XTableManager.GetPaths(TABLE_PARTNER_LEVELUP_PATH)
XTool.LoopCollection(paths, function(path)
local key = tonumber(XTool.GetFileNameWithoutExtension(path))
LevelUpTemplates[key] = XTableManager.ReadByIntKey(path, XTable.XTablePartnerLevelUp, "Level")
end)
XPartnerConfigs.CreatePartnerBreakthroughDic()
XPartnerConfigs.CreatePartnerQualityDic()
XPartnerConfigs.CreatePartnerSkillEffectDic()
XPartnerConfigs.CreatePartnerSkillInfoDic()
XPartnerConfigs.CreateMainSkillGroupDic()
XPartnerConfigs.CreatePassiveSkillGroupDic()
XPartnerConfigs.CreatePartnerModelControlDic()
end
function XPartnerConfigs.CreatePartnerBreakthroughDic()
PartnerBreakthroughDic = {}
for _,breakThrough in pairs(PartnerBreakthroughCfg) do
PartnerBreakthroughDic[breakThrough.PartnerId] =
PartnerBreakthroughDic[breakThrough.PartnerId] or {}
PartnerBreakthroughDic[breakThrough.PartnerId][breakThrough.BreakTimes] =
PartnerBreakthroughDic[breakThrough.PartnerId][breakThrough.BreakTimes] or breakThrough
end
end
function XPartnerConfigs.CreatePartnerQualityDic()
PartnerQualityDic = {}
for _,qualityInfo in pairs(PartnerQualityCfg) do
PartnerQualityDic[qualityInfo.PartnerId] =
PartnerQualityDic[qualityInfo.PartnerId] or {}
PartnerQualityDic[qualityInfo.PartnerId][qualityInfo.Quality] =
PartnerQualityDic[qualityInfo.PartnerId][qualityInfo.Quality] or qualityInfo
end
end
function XPartnerConfigs.CreatePartnerSkillEffectDic()
PartnerSkillEffectDic = {}
for _,effect in pairs(PartnerSkillEffectCfg) do
PartnerSkillEffectDic[effect.SkillId] =
PartnerSkillEffectDic[effect.SkillId] or {}
PartnerSkillEffectDic[effect.SkillId][effect.Level] =
PartnerSkillEffectDic[effect.SkillId][effect.Level] or effect
end
end
function XPartnerConfigs.CreatePartnerSkillInfoDic()
PartnerSkillInfoDic = {}
for _,Info in pairs(PartnerSkillInfoCfg) do
PartnerSkillInfoDic[Info.SkillId] =
PartnerSkillInfoDic[Info.SkillId] or {}
PartnerSkillInfoDic[Info.SkillId][Info.Level] =
PartnerSkillInfoDic[Info.SkillId][Info.Level] or Info
end
end
function XPartnerConfigs.CreateMainSkillGroupDic()
PartnerMainSkillGroupDic = {}
for _,groupInfo in pairs(PartnerMainSkillGroupCfg) do
for _,skillId in pairs(groupInfo.SkillId) do
if not PartnerMainSkillGroupDic[skillId] then
PartnerMainSkillGroupDic[skillId] = groupInfo.Id
else
XLog.Error("skillId id Reuse in tab:"..TABLE_PARTNER_MAINSKILL_GROUP)
end
end
end
end
function XPartnerConfigs.CreatePassiveSkillGroupDic()
PartnerPassiveSkillGroupDic = {}
for _,groupInfo in pairs(PartnerPassiveSkillGroupCfg) do
for _,skillId in pairs(groupInfo.SkillId) do
if not PartnerPassiveSkillGroupDic[skillId] then
PartnerPassiveSkillGroupDic[skillId] = groupInfo.Id
else
XLog.Error("skillId id Reuse in tab:"..TABLE_PARTNER_PASSIVESKILL_GROUP)
end
end
end
end
function XPartnerConfigs.CreatePartnerModelControlDic()
PartnerModelControlDic = {}
for _,modelControl in pairs(PartnerModelControlCfg) do
PartnerModelControlDic[modelControl.Model] = PartnerModelControlDic[modelControl.Model] or {}
if string.IsNilOrEmpty(modelControl.NodeName) then
PartnerModelControlDic[modelControl.Model][XPartnerConfigs.DefaultNodeName] = modelControl
else
PartnerModelControlDic[modelControl.Model][modelControl.NodeName] = modelControl
end
end
end
function XPartnerConfigs.GetPartnerTemplateCfg()
return PartnerTemplateCfg
end
function XPartnerConfigs.GetPartnerBreakthroughCfg()
return PartnerBreakthroughCfg
end
function XPartnerConfigs.GetPartnerQualityCfg()
return PartnerQualityCfg
end
function XPartnerConfigs.GetPartnerTemplateById(id)
if not PartnerTemplateCfg[id] then
XLog.Error("id is not exist in "..TABLE_PARTNER.." id = " .. id)
return
end
return PartnerTemplateCfg[id]
end
function XPartnerConfigs.GeQualityBgPath(quality)
if not quality then
XLog.Error("XPartnerConfigs.GeQualityBgPath 函数错误: 参数quality不能为空")
return
end
return QualityBgPath[quality]
end
function XPartnerConfigs.GetPartnerTemplateName(id)
return XPartnerConfigs.GetPartnerTemplateById(id).Name
end
function XPartnerConfigs.GetPartnerTemplateIcon(id)
return XPartnerConfigs.GetPartnerTemplateById(id).Icon
end
2024-09-01 20:49:41 +00:00
function XPartnerConfigs.GetPartnerTemplateLiHuiPath(id)
return XPartnerConfigs.GetPartnerTemplateById(id).LiHuiPath
end
function XPartnerConfigs.GetPartnerTemplateQuality(id)
return XPartnerConfigs.GetPartnerTemplateById(id).InitQuality
end
function XPartnerConfigs.GetPartnerTemplateGoodsDesc(id)
return XPartnerConfigs.GetPartnerTemplateById(id).GoodsDesc
end
function XPartnerConfigs.GetPartnerTemplateGoodsWorldDesc(id)
return XPartnerConfigs.GetPartnerTemplateById(id).GoodsWorldDesc
end
function XPartnerConfigs.GetPartnerSkillById(id)
if not PartnerSkillCfg[id] then
XLog.Error("id is not exist in "..TABLE_PARTNER_SKILL.." id = " .. id)
return
end
return PartnerSkillCfg[id]
end
function XPartnerConfigs.GetPartnerMainSkillGroupById(id)
if not PartnerMainSkillGroupCfg[id] then
XLog.Error("id is not exist in "..TABLE_PARTNER_MAINSKILL_GROUP.." id = " .. id)
return
end
return PartnerMainSkillGroupCfg[id]
end
function XPartnerConfigs.GetPartnerPassiveSkillGroupById(id)
if not PartnerPassiveSkillGroupCfg[id] then
XLog.Error("id is not exist in "..TABLE_PARTNER_PASSIVESKILL_GROUP.." id = " .. id)
return
end
return PartnerPassiveSkillGroupCfg[id]
end
function XPartnerConfigs.GetPartnerBreakthroughByIdAndNum(partnerId, breakTimes)
if not PartnerBreakthroughDic[partnerId] then
XLog.Error("id is not exist in "..TABLE_PARTNER_BREAK_THROIGH.." id = " .. partnerId)
return
end
if not PartnerBreakthroughDic[partnerId][breakTimes] then
XLog.Error("breakTimes is not exist in "..TABLE_PARTNER_BREAK_THROIGH.." breakTimes = " .. breakTimes)
return
end
return PartnerBreakthroughDic[partnerId][breakTimes]
end
function XPartnerConfigs.GetPartnerBreakthroughLimit(partnerId)
if not PartnerBreakthroughDic[partnerId] then
XLog.Error("id is not exist in "..TABLE_PARTNER_BREAK_THROIGH.." id = " .. partnerId)
return
end
local tmpMax = 0
for breakTimes,_ in pairs(PartnerBreakthroughDic[partnerId]) do
if breakTimes > tmpMax then
tmpMax = breakTimes
end
end
return tmpMax
end
function XPartnerConfigs.GePartnerQualityByIdAndNum(partnerId, quality)
if not PartnerQualityDic[partnerId] then
XLog.Error("id is not exist in "..TABLE_PARTNER_QUALITY.." id = " .. partnerId)
return
end
if not PartnerQualityDic[partnerId][quality] then
XLog.Error("quality is not exist in "..TABLE_PARTNER_QUALITY.." quality = " .. quality)
return
end
return PartnerQualityDic[partnerId][quality]
end
function XPartnerConfigs.GetQualityLimit(partnerId)
if not PartnerQualityDic[partnerId] then
XLog.Error("id is not exist in "..TABLE_PARTNER_QUALITY.." id = " .. partnerId)
return
end
local tmpMax = 0
for quality,_ in pairs(PartnerQualityDic[partnerId]) do
if quality > tmpMax then
tmpMax = quality
end
end
return tmpMax
end
function XPartnerConfigs.GetPartnerSkillEffectByIdAndLevel(skillId, level)
if not PartnerSkillEffectDic[skillId] then
XLog.Error("id is not exist in "..TABLE_PARTNER_SKILLEFFECT.." id = " .. skillId)
return
end
if not PartnerSkillEffectDic[skillId][level] then
XLog.Error("level is not exist in "..TABLE_PARTNER_SKILLEFFECT.." level = " .. level)
return
end
return PartnerSkillEffectDic[skillId][level]
end
function XPartnerConfigs.GetPartnerSkillInfoByIdAndLevel(skillId, level)
if not PartnerSkillInfoDic[skillId] then
XLog.Error("id is not exist in "..TABLE_PARTNER_SKILLINFO.." id = " .. skillId)
return
end
if not PartnerSkillInfoDic[skillId][level] then
XLog.Error("level is not exist in "..TABLE_PARTNER_SKILLINFO.." level = " .. level)
return
end
return PartnerSkillInfoDic[skillId][level]
end
function XPartnerConfigs.GetMainSkillGroupById(skillId)
if not PartnerMainSkillGroupDic[skillId] then
XLog.Error("skillId is not exist in "..TABLE_PARTNER_MAINSKILL_GROUP.." skillId = " .. skillId)
return
end
return PartnerMainSkillGroupDic[skillId]
end
function XPartnerConfigs.GetPassiveSkillGroupById(skillId)
if not PartnerPassiveSkillGroupDic[skillId] then
XLog.Error("skillId is not exist in "..TABLE_PARTNER_PASSIVESKILL_GROUP.." skillId = " .. skillId)
return
end
return PartnerPassiveSkillGroupDic[skillId]
end
function XPartnerConfigs.GetPartnerSkillLevelLimit(skillId)
if not PartnerSkillEffectDic[skillId] then
XLog.Error("id is not exist in "..TABLE_PARTNER_SKILLEFFECT.." id = " .. skillId)
return
end
local tmpMax = 0
for skillLevel,_ in pairs(PartnerSkillEffectDic[skillId]) do
if skillLevel > tmpMax then
tmpMax = skillLevel
end
end
return tmpMax
end
function XPartnerConfigs.GetPartnerModelControlsByModel(model)
if not PartnerModelControlDic[model] then
return
end
return PartnerModelControlDic[model]
end
2024-09-01 20:49:41 +00:00
---@param id number 辅助机Id
---@alias XPartnerModelConfig { CToSAnime:string, CToSEffect:string, CToSVoice:number, CombatBornAnime:string, CombatBornAnime:string, CombatModel:string, Id:number, Name:string, SToCAnime:string, SToCVoice:number, StandbyBornAnime:string, StandbyModel:string }
---@return XPartnerModelConfig 辅助机配置
function XPartnerConfigs.GetPartnerModelById(id)
if not PartnerModelCfg[id] then
XLog.Error("id is not exist in "..TABLE_PARTNER_MODEL.." id = " .. id)
return {}
end
return PartnerModelCfg[id]
end
function XPartnerConfigs.GetPartnerBreakThroughIcon(breakthroughTimes)
local icon = PartnerBreakThroughIcon[breakthroughTimes]
if not icon then
XLog.Error("XPartnerConfigs.PartnerBreakThroughIcon调用错误得到的icon为空原因检查breakthroughTimes" .. breakthroughTimes .. "和PartnerBreakThroughIcon的Index不匹配")
return
end
return icon
end
---
--- 获取'id'伙伴待机模型
function XPartnerConfigs.GetPartnerModelStandbyModel(id)
return XPartnerConfigs.GetPartnerModelById(id).StandbyModel
end
---
--- 获取'id'伙伴战斗模型
function XPartnerConfigs.GetPartnerModelCombatModel(id)
return XPartnerConfigs.GetPartnerModelById(id).CombatModel
end
---
--- 获取'id'伙伴 待机->战斗 动画
function XPartnerConfigs.GetPartnerModelSToCAnime(id)
return XPartnerConfigs.GetPartnerModelById(id).SToCAnime
end
---
--- 获取'id'伙伴战斗模型出生动画
function XPartnerConfigs.GetPartnerModelCombatBornAnime(id)
return XPartnerConfigs.GetPartnerModelById(id).CombatBornAnime
end
---
--- 获取'id'伙伴 待机->战斗 音效
function XPartnerConfigs.GetPartnerModelSToCVoice(id)
return XPartnerConfigs.GetPartnerModelById(id).SToCVoice
end
function XPartnerConfigs.GetPartnerLevelUpTemplateByIdAndLevel(id,level)
if not LevelUpTemplates[id] then
XLog.Error("id is not exist in "..TABLE_PARTNER_LEVELUP_PATH.." id = " .. id)
return
end
if not LevelUpTemplates[id][level] then
XLog.Error("level is not exist in "..TABLE_PARTNER_LEVELUP_PATH.." level = " .. level)
return
end
return LevelUpTemplates[id][level]
end
function XPartnerConfigs.GetPartnerItemSkipById(id)
if not PartnerItemSkipIdCfg[id] then
XLog.Error("id is not exist in "..TABLE_PARTNER_ITEM_SKIP.." id = " .. id)
return
end
return PartnerItemSkipIdCfg[id]
2024-09-01 20:49:41 +00:00
end
--region PartnerUiEffect相关
---@class ModeTypeEnum
---@field StandbyModel string
---@field CombatModel string
local ModeTypeEnum = enum({
StandbyModel = "StandbyModel",
CombatModel = "CombatModel"
})
---@class EffectTypeEnum
---@field Disappear string
---@field Appear string
---@field Loop string
local EffectTypeEnum = enum({
Disappear = "Disappear",
Appear = "Appear",
Loop = "Loop"
})
---@class EffectParentNameEnum
---@field ModelOnEffect string
---@field ModelOffEffect string
---@field ModelLoopEffect string
local EffectParentNameEnum = enum({
ModelOnEffect = "ModelOnEffect",
ModelOffEffect = "ModelOffEffect",
ModelLoopEffect = "ModelLoopEffect"
})
local function GetPartnerUiEffectCfgs()
if not PartnerUiEffectCfg then
PartnerUiEffectCfg = XTableManager.ReadByIntKey(TABLE_PARTNER_UI_EFFECT, XTable.XTablePartnerUiEffect, "Id")
end
return PartnerUiEffectCfg
end
local function GetPartnerUiEffectDic()
if not PartnerUiEffectDic then
PartnerUiEffectDic = {}
local configs = GetPartnerUiEffectCfgs()
for _, config in pairs(configs) do
local modelId = nil
local effectRoot = {
BoneRootName = config.EffectRootName,
EffectPath = config.EffectPath
}
if config.ModelType == ModeTypeEnum.StandbyModel then
modelId = PartnerModelCfg[config.PartnerId].StandbyModel
elseif config.ModelType == ModeTypeEnum.CombatModel then
modelId = PartnerModelCfg[config.PartnerId].CombatModel
end
PartnerUiEffectDic[modelId] = PartnerUiEffectDic[modelId] or {}
if config.EffectType == EffectTypeEnum.Disappear then
PartnerUiEffectDic[modelId][EffectParentNameEnum.ModelOffEffect] = effectRoot
elseif config.EffectType == EffectTypeEnum.Appear then
PartnerUiEffectDic[modelId][EffectParentNameEnum.ModelOnEffect] = effectRoot
elseif config.EffectType == EffectTypeEnum.Loop then
PartnerUiEffectDic[modelId][EffectParentNameEnum.ModelLoopEffect] = effectRoot
end
end
end
return PartnerUiEffectDic
end
---@type EffectParentNameEnum
XPartnerConfigs.EffectParentName = EffectParentNameEnum
---获取辅助机特效
---@param modelName string 辅助机模型(来自【PartnerModel.tab】StandbyModel/CombatModel字段)
---@param effectType string XPartnerConfigs.EffectParentName枚举
---@alias XEffectData { BoneRootName:string, EffectPath:string[] }
---@return XEffectData
function XPartnerConfigs.GetPartnerUiEffect(modelName, effectType)
local partnerUiEffectDic = GetPartnerUiEffectDic()
if not partnerUiEffectDic then
XLog.Error("PartnerUiEffectDic为空请检查配置表PartnerUiEffect.tab是否为空。配置表路径" .. TABLE_PARTNER_UI_EFFECT .. ")")
return
end
local effectTypeDic = partnerUiEffectDic[modelName]
if not effectTypeDic then
return
end
local effectData = effectTypeDic[effectType]
if not effectData then
return
end
return effectData
end
--endregion