Exemple #1
0
        private void SetCourierState()
        {
            var methodName = "SetCourierState";

            LogTrace(methodName);

            if (!Core.StealthBot.Ship.IsCargoHoldActive)
            {
                LogMessage(methodName, LogSeverityTypes.Standard, "Making the ship cargo active.");
                Core.StealthBot.Ship.MakeCargoHoldActive();
                return;
            }

            if (!Core.StealthBot.Ship.CargoContainsItem(ActiveMission.TypeId))
            {
                _courierState = CourierMissionStates.MoveToStart;
            }
            else
            {
                _courierState = CourierMissionStates.MoveToEnd;
            }
        }
Exemple #2
0
        private void ProcessCourierState()
        {
            var methodName = "ProcessCourierState";

            LogTrace(methodName);

            switch (_courierState)
            {
            case CourierMissionStates.MoveToStart:
                var isAtMissionStartBookmark = Core.StealthBot.MissionCache.IsAtMissionStartBookmark(ActiveMission);
                if (isAtMissionStartBookmark)
                {
                    _courierState = CourierMissionStates.LoadCourierCargo;
                    goto case CourierMissionStates.LoadCourierCargo;
                }

                MoveToMissionStart();
                break;

            case CourierMissionStates.LoadCourierCargo:
                if (!Core.StealthBot.Station.IsStationHangarActive)
                {
                    LogMessage(methodName, LogSeverityTypes.Standard, "Making station hangar active.");
                    Core.StealthBot.Station.MakeStationHangarActive();
                    return;
                }

                var missionItem = Core.StealthBot.MeCache.HangarItems.FirstOrDefault(
                    item => item.TypeID == ActiveMission.TypeId);

                if (missionItem == null)
                {
                    LogMessage(methodName, LogSeverityTypes.Standard, "Mission item not found in station hangar; moving to mission end.");
                    _courierState = CourierMissionStates.MoveToEnd;
                    goto case CourierMissionStates.MoveToEnd;
                }

                //If I have space for cargo
                var freeCargoCapacity = Core.StealthBot.MeCache.Ship.CargoCapacity - Core.StealthBot.MeCache.Ship.UsedCargoCapacity;
                if (freeCargoCapacity >= missionItem.Volume)
                {
                    //If another trip is required...
                    var requiredCapacity = Core.StealthBot.MeCache.HangarItems.Where(
                        item => item.TypeID == ActiveMission.TypeId).Sum(
                        item => item.Volume * item.Quantity);

                    if (requiredCapacity > freeCargoCapacity)
                    {
                        LogMessage(methodName, LogSeverityTypes.Standard, "Cargohold has {0} m^3 free and {1} m^3 is needed for the (remaining) mission items - another trip is required.",
                                   freeCargoCapacity, requiredCapacity);
                        _anotherTripRequired = true;
                    }
                    else
                    {
                        _anotherTripRequired = false;
                    }

                    var fitAllItems = false;
                    LogMessage(methodName, LogSeverityTypes.Standard, "Moving mission items from hangar to cargo.");
                    Core.StealthBot.Ship.TransferItemFromHangarToCargo(ActiveMission.TypeId, out fitAllItems);
                    _courierState = CourierMissionStates.MoveToEnd;
                }
                break;

            case CourierMissionStates.MoveToEnd:
                var isAtMissionEndBookmark = Core.StealthBot.MissionCache.IsAtMissionEndBookmark(ActiveMission);
                if (isAtMissionEndBookmark)
                {
                    _courierState = CourierMissionStates.UnloadCourierCargo;
                    goto case CourierMissionStates.UnloadCourierCargo;
                }

                MoveToMissionEnd();
                break;

            case CourierMissionStates.UnloadCourierCargo:
                if (!Core.StealthBot.Ship.IsCargoHoldActive)
                {
                    LogMessage(methodName, LogSeverityTypes.Standard, "Making ship cargohold active.");
                    Core.StealthBot.Ship.MakeCargoHoldActive();
                    return;
                }

                LogMessage(methodName, LogSeverityTypes.Standard, "Transfering non-charge items to station hangar.");
                Core.StealthBot.Ship.TransferCargoHoldToStationExcludingCategoryIds((int)CategoryIDs.Charge);
                _courierState = CourierMissionStates.StackCargo;
                break;

            case CourierMissionStates.StackCargo:
                if (!Core.StealthBot.Station.IsStationHangarActive)
                {
                    LogMessage(methodName, LogSeverityTypes.Standard, "Making station hangar active.");
                    Core.StealthBot.Station.MakeStationHangarActive();
                    return;
                }

                LogMessage(methodName, LogSeverityTypes.Standard, "Stacking station hangar.");
                var eveWindow = _eveWindowProvider.GetInventoryWindow();
                eveWindow.StackAll();

                if (_anotherTripRequired)
                {
                    LogMessage(methodName, LogSeverityTypes.Standard, "Another trip was required, mission not yet complete.");
                    _courierState = CourierMissionStates.MoveToStart;
                    goto case CourierMissionStates.MoveToStart;
                }

                _courierState       = CourierMissionStates.Idle;
                _missionRunnerState = MissionRunnerStates.TurnInMission;
                break;
            }
        }