internal static void PerformCraft() { for (int i = Crafts.Count - 1; i > -1; i--) { var craft = Crafts[i]; if (craft.TechType != TechType.None && craft.Manager != null) { if (!craft.IsCraftable) { continue; } var techData = DSSHelpers.CheckIfTechDataAvailable(craft, out var pass); if (pass) { if (craft.Manager.RemoveItems(techData.Ingredients)) { foreach (TechType item in techData.LinkedItems) { craft.Manager.AddItemToContainer(item.ToInventoryItem()); } for (int j = 0; j < techData.craftAmount; j++) { craft.Manager.AddItemToContainer(craft.TechType.ToInventoryItem()); } } } } } }
private void PerformTakeOperation(TechType techType) { QuickLogger.Debug("Perform Take Operation", true); foreach (DSSRackController baseUnit in BaseRacks) { if (baseUnit.HasItem(techType)) { var data = baseUnit.GetItemDataFromServer(techType); QuickLogger.Debug("Calling Take", true); var result = baseUnit.GivePlayerItem(techType, data); if (!result) { return; //TODO Add Message } return; } } //Check connectables foreach (KeyValuePair <string, FCSConnectableDevice> fcsConnectable in FCSConnectables) { Vector2int itemSize = CraftData.GetItemSize(techType); if (fcsConnectable.Value.ContainsItem(techType) && Inventory.main.HasRoomFor(itemSize.x, itemSize.y)) { var item = fcsConnectable.Value.RemoveItemFromContainer(techType, 1); if (item == null) { continue; } DSSHelpers.GivePlayerItem(item); break; } } }
private void UpdateDockedVehicles() { _vehiclesSnapshot = new List <Vehicle>(Vehicles); Vehicles.Clear(); ItemsTracker.Clear(); foreach (var dockingBay in DockingBays) { var vehicle = dockingBay.GetDockedVehicle(); if (vehicle != null) { vehicle.modules.onRemoveItem += ModulesOnRemoveItem; var vehicleContainers = DSSHelpers.GetVehicleContainers(vehicle); ItemsTracker.Add(vehicle, GetItems(vehicleContainers)); _trackedContainers.AddRange(vehicleContainers); Vehicles.Add(vehicle); UpdateSubscription(vehicleContainers, true, vehicle); } } if (_prevContainerAmount != _trackedContainers.Count) { _manager.OnContainerUpdate?.Invoke(_manager); } _prevContainerAmount = _trackedContainers.Count; _trackedContainers.Clear(); }
public void GivePlayerItem() { var result = DSSHelpers.GivePlayerItem(QPatch.Server.TechType, new ObjectDataTransferData { data = _items, Filters = _filters, IsServer = true }, null); if (result) { _items = null; } QuickLogger.Debug($"Items result: {_items} || Result = {result}"); }
internal bool IsAllowedToAdd(Vehicle vehicle, Pickupable pickupable) { var containers = DSSHelpers.GetVehicleContainers(vehicle); foreach (ItemsContainer container in containers) { if (container.HasRoomFor(pickupable)) { return(true); } } return(false); }
internal ItemsContainer AddItem(Vehicle vehicle, InventoryItem item) { var containers = DSSHelpers.GetVehicleContainers(vehicle); foreach (ItemsContainer container in containers) { if (container.HasRoomFor(item.width, item.height)) { return(container); } } return(null); }
internal void OpenContainer(Vehicle vehicle, ItemsContainer container) { var containers = DSSHelpers.GetVehicleContainers(vehicle); foreach (ItemsContainer currentContainer in containers) { if (container != currentContainer) { continue; } Player main = Player.main; PDA pda = main.GetPDA(); Inventory.main.SetUsedStorage(container, false); pda.Open(PDATab.Inventory, null, null, 4f); break; } }
private void OnDockedVehicleChanged() { UpdateDockedVehicles(); _newlyDockedVehicle = Vehicles.Except(_vehiclesSnapshot); _tryExtractItems = StartCoroutine(TryExtractItems()); var list3 = _vehiclesSnapshot.Except(Vehicles); // Un-subscribe all undocked vehicles foreach (Vehicle vehicle in list3) { var vehicleContainers = DSSHelpers.GetVehicleContainers(vehicle); UpdateSubscription(vehicleContainers, false, vehicle); } _manager.OnVehicleUpdate?.Invoke(Vehicles, _manager); }
public static void PerformCraft(FCSOperation craft) { var techData = DSSHelpers.CheckIfTechDataAvailable(craft, out var pass); if (pass) { if (craft.Manager.RemoveItems(techData.Ingredients)) { foreach (TechType item in techData.LinkedItems) { craft.Manager.AddItemToContainer(item.ToInventoryItem()); } for (int j = 0; j < techData.craftAmount; j++) { craft.Manager.AddItemToContainer(craft.TechType.ToInventoryItem()); } } } }
private void OnLoadVehicleContainersGrid(DisplayData data) { try { if (_isBeingDestroyed) { return; } _vehicleContainersGrid?.ClearPage(); var grouped = DSSHelpers.GetVehicleContainers(_currentVehicle); if (grouped == null) { return; } QuickLogger.Debug($"Vehicle Count to process: {grouped.Count}"); if (data.EndPosition > grouped.Count) { data.EndPosition = grouped.Count; } if (data.ItemsGrid?.transform == null) { return; } QuickLogger.Debug($"Adding Vehicles"); for (int i = data.StartPosition; i < data.EndPosition; i++) { if (grouped[i] == null) { continue; } GameObject buttonPrefab = Instantiate(data.ItemsPrefab); if (buttonPrefab == null || data.ItemsGrid == null) { if (buttonPrefab != null) { QuickLogger.Debug("Destroying Tab", true); Destroy(buttonPrefab); } return; } CreateButton(data, buttonPrefab, new ButtonData { Container = grouped[i] }, ButtonType.Container, i.ToString(), "VehicleContainerBTN"); } _vehicleContainersGrid?.UpdaterPaginator(grouped.Count); } catch (Exception e) { QuickLogger.Error("Error Caught"); QuickLogger.Error($"Error Message: {e.Message}"); QuickLogger.Error($"Error StackTrace: {e.StackTrace}"); } }
private Pickupable PerformTakeOperation(TechType techType) { QuickLogger.Debug("Perform Take Operation", true); foreach (DSSRackController baseUnit in BaseRacks) { if (baseUnit.HasItem(techType)) { var data = baseUnit.GetItemDataFromServer(techType, out RackSlot slot); QuickLogger.Debug("Calling Take", true); if (GivePlayerItem) { var result = baseUnit.GivePlayerItem(techType, data); if (!result) { return(null); //TODO Add Message } } else { slot.Remove((ObjectData)data.data); GivePlayerItem = true; } return(data.ToPickable(techType)); } } if (!TakeFromConnectables) { TakeFromConnectables = true; return(null); } //Check connectables foreach (KeyValuePair <string, FCSConnectableDevice> fcsConnectable in FCSConnectables) { Vector2int itemSize = CraftData.GetItemSize(techType); if (fcsConnectable.Value.ContainsItem(techType) && fcsConnectable.Value.IsVisible && !fcsConnectable.Value.IsBase() && fcsConnectable.Value.IsOperational()) { var item = fcsConnectable.Value.RemoveItemFromContainer(techType, 1); if (item == null) { continue; } if (GivePlayerItem) { DSSHelpers.GivePlayerItem(item); } GivePlayerItem = true; Mod.OnBaseUpdate?.Invoke(); return(item); } } return(null); }
private IEnumerator TryExtractItems() { if (!_isToggled) { yield break; } if (_extractingItems) { yield break; } if (!QPatch.Configuration.Config.PullFromDockedVehicles) { yield break; } Dictionary <string, int> extractionResults = new Dictionary <string, int>(); List <Vehicle> localVehicles = _newlyDockedVehicle?.ToList(); //Vehicles.ToList(); if (localVehicles == null) { yield break; } foreach (var vehicle in localVehicles) { var vehicleName = vehicle.GetName(); extractionResults[vehicleName] = 0; var vehicleContainers = DSSHelpers.GetVehicleContainers(vehicle); bool couldNotAdd = false; foreach (var vehicleContainer in vehicleContainers) { foreach (var item in vehicleContainer.ToList()) { if (!QPatch.Configuration.Config.PullFromDockedVehicles) { break; } if (ValidateCheck(item)) { continue; } if (_manager.CanBeStored(1, item.item.GetTechType())) { var success = _manager.AddItemToContainer(item); if (success) { extractionResults[vehicleName]++; if (_extractingItems == false) { ErrorMessage.AddDebug("Extracting items from vehicle storage..."); } _extractingItems = true; yield return(new WaitForSeconds(QPatch.Configuration.Config.ExtractInterval)); } else { couldNotAdd = true; break; } } else { couldNotAdd = true; break; } } if (couldNotAdd || !QPatch.Configuration.Config.PullFromDockedVehicles) { break; } } } _extractingItems = false; _newlyDockedVehicle = null; }
private void OnLoadAutoCraftItemsGrid(DisplayData data) { if (_isBeingDestroyed || _mono == null || _mono?.Manager == null) { return; } _autocraftItemTechTypeGrid.ClearPage(); _autoCraftItemTechTypeList.Clear(); var grouped = Mod.AllTechTypes.Where(DSSHelpers.CheckIfTechDataAvailable).ToList(); if (!string.IsNullOrEmpty(_autocraftItemSearchString?.Trim())) { grouped = grouped.Where(p => Language.main.Get(p).StartsWith(_autocraftItemSearchString.Trim(), StringComparison.OrdinalIgnoreCase)).ToList(); } if (data.EndPosition > grouped.Count) { data.EndPosition = grouped.Count; } if (data.ItemsGrid?.transform == null) { QuickLogger.Debug("Grid returned null canceling operation"); return; } for (int i = data.StartPosition; i < data.EndPosition; i++) { GameObject buttonPrefab = GameObject.Instantiate(DSSModelPrefab.OperatorItemPrefab); if (buttonPrefab == null || data.ItemsGrid == null) { if (buttonPrefab != null) { QuickLogger.Debug("Destroying Tab", true); Destroy(buttonPrefab); } return; } var button = buttonPrefab.AddComponent <OperationInterfaceButton>(); if (grouped[i] == _craftTechType) { button.SetCheck(true); } buttonPrefab.transform.SetParent(data.ItemsGrid.transform, false); button.BtnName = "AutoCraftItemTechBTN"; button.OnButtonClick = OnButtonClick; button.STARTING_COLOR = _startColor; button.HOVER_COLOR = _hoverColor; button.Tag = new OperatorButtonData { Button = button, TechType = grouped[i] }; button.TextLineOne = DSSHelpers.GetTechDataString(grouped[i]); //buttonPrefab.GetComponentInChildren<Text>().text = Language.main.Get(grouped[i]); uGUI_Icon icon = InterfaceHelpers.FindGameObject(buttonPrefab, "Icon").AddComponent <uGUI_Icon>(); icon.sprite = SpriteManager.Get(grouped[i]); _autoCraftItemTechTypeList.Add(button); } _autocraftItemTechTypeGrid.UpdaterPaginator(grouped.Count); }