local FormationResonance_Model = {} local private = {} local resonance = require 'Proto/resonance_pb' local resonance_info = require 'Proto/resonance_info_pb' local EventSystem = require('Event/EventSystem') function FormationResonance_Model.OnStartup() private.amountScore = 0 private.mainResonanceLevel = 0 private.subResonanceDict = {} private.resonanceOprType = -1 private.lastUpdateSubType = -1 private.isDelayShow = false private.delayShowData = { mainResonanceParams = nil, subResonanceParams = nil } private.subResonanceList = LuaExt.CreateTable(DataSheetManager.ResonanceChildManage:GetDataCount(), 0) for i, v in DataSheetManager.ResonanceChildManage:GetEnumerator() do table.insert(private.subResonanceList, v) end table.sort(private.subResonanceList, private.SortSubResonanceList) NetManager.RegisterMsgCB(MessageEnums.MessageResonanceLevelUp, private.ResponseResonanceLevelUp) end function FormationResonance_Model.OnShutdown() private.subResonanceList = nil private.subResonanceDict = nil private.delayShowData = nil end ----------------------------- 协议处理 ------------------------------ function FormationResonance_Model.RequestResonanceLevelUp() local msg = resonance.ResonanceLevelUpReq() NetManager.SendMessage(MessageEnums.MessageResonanceLevelUp, msg) end function private.ResponseResonanceLevelUp() end --------------------------------------------------------------------- -------------------------------- 缓存 ------------------------------- function FormationResonance_Model.SetResonanceInfo(info, isFromPlayerChange) -- logging.error(LTAG.ERROR, info) if not info then return end if info.score and info.score ~= 0 then private.amountScore = info.score end if info.level and info.level ~= 0 then if isFromPlayerChange and private.mainResonanceLevel < info.level then -- 主共鸣升级提示 if not private.isDelayShow then UIManager.CloseView(Const_UI_Lua.UIEnum.UIMedelLevelUp) UIManager.OpenView(Const_UI_Lua.UIEnum.UIMedelLevelUp, info) else private.delayShowData.mainResonanceParams = info end end private.mainResonanceLevel = info.level end if info.subSys and #info.subSys > 0 then for _, sub in ipairs (info.subSys) do local oldSub = private.subResonanceDict[sub.subType] if isFromPlayerChange and oldSub and oldSub.level < sub.level then -- 记录当前子共鸣升级的类型 private.lastUpdateSubType = sub.subType end private.subResonanceDict[sub.subType] = sub end end if private.lastUpdateSubType ~= -1 and private.resonanceOprType == -1 then -- 有子共鸣升级并且不存在需要弹出特定弹窗情况下 直接显示子共鸣升级提示 if not private.isDelayShow then UIManager.CloseView(Const_UI_Lua.UIEnum.UIResonanceLevelUp) if BattleDataGetter.IsTownLevel() then UIManager.OpenView(Const_UI_Lua.UIEnum.UIResonanceLevelUp, private.subResonanceDict[private.lastUpdateSubType]) else --战斗内不能直接弹,需要返回主城再弹 CTL.HomeMain.AddTownHomeDelayView(Const_UI_Lua.UIEnum.UIResonanceLevelUp, private.subResonanceDict[private.lastUpdateSubType]) end else private.delayShowData.subResonanceParams = private.subResonanceDict[private.lastUpdateSubType] end end EventSystem.Dispatch(EventID.UI_ResonanceChange_Refresh) end function FormationResonance_Model.OpenDelayResonanceShow() private.delayShowData.mainResonanceParams = nil private.delayShowData.subResonanceParams = nil private.isDelayShow = true end function FormationResonance_Model.CloseDelayResonanceShow() if private.delayShowData.mainResonanceParams then UIManager.CloseView(Const_UI_Lua.UIEnum.UIMedelLevelUp) UIManager.OpenView(Const_UI_Lua.UIEnum.UIMedelLevelUp, private.delayShowData.mainResonanceParams) private.delayShowData.mainResonanceParams = nil end if private.delayShowData.subResonanceParams then UIManager.CloseView(Const_UI_Lua.UIEnum.UIResonanceLevelUp) UIManager.OpenView(Const_UI_Lua.UIEnum.UIResonanceLevelUp, private.delayShowData.subResonanceParams) private.delayShowData.subResonanceParams = nil end private.isDelayShow = false end function FormationResonance_Model.GetLastUpdateSubType() return private.lastUpdateSubType end function FormationResonance_Model.ResetLastUpdateSubType() private.lastUpdateSubType = -1 end function FormationResonance_Model.SetSubResonanceOprType(oprType) private.resonanceOprType = oprType end function FormationResonance_Model.GetSubResonanceOprType() local oprType = private.resonanceOprType private.resonanceOprType = -1 return oprType end function FormationResonance_Model.GetAmountScore() return private.amountScore end function FormationResonance_Model.GetMainResonanceLevel() return private.mainResonanceLevel end function FormationResonance_Model.GetSubResonanceInfo(subType) if not subType then return nil end return private.subResonanceDict[subType] end function FormationResonance_Model.GetSubResonanceLv(subType) if not subType then return 0 end local subInfo = private.subResonanceDict[subType] if not subInfo then return 0 end return subInfo.level end --------------------------------------------------------------------- -------------------------------- 表结构 ------------------------------ function FormationResonance_Model.GetSubResonanceList() return private.subResonanceList end function FormationResonance_Model.GetSubResonanceCfg(id) if not id then return nil end return DataSheetManager.ResonanceChildManage:GetDataByResonanceChildID(id) end function private.SortSubResonanceList(a, b) return a.Weight > b.Weight end function FormationResonance_Model.GetSubResonanceInfoCfg(typeId, levelId) if not typeId or levelId<=0 then return nil end local isSuccess, dataCfg if typeId == resonance_info.Equip_Enhance then isSuccess, dataCfg = DataSheetManager.ResonanceEquipEnhance:TryGetDataByEquipEnhanceLevel(levelId) elseif typeId == resonance_info.Equip_Quality then isSuccess, dataCfg = DataSheetManager.ResonanceEquipQuality:TryGetDataByEquipQualityLevel(levelId) elseif typeId == resonance_info.Hero_Advance then isSuccess, dataCfg = DataSheetManager.ResonanceHeroAdv:TryGetDataByHeroLevel(levelId) elseif typeId == resonance_info.Hero_Break then isSuccess, dataCfg = DataSheetManager.ResonanceHeroStar:TryGetDataByHeroStarLevel(levelId) elseif typeId == resonance_info.Hero_Level then isSuccess, dataCfg = DataSheetManager.ResonanceHeroLevel:TryGetDataByHeroLevel(levelId) elseif typeId == resonance_info.Horse_Break then isSuccess, dataCfg = DataSheetManager.ResonanceHorseStar:TryGetDataByHorseStarLevel(levelId) elseif typeId == resonance_info.Weapon_Break then isSuccess, dataCfg = DataSheetManager.ResonanceMagicWeaponStar:TryGetDataByMagicWeaponStarLevel(levelId) elseif typeId == resonance_info.Jade_Insert then isSuccess, dataCfg = DataSheetManager.ResonanceJade:TryGetDataByJadeLevel(levelId) elseif typeId == resonance_info.Treasure_Break then isSuccess, dataCfg = DataSheetManager.ResonanceTreasureStar:TryGetDataByTreasureStarLevel(levelId) elseif typeId == resonance_info.Treasure_Soul then isSuccess, dataCfg = DataSheetManager.ResonanceSoul:TryGetDataBySoulLevel(levelId) elseif typeId == resonance_info.Weapon_Foundry then isSuccess, dataCfg = DataSheetManager.ResonanceMagicWeaponFoundry:TryGetDataByMagicWeaponFoundryLevel(levelId) elseif typeId == resonance_info.Stratagem_Resonance then isSuccess, dataCfg = DataSheetManager.ResonanceStratagem:TryGetDataByStratagemLevel(levelId) elseif typeId == resonance_info.Horse_Soul then isSuccess, dataCfg = DataSheetManager.ResonanceHorseSoulQuality:TryGetDataByHorseSoulQualityLevel(levelId) elseif typeId == resonance_info.GodBeast_Break then isSuccess, dataCfg = DataSheetManager.ResonanceGodBeast:TryGetDataByGodBeastLevel(levelId) elseif typeId == resonance_info.GodBeast_Raise then isSuccess, dataCfg = DataSheetManager.ResonanceGodBeastLevel:TryGetDataByGodBeastLevel(levelId) elseif typeId == resonance_info.Horse_Equip then isSuccess, dataCfg = DataSheetManager.ResonanceHorseEquipQuality:TryGetDataByEquipQualityLevel(levelId) end return dataCfg end function FormationResonance_Model.IsCanLevelupMainResonance() local curScore = FormationResonance_Model.GetAmountScore() local __, cfg = DataSheetManager.ResonanceAll:TryGetDataByResonanceLevel(private.mainResonanceLevel + 1) if cfg then local curItemCount = cfg.ItemID ~= 0 and MDL.Bag.GetItemCount(cfg.ItemID) or -1 local isCanLevelup = curScore >= cfg.NeedScore and (curItemCount == -1 or curItemCount >= cfg.ItemNum) return isCanLevelup, curScore, curItemCount end return false, curScore, -1 end --------------------------------------------------------------------- return FormationResonance_Model