Example #1
0
            private static void Prefix()
            {
                LogDebug("OnDayPassed");
                var starSystem        = Globals.Sim.CurSystem;
                var contractEmployers = starSystem.Def.contractEmployerIDs;
                var contractTargets   = starSystem.Def.contractTargetIDs;
                var owner             = starSystem.OwnerValue;

                LogDebug($"{starSystem.Name} owned by {owner.Name}");
                LogDebug($"Employers in {starSystem.Name}");
                contractEmployers.Do(x => LogDebug($"  {x}"));
                LogDebug($"Targets in {starSystem.Name}");
                contractTargets.Do(x => LogDebug($"  {x}"));
                Globals.Sim.GetAllCurrentlySelectableContracts().Do(x => LogDebug($"{x.Name,-25} {x.Difficulty} ({x.Override.GetUIDifficulty()})"));
                var systemStatus = Globals.WarStatusTracker.systems.Find(x => x.starSystem == starSystem);
                var employers    = systemStatus.influenceTracker.OrderByDescending(x => x.Value).Select(x => x.Key).Take(2);

                foreach (var faction in Globals.Settings.IncludedFactions.Intersect(employers))
                {
                    LogDebug($"{faction} Enemies:");
                    FactionEnumeration.GetFactionByName(faction).factionDef?.Enemies.Distinct().Do(x => LogDebug($"  {x}"));
                    LogDebug($"{faction} Allies:");
                    FactionEnumeration.GetFactionByName(faction).factionDef?.Allies.Do(x => LogDebug($"  {x}"));
                    Log("");
                }
                LogDebug("Player allies:");
                foreach (var faction in Globals.Sim.AlliedFactions)
                {
                    LogDebug($"  {faction}");
                }

                if (Globals.Sim.IsCampaign && !Globals.Sim.CompanyTags.Contains("story_complete"))
                {
                    return;
                }

                Globals.WarStatusTracker.CurSystem = Globals.Sim.CurSystem.Name;
                if (Globals.WarStatusTracker.HotBox.Contains(Globals.Sim.CurSystem.Name) && !Globals.WarStatusTracker.HotBoxTravelling)
                {
                    Globals.WarStatusTracker.EscalationDays--;

                    if (!Globals.WarStatusTracker.Deployment)
                    {
                        if (Globals.WarStatusTracker.EscalationDays == 0)
                        {
                            HotSpots.CompleteEscalation();
                        }

                        if (Globals.WarStatusTracker.EscalationOrder != null)
                        {
                            Globals.WarStatusTracker.EscalationOrder.PayCost(1);
                            var activeItems = Globals.TaskTimelineWidget.ActiveItems;
                            if (activeItems.TryGetValue(Globals.WarStatusTracker.EscalationOrder, out var taskManagementElement4))
                            {
                                taskManagementElement4.UpdateItem(0);
                            }
                        }
                    }
                    else
                    {
                        if (Globals.WarStatusTracker.EscalationOrder != null)
                        {
                            Globals.WarStatusTracker.EscalationOrder.PayCost(1);
                            var activeItems = Globals.TaskTimelineWidget.ActiveItems;
                            if (activeItems.TryGetValue(Globals.WarStatusTracker.EscalationOrder, out var taskManagementElement4))
                            {
                                taskManagementElement4.UpdateItem(0);
                            }
                        }

                        if (Globals.WarStatusTracker.EscalationDays <= 0)
                        {
                            Globals.Sim.StopPlayMode();

                            Globals.Sim.CurSystem.activeSystemContracts.Clear();
                            Globals.Sim.CurSystem.activeSystemBreadcrumbs.Clear();
                            HotSpots.TemporaryFlip(Globals.Sim.CurSystem, Globals.WarStatusTracker.DeploymentEmployer);

                            var maxHolder = Globals.Sim.CurSystem.CurMaxBreadcrumbs;
                            var rand      = Globals.Rng.Next(1, (int)Globals.Settings.DeploymentContracts);

                            Traverse.Create(Globals.Sim.CurSystem).Property("CurMaxBreadcrumbs").SetValue(rand);
                            Globals.Sim.GeneratePotentialContracts(true, null, Globals.Sim.CurSystem);
                            Traverse.Create(Globals.Sim.CurSystem).Property("CurMaxBreadcrumbs").SetValue(maxHolder);

                            Globals.Sim.QueueCompleteBreadcrumbProcess(true);
                            Globals.SimGameInterruptManager.QueueTravelPauseNotification("New Mission", "Our Employer has launched an attack. We must take a mission to support their operation. Let's check out our contracts and get to it!", Globals.Sim.GetCrewPortrait(SimGameCrew.Crew_Darius),
                                                                                         string.Empty, null, "Proceed");
                        }
                    }
                }

                if (!Globals.WarStatusTracker.StartGameInitialized)
                {
                    LogDebug("Reinitializing contracts because !StartGameInitialized");
                    var cmdCenter = Globals.Sim.RoomManager.CmdCenterRoom;
                    Globals.Sim.CurSystem.GenerateInitialContracts(() => Traverse.Create(cmdCenter).Method("OnContractsFetched"));
                    Globals.WarStatusTracker.StartGameInitialized = true;
                }
            }