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; } }
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; } }