local HeroStrenthen_Model = {} local private = {} local EventSystem = require('Event/EventSystem') local hero_pb = require("Proto/hero_pb") local strengthen_pb = require("Proto/strengthen_pb") HeroStrenthen_Model.NurturingType = { Power = hero_pb.Power, -- 力 Physical = hero_pb.Physical, -- 体 Skill = hero_pb.Skill, -- 技 } function HeroStrenthen_Model.OnStartup() NetManager.RegisterMsgCB(MessageEnums.MessageStriveStrengthen, private.StriveStrengthenResp) NetManager.RegisterMsgCB(MessageEnums.MessageBreakStrengthen, private.BreakStrengthenResp) private.breakStrengthenHeroId = 0 end ---------- start 协议相关 start ---------- -- 修炼协议 function HeroStrenthen_Model.StriveStrengthenReq(heroId, nurturingType) -- 判断消耗材料是否充足 local curLevel = HeroStrenthen_Model.GetStrengthenLevel(heroId) local nurturingData = HeroStrenthen_Model.GetStrenthenNurturingData(heroId, nurturingType, curLevel) for _, item in ipairs(nurturingData.Item_Table) do local count = MDL.Bag.GetItemCount(item.ItemID) if count < item.ItemNum then CTL.Tips.AddTipsMsg(Const_IDS.IDS_HeroStar_NotEngouh) return end end local msg = strengthen_pb.StriveStrengthenReq() msg.HeroID = heroId msg.NType = nurturingType NetManager.SendMessage(MessageEnums.MessageStriveStrengthen, msg) end function private.StriveStrengthenResp(msg) end -- 修炼突破 function HeroStrenthen_Model.BreakStrengthenReq(heroId) local curLevel = HeroStrenthen_Model.GetStrengthenLevel(heroId) -- 判断武将突破 local nextStrenthenData = HeroStrenthen_Model.GetHeroStrenthenData(heroId, curLevel + 1) local starLevel = MDL.HeroStar.GetHeroStarLevel(heroId) if starLevel < nextStrenthenData.HeroStarLimit then CTL.Tips.AddTipsMsg(string.FormatByIdsId(Const_IDS.IDS_HeroStrenthen_EvolveLimit, nextStrenthenData.HeroStarLimit)) return end -- 判断消耗材料是否充足 local strenthenData = HeroStrenthen_Model.GetHeroStrenthenData(heroId, curLevel) for _, item in ipairs(strenthenData.Item_Table) do local count = MDL.Bag.GetItemCount(item.ItemID) if count < item.ItemNum then CTL.Tips.AddTipsMsg(Const_IDS.IDS_HeroStar_NotEngouh) return end end local msg = strengthen_pb.BreakStrengthenReq() msg.HeroID = heroId private.breakStrengthenHeroId = heroId NetManager.SendMessage(MessageEnums.MessageBreakStrengthen, msg) end function private.BreakStrengthenResp(msg) if msg.Resp.Code == 0 then UIManager.OpenView(Const_UI_Lua.UIEnum.UIHeroStrenthenSuccess, {heroId = private.breakStrengthenHeroId}) end end ------------ end 协议相关 end ------------ -- 获取修炼等级 function HeroStrenthen_Model.GetStrengthenLevel(heroId) local heroInfo = MDL.HeroSelect.GetHeroInfo(heroId) if heroInfo then return heroInfo.StrengthenInfo.StrengthenLevel else return nil end end -- 获取力、体、技的服务器数据 function HeroStrenthen_Model.GetStrenthenNurturingNum(heroId, nurturingType) local heroInfo = MDL.HeroSelect.GetHeroInfo(heroId) if heroInfo then for i, v in ipairs(heroInfo.StrengthenInfo.NurturingInfos) do if v.NType == nurturingType then return v.Num end end return 0 else return 0 end end -- 获取力、体、技的对应等级的本地数据 function HeroStrenthen_Model.GetStrenthenNurturingData(heroId, nurturingType, level) if level < 0 then return nil end local heroStrenthenData = HeroStrenthen_Model.GetHeroStrenthenData(heroId, level) if heroStrenthenData then if nurturingType == HeroStrenthen_Model.NurturingType.Power then if heroStrenthenData.StrenthenAttrID1 and heroStrenthenData.StrenthenAttrID1>0 then return DataSheetManager.StrenthenAttr:GetDataByID(heroStrenthenData.StrenthenAttrID1) end elseif nurturingType == HeroStrenthen_Model.NurturingType.Physical then if heroStrenthenData.StrenthenAttrID2 and heroStrenthenData.StrenthenAttrID2>0 then return DataSheetManager.StrenthenAttr:GetDataByID(heroStrenthenData.StrenthenAttrID2) end elseif nurturingType == HeroStrenthen_Model.NurturingType.Skill then if heroStrenthenData.StrenthenAttrID3 and heroStrenthenData.StrenthenAttrID3>0 then return DataSheetManager.StrenthenAttr:GetDataByID(heroStrenthenData.StrenthenAttrID3) end end end return nil end -- 获取当前修炼等级数据 function HeroStrenthen_Model.GetHeroStrenthenData(heroId, level) if level < 0 then return nil end local heroStrenthenID = private.GetStrenthenID(heroId) local isSuccess, cfgData = DataSheetManager.HeroStrenthen:TryGetDataByStrenthenID_StrentheneLevel(heroStrenthenID, level) return cfgData end -- 当前修炼等级是否已经是最高等级 function HeroStrenthen_Model.IsReachMaxStrengthenLevel(heroId) local curLevel = HeroStrenthen_Model.GetStrengthenLevel(heroId) local nextLevelData = HeroStrenthen_Model.GetHeroStrenthenData(heroId, curLevel + 1) if nextLevelData then return false else return true end end -- 获取激活时对应类型的属性 function HeroStrenthen_Model.GetActivateAttrNumByType(heroId, attrType) local heroStrenthenID = private.GetStrenthenID(heroId) local heroStrenthenData = DataSheetManager.HeroStrenthen:GetDataByStrenthenID_StrentheneLevel(heroStrenthenID, 1) for _, attrData in ipairs(heroStrenthenData.FirstAttr_Table) do if attrData.FirstAttrType == attrType then return attrData.FirstAttrNum end end return 0 end -- 获取英雄对应的模板ID function private.GetStrenthenID(heroId) local heroStrenthenID = 0 local curAttrAppearanceId = MDL.HeroSelect.GetAttrAppearanceIDByHeroID(heroId) if curAttrAppearanceId > 0 then heroStrenthenID = DataSheetManager.HeroAppearance:GetDataByID(curAttrAppearanceId).HeroStrenthenAttrReplace end if heroStrenthenID == 0 then heroStrenthenID = DataSheetManager.HeroNum:GetDataByID(heroId).HeroStrenthenID end return heroStrenthenID end return HeroStrenthen_Model