2023-07-14 19:35:33 +00:00
|
|
|
|
local tableInsert = table.insert
|
2024-09-01 20:49:41 +00:00
|
|
|
|
local Pairs = pairs
|
|
|
|
|
local StringFormat = string.format
|
2023-07-14 19:35:33 +00:00
|
|
|
|
|
|
|
|
|
XEquipConfig = XEquipConfig or {}
|
|
|
|
|
|
|
|
|
|
XEquipConfig.MAX_STAR_COUNT = 6 -- 最大星星数
|
|
|
|
|
XEquipConfig.MAX_SUIT_SKILL_COUNT = 3 -- 最大套装激活技能个数
|
|
|
|
|
XEquipConfig.MAX_RESONANCE_SKILL_COUNT = 3 -- 最大共鸣属性/技能个数
|
|
|
|
|
XEquipConfig.MIN_RESONANCE_EQUIP_STAR_COUNT = 5 -- 装备共鸣最低星级
|
|
|
|
|
XEquipConfig.MAX_SUIT_COUNT = 6 -- 套装最大数量
|
|
|
|
|
XEquipConfig.DEFAULT_SUIT_ID = { -- 用来显示全部套装数量的默认套装Id
|
|
|
|
|
Normal = 1, --构造体
|
|
|
|
|
Isomer = 2, --感染体
|
|
|
|
|
}
|
|
|
|
|
XEquipConfig.CAN_NOT_AUTO_EAT_STAR = 5 -- 大于等于该星级的装备不会被当做默认狗粮选中
|
|
|
|
|
XEquipConfig.AWAKE_SKILL_COUNT = 2 -- 觉醒技能数量
|
2024-09-01 20:49:41 +00:00
|
|
|
|
XEquipConfig.OVERRUN_ADD_SUIT_CNT = 2 -- 超限增加意识数量
|
|
|
|
|
XEquipConfig.OVERRUN_BLIND_SUIT_MIN_QUALITY = 6 -- 超限绑定意识的最低品质
|
2023-07-14 19:35:33 +00:00
|
|
|
|
|
|
|
|
|
--武器类型
|
|
|
|
|
XEquipConfig.EquipType = {
|
|
|
|
|
Universal = 0, -- 通用
|
|
|
|
|
Suncha = 1, -- 双枪
|
|
|
|
|
Sickle = 2, -- 太刀
|
|
|
|
|
Mount = 3, -- 挂载
|
|
|
|
|
Arrow = 4, -- 弓箭
|
|
|
|
|
Chainsaw = 5, -- 电锯
|
|
|
|
|
Sword = 6, -- 大剑
|
|
|
|
|
Hcan = 7, -- 巨炮
|
|
|
|
|
DoubleSwords = 8, -- 双短刀
|
|
|
|
|
sickle = 9, --镰刀
|
|
|
|
|
IsomerSword = 10, -- 感染者专用大剑
|
|
|
|
|
Food = 99, -- 狗粮
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
XEquipConfig.UserType = {
|
|
|
|
|
All = 0, --通用
|
|
|
|
|
Normal = 1, --构造体
|
|
|
|
|
Isomer = 2, --异构体/感染体
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
XEquipConfig.AddAttrType = {
|
|
|
|
|
Numeric = 1, -- 数值
|
|
|
|
|
Rate = 2, -- 基础属性的百分比
|
|
|
|
|
Promoted = 3, -- 等级加成
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
XEquipConfig.UserType = {
|
|
|
|
|
All = 0, --通用
|
|
|
|
|
Normal = 1, --构造体
|
|
|
|
|
Isomer = 2, --异构体/感染体
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
--要显示的属性排序
|
|
|
|
|
XEquipConfig.AttrSortType = {
|
|
|
|
|
XNpcAttribType.Life,
|
|
|
|
|
XNpcAttribType.AttackNormal,
|
|
|
|
|
XNpcAttribType.DefenseNormal,
|
|
|
|
|
XNpcAttribType.Crit,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
XEquipConfig.EquipSite = {
|
|
|
|
|
Weapon = 0, -- 武器
|
|
|
|
|
Awareness = { -- 意识
|
|
|
|
|
One = 1, -- 1号位
|
|
|
|
|
Two = 2, -- 2号位
|
|
|
|
|
Three = 3, -- 3号位
|
|
|
|
|
Four = 4, -- 4号位
|
|
|
|
|
Five = 5, -- 5号位
|
|
|
|
|
Six = 6, -- 6号位
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
XEquipConfig.AwarenessSiteToStr = {
|
|
|
|
|
[XEquipConfig.EquipSite.Awareness.One] = CS.XTextManager.GetText("AwarenessSiteOne"),
|
|
|
|
|
[XEquipConfig.EquipSite.Awareness.Two] = CS.XTextManager.GetText("AwarenessSiteTwo"),
|
|
|
|
|
[XEquipConfig.EquipSite.Awareness.Three] = CS.XTextManager.GetText("AwarenessSiteThree"),
|
|
|
|
|
[XEquipConfig.EquipSite.Awareness.Four] = CS.XTextManager.GetText("AwarenessSiteFour"),
|
|
|
|
|
[XEquipConfig.EquipSite.Awareness.Five] = CS.XTextManager.GetText("AwarenessSiteFive"),
|
|
|
|
|
[XEquipConfig.EquipSite.Awareness.Six] = CS.XTextManager.GetText("AwarenessSiteSix"),
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
XEquipConfig.Classify = {
|
|
|
|
|
Weapon = 1, -- 武器
|
|
|
|
|
Awareness = 2, -- 意识
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
XEquipConfig.EquipResonanceType = {
|
|
|
|
|
Attrib = 1, -- 属性共鸣
|
|
|
|
|
CharacterSkill = 2, -- 角色技能共鸣
|
|
|
|
|
WeaponSkill = 3, -- 武器技能共鸣
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
--排序优先级选项
|
|
|
|
|
XEquipConfig.PriorSortType = {
|
|
|
|
|
Star = 0, -- 星级
|
|
|
|
|
Breakthrough = 1, -- 突破次数
|
|
|
|
|
Level = 2, -- 等级
|
|
|
|
|
Proceed = 3, -- 入手顺序
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
-- 武器部位
|
|
|
|
|
XEquipConfig.WeaponCase = {
|
|
|
|
|
Case1 = 1,
|
|
|
|
|
Case2 = 2,
|
|
|
|
|
Case3 = 3,
|
|
|
|
|
--[[支持继续扩展
|
|
|
|
|
Case4 = 4,
|
|
|
|
|
...
|
|
|
|
|
]]
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
-- 狗粮类型
|
|
|
|
|
XEquipConfig.EatType = {
|
|
|
|
|
Equip = 0,
|
|
|
|
|
Item = 1,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
-- 武器模型用途
|
|
|
|
|
XEquipConfig.WeaponUsage = {
|
|
|
|
|
Role = 1, -- ui角色身上
|
|
|
|
|
Battle = 2, -- 战斗
|
|
|
|
|
Show = 3, -- ui单独展示
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
-- 装备详情UI页签
|
|
|
|
|
XEquipConfig.EquipDetailBtnTabIndex = {
|
|
|
|
|
Detail = 1,
|
|
|
|
|
Strengthen = 2,
|
|
|
|
|
Resonance = 3,
|
2024-09-01 20:49:41 +00:00
|
|
|
|
Overclocking = 4,
|
|
|
|
|
Overrun = 5,
|
2023-07-14 19:35:33 +00:00
|
|
|
|
}
|
|
|
|
|
|
2024-09-01 20:49:41 +00:00
|
|
|
|
--武器超频界面页签状态 V2.0版本后超频共振只需要晶币
|
2023-07-14 19:35:33 +00:00
|
|
|
|
XEquipConfig.EquipAwakeTabIndex = {
|
2024-09-01 20:49:41 +00:00
|
|
|
|
CrystalMoney = 2, --晶币
|
2023-07-14 19:35:33 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
-- 共鸣后武器显示延时时间
|
|
|
|
|
XEquipConfig.WeaponResonanceShowDelay = CS.XGame.ClientConfig:GetInt("WeaponResonanceShowDelay")
|
|
|
|
|
|
|
|
|
|
-- 分解数量溢出提示文本
|
|
|
|
|
XEquipConfig.DecomposeRewardOverLimitTip = {
|
|
|
|
|
[XEquipConfig.Classify.Weapon] = CS.XTextManager.GetText("WeaponBoxWillBeFull"),
|
|
|
|
|
[XEquipConfig.Classify.Awareness] = CS.XTextManager.GetText("WaferBoxWillBeFull"),
|
|
|
|
|
}
|
|
|
|
|
|
2024-09-01 20:49:41 +00:00
|
|
|
|
-- 武器超限解锁类型
|
|
|
|
|
XEquipConfig.WeaponOverrunUnlockType = {
|
|
|
|
|
Suit = 1, -- 意识套装
|
|
|
|
|
AttrEffect = 2, -- 属性效果
|
|
|
|
|
}
|
|
|
|
|
|
2023-07-14 19:35:33 +00:00
|
|
|
|
local EquipBreakThroughIcon = {
|
|
|
|
|
[0] = CS.XGame.ClientConfig:GetString("EquipBreakThrough0"),
|
|
|
|
|
[1] = CS.XGame.ClientConfig:GetString("EquipBreakThrough1"),
|
|
|
|
|
[2] = CS.XGame.ClientConfig:GetString("EquipBreakThrough2"),
|
|
|
|
|
[3] = CS.XGame.ClientConfig:GetString("EquipBreakThrough3"),
|
|
|
|
|
[4] = CS.XGame.ClientConfig:GetString("EquipBreakThrough4"),
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
local EquipBreakThroughSmallIcon = {
|
|
|
|
|
[1] = CS.XGame.ClientConfig:GetString("EquipBreakThroughSmall1"),
|
|
|
|
|
[2] = CS.XGame.ClientConfig:GetString("EquipBreakThroughSmall2"),
|
|
|
|
|
[3] = CS.XGame.ClientConfig:GetString("EquipBreakThroughSmall3"),
|
|
|
|
|
[4] = CS.XGame.ClientConfig:GetString("EquipBreakThroughSmall4"),
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
local EquipBreakThroughBigIcon = {
|
|
|
|
|
[0] = CS.XGame.ClientConfig:GetString("EquipBreakThroughBig0"),
|
|
|
|
|
[1] = CS.XGame.ClientConfig:GetString("EquipBreakThroughBig1"),
|
|
|
|
|
[2] = CS.XGame.ClientConfig:GetString("EquipBreakThroughBig2"),
|
|
|
|
|
[3] = CS.XGame.ClientConfig:GetString("EquipBreakThroughBig3"),
|
|
|
|
|
[4] = CS.XGame.ClientConfig:GetString("EquipBreakThroughBig4"),
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
-- 共鸣图标(觉醒后图标变更)
|
|
|
|
|
local EquipResonanceIconPath = {
|
|
|
|
|
[true] = CS.XGame.ClientConfig:GetString("EquipAwakenIcon"),
|
|
|
|
|
[false] = CS.XGame.ClientConfig:GetString("EquipResonanceIcon"),
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
local TABLE_EQUIP_PATH = "Share/Equip/Equip.tab"
|
|
|
|
|
local TABLE_EQUIP_BREAKTHROUGH_PATH = "Share/Equip/EquipBreakThrough.tab"
|
|
|
|
|
local TABLE_EQUIP_SUIT_PATH = "Share/Equip/EquipSuit.tab"
|
|
|
|
|
local TABLE_EQUIP_SUIT_EFFECT_PATH = "Share/Equip/EquipSuitEffect.tab"
|
|
|
|
|
local TABLE_LEVEL_UP_TEMPLATE_PATH = "Share/Equip/LevelUpTemplate/"
|
|
|
|
|
local TABLE_EQUIP_DECOMPOSE_PATH = "Share/Equip/EquipDecompose.tab"
|
|
|
|
|
local TABLE_EAT_EQUIP_COST_PATH = "Share/Equip/EatEquipCost.tab"
|
|
|
|
|
local TABLE_EQUIP_RESONANCE_PATH = "Share/Equip/EquipResonance.tab"
|
|
|
|
|
local TABLE_EQUIP_RESONANCE_CONSUME_ITEM_PATH = "Share/Equip/EquipResonanceUseItem.tab"
|
|
|
|
|
local TABLE_WEAPON_SKILL_PATH = "Share/Equip/WeaponSkill.tab"
|
|
|
|
|
local TABLE_WEAPON_SKILL_POOL_PATH = "Share/Equip/WeaponSkillPool.tab"
|
|
|
|
|
local TABLE_EQUIP_AWAKE_PATH = "Share/Equip/EquipAwake.tab"
|
2024-09-01 20:49:41 +00:00
|
|
|
|
local TABLE_WEAPON_OVERRUN_PATH = "Share/Equip/WeaponOverrun.tab"
|
2023-07-14 19:35:33 +00:00
|
|
|
|
local TABLE_EQUIP_RES_PATH = "Client/Equip/EquipRes.tab"
|
|
|
|
|
local TABLE_EQUIP_MODEL_PATH = "Client/Equip/EquipModel.tab"
|
|
|
|
|
local TABLE_EQUIP_MODEL_TRANSFORM_PATH = "Client/Equip/EquipModelTransform.tab"
|
|
|
|
|
local TABLE_EQUIP_SKIPID_PATH = "Client/Equip/EquipSkipId.tab"
|
|
|
|
|
local TABLE_EQUIP_ANIM_PATH = "Client/Equip/EquipAnim.tab"
|
|
|
|
|
local TABLE_EQUIP_MODEL_SHOW_PATH = "Client/Equip/EquipModelShow.tab"
|
|
|
|
|
local TABLE_EQUIP_RES_BY_FOOL_PATH = "Client/Equip/EquipResByFool.tab"
|
2024-09-01 20:49:41 +00:00
|
|
|
|
local TABLE_EQUIP_SIGNBOARD_PATH = "Client/Equip/EquipSignboard.tab"
|
|
|
|
|
local TABLE_WEAPON_DEREGULATE_UI = "Client/Equip/WeaponDeregulateUI.tab"
|
|
|
|
|
local TABLE_EQUIP_ANIM_RESET = "Client/Equip/EquipAnimReset.tab"
|
2023-07-14 19:35:33 +00:00
|
|
|
|
|
|
|
|
|
local MAX_WEAPON_COUNT -- 武器拥有最大数量
|
|
|
|
|
local MAX_AWARENESS_COUNT -- 意识拥有最大数量
|
|
|
|
|
local EQUIP_EXP_INHERIT_PRECENT -- 强化时的经验继承百分比
|
|
|
|
|
local EQUIP_RECYCLE_ITEM_PERCENT -- 回收获得道具数量百分比
|
|
|
|
|
local MIN_RESONANCE_BIND_STAR -- 只有6星以上的意识才可以共鸣出绑定角色的技能
|
|
|
|
|
local MIN_AWAKE_STAR -- 最低可觉醒星数
|
|
|
|
|
|
|
|
|
|
local EquipBreakthroughTemplate = {} -- 突破配置
|
|
|
|
|
local EquipResonanceTemplate = {} -- 共鸣配置
|
|
|
|
|
local EquipResonanceConsumeItemTemplates = {} -- 共鸣消耗物品配置
|
|
|
|
|
local LevelUpTemplates = {} -- 升级模板
|
|
|
|
|
local EquipSuitTemplate = {} -- 套装技能表
|
|
|
|
|
local EquipSuitEffectTemplate = {} -- 套装效果表
|
|
|
|
|
local WeaponSkillTemplate = {} -- 武器技能配置
|
|
|
|
|
local WeaponSkillPoolTemplate = {} -- 武器技能池(共鸣用)配置
|
|
|
|
|
local EatEquipCostTemplate = {} -- 装备强化消耗配置
|
|
|
|
|
local EquipResTemplates = {} -- 装备资源配置
|
|
|
|
|
local EquipModelTemplates = {} -- 武器模型配置
|
|
|
|
|
local EquipModelTransformTemplates = {} -- 武器模型UI偏移配置
|
2024-09-01 20:49:41 +00:00
|
|
|
|
local EquipEatSkipIdTemplates = {} -- 装备升级材料来源跳转ID配置
|
|
|
|
|
local EquipSkipIdTemplates = {} -- 装备升级材料来源跳转ID配置
|
2023-07-14 19:35:33 +00:00
|
|
|
|
local EquipAwakeTemplate = {} -- 觉醒配置
|
|
|
|
|
local EquipAnimTemplates = {} -- 动画配置
|
|
|
|
|
local EquipModelShowTemplate = {} -- 控制武器模型显示
|
|
|
|
|
local EquipResByFoolTemplate = {} -- 愚人节装备资源替换配置
|
2024-09-01 20:49:41 +00:00
|
|
|
|
local WeaponOverrunTemplate = {} -- 武器超限配置
|
|
|
|
|
local WeaponDeregulateUITemplate = {} -- 武器超限的UI配置
|
2023-07-14 19:35:33 +00:00
|
|
|
|
|
|
|
|
|
local EquipBorderDic = {} -- 装备边界属性构造字典
|
|
|
|
|
local EquipDecomposeDic = {}
|
2024-09-01 20:49:41 +00:00
|
|
|
|
local SuitIdToEquipTemplateIdsDic = {} -- 套装Id索引的装备Id字典 --这个是根据装备位置为key存储的
|
|
|
|
|
local SuitIdToEquipTemplateIdsList = {} -- 套装Id索引的装备Id数组 --这个是有序数组
|
2023-07-14 19:35:33 +00:00
|
|
|
|
local SuitSitesDic = {} -- 套装产出部位字典
|
2024-09-01 20:49:41 +00:00
|
|
|
|
local WeaponOverrunDic = {} -- 武器超限字典
|
|
|
|
|
|
|
|
|
|
local EquipSignboardCfg = nil -- 绑定武器到动作、皮肤配置
|
|
|
|
|
local EquipSignboardDic = nil -- 绑定武器到动作、皮肤字典
|
|
|
|
|
local EquipAnimResetDic = {} -- 武器动画重置
|
2023-07-14 19:35:33 +00:00
|
|
|
|
|
|
|
|
|
--记录超频界面的页签状态
|
2024-09-01 20:49:41 +00:00
|
|
|
|
local EquipAwakeTabIndex = XEquipConfig.EquipAwakeTabIndex.CrystalMoney
|
2023-07-14 19:35:33 +00:00
|
|
|
|
|
|
|
|
|
local CompareBreakthrough = function(templateId, breakthrough)
|
|
|
|
|
local template = EquipBorderDic[templateId]
|
|
|
|
|
if not template then
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if not template.MaxBreakthrough or template.MaxBreakthrough < breakthrough then
|
|
|
|
|
template.MaxBreakthrough = breakthrough
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local CheckEquipBorderConfig = function()
|
|
|
|
|
for k, v in pairs(EquipBorderDic) do
|
|
|
|
|
local template = EquipBorderDic[k]
|
|
|
|
|
template.MinLevel = 1
|
|
|
|
|
local equipBreakthroughCfg = XEquipConfig.GetEquipBreakthroughCfg(k, v.MaxBreakthrough)
|
|
|
|
|
template.MaxLevel = equipBreakthroughCfg.LevelLimit
|
|
|
|
|
template.MinBreakthrough = 0
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local InitEquipBreakthroughConfig = function()
|
|
|
|
|
local tab = XTableManager.ReadByIntKey(TABLE_EQUIP_BREAKTHROUGH_PATH, XTable.XTableEquipBreakthrough, "Id")
|
|
|
|
|
for _, config in pairs(tab) do
|
|
|
|
|
if not EquipBreakthroughTemplate[config.EquipId] then
|
|
|
|
|
EquipBreakthroughTemplate[config.EquipId] = {}
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if config.AttribPromotedId == 0 then
|
|
|
|
|
XLog.ErrorTableDataNotFound("InitEquipBreakthroughConfig", "EquipBreakthroughTemplate",
|
|
|
|
|
TABLE_EQUIP_BREAKTHROUGH_PATH, "config.EquipId", tostring(config.EquipId))
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
EquipBreakthroughTemplate[config.EquipId][config.Times] = config
|
|
|
|
|
CompareBreakthrough(config.EquipId, config.Times)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local InitEquipLevelConfig = function()
|
|
|
|
|
local paths = CS.XTableManager.GetPaths(TABLE_LEVEL_UP_TEMPLATE_PATH)
|
|
|
|
|
XTool.LoopCollection(paths, function(path)
|
|
|
|
|
local key = tonumber(XTool.GetFileNameWithoutExtension(path))
|
|
|
|
|
LevelUpTemplates[key] = XTableManager.ReadByIntKey(path, XTable.XTableEquipLevelUp, "Level")
|
|
|
|
|
end)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local InitWeaponSkillPoolConfig = function()
|
|
|
|
|
local tab = XTableManager.ReadByIntKey(TABLE_WEAPON_SKILL_POOL_PATH, XTable.XTableWeaponSkillPool, "Id")
|
|
|
|
|
for _, config in pairs(tab) do
|
|
|
|
|
WeaponSkillPoolTemplate[config.PoolId] = WeaponSkillPoolTemplate[config.PoolId] or {}
|
|
|
|
|
WeaponSkillPoolTemplate[config.PoolId][config.CharacterId] = WeaponSkillPoolTemplate[config.PoolId][config.CharacterId] or {}
|
|
|
|
|
|
|
|
|
|
for i, skillId in ipairs(config.SkillId) do
|
|
|
|
|
tableInsert(WeaponSkillPoolTemplate[config.PoolId][config.CharacterId], skillId)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local InitEquipModelTransformConfig = function()
|
|
|
|
|
local tab = XTableManager.ReadByIntKey(TABLE_EQUIP_MODEL_TRANSFORM_PATH, XTable.XTableEquipModelTransform, "Id")
|
|
|
|
|
for id, config in pairs(tab) do
|
|
|
|
|
local indexId = config.IndexId
|
|
|
|
|
if not indexId then
|
|
|
|
|
XLog.ErrorTableDataNotFound("InitEquipModelTransformConfig", "tab", TABLE_EQUIP_MODEL_TRANSFORM_PATH, "id", tostring(id))
|
|
|
|
|
end
|
|
|
|
|
EquipModelTransformTemplates[indexId] = EquipModelTransformTemplates[indexId] or {}
|
|
|
|
|
|
|
|
|
|
local uiName = config.UiName
|
|
|
|
|
if not uiName then
|
|
|
|
|
XLog.ErrorTableDataNotFound("InitEquipModelTransformConfig", "配置表中UiName字段", TABLE_EQUIP_MODEL_TRANSFORM_PATH, "id", tostring(id))
|
|
|
|
|
end
|
|
|
|
|
EquipModelTransformTemplates[indexId][uiName] = config
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local InitEquipSkipIdConfig = function()
|
|
|
|
|
local tab = XTableManager.ReadByIntKey(TABLE_EQUIP_SKIPID_PATH, XTable.XTableEquipSkipId, "Id")
|
|
|
|
|
for id, config in pairs(tab) do
|
|
|
|
|
local eatType = config.EatType
|
2024-09-01 20:49:41 +00:00
|
|
|
|
EquipEatSkipIdTemplates[eatType] = EquipEatSkipIdTemplates[eatType] or {}
|
2023-07-14 19:35:33 +00:00
|
|
|
|
|
|
|
|
|
local site = config.Site
|
|
|
|
|
if not site then
|
|
|
|
|
XLog.ErrorTableDataNotFound("InitEquipSkipIdConfig", "配置表中Site字段", TABLE_EQUIP_SKIPID_PATH, "id", tostring(id))
|
|
|
|
|
end
|
2024-09-01 20:49:41 +00:00
|
|
|
|
--装备来源
|
|
|
|
|
if XTool.IsNumberValid(config.EquipType) then
|
|
|
|
|
EquipSkipIdTemplates[config.EquipType] = config
|
|
|
|
|
else --装备升级材料来源
|
|
|
|
|
EquipEatSkipIdTemplates[eatType][site] = config
|
|
|
|
|
end
|
|
|
|
|
|
2023-07-14 19:35:33 +00:00
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local InitEquipSuitConfig = function()
|
|
|
|
|
EquipSuitTemplate = XTableManager.ReadByIntKey(TABLE_EQUIP_SUIT_PATH, XTable.XTableEquipSuit, "Id")
|
|
|
|
|
EquipSuitEffectTemplate = XTableManager.ReadByIntKey(TABLE_EQUIP_SUIT_EFFECT_PATH, XTable.XTableEquipSuitEffect, "Id")
|
|
|
|
|
end
|
|
|
|
|
|
2024-09-01 20:49:41 +00:00
|
|
|
|
local InitWeaponDeregulateConfig = function()
|
|
|
|
|
WeaponOverrunTemplate = XTableManager.ReadByIntKey(TABLE_WEAPON_OVERRUN_PATH, XTable.XTableWeaponOverrun, "Id")
|
|
|
|
|
for _, cfg in ipairs(WeaponOverrunTemplate) do
|
|
|
|
|
local weaponId = cfg.WeaponId
|
|
|
|
|
local cfgs = WeaponOverrunDic[weaponId]
|
|
|
|
|
if not cfgs then
|
|
|
|
|
cfgs = {}
|
|
|
|
|
WeaponOverrunDic[weaponId] = cfgs
|
|
|
|
|
end
|
|
|
|
|
table.insert(cfgs, cfg)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
2023-07-14 19:35:33 +00:00
|
|
|
|
function XEquipConfig.Init()
|
|
|
|
|
MAX_WEAPON_COUNT = CS.XGame.Config:GetInt("EquipWeaponMaxCount")
|
|
|
|
|
MAX_AWARENESS_COUNT = CS.XGame.Config:GetInt("EquipChipMaxCount")
|
|
|
|
|
EQUIP_EXP_INHERIT_PRECENT = CS.XGame.Config:GetInt("EquipExpInheritPercent")
|
|
|
|
|
EQUIP_RECYCLE_ITEM_PERCENT = CS.XGame.Config:GetInt("EquipRecycleItemPercent")
|
|
|
|
|
MIN_RESONANCE_BIND_STAR = CS.XGame.Config:GetInt("MinResonanceBindStar")
|
|
|
|
|
MIN_AWAKE_STAR = CS.XGame.Config:GetInt("MinEquipAwakeStar")
|
|
|
|
|
|
|
|
|
|
EquipResTemplates = XTableManager.ReadByIntKey(TABLE_EQUIP_RES_PATH, XTable.XTableEquipRes, "Id")
|
|
|
|
|
EquipAwakeTemplate = XTableManager.ReadByIntKey(TABLE_EQUIP_AWAKE_PATH, XTable.XTableEquipAwake, "Id")
|
2024-09-01 20:49:41 +00:00
|
|
|
|
local equipTemplates = XEquipConfig.GetEquipTemplates()
|
|
|
|
|
XTool.LoopMap(equipTemplates, function(id, equipCfg)
|
2023-07-14 19:35:33 +00:00
|
|
|
|
EquipBorderDic[id] = {}
|
|
|
|
|
local suitId = equipCfg.SuitId
|
|
|
|
|
if suitId and suitId > 0 then
|
|
|
|
|
SuitIdToEquipTemplateIdsDic[suitId] = SuitIdToEquipTemplateIdsDic[suitId] or {}
|
2024-09-01 20:49:41 +00:00
|
|
|
|
SuitIdToEquipTemplateIdsDic[suitId][equipCfg.Site] = id
|
|
|
|
|
|
|
|
|
|
SuitIdToEquipTemplateIdsList[suitId] = SuitIdToEquipTemplateIdsList[suitId] or {}
|
|
|
|
|
tableInsert(SuitIdToEquipTemplateIdsList[suitId], id)
|
2023-07-14 19:35:33 +00:00
|
|
|
|
|
|
|
|
|
SuitSitesDic[suitId] = SuitSitesDic[suitId] or {}
|
|
|
|
|
SuitSitesDic[suitId][equipCfg.Site] = true
|
|
|
|
|
end
|
|
|
|
|
end)
|
|
|
|
|
|
|
|
|
|
InitEquipSuitConfig()
|
|
|
|
|
InitEquipBreakthroughConfig()
|
|
|
|
|
InitEquipLevelConfig()
|
|
|
|
|
InitWeaponSkillPoolConfig()
|
|
|
|
|
InitEquipModelTransformConfig()
|
|
|
|
|
InitEquipSkipIdConfig()
|
2024-09-01 20:49:41 +00:00
|
|
|
|
InitWeaponDeregulateConfig()
|
2023-07-14 19:35:33 +00:00
|
|
|
|
|
|
|
|
|
CheckEquipBorderConfig()
|
|
|
|
|
|
|
|
|
|
--EquipBorderDic = XReadOnlyTable.Create(EquipBorderDic)
|
|
|
|
|
WeaponSkillTemplate = XTableManager.ReadByIntKey(TABLE_WEAPON_SKILL_PATH, XTable.XTableWeaponSkill, "Id")
|
|
|
|
|
EquipResonanceTemplate = XTableManager.ReadByIntKey(TABLE_EQUIP_RESONANCE_PATH, XTable.XTableEquipResonance, "Id")
|
|
|
|
|
EquipResonanceConsumeItemTemplates = XTableManager.ReadByIntKey(TABLE_EQUIP_RESONANCE_CONSUME_ITEM_PATH, XTable.XTableEquipResonanceUseItem, "Id")
|
|
|
|
|
EquipModelTemplates = XTableManager.ReadByIntKey(TABLE_EQUIP_MODEL_PATH, XTable.XTableEquipModel, "Id")
|
|
|
|
|
EquipAnimTemplates = XTableManager.ReadByStringKey(TABLE_EQUIP_ANIM_PATH, XTable.XTableEquipAnim, "ModelId")
|
|
|
|
|
EquipModelShowTemplate = XTableManager.ReadByStringKey(TABLE_EQUIP_MODEL_SHOW_PATH, XTable.XTableEquipModelShow, "Id")
|
|
|
|
|
EquipResByFoolTemplate = XTableManager.ReadByIntKey(TABLE_EQUIP_RES_BY_FOOL_PATH, XTable.XTableEquipResByFool, "Id")
|
2024-09-01 20:49:41 +00:00
|
|
|
|
WeaponDeregulateUITemplate = XTableManager.ReadByIntKey(TABLE_WEAPON_DEREGULATE_UI, XTable.XTableWeaponDeregulateUI, "Lv")
|
2023-07-14 19:35:33 +00:00
|
|
|
|
|
|
|
|
|
local decomposetab = XTableManager.ReadByIntKey(TABLE_EQUIP_DECOMPOSE_PATH, XTable.XTableEquipDecompose, "Id")
|
|
|
|
|
for _, v in pairs(decomposetab) do
|
|
|
|
|
EquipDecomposeDic[v.Site .. v.Star .. v.Breakthrough] = v
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local eatCostTab = XTableManager.ReadByIntKey(TABLE_EAT_EQUIP_COST_PATH, XTable.XTableEatEquipCost, "Id")
|
|
|
|
|
for _, v in pairs(eatCostTab) do
|
|
|
|
|
EatEquipCostTemplate[v.Site .. v.Star] = v.UseMoney
|
|
|
|
|
end
|
2024-09-01 20:49:41 +00:00
|
|
|
|
|
|
|
|
|
local animResetTab = XTableManager.ReadByIntKey(TABLE_EQUIP_ANIM_RESET, XTable.XTableEquipAnimReset, "Id")
|
|
|
|
|
for _, v in pairs(animResetTab) do
|
|
|
|
|
EquipAnimResetDic[v.CharacterModel] = true
|
|
|
|
|
end
|
2023-07-14 19:35:33 +00:00
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XEquipConfig.GetMaxWeaponCount()
|
|
|
|
|
return MAX_WEAPON_COUNT
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XEquipConfig.GetMaxAwarenessCount()
|
|
|
|
|
return MAX_AWARENESS_COUNT
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XEquipConfig.GetEquipExpInheritPercent()
|
|
|
|
|
return EQUIP_EXP_INHERIT_PRECENT
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XEquipConfig.GetEquipRecycleItemId()
|
|
|
|
|
return XDataCenter.ItemManager.ItemId.EquipRecycleItemId
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XEquipConfig.GetEquipRecycleItemPercent()
|
|
|
|
|
return EQUIP_RECYCLE_ITEM_PERCENT / 100
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XEquipConfig.GetMinResonanceBindStar()
|
|
|
|
|
return MIN_RESONANCE_BIND_STAR
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XEquipConfig.GetMinAwakeStar()
|
|
|
|
|
return MIN_AWAKE_STAR
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XEquipConfig.GetEquipCfg(templateId)
|
2024-09-01 20:49:41 +00:00
|
|
|
|
return XMVCA:GetAgency(ModuleId.XEquip):GetConfigEquip(templateId)
|
2023-07-14 19:35:33 +00:00
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--todo 道具很多地方没有检查ID类型就调用了,临时处理下
|
|
|
|
|
function XEquipConfig.CheckTemplateIdIsEquip(templateId)
|
2024-09-01 20:49:41 +00:00
|
|
|
|
if not templateId then
|
|
|
|
|
return false
|
2023-07-14 19:35:33 +00:00
|
|
|
|
end
|
|
|
|
|
|
2024-09-01 20:49:41 +00:00
|
|
|
|
local equipTemplates = XEquipConfig.GetEquipTemplates()
|
|
|
|
|
return equipTemplates[templateId] ~= nil
|
2023-07-14 19:35:33 +00:00
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XEquipConfig.GetEatEquipCostMoney(site, star)
|
|
|
|
|
if not site then
|
|
|
|
|
XLog.Error("XEquipConfig.GetEatEquipCostMoney函数参数错误,site不能为空")
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
if not star then
|
|
|
|
|
XLog.Error("XEquipConfig.GetEatEquipCostMoney函数参数错误,star不能为空")
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
return EatEquipCostTemplate[site .. star]
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XEquipConfig.GetEquipBorderCfg(templateId)
|
|
|
|
|
local template = EquipBorderDic[templateId]
|
|
|
|
|
if not template then
|
|
|
|
|
XLog.ErrorTableDataNotFound("XEquipConfig.GetEquipBorderCfg", "template", TABLE_EQUIP_PATH, "templateId", tostring(templateId))
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
return template
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XEquipConfig.GetEquipBreakthroughCfg(templateId, times)
|
|
|
|
|
local template = EquipBreakthroughTemplate[templateId]
|
|
|
|
|
if not template then
|
|
|
|
|
XLog.ErrorTableDataNotFound("XEquipConfig.GetEquipBreakthroughCfg", "template",
|
|
|
|
|
TABLE_EQUIP_BREAKTHROUGH_PATH, "templateId", tostring(templateId))
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
template = template[times]
|
|
|
|
|
if not template then
|
|
|
|
|
XLog.ErrorTableDataNotFound("XEquipConfig.GetEquipBreakthroughCfg", "template",
|
|
|
|
|
TABLE_EQUIP_BREAKTHROUGH_PATH, "templateId : times", tostring(templateId) .. " : " .. tostring(times))
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
return template
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XEquipConfig.GetEquipResCfg(templateId, breakthroughTimes)
|
|
|
|
|
breakthroughTimes = breakthroughTimes or 0
|
|
|
|
|
local breakthroughCfg = XEquipConfig.GetEquipBreakthroughCfg(templateId, breakthroughTimes)
|
|
|
|
|
|
|
|
|
|
local resId = breakthroughCfg.ResId
|
|
|
|
|
if not resId then
|
|
|
|
|
XLog.ErrorTableDataNotFound("XEquipConfig.GetEquipResCfg", "resId",
|
|
|
|
|
TABLE_EQUIP_BREAKTHROUGH_PATH, "templateId : times", tostring(templateId) .. " : " .. tostring(breakthroughTimes))
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local template = EquipResTemplates[resId]
|
|
|
|
|
if not template then
|
|
|
|
|
XLog.ErrorTableDataNotFound("XEquipConfig.GetEquipResCfg", "template", TABLE_EQUIP_RES_PATH, "resId", tostring(resId))
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
return template
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--=========== EquipModel接口(begin) ===========
|
|
|
|
|
function XEquipConfig.GetEquipModelName(modelTransId, usage)
|
|
|
|
|
local template = EquipModelTemplates[modelTransId]
|
|
|
|
|
|
|
|
|
|
if not template then
|
|
|
|
|
XLog.ErrorTableDataNotFound("XEquipConfig.GetEquipModelName", "template", TABLE_EQUIP_MODEL_PATH, "modelTransId", tostring(modelTransId))
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
usage = usage or XEquipConfig.WeaponUsage.Role
|
|
|
|
|
return template.ModelName[usage] or template.ModelName[XEquipConfig.WeaponUsage.Role]
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XEquipConfig.GetEquipAnimController(modelTransId, usage)
|
|
|
|
|
local template = EquipModelTemplates[modelTransId]
|
|
|
|
|
|
|
|
|
|
if not template then
|
|
|
|
|
XLog.ErrorTableDataNotFound("XEquipConfig.GetEquipAnimController", "template", TABLE_EQUIP_MODEL_PATH, "modelTransId", tostring(modelTransId))
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
usage = usage or XEquipConfig.WeaponUsage.Role
|
|
|
|
|
|
|
|
|
|
local controller = template.AnimController[usage]
|
|
|
|
|
if not controller and usage ~= XEquipConfig.WeaponUsage.Show then -- 单独展示不需默认值
|
|
|
|
|
controller = template.AnimController[XEquipConfig.WeaponUsage.Role]
|
|
|
|
|
end
|
|
|
|
|
return controller
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XEquipConfig.GetEquipUiAnimStateName(modelTransId, usage)
|
|
|
|
|
local template = EquipModelTemplates[modelTransId]
|
|
|
|
|
if not template then
|
|
|
|
|
XLog.ErrorTableDataNotFound("XEquipConfig.GetEquipUiAnimStateName", "template", TABLE_EQUIP_MODEL_PATH, "modelTransId", tostring(modelTransId))
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
usage = usage or XEquipConfig.WeaponUsage.Role
|
|
|
|
|
return template.UiAnimStateName[usage] or template.UiAnimStateName[XEquipConfig.WeaponUsage.Role]
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XEquipConfig.GetEquipUiAnimCueId(modelTransId, usage)
|
|
|
|
|
local template = EquipModelTemplates[modelTransId]
|
|
|
|
|
if not template then
|
|
|
|
|
XLog.ErrorTableDataNotFound("XEquipConfig.GetEquipUiAnimCueId", "template", TABLE_EQUIP_MODEL_PATH, "modelTransId", tostring(modelTransId))
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
usage = usage or XEquipConfig.WeaponUsage.Role
|
|
|
|
|
return template.UiAnimCueId[usage] or template.UiAnimCueId[XEquipConfig.WeaponUsage.Role]
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XEquipConfig.GetEquipUiAnimDelay(modelTransId, usage)
|
|
|
|
|
local template = EquipModelTemplates[modelTransId]
|
|
|
|
|
if not template then
|
|
|
|
|
XLog.ErrorTableDataNotFound("XEquipConfig.GetEquipUiAnimDelay", "template", TABLE_EQUIP_MODEL_PATH, "modelTransId", tostring(modelTransId))
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
usage = usage or XEquipConfig.WeaponUsage.Role
|
|
|
|
|
return template.UiAnimDelay[usage] or template.UiAnimDelay[XEquipConfig.WeaponUsage.Role]
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XEquipConfig.GetEquipUiAutoRotateDelay(modelTransId, usage)
|
|
|
|
|
local template = EquipModelTemplates[modelTransId]
|
|
|
|
|
if not template then
|
|
|
|
|
XLog.ErrorTableDataNotFound("XEquipConfig.GetEquipUiAutoRotateDelay", "template", TABLE_EQUIP_MODEL_PATH, "modelTransId", tostring(modelTransId))
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
usage = usage or XEquipConfig.WeaponUsage.Show -- 默认ui展示
|
|
|
|
|
return template.UiAutoRotateDelay[usage] or template.UiAutoRotateDelay[XEquipConfig.WeaponUsage.Role]
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XEquipConfig.GetEquipModelEffectPath(modelTransId, usage)
|
|
|
|
|
local template = EquipModelTemplates[modelTransId]
|
|
|
|
|
|
|
|
|
|
if not template then
|
|
|
|
|
XLog.ErrorTableDataNotFound("XEquipConfig.GetEquipModelEffectPath", "template", TABLE_EQUIP_MODEL_PATH, "modelTransId", tostring(modelTransId))
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
usage = usage or XEquipConfig.WeaponUsage.Role
|
|
|
|
|
return template.ResonanceEffectPath[usage] or template.ResonanceEffectPath[XEquipConfig.WeaponUsage.Role]
|
|
|
|
|
end
|
|
|
|
|
--=========== EquipModel接口(end) ===========
|
|
|
|
|
function XEquipConfig.GetEquipAnimParams(roleModelId)
|
|
|
|
|
local template = EquipAnimTemplates[roleModelId]
|
|
|
|
|
if not template then
|
|
|
|
|
return 0
|
|
|
|
|
end
|
|
|
|
|
return template.Params or 0
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XEquipConfig.GetWeaponResonanceModelId(case, templateId, resonanceCount)
|
|
|
|
|
local modelId
|
|
|
|
|
local template = EquipResTemplates[templateId]
|
|
|
|
|
if not template then
|
|
|
|
|
XLog.ErrorTableDataNotFound("XEquipConfig.GetWeaponResonanceModelId", "template", TABLE_EQUIP_RES_PATH, "templateId", tostring(templateId))
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
if resonanceCount == 1 then
|
|
|
|
|
modelId = template.ResonanceModelTransId1[case]
|
|
|
|
|
elseif resonanceCount == 2 then
|
|
|
|
|
modelId = template.ResonanceModelTransId2[case]
|
|
|
|
|
elseif resonanceCount == 3 then
|
|
|
|
|
modelId = template.ResonanceModelTransId3[case]
|
|
|
|
|
end
|
|
|
|
|
return modelId or template.ModelTransId[case]
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XEquipConfig.GetWeaponResonanceEffectDelay(modelTransId)
|
|
|
|
|
local template = EquipModelTemplates[modelTransId]
|
|
|
|
|
|
|
|
|
|
if not template then
|
|
|
|
|
XLog.ErrorTableDataNotFound("XEquipConfig.GetWeaponResonanceEffectDelay",
|
|
|
|
|
"template", TABLE_EQUIP_MODEL_PATH, "modelTransId", tostring(modelTransId))
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
return template.ResonanceEffectShowDelay[XEquipConfig.WeaponUsage.Show] or 0
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--返回武器模型和位置配置(双枪只返回一把)
|
|
|
|
|
function XEquipConfig.GetEquipModelTransformCfg(templateId, uiName, resonanceCount, modelTransId, equipType)
|
|
|
|
|
local modelCfg, template
|
|
|
|
|
|
|
|
|
|
--尝试用ModelTransId索引
|
|
|
|
|
if not modelTransId then
|
|
|
|
|
modelTransId = XEquipConfig.GetWeaponResonanceModelId(XEquipConfig.WeaponCase.Case1, templateId, resonanceCount)
|
|
|
|
|
if not modelTransId then
|
|
|
|
|
XLog.ErrorTableDataNotFound("XEquipConfig.GetWeaponResonanceModelId",
|
|
|
|
|
"template", TABLE_EQUIP_RES_PATH, "templateId", tostring(templateId))
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
template = EquipModelTransformTemplates[modelTransId]
|
|
|
|
|
if template then
|
|
|
|
|
modelCfg = template[uiName]
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--读不到配置时用equipType索引
|
|
|
|
|
if not modelCfg then
|
|
|
|
|
if not equipType then
|
|
|
|
|
local equipCfg = XEquipConfig.GetEquipCfg(templateId)
|
|
|
|
|
equipType = equipCfg.Type
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
template = EquipModelTransformTemplates[equipType]
|
|
|
|
|
if not template then
|
|
|
|
|
XLog.ErrorTableDataNotFound("XEquipConfig.GetEquipModelTransformCfg",
|
|
|
|
|
"template", TABLE_EQUIP_MODEL_TRANSFORM_PATH, "equipType", tostring(equipType))
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
modelCfg = template[uiName]
|
|
|
|
|
if not modelCfg then
|
|
|
|
|
XLog.ErrorTableDataNotFound("XEquipConfig.GetEquipModelTransformCfg",
|
|
|
|
|
"uiName", TABLE_EQUIP_MODEL_TRANSFORM_PATH, "equipType", tostring(equipType))
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
return modelCfg
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-- 获取一个武器所有的不同的模型列表
|
|
|
|
|
function XEquipConfig.GetWeaponModelCfgList(templateId, uiName, breakthroughTimes)
|
|
|
|
|
local modelCfgList = {}
|
|
|
|
|
|
|
|
|
|
if not templateId then
|
|
|
|
|
XLog.Error("XEquipManager.GetWeaponModelCfgList函数参数错误, templateId不能为空")
|
|
|
|
|
return modelCfgList
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local template = XEquipConfig.GetEquipResCfg(templateId, breakthroughTimes)
|
|
|
|
|
-- 目前只有共鸣改变形态,有可能有相同的模型,所以需要区别是否有相同的id,以左手id为准
|
|
|
|
|
local resonanceCountList = {}
|
|
|
|
|
local resonanceDic = {}
|
|
|
|
|
local modelId
|
|
|
|
|
for i = 0, XEquipConfig.MAX_RESONANCE_SKILL_COUNT do
|
|
|
|
|
modelId = XEquipConfig.GetWeaponResonanceModelId(XEquipConfig.WeaponCase.Case1, template.Id, i)
|
|
|
|
|
if modelId and not resonanceDic[modelId] then
|
|
|
|
|
resonanceDic[modelId] = true
|
|
|
|
|
table.insert(resonanceCountList, i)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local modelCfg
|
|
|
|
|
for _, resonanceCount in ipairs(resonanceCountList) do
|
|
|
|
|
modelCfg = {}
|
|
|
|
|
modelCfg.ModelId = XEquipConfig.GetWeaponResonanceModelId(XEquipConfig.WeaponCase.Case1, template.Id, resonanceCount)
|
|
|
|
|
modelCfg.TransformConfig = XEquipConfig.GetEquipModelTransformCfg(templateId, uiName, resonanceCount)
|
|
|
|
|
table.insert(modelCfgList, modelCfg)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
return modelCfgList
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XEquipConfig.GetLevelUpCfg(templateId, times, level)
|
|
|
|
|
local breakthroughCfg = XEquipConfig.GetEquipBreakthroughCfg(templateId, times)
|
|
|
|
|
if not breakthroughCfg then
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
templateId = breakthroughCfg.LevelUpTemplateId
|
|
|
|
|
|
|
|
|
|
local template = LevelUpTemplates[templateId]
|
|
|
|
|
if not template then
|
|
|
|
|
XLog.ErrorTableDataNotFound("XEquipConfig.GetLevelUpCfg", "template", TABLE_LEVEL_UP_TEMPLATE_PATH, "templateId", tostring(templateId))
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
template = template[level]
|
|
|
|
|
if not template then
|
|
|
|
|
XLog.ErrorTableDataNotFound("XEquipConfig.GetLevelUpCfg", "level", TABLE_LEVEL_UP_TEMPLATE_PATH, "templateId", tostring(templateId))
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
return template
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XEquipConfig.GetEquipSuitCfg(templateId)
|
|
|
|
|
local template = EquipSuitTemplate[templateId]
|
|
|
|
|
if not template then
|
|
|
|
|
XLog.ErrorTableDataNotFound("XEquipConfig.GetEquipSuitCfg", "template", TABLE_EQUIP_SUIT_PATH, "templateId", tostring(templateId))
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
return template
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XEquipConfig.GetEquipSuitEffectCfg(templateId)
|
|
|
|
|
local template = EquipSuitEffectTemplate[templateId]
|
|
|
|
|
if not template then
|
|
|
|
|
XLog.ErrorTableDataNotFound("XEquipConfig.GetEquipSuitEffectCfg", "template",
|
|
|
|
|
TABLE_EQUIP_SUIT_EFFECT_PATH, "templateId", tostring(templateId))
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
return template
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XEquipConfig.GetEquipTemplateIdsBySuitId(suitId)
|
|
|
|
|
return SuitIdToEquipTemplateIdsDic[suitId] or {}
|
|
|
|
|
end
|
|
|
|
|
|
2024-09-01 20:49:41 +00:00
|
|
|
|
--这个是获取数组的
|
|
|
|
|
function XEquipConfig.GetEquipTemplateIdsListBySuitId(suitId)
|
|
|
|
|
return SuitIdToEquipTemplateIdsList[suitId] or {}
|
|
|
|
|
end
|
|
|
|
|
|
2023-07-14 19:35:33 +00:00
|
|
|
|
function XEquipConfig.GetSuitSites(suitId)
|
|
|
|
|
return SuitSitesDic[suitId] or {}
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XEquipConfig.GetMaxSuitCount()
|
|
|
|
|
return XTool.GetTableCount(SuitSitesDic)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XEquipConfig.GetEquipBgPath(templateId)
|
|
|
|
|
if not XEquipConfig.CheckTemplateIdIsEquip(templateId) then return end
|
|
|
|
|
local template = XEquipConfig.GetEquipCfg(templateId)
|
|
|
|
|
local quality = template.Quality
|
|
|
|
|
return XArrangeConfigs.GeQualityBgPath(quality)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XEquipConfig.GetEquipQualityPath(templateId)
|
|
|
|
|
local template = XEquipConfig.GetEquipCfg(templateId)
|
|
|
|
|
local quality = template.Quality
|
|
|
|
|
if not quality then
|
|
|
|
|
XLog.ErrorTableDataNotFound("XEquipConfig.GetEquipQualityPath", "Quality", TABLE_EQUIP_PATH, "templateId", tostring(templateId))
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
return XArrangeConfigs.GeQualityPath(quality)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XEquipConfig.GetEquipResoanceIconPath(isAwaken)
|
|
|
|
|
return EquipResonanceIconPath[isAwaken]
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XEquipConfig.GetEquipDecomposeCfg(templateId, breakthroughTimes)
|
|
|
|
|
if not XEquipConfig.CheckTemplateIdIsEquip(templateId) then return end
|
|
|
|
|
breakthroughTimes = breakthroughTimes or 0
|
|
|
|
|
|
|
|
|
|
local template = XEquipConfig.GetEquipCfg(templateId)
|
|
|
|
|
local site = template.Site
|
|
|
|
|
if not site then
|
|
|
|
|
XLog.ErrorTableDataNotFound("XEquipConfig.GetEquipDecomposeCfg", "Site", TABLE_EQUIP_PATH, "templateId", tostring(templateId))
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local star = template.Star
|
|
|
|
|
if not star then
|
|
|
|
|
XLog.ErrorTableDataNotFound("XEquipConfig.GetEquipDecomposeCfg", "Star", TABLE_EQUIP_PATH, "templateId", tostring(templateId))
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
return EquipDecomposeDic[site .. star .. breakthroughTimes]
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XEquipConfig.GetWeaponTypeIconPath(templateId)
|
|
|
|
|
return XGoodsCommonManager.GetGoodsShowParamsByTemplateId(templateId).Icon
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XEquipConfig.GetEquipBreakThroughIcon(breakthroughTimes)
|
|
|
|
|
local icon = EquipBreakThroughIcon[breakthroughTimes]
|
|
|
|
|
if not icon then
|
|
|
|
|
XLog.Error("XEquipConfig.EquipBreakThroughIcon调用错误,得到的icon为空,原因:检查breakthroughTimes:" .. breakthroughTimes .. "和EquipBreakThroughIcon")
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
return icon
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XEquipConfig.GetEquipBreakThroughSmallIcon(breakthroughTimes)
|
|
|
|
|
local icon = EquipBreakThroughSmallIcon[breakthroughTimes]
|
|
|
|
|
if not icon then
|
|
|
|
|
XLog.Error("XEquipConfig.GetEquipBreakThroughSmallIcon调用错误,得到的icon为空,原因:检查breakthroughTimes:" .. breakthroughTimes .. "和EquipBreakThroughSmallIcon")
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
return icon
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XEquipConfig.GetEquipBreakThroughBigIcon(breakthroughTimes)
|
|
|
|
|
local icon = EquipBreakThroughBigIcon[breakthroughTimes]
|
|
|
|
|
if not icon then
|
|
|
|
|
XLog.Error("XEquipConfig.GetEquipBreakThroughBigIcon调用错误,得到的icon为空,原因:检查breakthroughTimes:" .. breakthroughTimes .. "和EquipBreakThroughBigIcon")
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
return icon
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XEquipConfig.GetWeaponSkillTemplate(templateId)
|
|
|
|
|
local template = WeaponSkillTemplate[templateId]
|
|
|
|
|
if not template then
|
|
|
|
|
XLog.ErrorTableDataNotFound("XEquipConfig.GetWeaponSkillTemplate", "template", TABLE_WEAPON_SKILL_PATH, "templateId", tostring(templateId))
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
return template
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XEquipConfig.GetWeaponSkillInfo(weaponSkillId)
|
|
|
|
|
local template = WeaponSkillTemplate[weaponSkillId]
|
|
|
|
|
if not template then
|
|
|
|
|
XLog.ErrorTableDataNotFound("XEquipConfig.GetWeaponSkillInfo", "template", TABLE_WEAPON_SKILL_PATH, "weaponSkillId", tostring(weaponSkillId))
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
return template
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XEquipConfig.GetWeaponSkillAbility(weaponSkillId)
|
|
|
|
|
local template = WeaponSkillTemplate[weaponSkillId]
|
|
|
|
|
if not template then
|
|
|
|
|
XLog.ErrorTableDataNotFound("XEquipConfig.GetWeaponSkillAbility", "template",
|
|
|
|
|
TABLE_WEAPON_SKILL_PATH, "weaponSkillId", tostring(weaponSkillId))
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
return template.Ability
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XEquipConfig.GetWeaponSkillPoolSkillIds(poolId, characterId)
|
|
|
|
|
local template = WeaponSkillPoolTemplate[poolId]
|
|
|
|
|
if not template then
|
|
|
|
|
XLog.ErrorTableDataNotFound("XEquipConfig.GetWeaponSkillPoolSkillIds", "template", TABLE_WEAPON_SKILL_POOL_PATH, "poolId", tostring(poolId))
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local skillIds = template[characterId]
|
|
|
|
|
if not skillIds then
|
|
|
|
|
XLog.ErrorTableDataNotFound("XEquipConfig.GetWeaponSkillPoolSkillIds",
|
|
|
|
|
"characterId", TABLE_WEAPON_SKILL_POOL_PATH, "poolId", tostring(poolId))
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
return skillIds
|
|
|
|
|
end
|
|
|
|
|
|
2024-09-01 20:49:41 +00:00
|
|
|
|
function XEquipConfig.GetEquipEatSkipIdTemplate(eatType, site)
|
|
|
|
|
local template = EquipEatSkipIdTemplates[eatType][site]
|
2023-07-14 19:35:33 +00:00
|
|
|
|
if not template then
|
2024-09-01 20:49:41 +00:00
|
|
|
|
XLog.ErrorTableDataNotFound("XEquipConfig.GetEquipEatSkipIdTemplate", "site", TABLE_WEAPON_SKILL_POOL_PATH, "eatType", tostring(eatType))
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
return template
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XEquipConfig.GetEquipSkipIdTemplate(equipType)
|
|
|
|
|
local template = EquipSkipIdTemplates[equipType]
|
|
|
|
|
if not template then
|
|
|
|
|
XLog.ErrorTableDataNotFound("XEquipConfig.GetEquipSkipIdTemplate", "Config", TABLE_WEAPON_SKILL_POOL_PATH, "eatType", tostring(equipType))
|
2023-07-14 19:35:33 +00:00
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
return template
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XEquipConfig.GetEquipResonanceCfg(templateId)
|
|
|
|
|
local equipResonanceCfg = EquipResonanceTemplate[templateId]
|
|
|
|
|
|
|
|
|
|
if not equipResonanceCfg then
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
return equipResonanceCfg
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XEquipConfig.GetEquipCharacterType(templateId)
|
|
|
|
|
local config = XEquipConfig.GetEquipCfg(templateId)
|
|
|
|
|
return config.CharacterType
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XEquipConfig.GetEquipResonanceConsumeItemCfg(templateId)
|
|
|
|
|
local equipResonanceItemCfg = EquipResonanceConsumeItemTemplates[templateId]
|
|
|
|
|
|
|
|
|
|
if not equipResonanceItemCfg then
|
|
|
|
|
XLog.ErrorTableDataNotFound("XEquipConfig.GetEquipResonanceConsumeItemCfg",
|
|
|
|
|
"equipResonanceItemCfg", TABLE_EQUIP_RESONANCE_CONSUME_ITEM_PATH, "templateId", tostring(templateId))
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
return equipResonanceItemCfg
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XEquipConfig.GetNeedFirstShow(templateId)
|
|
|
|
|
local template = XEquipConfig.GetEquipCfg(templateId)
|
|
|
|
|
return template.NeedFirstShow
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XEquipConfig.GetEquipTemplates()
|
2024-09-01 20:49:41 +00:00
|
|
|
|
return XMVCA:GetAgency(ModuleId.XEquip):GetConfigEquip()
|
2023-07-14 19:35:33 +00:00
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XEquipConfig.GetEquipAwakeCfg(templateId)
|
|
|
|
|
local equipAwakeCfg = EquipAwakeTemplate[templateId]
|
|
|
|
|
if not equipAwakeCfg then
|
|
|
|
|
XLog.ErrorTableDataNotFound("XEquipConfig.GetEquipAwakeCfg", "equipAwakeCfg", TABLE_EQUIP_AWAKE_PATH, "templateId", tostring(templateId))
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
return equipAwakeCfg
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XEquipConfig.GetEquipAwakeCfgs()
|
|
|
|
|
return EquipAwakeTemplate
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XEquipConfig.GetEquipAwakeSkillDesList(templateId, pos)
|
|
|
|
|
local equipAwakeCfg = XEquipConfig.GetEquipAwakeCfg(templateId)
|
|
|
|
|
local desList = equipAwakeCfg["AttribDes" .. pos]
|
|
|
|
|
if not desList then
|
|
|
|
|
local tempStr = "AttribDes" .. pos
|
|
|
|
|
XLog.ErrorTableDataNotFound("XEquipConfig.GetEquipAwakeSkillDesList", tempStr, TABLE_EQUIP_AWAKE_PATH, "templateId", tostring(templateId))
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
return desList
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XEquipConfig.GetEquipSuitPath()
|
|
|
|
|
return TABLE_EQUIP_SUIT_PATH
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XEquipConfig.GetEquipPath()
|
|
|
|
|
return TABLE_EQUIP_PATH
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XEquipConfig.GetWeaponSkillPath()
|
|
|
|
|
return TABLE_WEAPON_SKILL_PATH
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XEquipConfig.IsDefaultSuitId(suitId)
|
|
|
|
|
return suitId == XEquipConfig.DEFAULT_SUIT_ID.Normal or suitId == XEquipConfig.DEFAULT_SUIT_ID.Isomer
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XEquipConfig.GetDefaultSuitIdCount()
|
|
|
|
|
local count = 0
|
|
|
|
|
for _, _ in pairs(XEquipConfig.DEFAULT_SUIT_ID) do
|
|
|
|
|
count = count + 1
|
|
|
|
|
end
|
|
|
|
|
return count
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XEquipConfig.GetEquipAwakeTabIndex()
|
|
|
|
|
return EquipAwakeTabIndex
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XEquipConfig.GetEquipModelShowHideNodeName(modelId, UiName)
|
|
|
|
|
for _, cfg in pairs(EquipModelShowTemplate) do
|
|
|
|
|
if cfg.ModelId == modelId and cfg.UiName == UiName then
|
|
|
|
|
return cfg.HideNodeName or {}
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
return {}
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
------------愚人节装备替换相关 begin----------------
|
|
|
|
|
function XEquipConfig.GetFoolEquipResCfg(templateId)
|
|
|
|
|
return EquipResByFoolTemplate[templateId]
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XEquipConfig.GetFoolWeaponResonanceModelId(case, templateId, resonanceCount)
|
|
|
|
|
local modelId
|
|
|
|
|
local template = XEquipConfig.GetFoolEquipResCfg(templateId)
|
|
|
|
|
if not template then
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
if resonanceCount == 1 then
|
|
|
|
|
modelId = template.ResonanceModelTransId1[case]
|
|
|
|
|
elseif resonanceCount == 2 then
|
|
|
|
|
modelId = template.ResonanceModelTransId2[case]
|
|
|
|
|
elseif resonanceCount == 3 then
|
|
|
|
|
modelId = template.ResonanceModelTransId3[case]
|
|
|
|
|
end
|
|
|
|
|
return modelId or template.ModelTransId[case]
|
|
|
|
|
end
|
2024-09-01 20:49:41 +00:00
|
|
|
|
------------愚人节装备替换相关 end----------------
|
|
|
|
|
|
|
|
|
|
--region-------------------------武器指定状态机相关-----------------------------------
|
|
|
|
|
---@class _EquipSignboardActiveEnum
|
|
|
|
|
---@field Character number
|
|
|
|
|
---@field Fashion number
|
|
|
|
|
local _EquipSignboardAllActiveEnum = enum({
|
|
|
|
|
Character = 1,
|
|
|
|
|
Fashion = 1,
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
local function GetEquipSignboardCfgs()
|
|
|
|
|
if EquipSignboardCfg == nil then
|
|
|
|
|
EquipSignboardCfg = XTableManager.ReadByIntKey(TABLE_EQUIP_SIGNBOARD_PATH, XTable.XTableEquipSignboard, "Id")
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
return EquipSignboardCfg
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--[[
|
|
|
|
|
=======================================================================================
|
|
|
|
|
当EquipSignboar表ChaIsAllActive字段为1时
|
|
|
|
|
EquipSignboardDic = {
|
|
|
|
|
[characterId] = {
|
|
|
|
|
ChaIsAllActive = true,
|
|
|
|
|
EquipModelIndex = config.EquipModelIndex
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
否则
|
|
|
|
|
当EquipSignboar表FashionId字段为空时
|
|
|
|
|
当EquipSignboar表FashIsAllActive为1时
|
|
|
|
|
EquipSignboardDic = {
|
|
|
|
|
[characterId] = {
|
|
|
|
|
ChaIsAllActive = false,
|
|
|
|
|
AllFashion = true,
|
|
|
|
|
FashIsAllActive = true,
|
|
|
|
|
EquipModelIndex = config.EquipModelIndex
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
否则
|
|
|
|
|
当EquipSignboar表ActionId字段为空时
|
|
|
|
|
EquipSignboardDic = {
|
|
|
|
|
[characterId] = {
|
|
|
|
|
ChaIsAllActive = false,
|
|
|
|
|
AllFashion = true,
|
|
|
|
|
FashIsAllActive = false,
|
|
|
|
|
AllAction = true,
|
|
|
|
|
EquipModelIndex = config.EquipModelIndex
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
否则
|
|
|
|
|
EquipSignboardDic = {
|
|
|
|
|
[characterId] = {
|
|
|
|
|
ChaIsAllActive = false,
|
|
|
|
|
AllFashion = true,
|
|
|
|
|
FashIsAllActive = false,
|
|
|
|
|
AllAction = false,
|
|
|
|
|
ActionIdDic = {
|
|
|
|
|
[actionId] = config.EquipModelIndex,
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
否则
|
|
|
|
|
当EquipSignboar表FashIsAllActive为1时
|
|
|
|
|
EquipSignboardDic = {
|
|
|
|
|
[characterId] = {
|
|
|
|
|
ChaIsAllActive = false,
|
|
|
|
|
AllFashion = false,
|
|
|
|
|
FashionIdDic = {
|
|
|
|
|
[fashionId] = {
|
|
|
|
|
FashIsAllActive = true,
|
|
|
|
|
EquipModelIndex = config.EquipModelIndex
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
否则
|
|
|
|
|
当EquipSignboar表ActionId字段为空时
|
|
|
|
|
EquipSignboardDic = {
|
|
|
|
|
[characterId] = {
|
|
|
|
|
ChaIsAllActive = false,
|
|
|
|
|
AllFashion = false,
|
|
|
|
|
FashionIdDic = {
|
|
|
|
|
[fashionId] = {
|
|
|
|
|
FashIsAllActive = false,
|
|
|
|
|
AllAction = true,
|
|
|
|
|
EquipModelIndex = config.EquipModelIndex
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
否则
|
|
|
|
|
EquipSignboardDic = {
|
|
|
|
|
[characterId] = {
|
|
|
|
|
ChaIsAllActive = false,
|
|
|
|
|
AllFashion = false,
|
|
|
|
|
FashionIdDic = {
|
|
|
|
|
[fashionId] = {
|
|
|
|
|
FashIsAllActive = false,
|
|
|
|
|
AllAction = false,
|
|
|
|
|
ActionIdDic = {
|
|
|
|
|
[actionId] = config.EquipModelIndex,
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
=======================================================================================
|
|
|
|
|
]]
|
|
|
|
|
|
|
|
|
|
local function GetEquipSignboardDic()
|
|
|
|
|
if EquipSignboardDic == nil then
|
|
|
|
|
local configs = GetEquipSignboardCfgs()
|
|
|
|
|
|
|
|
|
|
EquipSignboardDic = {}
|
|
|
|
|
|
|
|
|
|
for id, config in Pairs(configs) do
|
|
|
|
|
local equipModelIndex = config.EquipModelIndex
|
|
|
|
|
local characterId = config.CharacterId
|
|
|
|
|
local fashionId = config.FashionId
|
|
|
|
|
local actionId = config.ActionId
|
|
|
|
|
|
|
|
|
|
if not equipModelIndex then
|
|
|
|
|
XLog.Error(StringFormat("EquipSignboard表的EquipModelIndex字段为空!Id:%d, 路径:%s", id, TABLE_EQUIP_SIGNBOARD_PATH))
|
|
|
|
|
EquipSignboardDic = {}
|
|
|
|
|
|
|
|
|
|
return EquipSignboardDic
|
|
|
|
|
end
|
|
|
|
|
EquipSignboardDic[characterId] = EquipSignboardDic[characterId] or {}
|
|
|
|
|
|
|
|
|
|
if config.ChaIsAllActive and config.ChaIsAllActive == _EquipSignboardAllActiveEnum.Character then
|
|
|
|
|
if not characterId then
|
|
|
|
|
XLog.Error(StringFormat("EquipSignboard表CharacterId为空!Id:%d, 路径:%s", id, TABLE_EQUIP_SIGNBOARD_PATH))
|
|
|
|
|
EquipSignboardDic = {}
|
|
|
|
|
|
|
|
|
|
return EquipSignboardDic
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
EquipSignboardDic[characterId].ChaIsAllActive = true
|
|
|
|
|
EquipSignboardDic[characterId].EquipModelIndex = equipModelIndex
|
|
|
|
|
else
|
|
|
|
|
EquipSignboardDic[characterId].ChaIsAllActive = false
|
|
|
|
|
|
|
|
|
|
if not fashionId or fashionId == 0 then
|
|
|
|
|
EquipSignboardDic[characterId].AllFashion = true
|
|
|
|
|
|
|
|
|
|
if EquipSignboardDic[characterId].FashionIdDic then
|
|
|
|
|
EquipSignboardDic[characterId].FashionIdDic = nil
|
|
|
|
|
XLog.Error(StringFormat("EquipSignboard表CharacterId(%d)配置全部涂装开启武器,会覆盖当前CharacterId的其它涂装配置!Id:%d, 路径:%s", characterId, id, TABLE_EQUIP_SIGNBOARD_PATH))
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if config.FashIsAllActive and config.FashIsAllActive == _EquipSignboardAllActiveEnum.Fashion then
|
|
|
|
|
EquipSignboardDic[characterId].FashIsAllActive = true
|
|
|
|
|
EquipSignboardDic[characterId].EquipModelIndex = equipModelIndex
|
|
|
|
|
else
|
|
|
|
|
EquipSignboardDic[characterId].FashIsAllActive = false
|
|
|
|
|
|
|
|
|
|
if not actionId or actionId == 0 then
|
|
|
|
|
EquipSignboardDic[characterId].AllAction = true
|
|
|
|
|
EquipSignboardDic[characterId].EquipModelIndex = equipModelIndex
|
|
|
|
|
else
|
|
|
|
|
EquipSignboardDic[characterId].ActionIdDic = EquipSignboardDic[characterId].ActionIdDic or {}
|
|
|
|
|
EquipSignboardDic[characterId].ActionIdDic[actionId] = equipModelIndex
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
else
|
|
|
|
|
EquipSignboardDic[characterId].AllFashion = false
|
|
|
|
|
EquipSignboardDic[characterId].FashionIdDic = EquipSignboardDic[characterId].FashionIdDic or {}
|
|
|
|
|
EquipSignboardDic[characterId].FashionIdDic[fashionId] = EquipSignboardDic[characterId].FashionIdDic[fashionId] or {}
|
|
|
|
|
|
|
|
|
|
if config.FashIsAllActive and config.FashIsAllActive == _EquipSignboardAllActiveEnum.Fashion then
|
|
|
|
|
EquipSignboardDic[characterId].FashionIdDic[fashionId].FashIsAllActive = true
|
|
|
|
|
EquipSignboardDic[characterId].FashionIdDic[fashionId].EquipModelIndex = equipModelIndex
|
|
|
|
|
else
|
|
|
|
|
EquipSignboardDic[characterId].FashionIdDic[fashionId].FashIsAllActive = false
|
|
|
|
|
|
|
|
|
|
if not actionId or actionId == 0 then
|
|
|
|
|
EquipSignboardDic[characterId].FashionIdDic[fashionId].AllAction = true
|
|
|
|
|
EquipSignboardDic[characterId].FashionIdDic[fashionId].EquipModelIndex = equipModelIndex
|
|
|
|
|
|
|
|
|
|
if EquipSignboardDic[characterId].FashionIdDic[fashionId].ActionIdDic then
|
|
|
|
|
EquipSignboardDic[characterId].FashionIdDic[fashionId].ActionIdDic = nil
|
|
|
|
|
XLog.Error(StringFormat("EquipSignboard表CharacterId(%d)配置全部动作开启武器,会覆盖当前CharacterId的其它动作配置!Id:%d, 路径:%s", characterId, id, TABLE_EQUIP_SIGNBOARD_PATH))
|
|
|
|
|
end
|
|
|
|
|
else
|
|
|
|
|
EquipSignboardDic[characterId].FashionIdDic[fashionId].AllAction = false
|
|
|
|
|
EquipSignboardDic[characterId].FashionIdDic[fashionId].ActionIdDic = EquipSignboardDic[characterId].FashionIdDic[fashionId].ActionIdDic or {}
|
|
|
|
|
EquipSignboardDic[characterId].FashionIdDic[fashionId].ActionIdDic[actionId] = equipModelIndex
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
return EquipSignboardDic
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XEquipConfig.GetEquipAnimControllerBySignboard(characterId, fashionId, actionId)
|
|
|
|
|
if not characterId then
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local equipSignboardDic = GetEquipSignboardDic()
|
|
|
|
|
local equipCharacterSignboard = equipSignboardDic[characterId]
|
|
|
|
|
|
|
|
|
|
if not equipCharacterSignboard then
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if equipCharacterSignboard.ChaIsAllActive then
|
|
|
|
|
return equipCharacterSignboard.EquipModelIndex
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if equipCharacterSignboard.AllFashion then
|
|
|
|
|
if equipCharacterSignboard.FashIsAllActive then
|
|
|
|
|
return EquipSignboardDic[characterId].EquipModelIndex
|
|
|
|
|
else
|
|
|
|
|
if equipCharacterSignboard.AllAction then
|
|
|
|
|
return EquipSignboardDic[characterId].EquipModelIndex
|
|
|
|
|
else
|
|
|
|
|
if not actionId then
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
return EquipSignboardDic[characterId].ActionIdDic[actionId]
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if not fashionId then
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local equipFashionSignboard = equipCharacterSignboard.FashionIdDic[fashionId]
|
|
|
|
|
|
|
|
|
|
if not equipFashionSignboard then
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if equipFashionSignboard.FashIsAllActive then
|
|
|
|
|
return equipFashionSignboard.EquipModelIndex
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if equipFashionSignboard.AllAction then
|
|
|
|
|
return equipFashionSignboard.EquipModelIndex
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if not actionId then
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local equipActionSignboard = equipFashionSignboard.ActionIdDic[actionId]
|
|
|
|
|
|
|
|
|
|
if not equipActionSignboard then
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
return equipActionSignboard
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XEquipConfig.CheckHasLoadEquipBySignboard(characterId, fashionId, actionId)
|
|
|
|
|
return XEquipConfig.GetEquipAnimControllerBySignboard(characterId, fashionId, actionId) ~= nil
|
|
|
|
|
end
|
|
|
|
|
--endregion
|
|
|
|
|
|
|
|
|
|
------------武器超限相关 begin----------------
|
|
|
|
|
|
|
|
|
|
-- 获取武器的超限配置
|
|
|
|
|
function XEquipConfig.GetWeaponOverrunCfgsByTemplateId(templateId)
|
|
|
|
|
local cfgs = WeaponOverrunDic[templateId]
|
|
|
|
|
return cfgs
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- 获取武器超限ui配置
|
|
|
|
|
function XEquipConfig.GetWeaponDeregulateUICfg(templateId)
|
|
|
|
|
return WeaponDeregulateUITemplate[templateId]
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- 获取武器超限意识绑定的配置表
|
|
|
|
|
function XEquipConfig.GetWeaponOverrunSuitCfgByTemplateId(templateId)
|
|
|
|
|
for _, cfg in ipairs(WeaponOverrunDic[templateId] or {}) do
|
|
|
|
|
if cfg.OverrunType == XEquipConfig.WeaponOverrunUnlockType.Suit then
|
|
|
|
|
return cfg
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
return nil
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- 装备是否可超限
|
|
|
|
|
function XEquipConfig.CanOverrunByTemplateId(templateId)
|
|
|
|
|
local cfgs = WeaponOverrunDic[templateId]
|
|
|
|
|
local canDeregulate = cfgs and #cfgs > 0
|
|
|
|
|
return canDeregulate
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- 获取意识套装列表
|
|
|
|
|
-- isType0 = true 时,只获装备类型为0的意识套装,即不包括意识强化素材
|
|
|
|
|
function XEquipConfig.GetSuitIdListByCharacterType(charType, minQuality, isFilterType0, isOverrun)
|
|
|
|
|
minQuality = minQuality or 0
|
|
|
|
|
local suitIdList = {}
|
|
|
|
|
for _, suit in pairs(EquipSuitTemplate) do
|
|
|
|
|
local equipIds = SuitIdToEquipTemplateIdsDic[suit.Id]
|
|
|
|
|
if equipIds and #equipIds > 0 then
|
|
|
|
|
local equipId = equipIds[1]
|
|
|
|
|
local equipCfg = XEquipConfig.GetEquipCfg(equipId)
|
|
|
|
|
local isShow = equipCfg.Quality >= minQuality
|
|
|
|
|
and (charType == XEquipConfig.UserType.All or XEquipConfig.GetEquipCharacterType(equipId) == charType)
|
|
|
|
|
and ((isFilterType0 and equipCfg.Type == 0) or not isFilterType0)
|
|
|
|
|
and ((isOverrun and equipCfg.OverrunNoShow ~= 1) or not isOverrun)
|
|
|
|
|
if isShow then
|
|
|
|
|
table.insert(suitIdList, suit.Id)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
return suitIdList
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- 获取意识套装的品质
|
|
|
|
|
function XEquipConfig.GetSuitQuality(suitId)
|
|
|
|
|
local equipIds = XEquipConfig.GetEquipTemplateIdsBySuitId(suitId)
|
|
|
|
|
if equipIds and #equipIds > 0 then
|
|
|
|
|
local equipCfg = XEquipConfig.GetEquipCfg(equipIds[1])
|
|
|
|
|
return equipCfg.Quality
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
return 0
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- 获取意识套装的适配角色类型
|
|
|
|
|
function XEquipConfig.GetSuitCharacterType(suitId)
|
|
|
|
|
local equipIds = XEquipConfig.GetEquipTemplateIdsBySuitId(suitId)
|
|
|
|
|
if equipIds and #equipIds > 0 then
|
|
|
|
|
local equipCfg = XEquipConfig.GetEquipCfg(equipIds[1])
|
|
|
|
|
return equipCfg.CharacterType
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
return 0
|
|
|
|
|
end
|
|
|
|
|
------------武器超限相关 end----------------
|
|
|
|
|
|
|
|
|
|
function XEquipConfig.GetEquipAnimIsReset(modelId)
|
|
|
|
|
if XTool.IsTableEmpty(EquipAnimResetDic) then
|
|
|
|
|
return false
|
|
|
|
|
end
|
|
|
|
|
return EquipAnimResetDic[modelId] or false
|
|
|
|
|
end
|