/** * Even distirbution of the total cash by ship capacity in the convoy. */ private void updatePlayerByCapacityPercentage(IConvoy convoy, Map<IPlayer, Integer> capacityMap, long totalCash) { double totalCapacity = convoy.getCapacity(); for (Entry<IPlayer, Integer> entry : capacityMap.entrySet()) { double percentage = entry.getValue()/totalCapacity; long partialAmount = Math.round(totalCash*percentage); IPlayer player = entry.getKey(); if (player instanceof IHumanPlayer) { player.getCompany().updateCash(partialAmount); } else { player.getCompany().updateCashDirectly(partialAmount); } } }
/** * Redistribute the cash between the players and the convoy owner. The amounts deduced in one place are added in the * other. */ private void updatePlayerByCapacityPercentageRedistribution(IPlayer player, IConvoy convoy, Map<IPlayer, Integer> capacityMap, long totalCash) { double totalCapacity = convoy.getCapacity(); ICompany company = player.getCompany(); for (Entry<IPlayer, Integer> entry : capacityMap.entrySet()) { double percentage = entry.getValue()/totalCapacity; long partialAmount = Math.round(totalCash*percentage); IPlayer player1 = entry.getKey(); ICompany company1 = player1.getCompany(); if (player1 instanceof IHumanPlayer) { company1.updateCash(partialAmount); } else { company1.updateCashDirectly(partialAmount); } if (player instanceof IHumanPlayer) { company.updateCash(-partialAmount); } else { company.updateCashDirectly(-partialAmount); } } }
@Override public void join(IAIPlayer player, ICity city) { ICompany company = player.getCompany(); Optional<IGuild> maybeGuild = guildList.findGuild(city); IGuild guild = maybeGuild.get(); int fee = guildService.getEntryFee(player); company.updateCashDirectly(-fee); guild.join(player); } }
@Override public void run() { int bounty = (int)(Math.abs(opponent.getCompany().getCash()/2000*rnd.nextDouble())); if (opponent instanceof IHumanPlayer) { opponent.getCompany().updateCash(-bounty); } else { opponent.getCompany().updateCashDirectly(-bounty); } DisplayMessage msg = new DisplayMessage("ch.sahits.game.graphic.event.task.BreakInAction.message", bounty, opponent.getLastName()); clientEventBus.post(msg); }
@Override public void run() { if (player instanceof IHumanPlayer) { player.getCompany().updateCash(tenant.getRentPerWeek()); } else { player.getCompany().updateCashDirectly(tenant.getRentPerWeek()); } } }
@Override public void run() { DisplayMessage msg = new DisplayMessage(messageKey, fine); clientEventBus.post(msg); if (player instanceof IHumanPlayer) { player.getCompany().updateCash(-fine); } else { player.getCompany().updateCashDirectly(-fine); } } }
@Override public boolean execute() { clientEventBus.post(new DisplayMessage("ch.sahits.game.event.handler.impl.SinkConcurrentShipOrder.thankyou")); if (player instanceof IHumanPlayer) { player.getCompany().updateCash(premium); } else { player.getCompany().updateCashDirectly(premium); } if (reconciliation != null) { list.remove(reconciliation); } return true; }}
@Override public boolean execute() { ICompany company = player.getCompany(); if (company.getCash() > cashLimit) { ILoaner loaner = loanerService.findLoaner(city); List<IDebt> debts = loanerService.findDebts(loaner, player); for (IDebt debt : debts) { // payback int debtTotal = loanerService.calculatePaybacksum(debt); debt.getCreditor().receiveSum(debtTotal); company.updateCashDirectly(-debtTotal); loaner.getDebts().remove(debt); if (company.getCash() < cashLimit) { break; } } } return true; } }
@Override public boolean execute(ICity city) { ((IShip)getShip()).setOccupiedSpace(((IShip)getShip()).getOccupiedSpace() - amount); IPlayer owner = (IPlayer) getShip().getOwner(); if (rnd.nextBoolean()) { int penalty = (int)(Math.abs(owner.getCompany().getCash()/200*rnd.nextDouble())); DisplayMessage msg = new DisplayMessage("ch.sahits.game.event.handler.impl.DeliverPackages.messageCaught", penalty); clientEventBus.post(msg); if (owner instanceof IHumanPlayer) { owner.getCompany().updateCash(-penalty); } else { owner.getCompany().updateCashDirectly(-penalty); } } else { if (owner instanceof IHumanPlayer) { owner.getCompany().updateCash(premium); } else { owner.getCompany().updateCashDirectly(premium); } DisplayMessage msg = new DisplayMessage("ch.sahits.game.event.handler.impl.DeliverPackages.messageSuccess"); clientEventBus.post(msg); } unregisterEventBus(); return false; } @Override
/** * Sell <code>amount</code> of <code>ware</code> from the <code>office</code> to the <code>city</code>. * @param office where the ware is stored. * @param player owner of the office * @param city to which to sell to * @param ware to be sold * @param amount to be sold * @param minAvgPrice minimal avg price that has to be payed per item. If no value is passed the whole lot will be sold. * @return total price of all sold wares (always positiv) */ public int sellFromStorageToCity(ITradingOffice office, IPlayer player, ICity city, IWare ware, int amount, Optional<Integer> minAvgPrice) { int availableAmountCity = city.getWare(ware).getAmount(); int amountToBeSold = amount; if (minAvgPrice.isPresent()) { amountToBeSold = computablePrice.calculateSellAmount(ware, availableAmountCity, minAvgPrice.get(), amount); } final int avgPrice = computablePrice.sellPrice(ware, new SimpleIntegerProperty(availableAmountCity), new ConstantIntegerBinding(amountToBeSold)); city.move(ware, amountToBeSold, player); // The price here is irrelevant int sold = office.move(ware, -amountToBeSold, avgPrice); if (player instanceof IHumanPlayer) { player.getCompany().updateCash(avgPrice * sold); } else { player.getCompany().updateCashDirectly(avgPrice * sold); } return avgPrice * sold; }
((IPlayer) auction.getOwner().get()).getCompany().updateCash(amount); } else { ((IPlayer) auction.getOwner().get()).getCompany().updateCashDirectly(amount); newOwner.getCompany().updateCash(-amount); } else { newOwner.getCompany().updateCashDirectly(-amount);
/** * Sell <code>amount</code> of <code>ware</code> from <code>vessel</code> to the <code>city</code>. This method also * considers distribution of the gained income, in the case of a mixed convoy. * @param vessel from which to sell the ware * @param player owner of the vessel * @param city to which to sell * @param ware to be sold * @param amount to be sold */ public void sellWareShipToCity(INavigableVessel vessel, IPlayer player, ICity city, IWare ware, int amount, Optional<Integer> minAvgPrice) { int availableAmountCity = city.getWare(ware).getAmount(); int amountToBeSold = amount; if (minAvgPrice.isPresent()) { amountToBeSold = computablePrice.calculateSellAmount(ware, availableAmountCity, minAvgPrice.get(), amount); } if (amountToBeSold > 0) { int avgPrice = computablePrice.sellPrice(ware, new SimpleIntegerProperty(availableAmountCity), new ConstantIntegerBinding(amountToBeSold)); city.move(ware, amountToBeSold, player); // The price here is irrelevant int sold = vessel.unload(ware, amountToBeSold); if (vessel instanceof IShip) { if (player instanceof IHumanPlayer) { player.getCompany().updateCash(avgPrice * sold); } else { player.getCompany().updateCashDirectly(avgPrice * sold); } } else { distributeIncomeToConvoyParticipants((IConvoy) vessel, avgPrice, sold); } } }
@Override public boolean execute() { Preconditions.checkArgument(vessel.getLocation().equals(city.getCoordinates()), "Vessel " +vessel.getName()+" is not in city "+city.getName()); IAIPlayer owner = (IAIPlayer) vessel.getOwner(); IAIShipRepairStrategy repairStrategy = owner.getShipRepairStrategyType().getStrategy(); if (repairStrategy.shouldRepair(vessel, city)) { repairStrategy.repair(vessel, city); ICompany company = owner.getCompany(); int costs; if (vessel instanceof IShip) { costs = shipService.calculateRepairCosts(city, (IShip) vessel); } else { costs = shipService.calculateRepairCostsVessel(city, vessel); } company.updateCashDirectly(-costs); LOGGER.debug("Executed repair check, do NOT proceed for vessel {} in {}", vessel.getName(), city.getName()); return false; } LOGGER.debug("Executed repair check, do proceed for vessel {} in {}", vessel.getName(), city.getName()); return true; }
@Override public void run() { ICompany company = debitor.getCompany(); int requiredAmount = debt.getAmount(); int amount = (int) Math.min(requiredAmount, company.getCash()); if (debitor instanceof IHumanPlayer) { company.updateCash(-amount); } else { company.updateCashDirectly(-amount); } if (debt.getCreditor() instanceof IPlayer) { if (debt.getCreditor() instanceof IHumanPlayer) { ((IPlayer) debt.getCreditor()).getCompany().updateCash(amount); } else { ((IPlayer) debt.getCreditor()).getCompany().updateCashDirectly(amount); } if (debt.getCreditor() instanceof IHumanPlayer) { DisplayMessage msg = new DisplayMessage("ch.sahits.game.openpatrician.engine.land.city.LoanerEngine.paybackAfterWithoutAuction", new Object[]{debitor.getName(), debitor.getLastName(), amount}); TargetedEvent message = new TargetedEvent((IHumanPlayer) debt.getCreditor(), msg); clientServerEventBus.post(message); } } } }
@Override public boolean execute(ICity city) { Optional<ICity> nextCity = state.nextDestination(); if (!nextCity.isPresent()){ // last leg int premium = state.getPremium()+state.getNumberOfAttacks()*state.getBonusPerAttack(); if (player instanceof IHumanPlayer) { player.getCompany().updateCash(premium); } else { player.getCompany().updateCashDirectly(premium); } clientEventBus.post(new DisplayMessage("ch.sahits.game.event.handler.impl.NextPatrolStation.premium", premium)); clientServerEventBus.unregister(atackListener); unregisterEventBus(); clientServerEventBus.unregister(atackListener); } else { // next leg ICity next = nextCity.get(); state.removeFirstCity(); int minutes = rnd.nextInt(600); LocalDateTime postMessage = date.getCurrentDate().plusMinutes(minutes); taskFactory.getPostponedDisplayMessage(postMessage, "ch.sahits.game.event.handler.impl.NextCourierPatrolStation.nextStation", next.getName()); LocalDateTime deadline = date.getCurrentDate().plusDays(6); new NextPatrolStation((IShip) getShip(), state.nextDestination().get(), state, player, deadline, atackListener); } return true; }}
@Override public boolean execute() { int availableAmount = city.getWare(ware).getAmount(); int sellAmount = vessel.getWare(ware).getAmount(); if (sellAmount > 0) { int sellPrice = computablePrice.sellPrice(getWare(), new SimpleIntegerProperty(availableAmount), new ConstantIntegerBinding(sellAmount)); IAIPlayer player = (IAIPlayer) vessel.getOwner(); ICompany company = player.getCompany(); LOGGER.trace("Before: cash={}, in city={}, on ship={}", company.getCash(), city.getWare(ware).getAmount(), vessel.getWare(ware).getAmount()); company.updateCashDirectly(sellPrice * sellAmount); city.move(getWare(), sellAmount, player); vessel.load(getWare(), sellAmount, sellPrice); LOGGER.trace("Sold {} of {} for a total of: {} ", sellAmount, ware.name(), sellPrice * sellAmount); LOGGER.trace("After: cash={}, in city={}, on ship={}", company.getCash(), city.getWare(ware).getAmount(), vessel.getWare(ware).getAmount()); // TODO ahotz 20.05.2016: handle case where there are ships owned by other players in the convoy } return true; } }
player.getCompany().updateCash(premium); } else { player.getCompany().updateCashDirectly(premium);
@Override public void run() { IHumanPlayer debitor = (IHumanPlayer) debt.getDebitor(); ICompany company = debitor.getCompany(); int requiredAmount = debt.getAmount(); int amount = (int) Math.min(requiredAmount, company.getCash()); company.updateCash(-amount); if (debt.getCreditor() instanceof IPlayer) { if (debt.getCreditor() instanceof IHumanPlayer) { ((IPlayer) debt.getCreditor()).getCompany().updateCash(amount); } else { ((IPlayer) debt.getCreditor()).getCompany().updateCashDirectly(amount); } if (debt.getCreditor() instanceof IHumanPlayer) { DisplayMessage msg = new DisplayMessage("ch.sahits.game.openpatrician.engine.land.city.LoanerEngine.paybackAfterShipAuction", new Object[]{debitor.getName(), debitor.getLastName(), amount}); TargetedEvent message = new TargetedEvent((IHumanPlayer) debt.getCreditor(), msg); clientServerEventBus.post(message); } } } }
/** * Take out a loan. * @param loaner from which to take the loan * @param proposal selected loan * @param debitor who is taking the loan. */ public void takeOutLoan(ILoaner loaner, ILoanProposal proposal, IPlayer debitor, ICity city) { // TODO: andi 6/12/16 the proposol might be on that is offed by a player and not a citizen LocalDateTime now = date.getCurrentDate(); ESocialRank rank = ESocialRank.values()[rnd.nextInt(ESocialRank.values().length-2)]; // Exclude Mayor and Alderman ICreditor creditor = new Citizen(lastNameLoader.getRandomName(), firstNameLoader.getRandomName(), rank, city); LocalDateTime dueDate = now.plusWeeks(proposal.getDurationInWeeks()); Debt debt = Debt.builder() .creditor(creditor) .amount(proposal.getAmount()) .dueDate(dueDate) .interest(proposal.getInterest()) .debitor(debitor) .loanTakeOut(now) .build(); loaner.addDebt(debt); loaner.getLoanProposals().remove(proposal); if (debitor instanceof IHumanPlayer) { debitor.getCompany().updateCash(proposal.getAmount()); } else { debitor.getCompany().updateCashDirectly(proposal.getAmount()); } }
@Override public boolean execute(ICity city) { if (ignoreEventCity()) { // time has passed and passenger will leave. EDialogTemplateType templateType = resolveType(dialogTemplateType, false); DialogTemplate template = dialogTemplateFactory.createDialogTemplate(templateType, dialogParameterSupplier); DisplayTemplateMessage message = new DisplayTemplateMessage(getMessageBoardTitleKey(templateType), template, getMessageBoardTitleParameters(templateType, city)); TargetedEvent tagetDisplayMsg = new TargetedEvent((IHumanPlayer)shipsOwner, message); clientServerEventBus.post(tagetDisplayMsg); } else { // Successful arrival at destination if (shipsOwner instanceof IHumanPlayer) { shipsOwner.getCompany().updateCash(premiumCalculator.get()); } else { shipsOwner.getCompany().updateCashDirectly(premiumCalculator.get()); } EDialogTemplateType templateType = resolveType(dialogTemplateType, true); DialogTemplate template = dialogTemplateFactory.createDialogTemplate(templateType, dialogParameterSupplier); DisplayTemplateMessage message = new DisplayTemplateMessage(getMessageBoardTitleKey(templateType), template, getMessageBoardTitleParameters(templateType, city)); TargetedEvent tagetDisplayMsg = new TargetedEvent((IHumanPlayer)shipsOwner, message); clientServerEventBus.post(tagetDisplayMsg); } ((IShip) getShip()).leavePassenger(); unregisterEventBus(); return true; }