local HeroStar_Model = {} local private = {} local EventSystem = require('Event/EventSystem') local hero_oper_pb = require('Proto/hero_oper_pb') local resonance_info = require 'Proto/resonance_info_pb' function HeroStar_Model.OnStartup() NetManager.RegisterMsgCB(MessageEnums.MessageHeroBreakThrough, private.HeroBreakthroughResp) end --获取武将星级 function HeroStar_Model.GetHeroStarLevel(id) local heroInfo = MDL.HeroSelect.GetHeroInfo(id) return heroInfo and heroInfo.starLevel or 0 end --获取武将最大星级 function HeroStar_Model.GetHeroMaxStarLevel(id) local attrTypeId = MDL.HeroSelect.GetHeroLevelAttrID(id) local data = DataSheetManager.HeroLevelAttr:GetDataByLevelUpAttrTypeID(attrTypeId) return #data.Break_Table - 1 end --获取武将阶段等级 function HeroStar_Model.GetHeroStageLevel(id) local heroInfo = MDL.HeroSelect.GetHeroInfo(id) return heroInfo.starStage end --获取武将最大阶段 function HeroStar_Model.GetHeroMaxStageLevel(id) local heroStar = HeroStar_Model.GetHeroStarLevel(id) local heroStarData local heroWearAppearanceID = MDL.HeroSelect.GetAppearanceIDByHeroID(id) if heroWearAppearanceID and heroWearAppearanceID > 0 then local appearanceData = DataSheetManager.HeroAppearance:GetDataByID(heroWearAppearanceID) if appearanceData.Intelligence > 0 then heroStarData = DataSheetManager.HeroStarAppearance:GetDataByHeroAppearanceID_Star(heroWearAppearanceID, heroStar) else heroStarData = DataSheetManager.HeroStar:GetDataByHeroID_Star(id, heroStar) end else heroStarData = DataSheetManager.HeroStar:GetDataByHeroID_Star(id, heroStar) end return #heroStarData.Attr_Table end --获取武将星级对应的AttrId function HeroStar_Model.GetHeroStarAttrId(id) local heroStar = HeroStar_Model.GetHeroStarLevel(id) local heroStage = HeroStar_Model.GetHeroStageLevel(id) local heroStarData local heroWearAppearanceID = MDL.HeroSelect.GetAppearanceIDByHeroID(id) if heroWearAppearanceID and heroWearAppearanceID > 0 then local appearanceData = DataSheetManager.HeroAppearance:GetDataByID(heroWearAppearanceID) if appearanceData.Intelligence > 0 then heroStarData = DataSheetManager.HeroStarAppearance:GetDataByHeroAppearanceID_Star(heroWearAppearanceID, heroStar) else heroStarData = DataSheetManager.HeroStar:GetDataByHeroID_Star(id, heroStar) end else heroStarData = DataSheetManager.HeroStar:GetDataByHeroID_Star(id, heroStar) end return heroStarData.Attr_Table[heroStage + 1].AttrRepeat end --获取武将所需材料 function HeroStar_Model.GetHeroBreakthroughRequireItem(id) local heroStar = HeroStar_Model.GetHeroStarLevel(id) local heroStage = HeroStar_Model.GetHeroStageLevel(id) local heroStarData = DataSheetManager.HeroStar:GetDataByHeroID_Star(id, heroStar) local itemId = heroStarData.Item_Table[heroStage + 1].ItemRepeat local itemData = DataSheetManager.HeroStarItemRepeat:GetDataByItemRepeatID(itemId) return itemData.Item_Table end --获取武将升段属性 function HeroStar_Model.GetHeroCurrentStageUpAttr(id) local attrId = HeroStar_Model.GetHeroStarAttrId(id) local attrData = DataSheetManager.HeroStarAttrRepeat:GetDataByAttrRepeatID(attrId) local attrName = DataSheetManager.AttrData:GetDataByID(attrData.Attr_Table[1].AttrType).Name return {["AttrName"] = attrName,["AttrNum"] = attrData.Attr_Table[1].AttrNum} end --获取武将升段属性 function HeroStar_Model.GetHeroSpecificStageUpAttr(id, stageLevel) local heroStar = HeroStar_Model.GetHeroStarLevel(id) local heroStarData local heroWearAppearanceID = MDL.HeroSelect.GetAttrAppearanceIDByHeroID(id) if heroWearAppearanceID and heroWearAppearanceID > 0 then local appearanceData = DataSheetManager.HeroAppearance:GetDataByID(heroWearAppearanceID) if appearanceData.Intelligence > 0 then heroStarData = DataSheetManager.HeroStarAppearance:GetDataByHeroAppearanceID_Star(heroWearAppearanceID, heroStar) else heroStarData = DataSheetManager.HeroStar:GetDataByHeroID_Star(id, heroStar) end else heroStarData = DataSheetManager.HeroStar:GetDataByHeroID_Star(id, heroStar) end local attrId = heroStarData.Attr_Table[stageLevel].AttrRepeat local attrData = DataSheetManager.HeroStarAttrRepeat:GetDataByAttrRepeatID(attrId) local attrName = DataSheetManager.AttrData:GetDataByID(attrData.Attr_Table[1].AttrType).Name return {["AttrName"] = attrName,["AttrNum"] = attrData.Attr_Table[1].AttrNum} end function HeroStar_Model.GetHeroStarByTalentId(heroId, talentId) for i, v in DataSheetManager.HeroStar:GetDataByHeroID_Star(heroId) do if v.DevelopEffectID == talentId then return v.Star end end return 0 end function HeroStar_Model.ReplaceTableValue(table, oldValue, newValue) for k, v in pairs(table) do if v == oldValue then if newValue <= 0 then table[k] = nil end table[k] = newValue end end return table end function HeroStar_Model.GetCurrentDevelopEffectIdTableByHeroId(heroId) local heroStar = HeroStar_Model.GetHeroStarLevel(heroId) local developEffectTable = {} for i, v in DataSheetManager.HeroStar:GetDataByHeroID_Star(heroId) do --查找并替换相应的BUFFID if v.RemoveDevelopEffectID ~= 0 then if table.containValue(developEffectTable, v.RemoveDevelopEffectID) and v.Star > heroStar then break end developEffectTable = HeroStar_Model.ReplaceTableValue(developEffectTable, v.RemoveDevelopEffectID, v.DevelopEffectID) else --塞入新添加的BUFFID if v.DevelopEffectID ~= 0 then table.insert(developEffectTable, v.DevelopEffectID) end end end return developEffectTable end function HeroStar_Model.GetDevelopEffectIdTableByHeroId(heroId) local developEffectTable = {} for i, v in DataSheetManager.HeroStar:GetDataByHeroID_Star(heroId) do --塞入新添加的BUFFID if v.DevelopEffectID ~= 0 then table.insert(developEffectTable, v.DevelopEffectID) end --删除被替换的BUFFID if v.RemoveDevelopEffectID ~= 0 then table.removebyvalue(developEffectTable, v.RemoveDevelopEffectID) end end return developEffectTable end function HeroStar_Model.GetHeroTalentLevel(heroId, talentId) for index, talentData in DataSheetManager.HeroStarSkill:GetDataByHeroID_TalentSkillID(heroId) do for i, v in ipairs(talentData.DevelopEffectID) do if v == talentId then return i end end end logging.error(LTAG.ERROR, "没有在英雄Id:", heroId, " 的天赋中找到ID:", talentId, " 的天赋!请策划检查!!!") return 0 end function HeroStar_Model.GetHeroTalentDataByTalentId(heroId, talentId) for index, talentData in DataSheetManager.HeroStarSkill:GetDataByHeroID_TalentSkillID(heroId) do for i, v in ipairs(talentData.DevelopEffectID) do if v == talentId then return talentData end end end logging.error(LTAG.ERROR, "没有在英雄:", heroId, " 的HeroStarSkill表中找到Id:", talentId, " 的天赋!请策划检查!!!") end function HeroStar_Model.GetTalentNameAndDesc(talentId) local developEffectData = DataSheetManager.DevelopEffectData:GetDataByID(talentId) local buffData = DataSheetManager.BuffData:GetDataByBuffID(developEffectData.BuffIDs[1]) local name = UIUtils.GetLocalizedTxt(Const_IDS[buffData.BuffName]) local desc = UTL.String.FormatCombineTextByID(buffData.BuffDescribe) --BuffManager.BuffDescribeSplice(buffData.BuffDescribe, buffData.BuffFormula) return name, desc end --*****协议处理***** function HeroStar_Model.HeroBreakthroughRequest(id) local msg = hero_oper_pb.HeroBreakThroughReq() msg.HeroId = id NetManager.SendMessage(MessageEnums.MessageHeroBreakThrough, msg) end function private.HeroBreakthroughResp(msgResp) if msgResp.Resp.Code == 0 then MDL.FormationResonance.SetSubResonanceOprType(resonance_info.Hero_Break) EventSystem.Dispatch(EventID.UI_HeroBreak_Breakthrough, msgResp.HeroId) EventSystem.Dispatch(EventID.UI_HeroShow_UpdateHeroShow) end end --*****END协议处理***** return HeroStar_Model