Exemple #1
0
        public void ProcessState()
        {
            // Nothing to salvage in stations
            if (Cache.Instance.InStation)
                return;

            var cargo = Cache.Instance.DirectEve.GetShipsCargo();
            switch (State)
            {
                case ScoopState.TargetHostileWrecks:
                    //TargetHostileWrecks();

                    // Next state
                    State = ScoopState.LootHostileWrecks;
                    break;

                case ScoopState.LootHostileWrecks:
                    LootHostileWrecks();

                    //State = ScoopState.SalvageHostileWrecks;
                    break;

                case ScoopState.SalvageHostileWrecks:
                    ActivateSalvagers();

                    // Default action
                    State = ScoopState.TargetHostileWrecks;
                    //if (cargo.IsReady && cargo.Items.Any() && _nextAction < DateTime.Now)
                    //{
                        // Check if there are actually duplicates
                    //    var duplicates = cargo.Items.Where(i => i.Quantity > 0).GroupBy(i => i.TypeId).Any(t => t.Count() > 1);
                    //    if (duplicates)
                    //        State = SalvageState.StackItems;
                    //    else
                    //        _nextAction = DateTime.Now.AddSeconds(150);
                    //}
                    break;

                case ScoopState.StackItemsWhileAggressed:
                    Logging.Log("Salvage: Stacking items");

                    if (cargo.IsReady)
                        cargo.StackAll();

                    _nextAction = DateTime.Now.AddSeconds(5);
                    State = ScoopState.WaitForStackingWhileAggressed;
                    break;

                case ScoopState.WaitForStackingWhileAggressed:
                    // Wait 5 seconds after stacking
                    if (_nextAction > DateTime.Now)
                        break;

                    if (Cache.Instance.DirectEve.GetLockedItems().Count == 0)
                    {
                        Logging.Log("Salvage: Done stacking");
                        State = ScoopState.TargetHostileWrecks;
                        break;
                    }

                    if (DateTime.Now.Subtract(_nextAction).TotalSeconds > 120)
                    {
                        Logging.Log("Salvage: Stacking items timed out, clearing item locks");
                        Cache.Instance.DirectEve.UnlockItems();

                        Logging.Log("Salvage: Done stacking");
                        State = ScoopState.TargetHostileWrecks;
                        break;
                    }
                    break;

                case ScoopState.Error:
                    // Wait indefinately...
                    break;

                default:
                    // Unknown state, goto first state
                    State = ScoopState.LootHostileWrecks;
                    break;
            }
        }
Exemple #2
0
        public void ProcessState()
        {
            // Nothing to salvage in stations
            if (Cache.Instance.InStation)
            {
                return;
            }

            var cargo = Cache.Instance.DirectEve.GetShipsCargo();

            switch (State)
            {
            case ScoopState.TargetHostileWrecks:
                //TargetHostileWrecks();

                // Next state
                State = ScoopState.LootHostileWrecks;
                break;

            case ScoopState.LootHostileWrecks:
                LootHostileWrecks();

                //State = ScoopState.SalvageHostileWrecks;
                break;

            case ScoopState.SalvageHostileWrecks:
                ActivateSalvagers();

                // Default action
                State = ScoopState.TargetHostileWrecks;
                //if (cargo.IsReady && cargo.Items.Any() && _nextAction < DateTime.Now)
                //{
                // Check if there are actually duplicates
                //    var duplicates = cargo.Items.Where(i => i.Quantity > 0).GroupBy(i => i.TypeId).Any(t => t.Count() > 1);
                //    if (duplicates)
                //        State = SalvageState.StackItems;
                //    else
                //        _nextAction = DateTime.Now.AddSeconds(150);
                //}
                break;

            case ScoopState.StackItemsWhileAggressed:
                Logging.Log("Salvage: Stacking items");

                if (cargo.IsReady)
                {
                    cargo.StackAll();
                }

                _nextAction = DateTime.Now.AddSeconds(5);
                State       = ScoopState.WaitForStackingWhileAggressed;
                break;

            case ScoopState.WaitForStackingWhileAggressed:
                // Wait 5 seconds after stacking
                if (_nextAction > DateTime.Now)
                {
                    break;
                }

                if (Cache.Instance.DirectEve.GetLockedItems().Count == 0)
                {
                    Logging.Log("Salvage: Done stacking");
                    State = ScoopState.TargetHostileWrecks;
                    break;
                }

                if (DateTime.Now.Subtract(_nextAction).TotalSeconds > 120)
                {
                    Logging.Log("Salvage: Stacking items timed out, clearing item locks");
                    Cache.Instance.DirectEve.UnlockItems();

                    Logging.Log("Salvage: Done stacking");
                    State = ScoopState.TargetHostileWrecks;
                    break;
                }
                break;

            case ScoopState.Error:
                // Wait indefinately...
                break;

            default:
                // Unknown state, goto first state
                State = ScoopState.LootHostileWrecks;
                break;
            }
        }