Esempio n. 1
0
        private void PickupFromCorporateHangarArray()
        {
            var methodName = "PickupFromCorporateHangarArray";

            LogTrace(methodName);

            if (!IsAtPickup())
            {
                _freighterState = FreighterStates.MoveToPickup;
                _corporateHangarArrayPickupState = CorporateHangarArrayDropOffStates.Idle;

                LogMessage(methodName, LogSeverityTypes.Standard, "No longer at pickup location, moving back to it.");
            }

            LogMessage(methodName, LogSeverityTypes.Debug, "Processing state: {0}", _corporateHangarArrayPickupState);

            var corporateHangarArrayEntity = Core.StealthBot.EntityProvider.EntityWrappers.FirstOrDefault(
                entity => entity.ID == Core.StealthBot.Config.CargoConfig.PickupLocation.EntityID);

            if (corporateHangarArrayEntity == null)
            {
                LogMessage(methodName, LogSeverityTypes.Debug, "Error: Could not find entity with ID {0} for corporate hangar array pickup.",
                           Core.StealthBot.Config.CargoConfig.PickupLocation.EntityID);
                _freighterState = FreighterStates.Error;
                return;
            }

            var pickupCorporateHangarArray = new CorporateHangarArray(corporateHangarArrayEntity, _eveWindowProvider);

            switch (_corporateHangarArrayPickupState)
            {
            case CorporateHangarArrayDropOffStates.Idle:
                _corporateHangarArrayPickupState = CorporateHangarArrayDropOffStates.OpenCan;
                goto case CorporateHangarArrayDropOffStates.OpenCan;

            case CorporateHangarArrayDropOffStates.OpenCan:
                if (!pickupCorporateHangarArray.IsCurrentContainerWindowOpen)
                {
                    LogMessage(methodName, LogSeverityTypes.Standard, "Opening cargo of CHA {0} ({1}).",
                               pickupCorporateHangarArray.CurrentContainer.Name, pickupCorporateHangarArray.CurrentContainer.ID);
                    pickupCorporateHangarArray.CurrentContainer.Open();
                    return;
                }

                LogMessage(methodName, LogSeverityTypes.Standard, "Expanding the array's corporate hangars tab.");
                pickupCorporateHangarArray.InitializeCorporateHangars();

                _corporateHangarArrayPickupState = CorporateHangarArrayDropOffStates.MakeChaChildWindowActive;
                break;

            case CorporateHangarArrayDropOffStates.MakeChaChildWindowActive:
                if (!pickupCorporateHangarArray.IsCurrentContainerWindowActive)
                {
                    LogMessage(methodName, LogSeverityTypes.Standard, "Making CHA {0} cargo window active.",
                               pickupCorporateHangarArray.CurrentContainer.Name);
                    pickupCorporateHangarArray.MakeCurrentContainerWindowActive();
                    return;
                }

                _corporateHangarArrayPickupState = CorporateHangarArrayDropOffStates.UnloadCargoHold;
                break;

            case CorporateHangarArrayDropOffStates.UnloadCargoHold:
                LogMessage(methodName, LogSeverityTypes.Standard, "Transferring cargo from the pickup corp hangar array to ship cargo.");

                _ship.TransferCorporateHangarArrayToShipHangar(pickupCorporateHangarArray);

                _corporateHangarArrayPickupState = CorporateHangarArrayDropOffStates.StackCargo;
                break;

            case CorporateHangarArrayDropOffStates.StackCargo:
                //Stack my cargo and the CHA's.
                if (!_ship.IsCargoHoldActive)
                {
                    LogMessage(methodName, LogSeverityTypes.Standard, "Making my ship's cargo window active to stack cargo.");
                    _ship.MakeCargoHoldActive();
                    return;
                }

                _ship.StackInventory();

                _corporateHangarArrayPickupState = CorporateHangarArrayDropOffStates.Idle;
                _freighterState = FreighterStates.MoveToDropoff;
                break;
            }
        }
