using System; using System.Collections.Generic; using TableConfig; using Snxxz.UI; public class WindowJumpMgr : Singleton { private FuncConfigConfig funcOpenBagItem = null; public WindowJumpMgr() { IsJumpState = false; funcOpenBagItem = Config.Instance.Get("OpenBagItem"); StageManager.Instance.onStartStageLoadingEvent += ClearCurRecord; GlobalTimeEvent.Instance.secondEvent += SecondRefresh; } private Window preWin = null; private WindowSearchConfig _tagWinSearchModel; private FuncOpenLVConfig _tagOpenLvModel; private Dictionary> openWindows = new Dictionary>(); private Dictionary jumpWinNameDict = new Dictionary(); PlayerPetDatas m_petModel; PlayerPetDatas petmodel { get { return m_petModel ?? (m_petModel = ModelCenter.Instance.GetModel()); } } PlayerDeadModel _deadModel; PlayerDeadModel DeadModel { get { return _deadModel ?? (_deadModel = ModelCenter.Instance.GetModel()); } } TreasureModel treasureModel { get { return ModelCenter.Instance.GetModel(); } } DungeonModel dungeonModel { get { return ModelCenter.Instance.GetModel(); } } PlayerPetDatas petModel { get { return ModelCenter.Instance.GetModel(); } } PlayerMountDatas mountModel { get { return ModelCenter.Instance.GetModel(); } } TreasureFindHostModel hostModel { get { return ModelCenter.Instance.GetModel(); } } FairyModel fairyModel { get { return ModelCenter.Instance.GetModel(); } } DailyQuestModel dailyQuestModel { get { return ModelCenter.Instance.GetModel(); } } TrialDungeonModel trialDungeonModel { get { return ModelCenter.Instance.GetModel(); } } public bool IsJumpState { get; private set;} private int jumpPhase = 0; public void GetPreAllOpenWin() { jumpPhase += 1; var windowKeys = WindowCenter.Instance.GetAll(); for (int i = 0; i < windowKeys.Count; i++) { var key = windowKeys[i]; if (WindowCenter.Instance.CheckOpen(key) && key != "NewBieWin") { if (!openWindows.ContainsKey(jumpPhase)) { List list = new List(); list.Add(key); openWindows.Add(jumpPhase, list); } else { openWindows[jumpPhase].Add(key); } } } IsJumpState = true; } private void ClearCurRecord(int mapId) { IsJumpState = false; jumpPhase = 0; openWindows.Clear(); jumpWinNameDict.Clear(); WindowCenter.Instance.jumpWindowCloseEvent -= CloseWindow; } public void WindowJumpTo(JumpUIType jumpType) { _tagWinSearchModel = Config.Instance.Get((int)jumpType); if (_tagWinSearchModel == null) { return; } if (!FuncOpen.Instance.IsFuncOpen(_tagWinSearchModel.Lv) && _tagWinSearchModel.Lv != 0) { FuncOpen.Instance.ProcessorFuncErrorTip(_tagWinSearchModel.Lv); return; } switch (jumpType) { case JumpUIType.UnionFunc1: case JumpUIType.UnionFunc2: case JumpUIType.UnionWarehouse: case JumpUIType.UnionHall: case JumpUIType.UnionMethod: case JumpUIType.UnionTask: case JumpUIType.UnionTask2: case JumpUIType.UnionActive1: case JumpUIType.UnionActive2: if (!PlayerDatas.Instance.fairyData.HasFairy) { SysNotifyMgr.Instance.ShowTip("DailyQuestwinUnionLimit"); return; } break; case JumpUIType.UnionStore: if(!fairyModel.fairyStoreOpen) { fairyModel.ProcessErrorTip(); return; } break; case JumpUIType.OpenServerActivityFunc2_1: case JumpUIType.OpenServerActivityFunc2_2: if(TimeUtility.OpenDay >= ModelCenter.Instance.GetModel().openDays) { SysNotifyMgr.Instance.ShowTip("ActiveOutTime"); return; } break; case JumpUIType.TreasureFindHostFunc1: case JumpUIType.TreasureFindHostFunc2: case JumpUIType.TreasureFindHostFunc3: case JumpUIType.TreasureFindHostFunc1Type2: case JumpUIType.TreasureFindHostFunc2Type2: case JumpUIType.TreasureFindHostFunc3Type2: bool isUnlock = hostModel.IsUnlockTreasure(int.Parse(_tagWinSearchModel.SelectActive)); if(!isUnlock) { hostModel.jumpTreasureId = 0; return; } break; case JumpUIType.OpenServerGift: if(!ModelCenter.Instance.GetModel().activate) { if (PlayerDatas.Instance.baseData.coinPointTotal <= 0 || !ModelCenter.Instance.GetModel().firstChargeRewardGet) { SysNotifyMgr.Instance.ShowTip("GiftNoOpen"); } else { SysNotifyMgr.Instance.ShowTip("GiftAlreadyBuy"); } return; } break; case JumpUIType.FirstRecharge: var model = ModelCenter.Instance.GetModel(); if (model.firstChargeRewardGet) { model.AreadyGetFirstRecharge(); return; } break; case JumpUIType.OpenServerMountRank: case JumpUIType.OpenServerRank: var _model = ModelCenter.Instance.GetModel(); if (TimeUtility.OpenDay >= _model.openServerActivityDays) { SysNotifyMgr.Instance.ShowTip("ActiveOutTime"); return; } break; case JumpUIType.XMZZBattle: case JumpUIType.AncientBattle: case JumpUIType.IceCrystal: case JumpUIType.FairyLand: DailyQuestConfig dailyConfig = Config.Instance.Get(_tagWinSearchModel.SelectActive); if (dailyQuestModel.GetQuestState(dailyConfig.ID) != DailyQuestModel.DailyQuestState.Normal) { SysNotifyMgr.Instance.ShowTip("FBIsNotOpen"); return; } break; case JumpUIType.PlotTaskFunc3: var taskmodel = ModelCenter.Instance.GetModel(); if (taskmodel.SideQuestsDic.Count < 1) { SysNotifyMgr.Instance.ShowTip("SideQuest_None"); return; } break; case JumpUIType.FaBaoSoul_BenYuan: case JumpUIType.FaBaoSoul_FengMo: case JumpUIType.FaBaoSoul_Strength: case JumpUIType.FaBaoSoul_Rune: case JumpUIType.FaBaoSoul_Mount: case JumpUIType.FaBaoSoul_Pet: case JumpUIType.FaBaoSoul_Boss: case JumpUIType.FaBaoSoul_Wings: case JumpUIType.FaBaoSoul_Suit: case JumpUIType.FaBaoSoul_Wash: var soulId = 0; if (int.TryParse(_tagWinSearchModel.SelectActive, out soulId)) { var treasureModel = ModelCenter.Instance.GetModel(); Treasure treasure; treasureModel.TryGetTreasure(soulId, out treasure); if (treasure == null || treasure.state != TreasureState.Collected) { return; } } else { return; } break; case JumpUIType.ConsumreRebate: OperationBase operationBaseConsumre; if (!OperationTimeHepler.Instance.TryGetOperationTime(Operation.ConsumeRebate, out operationBaseConsumre)) { OperationTimeHepler.Instance.ProcessConditionError(Operation.ConsumeRebate); return; } if (!operationBaseConsumre.SatisfyOpenCondition() || !operationBaseConsumre.InTime(TimeUtility.ServerNow)) { OperationTimeHepler.Instance.ProcessConditionError(Operation.ConsumeRebate); return; } break; case JumpUIType.BossReborn: OperationBase operationBaseBoss; if (!OperationTimeHepler.Instance.TryGetOperationTime(Operation.BossReborn, out operationBaseBoss)) { OperationTimeHepler.Instance.ProcessConditionError(Operation.BossReborn); return; } if (!operationBaseBoss.SatisfyOpenCondition() || !operationBaseBoss.InTime(TimeUtility.ServerNow)) { OperationTimeHepler.Instance.ProcessConditionError(Operation.BossReborn); return; } break; case JumpUIType.LimitedTimePackage: OperationBase operationBaseLimitTime; if (!OperationTimeHepler.Instance.TryGetOperationTime(Operation.GiftPackage, out operationBaseLimitTime)) { OperationTimeHepler.Instance.ProcessConditionError(Operation.GiftPackage); return; } if (!operationBaseLimitTime.SatisfyOpenCondition() || !operationBaseLimitTime.InTime(TimeUtility.ServerNow)) { OperationTimeHepler.Instance.ProcessConditionError(Operation.GiftPackage); return; } break; case JumpUIType.OSTimeLimitGift: if (!OpenServerActivityCenter.Instance.IsActivityOpen(3)) { SysNotifyMgr.Instance.ShowTip("ActiveOutTime"); return; } break; case JumpUIType.FlashSale: OperationBase operationBaseFlash; if (!OperationTimeHepler.Instance.TryGetOperationTime(Operation.FlashSale, out operationBaseFlash)) { OperationTimeHepler.Instance.ProcessConditionError(Operation.FlashSale); return; } if (!operationBaseFlash.SatisfyOpenCondition() || !operationBaseFlash.InTime(TimeUtility.ServerNow)) { OperationTimeHepler.Instance.ProcessConditionError(Operation.FlashSale); return; } break; case JumpUIType.TrialExchange: if (!trialDungeonModel.CompleteTrialFloor(0)) { trialDungeonModel.ProcessOpenTrialExchangeError(); return; } break; } DebugEx.Log("WindowJumpTo" + jumpType); GetPreAllOpenWin(); #region 条件判段 switch (jumpType) { case JumpUIType.RoleFunc1: case JumpUIType.RoleFunc2: case JumpUIType.RoleFunc3: case JumpUIType.RoleFunc4: SetJumpLogic(_tagWinSearchModel.TABID); break; case JumpUIType.KnapSackFunc1: case JumpUIType.KnapSackFunc2: case JumpUIType.KnapSackFunc3: case JumpUIType.KnapSackFunc4: case JumpUIType.KnapSackFunc5: case JumpUIType.KnapSackFunc1Type2: SetJumpLogic(_tagWinSearchModel.TABID); break; case JumpUIType.SkillFunc1: case JumpUIType.SkillFunc2: case JumpUIType.SkillFunc3: SetJumpLogic(_tagWinSearchModel.TABID); break; case JumpUIType.StrengthFunc1: case JumpUIType.StrengthFunc2: case JumpUIType.StrengthFunc3: case JumpUIType.StrengthFunc4: case JumpUIType.StrengthFunc5: case JumpUIType.StrengthFunc1Type2: SetJumpLogic(_tagWinSearchModel.TABID); break; case JumpUIType.ComposeFunc1: case JumpUIType.ComposeFunc2: case JumpUIType.ComposeFunc3: case JumpUIType.ComposeFunc4: case JumpUIType.ComposeFunc5: case JumpUIType.TicketCompose1: case JumpUIType.TicketCompose2: SetJumpLogic(_tagWinSearchModel.TABID); break; case JumpUIType.RuneFunc1: case JumpUIType.RuneFunc2: case JumpUIType.RuneFunc3: case JumpUIType.RuneFunc4: SetJumpLogic(_tagWinSearchModel.TABID); break; case JumpUIType.UnionStore: SetJumpLogic(_tagWinSearchModel.TABID); break; case JumpUIType.UnionFunc1: case JumpUIType.UnionFunc2: case JumpUIType.UnionFunc3: case JumpUIType.UnionFunc4: case JumpUIType.UnionFunc5: SetJumpLogic(_tagWinSearchModel.TABID); break; case JumpUIType.PetFunc1: case JumpUIType.PetFunc2: SetJumpLogic(_tagWinSearchModel.TABID); break; case JumpUIType.PetStone: if(PackSendQuestMgr.Instance.useItemModel != null) { petModel.PetStoneItemId = PackSendQuestMgr.Instance.useItemModel.itemId; } SetJumpLogic(_tagWinSearchModel.TABID); break; case JumpUIType.Treasure: SetJumpLogic(_tagWinSearchModel.TABID); break; case JumpUIType.WorldChat: ChatCtrl.Inst.presentChatType = ChatInfoType.World; SetJumpLogic(_tagWinSearchModel.TABID); break; case JumpUIType.PrivateChat: ChatCtrl.Inst.presentChatType = ChatInfoType.Friend; SetJumpLogic(_tagWinSearchModel.TABID); break; case JumpUIType.DailyQuestFunc1: case JumpUIType.DailyQuestFunc2: case JumpUIType.DailyQuestFunc3: SetJumpLogic(_tagWinSearchModel.TABID); break; case JumpUIType.RoleTitle: SetJumpLogic(_tagWinSearchModel.TABID); break; case JumpUIType.RealmFunc1: SetJumpLogic(_tagWinSearchModel.TABID); break; case JumpUIType.RolePoint: //SetJumpLogic(_tagWinSearchModel.TABID); break; case JumpUIType.MainTask: PlayerTaskDatas taskDatas = ModelCenter.Instance.GetModel(); taskDatas.AutomaticTripToTask(taskDatas.currentMission); SetJumpLogic(_tagWinSearchModel.TABID); break; case JumpUIType.BigMap: SetJumpLogic(_tagWinSearchModel.TABID); break; case JumpUIType.WorldMap: SetJumpLogic(_tagWinSearchModel.TABID); break; case JumpUIType.MountStone: if (PackSendQuestMgr.Instance.useItemModel != null) { mountModel.MountStoneItemId = PackSendQuestMgr.Instance.useItemModel.itemId; } SetJumpLogic(_tagWinSearchModel.TABID); break; case JumpUIType.MountSkill: SetJumpLogic(_tagWinSearchModel.TABID); break; case JumpUIType.MountAppearance: SetJumpLogic(_tagWinSearchModel.TABID); break; case JumpUIType.IceCrystal: GotoNormalDungeon((int)DailyQuestType.IceCrystal); break; case JumpUIType.FairyLand: GotoNormalDungeon((int)DailyQuestType.FairyLand); break; case JumpUIType.Daily_Kirin: case JumpUIType.Daily_BountyMission: case JumpUIType.Daily_IceCrystal: case JumpUIType.Daily_Trial: case JumpUIType.Daily_FairyLand: case JumpUIType.Daily_GuardSky: case JumpUIType.Daily_Demon: case JumpUIType.Daily_ElderGodArea: case JumpUIType.Daily_AncientBattleGround: case JumpUIType.Daily_EmperorRelic: case JumpUIType.Daily_FairyTask: var dailyQuestId = 0; int.TryParse(_tagWinSearchModel.SelectActive, out dailyQuestId); dailyQuestModel.currentDailyQuest = dailyQuestId; SetJumpLogic(_tagWinSearchModel.TABID); break; case JumpUIType.AncientBattle: GotoNormalDungeon((int)DailyQuestType.AncientBattleGround, dungeonModel.GetBelongToLine((int)DailyQuestType.AncientBattleGround)); break; case JumpUIType.XMZZBattle: GotoHeavenBattleDungeon((int)DailyQuestType.HeavenBattle); break; case JumpUIType.GridExtend: SetJumpLogic(_tagWinSearchModel.TABID); break; case JumpUIType.StoreFunc1: case JumpUIType.StoreFunc2: case JumpUIType.StoreFunc3: case JumpUIType.StoreFunc4: case JumpUIType.StoreFunc5: SetJumpLogic(_tagWinSearchModel.TABID); break; case JumpUIType.VipRechargeFunc1: case JumpUIType.VipRechargeFunc2: case JumpUIType.VipRechargeFunc4: case JumpUIType.VipRechargeFunc5: if (VersionConfig.Get().isBanShu) { SysNotifyMgr.Instance.ShowTip("FuncNoOpen_VIP"); break; } SetJumpLogic(_tagWinSearchModel.TABID); break; case JumpUIType.VipRechargeVip2: case JumpUIType.VipRechargeVip3: case JumpUIType.VipRechargeVip4: case JumpUIType.VipRechargeVip5: case JumpUIType.VipRechargeVip6: case JumpUIType.VipRechargeVip7: case JumpUIType.VipRechargeVip8: case JumpUIType.VipRechargeVip9: case JumpUIType.VipRechargeVip10: case JumpUIType.VipRechargeVip1: if (VersionConfig.Get().isBanShu) { SysNotifyMgr.Instance.ShowTip("FuncNoOpen_VIP"); break; } var _vipLv = 1; if (int.TryParse(_tagWinSearchModel.SelectActive, out _vipLv)) { ModelCenter.Instance.GetModel().gotoVipLv = _vipLv; } SetJumpLogic(_tagWinSearchModel.TABID); break; case JumpUIType.PlotTaskFunc3: SetJumpLogic(_tagWinSearchModel.TABID); break; case JumpUIType.FindPreciousFrameFunc1: case JumpUIType.FindPreciousFrameFunc2: case JumpUIType.FindPreciousFrameFunc3: case JumpUIType.FindPreciousFrameFunc4: case JumpUIType.FindPreciousFrameFunc5: case JumpUIType.FindPreciousFrameFunc2Type2: case JumpUIType.FindPreciousFrameFunc4Type2: SetJumpLogic(_tagWinSearchModel.TABID); break; case JumpUIType.LootPreciousFrameFunc1: SetJumpLogic(_tagWinSearchModel.TABID); break; case JumpUIType.LootPreciousFrameSpec: DemonJarWin.guideChallenge =true; SetJumpLogic(_tagWinSearchModel.TABID); break; case JumpUIType.MarketFunc1: case JumpUIType.MarketFunc2: case JumpUIType.MarketFunc3: SetJumpLogic(_tagWinSearchModel.TABID); break; case JumpUIType.BlastFurnaceFunc1: SetJumpLogic(_tagWinSearchModel.TABID); break; case JumpUIType.VipExperience: SetJumpLogic(_tagWinSearchModel.TABID); break; case JumpUIType.RuneTower: SetJumpLogic(_tagWinSearchModel.TABID); break; case JumpUIType.RuneTowerSpec: RuneTowerWin.guideChallenge = true; SetJumpLogic(_tagWinSearchModel.TABID); break; case JumpUIType.WelfareFunc1: case JumpUIType.WelfareFunc2: case JumpUIType.WelfareFunc3: case JumpUIType.WelfareFunc2Type2: case JumpUIType.VipRechargeFunc3: SetJumpLogic(_tagWinSearchModel.TABID); break; case JumpUIType.SystemSettingFunc1: SetJumpLogic(_tagWinSearchModel.TABID); break; case JumpUIType.RebornOpenBag: SetJumpLogic(_tagWinSearchModel.TABID); break; case JumpUIType.RebornOpenAddPoint: //SetJumpLogic(_tagWinSearchModel.TABID); break; case JumpUIType.RebornOpenHourse: SetJumpLogic(_tagWinSearchModel.TABID); break; case JumpUIType.RebornOpenStrength: SetJumpLogic(_tagWinSearchModel.TABID); break; case JumpUIType.RebornOpenPet: SetJumpLogic(_tagWinSearchModel.TABID); break; case JumpUIType.BountyInterface: SetJumpLogic(_tagWinSearchModel.TABID); break; case JumpUIType.RedPacket: SetJumpLogic(_tagWinSearchModel.TABID); break; case JumpUIType.TreasureFunc1: case JumpUIType.Type1TreasureFunc1: treasureModel.currentCategory = TreasureCategory.Human; SetJumpLogic(); break; case JumpUIType.TreasureFunc2: case JumpUIType.Type1TreasureFunc2: treasureModel.currentCategory = TreasureCategory.Demon; SetJumpLogic(); break; case JumpUIType.TreasureFunc3: case JumpUIType.Type1TreasureFunc3: treasureModel.currentCategory = TreasureCategory.Fairy; treasureModel.treasureGotoId = int.Parse(_tagWinSearchModel.SelectActive); SetJumpLogic(); break; case JumpUIType.UnionWarehouse: SetJumpLogic(_tagWinSearchModel.TABID); break; case JumpUIType.UnionHall: SetJumpLogic(_tagWinSearchModel.TABID); break; case JumpUIType.UnionMethod: SetJumpLogic(_tagWinSearchModel.TABID); break; case JumpUIType.UnionTask: case JumpUIType.UnionTask2: SetJumpLogic(_tagWinSearchModel.TABID); break; case JumpUIType.OpenServerActivityFunc2_1: case JumpUIType.OpenServerActivityFunc2_2: ModelCenter.Instance.GetModel().JumpType = int.Parse(_tagWinSearchModel.SelectActive) + 1; SetJumpLogic(_tagWinSearchModel.TABID); break; case JumpUIType.UnionActive1: case JumpUIType.UnionActive2: SetJumpLogic(_tagWinSearchModel.TABID); break; case JumpUIType.RealmPractice1: case JumpUIType.RealmPractice2: SetJumpLogic(_tagWinSearchModel.TABID); break; case JumpUIType.AddFriend1: case JumpUIType.AddFriend2: ModelCenter.Instance.GetModel().OnSendCA9A3_tagCGQueryRecommendFriends(); SetJumpLogic(_tagWinSearchModel.TABID); break; case JumpUIType.UnionChat1: case JumpUIType.UnionChat2: ChatCtrl.Inst.presentChatType =(ChatInfoType)(int.Parse(_tagWinSearchModel.SelectActive) - 1); SetJumpLogic(_tagWinSearchModel.TABID); break; case JumpUIType.MakeDrug: if (PackSendQuestMgr.Instance.useItemModel != null) { RoleElixirTipWin.makeUseId = PackSendQuestMgr.Instance.useItemModel.itemId; } SetJumpLogic(_tagWinSearchModel.TABID); break; case JumpUIType.TreasureFindHostFunc1: case JumpUIType.TreasureFindHostFunc2: case JumpUIType.TreasureFindHostFunc3: case JumpUIType.TreasureFindHostFunc1Type2: case JumpUIType.TreasureFindHostFunc2Type2: case JumpUIType.TreasureFindHostFunc3Type2: SetJumpLogic(_tagWinSearchModel.TABID); break; case JumpUIType.Alchemyrescripte104: case JumpUIType.Alchemyrescripte105: ModelCenter.Instance.GetModel().jumpToPrescripe =int.Parse(_tagWinSearchModel.SelectActive); SetJumpLogic(_tagWinSearchModel.TABID); break; case JumpUIType.OpenServerMountRank: ModelCenter.Instance.GetModel().gotoImpactRankType =int.Parse(_tagWinSearchModel.SelectActive); SetJumpLogic(_tagWinSearchModel.TABID); break; case JumpUIType.OpenServerRank: SetJumpLogic(_tagWinSearchModel.TABID); break; case JumpUIType.AttackMagicianType1: case JumpUIType.AttackMagicianType2: ModelCenter.Instance.GetModel().gotoType = int.Parse(_tagWinSearchModel.SelectActive); SetJumpLogic(_tagWinSearchModel.TABID); break; case JumpUIType.TreasureSoul: SetJumpLogic(_tagWinSearchModel.TABID); break; case JumpUIType.OSTimeLimitGift: case JumpUIType.FlashSale: case JumpUIType.ConsumreRebate: case JumpUIType.BossReborn: case JumpUIType.OpenServerGift: case JumpUIType.LimitedTimePackage: SetJumpLogic(_tagWinSearchModel.TABID); break; case JumpUIType.BestXB: case JumpUIType.RuneXB: case JumpUIType.XBStore: case JumpUIType.XBWarehouse: case JumpUIType.BestXBType2: case JumpUIType.RuneXBType2: case JumpUIType.XBStoreType2: case JumpUIType.XBWarehouseType2: SetJumpLogic(_tagWinSearchModel.TABID); break; case JumpUIType.TrialExchange: SetJumpLogic(_tagWinSearchModel.TABID); break; case JumpUIType.ComposeTicketFairy: case JumpUIType.ComposeTicketGod: case JumpUIType.ComposeTicketIce: var composeModel = ModelCenter.Instance.GetModel(); int[] composeTypelist = ConfigParse.GetMultipleStr(_tagWinSearchModel.SelectActive); composeModel.SetJumpToModel((ComposeFuncType)_tagWinSearchModel.TABID +1,composeTypelist[0], composeTypelist[1]); SetJumpLogic(_tagWinSearchModel.TABID); break; case JumpUIType.TrialDungeonSelect: GotoTrialDungeon((int)DailyQuestType.Trial); break; case JumpUIType.TrialDungeonSelect1: case JumpUIType.TrialDungeonSelect2: case JumpUIType.TrialDungeonSelect3: int[] dungeonInfos = ConfigParse.GetMultipleStr(_tagWinSearchModel.SelectActive); Dungeon dungeon = new Dungeon(dungeonInfos[0], dungeonInfos[1]); dungeonModel.selectedTrialDungeon = dungeon; SetJumpLogic(_tagWinSearchModel.TABID); break; case JumpUIType.FaBaoSoul_BenYuan: case JumpUIType.FaBaoSoul_FengMo: case JumpUIType.FaBaoSoul_Strength: case JumpUIType.FaBaoSoul_Rune: case JumpUIType.FaBaoSoul_Mount: case JumpUIType.FaBaoSoul_Pet: case JumpUIType.FaBaoSoul_Boss: case JumpUIType.FaBaoSoul_Wings: case JumpUIType.FaBaoSoul_Suit: case JumpUIType.FaBaoSoul_Wash: var soulId = 0; if (int.TryParse(_tagWinSearchModel.SelectActive, out soulId)) { ModelCenter.Instance.GetModel().gotoSoul = soulId; } SetJumpLogic(_tagWinSearchModel.TABID); break; case JumpUIType.XianBaguaIntr: case JumpUIType.XyjJs: case JumpUIType.BGLJS: case JumpUIType.LFZJS: case JumpUIType.YLJJS: case JumpUIType.SBXZJS: case JumpUIType.KLJJS: case JumpUIType.TJYJS: case JumpUIType.LLBT: treasureModel.currentCategory = TreasureCategory.Fairy; treasureModel.selectedTreasure = int.Parse(_tagWinSearchModel.SelectActive); SetJumpLogic(_tagWinSearchModel.TABID); break; case JumpUIType.FYZJTyp1: case JumpUIType.FYZJTyp2: case JumpUIType.SHLTyp1: case JumpUIType.SHLTyp2: treasureModel.currentCategory = TreasureCategory.Demon; treasureModel.selectedTreasure = int.Parse(_tagWinSearchModel.SelectActive); SetJumpLogic(_tagWinSearchModel.TABID); break; case JumpUIType.DhszTs: case JumpUIType.HyqTs: case JumpUIType.GyzTs: case JumpUIType.LqhTs: case JumpUIType.PlyTs: case JumpUIType.XhqTs: case JumpUIType.DhzTs: case JumpUIType.ZjhlTs: case JumpUIType.YldTs: case JumpUIType.StfTs: treasureModel.currentCategory = TreasureCategory.Human; treasureModel.selectedTreasure = int.Parse(_tagWinSearchModel.SelectActive); SetJumpLogic(_tagWinSearchModel.TABID); break; case JumpUIType.FirstRecharge: SetJumpLogic(_tagWinSearchModel.TABID, true); break; default: DebugEx.Log("未添加此跳转界面:"+ jumpType); IsJumpState = false; openWindows.Clear(); jumpWinNameDict.Clear(); jumpPhase = 0; break; } #endregion } private void GotoNormalDungeon(int _dailyQuestId, int _lineId = 0) { var config = Config.Instance.Get(_dailyQuestId); dungeonModel.currentDungeon = new Dungeon(config.RelatedID, _lineId); SetJumpLogic(); } private void GotoHeavenBattleDungeon(int _dailyQuestId, int _lineId = 0) { var config = Config.Instance.Get(_dailyQuestId); dungeonModel.currentDungeon = new Dungeon(config.RelatedID, _lineId); SetJumpLogic(); } private void GotoTrialDungeon(int _dailyQuestId, int _lineId = 0) { var config = Config.Instance.Get(_dailyQuestId); dungeonModel.currentDungeon = new Dungeon(config.RelatedID, _lineId); SetJumpLogic(); } private void GotoMultipleDifficultyDungeon(int _dailyQuestId) { var config = Config.Instance.Get(_dailyQuestId); dungeonModel.currentDungeon = new Dungeon(config.RelatedID, 0); dungeonModel.selectedKylinDungeon = default(Dungeon); SetJumpLogic(); } private void SetJumpLogic(int _functionalOrder = 0, bool _forceSync = true) where T : Window { string curOpenWin = typeof(T).Name; jumpWinNameDict.Add(jumpPhase,curOpenWin); switch (_tagWinSearchModel.Type) { case 1: WindowCenter.Instance.CloseAll(WindowCenter.CloseAllIgnoreType.SystemAndCustom); WindowCenter.Instance.Open(_forceSync, _functionalOrder); WindowCenter.Instance.jumpWindowCloseEvent += CloseWindow; break; case 2: WindowCenter.Instance.CloseAll(WindowCenter.CloseAllIgnoreType.SystemAndCustom); WindowCenter.Instance.Open(_forceSync, _functionalOrder); WindowCenter.Instance.jumpWindowCloseEvent += CloseWindow; break; case 3: WindowCenter.Instance.CloseAll(WindowCenter.CloseAllIgnoreType.SystemAndCustom); WindowCenter.Instance.Open(_forceSync, _functionalOrder); WindowCenter.Instance.jumpWindowCloseEvent += CloseWindow; break; case 4: WindowCenter.Instance.CloseAll(WindowCenter.CloseAllIgnoreType.SystemAndCustom); WindowCenter.Instance.Open(_forceSync, _functionalOrder); WindowCenter.Instance.jumpWindowCloseEvent += CloseWindow; break; case 5: WindowCenter.Instance.Open(_forceSync, _functionalOrder); WindowCenter.Instance.jumpWindowCloseEvent += CloseWindow; break; default: DebugEx.LogError("不存在此界面跳转类型" + _tagWinSearchModel.Type); break; } } private void CloseWindow(Window obj) { DebugEx.Log("CloseWindow:" + obj + "跳转阶段:" + jumpPhase); if (!jumpWinNameDict.ContainsKey(jumpPhase)) return; if (jumpWinNameDict[jumpPhase] != obj.name) { return; } DebugEx.Log("关闭界面类型:" + _tagWinSearchModel.Type); WindowCenter.Instance.jumpWindowCloseEvent -= CloseWindow; int i = 0; List openWinlist = null; switch (_tagWinSearchModel.Type) { case 1: case 4: openWinlist = openWindows[jumpPhase]; WindowCenter.Instance.CloseAll(WindowCenter.CloseAllIgnoreType.SystemAndCustom); for (i = 0; i < openWinlist.Count; i++) { Window window = WindowCenter.Instance.Get(openWinlist[i]); switch (window.name) { case "RebornWin": if (DeadModel.playerIsDie) { if (!WindowCenter.Instance.CheckOpen(openWinlist[i])) { WindowCenter.Instance.Get(openWinlist[i]).Open(); } } break; case "ReliveWin": if (DeadModel.playerIsDie) { if (!WindowCenter.Instance.CheckOpen(openWinlist[i])) { WindowCenter.Instance.Get(openWinlist[i]).Open(); } } break; case "ElderGodAreaExitWin": if (DeadModel.playerIsDie) { if (!WindowCenter.Instance.CheckOpen(openWinlist[i])) { WindowCenter.Instance.Get(openWinlist[i]).Open(); } } break; default: if (!WindowCenter.Instance.CheckOpen(openWinlist[i])) { WindowCenter.Instance.Get(openWinlist[i]).Open(); } break; } } jumpWinNameDict.Remove(jumpPhase); jumpPhase -= 1; break; case 2: openWinlist = openWindows[1]; WindowCenter.Instance.CloseAll(WindowCenter.CloseAllIgnoreType.SystemAndCustom); if (!WindowCenter.Instance.CheckOpen()) { WindowCenter.Instance.Open(); } for (i = 0; i < openWinlist.Count; i++) { Window window = WindowCenter.Instance.Get(openWinlist[i]); if(window != null && window.windowInfo.windowType == WindowType.Base) { if(!WindowCenter.Instance.CheckOpen(openWinlist[i])) { WindowCenter.Instance.Get(openWinlist[i]).Open(); } } else { switch(window.name) { case "RebornWin": if(SettingEffectMgr.Instance.isPlayerDie) { if (!WindowCenter.Instance.CheckOpen(openWinlist[i])) { WindowCenter.Instance.Get(openWinlist[i]).Open(); } } break; case "ReliveWin": if (SettingEffectMgr.Instance.isPlayerDie) { if (!WindowCenter.Instance.CheckOpen(openWinlist[i])) { WindowCenter.Instance.Get(openWinlist[i]).Open(); } } break; case "ElderGodAreaExitWin": if (SettingEffectMgr.Instance.isPlayerDie) { if (!WindowCenter.Instance.CheckOpen(openWinlist[i])) { WindowCenter.Instance.Get(openWinlist[i]).Open(); } } break; } } } jumpPhase = 0; break; case 3: jumpPhase = 0; break; case 5: obj.gameObject.SetActive(false); jumpWinNameDict.Remove(jumpPhase); jumpPhase -= 1; break; default: DebugEx.LogError("不存在此界面跳转类型" + _tagWinSearchModel.Type); break; } if(jumpPhase <= 0) { openWindows.Clear(); IsJumpState = false; jumpWinNameDict.Clear(); if(DeadModel.playerIsDie) { DeadModel.PlayerDie(PlayerDatas.Instance.baseData.PlayerID); } } } private void SecondRefresh() { if (DeadModel.playerIsDie && WindowCenter.Instance.CheckOpen()) { if(!WindowCenter.Instance.CheckOpen() && !WindowCenter.Instance.CheckOpen() && !WindowCenter.Instance.CheckOpen() && !WindowCenter.Instance.CheckOpen()) { ClearJumpData(); DeadModel.PlayerDie(PlayerDatas.Instance.baseData.PlayerID); } } } public void ClearJumpData() { if (!IsJumpState) return; jumpPhase = 0; openWindows.Clear(); IsJumpState = false; foreach(var key in jumpWinNameDict.Keys) { WindowCenter.Instance.jumpWindowCloseEvent -= CloseWindow; } jumpWinNameDict.Clear(); //Regex regex = new Regex(@"[^\d](\d{3})[^\d]", RegexOptions.Singleline); //Match curMatch = regex.Match("4**(abc)?789Y0649"); } } /// /// 规则是每个系统对应标签页顺序 /// public enum JumpUIType { None = 0, RoleFunc1 = 1, RoleFunc2 = 2, RoleFunc3 = 3, RoleFunc4 = 4, KnapSackFunc1 = 5, KnapSackFunc2 = 6, KnapSackFunc3 = 7, KnapSackFunc4 = 8, SkillFunc1 = 9, SkillFunc2 = 10, SkillFunc3 = 11, StrengthFunc1 = 12, StrengthFunc2 = 13, StrengthFunc3 = 14, StrengthFunc4 = 15, StrengthFunc5 = 16, ComposeFunc1 = 17, ComposeFunc2 = 18, ComposeFunc3 = 19, ComposeFunc4 = 20, ComposeFunc5 = 21, RuneFunc1 = 22, RuneFunc2 = 23, RuneFunc3 = 24, RuneFunc4 = 25, UnionStore = 26, UnionFunc1 = 27, UnionFunc2 = 28, UnionFunc3 = 29, UnionFunc4 = 30, UnionFunc5 = 31, PetFunc1 = 32, PetFunc2 = 33, PetStone = 34, Treasure = 35, WorldChat = 38, PrivateChat = 39, BountyInterface=40,//赏金界面 DailyQuestFunc1 = 44, DailyQuestFunc2 = 45, DailyQuestFunc3 = 46, RoleTitle = 47, //角色称号 RealmFunc1 = 48, //境界 RolePoint = 49, MainTask = 56, //主线任务 BigMap = 61, //大地图界面 WorldMap = 62, //世界地图 MountStone = 65, MountSkill = 66, MountAppearance = 67, IceCrystal = 69, //冰晶矿脉 FairyLand = 70, //仙界秘境 GridExtend = 71, StoreFunc1 = 72, StoreFunc2 = 73, StoreFunc3 = 74, StoreFunc4 = 75, StoreFunc5 = 76, VipRechargeFunc1 = 77, VipRechargeFunc2 = 78, VipRechargeFunc3 = 79,//仙玉投资 VipRechargeFunc4 = 80, VipRechargeFunc5 = 81, FindPreciousFrameFunc1 = 82, FindPreciousFrameFunc2 = 83, FindPreciousFrameFunc3 = 84, FindPreciousFrameFunc4 = 85, FindPreciousFrameFunc5 = 86, MarketFunc1 = 87, MarketFunc2 = 88, MarketFunc3 = 89, BlastFurnaceFunc1 = 92, VipExperience = 98, RuneTower = 99,//符印塔 WelfareFunc1 = 102, //签到 WelfareFunc2 = 103, //祈愿 LootPreciousFrameFunc1 = 104, //封魔坛 SystemSettingFunc1 = 109,//挂机设置 RebornOpenBag = 113,//死亡复活打开背包 RebornOpenAddPoint = 114,//死亡复活打开加点 RebornOpenHourse = 115,//死亡复活打开坐骑 RebornOpenStrength = 116,//死亡复活打开强化 RebornOpenPet = 117,//死亡复活打开灵宠 RedPacket=118,//红包 TreasureFunc1 = 119, //入世法宝 TreasureFunc2 = 120, //本源法宝 Type1TreasureFunc1 = 121, //入世法宝 Type1TreasureFunc2 = 122, //本源法宝 UnionWarehouse = 123, //仙盟宝库界面 UnionHall = 124,//仙盟大厅界面 UnionMethod = 125, //仙盟心法界面 UnionTask = 126, //仙盟任务界面 TreasureFunc3 = 127, //天赐法宝(弃用) RealmPractice1 = 128, //境界修行 RealmPractice2 = 129, //境界修行 UnionActive1 = 130, //仙盟活跃 UnionActive2 = 131, //仙盟活跃 AddFriend1 = 132, //添加好友 AddFriend2 = 133, //添加好友 UnionChat1 = 134, //仙盟频道 UnionChat2 = 135, //仙盟频道 TicketCompose1 = 136, //冰晶矿脉门票合成 TicketCompose2 = 137, //古神禁地 MakeDrug = 138, //丹药使用 XianBaguaIntr = 139, //仙族法宝八卦炉介绍界面 UnionTask2 = 140, //仙盟任务界面回到主界面 OpenServerActivityFunc2_1 =141, //活动发红包 OpenServerActivityFunc2_2 = 142, //活动抢红包 FirstRecharge = 143, // 首充界面 KnapSackFunc1Type2 = 144, // 背包界面(返回) StrengthFunc1Type2 = 145, // 强化界面(返回) KnapSackFunc5 = 146, //装备分解 TreasureFindHostFunc1 = 147, //仙宝寻主 TreasureFindHostFunc1Type2 = 148, //仙宝寻主 TreasureFindHostFunc2 = 149, TreasureFindHostFunc2Type2 = 150, TreasureFindHostFunc3 = 151, TreasureFindHostFunc3Type2 = 152, OpenServerGift = 153, //超值礼包 WelfareFunc3 = 154, //福利界面七天登录 Alchemyrescripte104 = 155, //十全丹方 Alchemyrescripte105 = 156, //三元丹方 VipRechargeVip3 = 157, // vip3 VipRechargeVip2 = 158, // vip2 VipRechargeVip4 = 159, // vip4 VipRechargeVip5 = 160, // vip5 VipRechargeVip6 = 161, // vip6 VipRechargeVip7 = 162, // vip7 VipRechargeVip8 = 163, // vip8 VipRechargeVip9 = 164, // vip9 VipRechargeVip10 = 165, // vip10 PlotTaskFunc3 = 166, //支线任务 OpenServerMountRank = 167,//开服活动坐骑排行榜 AncientBattle = 168,//上古战场 XMZZBattle = 169, //仙魔之争 VipRechargeVip1 = 170, // vip1 Daily_Kirin = 171, //日常任务-麒麟之府 AttackMagicianType1 = 172, //攻击神兵 AttackMagicianType2 = 173, //攻击神兵 OpenServerRank = 174, //全名冲榜 Daily_BountyMission = 175, //日常任务-师门悬赏 Daily_IceCrystal = 176, //日常任务-冰晶矿脉 Daily_Trial = 177, //日常任务-宗门试炼 Daily_FairyLand = 178, //日常任务-仙界秘境 Daily_GuardSky = 179, //日常任务-守卫人皇 Daily_Demon = 180, //日常任务-混乱妖域 Daily_ElderGodArea = 181, //日常任务-古神禁地 Daily_AncientBattleGround = 182, //日常任务-上古战场 Daily_EmperorRelic = 183, //日常任务-娲皇遗迹 TreasureSoul = 184, //法宝魂界面 LootPreciousFrameSpec = 185,//八卦炉特殊跳转-封魔坛 RuneTowerSpec = 186,//八卦炉特殊跳转-符印塔 Daily_FairyTask = 187,//日常任务-仙盟任务 FaBaoSoul_BenYuan = 188, //法宝魂-本源之魂 FaBaoSoul_FengMo = 189, //法宝魂-封魔之魂 FaBaoSoul_Strength = 190, //法宝魂-强化之魂 FaBaoSoul_Rune = 191, //法宝魂-符印之魂 FaBaoSoul_Mount = 192, //法宝魂-坐骑之魂 FaBaoSoul_Pet = 193, //法宝魂-灵宠之魂 FaBaoSoul_Boss = 194, //法宝魂-BOSS之魂 FaBaoSoul_Wings = 195, //法宝魂-翅膀之魂 FaBaoSoul_Suit = 196, //法宝魂-套装之魂 FaBaoSoul_Wash = 197, //法宝魂-洗炼之魂 ConsumreRebate = 198, //福利—消费返利界面 OSTimeLimitGift=199, //开服活动开服特惠 WelfareFunc2Type2 = 200, //祈愿返回主界面 LimitedTimePackage = 201, //限时礼包 BossReborn = 202, //Boss复活 FlashSale = 203, //开服活动-限时特惠 BestXB = 204, //极品寻宝 RuneXB = 205, //符印寻宝 XBStore = 206, //寻宝商店 XBWarehouse = 207, //寻宝仓库 BestXBType2 = 208, //极品寻宝 RuneXBType2 = 209, //符印寻宝 XBStoreType2 = 210, //寻宝商店 XBWarehouseType2 = 211, //寻宝仓库 TrialExchange = 212, //宗门试练材料兑换 ComposeTicketFairy =213, //合成-仙界密境通行证 ComposeTicketGod = 214, //合成-古神通行证 ComposeTicketIce = 215, //合成-冰晶矿脉通行证 TrialDungeonSelect = 216, //宗门试练副本选择界面 TrialDungeonSelect1 = 217, //宗门试练一层 TrialDungeonSelect2 = 218, //宗门试练二层 TrialDungeonSelect3 = 219, //宗门试练三层 FindPreciousFrameFunc4Type2 = 220, //古神禁地界面 返回主界面 FindPreciousFrameFunc2Type2 = 221, //BOSS之家 返回主界面 DhszTs = 1001,//定海神针功法提升界面 HyqTs = 1002,//皓月枪功法提升界面 GyzTs = 1003,//鬼牙刃功法提升界面 LqhTs = 1004,//龙雀环功法提升界面 PlyTs = 1005,//磐龙印功法提升界面 XhqTs = 1006,//杏黄旗功法提升界面 DhzTs = 1007,//东皇钟功法提升界面 ZjhlTs = 1008,//紫金葫芦功法提升界面 YldTs = 1009,//炎麟盾功法提升界面 StfTs = 1010,//嗜天斧功法提升界面 XyjJs = 1011, //轩辕剑介绍界面 BGLJS = 1012, //八卦炉介绍界面 LFZJS = 1013, //龙凤镯介绍界面 YLJJS = 1014, //驭灵卷介绍界面 SBXZJS = 1015, //四宝仙盏介绍界面 KLJJS = 1016, //昆仑镜介绍界面 TJYJS = 1017, //天机仪介绍界面 Type1TreasureFunc3 = 1018, //仙族法宝 LLBT = 1019, //玲珑宝塔界面 FYZJTyp1 = 1020, //焚源之炬界面 FYZJTyp2 = 1021, //焚源之炬界面 SHLTyp1 = 1022, //摄魂铃界面 SHLTyp2 = 1023, //摄魂铃界面 }