Exemplo n.º 1
0
            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];
            }
Exemplo n.º 2
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;
     }
 }
Exemplo n.º 3
0
        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);
                }
            }