From 0ea79a32ab5044a28adb3303d775b3c70e4b5b4d Mon Sep 17 00:00:00 2001 From: Obique PSWG Date: Sun, 9 Aug 2015 13:12:47 -0500 Subject: [PATCH] Implemented CORE-125 'Banking' --- scripts/commands/generic/openContainer.js | 2 +- scripts/radial/terminal/bank.js | 59 +++++++++++++++++-- .../swg/zone/ClientOpenContainerMessage.java | 7 +-- src/resources/radial/RadialItem.java | 2 + src/services/objects/RadialService.java | 7 --- src/utilities/IntentFactory.java | 6 +- 6 files changed, 64 insertions(+), 19 deletions(-) diff --git a/scripts/commands/generic/openContainer.js b/scripts/commands/generic/openContainer.js index ea8294f1e..9940fe4f2 100644 --- a/scripts/commands/generic/openContainer.js +++ b/scripts/commands/generic/openContainer.js @@ -1,4 +1,4 @@ var execute = function(galManager, player, target, args) { var ClientOpenContainerMessage = Java.type("network.packets.swg.zone.ClientOpenContainerMessage"); - player.sendPacket(new ClientOpenContainerMessage(target.getObjectId())); + player.sendPacket(new ClientOpenContainerMessage(target.getObjectId(), args)); }; \ No newline at end of file diff --git a/scripts/radial/terminal/bank.js b/scripts/radial/terminal/bank.js index 53551006a..055540fbd 100644 --- a/scripts/radial/terminal/bank.js +++ b/scripts/radial/terminal/bank.js @@ -3,15 +3,66 @@ var getOptions = function(options, player, target) { options.add(new RadialOption(0, RadialItem.EXAMINE)); options.add(new RadialOption(1, RadialItem.BANK_TRANSFER)); options.add(new RadialOption(1, RadialItem.BANK_ITEMS)); + creature = player.getCreatureObject(); + if (creature.getBankBalance() > 0) + options.add(new RadialOption(1, RadialItem.BANK_WITHDRAW_ALL)); + if (creature.getCashBalance() > 0) + options.add(new RadialOption(1, RadialItem.BANK_DEPOSIT_ALL)); }; var handleSelection = function(player, target, selection) { switch (selection) { case RadialItem.ITEM_USE: - case RadialItem.BANK_ITEMS: - Log.d("bank.js", "Bank Selection: BANK_ITEMS"); + case RadialItem.BANK_TRANSFER: { + creature = player.getCreatureObject(); + SuiWindow = Java.type("resources.sui.SuiWindow"); + Trigger = Java.type("resources.sui.SuiWindow.Trigger"); + window = new SuiWindow("Script.transfer", player); + window.setProperty('transaction.txtInputFrom:Text', 'From'); + window.setProperty('transaction.txtInputFrom:Text', 'From'); + window.setProperty('bg.caption.lblTitle:Text', '@base_player:bank_title'); + window.setProperty('Prompt.lblPrompt:Text', '@base_player:bank_prompt'); + window.setProperty('transaction.txtInputTo:Text', 'To'); + window.setProperty('transaction.lblFrom:Text', 'Cash'); + window.setProperty('transaction.lblTo:Text', 'Bank'); + window.setProperty('transaction.lblStartingFrom:Text', creature.getCashBalance()); + window.setProperty('transaction.lblStartingTo:Text', creature.getBankBalance()); + window.setProperty('transaction.txtInputFrom:Text', creature.getCashBalance()); + window.setProperty('transaction.txtInputTo:Text', creature.getBankBalance()); + window.setProperty('transaction:ConversionRatioFrom', '1'); + window.setProperty('transaction:ConversionRatioTo', '1'); + returnParams = new java.util.ArrayList(); + returnParams.add('transaction.txtInputFrom:Text'); + returnParams.add('transaction.txtInputTo:Text'); + window.addCallback(0, '', Trigger.OK, returnParams, "radial/terminal/bank"); + window.addCallback(1, '', Trigger.CANCEL, returnParams, "radial/terminal/bank"); + window.display(); break; - case RadialItem.BANK_TRANSFER: - Log.d("bank.js", "Bank Selection: BANK_TRANSFER"); + } + case RadialItem.BANK_ITEMS: { + creature = player.getCreatureObject(); + var ClientOpenContainerMessage = Java.type("network.packets.swg.zone.ClientOpenContainerMessage"); + player.sendPacket(new ClientOpenContainerMessage(creature.getSlottedObject("bank").getObjectId(), "")); + break; + } + case RadialItem.BANK_WITHDRAW_ALL: { + creature = player.getCreatureObject(); + creature.setCashBalance(creature.getCashBalance() + creature.getBankBalance()); + creature.setBankBalance(0); + break; + } + case RadialItem.BANK_DEPOSIT_ALL: { + creature = player.getCreatureObject(); + creature.setBankBalance(creature.getCashBalance() + creature.getBankBalance()); + creature.setCashBalance(0); + break; + } + } +}; +var callback = function(player, creature, eventId, dataStrings) { + switch (eventId) { + case 0: + creature.setCashBalance(Number(dataStrings[0])); + creature.setBankBalance(Number(dataStrings[1])); break; } }; \ No newline at end of file diff --git a/src/network/packets/swg/zone/ClientOpenContainerMessage.java b/src/network/packets/swg/zone/ClientOpenContainerMessage.java index 54f32d08b..9f7b3b9d3 100644 --- a/src/network/packets/swg/zone/ClientOpenContainerMessage.java +++ b/src/network/packets/swg/zone/ClientOpenContainerMessage.java @@ -38,11 +38,12 @@ public class ClientOpenContainerMessage extends SWGPacket { private String slot; public ClientOpenContainerMessage() { - this(0); + this(0, ""); } - public ClientOpenContainerMessage(long containerId) { + public ClientOpenContainerMessage(long containerId, String slot) { this.containerId = containerId; + this.slot = slot; } public ClientOpenContainerMessage(ByteBuffer data) { @@ -52,7 +53,6 @@ public class ClientOpenContainerMessage extends SWGPacket { public void decode(ByteBuffer data) { if (!super.decode(data, CRC)) return; - getInt(data); containerId = getLong(data); slot = getAscii(data); } @@ -61,7 +61,6 @@ public class ClientOpenContainerMessage extends SWGPacket { ByteBuffer data = ByteBuffer.allocate(20 + slot.length()); addShort(data, 2); addInt (data, CRC); - addInt (data, 0); addLong (data, containerId); addAscii(data, slot); return data; diff --git a/src/resources/radial/RadialItem.java b/src/resources/radial/RadialItem.java index 16da32599..96b206408 100644 --- a/src/resources/radial/RadialItem.java +++ b/src/resources/radial/RadialItem.java @@ -118,6 +118,8 @@ public enum RadialItem { SERVER_MENU2 (0x006F, ""), BANK_TRANSFER (0x0070, "@sui:bank_credits"), BANK_ITEMS (0x0071, "@sui:bank_items"), + BANK_WITHDRAW_ALL (0x0072, "@sui:bank_withdrawall"), + BANK_DEPOSIT_ALL (0x0073, "@sui:bank_depositall"), SERVER_PET_MOUNT (0x011F, ""), SERVER_VEHICLE_ENTER_EXIT (0x0124, ""); diff --git a/src/services/objects/RadialService.java b/src/services/objects/RadialService.java index 583f3fd09..d02fefb98 100644 --- a/src/services/objects/RadialService.java +++ b/src/services/objects/RadialService.java @@ -7,7 +7,6 @@ import java.util.Set; import resources.control.Intent; import resources.control.Service; import network.packets.swg.zone.ObjectMenuSelect; -import network.packets.swg.zone.object_controller.CommandQueueEnqueue; import network.packets.swg.zone.object_controller.ObjectMenuRequest; import network.packets.swg.zone.object_controller.ObjectMenuResponse; import intents.network.GalacticPacketIntent; @@ -79,10 +78,8 @@ public class RadialService extends Service { return; } if (templatesRegistered.contains(target.getTemplate())) { - Log.d("RadialService", "Broadcasting. Service registered for object radial: " + target.getTemplate()); new RadialRequestIntent(player, target, request).broadcast(); } else { - Log.w("RadialService", "No service registered for object radial: " + target.getTemplate()); sendResponse(player, target, request.getOptions(), request.getCounter()); } } @@ -108,7 +105,6 @@ public class RadialService extends Service { Log.e("RadialService", "RadialItem does not exist with selection id: %d", select.getSelection()); return; } - Log.d("RadialService", "%s selected %s for target %s", player, selection, target); new RadialSelectionIntent(player, target, selection).broadcast(); } @@ -119,9 +115,6 @@ public class RadialService extends Service { menuResponse.setRadialOptions(options); menuResponse.setCounter(counter); player.sendPacket(menuResponse); - Log.d("RadialService", "Options: " + options.size()); - for (RadialOption option : options) - Log.d("RadialService", " Option: %s", option); } } diff --git a/src/utilities/IntentFactory.java b/src/utilities/IntentFactory.java index 520fe2d55..b370b45a8 100644 --- a/src/utilities/IntentFactory.java +++ b/src/utilities/IntentFactory.java @@ -55,7 +55,7 @@ public final class IntentFactory { * @param target Player receiving the message. * @param message System message to send. */ - private void sendSystemMessage(Player target, String message) { + public void sendSystemMessage(Player target, String message) { broadcast(message, target, BroadcastType.PERSONAL); } @@ -65,7 +65,7 @@ public final class IntentFactory { * @param table Table for the StringId * @param key Key to use within the StringId */ - private void sendSystemMessage(Player target, String table, String key) { + public void sendSystemMessage(Player target, String table, String key) { new ChatBroadcastIntent(target, new ProsePackage(table, key)).broadcast(); } @@ -84,7 +84,7 @@ public final class IntentFactory { * 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. */ - private void sendSystemMessage(Player target, String table, String key, Object... objects) { + public void sendSystemMessage(Player target, String table, String key, Object... objects) { new ChatBroadcastIntent(target, new ProsePackage("StringId", new StringId(table, key), objects)).broadcast(); }