public void OnInstalled(WorkOrderEntry_InstallComponent order, SimGameState state, MechDef mech) { Control.LogDebug(DType.ComponentInstall, $"- AutoLinked"); if (order.PreviousLocation != ChassisLocations.None) { foreach (var link in Links) { Control.LogDebug(DType.ComponentInstall, $"-- removing {link.ComponentDefId} from {link.Location}"); DefaultHelper.RemoveInventory(link.ComponentDefId, mech, link.Location, link.ComponentDefType ?? Def.ComponentType); } } if (order.DesiredLocation != ChassisLocations.None) { foreach (var link in Links) { Control.LogDebug(DType.ComponentInstall, $"-- adding {link.ComponentDefId} to {link.Location}"); DefaultHelper.AddInventory(link.ComponentDefId, mech, link.Location, link.ComponentDefType ?? Def.ComponentType, state); } } }
public void OnInstalled(WorkOrderEntry_InstallComponent order, SimGameState state, MechDef mech) { Control.LogDebug(DType.ComponentInstall, $"- Category"); if (order.PreviousLocation != ChassisLocations.None) { Control.LogDebug(DType.ComponentInstall, "-- removing"); MechComponentRef def_replace = DefaultFixer.Shared.GetReplaceFor(mech, CategoryID, order.PreviousLocation, state); if (def_replace != null) { Control.LogDebug(DType.ComponentInstall, $"--- added {def_replace.ComponentDefID}"); var inv = mech.Inventory.ToList(); inv.Add(def_replace); mech.SetInventory(inv.ToArray()); } } if (order.DesiredLocation == ChassisLocations.None) { return; } if (!CategoryDescriptor.AutoReplace || CategoryDescriptor.MaxEquiped < 0 && CategoryDescriptor.MaxEquipedPerLocation < 0) { Control.LogDebug(DType.ComponentInstall, $"-- {CategoryDescriptor.DisplayName} r:{CategoryDescriptor.AutoReplace} max:{CategoryDescriptor.MaxEquiped} mpr:{CategoryDescriptor.MaxEquipedPerLocation} = not requre replace"); return; } int n1 = mech.Inventory.Count(i => i.IsCategory(CategoryID)); int n2 = mech.Inventory.Count(i => i.MountedLocation == order.DesiredLocation && i.IsCategory(CategoryID)); #if CCDEBUG if (Control.Settings.DebugInfo.HasFlag(DType.ComponentInstall)) { Control.LogDebug(DType.ComponentInstall, "--- list:"); foreach (var def in mech.Inventory .Where(i => i.MountedLocation == order.DesiredLocation && i.IsCategory(CategoryID)) .Select(i => i.Def)) { Control.LogDebug(DType.ComponentInstall, $"---- list: {def.Description.Id}: Default:{def.IsDefault()}"); } } #endif Control.LogDebug(DType.ComponentInstall, $"-- total {n1}/{CategoryDescriptor.MaxEquiped} location: {n2}/{CategoryDescriptor.MaxEquipedPerLocation}"); var replace = mech.Inventory.FirstOrDefault(i => !i.IsModuleFixed(mech) && (i.MountedLocation == order.DesiredLocation || CategoryDescriptor.ReplaceAnyLocation) && i.IsCategory(CategoryID) && i.IsDefault()); Control.LogDebug(DType.ComponentInstall, $"-- possible replace: {(replace == null ? "not found" : replace.ComponentDefID)}"); if (replace == null) { return; } bool need_replace = (CategoryDescriptor.MaxEquiped > 0 && n1 > CategoryDescriptor.MaxEquiped) || (CategoryDescriptor.MaxEquipedPerLocation > 0 && n2 > CategoryDescriptor.MaxEquipedPerLocation); Control.LogDebug(DType.ComponentInstall, $"-- need_repalce: {need_replace}"); if (need_replace) { DefaultHelper.RemoveInventory(replace.ComponentDefID, mech, replace.MountedLocation, replace.ComponentDefType); } }