private bool LaunchCaptorEvent(CEEvent OverrideEvent = null) { if (CESettings.Instance.EventCaptorNotifications) { if (notificationCaptorExists || progressEventExists) { return(false); } } CEEvent returnedEvent; if (OverrideEvent == null) { CharacterObject captive = MobileParty.MainParty.Party.PrisonRoster.GetTroopRoster().GetRandomElement().Character; returnedEvent = CEEventManager.ReturnWeightedChoiceOfEventsPartyLeader(captive); } else { returnedEvent = OverrideEvent; } if (returnedEvent == null) { return(false); } notificationCaptorExists = true; if (CESettings.Instance.EventCaptorNotifications) { try { if (!string.IsNullOrWhiteSpace(returnedEvent.NotificationName)) { new CESubModule().LoadCampaignNotificationTexture(returnedEvent.NotificationName); } else if (returnedEvent.SexualContent) { new CESubModule().LoadCampaignNotificationTexture("CE_sexual_notification"); } else { new CESubModule().LoadCampaignNotificationTexture("CE_castle_notification"); } } catch (Exception e) { InformationManager.DisplayMessage(new InformationMessage("LoadCampaignNotificationTextureFailure", Colors.Red)); CECustomHandler.ForceLogToFile("LoadCampaignNotificationTexture"); CECustomHandler.ForceLogToFile(e.Message + " : " + e); } Campaign.Current.CampaignInformationManager.NewMapNoticeAdded(new CECaptorMapNotification(returnedEvent, new TextObject("{=CEEVENTS1090}Captor event is ready"))); } else { if (Game.Current.GameStateManager.ActiveState is MapState mapState) { Campaign.Current.LastTimeControlMode = Campaign.Current.TimeControlMode; if (!mapState.AtMenu) { _extraVariables.menuToSwitchBackTo = null; _extraVariables.currentBackgroundMeshNameToSwitchBackTo = null; GameMenu.ActivateGameMenu("prisoner_wait"); } else { _extraVariables.menuToSwitchBackTo = mapState.GameMenuId; _extraVariables.currentBackgroundMeshNameToSwitchBackTo = mapState.MenuContext.CurrentBackgroundMeshName; } GameMenu.SwitchToMenu(returnedEvent.Name); } } return(true); }
/// <summary> /// Custom CheckCaptivityChange Function /// </summary> /// <param name="dt"></param> /// <returns>EventName</returns> public override string CheckCaptivityChange(float dt) { if (!PlayerCaptivity.IsCaptive) { return(DefaultOverridenCheckCaptivityChange(dt)); } if (Hero.MainHero.Age < 18f) { EndCaptivityAction.ApplyByReleasing(Hero.MainHero); InformationManager.DisplayMessage(new InformationMessage(("Invalid Age: " + Hero.MainHero.Age), Colors.Gray)); CECustomHandler.ForceLogToFile("Underaged Player Detected. Age: " + Hero.MainHero.Age); return("menu_captivity_end_by_party_removed"); } if (CEHelper.delayedEvents.Count > 0) { string eventToFire = null; bool shouldFireEvent = CEHelper.delayedEvents.Any(item => { if (item.eventName != null && item.eventTime < Campaign.Current.CampaignStartTime.ElapsedHoursUntilNow) { CECustomHandler.LogToFile("Firing " + item.eventName); if (item.conditions == true) { string result = CEEventManager.FireSpecificEvent(item.eventName); switch (result) { case "$FAILEDTOFIND": CECustomHandler.LogToFile("Failed to load event list."); break; case "$EVENTNOTFOUND": CECustomHandler.LogToFile("Event not found."); break; case "$EVENTCONDITIONSNOTMET": CECustomHandler.LogToFile("Event conditions are not met."); break; default: if (result.StartsWith("$")) { CECustomHandler.LogToFile(result.Substring(1)); } else { eventToFire = item.eventName; item.hasBeenFired = true; return(true); } break; } } else { eventToFire = item.eventName.ToLower(); CEEvent foundevent = CEPersistence.CEEventList.FirstOrDefault(ceevent => ceevent.Name.ToLower() == eventToFire); if (foundevent != null && !foundevent.MultipleRestrictedListOfFlags.Contains(RestrictedListOfFlags.Captive)) { eventToFire = null; return(false); } item.hasBeenFired = true; return(true); } } return(false); }); if (shouldFireEvent) { CEHelper.delayedEvents.RemoveAll(item => item.hasBeenFired); PlayerCaptivity.LastCheckTime = CampaignTime.Now; return(eventToFire); } } if (PlayerCaptivity.CaptorParty != null && !PlayerCaptivity.CaptorParty.IsSettlement) { if (!CheckEvent()) { return(DefaultOverridenCheckCaptivityChange(dt)); } PlayerCaptivity.LastCheckTime = CampaignTime.Now; CECustomHandler.LogToFile("About to choose a event!"); CEEvent captiveEvent = CEEventManager.ReturnWeightedChoiceOfEvents(); if (captiveEvent != null) { return(captiveEvent.Name); } } else { if (!CheckEvent()) { return(DefaultOverridenCheckCaptivityChange(dt)); } PlayerCaptivity.LastCheckTime = CampaignTime.Now; CECustomHandler.LogToFile("About to choose a settlement event!"); CEEvent captiveEvent = CEEventManager.ReturnWeightedChoiceOfEvents(); if (captiveEvent != null) { return(captiveEvent.Name); } } return(DefaultOverridenCheckCaptivityChange(dt)); }
private CEEvent CheckDelayedRandomEvent() { CEEvent eventToFire = null; bool shouldFireEvent = delayedEvents.Any(item => { if (item.eventName != null && item.eventTime < Campaign.Current.CampaignStartTime.ElapsedHoursUntilNow) { CECustomHandler.LogToFile("Firing " + item.eventName); if (item.conditions == true) { string result = CEEventManager.FireSpecificEventRandom(item.eventName, out CEEvent ceEvent, true); switch (result) { case "$FAILEDTOFIND": CECustomHandler.LogToFile("Failed to load event list."); break; case "$EVENTNOTFOUND": CECustomHandler.LogToFile("Event not found."); break; case "$EVENTCONDITIONSNOTMET": CECustomHandler.LogToFile("Event conditions are not met."); break; default: if (result.StartsWith("$")) { CECustomHandler.LogToFile(result.Substring(1)); } else { eventToFire = ceEvent; item.hasBeenFired = true; return(true); } break; } } else { eventToFire = CEPersistence.CEEventList.FirstOrDefault(ceevent => ceevent.Name.ToLower() == item.eventName.ToLower()); if (!eventToFire.MultipleRestrictedListOfFlags.Contains(RestrictedListOfFlags.Random)) { eventToFire = null; return(false); } item.hasBeenFired = true; return(true); } } return(false); }); if (shouldFireEvent) { delayedEvents.RemoveAll(item => item.hasBeenFired); return(eventToFire); } return(null); }