using MU3.Data; using MU3.Operation; using MU3.Util; using System; using System.Linq; namespace MU3.Client; class patch_PacketGetGameEvent: Packet { private Operation.GameEvent _gameEvent; public extern State orig_proc(); public override State proc() { State state = orig_proc(); 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(idPeriod.period.endDate < CustomDateTime.Now) { idPeriod.period.endDate = endDate; } } else { idPeriod = new() { id = eventData.id, period = new Period(DateTime.MinValue.Date, endDate) }; _gameEvent.list.Add(idPeriod); _gameEvent.lastUpdate = CustomDateTime.Now; } } } 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; } }