From 8cbc346811de9ff5033ceae08bc2a2d08155c5dc Mon Sep 17 00:00:00 2001 From: Ziggy Date: Mon, 11 May 2015 10:29:31 +0200 Subject: [PATCH 1/4] Added an equipItem() method in CreatureObject --- .../objects/creature/CreatureObject.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/resources/objects/creature/CreatureObject.java b/src/resources/objects/creature/CreatureObject.java index a7a173aaf..29f225b51 100644 --- a/src/resources/objects/creature/CreatureObject.java +++ b/src/resources/objects/creature/CreatureObject.java @@ -27,6 +27,8 @@ ***********************************************************************************/ package resources.objects.creature; +import java.util.List; + import network.packets.swg.zone.SceneEndBaselines; import network.packets.swg.zone.UpdatePostureMessage; import network.packets.swg.zone.UpdatePvpStatusMessage; @@ -109,6 +111,23 @@ public class CreatureObject extends TangibleObject { initBaseAttributes(); } + /** + * It is only recommended that this method be used when you have + * an item and you won't know which slots it will occupy until you've + * looped through the arrangement list that resides within SWGObject. + * + * If you know the slot which your object is supposed to occupy, it's + * recommended that you instead use setSlot(), effectively skipping + * the process of looping. + * + * @param item to equip + */ + public void equipItem(TangibleObject item) { + for(List slotNameList : item.getArrangement()) + for(String slotName : slotNameList) + super.setSlot(slotName, item); + } + public void addEquipment(SWGObject obj) { synchronized(equipmentList) { if (obj instanceof WeaponObject) From 6995dd223d2e3e300e334e441d75a4bd346c16e6 Mon Sep 17 00:00:00 2001 From: Ziggy Date: Mon, 11 May 2015 10:29:56 +0200 Subject: [PATCH 2/4] Fixed an issue where the starter clothing wasn't being properly equipped --- src/services/player/ZoneService.java | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/src/services/player/ZoneService.java b/src/services/player/ZoneService.java index d006661a1..2f655a82c 100644 --- a/src/services/player/ZoneService.java +++ b/src/services/player/ZoneService.java @@ -337,8 +337,7 @@ public class ZoneService extends Service { return; TangibleObject hairObj = createTangible(objManager, ClientFactory.formatToSharedFile(hair)); hairObj.setAppearanceData(customization); - creatureObj.setSlot("hair", hairObj); - creatureObj.addEquipment(hairObj); + creatureObj.equipItem(hairObj); } private void setCreatureObjectValues(ObjectManager objManager, CreatureObject creatureObj, ClientCreateCharacter create) { @@ -351,11 +350,8 @@ public class ZoneService extends Service { creatureObj.setName(create.getName()); creatureObj.setPvpType(20); creatureObj.getSkills().add("species_" + creatureObj.getRace().getSpecies()); - creatureObj.setSlot("inventory", inventory); - creatureObj.setSlot("datapad", datapad); - - creatureObj.addEquipment(inventory); - creatureObj.addEquipment(datapad); + creatureObj.equipItem(inventory); + creatureObj.equipItem(datapad); } private void setPlayerObjectValues(PlayerObject playerObj, ClientCreateCharacter create) { @@ -372,10 +368,9 @@ public class ZoneService extends Service { if (player.getSlottedObject("inventory") == null) return; - for (String template : profTemplates.get(profession).getItems(ClientFactory.formatToSharedFile(race))) { - TangibleObject clothing = createTangible(objManager, template); - player.addChild(clothing); - } + for (String template : profTemplates.get(profession).getItems(ClientFactory.formatToSharedFile(race))) + player.equipItem(createTangible(objManager, template)); + } private void loadProfTemplates() { From f1285669dcd994a0c2f881cb75ad0dcd4c4f6796 Mon Sep 17 00:00:00 2001 From: Ziggy Date: Mon, 11 May 2015 10:37:21 +0200 Subject: [PATCH 3/4] Minor optimisation to the equipping of inventory and datapad --- src/services/player/ZoneService.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/services/player/ZoneService.java b/src/services/player/ZoneService.java index 2f655a82c..fca9c03e4 100644 --- a/src/services/player/ZoneService.java +++ b/src/services/player/ZoneService.java @@ -350,8 +350,11 @@ public class ZoneService extends Service { creatureObj.setName(create.getName()); creatureObj.setPvpType(20); creatureObj.getSkills().add("species_" + creatureObj.getRace().getSpecies()); - creatureObj.equipItem(inventory); - creatureObj.equipItem(datapad); + creatureObj.setSlot("inventory", inventory); + creatureObj.setSlot("datapad", datapad); + + creatureObj.addEquipment(inventory); + creatureObj.addEquipment(datapad); } private void setPlayerObjectValues(PlayerObject playerObj, ClientCreateCharacter create) { From 2875cf6ababddccce34b53e3f6ab302add9ccddb Mon Sep 17 00:00:00 2001 From: Ziggy Date: Mon, 11 May 2015 10:51:03 +0200 Subject: [PATCH 4/4] Minor optimisation to when hair is equipped --- src/services/player/ZoneService.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/services/player/ZoneService.java b/src/services/player/ZoneService.java index fca9c03e4..711372c00 100644 --- a/src/services/player/ZoneService.java +++ b/src/services/player/ZoneService.java @@ -336,8 +336,10 @@ public class ZoneService extends Service { if (hair.isEmpty()) return; TangibleObject hairObj = createTangible(objManager, ClientFactory.formatToSharedFile(hair)); + hairObj.setAppearanceData(customization); - creatureObj.equipItem(hairObj); + creatureObj.setSlot("hair", hairObj); + creatureObj.addEquipment(hairObj); } private void setCreatureObjectValues(ObjectManager objManager, CreatureObject creatureObj, ClientCreateCharacter create) {