예제 #1
0
 private static void Prefix(SimGameState __instance, ref SimGameResultAction action)
 {
     try {
         if (action.Type == SimGameResultAction.ActionType.Flashpoint_AddContract || action.Type == SimGameResultAction.ActionType.Flashpoint_StartContract)
         {
             Logger.LogLine("FP name = " + action.additionalValues[2]);
             SimGameState simulation = UnityGameInstance.BattleTechGame.Simulation;
             if (action.additionalValues[3].Equals("{RANDOM}"))
             {
                 Array   values = Enum.GetValues(typeof(Faction));
                 Random  random = new Random();
                 Faction randomFaction;
                 do
                 {
                     randomFaction = (Faction)values.GetValue(random.Next(values.Length));
                 }while (Helper.IsExcluded(randomFaction));
                 action.additionalValues[3] = randomFaction.ToString();
             }
             else if (action.additionalValues[3].Equals("{PLANETOWNER}"))
             {
                 action.additionalValues[3] = simulation.ActiveFlashpoint.CurSystem.Owner.ToString();
             }
             if (action.additionalValues[4].Equals("{RANDOM}"))
             {
                 Array   values = Enum.GetValues(typeof(Faction));
                 Random  random = new Random();
                 Faction randomFaction;
                 do
                 {
                     randomFaction = (Faction)values.GetValue(random.Next(values.Length));
                 }while (Helper.IsExcluded(randomFaction));
                 action.additionalValues[4] = randomFaction.ToString();
             }
             else if (action.additionalValues[4].Equals("{PLANETOWNER}"))
             {
                 action.additionalValues[4] = simulation.ActiveFlashpoint.CurSystem.Owner.ToString();
             }
             if (string.IsNullOrEmpty(action.value))
             {
                 ContractOverride        contractOverride = simulation.DataManager.ContractOverrides.Get(action.additionalValues[2]).Copy();
                 ContractType            contractType     = contractOverride.contractType;
                 List <MapAndEncounters> releasedMapsAndEncountersByContractTypeAndOwnership = MetadataDatabase.Instance.GetReleasedMapsAndEncountersByContractTypeAndOwnership(new ContractType[] { contractType });
                 releasedMapsAndEncountersByContractTypeAndOwnership.Shuffle();
                 MapAndEncounters mapAndEncounters = releasedMapsAndEncountersByContractTypeAndOwnership[0];
                 action.value = mapAndEncounters.Map.MapName;
             }
         }
     }
     catch (Exception e) {
         Logger.LogError(e);
     }
 }
예제 #2
0
            // Token: 0x06000004 RID: 4 RVA: 0x000020BC File Offset: 0x000002BC
            public static bool Prefix(SGCharacterCreationCareerBackgroundSelectionPanel __instance)
            {
                Settings            settings            = InnerSphereMap.SETTINGS;
                SimGameResultAction simGameResultAction = new SimGameResultAction();

                simGameResultAction.Type                = SimGameResultAction.ActionType.System_ShowSummaryOverlay;
                simGameResultAction.value               = settings.splashTitle;
                simGameResultAction.additionalValues    = new string[1];
                simGameResultAction.additionalValues[0] = settings.splashText;
                SimGameState.ApplyEventAction(simGameResultAction, null);
                __instance.onComplete.Invoke();
                return(false);
            }
예제 #3
0
            public static void Prefix(SimGameResultAction action, object additionalObject)
            {
                {
                    if (action.Type == SimGameResultAction.ActionType.Mech_AddRoster)
                    {
                        if (action.additionalValues == null)
                        {
                            ModState.RemoveMechFlag = "FALSE";
                        }
                        else
                        {
                            ModState.RemoveMechFlag = action.additionalValues.ElementAtOrDefault(0);
                        }
                    }
                }

                return;
            }
예제 #4
0
        public static bool Prefix(SimGameResultAction action, object additionalObject, ref bool __result)
        {
            SimGameState simulation = UnityGameInstance.BattleTechGame.Simulation;

            if (simulation == null)
            {
                return(true);
            }
            if (action.Type == SimGameResultAction.ActionType.System_SetDropship)
            {
                if (!action.value.ToLower().Contains("leopard") && !action.value.ToLower().Contains("argo"))
                {
                    DifficultyOptionsMain.ApplyEventResult(simulation, action.valueConstant, action.additionalValues);
                    __result = false;
                    return(false);
                }
            }
            return(true);
        }
