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();
}
/**