From 51a923988977522dd7ef2dd084bd43069367bc6c Mon Sep 17 00:00:00 2001 From: Seefo Date: Wed, 11 Jun 2014 18:35:20 -0400 Subject: [PATCH] Fixed several housing issues, see extended Fixed an issue where players who weren't admins could access the structure management terminal Fixed an issue a person requesting the housing status page would see their own name as the owner even if they weren't Fixed an issue where the object service would encounter an error when attempting to view child objects via an attachment Added getFirstName and getLastName methods to the CreatureObject class Possibly fixed an issue where items that were moveable would be picked up via double-clicking --- scripts/radial/structure/moveable.py | 1 - .../structure_management_terminal.py | 42 +++++++++--------- .../objects/creature/CreatureObject.java | 10 +++++ src/services/housing/HousingService.java | 44 ++++++++----------- src/services/object/ObjectService.java | 10 +++-- 5 files changed, 56 insertions(+), 51 deletions(-) diff --git a/scripts/radial/structure/moveable.py b/scripts/radial/structure/moveable.py index 7977d62f..1419fae6 100644 --- a/scripts/radial/structure/moveable.py +++ b/scripts/radial/structure/moveable.py @@ -2,7 +2,6 @@ from resources.common import RadialOptions import sys def createRadial(core, owner, target, radials): - radials.clear() radials.add(RadialOptions(0, 7, 1, '')) radials.add(RadialOptions(0, 11, 1, '')) diff --git a/scripts/radial/structure/structure_management_terminal.py b/scripts/radial/structure/structure_management_terminal.py index 27c00f48..d6756fec 100644 --- a/scripts/radial/structure/structure_management_terminal.py +++ b/scripts/radial/structure/structure_management_terminal.py @@ -7,26 +7,28 @@ import sys def createRadial(core, owner, target, radials): #(byte parentId, short optionId, byte optionType, String description) - radials.clear() - radials.add(RadialOptions(0, 7, 0, 'Examine')) - radials.add(RadialOptions(0, 78, 0, '@player_structure:management')) - radials.add(RadialOptions(0, 117, 0, '@player_structure:permissions')) - radials.add(RadialOptions(2, 128, 0, '@player_structure:permission_destroy')) - radials.add(RadialOptions(2, 124, 0, '@player_structure:management_status')) - radials.add(RadialOptions(2, 129, 0, '@player_structure:management_pay')) - radials.add(RadialOptions(2, 50, 0, '@base_player:set_name')) - radials.add(RadialOptions(2, 127, 0, '@player_structure:management_residence')) - radials.add(RadialOptions(2, 125, 0, '@player_structure:management_privacy : ' + core.housingService.fetchPrivacyString(target))) - radials.add(RadialOptions(2, 171, 0, '@player_structure:find_items_find_all_house_items')) - radials.add(RadialOptions(2, 173, 0, '@player_structure:move_first_item')) - radials.add(RadialOptions(2, 174, 0, '@player_structure:find_items_search_for_house_items')) - radials.add(RadialOptions(2, 175, 0, '@player_structure:delete_all_items_title')) - radials.add(RadialOptions(2, 172, 0, 'Pack Up This Building')) - radials.add(RadialOptions(3, 121, 0, '@player_structure:permission_enter')) - radials.add(RadialOptions(3, 122, 0, '@player_structure:permission_admin')) - radials.add(RadialOptions(3, 123, 0, '@player_structure:permission_banned')) - if owner.getSkillModBase('manage_vendor') >= 1: - radials.add(RadialOptions(2, 130, 0, '@player_structure:create_vendor')) + + if core.housingService.getPermissions(owner, target.getContainer()): + radials.clear() + radials.add(RadialOptions(0, 7, 0, 'Examine')) + radials.add(RadialOptions(0, 78, 0, '@player_structure:management')) + radials.add(RadialOptions(0, 117, 0, '@player_structure:permissions')) + radials.add(RadialOptions(2, 128, 0, '@player_structure:permission_destroy')) + radials.add(RadialOptions(2, 124, 0, '@player_structure:management_status')) + radials.add(RadialOptions(2, 129, 0, '@player_structure:management_pay')) + radials.add(RadialOptions(2, 50, 0, '@base_player:set_name')) + radials.add(RadialOptions(2, 127, 0, '@player_structure:management_residence')) + radials.add(RadialOptions(2, 125, 0, '@player_structure:management_privacy : ' + core.housingService.fetchPrivacyString(target))) + radials.add(RadialOptions(2, 171, 0, '@player_structure:find_items_find_all_house_items')) + radials.add(RadialOptions(2, 173, 0, '@player_structure:move_first_item')) + radials.add(RadialOptions(2, 174, 0, '@player_structure:find_items_search_for_house_items')) + radials.add(RadialOptions(2, 175, 0, '@player_structure:delete_all_items_title')) + radials.add(RadialOptions(2, 172, 0, 'Pack Up This Building')) + radials.add(RadialOptions(3, 121, 0, '@player_structure:permission_enter')) + radials.add(RadialOptions(3, 122, 0, '@player_structure:permission_admin')) + radials.add(RadialOptions(3, 123, 0, '@player_structure:permission_banned')) + if owner.getSkillModBase('manage_vendor') >= 1: + radials.add(RadialOptions(2, 130, 0, '@player_structure:create_vendor')) return diff --git a/src/resources/objects/creature/CreatureObject.java b/src/resources/objects/creature/CreatureObject.java index 2c76eff7..e6284a4e 100644 --- a/src/resources/objects/creature/CreatureObject.java +++ b/src/resources/objects/creature/CreatureObject.java @@ -1853,4 +1853,14 @@ public class CreatureObject extends TangibleObject implements Serializable { } } } + + public String getFirstName() + { + return getCustomName().split(" ")[0]; + } + + public String getLastName() + { + return getCustomName().split(" ")[1]; + } } diff --git a/src/services/housing/HousingService.java b/src/services/housing/HousingService.java index 63fcea95..55b75aa6 100644 --- a/src/services/housing/HousingService.java +++ b/src/services/housing/HousingService.java @@ -146,7 +146,6 @@ public class HousingService implements INetworkDispatch { core.objectService.destroyObject(deed); - building.setAttachment("sign", sign); // meh workaround building.setAttachment("nextMaintenance", System.currentTimeMillis() + 3600000); building.setAttachment("structureOwner", actor.getObjectID()); @@ -489,22 +488,20 @@ public class HousingService implements INetworkDispatch { owner.sendSystemMessage("Structure renamed.", DisplayType.Broadcast); } - public void createStatusSUIPage(SWGObject owner, TangibleObject target) { + public void createStatusSUIPage(CreatureObject owner, TangibleObject target) + { final BuildingObject building = (BuildingObject) target.getGrandparent(); - //final BuildingObject building = (BuildingObject) target.getAttachment("housing_parentstruct"); + String displayname = "@installation_n:"+building.getStfName(); - if (building.getCustomName()!=null) - displayname = building.getCustomName(); + if (building.getCustomName()!=null) displayname = building.getCustomName(); + final SUIWindow window = core.suiService.createSUIWindow("Script.listBox", owner, target, 0); window.setProperty("bg.caption.lblTitle:Text", "@player_structure:structure_status_t"); window.setProperty("Prompt.lblPrompt:Text", "@player_structure:structure_name_prompt" + " " + displayname); - String ownerName = owner.getCustomName(); - if (ownerName.length()>0){ - String[] helper = ownerName.split(" "); - ownerName = helper[0]; - } - + + String ownerName = core.objectService.getObject((long) building.getAttachment("structureOwner")).getFirstName(); String maintenancePool_string = ""+(int)building.getMaintenanceAmount(); + int hourlyMaintenance = building.getBMR(); float totalNumberOfHours = (float)building.getMaintenanceAmount()/hourlyMaintenance; float minuteFraction = ((totalNumberOfHours * 100) % 100) / 100; @@ -515,10 +512,10 @@ public class HousingService implements INetworkDispatch { maintenancePool_string += " (" + nDays + " days, " + nHours + " hours, " + nMinutes + " minutes)"; window.addListBoxMenuItem("@player_structure:owner_prompt" + " " + ownerName, 0); - if (building.getPrivacy()==BuildingObject.PRIVATE) - window.addListBoxMenuItem("@player_structure:structure_private", 1); - else - window.addListBoxMenuItem("@player_structure:structure_public", 1); + + if (building.getPrivacy()==BuildingObject.PRIVATE) window.addListBoxMenuItem("@player_structure:structure_private", 1); + else window.addListBoxMenuItem("@player_structure:structure_public", 1); + window.addListBoxMenuItem("@player_structure:condition_prompt" + " " + target.getConditionDamage()+"%", 2); window.addListBoxMenuItem("@player_structure:maintenance_pool_prompt " + maintenancePool_string, 3); window.addListBoxMenuItem("@player_structure:maintenance_rate_prompt " + building.getBMR() + " cr/h", 4); // @player_structure:credits_per_hour @@ -557,7 +554,7 @@ public class HousingService implements INetworkDispatch { return; } } - if(System.currentTimeMillis() < (long) owner.getAttachment("residencyCooldown") && cityActorIsIn.getMayorID() != owner.getObjectID()) { + if((owner.getAttachment("residencyCooldown") == null || System.currentTimeMillis() < (long) owner.getAttachment("residencyCooldown")) && cityActorIsIn.getMayorID() != owner.getObjectID()) { ((CreatureObject) owner).sendSystemMessage(OutOfBand.ProsePackage("@player_structure:change_residence_time", "DI", (int) ((long) owner.getAttachment("residencyCooldown") - System.currentTimeMillis()) / 3600000), (byte) 0); return; } @@ -621,16 +618,11 @@ public class HousingService implements INetworkDispatch { core.suiService.closeSUIWindow(owner, 0); } }); - core.suiService.openSUIWindow(window); - - + core.suiService.openSUIWindow(window); } - public void handleDeleteAllItems(SWGObject owner, TangibleObject target) { - final BuildingObject building = (BuildingObject) target.getGrandparent(); - //final BuildingObject building = (BuildingObject) target.getAttachment("housing_parentstruct"); - //building.getItemsList().clear(); - // confirmation needed + public void handleDeleteAllItems(SWGObject owner, TangibleObject target) + { confirmDeleteAllItems(owner, target); } @@ -676,8 +668,8 @@ public class HousingService implements INetworkDispatch { core.suiService.openSUIWindow(window); } - public void confirmDeleteAllItems2ndStage(final CreatureObject ownerC, BuildingObject building) { - + public void confirmDeleteAllItems2ndStage(final CreatureObject ownerC, BuildingObject building) + { final SUIWindow window = core.suiService.createMessageBox(2,"@player_structure:structure_status","@player_structure:structure_name_prompt", ownerC, building, 0); window.setProperty("bg.caption.lblTitle:Text", "@player_structure:confirm_destruction_t"); window.setProperty("Prompt.lblPrompt:Text", "@player_structure:delete_all_items_second_d"); diff --git a/src/services/object/ObjectService.java b/src/services/object/ObjectService.java index 9edab839..1577f502 100644 --- a/src/services/object/ObjectService.java +++ b/src/services/object/ObjectService.java @@ -528,11 +528,13 @@ public class ObjectService implements INetworkDispatch { core.simulationService.remove(object, object.getWorldPosition().x, object.getWorldPosition().z, true); } @SuppressWarnings("unchecked") Vector childObjects = (Vector) object.getAttachment("childObjects"); - for(SWGObject child : childObjects) { - if(child.getParentId() != 0) - destroyObject(child); + if(childObjects != null) + { + for(SWGObject child : childObjects) { + if(child != null && child.getParentId() != 0) + destroyObject(child); + } } - } public void destroyObject(long objectID) {