예제 #5
0
 static void Postfix(SimGameState __instance, GameInstanceSave gameInstanceSave)
 {
     try {
         if (Fields.Deployment)
         {
             Fields.DeploymentContracts = new Dictionary <string, Contract>();
             foreach (Contract contract in __instance.CurSystem.SystemContracts)
             {
                 contract.Override.salvagePotential   = Fields.DeploymentSalvage;
                 contract.Override.disableNegotations = true;
                 SimGameEventResult  simGameEventResult  = new SimGameEventResult();
                 SimGameResultAction simGameResultAction = new SimGameResultAction();
                 int num2 = 11;
                 simGameResultAction.Type                 = SimGameResultAction.ActionType.System_StartNonProceduralContract;
                 simGameResultAction.value                = contract.mapName;
                 simGameResultAction.additionalValues     = new string[num2];
                 simGameResultAction.additionalValues[0]  = __instance.CurSystem.ID;
                 simGameResultAction.additionalValues[1]  = contract.mapPath;
                 simGameResultAction.additionalValues[2]  = contract.encounterObjectGuid;
                 simGameResultAction.additionalValues[3]  = contract.Override.ID;
                 simGameResultAction.additionalValues[4]  = (!contract.Override.useTravelCostPenalty).ToString();
                 simGameResultAction.additionalValues[5]  = Fields.DeploymentEmployer.ToString();
                 simGameResultAction.additionalValues[6]  = Fields.DeploymentTarget.ToString();
                 simGameResultAction.additionalValues[7]  = contract.Difficulty.ToString();
                 simGameResultAction.additionalValues[8]  = "true";
                 simGameResultAction.additionalValues[9]  = Fields.DeploymentEmployer.ToString();
                 simGameResultAction.additionalValues[10] = contract.Override.travelSeed.ToString();
                 simGameEventResult.Actions               = new SimGameResultAction[1];
                 simGameEventResult.Actions[0]            = simGameResultAction;
                 contract.Override.OnContractSuccessResults.Add(simGameEventResult);
                 if (!gameInstanceSave.HasCombatData)
                 {
                     AccessTools.Field(typeof(SimGameState), "activeBreadcrumb").SetValue(__instance, contract);
                 }
                 Fields.DeploymentContracts.Add(contract.Name, contract);
             }
         }
     }
     catch (Exception e) {
         Logger.LogError(e);
     }
 }
예제 #6
0
        public static Contract CreateTravelContract(
            string mapName,
            string mapPath,
            string encounterGuid,
            ContractTypeValue contractTypeValue,
            ContractOverride ovr,
            GameContext context,
            FactionValue employer,
            FactionValue target,
            FactionValue targetsAlly,
            FactionValue employersAlly,
            FactionValue neutralToAll,
            FactionValue hostileToAll,
            bool isGlobal,
            int difficulty)
        {
            LogDebug("CreateTravelContract");
            var starSystem = context.GetObject(GameContextObjectTagEnum.TargetStarSystem) as StarSystem;
            var seed       = Globals.Rng.Next(0, int.MaxValue);

            ovr.FullRehydrate();
            var contractOverride = new ContractOverride();

            contractOverride.CopyContractTypeData(ovr);
            contractOverride.contractName           = ovr.contractName;
            contractOverride.difficulty             = ovr.difficulty;
            contractOverride.longDescription        = ovr.longDescription;
            contractOverride.shortDescription       = ovr.shortDescription;
            contractOverride.travelOnly             = true;
            contractOverride.useTravelCostPenalty   = !isGlobal;
            contractOverride.disableNegotations     = ovr.disableNegotations;
            contractOverride.disableAfterAction     = ovr.disableAfterAction;
            contractOverride.salvagePotential       = ovr.salvagePotential;
            contractOverride.contractRewardOverride = ovr.contractRewardOverride;
            contractOverride.travelSeed             = seed;
            contractOverride.difficultyUIModifier   = ovr.difficultyUIModifier;
            var       simGameEventResult = new SimGameEventResult();
            var       gameResultAction   = new SimGameResultAction();
            const int length             = 14;

            gameResultAction.Type                 = SimGameResultAction.ActionType.System_StartNonProceduralContract;
            gameResultAction.value                = mapName;
            gameResultAction.additionalValues     = new string[length];
            gameResultAction.additionalValues[0]  = starSystem.ID;
            gameResultAction.additionalValues[1]  = mapPath;
            gameResultAction.additionalValues[2]  = encounterGuid;
            gameResultAction.additionalValues[3]  = ovr.ID;
            gameResultAction.additionalValues[4]  = isGlobal.ToString();
            gameResultAction.additionalValues[5]  = employer.Name;
            gameResultAction.additionalValues[6]  = target.Name;
            gameResultAction.additionalValues[7]  = difficulty.ToString();
            gameResultAction.additionalValues[8]  = "true";
            gameResultAction.additionalValues[9]  = targetsAlly.Name;
            gameResultAction.additionalValues[10] = seed.ToString();
            gameResultAction.additionalValues[11] = employersAlly.Name;
            gameResultAction.additionalValues[12] = neutralToAll.Name;
            gameResultAction.additionalValues[13] = hostileToAll.Name;
            simGameEventResult.Actions            = new SimGameResultAction[1];
            simGameEventResult.Actions[0]         = gameResultAction;
            contractOverride.OnContractSuccessResults.Add(simGameEventResult);
            return(new Contract(mapName, mapPath, encounterGuid, contractTypeValue, Globals.Sim.BattleTechGame, contractOverride, context, true, actualDifficulty)
            {
                Override =
                {
                    travelSeed = seed
                }
            });
        }
