785 lines
25 KiB
Lua
785 lines
25 KiB
Lua
|
local XPartnerMainSkillGroup = require("XEntity/XPartner/XPartnerMainSkillGroup")
|
|||
|
local XPartnerPassiveSkillGroup = require("XEntity/XPartner/XPartnerPassiveSkillGroup")
|
|||
|
local XPartnerBase = require("XEntity/XPartner/XPartnerBase")
|
|||
|
|
|||
|
local XPartner = XClass(XPartnerBase, "XPartner")
|
|||
|
local DefaultQuality = 1
|
|||
|
local DefaultBreakthrough = 0
|
|||
|
local MoneyIndex = 1
|
|||
|
|
|||
|
function XPartner:Ctor(id, templateId, isComplete, IsPreview)
|
|||
|
self.Id = id--Id
|
|||
|
self.TemplateId = templateId--伙伴Id
|
|||
|
self.Name = ""--名字
|
|||
|
self.CharacterId = 0--被携带的角色
|
|||
|
self.Level = 1--等级
|
|||
|
self.Exp = 0--经验值
|
|||
|
self.BreakThrough = 0--突破次数
|
|||
|
self.Quality = self:GetInitQuality()
|
|||
|
self.IsLock = false--是否上锁
|
|||
|
self.StarSchedule = 0--进化节点进度
|
|||
|
self.SkillList = {}--技能列表
|
|||
|
self.UnlockSkillGroup = {}--解锁技能组列表
|
|||
|
self.CreateTime = 0--创建时间
|
|||
|
|
|||
|
--------------------------------------------------------
|
|||
|
self.IsPreview = IsPreview--是否是预览模式 为true时主动技能会按照默认装备技能组来初始化可以不用设置SkillList和UnlockSkillGroup
|
|||
|
self.Ability = nil
|
|||
|
self.IsComplete = isComplete--是否完整(合成界面非完整)
|
|||
|
self.ChipBaseCount = 0--当前持有碎片
|
|||
|
self.StackCount = 0--堆叠数
|
|||
|
self.BreakthroughLimit = XPartnerConfigs.GetPartnerBreakthroughLimit(self.TemplateId)--最大突破次数
|
|||
|
self.QualityLimit = XPartnerConfigs.GetQualityLimit(self.TemplateId)--最大品质
|
|||
|
self.MainSkillGroupEntityDic = {}
|
|||
|
self.PassiveSkillGroupEntityDic = {}
|
|||
|
self.UnlockSkillGroupDic = {}
|
|||
|
self.StoryEntityDic = {}
|
|||
|
-------------------------------------------------
|
|||
|
-- 是否属于自身玩家的或非玩家的(好友)
|
|||
|
-- 默认都是属于自己的,目前在好友展示详情创建的伙伴数据是不属于自己的
|
|||
|
self.IsBelongSelf = true
|
|||
|
|
|||
|
self:InitChipBaseCount()
|
|||
|
self:InitPartnerSkill()
|
|||
|
self:CreateSkillEntityDic()
|
|||
|
self:CreateStoryEntityDic()
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:UpdateData(data)
|
|||
|
if type(data) == "table" then
|
|||
|
for key, value in pairs(data or {}) do
|
|||
|
self[key] = value
|
|||
|
end
|
|||
|
else
|
|||
|
local tmpData = XTool.CsObjectFields2LuaTable(data)
|
|||
|
for key, value in pairs(tmpData or {}) do
|
|||
|
self[key] = value
|
|||
|
end
|
|||
|
end
|
|||
|
self:ResetAbility()
|
|||
|
self:UpdateSkillEntity()
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:InitPartnerSkill()
|
|||
|
local mainSkillCount = self:GeMainSkillCount()
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:InitChipBaseCount()--设置基础碎片
|
|||
|
if self.IsComplete then
|
|||
|
self.ChipBaseCount = self:GetChipNeedCount()
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:ResetAbility()--重置战力
|
|||
|
self.Ability = nil
|
|||
|
end
|
|||
|
-------------------------宠物功能属性--------------------------
|
|||
|
function XPartner:GetId()
|
|||
|
return self.Id
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:GetName()
|
|||
|
if not self.IsBelongSelf then
|
|||
|
return self:GetOriginalName()
|
|||
|
end
|
|||
|
if not self.Name or self.Name == "" then
|
|||
|
return self:GetOriginalName()
|
|||
|
end
|
|||
|
return self.Name
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:GetTemplateId()
|
|||
|
return self.TemplateId
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:GetCharacterId()
|
|||
|
return self.CharacterId
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:GetCreateTime()
|
|||
|
return self.CreateTime
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:GetQuality()
|
|||
|
return self.Quality == 0 and self:GetInitQuality() or self.Quality
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:GetQualityIcon()
|
|||
|
return XCharacterConfigs.GetCharQualityIcon(self:GetQuality())
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:GetCharacterQualityIcon()
|
|||
|
return XCharacterConfigs.GetCharacterQualityIcon(self:GetQuality())
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:GetQualityLimit()
|
|||
|
return self.QualityLimit
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:GetLevel()
|
|||
|
return self.Level
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:GetExp()
|
|||
|
return self.Exp
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:GetBreakthrough()
|
|||
|
return self.BreakThrough
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:GetBreakthroughIcon()
|
|||
|
return XPartnerConfigs.GetPartnerBreakThroughIcon(self.BreakThrough)
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:GetBreakthroughLimit()
|
|||
|
return self.BreakthroughLimit
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:GetIsLock()
|
|||
|
return self.IsLock
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:SetIsLock(isLock) --设置是否上锁
|
|||
|
self.IsLock = isLock
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:GetStarSchedule()
|
|||
|
return self.StarSchedule
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:GetSkillList()
|
|||
|
return self.SkillList
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:GetStackCount()
|
|||
|
return self:GetIsByOneself() and self.StackCount or 0
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:GetChipCurCount()--当前持有碎片数(基础+升阶进度)
|
|||
|
return self.ChipBaseCount + self.StarSchedule
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:GetIsCanCompose()--能够合成(必须要非完整)
|
|||
|
return not self.IsComplete and self.ChipBaseCount >= self:GetChipNeedCount()
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:GetIsCarry()--是否被装备
|
|||
|
return self.CharacterId > 0
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:GetIsByOneself()
|
|||
|
local IsNotHasExp = self.Exp == 0
|
|||
|
local IsNotBreakthrough = self.BreakThrough == 0
|
|||
|
local IsNotLevel = self.Level == 1
|
|||
|
local IsNotEatPartner = self:GetStarSchedule() == 0
|
|||
|
local IsNotUpQuality = self.Quality == self:GetInitQuality()
|
|||
|
local IsNotUpSkill = self:CheckIsNotUpSkill()
|
|||
|
local IsNotChangeSkill = self:IsNotChangeSkill()
|
|||
|
local IsNotLock = not self.IsLock
|
|||
|
local IsNotUsed = not self:GetIsCarry()
|
|||
|
local IsNotChangeName = self:GetName() == self:GetOriginalName()
|
|||
|
|
|||
|
return IsNotHasExp and
|
|||
|
IsNotBreakthrough and
|
|||
|
IsNotLevel and
|
|||
|
IsNotEatPartner and
|
|||
|
IsNotUpQuality and
|
|||
|
IsNotUpSkill and
|
|||
|
IsNotChangeSkill and
|
|||
|
IsNotLock and
|
|||
|
IsNotUsed and
|
|||
|
IsNotChangeName
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:GetIsNotTraining()
|
|||
|
local IsNotHasExp = self.Exp == 0
|
|||
|
local IsNotBreakthrough = self.BreakThrough == 0
|
|||
|
local IsNotLevel = self.Level == 1
|
|||
|
local IsNotEatPartner = self:GetStarSchedule() == 0
|
|||
|
local IsNotUpQuality = self.Quality == self:GetInitQuality()
|
|||
|
local IsNotUpSkill = self:CheckIsNotUpSkill()
|
|||
|
|
|||
|
|
|||
|
return IsNotHasExp and
|
|||
|
IsNotBreakthrough and
|
|||
|
IsNotLevel and
|
|||
|
IsNotEatPartner and
|
|||
|
IsNotUpQuality and
|
|||
|
IsNotUpSkill
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:GetIsMaxBreakthrough()
|
|||
|
return self.BreakThrough >= self.BreakthroughLimit
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:GetIsMaxQuality()
|
|||
|
return self.Quality >= self.QualityLimit
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:GetAttribs(level)
|
|||
|
return XFightPartnerManager.GetPartnerAttribs(self, level)
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:GetPartnerAttrMap(level)
|
|||
|
local partnerAttrMap = XDataCenter.PartnerManager.ConstructPartnerAttrMap(self:GetAttribs(level), false, false)
|
|||
|
return partnerAttrMap
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:GetSkillAbility()
|
|||
|
local skillAbility = 0
|
|||
|
for _, groupEntity in pairs(self.MainSkillGroupEntityDic or {}) do
|
|||
|
if groupEntity:GetIsCarry() then
|
|||
|
skillAbility = skillAbility + groupEntity:GetActiveSkillAbility()
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
for _, groupEntity in pairs(self.PassiveSkillGroupEntityDic or {}) do
|
|||
|
if groupEntity:GetIsCarry() then
|
|||
|
skillAbility = skillAbility + groupEntity:GetActiveSkillAbility()
|
|||
|
end
|
|||
|
end
|
|||
|
return skillAbility
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:GetAbility() --获取宠物战力
|
|||
|
if not self.Ability then
|
|||
|
local baseAbility = XAttribManager.GetPartnerAttribAbility(self:GetAttribs()) or 0
|
|||
|
local skillAbility = self:GetSkillAbility()
|
|||
|
self.Ability = XMath.ToMinInt(baseAbility + skillAbility)
|
|||
|
end
|
|||
|
return self.Ability
|
|||
|
end
|
|||
|
|
|||
|
-----------------------------宠物品质--------------------------------
|
|||
|
function XPartner:GetQualityCfg(tagQuality)--无参代表当前品质
|
|||
|
return XPartnerConfigs.GePartnerQualityByIdAndNum(self.TemplateId, tagQuality or self.Quality) or {}
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:GetQualitySkillColumnCount(tagQuality)
|
|||
|
return self:GetQualityCfg(tagQuality).SkillColumnCount
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:GetQualityEvolutionAttribId(tagQuality)
|
|||
|
return self:GetQualityCfg(tagQuality).EvolutionAttrId
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:GetQualityEvolutionCostItemId(tagQuality)
|
|||
|
return self:GetQualityCfg(tagQuality).EvolutionCostItemId
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:GetQualityEvolutionCostItemCount(tagQuality)
|
|||
|
return self:GetQualityCfg(tagQuality).EvolutionCostItemCount
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:GetQualityEvolutionCostItem(tagQuality)
|
|||
|
local itemlist = {}
|
|||
|
local itemIdlist = self:GetQualityEvolutionCostItemId(tagQuality)
|
|||
|
local itemCountlist = self:GetQualityEvolutionCostItemCount(tagQuality)
|
|||
|
for index,id in pairs(itemIdlist or {}) do
|
|||
|
local tmpData = {
|
|||
|
Id = id,
|
|||
|
Count = itemCountlist[index] or 0,
|
|||
|
}
|
|||
|
itemlist[index] = tmpData
|
|||
|
end
|
|||
|
return itemlist
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:GetQualityEvolutionMoney(tagQuality)
|
|||
|
return self:GetQualityEvolutionCostItem(tagQuality)[MoneyIndex]
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:GetQualityEvolutionItem(tagQuality)
|
|||
|
local list = self:GetQualityEvolutionCostItem(tagQuality)
|
|||
|
table.remove(list, MoneyIndex)
|
|||
|
return list
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:GetQualityStarCostChipCount(tagQuality)
|
|||
|
return self:GetQualityCfg(tagQuality).StarCostChipCount
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:GetQualityStarAttribId(tagQuality)
|
|||
|
return self:GetQualityCfg(tagQuality).AttrId
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:GetQualityStarAttribs(tagQuality)
|
|||
|
local attribList = {}
|
|||
|
local attribIdList = self:GetQualityStarAttribId(tagQuality)
|
|||
|
for _,id in pairs(attribIdList or {}) do
|
|||
|
table.insert(attribList, XAttribManager.GetBaseAttribs(id))
|
|||
|
end
|
|||
|
return attribList
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:GetCanActivateStarCount(tagQuality, chipCount)--已激活多少个星
|
|||
|
local starCostList = self:GetQualityStarCostChipCount(tagQuality)
|
|||
|
local curStarCount = 0
|
|||
|
local curChipCount = chipCount or self.StarSchedule
|
|||
|
for index,starCost in pairs(starCostList or {}) do
|
|||
|
if curChipCount >= starCost and index > curStarCount then
|
|||
|
curStarCount = index
|
|||
|
end
|
|||
|
end
|
|||
|
return curStarCount
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:GetMaxStarCount(tagQuality)
|
|||
|
local starCostList = self:GetQualityStarCostChipCount(tagQuality)
|
|||
|
return #starCostList
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:GetCanUpQuality(tagQuality)
|
|||
|
local curStarCount = self:GetCanActivateStarCount(tagQuality)
|
|||
|
return curStarCount >= self:GetMaxStarCount()
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:GetClipMaxCount(tagQuality)
|
|||
|
local starCostList = self:GetQualityStarCostChipCount(tagQuality)
|
|||
|
return starCostList[#starCostList]
|
|||
|
end
|
|||
|
-----------------------------宠物突破------------------------------------
|
|||
|
function XPartner:GetBreakthroughCfg(tagBreakthrough)--无参代表当前突破层数
|
|||
|
return XPartnerConfigs.GetPartnerBreakthroughByIdAndNum(self.TemplateId, tagBreakthrough or self.BreakThrough) or {}
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:GetBreakthroughLevelLimit(tagBreakthrough)
|
|||
|
return self:GetBreakthroughCfg(tagBreakthrough).LevelLimit
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:GetBreakthroughAttribId(tagBreakthrough)
|
|||
|
return self:GetBreakthroughCfg(tagBreakthrough).AttribId
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:GetBreakthroughAttribPromotedId(tagBreakthrough)
|
|||
|
return self:GetBreakthroughCfg(tagBreakthrough).AttribPromotedId
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:GetBreakthroughLevelUpTemplateId(tagBreakthrough)
|
|||
|
return self:GetBreakthroughCfg(tagBreakthrough).LevelUpTemplateId
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:GetBreakthroughCostItemId(tagBreakthrough)
|
|||
|
return self:GetBreakthroughCfg(tagBreakthrough).CostItemId
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:GetBreakthroughCostItemCount(tagBreakthrough)
|
|||
|
return self:GetBreakthroughCfg(tagBreakthrough).CostItemCount
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:GetBreakthroughCostItem(tagBreakthrough)
|
|||
|
local itemlist = {}
|
|||
|
local itemIdlist = self:GetBreakthroughCostItemId(tagBreakthrough)
|
|||
|
local itemCountlist = self:GetBreakthroughCostItemCount(tagBreakthrough)
|
|||
|
for index,id in pairs(itemIdlist or {}) do
|
|||
|
local tmpData = {
|
|||
|
Id = id,
|
|||
|
Count = itemCountlist[index] or 0,
|
|||
|
}
|
|||
|
itemlist[index] = tmpData
|
|||
|
end
|
|||
|
return itemlist
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:GetBreakthroughMoney(tagBreakthrough)
|
|||
|
return self:GetBreakthroughCostItem(tagBreakthrough)[MoneyIndex]
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:GetBreakthroughItem(tagBreakthrough)
|
|||
|
local list = self:GetBreakthroughCostItem(tagBreakthrough)
|
|||
|
table.remove(list, MoneyIndex)
|
|||
|
return list
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:GetIsLevelMax(tagBreakthrough)
|
|||
|
return self.Level >= self:GetBreakthroughLevelLimit(tagBreakthrough)
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:GetBreakthroughPromotedAttrMap(preBreakthrough)
|
|||
|
local attribPromotedId = self:GetBreakthroughAttribPromotedId(preBreakthrough)
|
|||
|
local map = XAttribManager.GetPromotedAttribs(attribPromotedId)
|
|||
|
return XDataCenter.PartnerManager.ConstructPartnerAttrMap(map, false, true)
|
|||
|
end
|
|||
|
-------------------------宠物等级------------------------------------
|
|||
|
|
|||
|
function XPartner:GetLevelUpCfg(tagBreakthrough, level)
|
|||
|
local levelUpTemplateId = self:GetBreakthroughLevelUpTemplateId(tagBreakthrough)
|
|||
|
return XPartnerConfigs.GetPartnerLevelUpTemplateByIdAndLevel(levelUpTemplateId, level or self.Level) or {}
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:GetLevelUpInfoExp(tagBreakthrough, level)
|
|||
|
return self:GetLevelUpCfg(tagBreakthrough, level).Exp
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:GetLevelUpInfoAllExp(tagBreakthrough, level)
|
|||
|
return self:GetLevelUpCfg(tagBreakthrough, level).AllExp
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:GetPartnerLevelTotalNeedExp(targetLevel)
|
|||
|
local totalExp = 0
|
|||
|
for level = self.Level, targetLevel - 1 do
|
|||
|
totalExp = totalExp + self:GetLevelUpInfoExp(nil, level)
|
|||
|
end
|
|||
|
totalExp = totalExp - self:GetExp()
|
|||
|
return totalExp
|
|||
|
end
|
|||
|
|
|||
|
-------------------------宠物技能------------------------------------
|
|||
|
function XPartner:CreateSkillEntityDic()
|
|||
|
self.MainSkillGroupEntityDic = {}
|
|||
|
self.PassiveSkillGroupEntityDic = {}
|
|||
|
|
|||
|
for _,mainSkillGrpupId in pairs(self:GetMainSkillGroupIdList() or {}) do
|
|||
|
local IsDefaultSkillGroup = mainSkillGrpupId == self:GetDefaultSkillGroupId()
|
|||
|
self.MainSkillGroupEntityDic[mainSkillGrpupId] = XPartnerMainSkillGroup.New(mainSkillGrpupId, IsDefaultSkillGroup, self.IsPreview)
|
|||
|
end
|
|||
|
for _,passiveSkillGrpupId in pairs(self:GetPassiveSkillGroupIdList() or {}) do
|
|||
|
self.PassiveSkillGroupEntityDic[passiveSkillGrpupId] = XPartnerPassiveSkillGroup.New(passiveSkillGrpupId)
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:UpdateSkillEntity()
|
|||
|
self.UnlockSkillGroupDic = {}
|
|||
|
for _,skillId in pairs(self.UnlockSkillGroup or {}) do
|
|||
|
self.UnlockSkillGroupDic[skillId] = true
|
|||
|
end
|
|||
|
-------------------------更新当前技能数据-----------------------------
|
|||
|
local carringMainSkillLevel = 1 --暂时只有一个主技能组
|
|||
|
local carringMainSkillGroupId = 0
|
|||
|
for _,skilldata in pairs(self.SkillList or {}) do
|
|||
|
local tmpData = {}
|
|||
|
tmpData.Level = skilldata.Level
|
|||
|
tmpData.IsCarry = skilldata.IsWear
|
|||
|
tmpData.ActiveSkillId = skilldata.Id
|
|||
|
|
|||
|
if skilldata.Type == XPartnerConfigs.SkillType.MainSkill then
|
|||
|
local groupId = XPartnerConfigs.GetMainSkillGroupById(skilldata.Id)
|
|||
|
self.MainSkillGroupEntityDic[groupId]:UpdateData(tmpData)
|
|||
|
carringMainSkillLevel = tmpData.Level --暂时只有一个主技能组
|
|||
|
carringMainSkillGroupId = groupId --暂时只有一个主技能组
|
|||
|
elseif skilldata.Type == XPartnerConfigs.SkillType.PassiveSkill then
|
|||
|
local groupId = XPartnerConfigs.GetPassiveSkillGroupById(skilldata.Id)
|
|||
|
self.PassiveSkillGroupEntityDic[groupId]:UpdateData(tmpData)
|
|||
|
end
|
|||
|
end
|
|||
|
-------------------------更新主动技能携带情况-----------------------------
|
|||
|
for _, skillGroup in pairs(self.MainSkillGroupEntityDic or {}) do
|
|||
|
local isCarry = carringMainSkillGroupId == skillGroup.Id
|
|||
|
skillGroup:UpdateData({ IsCarry = isCarry })
|
|||
|
end
|
|||
|
---------------------------------------------------------------------
|
|||
|
-------------------------更新未装备主技能数据--------------------------
|
|||
|
for _,skillGroup in pairs(self.MainSkillGroupEntityDic or {}) do
|
|||
|
if not skillGroup:GetIsCarry() then
|
|||
|
local tmpData = {}
|
|||
|
tmpData.Level = carringMainSkillLevel
|
|||
|
tmpData.IsCarry = false
|
|||
|
if self:GetIsCarry() then
|
|||
|
local charId = self:GetCharacterId()
|
|||
|
local charElement = XCharacterConfigs.GetCharacterElement(charId)
|
|||
|
local skillId = skillGroup:GetSkillIdByElement(charElement)
|
|||
|
tmpData.ActiveSkillId = skillId
|
|||
|
else
|
|||
|
skillGroup:SetDefaultActiveSkillId()
|
|||
|
end
|
|||
|
skillGroup:UpdateData(tmpData)
|
|||
|
end
|
|||
|
end
|
|||
|
---------------------------------------------------------------------
|
|||
|
-------------------------更新主技能解锁数据----------------------------
|
|||
|
for groupId,IsOpen in pairs(self.UnlockSkillGroupDic or {}) do
|
|||
|
local mainSkilldata = self.MainSkillGroupEntityDic[groupId]
|
|||
|
local passiveSkilldata = self.PassiveSkillGroupEntityDic[groupId]
|
|||
|
|
|||
|
if mainSkilldata then
|
|||
|
mainSkilldata:UpdateData({IsLock = not IsOpen})
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:GetMainSkillGroupEntityDic()
|
|||
|
return self.MainSkillGroupEntityDic
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:GetPassiveSkillGroupEntityDic()
|
|||
|
return self.PassiveSkillGroupEntityDic
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:GetMainSkillGroupList()
|
|||
|
local list = {}
|
|||
|
for _,entity in pairs(self.MainSkillGroupEntityDic or {}) do
|
|||
|
table.insert(list, entity)
|
|||
|
end
|
|||
|
XPartnerSort.SkillSort(list)
|
|||
|
return list
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:GetPassiveSkillGroupList()
|
|||
|
local list = {}
|
|||
|
for _,entity in pairs(self.PassiveSkillGroupEntityDic or {}) do
|
|||
|
table.insert(list, entity)
|
|||
|
end
|
|||
|
XPartnerSort.SkillSort(list)
|
|||
|
return list
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:GetCarryMainSkillGroupList()
|
|||
|
local list = {}
|
|||
|
for _,entity in pairs(self.MainSkillGroupEntityDic or {}) do
|
|||
|
if entity:GetIsCarry() then
|
|||
|
table.insert(list, entity)
|
|||
|
end
|
|||
|
end
|
|||
|
XPartnerSort.SkillSort(list)
|
|||
|
return list
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:GetCarryPassiveSkillGroupList()
|
|||
|
local list = {}
|
|||
|
for _,entity in pairs(self.PassiveSkillGroupEntityDic or {}) do
|
|||
|
if entity:GetIsCarry() then
|
|||
|
table.insert(list, entity)
|
|||
|
end
|
|||
|
end
|
|||
|
XPartnerSort.SkillSort(list)
|
|||
|
return list
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:GetSkillById(skillId)
|
|||
|
for _,entity in pairs(self.MainSkillGroupEntityDic or {}) do
|
|||
|
if entity:GetActiveSkillId() == skillId then
|
|||
|
return entity
|
|||
|
end
|
|||
|
end
|
|||
|
for _,entity in pairs(self.PassiveSkillGroupEntityDic or {}) do
|
|||
|
if entity:GetActiveSkillId() == skillId then
|
|||
|
return entity
|
|||
|
end
|
|||
|
end
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
--==============================
|
|||
|
---@desc 获取技能组,通过默认的ActiveSkillId,避免了主动技能因角色不同的偏差
|
|||
|
---@skillId ActiveSkillId
|
|||
|
---@return @class XPartnerMainSkillGroup or XPartnerPassiveSkillGroup
|
|||
|
--==============================
|
|||
|
function XPartner:GetSkillByDefaultId(skillId)
|
|||
|
for _,entity in pairs(self.MainSkillGroupEntityDic or {}) do
|
|||
|
if entity:GetDefaultActiveSkillId() == skillId then
|
|||
|
return entity
|
|||
|
end
|
|||
|
end
|
|||
|
for _,entity in pairs(self.PassiveSkillGroupEntityDic or {}) do
|
|||
|
if entity:GetDefaultActiveSkillId() == skillId then
|
|||
|
return entity
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
--==============================
|
|||
|
---@desc 获取携带的主动技能的默认ActiveSkillId
|
|||
|
---@return table
|
|||
|
--==============================
|
|||
|
function XPartner:GetCarryMainSkillDefaultIdList()
|
|||
|
local groupList = self:GetCarryMainSkillGroupList()
|
|||
|
local list = {}
|
|||
|
for _, group in ipairs(groupList or {}) do
|
|||
|
local defaultId = group:GetDefaultActiveSkillId()
|
|||
|
table.insert(list, defaultId)
|
|||
|
end
|
|||
|
return list
|
|||
|
end
|
|||
|
|
|||
|
--==============================
|
|||
|
---@desc 获取携带的被动技能的默认ActiveSkillId
|
|||
|
---@return table
|
|||
|
--==============================
|
|||
|
function XPartner:GetCarryPassiveSkillDefaultIdList()
|
|||
|
local groupList = self:GetCarryPassiveSkillGroupList()
|
|||
|
local list = {}
|
|||
|
for _, group in ipairs(groupList or {}) do
|
|||
|
local defaultId = group:GetDefaultActiveSkillId()
|
|||
|
table.insert(list, defaultId)
|
|||
|
end
|
|||
|
return list
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:CheckIsNotUpSkill()
|
|||
|
for _,entity in pairs(self.MainSkillGroupEntityDic or {}) do
|
|||
|
if entity:GetLevel() > 1 then
|
|||
|
return false
|
|||
|
end
|
|||
|
end
|
|||
|
for _,entity in pairs(self.PassiveSkillGroupEntityDic or {}) do
|
|||
|
if entity:GetLevel() > 1 then
|
|||
|
return false
|
|||
|
end
|
|||
|
end
|
|||
|
return true
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:IsNotChangeSkill()
|
|||
|
return self:IsNotChangeMainSkill() and self:IsNotChangePassiveSkill()
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:IsNotChangeMainSkill()
|
|||
|
for _,entity in pairs(self.MainSkillGroupEntityDic or {}) do
|
|||
|
if entity:GetIsCarry() and entity:GetId() ~= self:GetDefaultSkillGroupId() then
|
|||
|
return false
|
|||
|
end
|
|||
|
end
|
|||
|
return true
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:IsNotChangePassiveSkill()
|
|||
|
for _,entity in pairs(self.PassiveSkillGroupEntityDic or {}) do
|
|||
|
if entity:GetIsCarry() then
|
|||
|
return false
|
|||
|
end
|
|||
|
end
|
|||
|
return true
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:GetSkillCfg()
|
|||
|
return XPartnerConfigs.GetPartnerSkillById(self.TemplateId)
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:GetSkillUpgradeCostItemId()
|
|||
|
return self:GetSkillCfg().UpgradeCostItemId
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:GetSkillUpgradeCostItemCount()
|
|||
|
return self:GetSkillCfg().UpgradeCostItemCount
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:GetSkillUpgradeCostItem()
|
|||
|
local itemlist = {}
|
|||
|
local itemIdlist = self:GetSkillUpgradeCostItemId()
|
|||
|
local itemCountlist = self:GetSkillUpgradeCostItemCount()
|
|||
|
for index,id in pairs(itemIdlist or {}) do
|
|||
|
local tmpData = {
|
|||
|
Id = id,
|
|||
|
Count = itemCountlist[index] or 0,
|
|||
|
}
|
|||
|
itemlist[index] = tmpData
|
|||
|
end
|
|||
|
return itemlist
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:GetSkillUpgradeMoney()
|
|||
|
return self:GetSkillUpgradeCostItem()[MoneyIndex]
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:GetSkillUpgradeItem()
|
|||
|
local list = self:GetSkillUpgradeCostItem()
|
|||
|
table.remove(list, MoneyIndex)
|
|||
|
return list
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:GetDefaultSkillGroupId()
|
|||
|
return self:GetSkillCfg().DefaultMainSkillGroupId
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:GetMainSkillGroupIdList()
|
|||
|
return self:GetSkillCfg().MainSkillGroupId
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:GetPassiveSkillGroupIdList()
|
|||
|
return self:GetSkillCfg().PassiveSkillGroupId
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:GetTotalSkillLevel()--总当前技能等级
|
|||
|
local level = 0
|
|||
|
for _,entity in pairs(self.MainSkillGroupEntityDic or {}) do
|
|||
|
if entity:GetIsCarry() then
|
|||
|
level = level + entity:GetLevel()--总技能共享等级,只需要取其中一个的等级即可
|
|||
|
break
|
|||
|
end
|
|||
|
end
|
|||
|
for _,entity in pairs(self.PassiveSkillGroupEntityDic or {}) do
|
|||
|
level = level + entity:GetLevel()
|
|||
|
end
|
|||
|
|
|||
|
return level
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:GetTotalSkillLevelLimit()--总技能等级
|
|||
|
local levelLimit = 0
|
|||
|
for _,entity in pairs(self.MainSkillGroupEntityDic or {}) do
|
|||
|
if entity:GetIsCarry() then
|
|||
|
levelLimit = levelLimit + entity:GetLevelLimit()--总技能共享等级,只需要取其中一个的等级即可
|
|||
|
break
|
|||
|
end
|
|||
|
end
|
|||
|
for _,entity in pairs(self.PassiveSkillGroupEntityDic or {}) do
|
|||
|
levelLimit = levelLimit + entity:GetLevelLimit()
|
|||
|
end
|
|||
|
|
|||
|
return levelLimit
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:GetMiniSkillLevelLimit()--最小技能等级
|
|||
|
local levelLimit = 0
|
|||
|
for _,entity in pairs(self.MainSkillGroupEntityDic or {}) do
|
|||
|
if entity:GetIsCarry() then
|
|||
|
levelLimit = levelLimit + 1
|
|||
|
break
|
|||
|
end
|
|||
|
end
|
|||
|
for _,entity in pairs(self.PassiveSkillGroupEntityDic or {}) do
|
|||
|
levelLimit = levelLimit + 1
|
|||
|
end
|
|||
|
|
|||
|
return levelLimit
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:GetIsTotalSkillLevelMax()--总技能等级已满
|
|||
|
return self:GetTotalSkillLevel() >= self:GetTotalSkillLevelLimit()
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:GetSkillLevelGap()--总技能等级与满技能等级的差值
|
|||
|
return self:GetTotalSkillLevelLimit() - self:GetTotalSkillLevel()
|
|||
|
end
|
|||
|
-------------------------------------宠物故事---------------------------------
|
|||
|
|
|||
|
function XPartner:CreateStoryEntityDic()
|
|||
|
self.StoryEntityDic = {}
|
|||
|
local storyEntityList = XDataCenter.ArchiveManager.GetArchivePartnerSetting(self.TemplateId,XArchiveConfigs.PartnerSettingType.Story)
|
|||
|
for _,Entity in pairs(storyEntityList or {}) do
|
|||
|
self.StoryEntityDic[Entity:GetId()] = Entity
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:UpdateStoryEntity(unLockStoryList)
|
|||
|
for _,id in pairs(unLockStoryList or {}) do
|
|||
|
if self.StoryEntityDic[id] then
|
|||
|
self.StoryEntityDic[id]:UpdateData({IsLock = false})
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
-------------------------------物品跳转----------------------------------
|
|||
|
function XPartner:GetItemSkipCfg()
|
|||
|
return XPartnerConfigs.GetPartnerItemSkipById(self.TemplateId)
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:GetLevelUpSkipIdList()
|
|||
|
return self:GetItemSkipCfg().LevelUpSkipIdParams or {}
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:GetClipSkipIdList()
|
|||
|
return self:GetItemSkipCfg().ClipSkipIdParams or {}
|
|||
|
end
|
|||
|
|
|||
|
function XPartner:GetStageSkipId()
|
|||
|
return self:GetItemSkipCfg().StageSkipIdParam
|
|||
|
end
|
|||
|
|
|||
|
-------------------------------宠物来源----------------------------------
|
|||
|
function XPartner:SetIsBelongSelf(value)
|
|||
|
self.IsBelongSelf = value
|
|||
|
end
|
|||
|
|
|||
|
return XPartner
|