local pairs = pairs local type = type local table = table local tableInsert = table.insert XAttribManager = XAttribManager or {} -- 属性id获取接口 local AddNumericIdInterfaces = {} local AddPromotedIdInterfaces = {} local AddGrowRateIdInterfaces = {} local FPS = CS.XFightConfig.FPS local FPS_FIX = fix(FPS) local FPS_RECIPROCAL_FIX = CS.XFightConfig.FpsReciprocal local RADIAN_PER_ANGLE_FIX = fix.deg2rad local AttribCount = XNpcAttribType.End local RunSpeedIndex = XNpcAttribType.RunSpeed local WalkSpeedIndex = XNpcAttribType.WalkSpeed local SquatSpeedIndex = XNpcAttribType.SquatSpeed local SprintSpeedIndex = XNpcAttribType.SprintSpeed local TurnRoundSpeedIndex = XNpcAttribType.TurnRoundSpeed local BallIntervalIndex = XNpcAttribType.BallInterval local DodgeEnergyAutoRecoveryIndex = XNpcAttribType.DodgeEnergyAutoRecovery local DEFAULT_VALUE = 0 local AttribTemplates = {} local AttribPromotedTemplates = {} local AttribGrowRateTemplates = {} local AttribReviseTemplates = {} local AttribGroupTemplates = {} local AttribAbilityTemplate = {} --属性名字配置表 local AttribDescTemplates = {} -- local NpcTemplates = {} ---属性id接口注册 ---@param inter function function XAttribManager.RegisterGrowRateIdInterface(inter) tableInsert(AddGrowRateIdInterfaces, inter) end ---@param inter function function XAttribManager.RegisterNumericIdInterface(inter) tableInsert(AddNumericIdInterfaces, inter) end ---@param inter function function XAttribManager.RegisterPromotedIdInterface(inter) tableInsert(AddPromotedIdInterfaces, inter) end ---属性计算 local function CreateAttribArray() local array = {} -- 初始化时不申请全部内存,改用字典 -- for _ = 1, AttribCount - 1 do -- tableInsert(array, fix.zero) -- end return array end ---将配置转换成fix数组 ---@param template table 属性配置 ---@return fix[] fix数组 local function GetAttribArray(template) local attribs = CreateAttribArray() for k, v in pairs(XNpcAttribType) do if template[k] and template[k] ~= DEFAULT_VALUE then attribs[v] = template[k] end end return attribs end ---初始化属性配置 ---@param template table 原有配置 ---@return fix[] 属性配置fix只读数组 local function InitAttribTemplates(template) local attribTemplates = {} for k, v in pairs(template) do attribTemplates[k] = GetAttribArray(v) end return XReadOnlyTable.Create(attribTemplates) end ---加载属性配置 local function LoadAttribConfig() AttribGroupTemplates = XAttribConfigs.GetAttribGroupTemplates() AttribReviseTemplates = XAttribConfigs.GetAttribReviseTemplates() -- NpcTemplates = XAttribConfigs.GetNpcTemplates() AttribDescTemplates = XAttribConfigs.GetAttribDescTemplates() AttribAbilityTemplate = XAttribConfigs.GetAttribAbilityTemplate() AttribTemplates = XAttribConfigs.GetAttribTemplates()--InitAttribTemplates(XAttribConfigs.GetAttribTemplates()) AttribPromotedTemplates = XAttribConfigs.GetAttribPromotedTemplates() AttribGrowRateTemplates = XAttribConfigs.GetAttribGrowRateTemplates() end local function GetAttribTemplate(attribId) local attribs = AttribTemplates[attribId] if not attribs then XLog.Error("XAttribManager GetAttribTemplate Error: can not found attrib template, Id is " .. attribId, AttribTemplates) return XCode.AttribManagerGetAttribTemplateNotFound, nil end attribs = GetAttribArray(attribs) return XCode.Success, attribs end local function GetAttribPromotedTemplate(attribId) local attribs = AttribPromotedTemplates[attribId] if not attribs then XLog.Error("XAttribManager GetAttribPromotedTemplate Error: can not found attrib template, Id is " .. attribId) return XCode.AttribManagerGetPromotedAttribTemplateNotFound, nil end attribs = GetAttribArray(attribs) return XCode.Success, attribs end local function GetAttribGrowRateTemplate(attribId) local attribs = AttribGrowRateTemplates[attribId] if not attribs then XLog.Error("XAttribManager GetAttribGrowRateTemplate Error: can not found attrib template, Id is " .. attribId) return XCode.AttribManagerGetGrowRateAttribTemplateNotFound, nil end attribs = GetAttribArray(attribs) return XCode.Success, attribs end local function GetAttribGroupTemplate(id) local attribGroup = AttribGroupTemplates[id] if not attribGroup then XLog.Error("XAttribManager GetAttribGroupTemplate Error: can not found attrib group template, Id is " .. id) return XCode.AttribGroupNotFound, nil end return XCode.Success, attribGroup end ---属性计算 ---属性加法 ---@param attribs1 fix[] 原属性数组 ---@param attribs2 fix[] 增加属性数组 local function DoAddAttribs(attribs1, attribs2) for k, v in pairs(attribs2) do if attribs1[k] then attribs1[k] = attribs1[k] + attribs2[k] else attribs1[k] = attribs2[k] end end end ---属性成长(原属性 + 成长属性 * 培养等级) ---@param attribs1 fix[] 原属性数组 ---@param attribs2 fix[] 成长属性数组 ---@param trainedLevel number 培养等级 local function DoPromotedAttribs(attribs1, attribs2, trainedLevel) if trainedLevel <= 0 then return end trainedLevel = fix(trainedLevel) for k, v in pairs(attribs2) do if attribs1[k] then attribs1[k] = attribs1[k] + attribs2[k] * trainedLevel else attribs1[k] = attribs2[k] * trainedLevel end end end ---属性加成(原属性 + 原属性 * 加成属性) ---@param attribs1 fix[] 原属性数组 ---@param attribs2 fix[] 加成属性数组 local function DoGrowRateAttribs(attribs1, attribs2) for k, v in pairs(attribs2) do if attribs1[k] then attribs1[k] = attribs1[k] + attribs1[k] * attribs2[k] else attribs1[k] = attribs1[k] * attribs2[k] end end end ---属性修正(原属性 * (1 + 修正系数)) ---@param attrib fix 原属性 ---@param factor fix 修正系数 ---@return fix 修正后属性 local function DoReviseAttrib(attrib, factor) if not attrib then attrib = DEFAULT_VALUE end return attrib * (fix.one + factor); end ---获取总加成属性 ---@param attribIds table 属性加成id列表 ---@return XCode,fix[] 状态码和属性数组 local function GetTotalGrowRateAttribs(attribIds) local attribs = CreateAttribArray() for _, id in pairs(attribIds) do local code, readAttribs = GetAttribGrowRateTemplate(id) if code ~= XCode.Success then return code, nil end DoAddAttribs(attribs, readAttribs) end return XCode.Success, attribs end ---获取总属性数值叠加 ---@param attribIds table 叠加属性id列表 ---@return XCode,fix[] 状态码和属性数组 local function GetTotalNumericAttribs(attribIds) local attribs = CreateAttribArray() for _, id in pairs(attribIds) do local code, readAttribs = GetAttribTemplate(id) if code ~= XCode.Success then return code, nil end DoAddAttribs(attribs, readAttribs) end return XCode.Success, attribs end ---获取总成长属性 ---@param attribIds table 成长属性id列表 ---@param trainedLevels table 培养等级列表 ---@return XCode, fix[] 状态码和属性数组 local function GetTotalPromotedAttribs(attribIds, trainedLevels) local attribs = CreateAttribArray() if #trainedLevels ~= #attribIds then XLog.Error("XAttribManager GetTotalPromotedAttribs Error: trainedLevels array length is not equal to template id array length") return XCode.AttribManagerGetTotalPromotedAttribsParamArrayError, nil end local length = #trainedLevels for i = 1, length do local level = trainedLevels[i] if level <= 0 then XLog.Error("XAttribManager GetTotalPromotedAttribs Error: level is smaller than 1, level is " .. level) return XCode.AttribManagerGetTotalPromotedAttribsLevelError, nil end local code, readAttribs = GetAttribPromotedTemplate(attribIds[i]) if code ~= XCode.Success then return code, nil end DoPromotedAttribs(attribs, readAttribs, level) end return XCode.Success, attribs end ---属性数组修正 ---@param attribs fix[] 属性数组 ---@param reviseId number 修正id ---@return XCode 状态码 local function ReviseAttribs(attribs, reviseId) local template = AttribReviseTemplates[reviseId] if not template then XLog.Error("XAttribManager.ReviseAttribs error: can not found template, reviseId is " .. reviseId); return XCode.AttribReviseTemplateNotFound end for i = 1, #template.AttribTypes do local attribIndex = template.AttribTypes[i] attribs[attribIndex] = DoReviseAttrib(attribs[attribIndex], template.Values[i]); end return XCode.Success end ---将属性数组从fix转换成XAttrib ---@param attribs fix[] fix属性数组 ---@return XAttrib[] XAttrib属性数组 local function Fix2XAttrib(attribs) local xAttribs = {} for attribIndex = 1, AttribCount - 1 do local xAttrib if attribs[attribIndex] then xAttrib = CS.XAttrib.Ctor(FixToInt(attribs[attribIndex])) else xAttrib = CS.XAttrib() end tableInsert(xAttribs, xAttrib) end --- 特殊处理 xAttribs[RunSpeedIndex]:SetBase(FixToInt(attribs[RunSpeedIndex] * fix.thousand / FPS_FIX)) xAttribs[WalkSpeedIndex]:SetBase(FixToInt(attribs[WalkSpeedIndex] * fix.thousand / FPS_FIX)) xAttribs[SquatSpeedIndex]:SetBase(FixToInt(attribs[SquatSpeedIndex] * fix.thousand / FPS_FIX)) xAttribs[SprintSpeedIndex]:SetBase(FixToInt(attribs[SprintSpeedIndex] * fix.thousand / FPS_FIX)) xAttribs[TurnRoundSpeedIndex]:SetBase(FixToInt(attribs[TurnRoundSpeedIndex] * FPS_RECIPROCAL_FIX * RADIAN_PER_ANGLE_FIX * fix.thousand)) xAttribs[BallIntervalIndex]:SetBase(FixToInt(attribs[BallIntervalIndex] * FPS_FIX)) xAttribs[DodgeEnergyAutoRecoveryIndex]:SetBase(FixToInt(attribs[DodgeEnergyAutoRecoveryIndex] * FPS_RECIPROCAL_FIX)) --- CS数组下标从0开始,补一位 tableInsert(xAttribs, 1, CS.XAttrib()) return xAttribs end ---获取npc基础属性 ---@param npcTemplate table npc配置 ---@param level number 等级 ---@return XCode,fix[] 状态码和属性数组 local function GetNpcBaseAttribs(npcTemplate, level) local code, baseAttribs = GetAttribTemplate(npcTemplate.AttribId) if code ~= XCode.Success then return code, nil end local attribs = CreateAttribArray() DoAddAttribs(attribs, baseAttribs) --- 出生等级为1,培养等级=等级 - 1 local trainedLevel = level - 1 if npcTemplate.PromotedId and npcTemplate.PromotedId > 0 and trainedLevel > 0 then local promotedAttribs code, promotedAttribs = GetAttribPromotedTemplate(npcTemplate.PromotedId) if code ~= XCode.Success then return code, nil end DoPromotedAttribs(attribs, promotedAttribs, trainedLevel) end return XCode.Success, attribs end ---获取npc基础属性 ---@param npcTemplate table npc配置 ---@param level number 等级 ---@param reviseId number 修正系数id ---@return XCode,fix[] 状态码和属性数组 local function GetNpcBaseAttribsWithReviseId(npcTemplate, level, reviseId) local code, attribs = GetNpcBaseAttribs(npcTemplate, level) if code ~= XCode.Success then return code, nil end if reviseId and reviseId > 0 then code = ReviseAttribs(attribs, reviseId) if code ~= XCode.Success then return code, nil end end return XCode.Success, attribs end ---获取npc基础属性 ---@param npcTemplateId number npc配置id ---@param level number 等级 ---@return XCode,fix[] 状态码和属性数组 local function GetNpcBaseAttribsByNpcId(npcTemplateId, level) local npcTemplate = CS.XNpcManager.GetNpcTemplate(npcTemplateId) if not npcTemplate then XLog.Error("XAttribManager GetNpcBaseAttribsByNpcId Error: can not found npc template, npc Id is " .. npcTemplateId) return XCode.AttribManagerGetNpcAttribNpcNotFound, nil end return GetNpcBaseAttribs(npcTemplate, level) end ---获取npc基础属性 ---@param npcTemplateId number npc配置id ---@param level number 等级 ---@param reviseId number 修正系数id ---@return XCode,fix[] 状态码和属性数组 local function GetNpcBaseAttribsByNpcIdWithReviseId(npcTemplateId, level, reviseId) local npcTemplate = CS.XNpcManager.GetNpcTemplate(npcTemplateId) if not npcTemplate then XLog.Error("XAttribManager GetNpcBaseAttribsByNpcIdWithReviseId Error: can not found npc template, npc Id is " .. npcTemplateId) return XCode.AttribManagerGetNpcAttribNpcNotFound, nil end return GetNpcBaseAttribsWithReviseId(npcTemplate, level, reviseId) end ---获取属性加成id列表 ---@param npcData userdata npc数据 ---@return XCode,table 状态码和属性id列表 local function GetGrowRateAttribIds(npcData) local attribIds = {} for _, inter in pairs(AddGrowRateIdInterfaces) do local code = inter(npcData, attribIds) if code ~= XCode.Success then return code, nil end end if npcData.AttribGroupList then local attribGroupList = npcData.AttribGroupList if type(attribGroupList) == "userdata" then attribGroupList = XTool.CsList2LuaTable(attribGroupList) end if #attribGroupList > 0 then for _, id in pairs(attribGroupList) do local code, group = GetAttribGroupTemplate(id) if code ~= XCode.Success then return code, nil end if group.AttribGrowRateId > 0 then tableInsert(attribIds, group.AttribGrowRateId) end end end end return XCode.Success, attribIds end ---获取属性叠加id列表 ---@param npcData userdata npc数据 ---@return XCode,table 状态码和属性id列表 local function GetNumericAttribIds(npcData) local attribIds = {} for _, inter in pairs(AddNumericIdInterfaces) do local code = inter(npcData, attribIds) if code ~= XCode.Success then return code, nil end end if npcData.AttribGroupList then local attribGroupList = npcData.AttribGroupList if type(attribGroupList) == "userdata" then attribGroupList = XTool.CsList2LuaTable(attribGroupList) end if #attribGroupList > 0 then for _, id in pairs(attribGroupList) do local code, group = GetAttribGroupTemplate(id) if code ~= XCode.Success then return code, nil end if group.AttribId > 0 then tableInsert(attribIds, group.AttribId) end end end end return XCode.Success, attribIds end ---获取属性成长id列表和培养等级列表 ---@param npcData userdata npc数据 ---@return XCode,table,table 状态码和属性id列表、培养等级列表 local function GetPromotedAttribIds(npcData) local attribIds = {} local levels = {} for _, inter in pairs(AddPromotedIdInterfaces) do local code = inter(npcData, attribIds, levels) if code ~= XCode.Success then return code, nil, nil end end return XCode.Success, attribIds, levels end ---属性加成计算 ---@param npcData userdata npc数据 ---@param attribs fix[] 属性数组 ---@return XCode 状态码 local function DoAddGrowRateAttribs(npcData, attribs) local code, attribIds = GetGrowRateAttribIds(npcData) if code ~= XCode.Success then return code end local growRateAttribs code, growRateAttribs = GetTotalGrowRateAttribs(attribIds) if code ~= XCode.Success then return code end DoGrowRateAttribs(attribs, growRateAttribs) return XCode.Success end ---属性叠加计算 ---@param npcData userdata npc数据 ---@param attribs fix[] 属性数组 ---@return XCode 状态码 local function DoAddNumericAttribs(npcData, attribs) local code, attribIds = GetNumericAttribIds(npcData) if code ~= XCode.Success then return code end local numericAttribs code, numericAttribs = GetTotalNumericAttribs(attribIds) if code ~= XCode.Success then return code end DoAddAttribs(attribs, numericAttribs) return XCode.Success end ---属性成长计算 ---@param npcData userdata npc数据 ---@param attribs fix[] 属性数组 ---@return XCode 状态码 local function DoAddPromotedAttribs(npcData, attribs) local code, attribIds, levels = GetPromotedAttribIds(npcData) if code ~= XCode.Success then return code end local promotedAttribs code, promotedAttribs = GetTotalPromotedAttribs(attribIds, levels) if code ~= XCode.Success then return code end DoAddAttribs(attribs, promotedAttribs) return XCode.Success end ---获取npc属性 ---@param npcData userdata npc数据 ---@return XCode,fix[] 状态码和属性数组 local function GetNpcAttribs(npcData) local attribs local characterData = npcData.Character local code, npcId = XFightCharacterManager.GetNpcId(characterData) if code ~= XCode.Success then return code, nil end code, attribs = GetNpcBaseAttribsByNpcId(npcId, characterData.Level) if code ~= XCode.Success then return code, nil end --- 属性加成只针对基础属性,需要第一个计算 code = DoAddGrowRateAttribs(npcData, attribs) if code ~= XCode.Success then return code, nil end code = DoAddNumericAttribs(npcData, attribs) if code ~= XCode.Success then return code, nil end code = DoAddPromotedAttribs(npcData, attribs) if code ~= XCode.Success then return code, nil end if npcData.AttribReviseId and npcData.AttribReviseId > 0 then code = ReviseAttribs(attribs, npcData.AttribReviseId) if code ~= XCode.Success then return code, nil end end return XCode.Success, attribs end local function TryGetNpcBaseAttribs(npcTemplateId, level, reviseId) local code, attribs = GetNpcBaseAttribsByNpcIdWithReviseId(npcTemplateId, level, reviseId) if code ~= XCode.Success then XLog.Error("TryGetNpcBaseAttribs error: code is ", code) return nil end return Fix2XAttrib(attribs) end local function TryGetNpcAttribs(npcData) local code, attribs = GetNpcAttribs(npcData) if code ~= XCode.Success then XLog.Error("TryGetNpcAttribs error: code is ", code) return nil end return Fix2XAttrib(attribs) end ------------------------------------------------------------------------------------------- XAttribManager.GetAttribAbility = function(attribs) if not attribs then return end local ability = fix.zero for k, attr in pairs(attribs) do local attribKey = XAttribManager.GetAttribKeyByIndex(k) local template = AttribAbilityTemplate[attribKey] if template and template.Ability > fix.zero then ability = ability + attr * template.Ability end end return FixToInt(ability) end XAttribManager.GetPartnerAttribAbility = function(attribs) if not attribs then return end local ability = fix.zero for k, attr in pairs(attribs) do local attribKey = XAttribManager.GetAttribKeyByIndex(k) local template = AttribAbilityTemplate[attribKey] if template and template.PartnerAbility > fix.zero then ability = ability + attr * template.PartnerAbility end end return FixToInt(ability) end XAttribManager.GetAttribGroupTemplate = GetAttribGroupTemplate ---------------------------------------客户端特有方法--------------------------------------- ---获取合并属性数组(fix结构) ---@param numericIds table 数值加成id列表 ---@param promotedIds table 等级提升id列表 ---@param trainedLevels table 等级列表 ---@return fix[] fix数组 function XAttribManager.GetMergeAttribs(numericIds, promotedIds, trainedLevels) local attribs = CreateAttribArray() if #numericIds > 0 then local code, numericAttribs = GetTotalNumericAttribs(numericIds) if code ~= XCode.Success then return end DoAddAttribs(attribs, numericAttribs) end if (trainedLevels and promotedIds) and (#promotedIds > 0 and #trainedLevels > 0) then local code, promotedAttribs = GetTotalPromotedAttribs(promotedIds, trainedLevels) if code ~= XCode.Success then return end DoAddAttribs(attribs, promotedAttribs) end return attribs end ---获取基础属性数组 ---@param attribId number|table 属性id或者属性id列表 ---@return fix[] 属性fix数组 function XAttribManager.GetBaseAttribs(attribId) local attribIdList = {} if type(attribId) ~= "table" then tableInsert(attribIdList, attribId) else attribIdList = attribId end local code, attribs = GetTotalNumericAttribs(attribIdList) if code ~= XCode.Success then return nil end return attribs end ---获取等级提升属性数组 ---@param attribId number|table 属性id或者属性id列表 ---@param level number|table 等级或者等级列表 ---@return fix[] 属性fix数组 function XAttribManager.GetPromotedAttribs(attribId, level) local attribIds = {} local levels = {} if type(attribId) ~= "table" then tableInsert(attribIds, attribId) else attribIds = attribId end if not level then for _ = 1, #attribIds do tableInsert(levels, 1) end elseif type(level) ~= "table" then tableInsert(levels, level) else levels = level end local code, attribs = GetTotalPromotedAttribs(attribIds, levels) if code ~= XCode.Success then return nil end return attribs end ---获取提升比例属性数组 ---@param attribId number|table 属性id或者属性id列表 ---@return fix[] 属性fix数组 function XAttribManager.GetGrowRateAttribs(attribId) local attribIdList = {} if type(attribId) ~= "table" then tableInsert(attribIdList, attribId) else attribIdList = attribId end local code, attribs = GetTotalGrowRateAttribs(attribIdList) if code ~= XCode.Success then return nil end return attribs end function XAttribManager.GetAttribNameByIndex(index) local template = AttribDescTemplates[index] if not template then return end return template.Name end function XAttribManager.GetAttribKeyByIndex(index) local template = AttribDescTemplates[index] if not template then return end return template.Attrib end ---获取npc属性 ---@param npcData table npc数据 ---@return table fix属性数组 XAttribManager.GetNpcAttribs = function(npcData) local code, attribs = GetNpcAttribs(npcData) if code ~= XCode.Success then return nil end return attribs end --============ --属性加值 --============ XAttribManager.DoAddAttribsByAttrAndAddId = function(attr, attrId) local attr1 = XAttribManager.GetAttribByAttribId(attrId) DoAddAttribs(attr, attr1) end XAttribManager.GetAttribByAttribId = function(attribId) local code, baseAttribs = GetAttribTemplate(attribId) if code then return baseAttribs end return nil end XAttribManager.TryGetAttribGroupTemplate = function(id) local code, template = GetAttribGroupTemplate(id) if code ~= XCode.Success then XLog.Error("XAttribManager.GetAttribGroupTemplate error: code is ", code) return nil end return template end ---获取npc基础属性 XAttribManager.GetNpcBaseAttribsByNpcIdWithReviseId = function(npcTemplateId, level, reviseId) local code, attribs = GetNpcBaseAttribsByNpcIdWithReviseId(npcTemplateId, level, reviseId) if code ~= XCode.Success then return nil end return attribs end -------------------------------------Partner相关---------------------------------------------------- -- 伙伴属性id获取接口 local AddPartnerNumericIdInterfaces = {} local AddPartnerPromotedIdInterfaces = {} function XAttribManager.RegisterPartnerNumericIdInterface(inter) tableInsert(AddPartnerNumericIdInterfaces, inter) end function XAttribManager.RegisterPartnerPromotedIdInterface(inter) tableInsert(AddPartnerPromotedIdInterfaces, inter) end ---获取Partner基础属性 local function GetPartnerBaseAttribs(partnerData, attribs) local partnerEntity = XDataCenter.PartnerManager.CreatePartnerEntityByPartnerData(partnerData) if partnerEntity then return XCode.PartnerTemplateNotFound end local code, baseAttribs = GetAttribTemplate(partnerEntity:GetBaseAttribId()) if code ~= XCode.Success then return code, nil end DoAddAttribs(attribs, baseAttribs) return XCode.Success end ---获取属性叠加id列表 local function GetPartnerNumericAttribIds(partnerData) local attribIds = {} for _, inter in pairs(AddPartnerNumericIdInterfaces) do local code = inter(partnerData, attribIds) if code ~= XCode.Success then return code, nil end end return XCode.Success, attribIds end ---获取属性成长id列表和培养等级列表 local function GetPartnerPromotedAttribIds(partnerData) local attribIds = {} local levels = {} for _, inter in pairs(AddPartnerPromotedIdInterfaces) do local code = inter(partnerData, attribIds, levels) if code ~= XCode.Success then return code, nil, nil end end return XCode.Success, attribIds, levels end ---属性叠加计算 local function DoAddPartnerNumericAttribs(partnerData, attribs) local code, attribIds = GetPartnerNumericAttribIds(partnerData) if code ~= XCode.Success then return code end local numericAttribs code, numericAttribs = GetTotalNumericAttribs(attribIds) if code ~= XCode.Success then return code end DoAddAttribs(attribs, numericAttribs) return XCode.Success end ---属性成长计算 local function DoAddPartnerPromotedAttribs(partnerData, attribs) local code, attribIds, levels = GetPartnerPromotedAttribIds(partnerData) if code ~= XCode.Success then return code end local promotedAttribs code, promotedAttribs = GetTotalPromotedAttribs(attribIds, levels) if code ~= XCode.Success then return code end DoAddAttribs(attribs, promotedAttribs) return XCode.Success end ---获取Partner属性 local function GetPartnerAttribs(partnerData) local attribs = CreateAttribArray() local code = DoAddPartnerNumericAttribs(partnerData, attribs) if code ~= XCode.Success then return code, nil end code = DoAddPartnerPromotedAttribs(partnerData, attribs) if code ~= XCode.Success then return code, nil end return XCode.Success, attribs end local function TryGetPartnerAttribs(partnerData) local code, attribs = GetPartnerAttribs(partnerData) if code ~= XCode.Success then XLog.Error("TryGetPartnerAttribs error: code is ", code) return nil end return Fix2XAttrib(attribs) end ------------------------------------------------------------------------------------------ ---------------------------------------客户端特有方法--------------------------------------- local _IsInited function XAttribManager.Init() CS.XFightDelegate.GetNpcBaseAttrib = TryGetNpcBaseAttribs CS.XFightDelegate.GetNpcAttrib = TryGetNpcAttribs CS.XFightDelegate.GetPartnerAttrib = TryGetPartnerAttribs LoadAttribConfig() _IsInited = true XEventManager.DispatchEvent(XEventId.EVENT_ATTRIBUTE_MANAGER_INIT) end function XAttribManager.IsInited() return _IsInited end