/** * 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); }
@Subscribe public void handleBlockadeStart(BlockadeShipRequestEvent event) { IAIPlayer player = event.getPlayer(); int requiredShips = event.getNumberOfShips(); for (int i = 0; i < requiredShips; i++) { Optional<IShip> optShip = blockadeStrategy.selectShip(player); if (optShip.isPresent()) { IShip vessel = optShip.get(); player.setTradeMission(vessel, new IBlockadeMission() {}); seafaringService.travelTo(vessel, event.getAssemblyCity().getCoordinates()); } else { break; } } } @Subscribe
@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); }
@Override public void initializeTradeCycle(IAIPlayer player, INavigableVessel vessel) { // find closest city having producing one of the tradable wares. Pair<ICity, IWare> pair = findClosestCityProducingTradableWare(player, vessel); Optional<ICity> optCity = shipService.findCity(vessel); if (optCity.isPresent()) { if (optCity.get().equals(pair.getKey())) { // in start city handleBuyWaresInStartCity(player, vessel, optCity.get()); } else { // in different city handleBuyWaresReturnToStartCity(player, vessel, optCity.get(), pair.getKey()); } } else { TravelToTradeStep travelTo = createTravelToStep(vessel, pair.getKey()); append(player, vessel, travelTo); } DynamicTradeRouteMissionData missionData = new DynamicTradeRouteMissionData(); missionData.setWare(pair.getValue()); player.setTradeMission(vessel, missionData); } @VisibleForTesting
dumpStep.execute(); SpecialMissionFinishedEvent newEvent = new SpecialMissionFinishedEvent(vessel, city, tradeMission); player.setTradeMission(vessel, null); clientServerEventBus.post(newEvent);
missionData.setRequiredWares(new ArrayList<>(context.getWares())); missionData.setTargetCity(setup.getKey()); player.setTradeMission(vessel, missionData);
player.setTradeMission(vessel, missionData);
missionData.setProduceWare(ware); missionData.setProductionLocation(productionLocation); player.setTradeMission(vessel, missionData);
@Override public void initializeTradeCycle(IAIPlayer player, INavigableVessel vessel) { ICity hometown = player.getHometown(); IProductionConsumptionKnowledge knowledge = player.getProductionAndConsumptionKnowledge(); ICityProductionConsumptionKnowledge knowledgeHomeTown = knowledge.getKnowlege(hometown); List<Pair<IWare, Number>> sortedNeeds = getMostNeededWares(knowledgeHomeTown, vessel); ArrayList<IWare> waresOfInterest = findWaresOfInterest(sortedNeeds); SupplyCityMissionData missionData = new SupplyCityMissionData(); missionData.setRequiredWares(waresOfInterest); missionData.setTargetCity(hometown); player.setTradeMission(vessel, missionData); addTradeStepsInHometownToTravelToNextCity(player, vessel); }
if (missionData == null || !(missionData instanceof TradeRouteMissionData)) { missionData = selectTradeRoute(city); player.setTradeMission(vessel, missionData);