From be5fd47373ee3f99e102ad26cc02487198dad6c1 Mon Sep 17 00:00:00 2001 From: Obique PSWG Date: Sat, 1 Aug 2015 10:24:00 -0500 Subject: [PATCH] Got a basic start to banking and radials - currently sidetracked by memory bug --- serverdata/radial/radials.sdb | 2 ++ .../swg/zone/ClientOpenContainerMessage.java | 1 + .../object_controller/ObjectMenuRequest.java | 8 +++---- src/resources/RadialOption.java | 21 ++++++++++++------ src/services/objects/ObjectManager.java | 6 +++++ src/services/objects/RadialService.java | 22 +++++++++++++++++++ .../player/CharacterCreationService.java | 5 ++++- 7 files changed, 53 insertions(+), 12 deletions(-) create mode 100644 serverdata/radial/radials.sdb create mode 100644 src/services/objects/RadialService.java diff --git a/serverdata/radial/radials.sdb b/serverdata/radial/radials.sdb new file mode 100644 index 000000000..743938c20 --- /dev/null +++ b/serverdata/radial/radials.sdb @@ -0,0 +1,2 @@ +iff script +TEXT PRIMARY KEY NOT NULL TEXT NOT NULL diff --git a/src/network/packets/swg/zone/ClientOpenContainerMessage.java b/src/network/packets/swg/zone/ClientOpenContainerMessage.java index 748eda8bd..54f32d08b 100644 --- a/src/network/packets/swg/zone/ClientOpenContainerMessage.java +++ b/src/network/packets/swg/zone/ClientOpenContainerMessage.java @@ -52,6 +52,7 @@ public class ClientOpenContainerMessage extends SWGPacket { public void decode(ByteBuffer data) { if (!super.decode(data, CRC)) return; + getInt(data); containerId = getLong(data); slot = getAscii(data); } diff --git a/src/network/packets/swg/zone/object_controller/ObjectMenuRequest.java b/src/network/packets/swg/zone/object_controller/ObjectMenuRequest.java index 61d5c352b..c830624d8 100644 --- a/src/network/packets/swg/zone/object_controller/ObjectMenuRequest.java +++ b/src/network/packets/swg/zone/object_controller/ObjectMenuRequest.java @@ -73,17 +73,17 @@ public class ObjectMenuRequest extends ObjectController { } public ByteBuffer encode() { - int optSize = 0; + int optSize = 21; for (RadialOption option : options) optSize += 7 + option.getText().length()*2; - ByteBuffer data = ByteBuffer.allocate(HEADER_LENGTH + 21 + optSize); + ByteBuffer data = ByteBuffer.allocate(HEADER_LENGTH + optSize); encodeHeader(data); addLong(data, targetId); addLong(data, requesterId); addInt(data, options.size()); - int optNum = 0; + int optNum = 1; for (RadialOption option : options) { - addByte(data, ++optNum); // option number + addByte(data, optNum++); // option number addByte(data, option.getParentId()); addShort(data, option.getId()); addByte(data, option.getOptionType()); diff --git a/src/resources/RadialOption.java b/src/resources/RadialOption.java index 492dab100..869135485 100644 --- a/src/resources/RadialOption.java +++ b/src/resources/RadialOption.java @@ -28,29 +28,36 @@ package resources; public class RadialOption { + private short id; private byte parentId; private byte optionType; // 1 unless the option text isn't listed in the radial item list (datatable). - ANHWiki private String text; - public RadialOption() { } + public RadialOption() { + + } + public RadialOption(String text, short id, byte parentId, byte optionType) { this.text = text; this.id = id; this.parentId = parentId; - this.optionType = (text == null || text.isEmpty()) ? (byte) 1 : optionType; + this.optionType = optionType; } - public short getId() { return id; } - public void setId(short id) { this.id = id; } - public byte getParentId() { return parentId; } public void setParentId(byte parentId) { this.parentId = parentId; } + public void setId(short id) { this.id = id; } public void setOptionType(byte optionType) { this.optionType = optionType; } public void setText(String text) { this.text = text; } + + public byte getParentId() { return parentId; } + public short getId() { return id; } public byte getOptionType() { return optionType; } public String getText() { return text; } + @Override public String toString() { - return String.valueOf(id) + ": parentId- " + String.valueOf(parentId) + " optionType:" + String.valueOf(optionType) + " text-" + text; + return String.format("ID=%d Parent=%d Option=%d Text=%s", id, parentId, optionType, text); } -} \ No newline at end of file + +} diff --git a/src/services/objects/ObjectManager.java b/src/services/objects/ObjectManager.java index 6d1bd2196..8fc86363f 100644 --- a/src/services/objects/ObjectManager.java +++ b/src/services/objects/ObjectManager.java @@ -204,6 +204,12 @@ public class ObjectManager extends Manager { obj.setOwner(null); if (!(obj instanceof CreatureObject) || ((CreatureObject) obj).getPlayerObject() == null) objectAwareness.add(obj); + if (obj instanceof CreatureObject && ((CreatureObject) obj).getPlayerObject() != null) { + if (!obj.hasSlot("bank")) + obj.addObject(createObject("object/tangible/bank/shared_character_bank.iff", false)); + if (!obj.hasSlot("mission_bag")) + obj.addObject(createObject("object/tangible/mission_bag/shared_mission_bag.iff", false)); + } objectMap.put(obj.getObjectId(), obj); updateBuildoutParent(obj); addChildrenObjects(obj); diff --git a/src/services/objects/RadialService.java b/src/services/objects/RadialService.java new file mode 100644 index 000000000..10f2fb1c0 --- /dev/null +++ b/src/services/objects/RadialService.java @@ -0,0 +1,22 @@ +package services.objects; + +import resources.control.Intent; +import resources.control.Service; + +public class RadialService extends Service { + + public RadialService() { + + } + + @Override + public boolean initialize() { + return super.initialize(); + } + + @Override + public void onIntentReceived(Intent i) { + + } + +} diff --git a/src/services/player/CharacterCreationService.java b/src/services/player/CharacterCreationService.java index bbbb58553..a65203cc8 100644 --- a/src/services/player/CharacterCreationService.java +++ b/src/services/player/CharacterCreationService.java @@ -258,12 +258,13 @@ public class CharacterCreationService extends Service { return ErrorMessage.NAME_APPROVED; } - private long createCharacter(ObjectManager objManager, Player player, ClientCreateCharacter create) { Location start = getStartLocation(create.getStart()); Race race = Race.getRaceByFile(create.getRace()); CreatureObject creatureObj = createCreature(objManager, race.getFilename(), start); PlayerObject playerObj = createPlayer(objManager, "object/player/shared_player.iff"); + SWGObject bankObj = objManager.createObject("object/tangible/bank/shared_character_bank.iff", false); + SWGObject missionObj = objManager.createObject("object/tangible/mission_bag/shared_mission_bag.iff", false); setCreatureObjectValues(objManager, creatureObj, create); setPlayerObjectValues(playerObj, create); @@ -273,6 +274,8 @@ public class CharacterCreationService extends Service { creatureObj.setVolume(0x000F4240); creatureObj.setOwner(player); creatureObj.addObject(playerObj); // ghost slot + creatureObj.addObject(bankObj); + creatureObj.addObject(missionObj); playerObj.setAdminTag(player.getAccessLevel()); player.setCreatureObject(creatureObj); return creatureObj.getObjectId();