Esempio n. 2
0
        private BehaviorExecutionResults DropOffCargoToCorporateHangarArray()
        {
            var methodName = "DropoffAtCorpHangarArray";

            LogTrace(methodName);

            LogMessage(methodName, LogSeverityTypes.Debug, "Processing state: {0}", _corporateHangarArrayDropOffState);

            var dropoffCorporateHangarArrayEntity = _entityProvider.EntityWrappers.FirstOrDefault(
                entity => entity.ID == _cargoConfiguration.DropoffLocation.EntityID);

            if (dropoffCorporateHangarArrayEntity == null)
            {
                LogMessage(methodName, LogSeverityTypes.Debug, "Error: Could not find entity with ID {0} for corporate hangar array dropoff.",
                           _cargoConfiguration.DropoffLocation.EntityID);
                return(BehaviorExecutionResults.Error);
            }

            var dropoffCorporateHangarArray = new CorporateHangarArray(dropoffCorporateHangarArrayEntity, _eveWindowProvider);

            switch (_corporateHangarArrayDropOffState)
            {
            case CorporateHangarArrayDropOffStates.Idle:
                _corporateHangarArrayDropOffState = CorporateHangarArrayDropOffStates.OpenCan;
                goto case CorporateHangarArrayDropOffStates.OpenCan;

            case CorporateHangarArrayDropOffStates.OpenCan:
                if (!dropoffCorporateHangarArray.IsCurrentContainerWindowOpen)
                {
                    LogMessage(methodName, LogSeverityTypes.Debug, "Opening cargo of corporate hangar array \"{0}\" ({1}).",
                               dropoffCorporateHangarArray.CurrentContainer.Name, dropoffCorporateHangarArray.CurrentContainer.ID);
                    dropoffCorporateHangarArray.CurrentContainer.Open();
                    return(BehaviorExecutionResults.Incomplete);
                }

                LogMessage(methodName, LogSeverityTypes.Debug, "Expanding the corporate hangar array's inventory tab.");
                dropoffCorporateHangarArray.InitializeCorporateHangars();

                _corporateHangarArrayDropOffState = CorporateHangarArrayDropOffStates.MakeChaChildWindowActive;
                break;

            case CorporateHangarArrayDropOffStates.MakeChaChildWindowActive:
                if (!dropoffCorporateHangarArray.IsCurrentContainerWindowActive)
                {
                    LogMessage(methodName, LogSeverityTypes.Debug, "Making the cargo window for corporate hangar array \"{0}\" active.",
                               dropoffCorporateHangarArray.CurrentContainer.Name);
                    dropoffCorporateHangarArray.MakeCurrentContainerWindowActive();
                    return(BehaviorExecutionResults.Incomplete);
                }

                _corporateHangarArrayDropOffState = CorporateHangarArrayDropOffStates.UnloadCargoHold;
                break;

            case CorporateHangarArrayDropOffStates.UnloadCargoHold:
                if (dropoffCorporateHangarArray.IsActiveContainerFull)
                {
                    LogMessage(methodName, LogSeverityTypes.Critical, "Error: Corporate hangar array \"{0}\" is full.",
                               _cargoConfiguration.DropoffLocation.EntityID);
                    return(BehaviorExecutionResults.Error);
                }

                if (!_ship.IsCargoHoldActive)
                {
                    LogMessage(methodName, LogSeverityTypes.Debug, "Making ship cargo hold active before attempting to unload it.");
                    _ship.MakeCargoHoldActive();
                    return(BehaviorExecutionResults.Incomplete);
                }

                if (_mainConfiguration.ActiveBehavior == BotModes.Mining)
                {
                    _ship.TransferOreInCargoHoldToCorporateHangarArray(dropoffCorporateHangarArray);
                }
                else
                {
                    _ship.TransferCargoHoldToCorporateHangarArray(dropoffCorporateHangarArray);
                }

                _corporateHangarArrayDropOffState = CorporateHangarArrayDropOffStates.UnloadOreHold;
                return(BehaviorExecutionResults.Incomplete);

            case CorporateHangarArrayDropOffStates.UnloadOreHold:
                if (!_meCache.Ship.Ship.HasOreHold)
                {
                    _corporateHangarArrayDropOffState = CorporateHangarArrayDropOffStates.RearmCrystals;
                    goto case CorporateHangarArrayDropOffStates.RearmCrystals;
                }

                if (dropoffCorporateHangarArray.IsActiveContainerFull)
                {
                    LogMessage(methodName, LogSeverityTypes.Critical, "Error: Corporate hangar array \"{0}\" is full.",
                               _cargoConfiguration.DropoffLocation.EntityID);
                    return(BehaviorExecutionResults.Error);
                }

                if (!_ship.IsOreHoldActive)
                {
                    LogMessage(methodName, LogSeverityTypes.Debug, "Making ship ore hold active before attempting to unload it.");
                    _ship.MakeOreHoldActive();
                    return(BehaviorExecutionResults.Incomplete);
                }

                _ship.TransferOreHoldToCorporateHangarArray(dropoffCorporateHangarArray);

                _corporateHangarArrayDropOffState = CorporateHangarArrayDropOffStates.RearmCrystals;
                break;

            case CorporateHangarArrayDropOffStates.RearmCrystals:
                if (_mainConfiguration.ActiveBehavior != BotModes.Mining || _miningConfiguration.IsIceMining)
                {
                    _corporateHangarArrayDropOffState = CorporateHangarArrayDropOffStates.StackCargo;
                    goto case CorporateHangarArrayDropOffStates.StackCargo;
                }

                //If we're dropping off to an orca ship bay and it's at least half full, call for pickup.
                if (_cargoConfiguration.DropoffLocation.LocationType == LocationTypes.ShipBay)
                {
                    if (dropoffCorporateHangarArray.IsActiveContainerHalfFull)
                    {
                        LogMessage(methodName, LogSeverityTypes.Debug, "Sending pickup request for the ship bay.");
                        _eventCommunications.FleetNeedPickupEvent.SendEventFromArgs(
                            _meCache.CharId,
                            _meCache.SolarSystemId,
                            _cargoConfiguration.DropoffLocation.EntityID,
                            _entityProvider.EntityWrappersById[
                                _cargoConfiguration.DropoffLocation.EntityID].ID,
                            _meCache.Name);
                    }

                    _corporateHangarArrayDropOffState = CorporateHangarArrayDropOffStates.StackCargo;
                }
                else
                {
                    //If we're not dropping off to orca, see if we're good on crystals. If so, stack cargo.
                    var rearmComplete = _ship.RearmMiningCrystals(dropoffCorporateHangarArray);

                    if (!rearmComplete)
                    {
                        break;
                    }

                    _corporateHangarArrayDropOffState = CorporateHangarArrayDropOffStates.StackCargo;
                }
                break;

            case CorporateHangarArrayDropOffStates.StackCargo:
                //Stack my cargo and the CHA's.
                if (!dropoffCorporateHangarArray.IsCurrentContainerWindowActive)
                {
                    LogMessage(methodName, LogSeverityTypes.Debug, "Making the cargo window of corporate hangar array \"{0}\" active in order to stack cargo.",
                               dropoffCorporateHangarArray.CurrentContainer.Name);
                    dropoffCorporateHangarArray.MakeCurrentContainerWindowActive();
                    return(BehaviorExecutionResults.Incomplete);
                }

                _ship.StackInventory();

                _corporateHangarArrayDropOffState = CorporateHangarArrayDropOffStates.Idle;
                return(BehaviorExecutionResults.Complete);
            }

            return(BehaviorExecutionResults.Incomplete);
        }