예제 #7
0
        static void Postfix(SimGameState __instance)
        {
            try {
                Fields.PaymentCall = false;
                if (Fields.Deployment)
                {
                    if (Fields.DeploymentRemainingDays <= 0)
                    {
                        __instance.StopPlayMode();
                        Fields.Deployment = false;
                        SimGameInterruptManager interruptQueue = (SimGameInterruptManager)AccessTools.Field(typeof(SimGameState), "interruptQueue").GetValue(__instance);
                        interruptQueue.QueueGenericPopup("Deployment Over", "Thanks for your services.");
                        Fields.DeploymentContracts = new Dictionary <string, Contract>();
                        __instance.CurSystem.SystemContracts.Clear();
                        __instance.RoomManager.RefreshTimeline();
                        AccessTools.Field(typeof(SimGameState), "activeBreadcrumb").SetValue(__instance, null);
                    }
                    else
                    {
                        Settings      settings      = Helper.LoadSettings();
                        System.Random rand          = new System.Random();
                        int           ChanceDivider = Mathf.Max(1, 2 ^ ((Fields.MissionsDoneCurrentMonth + 1) - Mathf.RoundToInt((__instance.Constants.Finances.QuarterLength * settings.MissionChancePerDay))));
                        if (rand.NextDouble() < settings.MissionChancePerDay / ChanceDivider)
                        {
                            __instance.PauseTimer();
                            __instance.StopPlayMode();

                            SimGameInterruptManager interruptQueue = (SimGameInterruptManager)AccessTools.Field(typeof(SimGameState), "interruptQueue").GetValue(__instance);
                            Contract newcon = Helper.GetNewContract(__instance, Fields.DeploymentDifficulty, Fields.DeploymentEmployer, Fields.DeploymentTarget);
                            newcon.SetInitialReward(0);
                            newcon.Override.salvagePotential = Fields.DeploymentSalvage;
                            newcon.SetNegotiatedValues(Fields.DeploymentNegotiatedPayment, Fields.DeploymentNegotiatedSalvage);
                            newcon.Override.disableNegotations = true;
                            SimGameEventResult  simGameEventResult  = new SimGameEventResult();
                            SimGameResultAction simGameResultAction = new SimGameResultAction();
                            int num2 = 11;
                            simGameResultAction.Type                 = SimGameResultAction.ActionType.System_StartNonProceduralContract;
                            simGameResultAction.value                = newcon.mapName;
                            simGameResultAction.additionalValues     = new string[num2];
                            simGameResultAction.additionalValues[0]  = __instance.CurSystem.ID;
                            simGameResultAction.additionalValues[1]  = newcon.mapPath;
                            simGameResultAction.additionalValues[2]  = newcon.encounterObjectGuid;
                            simGameResultAction.additionalValues[3]  = newcon.Override.ID;
                            simGameResultAction.additionalValues[4]  = (!newcon.Override.useTravelCostPenalty).ToString();
                            simGameResultAction.additionalValues[5]  = Fields.DeploymentEmployer.ToString();
                            simGameResultAction.additionalValues[6]  = Fields.DeploymentTarget.ToString();
                            simGameResultAction.additionalValues[7]  = newcon.Difficulty.ToString();
                            simGameResultAction.additionalValues[8]  = "true";
                            simGameResultAction.additionalValues[9]  = Fields.DeploymentEmployer.ToString();
                            simGameResultAction.additionalValues[10] = newcon.Override.travelSeed.ToString();
                            simGameEventResult.Actions               = new SimGameResultAction[1];
                            simGameEventResult.Actions[0]            = simGameResultAction;
                            newcon.Override.OnContractSuccessResults.Add(simGameEventResult);
                            AccessTools.Field(typeof(SimGameState), "activeBreadcrumb").SetValue(__instance, newcon);
                            Fields.DeploymentContracts.Add(newcon.Name, newcon);
                            Action primaryAction = delegate() {
                                __instance.QueueCompleteBreadcrumbProcess(true);
                            };
                            interruptQueue.QueueTravelPauseNotification("New Mission", "Our Employer has a new mission for us.", __instance.GetCrewPortrait(SimGameCrew.Crew_Darius),
                                                                        string.Empty, new Action(primaryAction), "Proceed", new Action(__instance.OnBreadcrumbWait), "Not Yet");
                        }
                    }
                }
            }
            catch (Exception e) {
                Logger.LogError(e);
            }
        }
