private boolean hasCentralStorageStrategy(ICity city, IAIPlayer player) { return player.getPlayerContext().getHints(city).stream() .filter(hint -> hint instanceof CentralStorageStrategyHint).findFirst().isPresent(); }
@Override public boolean hireOrFireTradeManager(ICity city, IAIPlayer player) { Optional<ITradingOffice> optOffice = player.findTradingOffice(city); if (optOffice.isPresent()) { ITradingOffice office = optOffice.get(); if (office.getSteward().isPresent()) { return false; // never dismiss } else { return player.getHometown().equals(city) || player.getPlayerContext().getHints(city).stream() .filter(hint -> hint instanceof CentralStorageStrategyHint).findFirst().isPresent() || !player.findBuildings(city, IWorkShop.class).isEmpty(); } } return false; }
@Override public boolean isSelectable(IAIPlayer player, INavigableVessel vessel) { // There are at least 4 ships if (player.getFleet().size() < 4) { return false; } List<ICity> citiesWithTradingOffice = map.getAllReachableCities(vessel).stream() .filter(city -> player.findTradingOffice(city).isPresent()) .collect(Collectors.toList()); // This city should not yet be supplied for (ICity city : citiesWithTradingOffice) { List<ITradeStategyHint> hints = player.getPlayerContext().getHints(city); for (ITradeStategyHint hint : hints) { if (hint instanceof CentralStorageStrategyHint) { CentralStorageHintContext hintContext = (CentralStorageHintContext) hint.getContext(); return hintContext.getDistributingVessels().isEmpty(); } } } return false; } }
@Override public boolean isSelectable(IAIPlayer player, INavigableVessel vessel) { // There are at least 4 ships if (player.getFleet().size() < 4) { return false; } List<ICity> citiesWithTradingOffice = map.getAllReachableCities(vessel).stream() .filter(city -> player.findTradingOffice(city).isPresent()) .collect(Collectors.toList()); // This city should not yet be supplied for (ICity city : citiesWithTradingOffice) { List<ITradeStategyHint> hints = player.getPlayerContext().getHints(city); for (ITradeStategyHint hint : hints) { if (hint instanceof CentralStorageStrategyHint) { CentralStorageHintContext hintContext = (CentralStorageHintContext) hint.getContext(); return hintContext.getSupplyingVessels().isEmpty(); } } return true; } return false; } }
break; List<ITradeStategyHint> hints = player.getPlayerContext().getHints(city); for (ITradeStategyHint h : hints) { if (targetCity != null) { context.addSupplyingVessel(vessel); hint.setContext(context); player.getPlayerContext().add(city, hint); targetCity = city; requiredWares.removeAll(produced); requiredWares.stream().forEach(context::addWare); player.getPlayerContext().add(city, hint);
@Override public void handleShipArrivesInPort(IShipEntersPortEvent event) { INavigableVessel vessel = event.getShip(); if (isMatchingTradeStrategy(vessel)) { IAIPlayer player = (IAIPlayer) vessel.getOwner(); ICity city = event.getCity(); SupplyCityMissionData missionData = (SupplyCityMissionData) player.getTradeMission(vessel); ICity targetCity = missionData.getTargetCity(); CentralStorageStrategyHint hint = (CentralStorageStrategyHint) player.getPlayerContext().getHints(targetCity).stream().filter(h -> h instanceof CentralStorageStrategyHint).findFirst().get(); CentralStorageHintContext context = (CentralStorageHintContext) hint.getContext(); if (city.equals(targetCity)) { // - unload oal to storage TransferToOfficeTradeStep transferToOfficeStep = createTransferToOfficeTradeStep(vessel, city); append(player, vessel, transferToOfficeStep); // - find best city to supply wares ICity nextStop = findProvidingWares(city, context.getWares(), context.getSuppliedCities(), player, vessel); // buy wares needed there ICityProductionConsumptionKnowledge cityKnowledge = player.getProductionAndConsumptionKnowledge().getKnowlege(nextStop); List<Pair<IWare, Number>> needs = getMostNeededWares(cityKnowledge, vessel); HashSet<IWare> buyWares = new HashSet<>(); needs.stream().forEach(pair -> buyWares.add(pair.getKey())); buyWares.removeAll(context.getWares()); addDefaultTradeSteps(vessel, player, city, nextStop, new HashSet<>(context.getWares()), buyWares, false); } else { addDefaultTradeSteps(vessel, player, city, targetCity, new HashSet<>(context.getWares()), new HashSet<>(context.getWares()), false); } executeTradeSteps(player, vessel); } }
ICity centralStorage = null; for (ICity city : map.getAllReachableNonBlockadedCities(vessel)) { for (ITradeStategyHint h : player.getPlayerContext().getHints(city)) { if (h instanceof CentralStorageStrategyHint) { CentralStorageStrategyHint hint1 = (CentralStorageStrategyHint) h;