From 92fcafe2eb46e04b23da82e19ceb17854ac0211a Mon Sep 17 00:00:00 2001 From: Waverunner Date: Sat, 13 Dec 2014 19:53:21 -0500 Subject: [PATCH 1/2] New objects are now created with their appropriate slots --- src/services/objects/ObjectManager.java | 44 +++++++++++++++++++++++-- 1 file changed, 41 insertions(+), 3 deletions(-) diff --git a/src/services/objects/ObjectManager.java b/src/services/objects/ObjectManager.java index 98c3cb4c8..694e012c2 100644 --- a/src/services/objects/ObjectManager.java +++ b/src/services/objects/ObjectManager.java @@ -5,9 +5,11 @@ import intents.swgobject_events.SWGObjectEventIntent; import intents.swgobject_events.SWGObjectMovedIntent; import java.util.ArrayList; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; import main.ProjectSWG; import network.packets.swg.zone.HeartBeatMessage; @@ -23,6 +25,10 @@ import resources.Race; import resources.Terrain; import resources.client_info.ClientFactory; import resources.client_info.visitors.ObjectData; +import resources.client_info.visitors.SlotArrangementData; +import resources.client_info.visitors.SlotDefinitionData; +import resources.client_info.visitors.SlotDescriptorData; +import resources.containers.ObjectSlot; import resources.control.Intent; import resources.control.Manager; import resources.objects.SWGObject; @@ -80,7 +86,9 @@ public class ObjectManager extends Manager { }); clientFac = new ClientFactory(); - + // Load up the slot definitions to the datamap in clientFac so we don't have to load it later + SlotDefinitionData def = (SlotDefinitionData) clientFac.getInfoFromFile("abstract/slot/slot_definition/slot_definitions.iff"); + return super.initialize(); } @@ -136,11 +144,41 @@ public class ObjectManager extends Manager { } private void addObjectAttributes(SWGObject obj, String template) { + System.out.println("Adding attributes for template " + template); ObjectData attributes = (ObjectData) clientFac.getInfoFromFile(ClientFactory.formatToSharedFile(template)); - obj.setStf((String) attributes.getAttribute("objectName")); - obj.setDetailStf((String) attributes.getAttribute("detailedDescription")); + obj.setStf((String) attributes.getAttribute(ObjectData.OBJ_STF)); + obj.setDetailStf((String) attributes.getAttribute(ObjectData.DETAIL_STF)); + + addSlotsToObject(obj, attributes); + } + + private void addSlotsToObject(SWGObject obj, ObjectData attributes) { + + if ((String) attributes.getAttribute(ObjectData.SLOT_DESCRIPTOR) != null) { + SlotDefinitionData slotDefs = (SlotDefinitionData) clientFac.getInfoFromFile("abstract/slot/slot_definition/slot_definitions.iff"); + + // TODO: These are the slots that the object HAS + System.out.println("SlotDescriptor: " + (String) attributes.getAttribute(ObjectData.SLOT_DESCRIPTOR)); + SlotDescriptorData descriptor = (SlotDescriptorData) clientFac.getInfoFromFile((String) attributes.getAttribute(ObjectData.SLOT_DESCRIPTOR)); + + for (String slotName : descriptor.getSlots()) { + System.out.println("Slot: " + slotName); + obj.addObjectSlot(new ObjectSlot(slotName)); + } + + + } + + if ((String) attributes.getAttribute(ObjectData.ARRANGEMENT_FILE) != null) { + // This is what slots the object *USES* + System.out.println("Arrangement: " + (String) attributes.getAttribute(ObjectData.ARRANGEMENT_FILE)); + + SlotArrangementData arrangementData = (SlotArrangementData) clientFac.getInfoFromFile((String) attributes.getAttribute(ObjectData.ARRANGEMENT_FILE)); + + obj.setArrangment(arrangementData.getArrangement()); + } } private void zoneInCharacter(PlayerManager playerManager, long netId, long characterId) { From 96a44952cd1038aea756fca208ef743a645d8264 Mon Sep 17 00:00:00 2001 From: Waverunner Date: Sun, 14 Dec 2014 10:52:47 -0500 Subject: [PATCH 2/2] Volume limit now set based on template files, Refactored zoning to account for ghost slot, Added inventory and datapad on creation --- .../objects/creature/CreatureObject.java | 5 ++++ src/services/objects/ObjectManager.java | 30 +++++-------------- src/services/player/ZoneService.java | 15 ++++++---- 3 files changed, 22 insertions(+), 28 deletions(-) diff --git a/src/resources/objects/creature/CreatureObject.java b/src/resources/objects/creature/CreatureObject.java index ea3021af6..d86d22e6c 100644 --- a/src/resources/objects/creature/CreatureObject.java +++ b/src/resources/objects/creature/CreatureObject.java @@ -8,6 +8,7 @@ import resources.Race; import resources.collections.SWGList; import resources.encodables.player.Equipment; import resources.network.BaselineBuilder; +import resources.objects.player.PlayerObject; import resources.objects.tangible.TangibleObject; import resources.player.Player; import utilities.Encoder.StringType; @@ -184,6 +185,10 @@ public class CreatureObject extends TangibleObject { return difficulty; } + public PlayerObject getPlayerObject() { + return (PlayerObject) (hasSlot("ghost") ? getSlottedObject("ghost") : null); + } + public boolean isBeast() { return beast; } diff --git a/src/services/objects/ObjectManager.java b/src/services/objects/ObjectManager.java index 694e012c2..f3365c158 100644 --- a/src/services/objects/ObjectManager.java +++ b/src/services/objects/ObjectManager.java @@ -5,11 +5,9 @@ import intents.swgobject_events.SWGObjectEventIntent; import intents.swgobject_events.SWGObjectMovedIntent; import java.util.ArrayList; -import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; import main.ProjectSWG; import network.packets.swg.zone.HeartBeatMessage; @@ -28,7 +26,6 @@ import resources.client_info.visitors.ObjectData; import resources.client_info.visitors.SlotArrangementData; import resources.client_info.visitors.SlotDefinitionData; import resources.client_info.visitors.SlotDescriptorData; -import resources.containers.ObjectSlot; import resources.control.Intent; import resources.control.Manager; import resources.objects.SWGObject; @@ -86,8 +83,6 @@ public class ObjectManager extends Manager { }); clientFac = new ClientFactory(); - // Load up the slot definitions to the datamap in clientFac so we don't have to load it later - SlotDefinitionData def = (SlotDefinitionData) clientFac.getInfoFromFile("abstract/slot/slot_definition/slot_definitions.iff"); return super.initialize(); } @@ -144,12 +139,11 @@ public class ObjectManager extends Manager { } private void addObjectAttributes(SWGObject obj, String template) { - System.out.println("Adding attributes for template " + template); - ObjectData attributes = (ObjectData) clientFac.getInfoFromFile(ClientFactory.formatToSharedFile(template)); obj.setStf((String) attributes.getAttribute(ObjectData.OBJ_STF)); obj.setDetailStf((String) attributes.getAttribute(ObjectData.DETAIL_STF)); + obj.setVolume((Integer) attributes.getAttribute(ObjectData.VOLUME_LIMIT)); addSlotsToObject(obj, attributes); } @@ -157,24 +151,16 @@ public class ObjectManager extends Manager { private void addSlotsToObject(SWGObject obj, ObjectData attributes) { if ((String) attributes.getAttribute(ObjectData.SLOT_DESCRIPTOR) != null) { - SlotDefinitionData slotDefs = (SlotDefinitionData) clientFac.getInfoFromFile("abstract/slot/slot_definition/slot_definitions.iff"); - // TODO: These are the slots that the object HAS - System.out.println("SlotDescriptor: " + (String) attributes.getAttribute(ObjectData.SLOT_DESCRIPTOR)); SlotDescriptorData descriptor = (SlotDescriptorData) clientFac.getInfoFromFile((String) attributes.getAttribute(ObjectData.SLOT_DESCRIPTOR)); for (String slotName : descriptor.getSlots()) { - System.out.println("Slot: " + slotName); - obj.addObjectSlot(new ObjectSlot(slotName)); + obj.addObjectSlot(slotName, null); } - - } if ((String) attributes.getAttribute(ObjectData.ARRANGEMENT_FILE) != null) { - // This is what slots the object *USES* - System.out.println("Arrangement: " + (String) attributes.getAttribute(ObjectData.ARRANGEMENT_FILE)); - + // This is what slots the object *USES* SlotArrangementData arrangementData = (SlotArrangementData) clientFac.getInfoFromFile((String) attributes.getAttribute(ObjectData.ARRANGEMENT_FILE)); obj.setArrangment(arrangementData.getArrangement()); @@ -210,12 +196,10 @@ public class ObjectManager extends Manager { System.err.println("ObjectManager: Failed to start zone - CreatureObject could not be fetched from database"); throw new NullPointerException("CreatureObject for ID: " + characterId + " cannot be null!"); } - player.setCreatureObject(creature); - for (SWGObject obj : creature.getChildren()) { - if (obj instanceof PlayerObject) { - player.setPlayerObject(obj); - break; - } + player.setCreatureObject(creature); // CreatureObject contains the player object! + + if (player.getPlayerObject() == null) { + System.err.println("FATAL: " + player.getUsername() + "'s CreatureObject has a null ghost!"); } } diff --git a/src/services/player/ZoneService.java b/src/services/player/ZoneService.java index 3864fb57e..fb58b86e9 100644 --- a/src/services/player/ZoneService.java +++ b/src/services/player/ZoneService.java @@ -144,29 +144,34 @@ public class ZoneService extends Service { creatureObj.setVolume(0x000F4240); PlayerObject playerObj = (PlayerObject) objManager.createObject("object/player/shared_player.iff"); //WeaponObject defaultWeap = (WeaponObject) objManager.createObject("object/weapon/melee/unarmed/shared_unarmed_default_player.iff"); - setCreatureObjectValues(creatureObj, create); + setCreatureObjectValues(objManager, creatureObj, create); setPlayerObjectValues(playerObj, create); playerObj.setTag(player.getAccessLevel()); - creatureObj.addChild(playerObj); if (!create.getHair().isEmpty()) { TangibleObject hairObj = (TangibleObject) objManager.createObject(create.getHair()); hairObj.setAppearanceData(create.getHairCustomization()); - creatureObj.addChild(hairObj); + creatureObj.setSlot("hair", hairObj); } creatureObj.setLocation(start); playerObj.setLocation(start); player.setCreatureObject(creatureObj); - player.setPlayerObject(playerObj); + + creatureObj.setSlot("ghost", playerObj); return creatureObj.getObjectId(); } - private void setCreatureObjectValues(CreatureObject creatureObj, ClientCreateCharacter create) { + private void setCreatureObjectValues(ObjectManager objManager, CreatureObject creatureObj, ClientCreateCharacter create) { + TangibleObject inventory = (TangibleObject) objManager.createObject("object/tangible/inventory/shared_character_inventory.iff"); + TangibleObject datapad = (TangibleObject) objManager.createObject("object/tangible/datapad/shared_character_datapad.iff"); + creatureObj.setRace(Race.getRaceByFile(create.getRace())); creatureObj.setAppearanceData(create.getCharCustomization()); creatureObj.setHeight(create.getHeight()); creatureObj.setName(create.getName()); creatureObj.setPvpType(20); creatureObj.getSkills().add("species_" + creatureObj.getRace().getSpecies()); + creatureObj.setSlot("inventory", inventory); + creatureObj.setSlot("datapad", datapad); } private void setPlayerObjectValues(PlayerObject playerObj, ClientCreateCharacter create) {