public void ProcessState() { if (!Cache.Instance.InStation) { return; } if (Cache.Instance.InSpace) { return; } if (DateTime.UtcNow < Cache.Instance.LastInSpace.AddSeconds(10)) // we wait 20 seconds after we last thought we were in space before trying to do anything in station { return; } switch (_States.CurrentDropState) { case DropState.Idle: case DropState.Done: break; case DropState.Begin: if (Settings.Instance.DebugQuestorManager) { Logging.Log("Drop", "Entered: Begin", Logging.Debug); } _States.CurrentDropState = DropState.ReadyItemhangar; break; case DropState.ReadyItemhangar: if (Settings.Instance.DebugQuestorManager) { Logging.Log("Drop", "Entered: ReadyItemhangar", Logging.Debug); } if (DateTime.UtcNow.Subtract(_lastAction).TotalSeconds < 2) { return; } dropHangar = Cache.Instance.ItemHangar; if (DestinationHangarName == "Local Hangar") { if (Cache.Instance.ItemHangar == null) { return; } dropHangar = Cache.Instance.ItemHangar; } else if (DestinationHangarName == "Ship Hangar") { if (!Cache.Instance.OpenShipsHangar("Drop")) { return; } dropHangar = Cache.Instance.ShipHangar; } else { if (dropHangar != null && dropHangar.Window == null) { // No, command it to open //Cache.Instance.DirectEve.OpenCorporationHangar(); break; } if (dropHangar != null && !dropHangar.Window.IsReady) { return; } } Logging.Log("Drop", "Opening Hangar", Logging.White); _States.CurrentDropState = DropState.OpenCargo; break; case DropState.OpenCargo: if (Settings.Instance.DebugQuestorManager) { Logging.Log("Drop", "Entered: OpenCargo", Logging.Debug); } if (Cache.Instance.CurrentShipsCargo == null) { Logging.Log("OpenCargo", "if (Cache.Instance.CurrentShipsCargo == null)", Logging.Teal); return; } Logging.Log("Drop", "Opening Cargo Hold", Logging.White); _States.CurrentDropState = Item == 00 ? DropState.AllItems : DropState.MoveItems; break; case DropState.MoveItems: if (Settings.Instance.DebugQuestorManager) { Logging.Log("Drop", "Entered: MoveItems", Logging.Debug); } if (DateTime.UtcNow.Subtract(_lastAction).TotalSeconds < 2) { return; } if (Cache.Instance.CurrentShipsCargo == null) { Logging.Log("MoveItems", "if (Cache.Instance.CurrentShipsCargo == null)", Logging.Teal); return; } DirectItem dropItem; if (Unit == 00) { try { if (Settings.Instance.DebugQuestorManager) { Logging.Log("Drop", "Item TypeID is [" + Item + "]", Logging.Debug); } int iCount = 1; foreach (DirectItem ItemTest in Cache.Instance.CurrentShipsCargo.Items) { iCount++; if (Settings.Instance.DebugQuestorManager) { Logging.Log("Drop", "[" + iCount + "] ItemName: [" + ItemTest.TypeName + "]", Logging.Debug); } } if (Cache.Instance.CurrentShipsCargo.Items.Any(i => i.TypeId == Item)) { dropItem = Cache.Instance.CurrentShipsCargo.Items.FirstOrDefault(i => i.TypeId == Item); if (dropItem != null) { if (Settings.Instance.DebugQuestorManager) { Logging.Log("DropItem", "dropItem = [" + dropItem.TypeName + "]", Logging.Debug); } if (dropHangar != null) { dropHangar.Add(dropItem, dropItem.Quantity); } Logging.Log("Drop", "Moving all the items", Logging.White); _lastAction = DateTime.UtcNow; _States.CurrentDropState = DropState.WaitForMove; return; } } else { if (Settings.Instance.DebugQuestorManager) { Logging.Log("DropItem", "missing item with typeID of [" + Item + "]", Logging.Debug); } } } catch (Exception exception) { Logging.Log("Drop", "MoveItems (all): Exception [" + exception + "]", Logging.Debug); } return; } try { if (Settings.Instance.DebugQuestorManager) { Logging.Log("Drop", "Item = [" + Item + "]", Logging.Debug); } dropItem = Cache.Instance.CurrentShipsCargo.Items.FirstOrDefault(i => (i.TypeId == Item)); if (dropItem != null) { if (Settings.Instance.DebugQuestorManager) { Logging.Log("Drop", "Unit = [" + Unit + "]", Logging.Debug); } if (dropHangar != null) { dropHangar.Add(dropItem, Unit); } Logging.Log("Drop", "Moving item", Logging.White); _lastAction = DateTime.UtcNow; _States.CurrentDropState = DropState.WaitForMove; return; } } catch (Exception exception) { Logging.Log("Drop", "MoveItems: Exception [" + exception + "]", Logging.Debug); } break; case DropState.AllItems: if (Settings.Instance.DebugQuestorManager) { Logging.Log("Drop", "Entered: AllItems", Logging.Debug); } if (DateTime.UtcNow.Subtract(_lastAction).TotalSeconds < 2) { return; } List <DirectItem> allItem = Cache.Instance.CurrentShipsCargo.Items; if (allItem != null) { if (dropHangar != null) { dropHangar.Add(allItem); } Logging.Log("Drop", "Moving item", Logging.White); _lastAction = DateTime.UtcNow; _States.CurrentDropState = DropState.WaitForMove; return; } break; case DropState.WaitForMove: if (Settings.Instance.DebugQuestorManager) { Logging.Log("Drop", "Entered: WaitForMove", Logging.Debug); } // Wait 2 seconds after moving if (DateTime.UtcNow.Subtract(_lastAction).TotalSeconds < 2) { return; } if (Cache.Instance.DirectEve.GetLockedItems().Count == 0) { _States.CurrentDropState = DropState.StackItemsHangar; return; } if (DateTime.UtcNow.Subtract(_lastAction).TotalSeconds > 60) { Logging.Log("Drop", "Moving items timed out, clearing item locks", Logging.White); Cache.Instance.DirectEve.UnlockItems(); _States.CurrentDropState = DropState.StackItemsHangar; return; } break; case DropState.StackItemsHangar: if (Settings.Instance.DebugQuestorManager) { Logging.Log("Drop", "Entered: StackItemsHangar", Logging.Debug); } // Do not stack until 5 seconds after the cargo has cleared if (DateTime.UtcNow.Subtract(_lastAction).TotalSeconds < 5) { return; } // Stack everything if (dropHangar != null) { Logging.Log("Drop", "Stacking items", Logging.White); dropHangar.StackAll(); _lastAction = DateTime.UtcNow; _States.CurrentDropState = DropState.WaitForStacking; return; } break; case DropState.WaitForStacking: if (Settings.Instance.DebugQuestorManager) { Logging.Log("Drop", "Entered: WaitForStacking", Logging.Debug); } // Wait 5 seconds after stacking if (DateTime.UtcNow.Subtract(_lastAction).TotalSeconds < 5) { return; } if (Cache.Instance.DirectEve.GetLockedItems().Count == 0) { Logging.Log("Drop", "Done", Logging.White); _States.CurrentDropState = DropState.Done; return; } if (DateTime.UtcNow.Subtract(_lastAction).TotalSeconds > 120) { Logging.Log("Drop", "Stacking items timed out, clearing item locks", Logging.White); Cache.Instance.DirectEve.UnlockItems(); Logging.Log("Drop", "Done", Logging.White); _States.CurrentDropState = DropState.Done; return; } break; } }
public void ProcessState() { var cargo = Cache.Instance.DirectEve.GetShipsCargo(); var itemshangar = Cache.Instance.DirectEve.GetItemHangar(); DirectContainer corpAmmoHangar = null; if (!string.IsNullOrEmpty(Settings.Instance.AmmoHangar)) { corpAmmoHangar = Cache.Instance.DirectEve.GetCorporationHangar(Settings.Instance.AmmoHangar); } DirectContainer corpLootHangar = null; if (!string.IsNullOrEmpty(Settings.Instance.LootHangar)) { corpLootHangar = Cache.Instance.DirectEve.GetCorporationHangar(Settings.Instance.LootHangar); } DirectContainer lootContainer = null; if (!string.IsNullOrEmpty(Settings.Instance.LootContainer)) { long lootContainerID = itemshangar.Items.FirstOrDefault(i => i.GivenName != null && i.GivenName.ToLower() == Settings.Instance.LootContainer.ToLower()).ItemId; lootContainer = Cache.Instance.DirectEve.GetContainer(lootContainerID); } DirectContainer corpBookmarkHangar = null; if (!string.IsNullOrEmpty(Settings.Instance.BookmarkHangar)) { corpBookmarkHangar = Cache.Instance.DirectEve.GetCorporationHangar(Settings.Instance.BookmarkHangar); } switch (State) { case UnloadLootState.Idle: case UnloadLootState.Done: break; case UnloadLootState.Begin: if (cargo.Items.Count == 0) { State = UnloadLootState.Done; } Logging.Log("UnloadLoot: Opening station hangar"); State = UnloadLootState.OpenItemHangar; break; case UnloadLootState.OpenItemHangar: // Is the hangar open? if (itemshangar.Window == null) { // No, command it to open Cache.Instance.DirectEve.ExecuteCommand(DirectCmd.OpenHangarFloor); break; } // Not ready yet if (!itemshangar.IsReady) { break; } Logging.Log("UnloadLoot: Opening ship's cargo"); State = UnloadLootState.OpenShipsCargo; break; case UnloadLootState.OpenShipsCargo: // Is cargo open? if (cargo.Window == null) { // No, command it to open Cache.Instance.DirectEve.ExecuteCommand(DirectCmd.OpenCargoHoldOfActiveShip); break; } if (!cargo.IsReady) { break; } if (corpAmmoHangar != null || corpLootHangar != null) { //Logging.Log("UnloadLoot: Opening corporation hangar"); State = UnloadLootState.OpenCorpHangar; } else { //Logging.Log("UnloadLoot: CommonMissionCompletionitems"); State = UnloadLootState.MoveCommonMissionCompletionitems; } break; case UnloadLootState.OpenCorpHangar: // Is cargo open? var corpHangar = corpAmmoHangar ?? corpLootHangar; if (corpHangar != null) { if (corpHangar.Window == null) { // No, command it to open Logging.Log("UnloadLoot: Opening corporation hangar"); Cache.Instance.DirectEve.OpenCorporationHangar(); break; } if (!corpHangar.IsReady) { break; } } Logging.Log("UnloadLoot: Moving Common Mission Completion items"); State = UnloadLootState.MoveCommonMissionCompletionitems; break; case UnloadLootState.MoveCommonMissionCompletionitems: var CommonMissionCompletionItemHangar = itemshangar; // // how do we get IsMissionItem to work for us here? (see ItemCache) // Zbikoki's Hacker Card 28260, Reports 3814, Gate Key 2076, Militants 25373, Marines 3810, i.groupid == 314 (Misc Mission Items, mainly for storylines) and i.GroupId == 283 (Misc Mission Items, mainly for storylines) // var ItemsToMove = cargo.Items.Where(i => i.TypeId == 17192 || i.TypeId == 2076 || i.TypeId == 3814 || i.TypeId == 17206 || i.TypeId == 28260 || i.GroupId == 283 || i.GroupId == 314); CommonMissionCompletionItemHangar.Add(ItemsToMove); _lastAction = DateTime.Now; Logging.Log("UnloadLoot: Moving Common Mission Completion Items to Local hangar"); State = UnloadLootState.MoveLoot; break; case UnloadLootState.MoveLoot: var lootHangar = corpLootHangar ?? lootContainer ?? itemshangar; var lootToMove = cargo.Items.Where(i => (i.TypeName ?? string.Empty).ToLower() != Cache.Instance.BringMissionItem && !Settings.Instance.Ammo.Any(a => a.TypeId == i.TypeId)); LootValue = 0; foreach (var item in lootToMove) { if (!Cache.Instance.InvTypesById.ContainsKey(item.TypeId)) { continue; } var invType = Cache.Instance.InvTypesById[item.TypeId]; LootValue += (invType.MedianBuy ?? 0) * Math.Max(item.Quantity, 1); } // Move loot to the loot hangar lootHangar.Add(lootToMove); _lastAction = DateTime.Now; Logging.Log("UnloadLoot: Loot was worth an estimated [" + LootValue.ToString("#,##0") + "] isk in buy-orders"); //Move bookmarks to the bookmarks hangar if (!string.IsNullOrEmpty(Settings.Instance.BookmarkHangar) && Settings.Instance.CreateSalvageBookmarks == true) { Logging.Log("UnloadLoot: Creating salvage bookmarks in hangar"); var bookmarks = Cache.Instance.BookmarksByLabel(Settings.Instance.BookmarkPrefix + " "); List <long> salvageBMs = new List <long>(); foreach (DirectBookmark bookmark in bookmarks) { salvageBMs.Add((long)bookmark.BookmarkId); if (salvageBMs.Count == 5) { itemshangar.AddBookmarks(salvageBMs); salvageBMs.Clear(); } } if (salvageBMs.Count > 0) { itemshangar.AddBookmarks(salvageBMs); salvageBMs.Clear(); } } Logging.Log("UnloadLoot: Moving ammo"); State = UnloadLootState.MoveAmmo; break; case UnloadLootState.MoveAmmo: // Wait 5 seconds after moving if (DateTime.Now.Subtract(_lastAction).TotalSeconds < 5) { break; } var ammoHangar = corpAmmoHangar ?? itemshangar; // Move the mission item & ammo to the ammo hangar ammoHangar.Add(cargo.Items.Where(i => ((i.TypeName ?? string.Empty).ToLower() == Cache.Instance.BringMissionItem || Settings.Instance.Ammo.Any(a => a.TypeId == i.TypeId)))); _lastAction = DateTime.Now; Logging.Log("UnloadLoot: Waiting for items to move"); State = UnloadLootState.WaitForMove; break; case UnloadLootState.WaitForMove: if (cargo.Items.Count != 0) { _lastAction = DateTime.Now; break; } // Wait x seconds after moving if (DateTime.Now.Subtract(_lastAction).TotalSeconds < 2) { break; } if (Cache.Instance.DirectEve.GetLockedItems().Count == 0) { if (corpBookmarkHangar != null && Settings.Instance.CreateSalvageBookmarks) { Logging.Log("UnloadLoot: Moving salvage bookmarks to corp hangar"); corpBookmarkHangar.Add(itemshangar.Items.Where(i => i.TypeId == 51)); } Logging.Log("UnloadLoot: Stacking items"); State = UnloadLootState.StackItemsHangar; break; } if (DateTime.Now.Subtract(_lastAction).TotalSeconds > 120) { Logging.Log("UnloadLoot: Moving items timed out, clearing item locks"); Cache.Instance.DirectEve.UnlockItems(); Logging.Log("UnloadLoot: Stacking items"); State = UnloadLootState.StackItemsHangar; break; } break; case UnloadLootState.StackItemsHangar: // Don't stack until 5 seconds after the cargo has cleared if (DateTime.Now.Subtract(_lastAction).TotalSeconds < 5) { break; } // Stack everything if (corpAmmoHangar == null || corpLootHangar == null || lootContainer == null) // Only stack if we moved something { itemshangar.StackAll(); _lastAction = DateTime.Now; } State = UnloadLootState.StackItemsCorpAmmo; break; case UnloadLootState.StackItemsCorpAmmo: if (Settings.Instance.AmmoHangar != string.Empty) { // Don't stack until 5 seconds after the cargo has cleared if (DateTime.Now.Subtract(_lastAction).TotalSeconds < 5) { break; } // Stack everything if (corpAmmoHangar != null) { corpAmmoHangar.StackAll(); _lastAction = DateTime.Now; } } State = UnloadLootState.StackItemsCorpLoot; break; case UnloadLootState.StackItemsCorpLoot: if (Settings.Instance.LootHangar != string.Empty) { // Don't stack until 5 seconds after the cargo has cleared if (DateTime.Now.Subtract(_lastAction).TotalSeconds < 5) { break; } // Stack everything if (corpLootHangar != null) { corpLootHangar.StackAll(); _lastAction = DateTime.Now; } } State = UnloadLootState.StackItemsLootContainer; break; case UnloadLootState.StackItemsLootContainer: if (Settings.Instance.LootContainer != string.Empty) { // Don't stack until 5 seconds after the cargo has cleared if (DateTime.Now.Subtract(_lastAction).TotalSeconds < 5) { break; } // Stack everything if (lootContainer != null) { lootContainer.StackAll(); _lastAction = DateTime.Now; } } State = UnloadLootState.WaitForStacking; break; case UnloadLootState.WaitForStacking: // Wait 5 seconds after stacking if (DateTime.Now.Subtract(_lastAction).TotalSeconds < 5) { break; } if (Cache.Instance.DirectEve.GetLockedItems().Count == 0) { Logging.Log("UnloadLoot: Done"); State = UnloadLootState.Done; break; } if (DateTime.Now.Subtract(_lastAction).TotalSeconds > 120) { Logging.Log("UnloadLoot: Stacking items timed out, clearing item locks"); Cache.Instance.DirectEve.UnlockItems(); Logging.Log("UnloadLoot: Done"); State = UnloadLootState.Done; break; } break; } }
public void ProcessState() { var cargo = Cache.Instance.DirectEve.GetShipsCargo(); var hangar = Cache.Instance.DirectEve.GetItemHangar(); DirectContainer corpAmmoHangar = null; if (!string.IsNullOrEmpty(Settings.Instance.AmmoHangar)) { corpAmmoHangar = Cache.Instance.DirectEve.GetCorporationHangar(Settings.Instance.AmmoHangar); } DirectContainer corpLootHangar = null; if (!string.IsNullOrEmpty(Settings.Instance.LootHangar)) { corpLootHangar = Cache.Instance.DirectEve.GetCorporationHangar(Settings.Instance.LootHangar); } switch (State) { case UnloadLootState.Idle: case UnloadLootState.Done: break; case UnloadLootState.Begin: Logging.Log("UnloadLoot: Opening station hangar"); State = UnloadLootState.OpenItemHangar; break; case UnloadLootState.OpenItemHangar: // Is the hangar open? if (hangar.Window == null) { // No, command it to open Cache.Instance.DirectEve.ExecuteCommand(DirectCmd.OpenHangarFloor); break; } // Not ready yet if (!hangar.IsReady) { break; } Logging.Log("UnloadLoot: Opening ship's cargo"); State = UnloadLootState.OpenShipsCargo; break; case UnloadLootState.OpenShipsCargo: // Is cargo open? if (cargo.Window == null) { // No, command it to open Cache.Instance.DirectEve.ExecuteCommand(DirectCmd.OpenCargoHoldOfActiveShip); break; } if (!cargo.IsReady) { break; } if (corpAmmoHangar != null || corpLootHangar != null) { Logging.Log("UnloadLoot: Opening corporation hangar"); State = UnloadLootState.OpenCorpHangar; } else { Logging.Log("UnloadLoot: Moving items"); State = UnloadLootState.MoveLoot; } break; case UnloadLootState.OpenCorpHangar: // Is cargo open? var corpHangar = corpAmmoHangar ?? corpLootHangar; if (corpHangar != null) { if (corpHangar.Window == null) { // No, command it to open Cache.Instance.DirectEve.OpenCorporationHangar(); break; } if (!corpHangar.IsReady) { break; } } Logging.Log("UnloadLoot: Moving loot"); State = UnloadLootState.MoveLoot; break; case UnloadLootState.MoveLoot: var lootHangar = corpLootHangar ?? hangar; var lootToMove = cargo.Items.Where(i => (i.Name ?? string.Empty).ToLower() != Cache.Instance.BringMissionItem && !Settings.Instance.Ammo.Any(a => a.TypeId == i.TypeId)); LootValue = 0; foreach (var item in lootToMove) { if (!Cache.Instance.InvTypesById.ContainsKey(item.TypeId ?? -1)) { continue; } var invType = Cache.Instance.InvTypesById[item.TypeId ?? -1]; LootValue += (invType.MedianBuy ?? 0) * Math.Max(item.Quantity ?? -1, 1); } // Move loot to the loot hangar lootHangar.Add(lootToMove); _lastAction = DateTime.Now; Logging.Log("UnloadLoot: Loot was worth an estimated [" + LootValue.ToString("#,##0") + "] isk in buy-orders"); Logging.Log("UnloadLoot: Moving ammo"); State = UnloadLootState.MoveAmmo; break; case UnloadLootState.MoveAmmo: // Wait 5 seconds after moving if (DateTime.Now.Subtract(_lastAction).TotalSeconds < 5) { break; } var ammoHangar = corpAmmoHangar ?? hangar; // Move the mission item & ammo to the ammo hangar ammoHangar.Add(cargo.Items.Where(i => ((i.Name ?? string.Empty).ToLower() == Cache.Instance.BringMissionItem || Settings.Instance.Ammo.Any(a => a.TypeId == i.TypeId)))); _lastAction = DateTime.Now; Logging.Log("UnloadLoot: Waiting for items to move"); State = UnloadLootState.WaitForMove; break; case UnloadLootState.WaitForMove: if (cargo.Items.Count != 0) { _lastAction = DateTime.Now; break; } // Wait 5 seconds after moving if (DateTime.Now.Subtract(_lastAction).TotalSeconds < 5) { break; } if (Cache.Instance.DirectEve.GetLockedItems().Count == 0) { Logging.Log("UnloadLoot: Stacking items"); State = UnloadLootState.StackItems; break; } if (DateTime.Now.Subtract(_lastAction).TotalSeconds > 120) { Logging.Log("UnloadLoot: Moving items timed out, clearing item locks"); Cache.Instance.DirectEve.UnlockItems(); Logging.Log("UnloadLoot: Stacking items"); State = UnloadLootState.StackItems; break; } break; case UnloadLootState.StackItems: // Dont stack until 5 seconds after the cargo has cleared if (DateTime.Now.Subtract(_lastAction).TotalSeconds < 5) { break; } // Stack everything _lastAction = DateTime.Now; hangar.StackAll(); if (corpAmmoHangar != null) { corpAmmoHangar.StackAll(); } if (corpLootHangar != null) { corpLootHangar.StackAll(); } State = UnloadLootState.WaitForStacking; break; case UnloadLootState.WaitForStacking: // Wait 5 seconds after stacking if (DateTime.Now.Subtract(_lastAction).TotalSeconds < 5) { break; } if (Cache.Instance.DirectEve.GetLockedItems().Count == 0) { Logging.Log("UnloadLoot: Done"); State = UnloadLootState.Done; break; } if (DateTime.Now.Subtract(_lastAction).TotalSeconds > 120) { Logging.Log("UnloadLoot: Stacking items timed out, clearing item locks"); Cache.Instance.DirectEve.UnlockItems(); Logging.Log("UnloadLoot: Done"); State = UnloadLootState.Done; break; } break; } }
public void ProcessState() { DirectContainer _hangar = null; var cargo = DirectEve.Instance.GetShipsCargo(); if ("Local Hangar" == Hangar) { _hangar = DirectEve.Instance.GetItemHangar(); } else if ("Ship Hangar" == Hangar) { _hangar = DirectEve.Instance.GetShipHangar(); } else { _hangar = DirectEve.Instance.GetCorporationHangar(Hangar); } switch (State) { case StateDrop.Idle: case StateDrop.Done: break; case StateDrop.Begin: State = StateDrop.OpenItemHangar; break; case StateDrop.OpenItemHangar: if (DateTime.Now.Subtract(_lastAction).TotalSeconds < 2) { break; } if ("Local Hangar" == Hangar) { // Is the hangar open? if (_hangar.Window == null) { // No, command it to open DirectEve.Instance.ExecuteCommand(DirectCmd.OpenHangarFloor); break; } if (!_hangar.IsReady) { break; } } else if ("Ship Hangar" == Hangar) { if (_hangar.Window == null) { // No, command it to open DirectEve.Instance.ExecuteCommand(DirectCmd.OpenShipHangar); break; } if (!_hangar.IsReady) { break; } } else { if (_hangar.Window == null) { // No, command it to open DirectEve.Instance.OpenCorporationHangar(); break; } if (!_hangar.IsReady) { break; } } Logging.Log("Drop: Opening Hangar"); State = StateDrop.OpenCargo; break; case StateDrop.OpenCargo: if (DateTime.Now.Subtract(_lastAction).TotalSeconds < 2) { break; } // Is cargo open? if (cargo.Window == null) { // No, command it to open DirectEve.Instance.ExecuteCommand(DirectCmd.OpenCargoHoldOfActiveShip); break; } if (!cargo.IsReady) { break; } Logging.Log("Drop: Opening Cargo Hold"); if (Item == 00) { State = StateDrop.AllItems; } else { State = StateDrop.MoveItems; } break; case StateDrop.MoveItems: if (DateTime.Now.Subtract(_lastAction).TotalSeconds < 2) { break; } if (Unit == 00) { var DropItem = cargo.Items.FirstOrDefault(i => (i.TypeId == Item)); if (DropItem != null) { _hangar.Add(DropItem, DropItem.Quantity); Logging.Log("Drop: Moving all the items"); _lastAction = DateTime.Now; State = StateDrop.WaitForMove; } } else { var DropItem = cargo.Items.FirstOrDefault(i => (i.TypeId == Item)); if (DropItem != null) { _hangar.Add(DropItem, Unit); Logging.Log("Drop: Moving item"); _lastAction = DateTime.Now; State = StateDrop.WaitForMove; } } break; case StateDrop.AllItems: if (DateTime.Now.Subtract(_lastAction).TotalSeconds < 2) { break; } var AllItem = cargo.Items; if (AllItem != null) { _hangar.Add(AllItem); Logging.Log("Drop: Moving item"); _lastAction = DateTime.Now; State = StateDrop.WaitForMove; } break; case StateDrop.WaitForMove: if (cargo.Items.Count != 0) { _lastAction = DateTime.Now; break; } // Wait 5 seconds after moving if (DateTime.Now.Subtract(_lastAction).TotalSeconds < 5) { break; } if (DirectEve.Instance.GetLockedItems().Count == 0) { State = StateDrop.StackItemsHangar; break; } if (DateTime.Now.Subtract(_lastAction).TotalSeconds > 120) { Logging.Log("Drop: Moving items timed out, clearing item locks"); DirectEve.Instance.UnlockItems(); State = StateDrop.StackItemsHangar; break; } break; case StateDrop.StackItemsHangar: // Dont stack until 5 seconds after the cargo has cleared if (DateTime.Now.Subtract(_lastAction).TotalSeconds < 5) { break; } // Stack everything if (_hangar != null) { Logging.Log("Drop: Stacking items"); _hangar.StackAll(); _lastAction = DateTime.Now; } State = StateDrop.WaitForStacking; break; case StateDrop.WaitForStacking: // Wait 5 seconds after stacking if (DateTime.Now.Subtract(_lastAction).TotalSeconds < 5) { break; } if (DirectEve.Instance.GetLockedItems().Count == 0) { Logging.Log("Drop: Done"); State = StateDrop.Done; break; } if (DateTime.Now.Subtract(_lastAction).TotalSeconds > 120) { Logging.Log("Drop: Stacking items timed out, clearing item locks"); DirectEve.Instance.UnlockItems(); Logging.Log("Drop: Done"); State = StateDrop.Done; break; } break; } }