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); } }
// 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); }
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; }
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); }
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); } }
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 } }); }
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); } }
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); } }
public static void Postfix(SimGameResultAction action, object additionalObject) { ModState.RemoveMechFlag = "FALSE"; return; }