2023-07-14 19:35:33 +00:00
|
|
|
|
local type = type
|
|
|
|
|
local tonumber = tonumber
|
|
|
|
|
local mathFloor = math.floor
|
|
|
|
|
local stringSplit = string.Split
|
|
|
|
|
local tableInsert = table.insert
|
|
|
|
|
local XCharacterViewModel = require("XEntity/XCharacter/XCharacterViewModel")
|
|
|
|
|
local XWeaponViewModel = require("XEntity/XEquip/XWeaponViewModel")
|
|
|
|
|
local XAwarenessViewModel = require("XEntity/XEquip/XAwarenessViewModel")
|
|
|
|
|
local XPartner = require("XEntity/XPartner/XPartner")
|
|
|
|
|
local XPartnerMainSkillGroup = require("XEntity/XPartner/XPartnerMainSkillGroup")
|
2024-09-01 20:49:41 +00:00
|
|
|
|
---@class XRobot
|
2023-07-14 19:35:33 +00:00
|
|
|
|
local XRobot = XClass(nil, "XRobot")
|
|
|
|
|
|
|
|
|
|
local Default = {
|
|
|
|
|
Id = 0,
|
|
|
|
|
Ability = 0,
|
|
|
|
|
CharacterId = 0,
|
|
|
|
|
Character = {},
|
|
|
|
|
Equips = {},
|
|
|
|
|
Partner = {},
|
|
|
|
|
Attribs = {},
|
|
|
|
|
NpcData = {}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function XRobot:Ctor(id)
|
|
|
|
|
for key, value in pairs(Default) do
|
|
|
|
|
if type(value) == "table" then
|
|
|
|
|
self[key] = {}
|
|
|
|
|
else
|
|
|
|
|
self[key] = value
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
self.Id = id
|
|
|
|
|
-- XCharacterViewModel
|
|
|
|
|
self.CharacterViewModel = nil
|
|
|
|
|
-- XWeaponViewModel
|
|
|
|
|
self.WeaponViewModel = nil
|
|
|
|
|
-- XAwarenessViewModel dic
|
|
|
|
|
self.AwarenessViewModelDic = nil
|
|
|
|
|
self:Init()
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XRobot:Init()
|
|
|
|
|
self:InitBase()
|
|
|
|
|
self:InitCharacter()
|
|
|
|
|
self:InitEquips()
|
|
|
|
|
self:InitPartner()
|
|
|
|
|
self:UpdateAttribs()
|
|
|
|
|
self:UpdateAbility()
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XRobot:InitBase()
|
|
|
|
|
local robotId = self.Id
|
|
|
|
|
local robotCfg = XRobotManager.GetRobotTemplate(robotId)
|
|
|
|
|
|
|
|
|
|
self.CharacterId = robotCfg.CharacterId
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XRobot:InitCharacter()
|
|
|
|
|
local robotId = self.Id
|
|
|
|
|
local robotCfg = XRobotManager.GetRobotTemplate(robotId)
|
|
|
|
|
|
|
|
|
|
self.Character = {
|
|
|
|
|
Id = robotCfg.CharacterId,
|
|
|
|
|
Quality = robotCfg.CharacterQuality,
|
|
|
|
|
Level = robotCfg.CharacterLevel,
|
|
|
|
|
Grade = robotCfg.CharacterGrade,
|
|
|
|
|
Star = robotCfg.CharacterStar,
|
|
|
|
|
SkillList = self:GenarateRobotSkillList(),
|
|
|
|
|
EnhanceSkillList = self:GenarateRobotEnhanceSkillList(),
|
|
|
|
|
}
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XRobot:InitEquips()
|
|
|
|
|
local equips = {}
|
|
|
|
|
|
|
|
|
|
local robotId = self.Id
|
|
|
|
|
local robotCfg = XRobotManager.GetRobotTemplate(robotId)
|
|
|
|
|
|
|
|
|
|
--武器
|
|
|
|
|
if XTool.IsNumberValid(robotCfg.WeaponId) then
|
|
|
|
|
local weapon = {
|
|
|
|
|
TemplateId = robotCfg.WeaponId,
|
|
|
|
|
Level = robotCfg.WeaponLevel,
|
|
|
|
|
Breakthrough = robotCfg.WeaponBeakThrough,
|
|
|
|
|
ResonanceInfo = self:GenarateRobotEquipResonanceInfo()
|
|
|
|
|
}
|
|
|
|
|
tableInsert(equips, weapon)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--意识
|
|
|
|
|
for _, pos in pairs(XEquipConfig.EquipSite.Awareness) do
|
|
|
|
|
local equipId = robotCfg.WaferId[pos]
|
|
|
|
|
|
|
|
|
|
if XTool.IsNumberValid(equipId) then
|
|
|
|
|
local newAware = {
|
|
|
|
|
TemplateId = equipId,
|
|
|
|
|
Level = robotCfg.WaferLevel[pos],
|
|
|
|
|
Breakthrough = robotCfg.WaferBreakThrough[pos],
|
|
|
|
|
ResonanceInfo = self:GenarateRobotEquipResonanceInfo(pos),
|
|
|
|
|
AwakeSlotList = self:GenarateRobotAwakeSlotList(pos),
|
|
|
|
|
__SlotPos = pos
|
|
|
|
|
}
|
|
|
|
|
tableInsert(equips, newAware)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
self.Equips = equips
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local CreatePartnerSkillData = function(robotPartnerCfg, charId) --未配技能置项均为默认值
|
|
|
|
|
local skillList = {}
|
|
|
|
|
local unlockSkillGroup = {}
|
|
|
|
|
local mainSkillGroup = robotPartnerCfg.MainSkillGroup
|
|
|
|
|
local mainskill = XPartnerMainSkillGroup.New(robotPartnerCfg.MainSkillGroup)
|
|
|
|
|
local charElement = XCharacterConfigs.GetCharacterElement(charId)
|
|
|
|
|
local mainskillId = mainskill:GetSkillIdByElement(charElement)
|
|
|
|
|
|
|
|
|
|
local tmpData = {
|
|
|
|
|
Type = XPartnerConfigs.SkillType.MainSkill,
|
|
|
|
|
Level = robotPartnerCfg.MainSkillLevel,
|
|
|
|
|
IsWear = true,
|
|
|
|
|
Id = mainskillId
|
|
|
|
|
}
|
|
|
|
|
table.insert(skillList, tmpData)
|
|
|
|
|
table.insert(unlockSkillGroup, mainskillId)
|
|
|
|
|
|
|
|
|
|
for index, skillId in pairs(robotPartnerCfg.PassiveSkillId) do
|
|
|
|
|
local tmpData = {
|
|
|
|
|
Type = XPartnerConfigs.SkillType.PassiveSkill,
|
|
|
|
|
Level = robotPartnerCfg.PassiveSkillLevel[index] or 1,
|
|
|
|
|
IsWear = true,
|
|
|
|
|
Id = skillId
|
|
|
|
|
}
|
|
|
|
|
table.insert(skillList, tmpData)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
return skillList, unlockSkillGroup
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XRobot:InitPartner()
|
|
|
|
|
local robotId = self.Id
|
|
|
|
|
local robotCfg = XRobotManager.GetRobotTemplate(robotId)
|
|
|
|
|
|
|
|
|
|
if robotCfg.RobotPartnerId and robotCfg.RobotPartnerId > 0 then
|
|
|
|
|
local robotPartnerCfg = XRobotManager.GetRobotPartnerTemplate(robotCfg.RobotPartnerId)
|
|
|
|
|
|
|
|
|
|
self.Partner = XPartner.New(robotCfg.RobotPartnerId, robotPartnerCfg.PartnerId, true)
|
|
|
|
|
local skillList, unlockSkillGroup = CreatePartnerSkillData(robotPartnerCfg, robotCfg.CharacterId)
|
|
|
|
|
local tmpData = {
|
|
|
|
|
CharacterId = robotCfg.CharacterId,
|
|
|
|
|
Level = robotPartnerCfg.Level,
|
|
|
|
|
BreakThrough = robotPartnerCfg.BreakThrough,
|
|
|
|
|
Quality = robotPartnerCfg.Quality,
|
|
|
|
|
StarSchedule = robotPartnerCfg.StarSchedule,
|
|
|
|
|
SkillList = skillList,
|
|
|
|
|
UnlockSkillGroup = unlockSkillGroup
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
self.Partner:UpdateData(tmpData)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XRobot:UpdateAttribs()
|
|
|
|
|
local npcData = self:GetNpcData()
|
|
|
|
|
self.Attribs = XAttribManager.GetNpcAttribs(npcData)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XRobot:UpdateAbility()
|
|
|
|
|
local robotId = self.Id
|
|
|
|
|
local characterId = self.CharacterId
|
|
|
|
|
local npcData = self:GetNpcData()
|
|
|
|
|
|
|
|
|
|
--属性战力
|
|
|
|
|
local baseAbility = XAttribManager.GetAttribAbility(self.Attribs) or 0
|
|
|
|
|
|
|
|
|
|
--构建机器人技能数据
|
|
|
|
|
local skillData = XFightCharacterManager.GetCharSkillLevelMap(npcData)
|
|
|
|
|
local skillAbility = XDataCenter.CharacterManager.GetSkillAbility(skillData)
|
|
|
|
|
|
|
|
|
|
--装备共鸣战力
|
|
|
|
|
local resonanceSkillLevel = XFightCharacterManager.GetResonanceSkillLevelMap(npcData)
|
|
|
|
|
local resonanceSkillAbility = XDataCenter.CharacterManager.GetResonanceSkillAbility(resonanceSkillLevel, skillData)
|
|
|
|
|
|
|
|
|
|
--装备技能战力
|
|
|
|
|
local equipAbility = XDataCenter.EquipManager.GetEquipSkillAbilityOther(self.Character, self.Equips)
|
|
|
|
|
|
|
|
|
|
--伙伴战力
|
|
|
|
|
local partnerAbility =
|
|
|
|
|
not XTool.IsTableEmpty(self.Partner) and XDataCenter.PartnerManager.GetCarryPartnerAbility(self.Partner) or 0
|
|
|
|
|
|
|
|
|
|
self.Ability = mathFloor(baseAbility + skillAbility + resonanceSkillAbility + equipAbility + partnerAbility)
|
|
|
|
|
end
|
|
|
|
|
function XRobot:GetConfig()
|
|
|
|
|
return XRobotManager.GetRobotTemplate(self.Id)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
------------属性生成 begin----------------
|
|
|
|
|
--武器/意识共鸣列表
|
|
|
|
|
function XRobot:GenarateRobotEquipResonanceInfo(pos)
|
|
|
|
|
local resonanceList = {}
|
|
|
|
|
|
|
|
|
|
local robotId = self.Id
|
|
|
|
|
local config = XRobotManager.GetRobotTemplate(robotId)
|
|
|
|
|
|
|
|
|
|
local configResonance, configResonanceType
|
|
|
|
|
if pos then
|
|
|
|
|
configResonanceType = config.WaferResonanceType[pos]
|
|
|
|
|
configResonance = config.WaferResonance[pos]
|
|
|
|
|
else
|
|
|
|
|
configResonanceType = config.WeaponResonanceType
|
|
|
|
|
configResonance = config.WeaponResonance
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local templateIdList = stringSplit(configResonance)
|
|
|
|
|
local resonanceTypeList = stringSplit(configResonanceType)
|
|
|
|
|
|
|
|
|
|
for slot, templateId in pairs(templateIdList) do
|
|
|
|
|
templateId = tonumber(templateId)
|
|
|
|
|
local resonanceType = tonumber(resonanceTypeList[slot])
|
|
|
|
|
|
|
|
|
|
if not XTool.IsNumberValid(templateId) or not XTool.IsNumberValid(resonanceType) then
|
|
|
|
|
local path = XRobotManager.GetConfigPath()
|
|
|
|
|
XLog.Error(
|
|
|
|
|
"XRobot:GenarateRobotEquipResonanceInfo error: 机器人共鸣类型(WaferResonanceType)与共鸣技能Id(WaferResonance)不匹配, robotId: " ..
|
|
|
|
|
robotId .. ", path: " .. path
|
|
|
|
|
)
|
|
|
|
|
break
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local resonanceInfo = {
|
|
|
|
|
Slot = slot,
|
|
|
|
|
Type = resonanceType,
|
|
|
|
|
CharacterId = config.CharacterId,
|
|
|
|
|
TemplateId = templateId
|
|
|
|
|
}
|
|
|
|
|
tableInsert(resonanceList, resonanceInfo)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
return resonanceList
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--意识觉醒列表
|
|
|
|
|
function XRobot:GenarateRobotAwakeSlotList(pos)
|
|
|
|
|
local awakenSlotList = {}
|
|
|
|
|
|
|
|
|
|
local robotId = self.Id
|
|
|
|
|
local config = XRobotManager.GetRobotTemplate(robotId)
|
|
|
|
|
|
|
|
|
|
local waferAwekenCount = config.WaferAwakeCount[pos]
|
|
|
|
|
for slot = 1, waferAwekenCount do
|
|
|
|
|
tableInsert(awakenSlotList, slot)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
return awakenSlotList
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--技能列表
|
|
|
|
|
--@param needMaxMin:是否要读取适用技能等级上下限
|
|
|
|
|
function XRobot:GenarateRobotSkillList()
|
|
|
|
|
local skillList = {}
|
|
|
|
|
|
|
|
|
|
local robotId = self.Id
|
|
|
|
|
local config = XRobotManager.GetRobotTemplate(robotId)
|
|
|
|
|
local removeDic = XRobotManager.GetRobotSkillRemoveDic(robotId)
|
|
|
|
|
local characterId = XRobotManager.GetCharacterId(robotId)
|
|
|
|
|
local robotSkillLevel = config.SkillLevel
|
|
|
|
|
|
|
|
|
|
local skillDic = XCharacterConfigs.GetChracterSkillPosToGroupIdDic(characterId)
|
|
|
|
|
for _, skillGroup in pairs(skillDic) do
|
|
|
|
|
for _, skillGroupId in pairs(skillGroup) do
|
|
|
|
|
local skillIds = XCharacterConfigs.GetGroupSkillIdsByGroupId(skillGroupId)
|
|
|
|
|
|
|
|
|
|
local skillId = skillIds[1]
|
|
|
|
|
if XTool.IsNumberValid(skillId) and not removeDic[skillId] then
|
|
|
|
|
local skillInfo = {
|
|
|
|
|
Id = skillId,
|
|
|
|
|
Level = XCharacterConfigs.ClampSubSkillLeveByLevel(skillId, robotSkillLevel)
|
|
|
|
|
}
|
|
|
|
|
tableInsert(skillList, skillInfo)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
return skillList
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--增强技能列表
|
|
|
|
|
function XRobot:GenarateRobotEnhanceSkillList()
|
|
|
|
|
local enhanceSkillList = {}
|
|
|
|
|
|
|
|
|
|
local robotId = self.Id
|
|
|
|
|
local config = XRobotManager.GetRobotTemplate(robotId)
|
|
|
|
|
local removeDic = XRobotManager.GetRobotSkillRemoveDic(robotId)
|
|
|
|
|
local characterId = XRobotManager.GetCharacterId(robotId)
|
|
|
|
|
local robotEnhanceSkillLevel = config.EnhanceSkillLevel
|
|
|
|
|
|
|
|
|
|
local groupIdList = XCharacterConfigs.GetEnhanceSkillConfig(characterId).SkillGroupId
|
|
|
|
|
for _, skillGroupId in pairs(groupIdList or {}) do
|
|
|
|
|
local groupConfig = XCharacterConfigs.GetEnhanceSkillGroupConfig(skillGroupId)
|
|
|
|
|
|
|
|
|
|
local skillId = groupConfig.SkillId[1]
|
|
|
|
|
if XTool.IsNumberValid(skillId) and not removeDic[skillId] then
|
|
|
|
|
local maxLevel = XCharacterConfigs.GetEnhanceSkillMaxLevelBySkillId(skillId)
|
|
|
|
|
local skillInfo = {
|
|
|
|
|
Id = skillId,
|
|
|
|
|
Level = math.min(maxLevel,robotEnhanceSkillLevel)
|
|
|
|
|
}
|
|
|
|
|
tableInsert(enhanceSkillList, skillInfo)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
return enhanceSkillList
|
|
|
|
|
end
|
|
|
|
|
------------属性生成 end----------------
|
|
|
|
|
------------外部Setter接口(需调用后XRobotManager.GetRobotTemp再使用) begin----------------
|
|
|
|
|
function XRobot:SetEquips(equips)
|
|
|
|
|
self.Equips = equips
|
|
|
|
|
|
|
|
|
|
self:UpdateAttribs()
|
|
|
|
|
self:UpdateAbility()
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XRobot:SetPartner(partner)
|
|
|
|
|
self.Partner = partner
|
|
|
|
|
|
|
|
|
|
self:UpdateAbility()
|
|
|
|
|
end
|
|
|
|
|
------------外部Setter接口(需调用后XRobotManager.GetRobotTemp再使用) end----------------
|
|
|
|
|
------------外部Getter接口 begin----------------
|
|
|
|
|
function XRobot:GetNpcData()
|
|
|
|
|
local npcData = {
|
|
|
|
|
Character = self.Character,
|
|
|
|
|
Equips = self.Equips
|
|
|
|
|
}
|
|
|
|
|
return npcData
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XRobot:GetAtrributes()
|
|
|
|
|
return self.Attribs
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XRobot:GetAbility()
|
|
|
|
|
return self.Ability or 0
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--生成装备共鸣增加额外属性列表(Debug调试用)
|
|
|
|
|
function XRobot:ConstructResonanceAbilityList()
|
|
|
|
|
local list = {}
|
|
|
|
|
|
|
|
|
|
for _, equip in pairs(self.Equips) do
|
|
|
|
|
local infoList = equip.ResonanceInfo
|
|
|
|
|
if not XTool.IsTableEmpty(infoList) then
|
|
|
|
|
for _, info in pairs(infoList) do
|
|
|
|
|
if tonumber(info.Type) == tonumber(XEquipConfig.EquipResonanceType.Attrib) then
|
|
|
|
|
local _, attrs = XAttribManager.GetAttribGroupTemplate(info.TemplateId)
|
|
|
|
|
tableInsert(
|
|
|
|
|
list,
|
|
|
|
|
{
|
|
|
|
|
EquipId = equip.Id,
|
|
|
|
|
Site = XDataCenter.EquipManager.GetEquipSiteByEquipData(equip),
|
|
|
|
|
Slot = info.Slot,
|
|
|
|
|
Attr = attrs
|
|
|
|
|
}
|
|
|
|
|
)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
return list
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--生成装备觉醒(超频)增加额外属性列表(Debug调试用)
|
|
|
|
|
function XRobot:ConstructAwakenAbilityList()
|
|
|
|
|
local list = {}
|
|
|
|
|
|
|
|
|
|
for _, equip in pairs(self.Equips) do
|
|
|
|
|
local infoList = equip.AwakeSlotList
|
|
|
|
|
if not XTool.IsTableEmpty(infoList) then
|
|
|
|
|
local template = XEquipConfig.GetEquipAwakeCfg(equip.TemplateId)
|
|
|
|
|
for _, slot in pairs(infoList) do
|
|
|
|
|
local attribId = template.AttribId[slot]
|
|
|
|
|
local _, attrs = XAttribManager.GetAttribByAttribId(attribId)
|
|
|
|
|
tableInsert(
|
|
|
|
|
list,
|
|
|
|
|
{
|
|
|
|
|
EquipId = equip.Id,
|
|
|
|
|
Site = XDataCenter.EquipManager.GetEquipSiteByEquipData(equip),
|
|
|
|
|
Slot = slot,
|
|
|
|
|
Attr = attrs
|
|
|
|
|
}
|
|
|
|
|
)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
return list
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XRobot:GetSkillLevelDic(forDisplay)
|
|
|
|
|
if forDisplay and (not self.Character.DisplaySkillList) then
|
|
|
|
|
self.Character.DisplaySkillList = self:GenarateRobotSkillList()
|
|
|
|
|
end
|
|
|
|
|
local skillLevelDic = {}
|
|
|
|
|
for _, skillData in pairs(forDisplay and self.Character.DisplaySkillList or self.Character.SkillList) do
|
|
|
|
|
skillLevelDic[skillData.Id] = skillData.Level
|
|
|
|
|
end
|
|
|
|
|
return skillLevelDic
|
|
|
|
|
end
|
|
|
|
|
|
2024-09-01 20:49:41 +00:00
|
|
|
|
---机器人单独技能等级
|
|
|
|
|
---于v2.4添加,由于升阶拆分更改了核心被动技能等级robot表又只有一个字段控制所有技能
|
|
|
|
|
---导致个别玩法机器人SS品质配1级技能却没有升阶拆分的技能,因此添加了字段单独配置某个技能的等级供其他玩法使用
|
|
|
|
|
---目前用到:肉鸽1期
|
|
|
|
|
function XRobot:GetAfterSpSkillLevel(skillId)
|
|
|
|
|
local robotId = self.Id
|
|
|
|
|
local config = XRobotManager.GetRobotTemplate(robotId)
|
|
|
|
|
local skillList = config.SpSkillIds
|
|
|
|
|
local skillLevelList = config.SpSkillLevels
|
|
|
|
|
if XTool.IsTableEmpty(skillList) or XTool.IsTableEmpty(skillLevelList) then
|
|
|
|
|
return false
|
|
|
|
|
end
|
|
|
|
|
local index = table.indexof(skillList, skillId)
|
|
|
|
|
if index then
|
|
|
|
|
return XCharacterConfigs.ClampSubSkillLeveByLevel(skillId, skillLevelList[index])
|
|
|
|
|
end
|
|
|
|
|
return false
|
|
|
|
|
end
|
|
|
|
|
|
2023-07-14 19:35:33 +00:00
|
|
|
|
function XRobot:GetPartner()
|
|
|
|
|
if self.Partner ~= nil and next(self.Partner) == nil then
|
|
|
|
|
return nil
|
|
|
|
|
end
|
|
|
|
|
return self.Partner
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- 优先获取展示的机器人战力
|
|
|
|
|
function XRobot:GetAbilityWithCheckShowAbility()
|
|
|
|
|
local ability = XRobotManager.GetRobotShowAbility(self.Id)
|
|
|
|
|
if XTool.IsNumberValid(ability) then
|
|
|
|
|
return ability
|
|
|
|
|
end
|
|
|
|
|
return self:GetAbility()
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XRobot:GetId()
|
|
|
|
|
return self.Id
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XRobot:GetCharacterId()
|
|
|
|
|
return XRobotManager.GetCharacterId(self.Id)
|
|
|
|
|
end
|
|
|
|
|
------------外部Getter接口 end----------------
|
|
|
|
|
------------ 视图数据 begin----------------
|
|
|
|
|
function XRobot:GetCharacterViewModel()
|
|
|
|
|
if self.CharacterViewModel == nil then
|
|
|
|
|
local robotConfig = XRobotManager.GetRobotTemplate(self.Id)
|
|
|
|
|
self.CharacterViewModel = XCharacterViewModel.New(robotConfig.CharacterId)
|
|
|
|
|
self.CharacterViewModel:UpdateWithData(self.Character)
|
|
|
|
|
self.CharacterViewModel:UpdateAbility(self:GetAbilityWithCheckShowAbility())
|
|
|
|
|
self.CharacterViewModel:UpdateFashionId(robotConfig.FashionId)
|
|
|
|
|
self.CharacterViewModel:UpdateLiberateLv(robotConfig.LiberateLv)
|
|
|
|
|
self.CharacterViewModel:UpdateSourceEntityId(self.Id)
|
|
|
|
|
end
|
|
|
|
|
return self.CharacterViewModel
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XRobot:GetWeaponViewModel()
|
|
|
|
|
if self.WeaponViewModel == nil then
|
|
|
|
|
local templateId = nil
|
|
|
|
|
for _, euqipData in pairs(self.Equips) do
|
|
|
|
|
templateId = euqipData.TemplateId
|
|
|
|
|
if XDataCenter.EquipManager.IsClassifyEqualByTemplateId(templateId, XEquipConfig.Classify.Weapon) then
|
|
|
|
|
self.WeaponViewModel = XWeaponViewModel.New(templateId)
|
|
|
|
|
self.WeaponViewModel:UpdateWithData(euqipData)
|
|
|
|
|
break
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
return self.WeaponViewModel
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XRobot:GetAwarenessViewModelDic()
|
|
|
|
|
if self.AwarenessViewModelDic == nil then
|
|
|
|
|
self.AwarenessViewModelDic = {}
|
|
|
|
|
local templateId = nil
|
|
|
|
|
for _, euqipData in pairs(self.Equips) do
|
|
|
|
|
templateId = euqipData.TemplateId
|
|
|
|
|
if XDataCenter.EquipManager.IsClassifyEqualByTemplateId(templateId, XEquipConfig.Classify.Awareness) then
|
|
|
|
|
self.AwarenessViewModelDic[euqipData.__SlotPos] = XAwarenessViewModel.New(templateId)
|
|
|
|
|
self.AwarenessViewModelDic[euqipData.__SlotPos]:UpdateWithData(euqipData)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
return self.AwarenessViewModelDic
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XRobot:GetEquipViewModels()
|
|
|
|
|
local result = {self:GetWeaponViewModel()}
|
|
|
|
|
for _, v in pairs(self:GetAwarenessViewModelDic()) do
|
|
|
|
|
table.insert(result, v)
|
|
|
|
|
end
|
|
|
|
|
return result
|
|
|
|
|
end
|
|
|
|
|
------------ 视图数据 end----------------
|
|
|
|
|
return XRobot
|