diff --git a/scripts/radial/terminal/bank.js b/scripts/radial/terminal/bank.js index 197761fe4..e9b9a0895 100644 --- a/scripts/radial/terminal/bank.js +++ b/scripts/radial/terminal/bank.js @@ -1,23 +1,23 @@ var getOptions = function(options, player, target) { - // Standard - use = new RadialOption(RadialItem.ITEM_USE); + var use = new RadialOption(RadialItem.ITEM_USE); + var reserve = new RadialOption(RadialItem.BANK_RESERVE); + var creature = player.getCreatureObject(); options.add(use); options.add(new RadialOption(RadialItem.EXAMINE)); - creature = player.getCreatureObject(); - // Bank-specific withdraw/deposit - use.addChild(new RadialOption(RadialItem.BANK_TRANSFER)); - use.addChild(new RadialOption(RadialItem.BANK_ITEMS)); - if (creature.getBankBalance() > 0) - use.addChild(new RadialOption(RadialItem.BANK_WITHDRAW_ALL)); - if (creature.getCashBalance() > 0) - use.addChild(new RadialOption(RadialItem.BANK_DEPOSIT_ALL)); - // Galactic Reserve - reserve = new RadialOption(RadialItem.BANK_RESERVE); - if (creature.getBankBalance() >= 1E9 || creature.getCashBalance() >= 1E9) - reserve.addChild(new RadialOption(RadialItem.BANK_RESERVE_DEPOSIT)); - if (creature.getReserveBalance() > 0) - reserve.addChild(new RadialOption(RadialItem.BANK_RESERVE_WITHDRAW)); options.add(reserve); + // Bank Transfer/Safety Deposit + use.addChild(RadialItem.BANK_TRANSFER); + use.addChild(RadialItem.BANK_ITEMS); + // Withdraw/Deposit + if (creature.getBankBalance() > 0) + use.addChild(RadialItem.BANK_WITHDRAW_ALL); + if (creature.getCashBalance() > 0) + use.addChild(RadialItem.BANK_DEPOSIT_ALL); + // Galactic Reserve + if (creature.getBankBalance() >= 1E9 || creature.getCashBalance() >= 1E9) + reserve.addChild(RadialItem.BANK_RESERVE_DEPOSIT); + if (creature.getReserveBalance() > 0) + reserve.addChild(RadialItem.BANK_RESERVE_WITHDRAW); }; var handleSelection = function(player, target, selection) { switch (selection) { @@ -60,7 +60,7 @@ var handleSelection = function(player, target, selection) { creature.setCashBalance(creature.getCashBalance() + amount); creature.setBankBalance(0); if (amount > 0) - intentFactory.sendSystemMessage(player, "You successfully withdraw " + amount + " credits from your account."); + intentFactory.sendSystemMessage(player, "@base_player:prose_withdraw_success", "DI", new java.lang.Integer(amount)); else intentFactory.sendSystemMessage(player, '@error_message:bank_withdraw'); break; @@ -71,13 +71,17 @@ var handleSelection = function(player, target, selection) { creature.setBankBalance(amount + creature.getBankBalance()); creature.setCashBalance(0); if (amount > 0) - intentFactory.sendSystemMessage(player, "You successfully deposit " + amount + " credits to your account."); + intentFactory.sendSystemMessage(player, "@base_player:prose_deposit_success", "DI", new java.lang.Integer(amount)); else intentFactory.sendSystemMessage(player, '@error_message:bank_deposit'); break; } case RadialItem.BANK_RESERVE_DEPOSIT: { creature = player.getCreatureObject(); + if (!creature.canPerformGalacticReserveTransaction()) { + intentFactory.sendSystemMessage(player, "You have to wait to perform another Galactic Reserve transaction"); + break; + } amount = creature.getBankBalance(); if (amount > 1E9) amount = 1E9; @@ -87,10 +91,15 @@ var handleSelection = function(player, target, selection) { } creature.setBankBalance(creature.getBankBalance() - amount); creature.setReserveBalance(creature.getReserveBalance() + amount); + creature.updateLastGalacticReserveTime(); break; } case RadialItem.BANK_RESERVE_WITHDRAW: { creature = player.getCreatureObject(); + if (!creature.canPerformGalacticReserveTransaction()) { + intentFactory.sendSystemMessage(player, "You have to wait to perform another Galactic Reserve transaction"); + break; + } amount = creature.getReserveBalance(); if (amount > 1E9) amount = 1E9; @@ -100,6 +109,7 @@ var handleSelection = function(player, target, selection) { } creature.setBankBalance(creature.getBankBalance() + amount); creature.setReserveBalance(creature.getReserveBalance() - amount); + creature.updateLastGalacticReserveTime(); break; } } diff --git a/src/resources/encodables/ProsePackage.java b/src/resources/encodables/ProsePackage.java index e565404e3..c3a377c11 100644 --- a/src/resources/encodables/ProsePackage.java +++ b/src/resources/encodables/ProsePackage.java @@ -86,10 +86,7 @@ public class ProsePackage implements OutOfBandData, Serializable { */ public ProsePackage(Object ... objects) { int length = objects.length; - for (int i = 0; i < length; i++) { - if (i == length-1) - return; - + for (int i = 0; i < length-1; i++) { if (!(objects[i] instanceof String)) // Make sure that it's a key, chance of it being a customString though continue; @@ -113,6 +110,7 @@ public class ProsePackage implements OutOfBandData, Serializable { setTO(prose); break; case "DI": + System.out.println(prose.getClass().getSimpleName()); if (prose instanceof Integer) setDI((Integer) prose); else { System.err.println("DI can only be a Integer!"); } diff --git a/src/resources/objects/creature/CreatureObject.java b/src/resources/objects/creature/CreatureObject.java index 3b2e0974e..50686764d 100644 --- a/src/resources/objects/creature/CreatureObject.java +++ b/src/resources/objects/creature/CreatureObject.java @@ -50,6 +50,8 @@ public class CreatureObject extends TangibleObject { private static final long serialVersionUID = 1L; + private transient long lastReserveOperation = 0; + private Posture posture = Posture.UPRIGHT; private Race race = Race.HUMAN; private double movementScale = 1; @@ -322,6 +324,14 @@ public class CreatureObject extends TangibleObject { this.reserveBalance = reserveBalance; } + public boolean canPerformGalacticReserveTransaction() { + return (System.nanoTime() - lastReserveOperation) / 1E9 >= 15*60; + } + + public void updateLastGalacticReserveTime() { + lastReserveOperation = System.nanoTime(); + } + public void setMovementScale(double movementScale) { this.movementScale = movementScale; sendDelta(4, 5, movementScale); diff --git a/src/resources/radial/RadialOption.java b/src/resources/radial/RadialOption.java index 4f73f5e01..7d7c3e65d 100644 --- a/src/resources/radial/RadialOption.java +++ b/src/resources/radial/RadialOption.java @@ -46,6 +46,7 @@ public class RadialOption { public void setItem(RadialItem item) { this.item = item; } public void addChild(RadialOption option) { this.children.add(option); } + public void addChild(RadialItem item) { addChild(new RadialOption(item)); } public int getId() { return item.getId(); } public int getOptionType() { return item.getOptionType(); } diff --git a/src/utilities/IntentFactory.java b/src/utilities/IntentFactory.java index b370b45a8..ad0e92b32 100644 --- a/src/utilities/IntentFactory.java +++ b/src/utilities/IntentFactory.java @@ -59,16 +59,6 @@ public final class IntentFactory { broadcast(message, target, BroadcastType.PERSONAL); } - /** - * Sends a system message to the target as a ProsePackage. - * @param target Player receiving the message. - * @param table Table for the StringId - * @param key Key to use within the StringId - */ - public void sendSystemMessage(Player target, String table, String key) { - new ChatBroadcastIntent(target, new ProsePackage(table, key)).broadcast(); - } - /** * Sends a system message to the target as a ProsePackage which allows prose keys to be used. *

@@ -78,14 +68,18 @@ public final class IntentFactory { * Using this method is the same as:
*   new ChatBroadcastIntent(target, new ProsePackage("StringId", new StringId(table, key), objects)).broadcast(); * @param target Player receiving the system message. - * @param table Table for the StringId. - * @param key Key to use within the StringId. + * @param stf The string stf table to use for this system message. It should be formatted as such:

+ * example_key where @example refers to the stf example.stf in string/en folder and example_key is the key to use for the stf. * @param objects Collection of prose keys followed by with the value for the prose key.
As an example, ("DI", 500) would * set the %DI to the value of 500 for the StringId. * Note that the prose key must always come first and the value for that key must always come second. */ - public void sendSystemMessage(Player target, String table, String key, Object... objects) { - new ChatBroadcastIntent(target, new ProsePackage("StringId", new StringId(table, key), objects)).broadcast(); + public void sendSystemMessage(Player target, String stf, Object ... objects) { + Object [] prose = new Object[objects.length + 2]; + prose[0] = "StringId"; + prose[1] = new StringId(stf); + System.arraycopy(objects, 0, prose, 2, objects.length); + new ChatBroadcastIntent(target, new ProsePackage(prose)).broadcast(); } /**