diff --git a/Unlockers/UnlockGameEvents/MU3.Client/patch_PacketGetGameEvent.cs b/Unlockers/UnlockGameEvents/MU3.Client/patch_PacketGetGameEvent.cs index bfc40eb..df19b03 100644 --- a/Unlockers/UnlockGameEvents/MU3.Client/patch_PacketGetGameEvent.cs +++ b/Unlockers/UnlockGameEvents/MU3.Client/patch_PacketGetGameEvent.cs @@ -7,8 +7,7 @@ using System.Linq; namespace MU3.Client; class patch_PacketGetGameEvent: Packet { - public Operation.GameEvent _gameEvent; - public Operation.GameEvent gameEvent => _gameEvent; + private Operation.GameEvent _gameEvent; public extern State orig_proc(); public override State proc() { @@ -16,12 +15,15 @@ class patch_PacketGetGameEvent: Packet { if(state == State.Done) { DateTime endDate = DateTime.Parse("2099-01-01 05:00:00.0"); _gameEvent ??= new Operation.GameEvent(); + + bool skipMissions = checkMissionEvents(); + foreach(EventData eventData in SingletonStateMachine.instance.allEventData) { IdPeriod idPeriod = Enumerable.FirstOrDefault(_gameEvent.list, (IdPeriod e) => e.id == eventData.id); + if(skipMissions && eventData.itemType == DataStudio.EventType.MissionEvent) { + continue; + } if(idPeriod != null) { - if(eventData.itemType == DataStudio.EventType.MissionEvent) { - continue; - } if(idPeriod.period.endDate < CustomDateTime.Now) { idPeriod.period.endDate = endDate; } @@ -37,4 +39,22 @@ class patch_PacketGetGameEvent: Packet { } return state; } + + // Check whether there is only one active mission event + private bool checkMissionEvents() { + bool found = false; + foreach(EventData eventData in SingletonStateMachine.instance.allEventData) { + if(eventData.itemType == DataStudio.EventType.MissionEvent) { + IdPeriod idPeriod = Enumerable.FirstOrDefault(_gameEvent.list, (IdPeriod e) => e.id == eventData.id); + if(idPeriod?.period.startDate < CustomDateTime.Now && idPeriod?.period.endDate > CustomDateTime.Now) { + if(!found) { + found = true; + } else { + return false; + } + } + } + } + return found; + } } diff --git a/Unlockers/UnlockGameEvents/MU3.OperationManager/patch_OperationManager.cs b/Unlockers/UnlockGameEvents/MU3.OperationManager/patch_OperationManager.cs index e20b021..55a6cd8 100644 --- a/Unlockers/UnlockGameEvents/MU3.OperationManager/patch_OperationManager.cs +++ b/Unlockers/UnlockGameEvents/MU3.OperationManager/patch_OperationManager.cs @@ -2,6 +2,7 @@ using MU3.User; using MU3.Util; using System.Collections.Generic; +using System.Linq; namespace MU3.Operation; @@ -20,7 +21,7 @@ class patch_OperationManager: OperationManager { private MissionEventData overrideMission(MissionEventData orig) { if(orig != null) { - foreach(KeyValuePair item in _missionEventDataMap) { + foreach(KeyValuePair item in _missionEventDataMap.Reverse()) { MissionEventData value = item.Value; if(!value.isMissionEventActive || value.eventData == null) { continue;