public static void Postfix(ref UnitDef_MDD __result, MetadataDatabase mdd, TagSet unitTagSet, DateTime?currentDate, TagSet companyTags, TagSet unitExcludedTagSet) { var mechParent = __result.UnitDefID; TagSet mechName = new TagSet { mechParent }; var potentialMechs = mdd.GetMatchingUnitDefs(mechName, unitExcludedTagSet, true, currentDate, companyTags); potentialMechs.Add(__result); potentialMechs.Shuffle(); __result = potentialMechs[0]; }
public static void Postfix(UnitSpawnPointOverride __instance, ref UnitDef_MDD __result) { if (ModState.PlayerGetsAIMechs) { var dm = UnityGameInstance.BattleTechGame.DataManager; ModState.AIMechs.Add(new ModState.playerMechStore(dm.MechDefs.Get(__result.UnitDefID), 0)); ModInit.modLog.LogMessage($"Got unitoverride {__result.UnitDefID} for player"); } if (ModState.AIGetsPlayerMechs) { ModInit.modLog.LogMessage($"First mech in playerMechs was {ModState.playerMechs.First().mechDef.Name} with count {ModState.playerMechs.First().count}"); ModState.playerMechs = ModState.playerMechs.OrderBy(x => x.count).ToList(); ModInit.modLog.LogMessage($"Reordered! First mech in playerMechs is now {ModState.playerMechs.First().mechDef.Name} with count {ModState.playerMechs.First().count}"); Traverse.Create(__result).Property("UnitDefID").SetValue(ModState.playerMechs[0].mechDef.Description.Id); ModState.playerMechs.First().count += 1; } }
public static void Postfix(UnitSpawnPointOverride __instance, UnitDef_MDD __result, MetadataDatabase mdd, TagSet unitTagSet, TagSet unitExcludedTagSet, string lanceName, TagSet companyTags) { try { Logger.Debug("----------------------------------------------------------------------------------------------------"); Logger.Debug("[UnitSpawnPointOverride_SelectTaggedUnitDef_POSTFIX] lanceName: " + lanceName); Logger.Debug("[UnitSpawnPointOverride_SelectTaggedUnitDef_POSTFIX] __result.UnitDefID: " + __result.UnitDefID); /* * Logger.Debug($"[UnitSpawnPointOverride_SelectTaggedUnitDef_POSTFIX] __result.GetRequiredToSpawnCompanyTagSet(): { String.Join(", ", __result.GetRequiredToSpawnCompanyTagSet().ToArray())}"); * Logger.Debug($"[UnitSpawnPointOverride_SelectTaggedUnitDef_POSTFIX] companyTags: { String.Join(", ", companyTags.ToArray())}"); * if (companyTags != null && !companyTags.ContainsAll(__result.GetRequiredToSpawnCompanyTagSet())) * { * Logger.Debug($"[UnitSpawnPointOverride_SelectTaggedUnitDef_POSTFIX] WARNING: {__result.UnitDefID} should NOT spawn yet!"); * } */ } catch (Exception e) { Logger.Error(e); } }
public static void Prefix(SimGameState __instance) { try { Logger.Debug($"[SimGameState_StartLanceConfiguration_PREFIX] Allow forced player units to be selected by tags..."); Contract contract; if (__instance.HasTravelContract) { contract = __instance.ActiveTravelContract; } else { contract = __instance.SelectedContract; } Logger.Debug($"[SimGameState_StartLanceConfiguration_PREFIX] contract.Name: {contract.Name}"); Logger.Debug($"[SimGameState_StartLanceConfiguration_PREFIX] contract.Override.player1Team.lanceOverrideList.Count: {contract.Override.player1Team.lanceOverrideList.Count}"); if (contract.Override != null && contract.Override.player1Team.lanceOverrideList.Count > 0) { Logger.Debug($"[SimGameState_StartLanceConfiguration_PREFIX] contract.Override.ID: {contract.Override.ID}"); Logger.Debug($"[SimGameState_StartLanceConfiguration_PREFIX] contract.Override.difficulty: {contract.Override.difficulty}"); Logger.Debug($"[SimGameState_StartLanceConfiguration_PREFIX] contract.Override.finalDifficulty: {contract.Override.finalDifficulty}"); foreach (UnitSpawnPointOverride unitSpawnPointOverride in contract.Override.player1Team.lanceOverrideList[0].unitSpawnPointOverrideList) { if (!string.IsNullOrEmpty(unitSpawnPointOverride.pilotDefId) && unitSpawnPointOverride.pilotDefId != UnitSpawnPointGameLogic.PilotDef_Commander && unitSpawnPointOverride.pilotDefId != UnitSpawnPointGameLogic.PilotDef_InheritLance && !__instance.DataManager.PilotDefs.Exists(unitSpawnPointOverride.pilotDefId)) { Logger.Debug($"[SimGameState_StartLanceConfiguration_PREFIX] unitSpawnPointOverride.pilotDefId: {unitSpawnPointOverride.pilotDefId}"); } if (!string.IsNullOrEmpty(unitSpawnPointOverride.unitDefId) && unitSpawnPointOverride.unitDefId != "mechDef_None" && !__instance.DataManager.MechDefs.Exists(unitSpawnPointOverride.unitDefId) && unitSpawnPointOverride.unitDefId == "Tagged") { Logger.Debug($"[SimGameState_StartLanceConfiguration_PREFIX] unitSpawnPointOverride.unitDefId: {unitSpawnPointOverride.unitDefId}"); // Add tags depending on difficulty on all non urbies if (!unitSpawnPointOverride.unitTagSet.Contains("unit_urbie")) { if (contract.Override.finalDifficulty >= 8) { unitSpawnPointOverride.unitTagSet.Add("unit_heavy"); } else if (contract.Override.finalDifficulty >= 5) { unitSpawnPointOverride.unitTagSet.Add("unit_medium"); } else if (contract.Override.finalDifficulty >= 0) { unitSpawnPointOverride.unitTagSet.Add("unit_light"); } } // Urbie else { unitSpawnPointOverride.unitExcludedTagSet.Clear(); if (contract.Override.finalDifficulty >= 8) { unitSpawnPointOverride.unitTagSet.Add("unit_components_plusplusplus"); } else if (contract.Override.finalDifficulty >= 6) { unitSpawnPointOverride.unitTagSet.Add("unit_components_plusplus"); } else if (contract.Override.finalDifficulty >= 4) { unitSpawnPointOverride.unitTagSet.Add("unit_components_plus"); } } // Clear spawn effects too (ie "spawn_poorly_maintained_25")? //unitSpawnPointOverride.spawnEffectTags.Clear(); Logger.Debug($"[SimGameState_StartLanceConfiguration_PREFIX] unitSpawnPointOverride.unitTagSet: {unitSpawnPointOverride.unitTagSet}"); // Select new mech UnitDef_MDD unitDef_MDD = UnitSpawnPointOverride.SelectTaggedUnitDef(MetadataDatabase.Instance, unitSpawnPointOverride.unitTagSet, unitSpawnPointOverride.unitExcludedTagSet, "unknown", "unknown", -1, null, null); Logger.Debug($"[SimGameState_StartLanceConfiguration_PREFIX] unitDef_MDD.UnitDefID: {unitDef_MDD.UnitDefID}"); // Set unitSpawnPointOverride.unitDefId = unitDef_MDD.UnitDefID; } } } } catch (Exception e) { Logger.Error(e); } }