From d182fea6ebd4f242438d6b5a0e45f17b973b6fa6 Mon Sep 17 00:00:00 2001 From: Seefo Date: Wed, 7 May 2014 22:11:18 -0400 Subject: [PATCH] Loot System changes, see extended * Added /setgodmode genloot command * Added the option to have a 'custom setup' of a looted object template (see scripts/loot/lootItems/veryrareloot/rare_ankarres_sapphire.py), procedure is same as object scripts * Looted items no longer need custom names in order to not have an empty name (most scripts containing a custom name can now have that method removed) --- scripts/commands/setgodmode.py | 8 ++++++++ .../armor/bone/bone_armor_bicep_left.py | 4 ++-- .../veryrareloot/rare_ankarres_sapphire.py | 2 ++ src/resources/loot/LootRollSession.java | 10 +++++++++- src/services/EquipmentService.java | 4 ++-- src/services/LootService.java | 16 +++++++++++++++- 6 files changed, 38 insertions(+), 6 deletions(-) diff --git a/scripts/commands/setgodmode.py b/scripts/commands/setgodmode.py index b0e78d52..680ba082 100644 --- a/scripts/commands/setgodmode.py +++ b/scripts/commands/setgodmode.py @@ -116,5 +116,13 @@ def run(core, actor, target, commandString): elif command == 'setBounty': core.playerService.sendSetBountyWindow(actor, actor) return + + elif command == 'genloot': + object = core.lootService.generateLootItem(actor, arg1) + + inventory = actor.getSlottedObject('inventory') + + if inventory: + inventory.add(object) return diff --git a/scripts/loot/lootItems/armor/bone/bone_armor_bicep_left.py b/scripts/loot/lootItems/armor/bone/bone_armor_bicep_left.py index c6582c41..fe66e1ab 100644 --- a/scripts/loot/lootItems/armor/bone/bone_armor_bicep_left.py +++ b/scripts/loot/lootItems/armor/bone/bone_armor_bicep_left.py @@ -3,9 +3,9 @@ def itemTemplate(): return ['object/tangible/wearables/armor/bone/shared_armor_bone_s01_bicep_l.iff'] -def customItemName(): +#def customItemName(): - return 'Bone Armor Bicep Left' +# return 'Bone Armor Bicep Left' def customItemStackCount(): diff --git a/scripts/loot/lootItems/veryrareloot/rare_ankarres_sapphire.py b/scripts/loot/lootItems/veryrareloot/rare_ankarres_sapphire.py index 5559fc50..cee3f5ae 100644 --- a/scripts/loot/lootItems/veryrareloot/rare_ankarres_sapphire.py +++ b/scripts/loot/lootItems/veryrareloot/rare_ankarres_sapphire.py @@ -15,3 +15,5 @@ def requiredCL(): return 80 +def customSetup(object): + object.setCustomName2("Success!") \ No newline at end of file diff --git a/src/resources/loot/LootRollSession.java b/src/resources/loot/LootRollSession.java index d6f26ad4..b20f1030 100644 --- a/src/resources/loot/LootRollSession.java +++ b/src/resources/loot/LootRollSession.java @@ -49,7 +49,10 @@ public class LootRollSession { private int lootedObjectLevel=0; private int lootedObjectDifficulty=0; - public LootRollSession(){ + public LootRollSession() + { + droppedItems = new ArrayList(); + errorMessages = new ArrayList(); } public LootRollSession(CreatureObject requester, TangibleObject lootedObject){ @@ -113,6 +116,11 @@ public class LootRollSession { public Planet getSessionPlanet() { return sessionPlanet; } + + public void setSessionPlanet(Planet planet) + { + this.sessionPlanet = planet; + } public List getErrorMessages() { return errorMessages; diff --git a/src/services/EquipmentService.java b/src/services/EquipmentService.java index 3f2b5a20..36aecbe8 100644 --- a/src/services/EquipmentService.java +++ b/src/services/EquipmentService.java @@ -134,7 +134,7 @@ public class EquipmentService implements INetworkDispatch { return result; } - public void equip(CreatureObject actor, SWGObject item) + synchronized public void equip(CreatureObject actor, SWGObject item) { String template = ((item.getAttachment("customServerTemplate") == null) ? item.getTemplate() : (item.getTemplate().split("shared_")[0] + "shared_" + ((String) item.getAttachment("customServerTemplate")) + ".iff")); String serverTemplate = template.replace(".iff", ""); @@ -151,7 +151,7 @@ public class EquipmentService implements INetworkDispatch { } } - public void unequip(CreatureObject actor, SWGObject item) + synchronized public void unequip(CreatureObject actor, SWGObject item) { String template = ((item.getAttachment("customServerTemplate") == null) ? item.getTemplate() : (item.getTemplate().split("shared_")[0] + "shared_" + ((String) item.getAttachment("customServerTemplate")) + ".iff")); String serverTemplate = template.replace(".iff", ""); diff --git a/src/services/LootService.java b/src/services/LootService.java index f5a62344..6881da6b 100644 --- a/src/services/LootService.java +++ b/src/services/LootService.java @@ -285,6 +285,17 @@ public class LootService implements INetworkDispatch { } } + public SWGObject generateLootItem(CreatureObject requester, String template) + { + LootRollSession rollSession = new LootRollSession(); + rollSession.setSessionPlanet(requester.getPlanet()); + + handleLootPoolItems(template, rollSession); + if(rollSession.getDroppedItems().get(0) != null) return rollSession.getDroppedItems().get(0); + + return null; + } + @SuppressWarnings("unused") private void handleLootPoolItems(String itemName,LootRollSession lootRollSession){ @@ -399,7 +410,7 @@ public class LootService implements INetworkDispatch { customName = setRandomStatsJewelry(droppedItem, lootRollSession); } - if (customName!=null) + if (!customName.isEmpty()) handleCustomDropName(droppedItem, customName); if (stackable!=-1){ @@ -451,6 +462,9 @@ public class LootService implements INetworkDispatch { droppedItem.setStringAttribute("required_faction", requiredFaction); } + if(core.scriptService.getMethod(itemPath,"","customSetup") != null) + core.scriptService.callScript(itemPath, "", "customSetup", droppedItem); + lootRollSession.addDroppedItem(droppedItem); System.out.println("END REACHED");