/** * Check whether the AI player has more trade steps * @param player on which to check * @return true if there are more tradesteps for the player with the vessel */ public boolean hasMoreTradeSteps(IAIPlayer player, INavigableVessel vessel) { return player.hasMoreTradeSteps(vessel); }
/** * Remove any remaining trade steps. * @param vessel for which the trade steps should be checked * @param player for which the trade steps should be checked. */ private void clearRemainingTradeSteps(INavigableVessel vessel, IAIPlayer player) { while(player.hasMoreTradeSteps(vessel)) { player.getNextTradeStep(vessel); } player.setTradeMission(vessel, null); }
@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)); } }