From 538bb789d29f4de59663bc6de747a65cf0ab6cdf Mon Sep 17 00:00:00 2001 From: "R. Uvanni" Date: Sun, 24 Aug 2014 22:57:13 -0400 Subject: [PATCH] Equipment changes, see extended Fixed an issue where attributes weren't being removed when unequipping items. EquipmentList and ApperaranceList are currently broken and will cause crashes when modified, thus when equipping an item in any way will cause a crash. Expect a fix for that from Treeku shortly. --- scripts/commands/transferitemarmor.py | 6 ------ scripts/commands/transferitemmisc.py | 8 +------- scripts/commands/transferitemweapon.py | 10 +--------- .../objects/creature/CreatureObject.java | 9 +++++++++ src/services/equipment/EquipmentService.java | 17 ++++++++--------- 5 files changed, 19 insertions(+), 31 deletions(-) diff --git a/scripts/commands/transferitemarmor.py b/scripts/commands/transferitemarmor.py index 6bf734c3..c78c862c 100644 --- a/scripts/commands/transferitemarmor.py +++ b/scripts/commands/transferitemarmor.py @@ -39,12 +39,6 @@ def run(core, actor, target, commandString): if object != None: actor.transferTo(actor, oldContainer, object) - - if target.getTemplate().find('/wearables/') or target.getTemplate().find('/weapon/'): - core.equipmentService.equip(actor, target) - - for object in replacedObjects: - core.equipmentService.unequip(actor, object) oldContainer.transferTo(actor, container, target) diff --git a/scripts/commands/transferitemmisc.py b/scripts/commands/transferitemmisc.py index 03bf8fc3..d1dee497 100644 --- a/scripts/commands/transferitemmisc.py +++ b/scripts/commands/transferitemmisc.py @@ -78,13 +78,7 @@ def run(core, actor, target, commandString): if object != None: container.transferTo(actor, container, object) - - if target.getTemplate().find('/wearables/') or target.getTemplate().find('/weapon/'): - core.equipmentService.equip(actor, target) - - for object in replacedObjects: - core.equipmentService.unequip(actor, object) # Needs to be verified due to the new structure of the script - + oldContainer.transferTo(actor, container, target) if oldContainer == actor.getSlottedObject('appearance_inventory'): diff --git a/scripts/commands/transferitemweapon.py b/scripts/commands/transferitemweapon.py index c75635a3..c2586049 100644 --- a/scripts/commands/transferitemweapon.py +++ b/scripts/commands/transferitemweapon.py @@ -5,8 +5,6 @@ def setup(): def run(core, actor, target, commandString): - - parsedMsg = commandString.split(' ', 3) objService = core.objectService containerID = long(parsedMsg[1]) @@ -39,13 +37,7 @@ def run(core, actor, target, commandString): if object != None: container.transferTo(actor, container, object) - - if target.getTemplate().find('/wearables/') or target.getTemplate().find('/weapon/'): - core.equipmentService.equip(actor, target) - - for object in replacedObjects: - core.equipmentService.unequip(actor, object) - + oldContainer.transferTo(actor, container, target) return diff --git a/src/resources/objects/creature/CreatureObject.java b/src/resources/objects/creature/CreatureObject.java index 1d6daf61..91be0990 100644 --- a/src/resources/objects/creature/CreatureObject.java +++ b/src/resources/objects/creature/CreatureObject.java @@ -931,6 +931,15 @@ public class CreatureObject extends TangibleObject implements IPersistent { } } + public boolean isWearing(SWGObject object) + { + for (Equipment equipment : getEquipmentList()) + { + if (equipment.getObjectId() == object.getObjectId()) return true; + } + return false; + } + public void removeObjectFromEquipList(SWGObject object) { if (object instanceof TangibleObject) { for (Equipment equipment : getEquipmentList()) { diff --git a/src/services/equipment/EquipmentService.java b/src/services/equipment/EquipmentService.java index 29441989..be0b6729 100644 --- a/src/services/equipment/EquipmentService.java +++ b/src/services/equipment/EquipmentService.java @@ -163,15 +163,14 @@ public class EquipmentService implements INetworkDispatch { String serverTemplate = template.replace(".iff", ""); PyObject func = core.scriptService.getMethod("scripts/" + serverTemplate.split("shared_" , 2)[0].replace("shared_", ""), serverTemplate.split("shared_" , 2)[1], "equip"); - if(func != null) func.__call__(Py.java2py(core), Py.java2py(actor), Py.java2py(item)); - if(!actor.getEquipmentList().contains(item.getObjectID())) + if(func != null) func.__call__(Py.java2py(core), Py.java2py(actor), Py.java2py(item)); + + if(!actor.isWearing(item)) { //if(item instanceof WeaponObject){ //A rifle is not identified as a true WeaponObject ?!?!?!?! - if (item.getTemplate().contains("object/weapon/")){ - actor.setWeaponId(item.getObjectID()); // This line causes the rifle lockup - //System.out.println("WEAPON IDENTIFIED!"); - } + if (item.getTemplate().startsWith("object/weapon/")) actor.setWeaponId(item.getObjectID()); + actor.addObjectToEquipList(item); processItemAtrributes(actor, item, true); } @@ -185,10 +184,10 @@ public class EquipmentService implements INetworkDispatch { PyObject func = core.scriptService.getMethod("scripts/" + serverTemplate.split("shared_" , 2)[0].replace("shared_", ""), serverTemplate.split("shared_" , 2)[1], "unequip"); if(func != null) func.__call__(Py.java2py(core), Py.java2py(actor), Py.java2py(item)); - - if(actor.getEquipmentList().contains(item.getObjectID())) + if(actor.isWearing(item)) { - if(item instanceof WeaponObject) actor.setWeaponId(actor.getSlottedObject("default_weapon").getObjectID()); + // This should be changed to instanceof WeaponObject eventually... see comment in equip() + if (item.getTemplate().startsWith("object/weapon/")) actor.setWeaponId(actor.getSlottedObject("default_weapon").getObjectID()); actor.removeObjectFromEquipList(item); processItemAtrributes(actor, item, false);