예제 #8
0
        public static bool Prefix(ref bool __result, SimGameResultAction action, object additionalObject)
        {
            try
            {
                SimGameState simulation = UnityGameInstance.BattleTechGame.Simulation;

                if (simulation == null || action.Type != SimGameResultAction.ActionType.System_AddContract)
                {
                    return(true);
                }

                // In vanilla the SimGameResultAction.ActionType.System_AddContract is only used for travel-contracts (breadcrumbs)
                // I use it to add custom contracts by custom events which need to have negotiations disabled as they are "self-employed opportunity contracts"
                SimGameState.AddContractData addContractData   = simulation.ParseContractActionData(action.value, action.additionalValues);
                ContractOverride             contractOverride  = simulation.DataManager.ContractOverrides.Get(addContractData.ContractName).Copy();
                ContractTypeValue            contractTypeValue = contractOverride.ContractTypeValue;

                // Call original method if contract is a breadcrumb (used by campaign a lot)
                if (contractTypeValue.IsTravelOnly)
                {
                    return(true);
                }
                // Custom handling
                else
                {
                    // Validate target system and enrich contractData
                    StarSystem targetSystem;
                    Logger.Debug($"[SimGameState_ApplyEventAction_PREFIX] addContractData.TargetSystem: {addContractData.TargetSystem}");
                    if (!string.IsNullOrEmpty(addContractData.TargetSystem))
                    {
                        string validatedSystemString = simulation.GetValidatedSystemString(addContractData.TargetSystem);
                        addContractData.IsGlobal = validatedSystemString != simulation.CurSystem.ID;

                        if (simulation.GetSystemById(validatedSystemString) != null)
                        {
                            targetSystem = simulation.GetSystemById(validatedSystemString);
                        }
                        else
                        {
                            throw new Exception("Couldn't find StarSystem for: " + validatedSystemString);
                        }
                    }
                    else
                    {
                        targetSystem = simulation.CurSystem;
                    }
                    Logger.Debug($"[SimGameState_ApplyEventAction_PREFIX] targetSystem.ID: {targetSystem.ID}");



                    // Internal helper method
                    IEnumerator InjectAdditionalContractRoutine()
                    {
                        while (!targetSystem.InitialContractsFetched)
                        {
                            yield return(new WaitForSeconds(0.2f));
                        }

                        InjectAdditionalContract();

                        yield break;
                    }

                    // Internal helper method
                    void InjectAdditionalContract(bool refresh = true)
                    {
                        // Get the contract
                        Contract contract = simulation.GetValidContractForContractDataAndSystem(addContractData, targetSystem);

                        targetSystem.SystemContracts.Add(contract);

                        if (refresh)
                        {
                            SGContractsWidget    ___contractsWidget           = (SGContractsWidget)AccessTools.Field(typeof(SGRoomController_CmdCenter), "contractsWidget").GetValue(simulation.RoomManager.CmdCenterRoom);
                            List <Contract>      allContracts                 = simulation.GetAllCurrentlySelectableContracts(true);
                            ContractDisplayStyle?___contractDisplayAutoSelect = Traverse.Create(___contractsWidget).Field("contractDisplayAutoSelect").GetValue <ContractDisplayStyle?>();
                            ___contractsWidget.ListContracts(allContracts, ___contractDisplayAutoSelect);
                        }
                    }



                    if (simulation.TimeMoving)
                    {
                        simulation.PauseTimer();
                        simulation.StopPlayMode();
                    }



                    // Need to check this as the initial contract fetching routine clears all existing contracts
                    Logger.Debug($"[SimGameState_ApplyEventAction_PREFIX] targetSystem.InitialContractsFetched: {targetSystem.InitialContractsFetched}");
                    if (!targetSystem.InitialContractsFetched)
                    {
                        SceneSingletonBehavior <UnityGameInstance> .Instance.StartCoroutine(InjectAdditionalContractRoutine());

                        return(false);
                    }
                    else
                    {
                        InjectAdditionalContract(false);

                        // Skip original method
                        return(false);
                    }
                }
            }
            catch (Exception e)
            {
                Logger.Error(e);
                return(true);
            }
        }
예제 #9
0
            public static void Postfix(SimGameResultAction action, object additionalObject)
            {
                ModState.RemoveMechFlag = "FALSE";

                return;
            }