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);
        }
Esempio n. 2
0
        /// <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);
        }