@VisibleForTesting void handleBuyWaresInStartCity(IAIPlayer player, INavigableVessel vessel, ICity city) { IProductionConsumptionKnowledge globalKnowledge = player.getProductionAndConsumptionKnowledge(); DynamicTradeRouteMissionData missionData = (DynamicTradeRouteMissionData) player.getTradeMission(vessel); ICity nextStop = findNextStopForBuying(city, globalKnowledge, Collections.singletonList(missionData.getWare()), vessel, city); HashSet<IWare> buyWares = new HashSet<>(); buyWares.add(missionData.getWare()); addDefaultTradeSteps(vessel, player, city, nextStop, new HashSet<>(), buyWares, false); } @VisibleForTesting
IProductionConsumptionKnowledge knowledge = player.getProductionAndConsumptionKnowledge(); List<ICity> cities = new ArrayList<>(); List<ICity> mapCities = new ArrayList<>(mapProxy.getAllReachableNonBlockadedCities(vessel));
private Optional<ICity> findNearestCityWithNeed(ICity city, IAIPlayer player, IWare ware, INavigableVessel vessel, ICity excludeCity) { IProductionConsumptionKnowledge knowledge = player.getProductionAndConsumptionKnowledge(); List<ICity> cityList = mapService.getNonBlockadedCitiesOrderedByDistance(city, vessel); cityList.remove(excludeCity); for (ICity iCity : cityList) { ICityProductionConsumptionKnowledge cityProduction = knowledge.getKnowlege(iCity); List<Pair<IWare, Number>> mostNeeded = getMostNeededWares(cityProduction); for (Pair<IWare, Number> pair : mostNeeded) { if (pair.getKey().equals(ware) && pair.getValue().intValue() < 10) { return Optional.of(iCity); } } } return Optional.empty(); }
IProductionConsumptionKnowledge knowledge = player.getProductionAndConsumptionKnowledge(); List<ICity> mapCities = new ArrayList<>(mapProxy.getAllReachableNonBlockadedCities(vessel)); excludeCity.stream().forEach(mapCities::remove);
private Optional<IWare> findWareToBuy(ICity city, IAIPlayer player) { IWare[] wares = city.getEffectiveProduction(); IProductionConsumptionKnowledge knowledge = player.getProductionAndConsumptionKnowledge(); ICityProductionConsumptionKnowledge knowledgeCurrentTown = knowledge.getKnowlege(city); IWare ware = null; int amount = 0; for (IWare good : wares) { int storedAmount = knowledgeCurrentTown.getStoredAmount(good); if (storedAmount > 0 && knowledgeCurrentTown.getProductionAmount(good) > knowledgeCurrentTown.getConsumptionAmount(good)) { if (storedAmount > amount) { ware = good; amount = storedAmount; } } } return Optional.ofNullable(ware); }
IProductionConsumptionKnowledge knowledge = player.getProductionAndConsumptionKnowledge(); for (ICity suppliedCity : suppliedCities) { ICityProductionConsumptionKnowledge cityKnowledge = knowledge.getKnowlege(suppliedCity);
for (IAIPlayer player : players) { ICity hometown = player.getHometown(); IProductionConsumptionKnowledge knowlege = player.getProductionAndConsumptionKnowledge(); knowlege.updateKnowledge(hometown); List<IShip> shipList = player.getFleet();
@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); } }
Pair<ICity, CentralStorageStrategyHint> setup = setupContextHint(player, vessel); IProductionConsumptionKnowledge knowledge = player.getProductionAndConsumptionKnowledge(); CentralStorageHintContext context = (CentralStorageHintContext) setup.getValue().getContext(); SupplyCityMissionData missionData = new SupplyCityMissionData();
@Override public void handleShipArrivesInPort(IShipEntersPortEvent event) { INavigableVessel vessel = event.getShip(); if (isMatchingTradeStrategy(vessel)) { IAIPlayer player = (IAIPlayer) vessel.getOwner(); ICity city = event.getCity(); IProductionConsumptionKnowledge globalKnowledge = player.getProductionAndConsumptionKnowledge(); DynamicTradeRouteMissionData missionData = (DynamicTradeRouteMissionData) player.getTradeMission(vessel); int wareAmount = vessel.getWare(missionData.getWare()).getAmount(); if (wareAmount > 0) { // TODO: andi 10/27/17 when selling all wares in this city we still travel one further: #631 List<IWare> wareOfInterest = Collections.singletonList(missionData.getWare()); ICity nextStop = findNextStopForSelling(city, globalKnowledge, wareOfInterest, vessel, city); addDefaultTradeSteps(vessel, player, city, nextStop, new HashSet<>(), new HashSet<>(), false); } else { Pair<ICity, IWare> pair = findClosestCityProducingTradableWare(player, vessel); missionData.setWare(pair.getValue()); handleBuyWaresReturnToStartCity(player, vessel, city, pair.getKey()); } } } }
IProductionConsumptionKnowledge knowledge = player.getProductionAndConsumptionKnowledge(); HashSet<ICity> excludeCities = new HashSet<>(); excludeCities.add(currentLocation);
@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); }
List<IWare> requiredWares = new LinkedList(); requiredWares.addAll(productionChain.getRequiredWares(produceWare)); IProductionConsumptionKnowledge knowledge = player.getProductionAndConsumptionKnowledge(); ICity nextStop; List<IWare> buyWares = new ArrayList<>();
ICity hometown = player.getHometown(); List<IWare> waresOfInterest = ((SupplyCityMissionData) player.getTradeMission(vessel)).getRequiredWares(); IProductionConsumptionKnowledge knowledge = player.getProductionAndConsumptionKnowledge(); ICityProductionConsumptionKnowledge knowledgeCurrentTown = knowledge.getKnowlege(city); List<Pair<IWare, Number>> sortedNeedsHometown = getMostNeededWares(knowledge.getKnowlege(hometown), vessel);
if (owner instanceof IAIPlayer) { IAIPlayer player = (IAIPlayer) owner; IProductionConsumptionKnowledge knowlege = player.getProductionAndConsumptionKnowledge(); knowlege.updateKnowledge(event.getCity()); ITradeMissionData missionData = player.getTradeMission(vessel);
sellWares.addAll(getLoadedWares(vessel)); IProductionConsumptionKnowledge knowledge = player.getProductionAndConsumptionKnowledge(); buyWares.addAll(getWaresNeedIn(knowledge, knowledge.getKnowlege(nextStop), nextStop));
@VisibleForTesting void handleTradeInSuppliedCity(IAIPlayer player, INavigableVessel vessel, ICity city, CentralStorageDeliverMissionData missionData) { CentralStorageHintContext context = missionData.getContext(); IProductionConsumptionKnowledge globalKnowledge = player.getProductionAndConsumptionKnowledge(); List<ICity> forwardCities = calculateForwardCities(city, context); LinkedList<ICity> citiesToSell = new LinkedList<>(forwardCities);
Map<IWare, Integer> requiredWares = new HashMap<>(); ITradingOffice office = player.findTradingOffice(centralStorageCity).get(); IProductionConsumptionKnowledge globalKnowledge = player.getProductionAndConsumptionKnowledge(); if (missionData.getLastVisit() == null) { fillRequiredWaresAvailableBased(requiredWares, context, office);
IProductionConsumptionKnowledge knowledge = player.getProductionAndConsumptionKnowledge(); ICityProductionConsumptionKnowledge knowledgeHomeTown = knowledge.getKnowlege(hometown); List<Pair<IWare, Number>> sortedNeeds = getMostNeededWares(knowledgeHomeTown, vessel);