Esempio n. 1
0
        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;
            }
        }
Esempio n. 2
0
        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;
            }
        }
Esempio n. 3
0
        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;
            }
        }
Esempio n. 4
0
        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;
            }
        }