static void Postfix(SimGameInterruptManager.EventPopupEntry entry, SimGameEventTracker ___mechWarriorEventTracker) { SimGameEventDef evt = entry != null && entry.parameters[0] is SimGameEventDef ? (SimGameEventDef)entry.parameters[0] : null; if (String.Equals(ModConsts.Event_ContractExpired, evt?.Description?.Id)) { // First, dequeue to remove any existing pilot if (ModState.ExpiredContracts.Count > 0) { ModState.ExpiredContracts.Dequeue(); } // If there are any other events left after that, fire them here. if (ModState.ExpiredContracts.Count > 0) { (Pilot Pilot, CrewDetails Details)expired = ModState.ExpiredContracts.Peek(); SimGameEventDef newEvent = EventHelper.ModifyContractExpirationEventForPilot(expired.Pilot, expired.Details); Mod.Log.Info?.Write($"Contract expiration event fired."); ModState.SimGameState.OnEventTriggered(newEvent, EventScope.MechWarrior, ___mechWarriorEventTracker); } } else if (String.Equals(ModConsts.Event_HeadHunting, evt?.Description?.Id)) { ModState.HeadHuntedPilot = null; } }
static void Postfix(SGEventPanel __instance, SimGameEventOption option, SimGameInterruptManager.EventPopupEntry ___thisEntry) { if (___thisEntry != null && ___thisEntry.parameters != null && ___thisEntry.parameters[0] is SimGameEventDef eventDef) { if (ModConsts.Event_ContractExpired.Equals(eventDef.Description.Id)) { // Handle updating the contract length in the def; funds are handled by the event. if (ModConsts.Event_Option_ContractExpired_Hire_NoBonus.Equals(option.Description.Id) || ModConsts.Event_Option_ContractExpired_Hire_Bonus.Equals(option.Description.Id)) { (Pilot Pilot, CrewDetails Details)expired = ModState.ExpiredContracts.Peek(); Mod.Log.Debug?.Write($"Pilot {expired.Pilot.Name} was re-hired w/o a bonus"); expired.Details.ExpirationDay = ModState.SimGameState.DaysPassed + expired.Details.ContractTerm; ModState.UpdateOrCreateCrewDetails(expired.Pilot.pilotDef, expired.Details); } } else if (ModConsts.Event_HeadHunting.Equals(eventDef.Description.Id)) { // TODO: Anything? } } }