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