/** * Send a vessel to be repaired. * @param vessel to be repaired */ private void sendForRepairs(INavigableVessel vessel) { vessel.togglePirateFlag(); ICity city = cityService.findNearestCity(vessel.getLocation()); seafaringService.travelToCity(vessel, city); }
@Override public void initializeTradeCycle(IAIPlayer player, INavigableVessel vessel) { CollectWaresMissionData missionData = createMissionData(player); player.setTradeMission(vessel, missionData); // Assume the ship is not in a port => redirect List<IWare> requiredWares = new ArrayList<>(missionData.getRequiredWareAmounts().keySet()); Optional<ICity> currentCity = shipService.findCity(vessel); HashSet<ICity> excludeCities = new HashSet<>(); currentCity.ifPresent(excludeCities::add); ICity firstStop = findDestinationToBuyRequiredProductionWares(player, requiredWares, vessel, excludeCities); IAITradeStrategyType strategyType = getStrategyType(); player.setTradeStrategyType(vessel, strategyType); logger.debug("Reroute vessel "+vessel.getName()+" to "+firstStop.getName()+" current location: "+vessel.getLocation()); if (player.hasMoreTradeSteps(vessel)) { logger.debug("There are tradesteps for vessel "+vessel.getName()+" that may cause problems"); } seafaringService.travelToCity(vessel, firstStop); }
private void startTradeStrategySteps(IAIPlayer player, INavigableVessel ship) { IAITradeStrategy tradeStrategy = player.getTradeStrategyType(ship).getStrategy(); // If the vessel is traveling do not execute if (!player.hasMoreTradeSteps(ship)) { if (shipService.findCity(ship).isPresent()) { tradeStrategy.initializeTradeCycle(player, ship); logger.info("No more tradesteps for vessel {} of {} {} defined, but located in city: Reinitialize trade strategy", ship.getName(), player.getName(), player.getLastName()); } else { if (!vessels.isTravelling(ship)) { // already traveling to destination ICity nearestCity = tradeStrategy.getCityToRestartTradeCycle(ship); seafaringService.travelToCity(ship, nearestCity); logger.warn("No tradesteps defined for vessel {} of {} {}. Travel to nearest city {}", ship.getName(), player.getName(), player.getLastName(), nearestCity.getName()); } } } if (!player.waitingForTradeStepToFinish(ship)) { tradeStrategy.executeTradeSteps(player, ship); } else { logger.warn("Skip starting of trade execution as waitingForTradeStepToFinish for {} of {} {} is {}", ship.getName(), player.getName(), player.getLastName(), player.waitingForTradeStepToFinish(ship)); } }