using System; using System.Collections.Generic; using System.Linq; using MoleMole.Config; using UniRx; using UnityEngine; using proto; namespace MoleMole { public class MissionOverviewPageContext : BasePageContext { public enum E_MissionLinkType { None = 0, Stage = 1, Activity = 2, Serial = 3, Attack = 4, Valkyrja = 5, Equip = 6, Supply = 7, ActivityRoot = 8, MainStoryRoot = 9, Endless = 10, Island = 11 } private List _missionList = new List(); private MonoScrollerFadeManager _fadeMgr; private MonoMissionUtil _util; private bool _waitingForIslandServerData; private List> _avatarGotList; private Dictionary _dictBeforeFetch; private int _levelBeforeReward; public MissionOverviewPageContext() { config = new ContextPattern { contextName = "MissionOverviewPageContext", viewPrefabPath = "UI/Menus/Page/Mission/MissionOverviewPage" }; _avatarGotList = new List>(); } protected override void BindViewCallbacks() { } protected override bool SetupView() { if (base.view == null || base.view.transform == null) { return false; } _util = base.view.GetComponent(); _util.Init(); FilterMissions(); _missionList.Sort(MissionDataItem.CompareToMission); MonoGridScroller component = base.view.transform.Find("MissionList/ScrollView").GetComponent(); component.Init(OnScrollerChange, _missionList.Count); _fadeMgr = base.view.transform.Find("MissionList/ScrollView").GetComponent(); _fadeMgr.Init(component.GetItemDict(), _dictBeforeFetch, IsMissionEqual); _fadeMgr.Play(); _dictBeforeFetch = null; return false; } public override void Destroy() { base.Destroy(); } public override bool OnNotify(Notify ntf) { //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Expected O, but got Unknown if (ntf.type == NotifyTypes.MissionUpdated) { MissionDataItem missionDataItem = GetMissionDataItem((int)(uint)ntf.body); if (missionDataItem != null && !FilterMission(missionDataItem)) { SetupView(); } } else if (ntf.type == NotifyTypes.MissionRewardGot) { OnMissionRewardGot((GetMissionRewardRsp)ntf.body); _fadeMgr.Reset(); } else if (ntf.type == NotifyTypes.MissionRewardAvatarGot) { ShowAvatarGot((AvatarCardDataItem)ntf.body); } else if (ntf.type == NotifyTypes.MissionDeleted) { SetupView(); } return false; } public override bool OnPacket(NetPacketV1 pkt) { ushort cmdId = pkt.getCmdId(); if (cmdId == 157) { return OnGetIsLandRsp(pkt.getData()); } return false; } private bool OnGetIsLandRsp(GetIslandRsp rsp) { if (!_waitingForIslandServerData) { return false; } _waitingForIslandServerData = false; Singleton.Instance.MoveToNextScene("Island", false, true); return false; } private void OnScrollerChange(Transform trans, int index) { MissionDataItem missionData = _missionList[index]; MonoMissionInfo component = trans.GetComponent(); component.SetupView(missionData); component.RegisterCallBacks(OnFetchRewardBtnClick, OnGoMissionBtnClick); } protected override void OnSetActive(bool enabled) { if (!enabled) { _fadeMgr.Reset(); } } private void OnFetchRewardBtnClick(MissionDataItem missionData) { SaveDataBeforeReward(); _dictBeforeFetch = base.view.transform.Find("MissionList/ScrollView").GetComponent().GetItemDict() .ToDictionary((KeyValuePair entry) => entry.Key, (KeyValuePair entry) => entry.Value); Singleton.Instance.RequestGetMissionReward((uint)missionData.id); } private void OnGoMissionBtnClick(MissionDataItem missionData) { E_MissionLinkType linkType = (E_MissionLinkType)missionData.metaData.LinkType; int linkParam = missionData.metaData.LinkParam; switch (linkType) { case E_MissionLinkType.Stage: GoToStageDetailDialog(linkParam); break; case E_MissionLinkType.Activity: GoToActivityPage(missionData.metaData.LinkParams); break; case E_MissionLinkType.Serial: GoToSerialPage(linkParam); break; case E_MissionLinkType.Attack: GoToChapterSelectPage(); break; case E_MissionLinkType.Valkyrja: GoToAvatarPage(); break; case E_MissionLinkType.Equip: GoToEquipPage(); break; case E_MissionLinkType.Supply: GoToSupplyPage(); break; case E_MissionLinkType.ActivityRoot: GoToActivityRootPage(); break; case E_MissionLinkType.MainStoryRoot: GoToMainStoryRootPage(); break; case E_MissionLinkType.Endless: GoToEndlessPage(); break; case E_MissionLinkType.Island: GoToIsland(); break; } } private void GoToIsland() { _waitingForIslandServerData = true; Singleton.Instance.ShowWidget(new LoadingWheelWidgetContext(157)); Singleton.Instance.RequestGetIsland(); } private void GoToEndlessPage() { Singleton.Instance.ShowPage(new ChapterOverviewPageContext("Event")); } private void GoToMainStoryRootPage() { Singleton.Instance.ShowPage(new ChapterOverviewPageContext("MainStory")); } private void GoToActivityRootPage() { Singleton.Instance.ShowPage(new ChapterOverviewPageContext("Event")); } private void GoToSupplyPage() { Singleton.Instance.ShowPage(new GachaMainPageContext()); } private void GoToEquipPage() { Singleton.Instance.ShowPage(new StorageShowPageContext()); } private void GoToAvatarPage() { Singleton.Instance.ShowPage(new AvatarOverviewPageContext { type = AvatarOverviewPageContext.PageType.Show, selectedAvatarID = Singleton.Instance.playerData.uiTempSaveData.lastSelectedAvatarID }); } private void GoToSerialPage(int serialID) { WeekDayActivityDataItem weekDayActivityDataItem = null; List allWeekDayActivityList = Singleton.Instance.AllWeekDayActivityList; for (int i = 0; i < allWeekDayActivityList.Count; i++) { if (allWeekDayActivityList[i].GetSeriesID() == serialID && allWeekDayActivityList[i].GetStatus() == ActivityDataItemBase.Status.InProgress) { weekDayActivityDataItem = allWeekDayActivityList[i]; break; } } if (weekDayActivityDataItem == null) { List activityListBySeriesID = Singleton.Instance.GetActivityListBySeriesID(serialID); weekDayActivityDataItem = activityListBySeriesID[0]; } Singleton.Instance.ShowPage(new ChapterSelectPageContext(weekDayActivityDataItem)); } private void GoToActivityPage(List activityIDList) { int num = 0; WeekDayActivityDataItem weekDayActivityDataItem = null; foreach (int activityID in activityIDList) { weekDayActivityDataItem = Singleton.Instance.GetWeekDayActivityByID(activityID); if (weekDayActivityDataItem.GetStatus() == ActivityDataItemBase.Status.InProgress) { num = activityID; break; } } if (num <= 0) { num = activityIDList[0]; } weekDayActivityDataItem = Singleton.Instance.GetWeekDayActivityByID(num); Singleton.Instance.ShowPage(new ChapterSelectPageContext(weekDayActivityDataItem)); } private void GoToStageDetailDialog(int stageID) { LevelDataItem levelDataItem = Singleton.Instance.TryGetLevelById(stageID); if (levelDataItem == null) { levelDataItem = new LevelDataItem(stageID); } if (levelDataItem.UnlockPlayerLevel > Singleton.Instance.playerData.teamLevel) { Singleton.Instance.ShowDialog(new GeneralHintDialogContext(LocalizationGeneralLogic.GetText("Menu_ActivityLock", levelDataItem.UnlockPlayerLevel))); return; } ChapterDataItem chapterById = Singleton.Instance.GetChapterById(levelDataItem.ChapterID); int totalFinishedChanllengeNum = chapterById.GetTotalFinishedChanllengeNum(levelDataItem.Diffculty); if (levelDataItem.UnlockChanllengeNum > totalFinishedChanllengeNum) { Singleton.Instance.ShowDialog(new GeneralHintDialogContext(LocalizationGeneralLogic.GetText("Menu_ChallengeLackLock", levelDataItem.UnlockChanllengeNum))); } else { Singleton.Instance.ShowPage(new ChapterSelectPageContext(levelDataItem)); } } private void GoToChapterSelectPage() { Singleton.Instance.ShowPage(new ChapterSelectPageContext()); } private void SaveDataBeforeReward() { _levelBeforeReward = Singleton.Instance.playerData.teamLevel; } public void OnRewardGotDialogClose(AvatarCardDataItem avatarData) { if (_levelBeforeReward < Singleton.Instance.playerData.teamLevel) { PlayerLevelUpDialogContext playerLevelUpDialogContext = new PlayerLevelUpDialogContext(); playerLevelUpDialogContext.SetLevelBeforeNoScoreManager(_levelBeforeReward); if (avatarData != null) { playerLevelUpDialogContext.SetNotifyWhenDestroy(avatarData); } Singleton.Instance.ShowDialog(playerLevelUpDialogContext); } else if (avatarData != null) { ShowAvatarGot(avatarData); } } private void ShowAvatarGot(AvatarCardDataItem avatarData) { _avatarGotList.Clear(); _avatarGotList.Add(new Tuple(avatarData, false)); Singleton.Instance.ShowDialog(new DropNewItemDialogContextV2(_avatarGotList)); } private void OnMissionUpdated(uint id) { SetupView(); } private void OnMissionRewardGot(GetMissionRewardRsp rsp) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) if ((int)rsp.retcode == 0) { MissionRewardGotDialogContext missionRewardGotDialogContext = new MissionRewardGotDialogContext(rsp.reward_list); missionRewardGotDialogContext.RegisterCallBack(OnRewardGotDialogClose); Singleton.Instance.ShowDialog(missionRewardGotDialogContext); } } private bool FilterMission(MissionDataItem mission) { //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Invalid comparison between Unknown and I4 //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Invalid comparison between Unknown and I4 LinearMissionData linearMissionData = LinearMissionDataReader.TryGetLinearMissionDataByKey(mission.id); if (linearMissionData != null && linearMissionData.IsAchievement == 1) { return true; } if (linearMissionData != null && linearMissionData.PreMissionId > 0) { foreach (MissionDataItem value in Singleton.Instance.GetMissionDict().Values) { if (value.id == linearMissionData.PreMissionId && ((int)value.status == 2 || (int)value.status == 3)) { return true; } } } if (IsPreviewMission(mission)) { DateTime dateTimeFromTimeStamp = Miscs.GetDateTimeFromTimeStamp((uint)mission.beginTime); if ((dateTimeFromTimeStamp - TimeUtil.Now).TotalSeconds > (double)mission.metaData.PreviewTime) { return true; } } return false; } private void FilterMissions() { //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Invalid comparison between Unknown and I4 //IL_0095: Unknown result type (might be due to invalid IL or missing references) //IL_009b: Invalid comparison between Unknown and I4 //IL_00a2: Unknown result type (might be due to invalid IL or missing references) //IL_00a8: Invalid comparison between Unknown and I4 List list = Singleton.Instance.GetMissionDict().Values.ToList(); _missionList.Clear(); foreach (MissionDataItem item in list) { bool flag = false; if ((int)item.status == 5) { flag = true; } else { LinearMissionData linearMissionData = LinearMissionDataReader.TryGetLinearMissionDataByKey(item.id); if (linearMissionData != null && linearMissionData.PreMissionId > 0) { foreach (MissionDataItem item2 in list) { if (item2.id == linearMissionData.PreMissionId && ((int)item2.status == 2 || (int)item2.status == 3)) { flag = true; break; } } } if (IsPreviewMission(item)) { DateTime dateTimeFromTimeStamp = Miscs.GetDateTimeFromTimeStamp((uint)item.beginTime); if ((dateTimeFromTimeStamp - TimeUtil.Now).TotalSeconds > (double)item.metaData.PreviewTime) { flag = true; _util.AddPreviewMission(item); } } if (linearMissionData != null && linearMissionData.IsAchievement == 1) { flag = true; } } if (!flag) { _missionList.Add(item); } } } private bool IsPreviewMission(MissionDataItem mission) { //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Invalid comparison between Unknown and I4 return mission.metaData.type == 3 && (int)mission.status == 1 && mission.metaData.PreviewTime > 0; } private void HackAddMission() { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Expected O, but got Unknown //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Expected O, but got Unknown //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Expected O, but got Unknown //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Unknown result type (might be due to invalid IL or missing references) //IL_0095: Expected O, but got Unknown //IL_00ab: Unknown result type (might be due to invalid IL or missing references) //IL_00c4: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: Expected O, but got Unknown //IL_00e0: Unknown result type (might be due to invalid IL or missing references) //IL_00f9: Unknown result type (might be due to invalid IL or missing references) //IL_00ff: Expected O, but got Unknown //IL_0115: Unknown result type (might be due to invalid IL or missing references) //IL_012e: Unknown result type (might be due to invalid IL or missing references) //IL_0134: Expected O, but got Unknown //IL_014a: Unknown result type (might be due to invalid IL or missing references) Mission val = new Mission(); val.mission_id = 10005u; Mission mission = val; MissionDataItem missionDataItem = new MissionDataItem(mission); missionDataItem.status = (MissionStatus)2; _missionList.Add(missionDataItem); val = new Mission(); val.mission_id = 23001u; mission = val; missionDataItem = new MissionDataItem(mission); missionDataItem.status = (MissionStatus)2; _missionList.Add(missionDataItem); val = new Mission(); val.mission_id = 22005u; mission = val; missionDataItem = new MissionDataItem(mission); missionDataItem.status = (MissionStatus)2; missionDataItem.progress = 20; _missionList.Add(missionDataItem); val = new Mission(); val.mission_id = 22003u; mission = val; missionDataItem = new MissionDataItem(mission); missionDataItem.status = (MissionStatus)2; missionDataItem.progress = 20; _missionList.Add(missionDataItem); val = new Mission(); val.mission_id = 31002u; mission = val; missionDataItem = new MissionDataItem(mission); missionDataItem.status = (MissionStatus)2; missionDataItem.progress = 20; _missionList.Add(missionDataItem); val = new Mission(); val.mission_id = 31005u; mission = val; missionDataItem = new MissionDataItem(mission); missionDataItem.status = (MissionStatus)2; missionDataItem.progress = 20; _missionList.Add(missionDataItem); val = new Mission(); val.mission_id = 31004u; mission = val; missionDataItem = new MissionDataItem(mission); missionDataItem.status = (MissionStatus)2; missionDataItem.progress = 20; _missionList.Add(missionDataItem); } private bool IsMissionEqual(RectTransform missionNew, RectTransform missionOld) { if (missionNew == null || missionOld == null) { return false; } MonoMissionInfo component = missionOld.GetComponent(); MonoMissionInfo component2 = missionNew.GetComponent(); return component2.GetMissionData().id == component.GetMissionData().id; } private MissionDataItem GetMissionDataItem(int id) { Dictionary missionDict = Singleton.Instance.GetMissionDict(); if (missionDict.ContainsKey(id)) { return missionDict[id]; } return null; } } }