2023-07-14 19:35:33 +00:00
|
|
|
|
XCharacterUiEffectConfig = XCharacterUiEffectConfig or {}
|
|
|
|
|
local TABLE_CHARACTER_UI_EFFECT = "Client/Character/CharacterUiEffect.tab"
|
2024-09-01 20:49:41 +00:00
|
|
|
|
local TABLE_CHARACTER_UI_EQUIP_EFFECT = "Client/Character/CharacterUiEquipEffect.tab"
|
2023-07-14 19:35:33 +00:00
|
|
|
|
local EffectDictionary = {}
|
2024-09-01 20:49:41 +00:00
|
|
|
|
local EquipEffectDict = {}
|
|
|
|
|
|
|
|
|
|
local DefaultRootName = "Root" --默认父节点名
|
|
|
|
|
|
2023-07-14 19:35:33 +00:00
|
|
|
|
function XCharacterUiEffectConfig.Init()
|
|
|
|
|
EffectDictionary = {}
|
2024-09-01 20:49:41 +00:00
|
|
|
|
local defaultActionId = "DefaultEffect"
|
|
|
|
|
local tabCharacterUiEffect = XTableManager.ReadByIntKey(TABLE_CHARACTER_UI_EFFECT, XTable.XTableCharacterUiEffect, "Id")
|
|
|
|
|
for _, template in pairs(tabCharacterUiEffect) do
|
|
|
|
|
if not template.FashionId then
|
2023-07-14 19:35:33 +00:00
|
|
|
|
XLog.Error(string.format("CharacterUiEffect表出错!存在没有填FashionId的数据!表地址:" .. TABLE_CHARACTER_UI_EFFECT))
|
|
|
|
|
end
|
2024-09-01 20:49:41 +00:00
|
|
|
|
|
|
|
|
|
if XTool.IsTableEmpty(template.EffectPath) then
|
|
|
|
|
XLog.Error(string.format("CharacterUiEffect表出错!存在没有填EffectPath的数据!表地址:" .. TABLE_CHARACTER_UI_EFFECT .. "Id:" .. template.Id))
|
2023-07-14 19:35:33 +00:00
|
|
|
|
end
|
2024-09-01 20:49:41 +00:00
|
|
|
|
|
|
|
|
|
local fashionTemplate = XFashionConfigs.GetFashionTemplate(template.FashionId)
|
2023-07-14 19:35:33 +00:00
|
|
|
|
local characterId = fashionTemplate.CharacterId
|
2024-09-01 20:49:41 +00:00
|
|
|
|
EffectDictionary[characterId] = EffectDictionary[characterId] or {}
|
|
|
|
|
EffectDictionary[characterId][template.FashionId] = EffectDictionary[characterId][template.FashionId] or {}
|
|
|
|
|
local actionId = template.ActionId or defaultActionId
|
|
|
|
|
|
|
|
|
|
local tempConfig = EffectDictionary[characterId][template.FashionId][actionId]
|
|
|
|
|
if not tempConfig then
|
|
|
|
|
tempConfig = {}
|
|
|
|
|
tempConfig.ActionId = actionId
|
|
|
|
|
tempConfig.FashionId = template.FashionId
|
|
|
|
|
tempConfig.Id = template.Id
|
|
|
|
|
tempConfig.EffectRootName = {}
|
|
|
|
|
tempConfig.EffectPath = {}
|
2023-07-14 19:35:33 +00:00
|
|
|
|
end
|
2024-09-01 20:49:41 +00:00
|
|
|
|
local effectLength = #tempConfig.EffectPath + 1
|
|
|
|
|
tempConfig.EffectPath[effectLength] = template.EffectPath
|
|
|
|
|
tempConfig.EffectRootName[effectLength] = template.EffectRootName or DefaultRootName
|
|
|
|
|
EffectDictionary[characterId][template.FashionId][actionId] = tempConfig
|
|
|
|
|
|
2023-07-14 19:35:33 +00:00
|
|
|
|
end
|
2024-09-01 20:49:41 +00:00
|
|
|
|
EquipEffectDict = {}
|
|
|
|
|
local tabEquipEffect = XTableManager.ReadByIntKey(TABLE_CHARACTER_UI_EQUIP_EFFECT, XTable.XTableCharacterUiEquipEffect, "Id")
|
|
|
|
|
for id, template in pairs(tabEquipEffect) do
|
|
|
|
|
if not template.FashionId then
|
|
|
|
|
XLog.Error(string.format("CharacterUiEffect表出错!存在没有填FashionId的数据!表地址:%s Id = %s", TABLE_CHARACTER_UI_EQUIP_EFFECT, id))
|
2023-07-14 19:35:33 +00:00
|
|
|
|
end
|
2024-09-01 20:49:41 +00:00
|
|
|
|
|
|
|
|
|
if not template.EquipModelId then
|
|
|
|
|
XLog.Error(string.format("CharacterUiEffect表出错!存在没有填EquipModelId的数据!表地址:%s Id = %s", TABLE_CHARACTER_UI_EQUIP_EFFECT, id))
|
|
|
|
|
end
|
|
|
|
|
local fashionId = template.FashionId or XWeaponFashionConfigs.DefaultWeaponFashionId
|
|
|
|
|
local equipId = template.EquipModelId
|
|
|
|
|
EquipEffectDict[equipId] = EquipEffectDict[equipId] or {}
|
|
|
|
|
EquipEffectDict[equipId][fashionId] = EquipEffectDict[equipId][fashionId] or {}
|
|
|
|
|
|
|
|
|
|
local actionId = template.ActionId or defaultActionId
|
|
|
|
|
|
|
|
|
|
EquipEffectDict[equipId][fashionId][actionId] = EquipEffectDict[equipId][fashionId][actionId] or {}
|
|
|
|
|
table.insert(EquipEffectDict[equipId][fashionId][actionId], template)
|
2023-07-14 19:35:33 +00:00
|
|
|
|
end
|
2024-09-01 20:49:41 +00:00
|
|
|
|
|
|
|
|
|
--if XMain.IsDebug then
|
|
|
|
|
-- for characterId, dict1 in pairs(EffectDictionary) do
|
|
|
|
|
-- for fashionId, dict2 in pairs(dict1) do
|
|
|
|
|
-- for actionId, mergedTable in pairs(dict2)do
|
|
|
|
|
-- local usedRoot = {}
|
|
|
|
|
-- for i = 1, #mergedTable.EffectPath do
|
|
|
|
|
-- local rootName = mergedTable.EffectRootName[i] or DefaultRootName
|
|
|
|
|
-- if not usedRoot[rootName] then
|
|
|
|
|
-- usedRoot[rootName] = true
|
|
|
|
|
-- else
|
|
|
|
|
-- XLog.Error("CharacterUiEffect表出错!同一动作不能有重复的EffectRootName数据项!首项Id: " .. mergedTable.Id)
|
|
|
|
|
-- end
|
|
|
|
|
-- end
|
|
|
|
|
-- end
|
|
|
|
|
-- end
|
|
|
|
|
-- end
|
|
|
|
|
--end
|
2023-07-14 19:35:33 +00:00
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XCharacterUiEffectConfig.GetEffectInfo(characterId, fashionId, actionId)
|
|
|
|
|
if not characterId or not fashionId then
|
|
|
|
|
XLog.Error(string.format("XCharacterUiEffectConfig.GetEffectInfo出错,必须参数存在空值,characterId: %s,fashionId: %s",
|
|
|
|
|
tostring(characterId), tostring(fashionId)))
|
|
|
|
|
return nil
|
|
|
|
|
end
|
|
|
|
|
local character = EffectDictionary[characterId]
|
|
|
|
|
if not character then
|
|
|
|
|
--XLog.ErrorTableDataNotFound("XCharacterUiEffectConfig.GetEffectInfo", "Ui角色动作特效", TABLE_CHARACTER_UI_EFFECT, "CharacterId", tostring(characterId))
|
|
|
|
|
return nil
|
|
|
|
|
end
|
|
|
|
|
local fashion = character[fashionId]
|
|
|
|
|
if not fashion then
|
|
|
|
|
--XLog.ErrorTableDataNotFound("XCharacterUiEffectConfig.GetEffectInfo", "Ui角色动作特效", TABLE_CHARACTER_UI_EFFECT, "FashionId", tostring(fashionId))
|
|
|
|
|
return nil
|
|
|
|
|
end
|
|
|
|
|
local cfg
|
|
|
|
|
if actionId then
|
|
|
|
|
cfg = fashion[actionId]
|
|
|
|
|
else
|
|
|
|
|
cfg = fashion.DefaultEffect
|
|
|
|
|
end
|
|
|
|
|
if not cfg then
|
|
|
|
|
return nil
|
|
|
|
|
end
|
|
|
|
|
return cfg.Id, cfg.EffectRootName, cfg.EffectPath
|
2024-09-01 20:49:41 +00:00
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XCharacterUiEffectConfig.GetEquipEffectInfo(weaponModelId, fashionId, actionId)
|
|
|
|
|
if not XTool.IsNumberValid(weaponModelId) then
|
|
|
|
|
XLog.Error("获取装备特效信息出错: EquipModelId 为空")
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
fashionId = fashionId or XWeaponFashionConfigs.DefaultWeaponFashionId
|
|
|
|
|
|
|
|
|
|
local equip = EquipEffectDict[weaponModelId]
|
|
|
|
|
if not equip then
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local fashion = equip[fashionId]
|
|
|
|
|
if not fashion then
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local template
|
|
|
|
|
if actionId then
|
|
|
|
|
template = fashion[actionId]
|
|
|
|
|
else
|
|
|
|
|
template = fashion.DefaultEffect
|
|
|
|
|
end
|
|
|
|
|
if not template then
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
local idList, name2EffectMap = {}, {}
|
|
|
|
|
for _, temp in ipairs(template or {}) do
|
|
|
|
|
table.insert(idList, temp.Id)
|
|
|
|
|
local rootName = temp.EffectRootName or DefaultRootName
|
|
|
|
|
name2EffectMap[rootName] = temp.EffectPath
|
|
|
|
|
end
|
|
|
|
|
return table.concat(idList, "-"), name2EffectMap
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XCharacterUiEffectConfig.GetDefaultRootName()
|
|
|
|
|
return DefaultRootName
|
|
|
|
|
end
|