| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397 |
- local PartnerData = class("PartnerData", require("DataBase"))
- local SkillData = require("SkillData")
- local baseAttrs
- local needNtfTeamBattle = true
- local attrDirty = false
- local lastTeamPetAttrs = {}
- local lastTeamEquipAttrs = {}
- local lastTeamCardAttrs = {}
- local lastTeamAdvenceLvs = {}
- local lastTeamStrengthLvs = {}
- local lastTeamPointAttrs = {}
- local lastTeamBaseAttrs = {}
- local lastTeamFashionAttrs = {}
- local lastTeamKeepSakeAttrs = {}
- local lastTeamSkillAttrs = {}
- local lastTotalAttrs = {}
- local battlePartnerChanged = false
- local partnerChangeTimer
- local AttrFilterList
- function PartnerData:ctor()
- self.data = {}
- end
- local function SortPartnerId(a, b)
- if a.id > 0 and b.id > 0 then
- return a.post < b.post
- else
- if a.id == b.id then
- return a.post < b.post
- else
- return a.id > b.id
- end
- end
- end
- function PartnerData:InitPartnerData(partnerData)
- local baseAttr = SInt.Convert(GlobalConfig.Instance:GetConfigIntValue(GlobalConfig.c_base_attr_id))
- baseAttrs = {[Enum.HeroAttrType.STR] = baseAttr, [Enum.HeroAttrType.AGI] = baseAttr, [Enum.HeroAttrType.INT] = baseAttr,
- [Enum.HeroAttrType.DEX] = baseAttr, [Enum.HeroAttrType.VIT] = baseAttr, [Enum.HeroAttrType.LUK] = baseAttr}
- if self.data.partnerData == nil then
- self.data.partnerData = {}
- end
- if self.data.partnerData.heroDatas == nil then
- self.data.partnerData.heroDatas = {}
- end
- self:RefreshPartnerDatas(partnerData.hero_data, true)
- end
- function PartnerData:RefreshPartnerDatas(heroData, isInit)
- local addPartnerIds = {}
- local addPartnerMap = {}
- local newBattleStatus = false
- local needRpRefreshIds = {}
- local changePetIds = {}
- local allPartnerDatas = ManagerContainer.CfgMgr:GetOriPartnerDatas()
- local list = {}
- for _,v in pairs(self.data.partnerData.heroDatas) do
- if not v.owned then
- v.id = 0
- end
- end
- if allPartnerDatas ~= nil then
- for _,v in pairs(allPartnerDatas) do
- local data = self:GetPartnerDataByOriId(v.ParterId)
- local isNew = false
- if data == nil then
- data = {}
- data.owned = false
- data.isBattle = false
- end
- data.changeBattle = false
- for _,v1 in pairs(heroData) do
- local oriPartnerCfgId = ManagerContainer.CfgMgr:GetOriPartnerDataByAdvenceId(v1.config_id)
- if v.ParterId == oriPartnerCfgId.ParterId then
- if data.isBattle ~= v1.is_battle then
- newBattleStatus = true
- data.changeBattle = true
- attrDirty = true
- end
- if not data.owned then
- isNew = true
- data.owned = true
- attrDirty = true
- end
- if data.battlePetId ~= v1.battle_pet_id then
- changePetIds[#changePetIds + 1] = v1.id
- attrDirty = true
- end
- local addAdvenceLv = v1.advance_level > (data.advanceLevel or 0)
- local addStrengthLv = v1.strength_level > (data.strengthLevel or 0)
- if isInit then
- addAdvenceLv = false
- addStrengthLv = false
- end
- local isTransfer = data.configId ~= v1.config_id
- self:InitOwnedHeroData(data, v1)
- --转职刷新数据
- if not isNew and data.owned then
- if isTransfer then
- if not LuaBattleBridge.ActorInFighting(data.id) then
- ManagerContainer.LuaActorDataMgr:RefreshFellowActorData(data.id, data.configId)
- end
- data.isTransferred = true
- lastTeamPointAttrs[data.id] = nil
- lastTeamBaseAttrs[data.id] = nil
- self:RefreshAddPointAttr(data.id)
- attrDirty = true
- lastTeamSkillAttrs[data.id] = nil
- lastTeamEquipAttrs[data.id] = nil
- lastTeamCardAttrs[data.id] = nil
- lastTeamPetAttrs[data.id] = nil
- lastTeamAdvenceLvs[data.id] = 0
- lastTeamStrengthLvs[data.id] = 0
- lastTeamFashionAttrs[data.id] = nil
- end
- --进阶刷新数据
- ManagerContainer.LuaActorDataMgr:SetPartnerStep(data.id,data.configId, data.advanceLevel)
- --重新计算属性
- self:InitPartnerAttr(data, addAdvenceLv, addStrengthLv)
- if addAdvenceLv or addStrengthLv then
- attrDirty = true
- end
- end
- if isInit then
- self:InitPartnerAttr(data, addAdvenceLv, addStrengthLv)
- end
- if isNew then
- self:RefreshAddPointAttr(v1.id)
- addPartnerMap[v.ParterId] = v1.id
- addPartnerIds[#addPartnerIds + 1] = v1.id
- attrDirty = true
- end
- if not CommonUtil.EleInTable(v1.id, needRpRefreshIds) then
- needRpRefreshIds[#needRpRefreshIds + 1] = v1.id
- end
- end
- end
- if not data.owned then
- self:InitUnownedHeroData(data, v)
- data.owned = false
- end
- data.post = v.PostId
- data.jobType = v.JobType
- list[#list + 1] = data
- end
- end
- for _,v in pairs(self.data.partnerData.heroDatas) do
- if v.owned then
- local oriPartnerCfg = ManagerContainer.CfgMgr:GetOriPartnerDataByAdvenceId(v.configId)
- for k,v1 in pairs(list) do
- local oriPartnerCfg1 = ManagerContainer.CfgMgr:GetOriPartnerDataByAdvenceId(v1.configId)
- if oriPartnerCfg1.ParterId == oriPartnerCfg.ParterId then
- list[k] = v
- if v1.id > 0 then
- list[k].isBattle = v1.isBattle
- if v1.changeBattle then
- ManagerContainer.RedPointMgr.HeroRPCtr:RefreshRoleSkillEquipRPById(v1.id)
- end
- end
- end
- end
- end
- end
- table.sort(list, SortPartnerId)
- self:RefreshPartnerID(list)
- return addPartnerMap, newBattleStatus, needRpRefreshIds,changePetIds
- end
- function PartnerData:RefreshPartnerID(list)
- for i = 1, #list do
- if list[i].id == 0 then
- list[i].id = i + 1
- list[i].slot.hero_id = list[i].id
- end
- self.data.partnerData.heroDatas[list[i].id] = list[i]
- end
- end
- function PartnerData:InitUnownedHeroData(data, heroData)
- data.id = 0
- data.configId = heroData.ParterId
- data.fightPower = SInt.Convert(heroData.InitFightPower or 0)
- data.avatar = 0
- data.isBattle = false
- data.baseLevel = 1
- data.advanceLevel = 0
- data.strengthLevel = 0
- data.attrs = CommonUtil.TableClone(baseAttrs)
- data.slot = {hero_id = data.id, slot_list = {}}
- data.treasureFree = 1
- data.battlePetId = 0
- data.skillEquipSlot = {heroId = data.id, slot_list = {}}
- --宠物契约
- data.petQiyueData = ProtocalDataNormal.ParsePetQiyueData(data.petQiyueData, heroData.pet_qiyue_data)
- self:UpdateHeroExtGoShowData(data)
- end
- function PartnerData:InitOwnedHeroData(data, heroData)
- --LogHRWarning(Inspect(heroData))
- data.id = heroData.id
- data.configId = heroData.config_id
- data.fightPower = SInt.Convert(heroData.fight_power or 0)
- data.avatar = heroData.avatar
- data.isBattle = heroData.is_battle
- data.baseLevel = heroData.base_level
- data.advanceLevel = heroData.advance_level or 0
- data.strengthLevel = heroData.strength_level or 0
- data.attrs = CommonUtil.TableClone(baseAttrs)
- data.slot = heroData.slot
- if #data.slot.slot_list == 0 then
- for i = 1, 6 do
- data.slot.slot_list[i] = {}
- data.slot.slot_list[i].level = 0
- data.slot.slot_list[i].equip_id = 0
- data.slot.slot_list[i].card_id_list = {}
- end
- end
- data.attrList = heroData.attr_list
- for _,v in pairs(data.attrList) do
- v.value = SInt.Convert(v.value)
- end
- data.attrPoint = SInt.Convert(heroData.attr_point)
- data.qualityList = {}
- if heroData.quality_list and #heroData.quality_list > 0 then
- for k, v in pairs(heroData.quality_list) do
- data.qualityList[v.key] = v.value
- end
- end
- data.battlePetId = heroData.battle_pet_id
- self:InitPartnerSkill(data, heroData.skill)
- data.treasureFree = 1
- data.skillEquipSlot = ProtocalDataNormal.ParseSkillEquipSlotData(data.skillEquipSlot, heroData.skill_equip_slot)
- --宠物契约
- data.petQiyueData = ProtocalDataNormal.ParsePetQiyueData(data.petQiyueData, heroData.pet_qiyue_data)
- LogHRWarning("refresh partner heroData "..Inspect(heroData.pet_qiyue_data).." "..Inspect(data.petQiyueData))
- self:UpdateHeroExtGoShowData(data)
- return data
- end
- function PartnerData:ChangePartnerData(data)
- local newData = self:GetPartnerDataById(data.config_id)
- if newData == nil then
- newData = {}
- newData.isBattle = false
- newData.owned = false
- end
- local lastBattleStatue = newData.isBattle
- local lastOwnStatue = newData.owned
- newData.id = data.id
- newData.configId = data.config_id
- --newData.fightPower = data.fight_power or 0
- newData.avatar = data.avatar
- newData.isBattle = data.is_battle
- newData.baseLevel = data.base_level
- newData.advanceLevel = data.advance_level
- newData.strengthLevel = data.strength_level or 0
- newData.slot = data.slot
- -- newData.skillData = data.skill
- self:InitPartnerSkill(newData, data.skill)
- if newData.attrs == nil then
- newData.attrs = CommonUtil.TableClone(baseAttrs)
- end
- newData.owned = true
- newData.treasureFree = 1
- ManagerContainer.LuaActorDataMgr:SetPartnerStep(newData.id,newData.configId, newData.advanceLevel)
- self:InitPartnerAttr(newData)
- self.data.partnerData.heroDatas[newData.id] = newData
- -- self:SetHeroSkills(newData)
- return lastBattleStatue ~= newData.isBattle, not lastOwnStatue and newData.owned, newData
- end
- --function PartnerData:RefreshPartnerTransfer(id)
- -- for k,v in pairs(self.data.partnerData.heroDatas) do
- -- if v.id == id then
- -- if not LuaBattleBridge.ActorInFighting(id) then
- -- ManagerContainer.LuaActorDataMgr:RefreshFellowActorData(id,v.configId)
- -- end
- --
- -- v.isTransferred = true
- --
- -- lastTeamPointAttrs[id] = nil
- -- lastTeamBaseAttrs[id] = nil
- -- self:RefreshAddPointAttr(id)
- -- attrDirty = true
- --
- -- lastTeamSkillAttrs[id] = nil
- -- lastTeamEquipAttrs[id] = nil
- -- lastTeamCardAttrs[id] = nil
- -- lastTeamPetAttrs[id] = nil
- -- lastTeamAdvenceLvs[id] = 0
- -- lastTeamStrengthLvs[id] = 0
- -- self:InitPartnerAttrById(v.id, v.advanceLevel, v.strengthLevel)
- -- end
- -- end
- --end
- function PartnerData:RefreshPartnerTreasureState(heroId, isFree)
- local heroData = self:GetPartnerDataByUniqueId(heroId)
- heroData.treasureFree = isFree and 1 or 0
- end
- function PartnerData:GetAdvenceAttrs(data, attrId, addAdvenceLv)
- local cfgData = ManagerContainer.CfgMgr:GetPartnerDataById(data.configId)
- local stepData = ManagerContainer.CfgMgr:GetParterProgressById(cfgData.ParterJob)
- if data.advanceLevel == 0 then
- return 0
- end
- local num = 0
- if addAdvenceLv then
- local adds = CommonUtil.DeserializeCfgItemList(stepData["Attribute"..data.advanceLevel])
- if adds ~= nil then
- for k,v in pairs(adds) do
- if v[1] == attrId then
- if v[1] < Enum.HeroAttrType.STR_Percent then
- num = num + v[2]
- else
- num = num + v[2]*0.0001
- end
- end
- end
- end
- else
- for i = 1,data.advanceLevel do
- local adds = CommonUtil.DeserializeCfgItemList(stepData["Attribute"..i])
- if adds ~= nil then
- for k,v in pairs(adds) do
- if v[1] == attrId then
- if v[1] < Enum.HeroAttrType.STR_Percent then
- num = num + v[2]
- else
- num = num + v[2]*0.0001
- end
- end
- end
- end
- end
- end
- return num
- end
- function PartnerData:InitPartnerPointAttr()
- for _,v in pairs(self.data.partnerData.heroDatas) do
- if v.owned then
- self:RefreshAddPointAttr(v.id)
- end
- end
- end
- function PartnerData:RefreshAddPointAttr(id)
- if lastTeamPointAttrs[id] == nil then lastTeamPointAttrs[id] = {} end
- if lastTeamBaseAttrs[id] == nil then lastTeamBaseAttrs[id] = {} end
- local partnerData = self:GetPartnerDataByUniqueId(id)
- if partnerData == nil then return end
- local heroData = ManagerContainer.LuaActorDataMgr:GetFellowActorData(id,partnerData.configId)
- for _,v in pairs(Enum.HeroAttrType) do
- if v <= Enum.HeroAttrType.LUK then
- local delta = self:GetPointAttr(id, v)
- if lastTeamPointAttrs[id] ~= nil and lastTeamPointAttrs[id][v] ~= nil then
- -- delta = self:GetPointAttr(v) - lastPointAttrs[v]
- delta = SDataUtil.Sub(self:GetPointAttr(id, v), lastTeamPointAttrs[id][v])
- end
- heroData:SetBaseFirstAttr(v, SDataUtil.Add(heroData:GetBaseFirstAttr(v),delta))
- lastTeamPointAttrs[id][v] = self:GetPointAttr(id, v)
- lastTeamBaseAttrs[id][v] = heroData:GetBaseFirstAttr(v)
- end
- end
- for _,v in pairs(Enum.HeroAttrType) do
- partnerData.attrs[v] = heroData:GetFinalAttr(v)
- end
- end
- function PartnerData:GetAllPartnerSlots()
- local slots = {}
- for k,v in pairs(self.data.partnerData.heroDatas) do
- local slot = v.slot
- if slot ~= nil then
- slots[slot.hero_id] = slot
- end
- end
- return slots
- end
- function PartnerData:GetStrengthAttrs(data, attrId, addStrengthLv)
- local cfgData = ManagerContainer.CfgMgr:GetPartnerDataById(data.configId)
- local stepData = ManagerContainer.CfgMgr:GetParterProgressById(cfgData.ParterJob)
- if data.strengthLevel == 0 then
- return 0
- end
- local num = 0
- if addStrengthLv then
- local adds = CommonUtil.DeserializeCfgItemList(stepData["BreachAttribute"..data.strengthLevel])
- if adds ~= nil then
- for k,v in pairs(adds) do
- if v[1] == attrId then
- if v[1] < Enum.HeroAttrType.STR_Percent then
- num = num + v[2]
- else
- num = num + v[2]*0.0001
- end
- end
- end
- end
- else
- for i = 1,data.strengthLevel do
- local adds = CommonUtil.DeserializeCfgItemList(stepData["BreachAttribute"..i])
- if adds ~= nil then
- for k,v in pairs(adds) do
- if v[1] == attrId then
- if v[1] < Enum.HeroAttrType.STR_Percent then
- num = num + v[2]
- else
- num = num + v[2]*0.0001
- end
- end
- end
- end
- end
- end
- return num
- end
- function PartnerData:CalcAdvenceAttrs(fellowData, data, needRefresh, addAdvenceLv)
- for _,v in pairs(Enum.HeroAttrType) do
- local advencAttr = self:GetAdvenceAttrs(data, v, addAdvenceLv)
- if data.advanceLevel == lastTeamAdvenceLvs[data.id] then
- advencAttr = 0
- end
- if v >= Enum.HeroAttrType.Life and v <= Enum.HeroAttrType.RealHurt then
- -- fellowData:SetAdditionalAttr(v, fellowData:GetAdditionalAttr(v) + advencAttr)
- fellowData:SetAdditionalAttr(v, SDataUtil.Add(fellowData:GetAdditionalAttr(v), advencAttr))
- elseif v >= Enum.HeroAttrType.STR_Percent then
- -- fellowData:SetAdditionalAttrPercent(v, fellowData:GetAdditionalAttrPercent(v) + advencAttr)
- fellowData:SetAdditionalAttrPercent(v, SDataUtil.Add(fellowData:GetAdditionalAttrPercent(v), advencAttr))
- end
- end
- lastTeamAdvenceLvs[data.id] = data.advanceLevel
- if needRefresh then
- for _,v in pairs(Enum.HeroAttrType) do
- data.attrs[v] = fellowData:GetFinalAttr(v)
- end
- end
- end
- function PartnerData:CalcStrengthAttrs(fellowData, data, needRefresh, addStrengthLv)
- for _,v in pairs(Enum.HeroAttrType) do
- local strengthAttr = self:GetStrengthAttrs(data, v, addStrengthLv)
- if data.strengthLevel == lastTeamStrengthLvs[data.id] then
- strengthAttr = 0
- end
- if v >= Enum.HeroAttrType.Life and v <= Enum.HeroAttrType.RealHurt then
- -- fellowData:SetAdditionalAttr(v, fellowData:GetAdditionalAttr(v) + strengthAttr)
- fellowData:SetAdditionalAttr(v, SDataUtil.Add(fellowData:GetAdditionalAttr(v), strengthAttr))
- elseif v >= Enum.HeroAttrType.STR_Percent then
- -- fellowData:SetAdditionalAttrPercent(v, fellowData:GetAdditionalAttrPercent(v) + strengthAttr)
- fellowData:SetAdditionalAttrPercent(v, SDataUtil.Add(fellowData:GetAdditionalAttrPercent(v), strengthAttr))
- end
- end
- lastTeamStrengthLvs[data.id] = data.strengthLevel
- if needRefresh then
- for _,v in pairs(Enum.HeroAttrType) do
- data.attrs[v] = fellowData:GetFinalAttr(v)
- end
- end
- end
- function PartnerData:CalcEquipAttrs(fellowData, data, needRefresh)
- if data.slot ~= nil then
- local equipTotalAttrs = ManagerContainer.DataMgr.UserData:GetSlotsEquipAttr(data.slot.slot_list)
- for _,v in pairs(Enum.HeroAttrType) do
- if v >= Enum.HeroAttrType.Life and v <= Enum.HeroAttrType.MaxSp then
- fellowData:SetAdditionalAttr(v, SDataUtil.Add(fellowData:GetAdditionalAttr(v),equipTotalAttrs[v] - (lastTeamEquipAttrs[data.id] == nil and 0 or lastTeamEquipAttrs[data.id][v])))
- elseif v >= Enum.HeroAttrType.STR_Percent then
- fellowData:SetAdditionalAttrPercent(v, SDataUtil.Add(fellowData:GetAdditionalAttrPercent(v), equipTotalAttrs[v] - (lastTeamEquipAttrs[data.id] == nil and 0 or lastTeamEquipAttrs[data.id][v])))
- end
- end
- lastTeamEquipAttrs[data.id] = equipTotalAttrs
- else
- for _,v in pairs(Enum.HeroAttrType) do
- if v >= Enum.HeroAttrType.Life and v <= Enum.HeroAttrType.MaxSp then
- fellowData:SetAdditionalAttr(v, fellowData:GetAdditionalAttr(v))
- elseif v >= Enum.HeroAttrType.STR_Percent then
- fellowData:SetAdditionalAttrPercent(v, fellowData:GetAdditionalAttrPercent(v))
- end
- end
- end
- if needRefresh then
- for _,v in pairs(Enum.HeroAttrType) do
- data.attrs[v] = fellowData:GetFinalAttr(v)
- end
- end
- end
- function PartnerData:CalcCardAttrs(fellowData, data, needRefresh)
- if data.slot ~= nil then
- --ManagerContainer.DataMgr.CardData:RefreshEquipedCardSuitData(data.id)
- local cardTotalAttrs = ManagerContainer.DataMgr.UserData:GetSlotsCardAttr(data.slot.slot_list)
- local state = ManagerContainer.DataMgr.CardData:GetCardSuitStateById(data.id)
- if state then
- local lv = ManagerContainer.DataMgr.CardData:GetCardSuitLvById(data.id)
- if lv > 0 then
- local suitCfgData = ManagerContainer.CfgMgr:GetCardSuitNewCfgById(lv)
- if suitCfgData then
- for i = 1, #suitCfgData.Suit1 do
- local attr = suitCfgData.Suit1[i]
- if attr then
- local attrId = attr[1]
- local attrNum = attr[2]*0.0001
- local mapAttrData = ManagerContainer.CfgMgr:GetFightCfgByAttrId(attrId)
- local newAttrId = mapAttrData.Mapping > 0 and mapAttrData.Mapping or attrId
- if not cardTotalAttrs[newAttrId] then
- cardTotalAttrs[newAttrId] = 0
- end
- if mapAttrData.Mapping > 0 then
- cardTotalAttrs[newAttrId] = cardTotalAttrs[newAttrId] *(1 + attrNum)
- else
- cardTotalAttrs[newAttrId] = cardTotalAttrs[newAttrId] + attrNum
- end
- end
- end
- end
- end
- end
- for _,v in pairs(Enum.HeroAttrType) do
- if cardTotalAttrs[v] ~= nil then
- if v < Enum.HeroAttrType.STR_Percent then
- local val = SDataUtil.Add(fellowData:GetAdditionalAttr(v), cardTotalAttrs[v] - (lastTeamCardAttrs[data.id] == nil and 0 or lastTeamCardAttrs[data.id][v]))
- fellowData:SetAdditionalAttr(v, val)
- else
- local val = SDataUtil.Add(fellowData:GetAdditionalAttrPercent(v), cardTotalAttrs[v] - (lastTeamCardAttrs[data.id] == nil and 0 or lastTeamCardAttrs[data.id][v]))
- fellowData:SetAdditionalAttrPercent(v, val)
- end
- end
- end
- lastTeamCardAttrs[data.id] = cardTotalAttrs
- end
- if needRefresh then
- for _,v in pairs(Enum.HeroAttrType) do
- data.attrs[v] = fellowData:GetFinalAttr(v)
- end
- end
- end
- function PartnerData:CalcAllPartnerFashionAttrs()
- for _,v in pairs(self.data.partnerData.heroDatas) do
- if v.owned then
- self:CalcPartnerFashionAttrsById(v.id)
- end
- end
- end
- function PartnerData:CalcPartnerFashionAttrsById(id)
- local data = self:GetPartnerDataByUniqueId(id)
- local fellowData = ManagerContainer.LuaActorDataMgr:GetFellowActorData(data.id,data.configId)
- if data and fellowData then
- self:CalcFashionAttrs(fellowData, data, true)
- end
- end
- function PartnerData:CalcFashionAttrs(fellowData, data, needRefresh)
- local partnerCfgData = ManagerContainer.CfgMgr:GetPartnerDataById(data.configId)
- if not partnerCfgData then return end
- if not lastTeamFashionAttrs[data.id] then
- lastTeamFashionAttrs[data.id] = {}
- end
- local jobType = partnerCfgData.JobType
- local fashionTotalAttrs = ManagerContainer.DataMgr.FashionData:GetFashionAllAttrsByJobType(jobType)
- if not fashionTotalAttrs then return end
- local changeNum = 0
- for _,v in pairs(Enum.HeroAttrType) do
- if fashionTotalAttrs[v] ~= nil then
- if v < Enum.HeroAttrType.STR_Percent then
- changeNum = (fashionTotalAttrs[v] - ((lastTeamFashionAttrs[data.id] == nil or not lastTeamFashionAttrs[data.id][v]) and 0 or lastTeamFashionAttrs[data.id][v]))
- if changeNum ~= 0 then
- -- local val = heroData:GetAdditionalAttr(v) + changeNum;
- local val = SDataUtil.Add(fellowData:GetAdditionalAttr(v), changeNum)
- fellowData:SetAdditionalAttr(v, val)
- end
- else
- changeNum = (fashionTotalAttrs[v] - ((lastTeamFashionAttrs[data.id] == nil or not lastTeamFashionAttrs[data.id][v]) and 0 or lastTeamFashionAttrs[data.id][v]))
- if changeNum ~= 0 then
- -- local val = heroData:GetAdditionalAttrPercent(v) + changeNum * 0.0001
- local val = SDataUtil.Add(fellowData:GetAdditionalAttrPercent(v), changeNum * 0.0001)
- fellowData:SetAdditionalAttrPercent(v, val)
- end
- end
- end
- end
- if needRefresh then
- for _,v in pairs(Enum.HeroAttrType) do
- data.attrs[v] = fellowData:GetFinalAttr(v)
- end
- end
- lastTeamFashionAttrs[data.id] = clone(fashionTotalAttrs)
- end
- function PartnerData:CalcPetAttrsById(id)
- local data = self:GetPartnerDataByUniqueId(id)
- local fellowData = ManagerContainer.LuaActorDataMgr:GetFellowActorData(data.id,data.configId)
- if data and fellowData then
- self:CalcPetAttrs(fellowData, data, true)
- end
- end
- function PartnerData:CalcPetAttrs(fellowData, data, needRefresh)
- if not AttrFilterList then
- local val = GlobalConfig.Instance:GetConfigStrValue(230)
- if val ~= "" and val ~= nil then
- AttrFilterList = CommonUtil.DeserializeGlobalStrToTable(val)
- end
- end
- if not lastTeamPetAttrs[data.id] then
- lastTeamPetAttrs[data.id] = {}
- end
- local petId = data.battlePetId
- local petData = ManagerContainer.DataMgr.PetDataMgr:GetPetDataById(petId)
- local multiply = 0
- if petData then
- local petCfgData = ManagerContainer.CfgMgr:GetPetDataById(petData.cfgId)
- multiply = petCfgData.ConversionRate*0.0001
- end
- local petActorData = ManagerContainer.DataMgr.PetDataMgr:GetPetActorData(petId)
- for _,v in pairs(Enum.HeroAttrType) do
- if not CommonUtil.EleInTable(tostring(v), AttrFilterList) then
- local petAttr = petActorData and SDataUtil.Multiply(petActorData:GetFinalAttr(v), multiply) or 0
- if v <= Enum.HeroAttrType.RealHurt then
- local eAttr = fellowData:GetAdditionalAttr(v)
- local lastAttr = lastTeamPetAttrs[data.id][v] or 0
- fellowData:SetAdditionalAttr(v, SDataUtil.Sub(SDataUtil.Add(eAttr,petAttr),lastAttr))
- elseif v >= Enum.HeroAttrType.STR_Percent then
- local eAttrPercent = fellowData:GetAdditionalAttrPercent(v)
- local lastAttr = lastTeamPetAttrs[data.id][v] or 0
- fellowData:SetAdditionalAttrPercent(v, SDataUtil.Sub(SDataUtil.Add(eAttrPercent,petAttr),lastAttr))
- end
- lastTeamPetAttrs[data.id][v] = petAttr
- end
- end
- if needRefresh then
- for _,v in pairs(Enum.HeroAttrType) do
- data.attrs[v] = fellowData:GetFinalAttr(v)
- end
- end
- end
- function PartnerData:CalcSkillAttrs(fellowData, data, needRefresh)
- local skillTotalAttrs = data.skillData and data.skillData:GetUnlockSkillAttrs() or {}
- local lastSkillAttrs = lastTeamSkillAttrs[data.id]
- local attrValue = nil
- local changeNum = nil
- local isChanged = false
- for _,v in pairs(Enum.HeroAttrType) do
- attrValue = skillTotalAttrs[v]
- if not attrValue then attrValue = 0 end
- changeNum = attrValue - ((lastSkillAttrs == nil or not lastSkillAttrs[v]) and 0 or lastSkillAttrs[v])
- if changeNum ~= 0 then
- if v < Enum.HeroAttrType.STR_Percent then
- -- local val = fellowData:GetAdditionalAttr(v) + changeNum
- local val = SDataUtil.Add(fellowData:GetAdditionalAttr(v),changeNum)
- fellowData:SetAdditionalAttr(v, val)
- else
- -- local val = fellowData:GetAdditionalAttrPercent(v) + changeNum
- local val = SDataUtil.Add(fellowData:GetAdditionalAttrPercent(v),changeNum)
- fellowData:SetAdditionalAttrPercent(v, val)
- end
- isChanged = true
- end
- end
- if needRefresh then
- for _,v in pairs(Enum.HeroAttrType) do
- data.attrs[v] = fellowData:GetFinalAttr(v)
- end
- end
- lastTeamSkillAttrs[data.id] = skillTotalAttrs
- if isChanged then
- attrDirty = true
- end
- return isChanged
- end
- function PartnerData:CalcKeepSakeAttrs(fellowData, data, needRefresh)
- local keepsakeMaps = ManagerContainer.DataMgr.KeepSakeBookData:GetKeepSakeMaps()
- local partnerCfgData = ManagerContainer.CfgMgr:GetPartnerDataById(data.configId)
- local addAttrs = {}
- for k,v in pairs(keepsakeMaps) do
- local cfgData = ManagerContainer.CfgMgr:GetKeepSakeCfgDataById(k)
- if cfgData and CommonUtil.EleInTable(partnerCfgData.JobType, cfgData.Job) then
- local attrs = cfgData["AddAttrLevel"..v]
- if attrs then
- for i = 1,#attrs do
- local attrId = attrs[i][1]
- local val1 = attrs[i][2]
- if not addAttrs[attrId] then
- addAttrs[attrId] = 0
- end
- addAttrs[attrId] = addAttrs[attrId] + (attrId > 21 and val1*0.0001 or val1)
- end
- end
- end
- end
- if not lastTeamKeepSakeAttrs[data.id] then
- lastTeamKeepSakeAttrs[data.id] = {}
- end
- for k,v in pairs(addAttrs) do
- if k <= Enum.HeroAttrType.RealHurt then
- local eAttr = fellowData:GetAdditionalAttr(k)
- local lastAttr = (lastTeamKeepSakeAttrs == nil and 0 or (lastTeamKeepSakeAttrs[data.id][k] or 0))
- fellowData:SetAdditionalAttr(k, SDataUtil.Sub(SDataUtil.Add(eAttr,v),lastAttr))
- elseif k >= Enum.HeroAttrType.STR_Percent then
- local eAttrPercent = fellowData:GetAdditionalAttrPercent(k)
- local lastAttr = (lastTeamKeepSakeAttrs == nil and 0 or (lastTeamKeepSakeAttrs[data.id][k] or 0))
- fellowData:SetAdditionalAttrPercent(k, SDataUtil.Sub(SDataUtil.Add(eAttrPercent,v),lastAttr))
- end
- end
- lastTeamKeepSakeAttrs[data.id] = addAttrs
- if needRefresh then
- for k,v in pairs(Enum.HeroAttrType) do
- data.attrs[v] = fellowData:GetFinalAttr(v)
- end
- end
- end
- function PartnerData:AddKeepSakeLvUpAttrs(keepsakeId, lv)
- if not lv then return end
- local cfgData = ManagerContainer.CfgMgr:GetKeepSakeCfgDataById(keepsakeId)
- local addAttrs = {}
- if cfgData then
- local attrs = cfgData["AddAttrLevel"..lv]
- if attrs then
- for i = 1,#attrs do
- local attrId = attrs[i][1]
- local val1 = attrs[i][2]
- if not addAttrs[attrId] then
- addAttrs[attrId] = 0
- end
- addAttrs[attrId] = addAttrs[attrId] + (attrId > 21 and val1*0.0001 or val1)
- end
- end
- if lv > 1 then
- attrs = cfgData["AddAttrLevel"..(lv - 1)]
- if attrs then
- for i = 1,#attrs do
- local attrId = attrs[i][1]
- local val1 = attrs[i][2]
- if not addAttrs[attrId] then
- addAttrs[attrId] = 0
- end
- addAttrs[attrId] = addAttrs[attrId] - (attrId > 21 and val1*0.0001 or val1)
- end
- end
- end
- else
- return
- end
- for i = 2, 6 do
- local fellowData = self:GetPartnerDataByUniqueId(i)
- if fellowData and fellowData.owned then
- local fellowActorData = ManagerContainer.LuaActorDataMgr:GetFellowActorData(fellowData.id,fellowData.configId)
- local partnerCfgData = ManagerContainer.CfgMgr:GetPartnerDataById(fellowData.configId)
- if CommonUtil.EleInTable(partnerCfgData.JobType, cfgData.Job) then
- for k,v in pairs(addAttrs) do
- if k <= Enum.HeroAttrType.RealHurt then
- local eAttr = fellowActorData:GetAdditionalAttr(k)
- lastTeamKeepSakeAttrs[i][k] = (lastTeamKeepSakeAttrs[i][k] or 0) + v
- fellowActorData:SetAdditionalAttr(k, SDataUtil.Add(eAttr,v))
- elseif k >= Enum.HeroAttrType.STR_Percent then
- local eAttrPercent = fellowActorData:GetAdditionalAttrPercent(k)
- lastTeamKeepSakeAttrs[i][k] = (lastTeamKeepSakeAttrs[i][k] or 0) + v
- fellowActorData:SetAdditionalAttrPercent(k, SDataUtil.Add(eAttrPercent,v))
- end
- end
- for k,v in pairs(addAttrs) do
- fellowData.attrs[k] = fellowActorData:GetFinalAttr(k)
- end
- end
- end
- end
- end
- function PartnerData:InitPartnerAttrById(id, addAdvenceLv, addStrengthLv)
- local data = self:GetPartnerDataByUniqueId(id)
- self:InitPartnerAttr(data, addAdvenceLv, addStrengthLv)
- end
- function PartnerData:InitPartnerAttr(data, addAdvenceLv, addStrengthLv)
- local fellowData = ManagerContainer.LuaActorDataMgr:GetFellowActorData(data.id,data.configId)
- fellowData.Level = data.baseLevel
- fellowData.StrengthLevel = data.strengthLevel
- lastTotalAttrs[data.id] = CommonUtil.TableClone(data.attrs)
- self:CalcSkillAttrs(fellowData, data, false)
- self:CalcAdvenceAttrs(fellowData, data, false, addAdvenceLv)
- self:CalcStrengthAttrs(fellowData, data, false, addStrengthLv)
- self:CalcEquipAttrs(fellowData, data, false)
- self:CalcCardAttrs(fellowData, data, false)
- self:CalcFashionAttrs(fellowData, data, false)
- self:CalcPetAttrs(fellowData, data, false)
- self:CalcKeepSakeAttrs(fellowData, data, true)
- ManagerContainer.LuaActorAttributeMgr:SyncServerActorData(fellowData)
- end
- function PartnerData:InitPartnerSkill(data, skill)
- local skillData = data.skillData
- if not skillData then
- skillData = SkillData:new()
- data.skillData = skillData
- end
- skillData:InitData(skill)
- end
- function PartnerData:SaveLastTotalAttr()
- for _,v in pairs(self.data.partnerData.heroDatas) do
- lastTotalAttrs[v.id] = CommonUtil.TableClone(v.attrs)
- end
- end
- function PartnerData:GetLastTotalAttrs(id)
- return lastTotalAttrs[id]
- end
- function PartnerData:GetPartnerDataBySlotIndex(id)
- for _, v in pairs(self.data.partnerData.heroDatas) do
- if v.id == id then
- return v
- end
- end
- return nil
- end
- function PartnerData:InitPartnerAttrFromBattle()
- for _, v in pairs(self.data.partnerData.heroDatas) do
- if v.owned then
- self:InitPartnerAttr(v)
- end
- --LogError(Inspect(v))
- end
- end
- function PartnerData:InitPartnerAttrById(id)
- for _, v in pairs(self.data.partnerData.heroDatas) do
- if v.id == id then
- self:InitPartnerAttr(v)
- return
- end
- end
- end
- function PartnerData:GetPartnerDatas()
- if self.data then
- if self.data.partnerData then
- return self.data.partnerData.heroDatas
- end
- end
- return nil
- end
- function PartnerData:SortPartnerData()
- local partnerDatas = self:GetPartnerDatas()
- local sortedPartnerDatas = {}
- for _,v in pairs(partnerDatas) do
- sortedPartnerDatas[#sortedPartnerDatas + 1] = v
- end
- table.sort(sortedPartnerDatas, function (a, b)
- if a.owned and b.owned then
- return a.post < b.post
- else
- if a.owned and not b.owned then
- return true
- elseif not a.owned and b.owned then
- return false
- else
- return a.post < b.post
- end
- end
- end)
- return sortedPartnerDatas
- end
- function PartnerData:GetOwnedPartnerCount()
- local count = 0
- for _, v in pairs(self.data.partnerData.heroDatas) do
- if v.owned then
- count = count + 1
- end
- end
- return count
- end
- function PartnerData:GetBattlePartnerDatas(userAttrsChanged, ignore)
- if not userAttrsChanged and not ignore then
- if not attrDirty then return nil end
- end
- local list = {}
- for _, v in pairs(self.data.partnerData.heroDatas) do
- if v.isBattle and v.owned then
- local index = ManagerContainer.DataMgr.UserData:GetSlotIndexByHeroId(v.id)
- local petId = v.battlePetId
- local petData = ManagerContainer.DataMgr.PetDataMgr:GetPetDataById(petId)
- local count = ManagerContainer.LuaActorDataMgr:GetFellowActorDataCountByUid(v.id)
- v.isTransferred = count > 1
-
- local data = {
- uid = v.id,
- id = v.configId,
- lv = v.baseLevel,
- advanceLevel = v.advanceLevel,
- -- skills = self:GetHeroUsedSkill(v),
- skills = v.skillData:GetUsedSkills(),
- buffs = ManagerContainer.DataMgr.UserData:GetCardBuffs(index),
- role = false,
- mainRole = false,
- isTransferred = v.isTransferred or false,
- petId = petId > 0 and petId + Enum.ActorUidField.Pet or 0,
- petBaseId = petData and petData.cfgId or 0,
- }
- list[#list + 1] = data
- --神器技能替换
- CommonUtil.ReplaceBattleSkillBySkillEquip(v, data.skills)
- lastTeamAdvenceLvs[v.id] = v.advanceLevel
- lastTeamStrengthLvs[v.id] = v.strengthLevel
- --lastTeamEquipAttrs[v.id] = lastTeamEquipAttrs[v.id]
- --lastTeamCardAttrs[v.id] = lastTeamCardAttrs[v.id]
- v.isTransferred = false
- end
- end
- attrDirty = false
- return list
- end
- function PartnerData:GetAllPartnerTeamDatas()
- local list = {}
- for _, v in pairs(self.data.partnerData.heroDatas) do
- if v.owned then
- local index = ManagerContainer.DataMgr.UserData:GetSlotIndexByHeroId(v.id)
- list[#list + 1] =
- {
- uid = v.id,
- id = v.configId,
- lv = v.baseLevel,
- advanceLevel = v.advanceLevel,
- skills = v.skillData:GetUsedSkills(),
- -- skills = self:GetHeroUsedSkill(v),
- buffs = ManagerContainer.DataMgr.UserData:GetCardBuffs(index)
- }
- end
- end
- return list
- end
- function PartnerData:GetPartnerDataById(id)
- for _,v in pairs(self.data.partnerData.heroDatas) do
- if v.configId == id then
- return v
- end
- end
- return nil
- end
- function PartnerData:GetPartnerDataByOriId(id)
- for _,v in pairs(self.data.partnerData.heroDatas) do
- local oriPartnerCfgId = ManagerContainer.CfgMgr:GetOriPartnerDataByAdvenceId(v.configId)
- if oriPartnerCfgId.ParterId == id then
- return v
- end
- end
- return nil
- end
- function PartnerData:GetPartnerDataByUniqueId(id)
- for _,v in pairs(self.data.partnerData.heroDatas) do
- if v.id == id then
- return v
- end
- end
- return nil
- end
- --出战角色获取
- function PartnerData:GetPartnersDataByInBattle()
- local tbBattlePartner = {}
- for _,v in pairs(self.data.partnerData.heroDatas) do
- if v.isBattle and v.owned then
- table.insert(tbBattlePartner,v)
- end
- end
- return tbBattlePartner
- end
- function PartnerData:PartnerDataChangeLv(id, lv)
- for _,v in pairs(self.data.partnerData.heroDatas) do
- if v.id == id then
- v.baseLevel = lv
- ManagerContainer.RedPointMgr.HeroRPCtr:PartnerLvUpNotify(v.id)
- ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.HERO_LV_CHANGED, id)
- ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.REFRESH_TRAIN_ATTRS)
- return
- end
- end
- end
- function PartnerData:PartnerDataChangeAdvencLv(id, lv)
- for _,v in pairs(self.data.partnerData.heroDatas) do
- if v.id == id then
- v.advanceLevel = lv
- ManagerContainer.RedPointMgr.HeroRPCtr:PartnerLvUpNotify(v.id)
- ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.ADVENCE_SUCCESS)
- return
- end
- end
- end
- function PartnerData:RegisterNetEvents()
- ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_ROLE_HERO_INFO_NTF, function(data)
- local addParterMap, battleStatus, needRpRefreshIds, changePetIds = self:RefreshPartnerDatas(data.hero_data)
- if #needRpRefreshIds > 0 then
- for _,v in pairs(needRpRefreshIds) do
- ManagerContainer.RedPointMgr.HeroRPCtr:PartnerRedPointNotifyById(v)
- end
- ManagerContainer.RedPointMgr.HeroRPCtr:RefreshRoleCardRP()
- end
- if battleStatus then
- battlePartnerChanged = true
- end
- if next(addParterMap) ~= nil then
- for k,v in pairs(addParterMap) do
- local id = v
- local heroData = self:GetPartnerDataByUniqueId(id)
- self:InitPartnerAttr(heroData)
- end
- ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.HERO_EQUIP_REFRESH)
- ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.MAIN_UI_ROLE_REDPOINT_NOTICE)
- ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_PARTER_ADD, addParterMap)
- end
- if battlePartnerChanged and partnerChangeTimer == nil then
- partnerChangeTimer = ManagerContainer.LuaTimerMgr:AddTimer(100, 1, self, self.SetTeamData, nil)
- end
- ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.HERO_LIST_CHANGE_NOTICE)
- ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.ROLE_UI_REDPOINT_CHANGE)
- ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.SKILL_EQUIP_RP_REFRESH)
- end)
- ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_HERO_LEVEL_UP_ACK, function(data)
- if data.error == Enum.NetErrorCode.ERROR_OK then
- self:PartnerDataChangeLv(data.hero_id, data.hero_level)
- ManagerContainer.RedPointMgr.HeroRPCtr:PartnerAttrRPNotify(data.hero_id)
- end
- end)
- ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_HERO_ADVANCE_ACK, function(data)
- if data.error == Enum.NetErrorCode.ERROR_OK then
- self:PartnerDataChangeAdvencLv(data.hero_id, data.advance_level)
- ManagerContainer.RedPointMgr.HeroRPCtr:PartnerAttrRPNotify(data.hero_id)
- end
- end)
- ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_HERO_BATTLE_ACK, function(data)
- if data.error == Enum.NetErrorCode.ERROR_OK then
- ManagerContainer.LuaBattleMgr:SetTeamData(true,true)
- ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.PARTNER_BATTLE_REQ_SUCCESS)
- end
- end)
- ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_HERO_STRENGTH_ACK, function(data)
- if data.error == Enum.NetErrorCode.ERROR_OK then
- ManagerContainer.RedPointMgr.HeroRPCtr:PartnerStrengthNotify(data.hero_id)
- ManagerContainer.RedPointMgr.HeroRPCtr:PartnerAttrRPNotify(data.hero_id)
- ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.PARTNER_STRENGTH_SUCCESS)
- end
- end)
- ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_HERO_ACTIVE_ACK, function(data)
- if data.error == Enum.NetErrorCode.ERROR_OK then
- ManagerContainer.LuaBattleMgr:SetTeamData(true,true)
- ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.PARTNER_ACTIVE_SUCCESS, data.hero_id)
- ManagerContainer.RedPointMgr.HeroRPCtr:PartnerRecruitNotify()
- end
- end)
- end
- function PartnerData:SetTeamData()
- if not ManagerContainer.LuaUIMgr:IsInRoleUI() then
- ManagerContainer.LuaBattleMgr:SetTeamData()
- end
- partnerChangeTimer = nil
- battlePartnerChanged = false
- end
- function PartnerData:Clear()
- if partnerChangeTimer ~= nil then
- ManagerContainer.LuaTimerMgr:RemoveTimer(partnerChangeTimer)
- partnerChangeTimer = nil
- end
- if self.data.partnerData and self.data.partnerData.heroDatas then
- for _,v in pairs(self.data.partnerData.heroDatas) do
- ManagerContainer.LuaActorDataMgr:DeleteActorDataById(v.id)
- end
- end
- needNtfTeamBattle = true
- attrDirty = false
- lastTeamPetAttrs = {}
- lastTeamEquipAttrs = {}
- lastTeamCardAttrs = {}
- lastTeamAdvenceLvs = {}
- lastTeamStrengthLvs = {}
- lastTeamPointAttrs = {}
- lastTeamBaseAttrs = {}
- lastTeamSkillAttrs = {}
- lastTotalAttrs = {}
- self.data = {}
- end
- function PartnerData:Destroy()
- if self.Clear then
- self:Clear()
- end
- self:UnRegisterNetEvents()
- end
- function PartnerData:UnRegisterNetEvents()
- --ManagerContainer.NetManager:UnRegisterPbNameCallback("SC_ROLE_HERO_INFO_NTF")
- --ManagerContainer.NetManager:UnRegisterPbNameCallback("SC_HERO_LEVEL_UP_ACK")
- --ManagerContainer.NetManager:UnRegisterPbNameCallback("SC_HERO_ADVANCE_ACK")
- --ManagerContainer.NetManager:UnRegisterPbNameCallback("CS_HERO_BATTLE_ACK")
- end
- -- function PartnerData:SetHeroSkills(hero)
- -- local dirty = false
- -- if hero.skills == nil then
- -- hero.skills = {}
- -- end
- -- local parternCfg = ManagerContainer.CfgMgr:GetPartnerDataById(hero.configId)
- -- if parternCfg == nil then
- -- return
- -- end
- -- local paternStepCfg = ManagerContainer.CfgMgr:GetParterProgressById(hero.configId)
- -- if paternStepCfg == nil then
- -- return
- -- end
- -- local openSkill = paternStepCfg.OpenSkill
- -- local initialSkillId = parternCfg.InitialSkill
- -- if initialSkillId > 0 then
- -- local lv,maxLv,nextPTLv = self:GetSkillLvInfo(paternStepCfg,hero.baseLevel,1)
- -- local skill = self:GetHeroSkillById(hero.skills,initialSkillId)
- -- if skill == nil then
- -- skill = SkillItem:new(initialSkillId,lv,true,0);
- -- skill.maxLevel = maxLv
- -- hero.skills[#hero.skills+1] = skill
- -- else
- -- if skill.level ~= lv then
- -- dirty = true
- -- end
-
- -- skill:SetLevel(lv)
- -- skill.maxLevel = maxLv
- -- end
- -- skill.nextLevelPartenrLv = nextPTLv
- -- end
- -- for i = 1, #openSkill do
- -- local skillId = openSkill[i]
- -- if skillId~= nil and skillId > 0 then
- -- local lv,maxLv,nextPTLv = self:GetSkillLvInfo(paternStepCfg,hero.baseLevel,i+1)
- -- local skill = self:GetHeroSkillById(hero.skills,skillId)
- -- local unlock = hero.advanceLevel >= i;
- -- if skill == nil then
- -- skill = SkillItem:new(skillId,lv,unlock,0);
- -- skill.maxLevel = maxLv
- -- hero.skills[#hero.skills+1] = skill
- -- else
- -- skill:SetLevel(lv)
- -- skill.maxLevel = maxLv
- -- end
- -- skill.nextLevelPartenrLv = nextPTLv
- -- if unlock then
- -- skill:Unlock()
- -- else
- -- skill.unlockCondition = i
- -- end
- -- end
- -- end
- -- if dirty then
- -- ManagerContainer.LuaBattleMgr:UpdateTeamSkills()
- -- end
- -- ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_PARTENR_SKILL_REFRESH,hero.configId)
- -- end
- -- function PartnerData:GetHeroSkillById(skillList,skillId)
- -- if skillList == nil then
- -- return nil
- -- end
- -- for idx =1,#skillList do
- -- local skill = skillList[idx]
- -- if skill.skillId == skillId then
- -- return skill
- -- end
- -- end
- -- return nil
- -- end
- function PartnerData:GetHeroUsedSkill(hero)
- if hero == nil or hero.skills == nil then
- return nil
- end
- local usedSkills = {}
- for i =1, #hero.skills do
- local skill = hero.skills[i]
- if skill.isUnlocked then
- usedSkills[#usedSkills+1] = {skillId = skill.skillId, lv = skill.level}
- end
- end
- return usedSkills
- end
- function PartnerData:GetSkillLvInfo(paternStepCfg,heroLv,skillIdx)
- if paternStepCfg == nil then
- return 1,1
- end
- if skillIdx > #paternStepCfg.SkillUp then
- return 1,1
- end
- local temp = paternStepCfg.SkillUp[skillIdx]
- if temp == nil then
- return 1,1
- end
- local lv = 1
- local maxLv = 1 + #temp
- local nextPTLv = heroLv
- for i = 1, #temp do
- if heroLv >= temp[i] then
- lv = lv + 1
- else
- nextPTLv = temp[i]
- break
- end
- end
- return lv, maxLv,nextPTLv
- end
- function PartnerData:GetHeroLv(id)
- local partnerData = self:GetPartnerDataByUniqueId(id)
- return partnerData and partnerData.baseLevel or 0
- end
- function PartnerData:GetHeroQuality(id)
- local partnerData = self:GetPartnerDataByUniqueId(id)
- return partnerData and partnerData.strengthLevel or 0
- end
- function PartnerData:GetHeroIsBattle(id)
- local partnerData = self:GetPartnerDataByUniqueId(id)
- return partnerData and partnerData.isBattle or false
- end
- function PartnerData:GetHeroCfgId(id)
- local partnerData = self:GetPartnerDataByUniqueId(id)
- return partnerData and partnerData.configId or 0
- end
- function PartnerData:GeSkillData(id)
- local partnerData = self:GetPartnerDataByUniqueId(id)
- return partnerData and partnerData.skillData or nil
- end
- function PartnerData:OnJobSkillDataChanged(id)
- local data = self:GetPartnerDataByUniqueId(id)
- if not data then return false end
- if not data.owned then return false end
- local fellowData = ManagerContainer.LuaActorDataMgr:GetFellowActorData(data.id,data.configId)
- fellowData.Level = data.baseLevel
- return self:CalcSkillAttrs(fellowData, data, true)
- end
- function PartnerData:GetLastBaseAttrs(id)
- return lastTeamBaseAttrs[id]
- end
- function PartnerData:GetRoleDataAttrPoints(id)
- for k,v in pairs(self.data.partnerData.heroDatas) do
- if v.id == id then
- return v.attrPoint
- end
- end
- return 0
- end
- function PartnerData:GetPointAttr(id, type)
- for k,v in pairs(self.data.partnerData.heroDatas) do
- if v.id == id and v.owned then
- for _,v1 in pairs(v.attrList) do
- if v1.key == type then
- return v1.value
- end
- end
- end
- end
- return 0
- end
- function PartnerData:UpdateHeroExtGoShowData(heroData)
- CommonUtil.UpdateHeroExtGoShowData(heroData)
- end
- return PartnerData
|