From c1bb6d36ab4a23cf3817b0ab245d86fba6fd401f Mon Sep 17 00:00:00 2001 From: Mesagoppinmypants Date: Thu, 19 Jun 2014 18:50:24 -0400 Subject: [PATCH 01/92] Fixed Small Mistake --- scripts/roadmap/spy_1a.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/roadmap/spy_1a.py b/scripts/roadmap/spy_1a.py index 65d40d6c..ae7d10d8 100644 --- a/scripts/roadmap/spy_1a.py +++ b/scripts/roadmap/spy_1a.py @@ -27,7 +27,7 @@ def getAction(): def getRewards(name): if name == 'item_spy_backpack_01_02': - return "object/tangible/wearables/backpack/shared_backpack_s04.iff" + return "object/tangible/wearables/backpack/shared_backpack_s06.iff" if name == 'armor_spy_roadmap_bicep_l_02_01': return "object/tangible/wearables/armor/padded/shared_armor_padded_s01_bicep_l.iff" From aca8fa8c1227d457fc8dda8670ffec9ef96f4207 Mon Sep 17 00:00:00 2001 From: Mesagoppinmypants Date: Thu, 19 Jun 2014 18:52:51 -0400 Subject: [PATCH 02/92] Fixed Small Mistake --- scripts/roadmap/smuggler_1a.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/roadmap/smuggler_1a.py b/scripts/roadmap/smuggler_1a.py index 44a2d32c..f9cd7bff 100644 --- a/scripts/roadmap/smuggler_1a.py +++ b/scripts/roadmap/smuggler_1a.py @@ -26,7 +26,7 @@ def getAction(): def getRewards(name): if name == 'item_smuggler_backpack_01_02': - return "object/tangible/wearables/backpack/shared_backpack_s02.iff" + return "object/tangible/wearables/backpack/shared_backpack_s05.iff" if name == 'armor_smuggler_roadmap_bicep_l_02_01': return "object/tangible/wearables/armor/tantel/shared_armor_tantel_skreej_bicep_l.iff" From a9958d8f2cfeeb297bf69683a54dadae8ef6ef33 Mon Sep 17 00:00:00 2001 From: Mesagoppinmypants Date: Thu, 19 Jun 2014 18:57:22 -0400 Subject: [PATCH 03/92] Fixed Small Mistake With Medic Roadmap Backpack --- scripts/roadmap/medic_1a.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/roadmap/medic_1a.py b/scripts/roadmap/medic_1a.py index dd0ffb66..8a46ded0 100644 --- a/scripts/roadmap/medic_1a.py +++ b/scripts/roadmap/medic_1a.py @@ -26,7 +26,7 @@ def getAction(): def getRewards(name): if name == 'item_medic_backpack_01_02': - return "object/tangible/wearables/backpack/shared_backpack_s02.iff" + return "object/tangible/wearables/backpack/shared_backpack_s03.iff" if name == 'armor_medic_roadmap_bicep_l_02_01': return "object/tangible/wearables/armor/tantel/shared_armor_tantel_skreej_bicep_l.iff" From a1cd74b8a4b671d8c23dc1cae2ed0d5cb249b5cb Mon Sep 17 00:00:00 2001 From: Mesagoppinmypants Date: Thu, 19 Jun 2014 18:58:44 -0400 Subject: [PATCH 04/92] Fixed Small Mistake With Entertainer Roadmap Backpack --- scripts/roadmap/entertainer_1a.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/roadmap/entertainer_1a.py b/scripts/roadmap/entertainer_1a.py index 19757659..9e9368ba 100644 --- a/scripts/roadmap/entertainer_1a.py +++ b/scripts/roadmap/entertainer_1a.py @@ -27,7 +27,7 @@ def getAction(): def getRewards(name): if name == 'item_entertainer_backpack_01_02': - return "object/tangible/wearables/backpack/shared_backpack_s04.iff" + return "object/tangible/wearables/backpack/shared_backpack_s01.iff" if name == 'armor_entertainer_roadmap_cloak_02_01': return "object/tangible/wearables/robe/shared_robe_s01.iff" @@ -61,4 +61,4 @@ def getRewards(name): if name == 'item_roadmap_belt_entertainer_01_02': return "object/tangible/wearables/armor/zam/shared_armor_zam_wesell_belt.iff" - \ No newline at end of file + From 058edfad4f5b21f8f505cc41e29e68dab4bd6f4d Mon Sep 17 00:00:00 2001 From: Light2 Date: Fri, 20 Jun 2014 02:29:27 +0200 Subject: [PATCH 05/92] Added city maintenance report, added zoning rights --- scripts/commands/grantzoningrights.py | 37 +++++----- .../terminal/city_maintenance_terminal.py | 67 +++++++++++++++++++ src/services/housing/HousingService.java | 22 +++++- src/services/playercities/PlayerCity.java | 34 ++++++---- .../playercities/PlayerCityService.java | 1 + 5 files changed, 126 insertions(+), 35 deletions(-) diff --git a/scripts/commands/grantzoningrights.py b/scripts/commands/grantzoningrights.py index 21cbbb8d..600cccd4 100644 --- a/scripts/commands/grantzoningrights.py +++ b/scripts/commands/grantzoningrights.py @@ -9,32 +9,33 @@ def setup(): def run(core, actor, target, commandString): - if target == None: + if not target or not target.getClient(): return + + thisCity = core.playerCityService.getCityObjectIsIn(actor) - #if !actor.hasSkill('Politician'): - #You must be a Politician to enable city zoning. - #actor.sendSystemMessage('@city/city:zoning_skill', 0) - #return - - thisCity = main.NGECore.getInstance().playerCityService.getCityObjectIsIn(actor) - - if thisCity == None: + if not thisCity: #not_in_city_limits actor.sendSystemMessage('@city/city:not_in_city_limits', 0) return - if thisCity.getMayorID()!=actor.getObjectID() and not thisCity.isMilitiaMember(actor.getObjectID()): + if thisCity.getMayorID() != actor.getObjectID() and not thisCity.isMilitiaMember(actor.getObjectID()): #You must be the mayor of the city or a member of the city militia to grant zoning rights. actor.sendSystemMessage('@city/city:grant_rights_fail', 0) - actor.sendSystemMessage('thisCity.getMayorID() %s' % thisCity.getMayorID(), 0) - actor.sendSystemMessage('actor.getObjectID() %s' % actor.getObjectID(), 0) return - #You have granted %TO zoning rights for 24 hours. - actor.sendSystemMessage(OutOfBand.ProsePackage("@city/city:rights_granted_self", "TO", target.getCustomName()), 0) - target.setAttachment('Has24HZoningFor',thisCity.getCityID()) - target.setAttachment('Has24HZoningUntil',System.currentTimeMillis()+60*60*24) - target.sendSystemMessage(OutOfBand.ProsePackage("@city/city:rights_granted", "TO", thisCity.getCityName()), 0) + if target.getObjectID() == thisCity.getMayorID(): + return - return \ No newline at end of file + if thisCity.hasZoningRights(target): + thisCity.removeZoningRights(target) + actor.sendSystemMessage('@city/city:rights_revoked', 0) + target.sendSystemMessage('@city/city:rights_revoked_other', 0) + else: + thisCity.grantZoningRights(target) + #You have granted %TO zoning rights for 24 hours. + actor.sendSystemMessage(OutOfBand.ProsePackage("@city/city:rights_granted_self", "TO", target.getCustomName()), 0) + target.sendSystemMessage(OutOfBand.ProsePackage("@city/city:rights_granted", "TO", thisCity.getCityName()), 0) + + return + \ No newline at end of file diff --git a/scripts/radial/terminal/city_maintenance_terminal.py b/scripts/radial/terminal/city_maintenance_terminal.py index f07a719b..50259cfa 100644 --- a/scripts/radial/terminal/city_maintenance_terminal.py +++ b/scripts/radial/terminal/city_maintenance_terminal.py @@ -10,6 +10,7 @@ from java.util import Map from java.util import TreeMap import main.NGECore import sys +import math def createRadial(core, owner, target, radials): #(byte parentId, short optionId, byte optionType, String description) @@ -133,6 +134,72 @@ def handleSelection(core, owner, target, option): if owner is not None: handleRevokeCitizenship(core, owner, target, option) return + if option == 224: + if owner is not None: + handleMaintenanceReport(core, owner, target, option) + return + +def handleMaintenanceReport(core, owner, target, option): + playerCity = core.playerCityService.getPlayerCity(owner) + if not playerCity: + return + timeUntilUpdate = playerCity.getNextCityUpdate() - System.currentTimeMillis() + days = math.floor(timeUntilUpdate / 86400 * 1000) + timeUntilUpdate -= days * 86400 * 1000 + hours = math.floor(timeUntilUpdate / 3600 * 1000) + timeUntilUpdate -= hours * 3600 * 1000 + minutes = math.floor(timeUntilUpdate / 60 * 1000) + timeUntilUpdate -= minutes * 60 * 1000 + + timeStr = '' + + if days > 0: + timeStr += str(days) + ' day' + if days > 1: + timeStr += 's' + if hours > 0 or minutes > 0 or timeUntilUpdate > 0: + timeStr += ', ' + if hours > 0: + timeStr += str(hours) + ' hour' + if hours > 1: + timeStr += 's' + if minutes > 0 or timeUntilUpdate > 0: + timeStr += ', ' + if minutes > 0: + timeStr += str(minutes) + ' minute' + if minutes > 1: + timeStr += 's' + if timeUntilUpdate > 0: + timeStr += ', ' + if timeUntilUpdate > 0: + timeStr += str(timeUntilUpdate) + ' second' + if timeUntilUpdate > 1: + timeStr += 's' + + totalMaintenance = 0 + menuItems = TreeMap() + menuItems.put(Long(0), 'Next City Update: ' + timeStr) + for structureId in playerCity.getPlacedStructures(): + structure = core.objectService.getObject(structureId) + if not structure or not structure.getAttachment('isCivicStructure'): + continue + maintenance = structure.getBMR() + if 'cityhall' in structure.getTemplate() and playerCity.isRegistered(): + maintenance += 5000 + totalMaintenance += maintenance + menuItems.put(Long(structureId), structure.getLookAtText() + ' : ' + str(maintenance)) + + if playerCity.getSpecialisationStfValue() != '': + specMaintenance = playerCity.getSpecializationMaintenance() + totalMaintenance += specMaintenance + menuItems.put(Long(2), playerCity.getSpecialisationStfValue() + ' : ' + str(specMaintenance)) + + + menuItems.put(Long(3), 'Total: ' + str(totalMaintenance)) + window = core.suiService.createListBox(1, '@city/city:maint_info_t', '@city/city:maint_info_d', menuItems, owner, None, 0) + core.suiService.openSUIWindow(window) + + return def handleRevokeCitizenship(core, owner, target, option): playerCity = core.playerCityService.getPlayerCity(owner) diff --git a/src/services/housing/HousingService.java b/src/services/housing/HousingService.java index e5c3caee..63860a89 100644 --- a/src/services/housing/HousingService.java +++ b/src/services/housing/HousingService.java @@ -90,12 +90,18 @@ public class HousingService implements INetworkDispatch { housingTemplates.values().forEach((houseTemplate) -> houseToDeed.put(houseTemplate.getBuildingTemplate(), houseTemplate.getDeedTemplate())); } - public void enterStructureMode(CreatureObject actor, TangibleObject deed) { + public void enterStructureMode(CreatureObject actor, TangibleObject deed) { + PlayerCity city = core.playerCityService.getCityObjectIsIn(actor); if (!actor.getClient().isGM() && !core.terrainService.canBuildAtPosition(actor, actor.getWorldPosition().x, actor.getWorldPosition().z)) { actor.sendSystemMessage("You may not place a structure here.", (byte) 0); // should probably load this from an stf return; } + if(city != null && !city.hasZoningRights(actor)) { + actor.sendSystemMessage("@player_structure:no_rights", (byte) 0); + return; + } + if (housingTemplates.containsKey(deed.getTemplate())) { HouseTemplate houseTemplate = housingTemplates.get(deed.getTemplate()); EnterStructurePlacementModeMessage packet = new EnterStructurePlacementModeMessage(deed, houseTemplate.getBuildingTemplate()); @@ -107,7 +113,8 @@ public class HousingService implements INetworkDispatch { HouseTemplate houseTemplate = housingTemplates.get(deed.getTemplate()); int structureLotCost = houseTemplate.getLotCost(); String structureTemplate = houseTemplate.getBuildingTemplate(); - + PlayerCity city = core.playerCityService.getCityPositionIsIn(new Point3D(positionX, 0, positionZ)); + if (!houseTemplate.canBePlacedOn(actor.getPlanet().getName())) { actor.sendSystemMessage("You may not place this structure on this planet.", (byte) 0); // should probably load this from an stf return null; @@ -118,6 +125,11 @@ public class HousingService implements INetworkDispatch { return null; } + if(city != null && !city.hasZoningRights(actor)) { + actor.sendSystemMessage("@player_structure:no_rights", (byte) 0); + return null; + } + // Lot stuff if (!actor.getPlayerObject().deductLots(structureLotCost)) { actor.sendSystemMessage("You do not have enough available lots to place this structure.", (byte) 0); // should probably load this from an stf @@ -132,6 +144,7 @@ public class HousingService implements INetworkDispatch { // Create the building BuildingObject building = (BuildingObject) core.objectService.createObject(structureTemplate, 0, actor.getPlanet(), new Point3D(positionX, positionY, positionZ), quaternion); + core.simulationService.add(building, building.getPosition().x, building.getPosition().z, true); // Name the sign @@ -156,7 +169,10 @@ public class HousingService implements INetworkDispatch { building.addPlayerToAdminList(null, actor.getObjectID(), playerFirstName); building.setDeedTemplate(deed.getTemplate()); building.setMaintenanceAmount(houseTemplate.getBaseMaintenanceRate()); - building.setConditionDamage(100); // Ouch + + if(city != null) { + city.addNewStructure(building.getObjectID()); + } /* // Check for city founders joining a new city diff --git a/src/services/playercities/PlayerCity.java b/src/services/playercities/PlayerCity.java index 80b85bcc..7b64eb29 100644 --- a/src/services/playercities/PlayerCity.java +++ b/src/services/playercities/PlayerCity.java @@ -85,7 +85,8 @@ public class PlayerCity implements Serializable { "city_spec_sample_rich"}; - public static final int[] citizensPerRank = new int[] { 5, 10, 15, 30, 40 }; + //public static final int[] citizensPerRank = new int[] { 5, 10, 15, 30, 40 }; + public static final int[] citizensPerRank = new int[] { 1, 2, 3, 4, 5 }; private String cityName = ""; private int planetId; @@ -130,6 +131,7 @@ public class PlayerCity implements Serializable { private Set cityBanList = new ConcurrentHashSet(); private Set militiaList = new ConcurrentHashSet(); private Set foundersList = new ConcurrentHashSet(); + private Map zoningRights = new ConcurrentHashMap(); // Key = id Value = time until zoning right expires public PlayerCity() {} @@ -154,18 +156,18 @@ public class PlayerCity implements Serializable { NGECore.getInstance().mapService.addLocation(NGECore.getInstance().terrainService.getPlanetByID(planetId), getCityName(), area.getCenter().x, area.getCenter().z, (byte) 17, (byte) 0, (byte) 0); } - public void handleGrantZoning() { - + public void grantZoningRights(CreatureObject target) { + zoningRights.put(target.getObjectID(), System.currentTimeMillis() + 86400000); } - public void handleBuildRequest() { - + public void removeZoningRights(CreatureObject target) { + zoningRights.remove(target.getObjectID()); } - public void checkPlacementPermission() { - + public boolean hasZoningRights(CreatureObject target) { + return zoningRights.containsKey(target.getObjectID()) && zoningRights.get(target.getObjectID()) > System.currentTimeMillis(); } - + public int getCivicStructuresCount() { return (int) placedStructures.stream(). map(NGECore.getInstance().objectService::getObject). @@ -366,7 +368,6 @@ public class PlayerCity implements Serializable { demolishHighRankStructures(); calculateAndPayMaintenance(); core.playerCityService.schedulePlayerCityUpdate(this, cityUpdateSpan); - setNextCityUpdate(System.currentTimeMillis()+cityUpdateSpan); } public void contractCity() { @@ -575,7 +576,7 @@ public class PlayerCity implements Serializable { sendMaintenanceMail(maintAmount); } - private int getSpecializationMaintenance() { + public int getSpecializationMaintenance() { switch(specialization) { @@ -964,10 +965,7 @@ public class PlayerCity implements Serializable { } public boolean isMilitiaMember(long actor){ - if (getMilitiaList().contains(actor)) - return true; - - return false; + return getMilitiaList().contains(actor); } public static String[] getSpecialisationSTFNames() { @@ -1485,5 +1483,13 @@ public class PlayerCity implements Serializable { public void setElectionTime() { nextElectionDate = System.currentTimeMillis() + 3 * cityUpdateSpan; } + + public Map getZoningRights() { + return zoningRights; + } + + public void setZoningRights(Map zoningRights) { + this.zoningRights = zoningRights; + } } diff --git a/src/services/playercities/PlayerCityService.java b/src/services/playercities/PlayerCityService.java index 594b7d49..298dc0d8 100644 --- a/src/services/playercities/PlayerCityService.java +++ b/src/services/playercities/PlayerCityService.java @@ -408,6 +408,7 @@ public class PlayerCityService implements INetworkDispatch { } public void schedulePlayerCityUpdate(PlayerCity playerCity, long time) { + playerCity.setNextCityUpdate(System.currentTimeMillis() + time); scheduler.schedule(() -> { try { playerCity.processCityUpdate(); From cabce0658938dd5e328c12e2a5c6e5bd78de5aca Mon Sep 17 00:00:00 2001 From: Zing Date: Thu, 19 Jun 2014 18:49:42 -0700 Subject: [PATCH 06/92] Loot fixes --- .../collections/inv_holocron_collection_01.py | 15 ++++++++++++++ .../collections/relics/jedi_relic_1.py | 20 +++++++++++++++++++ scripts/loot/lootItems/relics/jedi_relic_2.py | 6 ------ scripts/loot/lootPools/jediholocrons.py | 6 ++++-- scripts/loot/lootPools/junk.py | 2 +- scripts/loot/lootPools/sithholocrons.py | 6 ++++-- scripts/mobiles/dantooine/dark_jedi_master.py | 2 +- 7 files changed, 45 insertions(+), 12 deletions(-) create mode 100644 scripts/collections/inv_holocron_collection_01.py create mode 100644 scripts/loot/lootItems/collections/relics/jedi_relic_1.py delete mode 100644 scripts/loot/lootItems/relics/jedi_relic_2.py diff --git a/scripts/collections/inv_holocron_collection_01.py b/scripts/collections/inv_holocron_collection_01.py new file mode 100644 index 00000000..82708850 --- /dev/null +++ b/scripts/collections/inv_holocron_collection_01.py @@ -0,0 +1,15 @@ +from java.lang import System +import sys + +def modify(core, actor, count): + return + +def complete(core, actor, collection): + ghost = actor.getSlottedObject('ghost') + actor.sendSystemMessage('@collection_n:inv_holocron_collection_01_finished', 0) + print ('Collection Finished Test') + bb = core.objectService.createObject('object/tangible/wearables/backpack/shared_fannypack_s01.iff', object.getPlanet()) + core.playerService.giveItem(actor, bb) + print ('test2') + + return \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/relics/jedi_relic_1.py b/scripts/loot/lootItems/collections/relics/jedi_relic_1.py new file mode 100644 index 00000000..1885ce9c --- /dev/null +++ b/scripts/loot/lootItems/collections/relics/jedi_relic_1.py @@ -0,0 +1,20 @@ + +def itemTemplate(): + + return ['object/tangible/loot/mustafar/shared_jedi_relic_03.iff'] + +def STFparams(): + + return ['static_item_n','col_lightsaber_1h_01_03','static_item_d','col_lightsaber_1h_01_03'] + +def AddToCollection(): + + return 'col_lightsaber_1h_01' + +def CollectionItemName(): + + return 'col_lightsaber_1h_01_03' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/relics/jedi_relic_2.py b/scripts/loot/lootItems/relics/jedi_relic_2.py deleted file mode 100644 index 1460ae13..00000000 --- a/scripts/loot/lootItems/relics/jedi_relic_2.py +++ /dev/null @@ -1,6 +0,0 @@ - -def itemTemplate(): - - return ['object/tangible/loot/mustafar/shared_jedi_relic_03.iff'] - - diff --git a/scripts/loot/lootPools/jediholocrons.py b/scripts/loot/lootPools/jediholocrons.py index a227cbe8..af0a9daa 100644 --- a/scripts/loot/lootPools/jediholocrons.py +++ b/scripts/loot/lootPools/jediholocrons.py @@ -1,8 +1,10 @@ def itemNames(): - return ['jedi_holocron_1_5','jedi_holocron_2_5','jedi_holocron_3_5','jedi_holocron_4_5','jedi_holocron_5_5'] + items=['jedi_holocron_1_5','jedi_holocron_2_5','jedi_holocron_3_5','jedi_holocron_4_5','jedi_holocron_5_5'] + items=items+['jedi_holocron_1_5_wp','jedi_holocron_2_5_wp','jedi_holocron_3_5_wp','jedi_holocron_4_5_wp','jedi_holocron_5_5_wp'] + return names def itemChances(): - return [25,15,30,5,25] \ No newline at end of file + return [9,9,15,6,12,10,9,15,3,12] \ No newline at end of file diff --git a/scripts/loot/lootPools/junk.py b/scripts/loot/lootPools/junk.py index ef757825..cb0b44c6 100644 --- a/scripts/loot/lootPools/junk.py +++ b/scripts/loot/lootPools/junk.py @@ -2,7 +2,7 @@ def itemNames(): templates=['damaged_datapad','red_wiring','worklight_generic','antenna','brain','eye','gland','heart','stomach','armor_repair_device'] #10 - templates=templates+['brain','chassis_blueprint','comlink','explosive_dud','hyperdrive_unit','id_chip','impulse_detector','laser_trap'] #8 + templates=templates+['brain','chassis_blueprints','comlink','explosive_dud','hyperdrive_unit','id_chip','impulse_detector','laser_trap'] #8 templates=templates+['launcher_tube','ledger','magseal_detector','medical_console','medical_device','motor','power_output_analyzer','shield_module'] #8 templates=templates+['software_module','survival_gear','underpowered_survey_pad','unidentified_serum_vial','used_notebook','weak_droid_battery'] #6 return templates diff --git a/scripts/loot/lootPools/sithholocrons.py b/scripts/loot/lootPools/sithholocrons.py index b264dabe..1e18966a 100644 --- a/scripts/loot/lootPools/sithholocrons.py +++ b/scripts/loot/lootPools/sithholocrons.py @@ -1,8 +1,10 @@ def itemNames(): - return ['sith_holocron_1_5','sith_holocron_2_5','sith_holocron_3_5','sith_holocron_4_5','sith_holocron_5_5'] + items=['sith_holocron_1_5','sith_holocron_2_5','sith_holocron_3_5','sith_holocron_4_5','sith_holocron_5_5'] + items=items+['sith_holocron_1_5_wp','sith_holocron_2_5_wp','sith_holocron_3_5_wp','sith_holocron_4_5_wp','sith_holocron_5_5_wp'] + return items def itemChances(): - return [25,15,30,5,25] \ No newline at end of file + return [9,9,15,6,12,10,9,15,3,12] \ No newline at end of file diff --git a/scripts/mobiles/dantooine/dark_jedi_master.py b/scripts/mobiles/dantooine/dark_jedi_master.py index 00b9c0f8..da18e248 100644 --- a/scripts/mobiles/dantooine/dark_jedi_master.py +++ b/scripts/mobiles/dantooine/dark_jedi_master.py @@ -54,7 +54,7 @@ def addTemplate(core): lootPoolNames_2 = ['jedi_relic_1'] lootPoolChances_2 = [100] - lootGroupChance_2 = 85 + lootGroupChance_2 = 30 mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) lootPoolNames_3 = ['powercrystals_hiq'] From d330be45539314f4bc0b50207f022225d23b9b3a Mon Sep 17 00:00:00 2001 From: Zing Date: Thu, 19 Jun 2014 18:50:05 -0700 Subject: [PATCH 07/92] missed one --- scripts/loot/lootItems/relics/jedi_relic_1.py | 8 -------- 1 file changed, 8 deletions(-) delete mode 100644 scripts/loot/lootItems/relics/jedi_relic_1.py diff --git a/scripts/loot/lootItems/relics/jedi_relic_1.py b/scripts/loot/lootItems/relics/jedi_relic_1.py deleted file mode 100644 index 321819e2..00000000 --- a/scripts/loot/lootItems/relics/jedi_relic_1.py +++ /dev/null @@ -1,8 +0,0 @@ - -def itemTemplate(): - - return ['object/tangible/loot/mustafar/shared_jedi_relic_03.iff'] - -def usedInCollection(): - - return 'One-Handed Fifth Generation Lightsaber' From 266f194b962f19ba4f50d3fdeacaa26d58ec37cb Mon Sep 17 00:00:00 2001 From: Treeku Date: Fri, 20 Jun 2014 03:09:34 +0100 Subject: [PATCH 08/92] Bit fix for counter-type collections --- src/services/collections/CollectionService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/services/collections/CollectionService.java b/src/services/collections/CollectionService.java index 608dfb9d..01933e4c 100644 --- a/src/services/collections/CollectionService.java +++ b/src/services/collections/CollectionService.java @@ -222,7 +222,7 @@ public class CollectionService implements INetworkDispatch { } BitSet bitValue = new BitSet(64); - bitValue.set(64-bits, 64); + bitValue.set(32-bits, 64); if (bitValue.toLongArray()[0] < maxSlotValue) { System.out.println(slotName + ", row " + c + ": counter-type slot uses " + bits + " bits, which can only hold a max value of " + bitValue.toLongArray()[0] + ", which is less than the specified max value of " + maxSlotValue); From c90b56e7480aa707d5bc008b27eef744f26b1869 Mon Sep 17 00:00:00 2001 From: Mesagoppinmypants Date: Thu, 19 Jun 2014 22:19:49 -0400 Subject: [PATCH 09/92] Bounty Hunter Clicky Now Has Buff Effect --- .../loot/generic_usable/item_bounty_hunter_clicky_01_02.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/scripts/object/tangible/loot/generic_usable/item_bounty_hunter_clicky_01_02.py b/scripts/object/tangible/loot/generic_usable/item_bounty_hunter_clicky_01_02.py index 22d032c5..f65bc0a3 100644 --- a/scripts/object/tangible/loot/generic_usable/item_bounty_hunter_clicky_01_02.py +++ b/scripts/object/tangible/loot/generic_usable/item_bounty_hunter_clicky_01_02.py @@ -1,9 +1,14 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'object/usable') object.setStfFilename('static_item_n') object.setStfName('item_bounty_hunter_clicky_01_02') object.setDetailFilename('static_item_d') object.setDetailName('item_bounty_hunter_clicky_01_02') object.setStringAttribute('class_required', 'Bounty Hunter') return + +def use(core, actor, object): + core.buffService.addBuffToCreature(actor, 'roadmapBhClicky', actor) + return From b72f51c717aef0ba1292c216caa95eaadee23767 Mon Sep 17 00:00:00 2001 From: Waverunner Date: Fri, 20 Jun 2014 10:36:24 -0400 Subject: [PATCH 10/92] Added prose package support for sendGuildMail, minor change to guild pda datapad --- src/resources/guild/Guild.java | 13 +++++++++++-- src/services/GuildService.java | 34 +++++++++++++++++----------------- 2 files changed, 28 insertions(+), 19 deletions(-) diff --git a/src/resources/guild/Guild.java b/src/resources/guild/Guild.java index 4ea74669..d152ad8d 100644 --- a/src/resources/guild/Guild.java +++ b/src/resources/guild/Guild.java @@ -26,7 +26,7 @@ import java.util.HashMap; import java.util.Map; import main.NGECore; - +import resources.common.ProsePackage; import services.chat.Mail; import engine.resources.objects.SWGObject; @@ -58,7 +58,7 @@ public class Guild { return member; } - public void sendGuildMail(String sender, String subject, String message) { + public void sendGuildMail(String sender, String subject, String message, ProsePackage prose) { NGECore core = NGECore.getInstance(); Date date = new Date(); members.forEach((id, member) -> { @@ -68,6 +68,7 @@ public class Guild { guildMail.setRecieverId(id); guildMail.setStatus(Mail.NEW); guildMail.setMessage(message); + if (prose != null) guildMail.addProseAttachment(prose); guildMail.setSubject(subject); guildMail.setSenderName(sender); core.chatService.storePersistentMessage(guildMail); @@ -78,6 +79,14 @@ public class Guild { }); } + public void sendGuildMail(String sender, String subject, String message) { + sendGuildMail(sender, subject, message, null); + } + + public void sendGuildMail(String sender, String subject, ProsePackage prose) { + sendGuildMail(sender, subject, "", prose); + } + public int getId() { return id; } diff --git a/src/services/GuildService.java b/src/services/GuildService.java index 95e34fe9..41418f30 100644 --- a/src/services/GuildService.java +++ b/src/services/GuildService.java @@ -31,6 +31,7 @@ import java.util.concurrent.ConcurrentHashMap; import protocol.swg.chat.ChatRoomMessage; import resources.common.OutOfBand; +import resources.common.ProsePackage; import resources.datatables.DisplayType; import resources.guild.Guild; import resources.guild.GuildMember; @@ -131,14 +132,14 @@ public class GuildService implements INetworkDispatch { // Notify guild & player if (acceptor != null) { - guild.sendGuildMail(guild.getName(), "@guildmail:accept_subject", new Stf("@guildmail:accept_text").getStfValue().replace("%TU", acceptor.getCustomName()).replace("%TT", joinee.getCustomName())); + guild.sendGuildMail(guild.getName(), "@guildmail:accept_subject", new ProsePackage("@guildmail:accept_text", "TU", acceptor.getCustomName(), "TT", joinee.getCustomName())); Mail acceptedMail = new Mail(); acceptedMail.setMailId(core.chatService.generateMailId()); acceptedMail.setTimeStamp((int) new Date().getTime()); acceptedMail.setRecieverId(joinee.getObjectID()); acceptedMail.setStatus(Mail.NEW); - acceptedMail.setMessage(new Stf("@guildmail:accept_target_text").getStfValue().replace("%TU", acceptor.getCustomName()).replace("%TT", joinee.getCustomName())); + acceptedMail.addProseAttachment(new ProsePackage("@guildmail:accept_target_text", "TU", acceptor.getCustomName(), "TT", joinee.getCustomName())); acceptedMail.setSubject("@guildmail:accept_subject"); acceptedMail.setSenderName(guild.getName()); core.chatService.storePersistentMessage(acceptedMail); @@ -404,8 +405,7 @@ public class GuildService implements INetworkDispatch { object.getGuildList().add(guild.getString()); - guild.sendGuildMail(newName, "@guildmail:namechange_subject", - new Stf("@guildmail:namechange_text").getStfValue().replace("%TO", actor.getCustomName()).replace("%TU", newName).replace("%TT", newAbbreviation)); + guild.sendGuildMail(newName, "@guildmail:namechange_subject", new ProsePackage("@guildmail:namechange_text", "TO", actor.getCustomName(), "TU", newName, "TT", newAbbreviation)); } public void handleChangeGuildMotd(CreatureObject actor, Guild guild) { @@ -650,7 +650,7 @@ public class GuildService implements INetworkDispatch { ((CreatureObject)cOwner).sendSystemMessage(OutOfBand.ProsePackage("@guild:sponsor_target", "TT", guild.getName(), "TU", actor.getCustomName()), DisplayType.Broadcast); - guild.sendGuildMail(guild.getName(), "@guildmail:sponsor_subject", new Stf("@guildmail:sponsor_text").getStfValue().replace("%TU", actor.getCustomName()).replace("%TT", cOwner.getCustomName())); + guild.sendGuildMail(guild.getName(), "@guildmail:sponsor_subject", new ProsePackage("@guildmail:sponsor_text", "TU", actor.getCustomName(), "TT", cOwner.getCustomName())); }); core.suiService.openSUIWindow(wndSponsoredConfirm); @@ -681,9 +681,9 @@ public class GuildService implements INetworkDispatch { if (datapad != null) { datapad.viewChildren(target, true, false, (obj) -> { if (obj instanceof IntangibleObject && obj.getTemplate().equals("object/intangible/data_item/shared_guild_stone.iff")) { - //obj.removeAttribute("guild_name"); - //obj.removeAttribute("guild_abbrev"); - //obj.removeAttribute("guild_leader"); + obj.removeAttribute("guild_name"); + obj.removeAttribute("guild_abbrev"); + obj.removeAttribute("guild_leader"); } }); } @@ -694,8 +694,8 @@ public class GuildService implements INetworkDispatch { target.getPlayerObject().removeChannel(guild.getChatRoomId()); } }); - - guild.sendGuildMail(guild.getName(), "@guildmail:disband_subject", new Stf("@guildmail:disband_text").getStfValue().replace("%TU", actor.getCustomName())); + + guild.sendGuildMail(guild.getName(), "@guildmail:disband_subject", new ProsePackage("@guildmail:disband_text", "TU", actor.getCustomName())); removeGuild(guild.getId()); } @@ -778,14 +778,14 @@ public class GuildService implements INetworkDispatch { public void handleGuildDeclineSponsorship(Guild guild, CreatureObject actor, CreatureObject sponsoree) { guild.getSponsoredPlayers().remove(sponsoree.getObjectID()); - guild.sendGuildMail(guild.getName(), "@guildmail:decline_subject", new Stf("@guildmail:decline_text").getStfValue().replace("%TU", actor.getCustomName()).replace("%TT", sponsoree.getCustomName())); + guild.sendGuildMail(guild.getName(), "@guildmail:decline_subject", new ProsePackage("@guildmail:decline_text", "TU", actor.getCustomName(), "TT", sponsoree.getCustomName())); Mail declinedMail = new Mail(); declinedMail.setMailId(core.chatService.generateMailId()); declinedMail.setTimeStamp((int) new Date().getTime()); declinedMail.setRecieverId(sponsoree.getObjectID()); declinedMail.setStatus(Mail.NEW); - declinedMail.setMessage(new Stf("@guildmail:decline_target_text").getStfValue().replace("%TU", actor.getCustomName()).replace("%TT", guild.getName())); + declinedMail.addProseAttachment(new ProsePackage("@guildmail:decline_target_text", "TU", actor.getCustomName(), "TT", guild.getName())); declinedMail.setSubject("@guildmail:decline_subject"); declinedMail.setSenderName(guild.getName()); core.chatService.storePersistentMessage(declinedMail); @@ -855,7 +855,7 @@ public class GuildService implements INetworkDispatch { if (actor.getObjectID() != target.getObjectID()) { - guild.sendGuildMail(guild.getName(), "@guildmail:kick_subject", new Stf("@guildmail:kick_text").getStfValue().replace("%TU", actor.getCustomName()).replace("%TT", target.getCustomName())); + guild.sendGuildMail(guild.getName(), "@guildmail:kick_subject", new ProsePackage("@guildmail:kick_text", "TU", actor.getCustomName(), "TT", target.getCustomName())); actor.sendSystemMessage(OutOfBand.ProsePackage("@guild:kick_self", "TU", target.getCustomName(), "TT", guild.getName()), DisplayType.Broadcast); @@ -867,7 +867,7 @@ public class GuildService implements INetworkDispatch { actor.sendSystemMessage("@guild:leave_fail_leader_tried_to_leave", DisplayType.Broadcast); return; } else { - guild.sendGuildMail(guild.getName(), "@guildmail:leave_subject", new Stf("@guildmail:leave_text").getStfValue().replace("%TU", actor.getCustomName())); + guild.sendGuildMail(guild.getName(), "@guildmail:leave_subject", new ProsePackage("@guildmail:leave_text", "TU", actor.getCustomName())); actor.sendSystemMessage(OutOfBand.ProsePackage("@guild:leave_self", "TU", guild.getName()), DisplayType.Broadcast); } } @@ -881,9 +881,9 @@ public class GuildService implements INetworkDispatch { if (datapad != null) { datapad.viewChildren(target, true, false, (obj) -> { if (obj instanceof IntangibleObject && obj.getTemplate().equals("object/intangible/data_item/shared_guild_stone.iff")) { - obj.setStringAttribute("guild_name", null); - obj.setStringAttribute("guild_abbrev", null); - obj.setStringAttribute("guild_leader", null); + obj.removeAttribute("guild_name"); + obj.removeAttribute("guild_abbrev"); + obj.removeAttribute("guild_leader"); } }); } From c2df2d2566e9cd3f567fdecd10ea5a7d90b010f9 Mon Sep 17 00:00:00 2001 From: Mesagoppinmypants Date: Fri, 20 Jun 2014 14:54:39 -0400 Subject: [PATCH 11/92] Commando Clicky Now Has a Buff Effect --- .../loot/generic_usable/item_commando_clicky_01_02.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/scripts/object/tangible/loot/generic_usable/item_commando_clicky_01_02.py b/scripts/object/tangible/loot/generic_usable/item_commando_clicky_01_02.py index 5041ee3b..165755c5 100644 --- a/scripts/object/tangible/loot/generic_usable/item_commando_clicky_01_02.py +++ b/scripts/object/tangible/loot/generic_usable/item_commando_clicky_01_02.py @@ -1,9 +1,14 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'object/usable') object.setStfFilename('static_item_n') object.setStfName('item_commando_clicky_01_02') object.setDetailFilename('static_item_d') object.setDetailName('item_commando_clicky_01_02') object.setStringAttribute('class_required', 'Commando') return + +def use(core, actor, object): + core.buffService.addBuffToCreature(actor, 'roadmapCommandoClicky', actor) + return From ea7e242fa76e21321eca77b29b1243d50a0903be Mon Sep 17 00:00:00 2001 From: Mesagoppinmypants Date: Fri, 20 Jun 2014 14:55:40 -0400 Subject: [PATCH 12/92] Entertainer Clicky Now Has a Buff Effect --- .../loot/generic_usable/item_entertainer_clicky_01_02.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/scripts/object/tangible/loot/generic_usable/item_entertainer_clicky_01_02.py b/scripts/object/tangible/loot/generic_usable/item_entertainer_clicky_01_02.py index dd6a2c0b..2033534c 100644 --- a/scripts/object/tangible/loot/generic_usable/item_entertainer_clicky_01_02.py +++ b/scripts/object/tangible/loot/generic_usable/item_entertainer_clicky_01_02.py @@ -1,9 +1,14 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'object/usable') object.setStfFilename('static_item_n') object.setStfName('item_entertainer_clicky_01_02') object.setDetailFilename('static_item_d') object.setDetailName('item_entertainer_clicky_01_02') object.setStringAttribute('class_required', 'Entertainer') return + +def use(core, actor, object): + core.buffService.addBuffToCreature(actor, 'roadmapEntertainerClicky', actor) + return From 666aeb617dff4b1e52503332b381710383686133 Mon Sep 17 00:00:00 2001 From: Mesagoppinmypants Date: Fri, 20 Jun 2014 14:57:04 -0400 Subject: [PATCH 13/92] Jedi Clicky Now Has a Buff Effect --- .../loot/generic_usable/item_force_sensitive_clicky_01_02.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/scripts/object/tangible/loot/generic_usable/item_force_sensitive_clicky_01_02.py b/scripts/object/tangible/loot/generic_usable/item_force_sensitive_clicky_01_02.py index e6745838..261d9930 100644 --- a/scripts/object/tangible/loot/generic_usable/item_force_sensitive_clicky_01_02.py +++ b/scripts/object/tangible/loot/generic_usable/item_force_sensitive_clicky_01_02.py @@ -1,9 +1,14 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'object/usable') object.setStfFilename('static_item_n') object.setStfName('item_force_sensitive_clicky_01_02') object.setDetailFilename('static_item_d') object.setDetailName('item_force_sensitive_clicky_01_02') object.setStringAttribute('class_required', 'Jedi') return + +def use(core, actor, object): + core.buffService.addBuffToCreature(actor, 'roadmapFsClicky', actor) + return From 1262e9304bc3910da03465fc330023b40137febd Mon Sep 17 00:00:00 2001 From: Mesagoppinmypants Date: Fri, 20 Jun 2014 14:58:18 -0400 Subject: [PATCH 14/92] Medic Clicky Now Has a Buff Effect --- .../tangible/loot/generic_usable/item_medic_clicky_01_02.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/scripts/object/tangible/loot/generic_usable/item_medic_clicky_01_02.py b/scripts/object/tangible/loot/generic_usable/item_medic_clicky_01_02.py index a9a7e24b..8567c5f0 100644 --- a/scripts/object/tangible/loot/generic_usable/item_medic_clicky_01_02.py +++ b/scripts/object/tangible/loot/generic_usable/item_medic_clicky_01_02.py @@ -1,9 +1,13 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'object/usable') object.setStfFilename('static_item_n') object.setStfName('item_medic_clicky_01_02') object.setDetailFilename('static_item_d') object.setDetailName('item_medic_clicky_01_02') object.setStringAttribute('class_required', 'Medic') return +def use(core, actor, object): + core.buffService.addBuffToCreature(actor, 'roadmapMedicClicky', actor) + return From ad4b2b9406fb7333e3fcd686b4cd578b5a08ba3e Mon Sep 17 00:00:00 2001 From: Mesagoppinmypants Date: Fri, 20 Jun 2014 15:00:12 -0400 Subject: [PATCH 15/92] Officer Clicky Now Has a Buff Effect --- .../loot/generic_usable/item_officer_clicky_01_02.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/scripts/object/tangible/loot/generic_usable/item_officer_clicky_01_02.py b/scripts/object/tangible/loot/generic_usable/item_officer_clicky_01_02.py index b5797a7d..712c17ba 100644 --- a/scripts/object/tangible/loot/generic_usable/item_officer_clicky_01_02.py +++ b/scripts/object/tangible/loot/generic_usable/item_officer_clicky_01_02.py @@ -1,9 +1,14 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'object/usable') object.setStfFilename('static_item_n') object.setStfName('item_officer_clicky_01_02') object.setDetailFilename('static_item_d') object.setDetailName('item_officer_clicky_01_02') object.setStringAttribute('class_required', 'Officer') return + +def use(core, actor, object): + core.buffService.addBuffToCreature(actor, 'roadmapOfficerClicky', actor) + return From fc28df0d5d855ef4afc212e44b58d80599044408 Mon Sep 17 00:00:00 2001 From: Mesagoppinmypants Date: Fri, 20 Jun 2014 15:03:39 -0400 Subject: [PATCH 16/92] Smuggler Clicky Now Has a Buff Effect --- .../loot/generic_usable/item_smuggler_clicky_01_02.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/scripts/object/tangible/loot/generic_usable/item_smuggler_clicky_01_02.py b/scripts/object/tangible/loot/generic_usable/item_smuggler_clicky_01_02.py index 65b88834..2c0614bc 100644 --- a/scripts/object/tangible/loot/generic_usable/item_smuggler_clicky_01_02.py +++ b/scripts/object/tangible/loot/generic_usable/item_smuggler_clicky_01_02.py @@ -1,9 +1,14 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'object/usable') object.setStfFilename('static_item_n') object.setStfName('item_smuggler_clicky_01_02') object.setDetailFilename('static_item_d') object.setDetailName('item_smuggler_clicky_01_02') object.setStringAttribute('class_required', 'Smuggler') return + +def use(core, actor, object): + core.buffService.addBuffToCreature(actor, 'roadmapSmugglerClicky', actor) + return From 701023ea66d6db90fa35350ccafedcb97d9b2155 Mon Sep 17 00:00:00 2001 From: Mesagoppinmypants Date: Fri, 20 Jun 2014 15:05:01 -0400 Subject: [PATCH 17/92] Spy Clicky Now Has Buff Effect --- .../tangible/loot/generic_usable/item_spy_clicky_01_02.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/scripts/object/tangible/loot/generic_usable/item_spy_clicky_01_02.py b/scripts/object/tangible/loot/generic_usable/item_spy_clicky_01_02.py index dd1385a7..d55d710d 100644 --- a/scripts/object/tangible/loot/generic_usable/item_spy_clicky_01_02.py +++ b/scripts/object/tangible/loot/generic_usable/item_spy_clicky_01_02.py @@ -1,9 +1,14 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'object/usable') object.setStfFilename('static_item_n') object.setStfName('item_spy_clicky_01_02') object.setDetailFilename('static_item_d') object.setDetailName('item_spy_clicky_01_02') object.setStringAttribute('class_required', 'Spy') return + +def use(core, actor, object): + core.buffService.addBuffToCreature(actor, 'roadmapSpyClicky', actor) + return From e31ec2c59e3067fb76e184a8c84d55645f15d1cf Mon Sep 17 00:00:00 2001 From: Seefo Date: Fri, 20 Jun 2014 18:55:36 -0400 Subject: [PATCH 18/92] Scripted Jedi Master Robes (Hood up/Hood down) --- .../tangible/wearables/robe/robe_s32.py | 1 + .../tangible/wearables/robe/robe_s32_h1.py | 1 + .../tangible/wearables/robe/robe_s33.py | 1 + .../tangible/wearables/robe/robe_s33_h1.py | 1 + scripts/radial/equipment/jedi_master_robes.py | 49 +++++++++++++++++++ 5 files changed, 53 insertions(+) create mode 100644 scripts/radial/equipment/jedi_master_robes.py diff --git a/scripts/object/tangible/wearables/robe/robe_s32.py b/scripts/object/tangible/wearables/robe/robe_s32.py index 68484d13..624832cd 100644 --- a/scripts/object/tangible/wearables/robe/robe_s32.py +++ b/scripts/object/tangible/wearables/robe/robe_s32.py @@ -20,6 +20,7 @@ def setup(core, object): object.setAttachment('type', 'jedi_cloak') object.setAttachment('setBonus', 'set_bonus_jedi_robe') + object.setAttachment('radial_filename', 'equipment/jedi_master_robes'); return diff --git a/scripts/object/tangible/wearables/robe/robe_s32_h1.py b/scripts/object/tangible/wearables/robe/robe_s32_h1.py index fdbb2840..55106573 100644 --- a/scripts/object/tangible/wearables/robe/robe_s32_h1.py +++ b/scripts/object/tangible/wearables/robe/robe_s32_h1.py @@ -20,6 +20,7 @@ def setup(core, object): object.setAttachment('type', 'jedi_cloak') object.setAttachment('setBonus', 'set_bonus_jedi_robe') + object.setAttachment('radial_filename', 'equipment/jedi_master_robes'); return diff --git a/scripts/object/tangible/wearables/robe/robe_s33.py b/scripts/object/tangible/wearables/robe/robe_s33.py index e5bded55..a4a9bfaa 100644 --- a/scripts/object/tangible/wearables/robe/robe_s33.py +++ b/scripts/object/tangible/wearables/robe/robe_s33.py @@ -22,6 +22,7 @@ def setup(core, object): object.setAttachment('type', 'jedi_cloak') object.setAttachment('setBonus', 'set_bonus_jedi_robe') + object.setAttachment('radial_filename', 'equipment/jedi_master_robes'); return diff --git a/scripts/object/tangible/wearables/robe/robe_s33_h1.py b/scripts/object/tangible/wearables/robe/robe_s33_h1.py index 3d700373..2fdcb9c5 100644 --- a/scripts/object/tangible/wearables/robe/robe_s33_h1.py +++ b/scripts/object/tangible/wearables/robe/robe_s33_h1.py @@ -22,6 +22,7 @@ def setup(core, object): object.setAttachment('type', 'jedi_cloak') object.setAttachment('setBonus', 'set_bonus_jedi_robe') + object.setAttachment('radial_filename', 'equipment/jedi_master_robes'); return diff --git a/scripts/radial/equipment/jedi_master_robes.py b/scripts/radial/equipment/jedi_master_robes.py new file mode 100644 index 00000000..40012d5f --- /dev/null +++ b/scripts/radial/equipment/jedi_master_robes.py @@ -0,0 +1,49 @@ +from resources.common import RadialOptions +import sys + +def createRadial(core, owner, target, radials): + + if target.getContainer() == owner: + return + + if target.getTemplate() == "object/tangible/wearables/robe/shared_robe_s32.iff" or target.getTemplate() == "object/tangible/wearables/robe/shared_robe_s33.iff": + radials.add(RadialOptions(0, 98, 1, 'Hood up')) + + elif target.getTemplate() == "object/tangible/wearables/robe/shared_robe_s32_h1.iff" or target.getTemplate() == "object/tangible/wearables/robe/shared_robe_s33_h1.iff": + radials.add(RadialOptions(0, 99, 1, 'Hood down')) + + return + +def handleSelection(core, owner, target, option): + inventory = owner.getSlottedObject('inventory') + + if inventory: + newTemplate = "" + + if option == 98 and target: + + if target.getTemplate() == "object/tangible/wearables/robe/shared_robe_s32.iff": + newTemplate = "object/tangible/wearables/robe/shared_robe_s32_h1.iff" + + elif target.getTemplate() == "object/tangible/wearables/robe/shared_robe_s33.iff": + newTemplate = "object/tangible/wearables/robe/shared_robe_s33_h1.iff" + + if newTemplate != "": + object = core.objectService.createObject(newTemplate, owner.getPlanet()) + core.objectService.destroyObject(target) + inventory.add(object) + + elif option == 99 and target: + + if target.getTemplate() == "object/tangible/wearables/robe/shared_robe_s32_h1.iff": + newTemplate = "object/tangible/wearables/robe/shared_robe_s32.iff" + + elif target.getTemplate() == "object/tangible/wearables/robe/shared_robe_s33_h1.iff": + newTemplate = "object/tangible/wearables/robe/shared_robe_s33.iff" + + if newTemplate != "": + object = core.objectService.createObject(newTemplate, owner.getPlanet()) + core.objectService.destroyObject(target) + inventory.add(object) + return + \ No newline at end of file From 8dc34266e0c5c29bb3e1a45617e4ad048e7c76bd Mon Sep 17 00:00:00 2001 From: Seefo Date: Fri, 20 Jun 2014 19:52:18 -0400 Subject: [PATCH 19/92] Fixed moveable object's radial menu --- .../terminal/terminal_player_structure.py | 1 + scripts/radial/structure/moveable.py | 36 +++++++++++++------ src/services/sui/SUIService.java | 16 ++++----- 3 files changed, 32 insertions(+), 21 deletions(-) diff --git a/scripts/object/tangible/terminal/terminal_player_structure.py b/scripts/object/tangible/terminal/terminal_player_structure.py index dd5b18cd..64d94efc 100644 --- a/scripts/object/tangible/terminal/terminal_player_structure.py +++ b/scripts/object/tangible/terminal/terminal_player_structure.py @@ -2,4 +2,5 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'structure/structure_management_terminal') + object.setAttachment('moveable', False) return \ No newline at end of file diff --git a/scripts/radial/structure/moveable.py b/scripts/radial/structure/moveable.py index 1419fae6..70bc951e 100644 --- a/scripts/radial/structure/moveable.py +++ b/scripts/radial/structure/moveable.py @@ -2,24 +2,38 @@ from resources.common import RadialOptions import sys def createRadial(core, owner, target, radials): - radials.add(RadialOptions(0, 7, 1, '')) - radials.add(RadialOptions(0, 11, 1, '')) - + radials.add(RadialOptions(0, 11, 0, '')) radials.add(RadialOptions(0, 55, 0, '')) - radials.add(RadialOptions(3, 56, 1, '')) - radials.add(RadialOptions(3, 57, 1, '')) - radials.add(RadialOptions(3, 58, 1, '')) - radials.add(RadialOptions(3, 59, 1, '')) - radials.add(RadialOptions(0, 52, 0, '')) - radials.add(RadialOptions(4, 53, 1, '')) - radials.add(RadialOptions(4, 54, 1, '')) - return + + radials.add(RadialOptions(3, 56, 0, '')) + radials.add(RadialOptions(3, 57, 0, '')) + radials.add(RadialOptions(3, 58, 0, '')) + radials.add(RadialOptions(3, 59, 0, '')) + + radials.add(RadialOptions(4, 53, 0, '')) + radials.add(RadialOptions(4, 54, 0, '')) + return def handleSelection(core, owner, target, option): if option == 56: core.commandService.callCommand(owner, 'movefurniture', target, 'forward 10') + if option == 57: + core.commandService.callCommand(owner, 'movefurniture', target, 'back 10') + + if option == 58: + core.commandService.callCommand(owner, 'movefurniture', target, 'up 10') + + if option == 59: + core.commandService.callCommand(owner, 'movefurniture', target, 'down 10') + + if option == 53: + core.commandService.callCommand(owner, 'rotatefurniture', target, 'yaw -90') + + if option == 54: + core.commandService.callCommand(owner, 'rotatefurniture', target, 'yaw 90') + return \ No newline at end of file diff --git a/src/services/sui/SUIService.java b/src/services/sui/SUIService.java index 1fcee751..323a71a8 100644 --- a/src/services/sui/SUIService.java +++ b/src/services/sui/SUIService.java @@ -139,14 +139,11 @@ public class SUIService implements INetworkDispatch { return; } - if(target.getGrandparent() != null && target.getGrandparent().getAttachment("structureAdmins") != null) + if(core.housingService.getPermissions(owner, target.getContainer()) && !getRadialFilename(target).equals("structure/structure_management_terminal")) { - if(core.housingService.getPermissions(owner, target.getContainer()) && !getRadialFilename(target).equals("structure/structure_management_terminal")) - { - core.scriptService.callScript("scripts/radial/", "structure/moveable", "createRadial", core, owner, target, request.getRadialOptions()); - sendRadial(owner, target, request.getRadialOptions(), request.getRadialCount()); - return; - } + core.scriptService.callScript("scripts/radial/", "structure/moveable", "createRadial", core, owner, target, request.getRadialOptions()); + sendRadial(owner, target, request.getRadialOptions(), request.getRadialCount()); + return; } core.scriptService.callScript("scripts/radial/", getRadialFilename(target), "createRadial", core, owner, target, request.getRadialOptions()); @@ -185,13 +182,12 @@ public class SUIService implements INetworkDispatch { return; } - if(target.getGrandparent() != null && target.getGrandparent().getAttachment("structureAdmins") != null) { - if(core.housingService.getPermissions(owner, target.getContainer()) && !getRadialFilename(target).equals("structure/structure_management_terminal")) { + if(core.housingService.getPermissions(owner, target.getContainer()) && (target.getAttachment("moveable") == null || (boolean) target.getAttachment("moveable") != false)) { core.scriptService.callScript("scripts/radial/", "structure/moveable", "handleSelection", core, owner, target, objMenuSelect.getSelection()); return; - } } + core.scriptService.callScript("scripts/radial/", getRadialFilename(target), "handleSelection", core, owner, target, objMenuSelect.getSelection()); } From 6ca2e2a25389a51e7feef69511429613678550d2 Mon Sep 17 00:00:00 2001 From: Seefo Date: Fri, 20 Jun 2014 20:21:11 -0400 Subject: [PATCH 20/92] Accidentally forgot a line for previous commit --- src/services/sui/SUIService.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/services/sui/SUIService.java b/src/services/sui/SUIService.java index 323a71a8..e031040a 100644 --- a/src/services/sui/SUIService.java +++ b/src/services/sui/SUIService.java @@ -139,8 +139,7 @@ public class SUIService implements INetworkDispatch { return; } - if(core.housingService.getPermissions(owner, target.getContainer()) && !getRadialFilename(target).equals("structure/structure_management_terminal")) - { + if(core.housingService.getPermissions(owner, target.getContainer()) && (target.getAttachment("moveable") == null || (boolean) target.getAttachment("moveable") != false)) { core.scriptService.callScript("scripts/radial/", "structure/moveable", "createRadial", core, owner, target, request.getRadialOptions()); sendRadial(owner, target, request.getRadialOptions(), request.getRadialCount()); return; @@ -187,7 +186,6 @@ public class SUIService implements INetworkDispatch { return; } - core.scriptService.callScript("scripts/radial/", getRadialFilename(target), "handleSelection", core, owner, target, objMenuSelect.getSelection()); } From dd39f1617c6cd644db51ef4996fd69a430bac30f Mon Sep 17 00:00:00 2001 From: Seefo Date: Sat, 21 Jun 2014 03:35:28 -0400 Subject: [PATCH 21/92] Fixed several equipment bugs where stats wouldn't be properly removed or added Updated engine must be committed for this fix to work - please wait --- scripts/commands/transferitemarmor.py | 72 +++++----- scripts/commands/transferitemmisc.py | 130 +++++++++---------- scripts/commands/transferitemweapon.py | 34 ++--- src/services/equipment/EquipmentService.java | 4 + 4 files changed, 106 insertions(+), 134 deletions(-) diff --git a/scripts/commands/transferitemarmor.py b/scripts/commands/transferitemarmor.py index 8e166cbc..c78c862c 100644 --- a/scripts/commands/transferitemarmor.py +++ b/scripts/commands/transferitemarmor.py @@ -12,51 +12,41 @@ def run(core, actor, target, commandString): canEquip = core.equipmentService.canEquip(actor, target) + if target and container and target.getContainer(): + oldContainer = target.getContainer() + + if container == oldContainer: + print 'Error: New container is same as old container.' + return; + if canEquip[0] is False and container == actor: actor.sendSystemMessage(canEquip[1], 0) return + + replacedObject = None + slotName = None + replacedObjects = [] + slotNames = None + + if actor == container: + slotNames = container.getSlotNamesForObject(target) + + for slotName in slotNames: + object = container.getSlottedObject(slotName) + + if not object in replacedObjects and not object == None: + replacedObjects.append(object) + + if object != None: + actor.transferTo(actor, oldContainer, object) - if target and container and target.getContainer(): - oldContainer = target.getContainer() - if container == oldContainer: - print 'Error: New container is same as old container.' - return; - replacedObject = None - slotName = None - replacedObjects = [] - slotNames = None - if actor == container: - slotNames = container.getSlotNamesForObject(target) - for slotName in slotNames: - object = container.getSlottedObject(slotName) - if not object in replacedObjects and not object == None: - replacedObjects.append(object) - - oldContainer.transferTo(actor, container, target) - - if actor == container: - if target.getTemplate().find('/wearables/') or target.getTemplate().find('/weapon/'): - core.equipmentService.equip(actor, target) - for object in replacedObjects: - core.equipmentService.unequip(actor, object) - #path = 'scripts/' + target.getTemplate().rpartition('/')[0] + '/' - #module = target.getTemplate().rpartition('/')[2].replace('shared_', '').replace('.iff', '') - #core.scriptService.callScript(path, 'equip', module, core, actor, target) - - if container == actor.getSlottedObject('appearance_inventory'): - actor.addObjectToAppearanceEquipList(target) - for object in replacedObjects: - actor.removeObjectFromAppearanceEquipList(object) - - if oldContainer == actor.getSlottedObject('appearance_inventory'): - actor.removeObjectFromAppearanceEquipList(target) - - if actor == oldContainer: - if target.getTemplate().find('/wearables/') or target.getTemplate().find('/weapon/'): - #path = 'scripts/' + target.getTemplate().rpartition('/')[0] + '/' - #module = target.getTemplate().rpartition('/')[2].replace('shared_', '').replace('.iff', '') - #core.scriptService.callScript(path, 'unequip', module, core, actor, target) - core.equipmentService.unequip(actor, target, replacedObject) + oldContainer.transferTo(actor, container, target) + if oldContainer == actor.getSlottedObject('appearance_inventory'): + actor.removeObjectFromAppearanceEquipList(target) + + if container == actor.getSlottedObject('appearance_inventory'): + actor.addObjectToAppearanceEquipList(target) + return \ No newline at end of file diff --git a/scripts/commands/transferitemmisc.py b/scripts/commands/transferitemmisc.py index 9680da3e..fe26a0fa 100644 --- a/scripts/commands/transferitemmisc.py +++ b/scripts/commands/transferitemmisc.py @@ -2,102 +2,90 @@ import sys from engine.resources.scene import Quaternion def setup(): - return - + return + def run(core, actor, target, commandString): - parsedMsg = commandString.split(' ', 3) - objService = core.objectService - containerID = long(parsedMsg[1]) - container = objService.getObject(containerID) - actorContainer = actor.getContainer() - - if container == None: return - - if not 'cell' in container.getTemplate() and container.isFull(): - actor.sendSystemMessage('@container_error_message:container03', 0) - return - if container.getTemplate().startswith("object/tangible/inventory/shared_lightsaber_inventory") or target.getContainer().getTemplate().startswith("object/tangible/inventory/shared_lightsaber_inventory"): - core.equipmentService.calculateLightsaberAttributes(actor, target, container) - return; + parsedMsg = commandString.split(' ', 3) + objService = core.objectService + containerID = long(parsedMsg[1]) + container = objService.getObject(containerID) + actorContainer = actor.getContainer() + + if container == None: return + + if not 'cell' in container.getTemplate() and container.isFull(): + actor.sendSystemMessage('@container_error_message:container03', 0) + return - if target.getTemplate() == 'object/tangible/item/shared_loot_cash.iff': - core.lootService.handleCreditPickUp(actor,target) - if target.getGrandparent().getInventoryItemCount()==1: - core.lootService.setLooted(actor,target.getGrandparent()) - core.objectService.destroyObject(target) - return + if container.getTemplate().startswith("object/tangible/inventory/shared_lightsaber_inventory") or target.getContainer().getTemplate().startswith("object/tangible/inventory/shared_lightsaber_inventory"): + core.equipmentService.calculateLightsaberAttributes(actor, target, container) + return; + + if target.getTemplate() == 'object/tangible/item/shared_loot_cash.iff': + core.lootService.handleCreditPickUp(actor,target) + if target.getGrandparent().getInventoryItemCount()==1: + core.lootService.setLooted(actor,target.getGrandparent()) + core.objectService.destroyObject(target) + return - if target.isLootItem(): - target.setLootItem(0) - actor.sendSystemMessage('You looted ' + target.getObjectName().getStfValue() + ' from corpse.', 0) - #actor.sendSystemMessage('container.getInventoryItemCount() %s' % target.getGrandparent().getInventoryItemCount(), 0) - if target.getGrandparent().getInventoryItemCount()==1: - core.lootService.setLooted(actor,target.getGrandparent()) - - if actorContainer != None and (container.getTemplate() == "object/cell/shared_cell.iff") & core.housingService.getPermissions(actor, actorContainer): + if target.isLootItem(): + target.setLootItem(0) + actor.sendSystemMessage('You looted ' + target.getObjectName().getStfValue() + ' from corpse.', 0) + #actor.sendSystemMessage('container.getInventoryItemCount() %s' % target.getGrandparent().getInventoryItemCount(), 0) + if target.getGrandparent().getInventoryItemCount()==1: + core.lootService.setLooted(actor,target.getGrandparent()) + + if actorContainer != None and (container.getTemplate() == "object/cell/shared_cell.iff") & core.housingService.getPermissions(actor, actorContainer): target.getContainer().transferTo(actor, container, target) core.simulationService.teleport(target, actor.getPosition(), Quaternion(1,0,0,0), containerID) return - elif target.getContainer().getTemplate() == "object/cell/shared_cell.iff" and core.housingService.getPermissions(actor, target.getContainer()): + elif target.getContainer().getTemplate() == "object/cell/shared_cell.iff" and core.housingService.getPermissions(actor, target.getContainer()): target.getContainer().transferTo(actor, container, target) return - elif actorContainer != None and container.getTemplate() == "object/cell/shared_cell.iff": - actor.sendSystemMessage("You do not have permission to access that container!", 0) - return + elif actorContainer != None and container.getTemplate() == "object/cell/shared_cell.iff": + actor.sendSystemMessage("You do not have permission to access that container!", 0) + return - canEquip = core.equipmentService.canEquip(actor, target) + canEquip = core.equipmentService.canEquip(actor, target) - if canEquip[0] is False and container == actor: - actor.sendSystemMessage(canEquip[1], 0) - return + if canEquip[0] is False and container == actor: + actor.sendSystemMessage(canEquip[1], 0) + return - if target and container and target.getContainer(): - oldContainer = target.getContainer() - - if container == oldContainer: - print 'Error: New container is same as old container.' - return; - + if target and container and target.getContainer(): + oldContainer = target.getContainer() + + if container == oldContainer: + print 'Error: New container is same as old container.' + return; + replacedObject = None slotName = None - replacedObjects = [] + replacedObjects = [] slotNames = None - if actor == container: + + if actor == container: slotNames = container.getSlotNamesForObject(target) + for slotName in slotNames: object = container.getSlottedObject(slotName) + if not object in replacedObjects and not object == None: replacedObjects.append(object) - - oldContainer.transferTo(actor, container, target) - - for object in replacedObjects: - core.equipmentService.unequip(actor, object) - - if actor == container: - if target.getTemplate().find('/wearables/') or target.getTemplate().find('/weapon/'): - core.equipmentService.equip(actor, target) - #path = 'scripts/' + target.getTemplate().rpartition('/')[0] + '/' - #module = target.getTemplate().rpartition('/')[2].replace('shared_', '').replace('.iff', '') - #core.scriptService.callScript(path, 'equip', module, core, actor, target) - if container == actor.getSlottedObject('appearance_inventory'): - actor.addObjectToAppearanceEquipList(target) - for object in replacedObjects: - actor.removeObjectFromAppearanceEquipList(object) + if object != None: + container.transferTo(actor, container, object) + + oldContainer.transferTo(actor, container, target) if oldContainer == actor.getSlottedObject('appearance_inventory'): actor.removeObjectFromAppearanceEquipList(target) + + if container == actor.getSlottedObject('appearance_inventory'): + actor.addObjectToAppearanceEquipList(target) - if actor == oldContainer: - if target.getTemplate().find('/wearables/') or target.getTemplate().find('/weapon/'): - #path = 'scripts/' + target.getTemplate().rpartition('/')[0] + '/' - #module = target.getTemplate().rpartition('/')[2].replace('shared_', '').replace('.iff', '') - #core.scriptService.callScript(path, 'unequip', module, core, actor, target) - core.equipmentService.unequip(actor, target) - - return + return diff --git a/scripts/commands/transferitemweapon.py b/scripts/commands/transferitemweapon.py index b07c4e03..500ee505 100644 --- a/scripts/commands/transferitemweapon.py +++ b/scripts/commands/transferitemweapon.py @@ -14,8 +14,8 @@ def run(core, actor, target, commandString): if target and container and target.getContainer(): oldContainer = target.getContainer() if container == oldContainer: - print 'Error: New container is same as old container.' - return; + print 'Error: New container is same as old container.' + return; canEquip = core.equipmentService.canEquip(actor, target) @@ -25,32 +25,22 @@ def run(core, actor, target, commandString): replacedObject = None slotName = None - replacedObjects = [] + replacedObjects = [] slotNames = None - if actor == container: + + if actor == container: slotNames = container.getSlotNamesForObject(target) + for slotName in slotNames: object = container.getSlottedObject(slotName) + if not object in replacedObjects and not object == None: replacedObjects.append(object) + + if object != None: + container.transferTo(actor, container, object) + + oldContainer.transferTo(actor, container, target) - oldContainer.transferTo(actor, container, target) - - if actor == container: - if target.getTemplate().find('/wearables/') or target.getTemplate().find('/weapon/'): - core.equipmentService.equip(actor, target) - for object in replacedObjects: - core.equipmentService.unequip(actor, object) - #path = 'scripts/' + target.getTemplate().rpartition('/')[0] + '/' - #module = target.getTemplate().rpartition('/')[2].replace('shared_', '').replace('.iff', '') - #core.scriptService.callScript(path, 'equip', module, core, actor, target) - - if actor == oldContainer: - if target.getTemplate().find('/wearables/') or target.getTemplate().find('/weapon/'): - #path = 'scripts/' + target.getTemplate().rpartition('/')[0] + '/' - #module = target.getTemplate().rpartition('/')[2].replace('shared_', '').replace('.iff', '') - #core.scriptService.callScript(path, 'unequip', module, core, actor, target) - core.equipmentService.unequip(actor, target, replacedObject) - actor.setWeaponId(target.getObjectID()) return \ No newline at end of file diff --git a/src/services/equipment/EquipmentService.java b/src/services/equipment/EquipmentService.java index 5da16f29..9a989109 100644 --- a/src/services/equipment/EquipmentService.java +++ b/src/services/equipment/EquipmentService.java @@ -166,6 +166,8 @@ public class EquipmentService implements INetworkDispatch { if(!actor.getEquipmentList().contains(item.getObjectID())) { + if(item instanceof WeaponObject) actor.setWeaponId(item.getObjectID()); + actor.addObjectToEquipList(item); processItemAtrributes(actor, item, true); } @@ -182,6 +184,8 @@ public class EquipmentService implements INetworkDispatch { if(actor.getEquipmentList().contains(item.getObjectID())) { + if(item instanceof WeaponObject) actor.setWeaponId(actor.getSlottedObject("default_weapon").getObjectID()); + actor.removeObjectFromEquipList(item); processItemAtrributes(actor, item, false); } From 213a068c286debc2492e0d35142cf30f8229d62d Mon Sep 17 00:00:00 2001 From: Zing Date: Sat, 21 Jun 2014 00:49:31 -0700 Subject: [PATCH 22/92] Loot collection will auto delete if successfully added. --- .../bantha_braided_bracelet.py | 20 +++++++++++++++++++ .../tusken_valuables/broken_gaderaffi.py | 20 +++++++++++++++++++ .../tusken_valuables/hubba_gourd.py | 20 +++++++++++++++++++ .../tusken_valuables/massif_thorn.py | 20 +++++++++++++++++++ .../tusken_valuables/scavenged_metal.py | 20 +++++++++++++++++++ .../tusken_bantha_braided_sling.py | 20 +++++++++++++++++++ .../tusken_valuables/tusken_spirit_mask.py | 20 +++++++++++++++++++ .../tusken_valuables/tusken_talisman.py | 20 +++++++++++++++++++ .../tusken_valuables/womp_rat_tusk.py | 20 +++++++++++++++++++ .../radial/item/collection/loot_collection.py | 7 ++++--- 10 files changed, 184 insertions(+), 3 deletions(-) create mode 100644 scripts/loot/lootItems/collections/tusken_valuables/bantha_braided_bracelet.py create mode 100644 scripts/loot/lootItems/collections/tusken_valuables/broken_gaderaffi.py create mode 100644 scripts/loot/lootItems/collections/tusken_valuables/hubba_gourd.py create mode 100644 scripts/loot/lootItems/collections/tusken_valuables/massif_thorn.py create mode 100644 scripts/loot/lootItems/collections/tusken_valuables/scavenged_metal.py create mode 100644 scripts/loot/lootItems/collections/tusken_valuables/tusken_bantha_braided_sling.py create mode 100644 scripts/loot/lootItems/collections/tusken_valuables/tusken_spirit_mask.py create mode 100644 scripts/loot/lootItems/collections/tusken_valuables/tusken_talisman.py create mode 100644 scripts/loot/lootItems/collections/tusken_valuables/womp_rat_tusk.py diff --git a/scripts/loot/lootItems/collections/tusken_valuables/bantha_braided_bracelet.py b/scripts/loot/lootItems/collections/tusken_valuables/bantha_braided_bracelet.py new file mode 100644 index 00000000..2367cdb9 --- /dev/null +++ b/scripts/loot/lootItems/collections/tusken_valuables/bantha_braided_bracelet.py @@ -0,0 +1,20 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_tusken_bracelet.iff'] + +def STFparams(): + + return ['static_item_n','col_tusken_bantha_bracelet_02_01','static_item_d','col_tusken_bantha_bracelet_02_01'] + +def AddToCollection(): + + return 'col_tusken_valuables' + +def CollectionItemName(): + + return 'tusken_bantha_bracelet_01' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/tusken_valuables/broken_gaderaffi.py b/scripts/loot/lootItems/collections/tusken_valuables/broken_gaderaffi.py new file mode 100644 index 00000000..fd58b1b8 --- /dev/null +++ b/scripts/loot/lootItems/collections/tusken_valuables/broken_gaderaffi.py @@ -0,0 +1,20 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_tusken_gaderffi.iff'] + +def STFparams(): + + return ['static_item_n','col_tusken_gaderffi_02_01','static_item_d','col_tusken_gaderffi_02_01'] + +def AddToCollection(): + + return 'col_tusken_valuables' + +def CollectionItemName(): + + return 'tusken_gaderffi_01' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/tusken_valuables/hubba_gourd.py b/scripts/loot/lootItems/collections/tusken_valuables/hubba_gourd.py new file mode 100644 index 00000000..188cf15c --- /dev/null +++ b/scripts/loot/lootItems/collections/tusken_valuables/hubba_gourd.py @@ -0,0 +1,20 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_tusken_hubba_gourd.iff'] + +def STFparams(): + + return ['static_item_n','col_tusken_hubba_gourd_02_01','static_item_d','col_tusken_hubba_gourd_02_01'] + +def AddToCollection(): + + return 'col_tusken_valuables' + +def CollectionItemName(): + + return 'tusken_hubba_gourd_01' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/tusken_valuables/massif_thorn.py b/scripts/loot/lootItems/collections/tusken_valuables/massif_thorn.py new file mode 100644 index 00000000..fc5f0ca7 --- /dev/null +++ b/scripts/loot/lootItems/collections/tusken_valuables/massif_thorn.py @@ -0,0 +1,20 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_tusken_massif_thorn.iff'] + +def STFparams(): + + return ['static_item_n','col_tusken_massif_thorn_02_01','static_item_d','col_tusken_massif_thorn_02_01'] + +def AddToCollection(): + + return 'col_tusken_valuables' + +def CollectionItemName(): + + return 'tusken_massif_thorn_01' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/tusken_valuables/scavenged_metal.py b/scripts/loot/lootItems/collections/tusken_valuables/scavenged_metal.py new file mode 100644 index 00000000..fed7a706 --- /dev/null +++ b/scripts/loot/lootItems/collections/tusken_valuables/scavenged_metal.py @@ -0,0 +1,20 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_tusken_metal.iff'] + +def STFparams(): + + return ['static_item_n','col_tusken_metal_02_01','static_item_d','col_tusken_metal_02_01'] + +def AddToCollection(): + + return 'col_tusken_valuables' + +def CollectionItemName(): + + return 'tusken_metal_01' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/tusken_valuables/tusken_bantha_braided_sling.py b/scripts/loot/lootItems/collections/tusken_valuables/tusken_bantha_braided_sling.py new file mode 100644 index 00000000..3bd06f29 --- /dev/null +++ b/scripts/loot/lootItems/collections/tusken_valuables/tusken_bantha_braided_sling.py @@ -0,0 +1,20 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_tusken_bantha_braid.iff'] + +def STFparams(): + + return ['static_item_n','col_tusken_bantha_braid_02_01','static_item_d','col_tusken_bantha_braid_02_01'] + +def AddToCollection(): + + return 'col_tusken_valuables' + +def CollectionItemName(): + + return 'tusken_bantha_braid_01' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/tusken_valuables/tusken_spirit_mask.py b/scripts/loot/lootItems/collections/tusken_valuables/tusken_spirit_mask.py new file mode 100644 index 00000000..4c5b4138 --- /dev/null +++ b/scripts/loot/lootItems/collections/tusken_valuables/tusken_spirit_mask.py @@ -0,0 +1,20 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_tusken_spirit_mask.iff'] + +def STFparams(): + + return ['static_item_n','col_tusken_spirit_mask_02_01','static_item_d','col_tusken_spirit_mask_02_01'] + +def AddToCollection(): + + return 'col_tusken_valuables' + +def CollectionItemName(): + + return 'tusken_spirit_mask_01' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/tusken_valuables/tusken_talisman.py b/scripts/loot/lootItems/collections/tusken_valuables/tusken_talisman.py new file mode 100644 index 00000000..db936f17 --- /dev/null +++ b/scripts/loot/lootItems/collections/tusken_valuables/tusken_talisman.py @@ -0,0 +1,20 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_tusken_talisman.iff'] + +def STFparams(): + + return ['static_item_n','col_tusken_talisman_02_01','static_item_d','col_tusken_talisman_02_01'] + +def AddToCollection(): + + return 'col_tusken_valuables' + +def CollectionItemName(): + + return 'tusken_talisman_01' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/tusken_valuables/womp_rat_tusk.py b/scripts/loot/lootItems/collections/tusken_valuables/womp_rat_tusk.py new file mode 100644 index 00000000..c6f8438d --- /dev/null +++ b/scripts/loot/lootItems/collections/tusken_valuables/womp_rat_tusk.py @@ -0,0 +1,20 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_tusken_womp_rat_tusk.iff'] + +def STFparams(): + + return ['static_item_n','col_tusken_womp_rat_tusk_02_01','static_item_d','col_tusken_womp_rat_tusk_02_01'] + +def AddToCollection(): + + return 'col_tusken_valuables' + +def CollectionItemName(): + + return 'tusken_womp_rat_tusk_01' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/radial/item/collection/loot_collection.py b/scripts/radial/item/collection/loot_collection.py index 51fd1e57..f72a1fd2 100644 --- a/scripts/radial/item/collection/loot_collection.py +++ b/scripts/radial/item/collection/loot_collection.py @@ -11,8 +11,9 @@ def handleSelection(core, actor, target, option): if option == 21 and target: if target.getAttachment('CollectionItemName'): print (target.getAttachment('CollectionItemName')) - core.collectionService.addCollection(actor, target.getAttachment('CollectionItemName')) - core.objectService.useObject(actor, target) - #core.objectService.destroyObject(target) + if core.collectionService.isComplete(actor, target.getAttachment('CollectionItemName')) == False: + core.collectionService.addCollection(actor, target.getAttachment('CollectionItemName')) + core.objectService.useObject(actor, target) + core.objectService.destroyObject(target) return \ No newline at end of file From fdcd7d2e44c8b83b52bcd13a369cb502fc46824a Mon Sep 17 00:00:00 2001 From: Seefo Date: Sat, 21 Jun 2014 04:52:03 -0400 Subject: [PATCH 23/92] Fixed #759 --- src/services/bazaar/BazaarService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/services/bazaar/BazaarService.java b/src/services/bazaar/BazaarService.java index 6d27303c..0956c417 100644 --- a/src/services/bazaar/BazaarService.java +++ b/src/services/bazaar/BazaarService.java @@ -797,7 +797,7 @@ public class BazaarService implements INetworkDispatch { auctionItem.setItemTypeCRC(CRC.StringtoCRC(item.getTemplate().replace("shared_", ""))); auctionItem.setStatus(AuctionItem.FORSALE); //auctionItem.setItemName("@" + item.getStfFilename() + ":" + item.getStfName()); - String name = item.getCustomName() == null ? item.getObjectName().getStfValue() : item.getCustomName(); + String name = item.getLookAtText(); auctionItem.setItemName(name); auctionItem.setVendorId(vendor.getObjectID()); auctionItem.setPlanet(vendor.getPlanet().getName()); From a4d26408105c032fae97ee3695377c24e5997a47 Mon Sep 17 00:00:00 2001 From: Mesagoppinmypants Date: Sat, 21 Jun 2014 17:55:26 -0400 Subject: [PATCH 24/92] Added GCW Binocular Buff Item http://swg.wikia.com/wiki/Tactical_Electrobinoculars --- .../tangible/gcw/gcw_invasion_binoculars_01.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/scripts/object/tangible/gcw/gcw_invasion_binoculars_01.py b/scripts/object/tangible/gcw/gcw_invasion_binoculars_01.py index ccad8904..02df443d 100644 --- a/scripts/object/tangible/gcw/gcw_invasion_binoculars_01.py +++ b/scripts/object/tangible/gcw/gcw_invasion_binoculars_01.py @@ -1,4 +1,14 @@ import sys def setup(core, object): - return \ No newline at end of file + object.setIntAttribute('no_trade', 1) + object.setAttachment('radial_filename', 'object/usable') + object.setStfFilename('static_item_n') + object.setStfName('invasion_gcw_binoculars_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('invasion_gcw_binoculars_01_01') + return + +def use(core, actor, object): + core.buffService.addBuffToCreature(actor, 'gcw_invasion_binoculars', actor) + return From 6400a7b9b0b5cc45925ffc12a62308f87a685f51 Mon Sep 17 00:00:00 2001 From: Seefo Date: Sat, 21 Jun 2014 18:15:28 -0400 Subject: [PATCH 25/92] Fixed an issue where items weren't being properly removed when respeccing --- src/services/PlayerService.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/services/PlayerService.java b/src/services/PlayerService.java index 591d31aa..8cb1d8ff 100644 --- a/src/services/PlayerService.java +++ b/src/services/PlayerService.java @@ -674,13 +674,14 @@ public class PlayerService implements INetworkDispatch { */ public void resetLevel(CreatureObject creature) { PlayerObject player = (PlayerObject) creature.getSlottedObject("ghost"); + SWGObject inventory = creature.getSlottedObject("inventory"); try { for (Long equipmentId : new ArrayList(creature.getEquipmentList())) { SWGObject equipment = core.objectService.getObject(equipmentId); - if (equipment == null) { + if (equipment == null || equipment.getTemplate().startsWith("object/tangible/hair/")) { continue; } @@ -693,7 +694,7 @@ public class PlayerService implements INetworkDispatch { case "object/weapon/creature/shared_creature_default_weapon.iff": continue; default: - core.equipmentService.unequip(creature, equipment); + creature.transferTo(creature, inventory, equipment); } } } catch (Exception e) { From 8d1cc1722061e28b68927a9faa8d86c83ac2f2a4 Mon Sep 17 00:00:00 2001 From: Zing Date: Sat, 21 Jun 2014 15:18:17 -0700 Subject: [PATCH 26/92] More Loot Collections Moved loot collection radial into collection radial (can be used for other consume item collections. added: Nightsister Valuables, Gem, Prototype IG-88, and StormTrooper collections. --- .../green_cusion_cut_gem/green_artusian.py | 19 ++++++++++++++++++ .../green_cusion_cut_gem/green_baltaran.py | 19 ++++++++++++++++++ .../gem/green_cusion_cut_gem/green_bondar.py | 19 ++++++++++++++++++ .../green_cusion_cut_gem/green_chrysopaz.py | 19 ++++++++++++++++++ .../gem/green_cusion_cut_gem/green_dragite.py | 19 ++++++++++++++++++ .../green_cusion_cut_gem/green_durindfire.py | 19 ++++++++++++++++++ .../green_cusion_cut_gem/green_firefacet.py | 19 ++++++++++++++++++ .../gem/green_cusion_cut_gem/green_jenruax.py | 19 ++++++++++++++++++ .../gem/green_cusion_cut_gem/green_pikach.py | 19 ++++++++++++++++++ .../gem/green_cusion_cut_gem/green_vertex.py | 19 ++++++++++++++++++ .../gem/red_round_cut_gem/red_artusian.py | 19 ++++++++++++++++++ .../gem/red_round_cut_gem/red_baltaran.py | 19 ++++++++++++++++++ .../gem/red_round_cut_gem/red_bondar.py | 19 ++++++++++++++++++ .../gem/red_round_cut_gem/red_chrysopaz.py | 19 ++++++++++++++++++ .../gem/red_round_cut_gem/red_dragite.py | 19 ++++++++++++++++++ .../gem/red_round_cut_gem/red_durindfire.py | 19 ++++++++++++++++++ .../gem/red_round_cut_gem/red_firefacet.py | 19 ++++++++++++++++++ .../gem/red_round_cut_gem/red_jenruax.py | 19 ++++++++++++++++++ .../gem/red_round_cut_gem/red_pikach.py | 19 ++++++++++++++++++ .../gem/red_round_cut_gem/red_vertex.py | 19 ++++++++++++++++++ .../set_of_singing_mountain_clan_earrings.py | 20 +++++++++++++++++++ .../singing_mountain_clan_bracelet.py | 20 +++++++++++++++++++ .../singing_mountain_clan_broach.py | 20 +++++++++++++++++++ .../singing_mountain_clan_pendant.py | 20 +++++++++++++++++++ .../singing_mountain_clan_ring.py | 20 +++++++++++++++++++ .../collections/prototype_ig_88/ig_88_head.py | 20 +++++++++++++++++++ .../prototype_ig_88/ig_88_left_arm.py | 20 +++++++++++++++++++ .../prototype_ig_88/ig_88_left_leg.py | 20 +++++++++++++++++++ .../prototype_ig_88/ig_88_right_arm.py | 20 +++++++++++++++++++ .../prototype_ig_88/ig_88_right_leg.py | 20 +++++++++++++++++++ .../prototype_ig_88/ig_88_stand.py | 20 +++++++++++++++++++ .../prototype_ig_88/ig_88_torso.py | 20 +++++++++++++++++++ .../prototype_ig_88/ig_88_wooden_dowel.py | 12 +++++++++++ .../stormtrooper_head.py | 20 +++++++++++++++++++ .../stormtrooper_left_arm.py | 20 +++++++++++++++++++ .../stormtrooper_left_leg.py | 20 +++++++++++++++++++ .../stormtrooper_right_arm.py | 20 +++++++++++++++++++ .../stormtrooper_right_leg.py | 20 +++++++++++++++++++ .../stormtrooper_stand.py | 20 +++++++++++++++++++ .../stormtrooper_torso.py | 20 +++++++++++++++++++ .../stormtrooper_wooden_dowel.py | 12 +++++++++++ scripts/radial/item/collection.py | 10 +++++++--- .../radial/item/collection/loot_collection.py | 19 ------------------ src/services/LootService.java | 4 ++-- 44 files changed, 793 insertions(+), 24 deletions(-) create mode 100644 scripts/loot/lootItems/collections/gem/green_cusion_cut_gem/green_artusian.py create mode 100644 scripts/loot/lootItems/collections/gem/green_cusion_cut_gem/green_baltaran.py create mode 100644 scripts/loot/lootItems/collections/gem/green_cusion_cut_gem/green_bondar.py create mode 100644 scripts/loot/lootItems/collections/gem/green_cusion_cut_gem/green_chrysopaz.py create mode 100644 scripts/loot/lootItems/collections/gem/green_cusion_cut_gem/green_dragite.py create mode 100644 scripts/loot/lootItems/collections/gem/green_cusion_cut_gem/green_durindfire.py create mode 100644 scripts/loot/lootItems/collections/gem/green_cusion_cut_gem/green_firefacet.py create mode 100644 scripts/loot/lootItems/collections/gem/green_cusion_cut_gem/green_jenruax.py create mode 100644 scripts/loot/lootItems/collections/gem/green_cusion_cut_gem/green_pikach.py create mode 100644 scripts/loot/lootItems/collections/gem/green_cusion_cut_gem/green_vertex.py create mode 100644 scripts/loot/lootItems/collections/gem/red_round_cut_gem/red_artusian.py create mode 100644 scripts/loot/lootItems/collections/gem/red_round_cut_gem/red_baltaran.py create mode 100644 scripts/loot/lootItems/collections/gem/red_round_cut_gem/red_bondar.py create mode 100644 scripts/loot/lootItems/collections/gem/red_round_cut_gem/red_chrysopaz.py create mode 100644 scripts/loot/lootItems/collections/gem/red_round_cut_gem/red_dragite.py create mode 100644 scripts/loot/lootItems/collections/gem/red_round_cut_gem/red_durindfire.py create mode 100644 scripts/loot/lootItems/collections/gem/red_round_cut_gem/red_firefacet.py create mode 100644 scripts/loot/lootItems/collections/gem/red_round_cut_gem/red_jenruax.py create mode 100644 scripts/loot/lootItems/collections/gem/red_round_cut_gem/red_pikach.py create mode 100644 scripts/loot/lootItems/collections/gem/red_round_cut_gem/red_vertex.py create mode 100644 scripts/loot/lootItems/collections/nightsister_valuables/set_of_singing_mountain_clan_earrings.py create mode 100644 scripts/loot/lootItems/collections/nightsister_valuables/singing_mountain_clan_bracelet.py create mode 100644 scripts/loot/lootItems/collections/nightsister_valuables/singing_mountain_clan_broach.py create mode 100644 scripts/loot/lootItems/collections/nightsister_valuables/singing_mountain_clan_pendant.py create mode 100644 scripts/loot/lootItems/collections/nightsister_valuables/singing_mountain_clan_ring.py create mode 100644 scripts/loot/lootItems/collections/prototype_ig_88/ig_88_head.py create mode 100644 scripts/loot/lootItems/collections/prototype_ig_88/ig_88_left_arm.py create mode 100644 scripts/loot/lootItems/collections/prototype_ig_88/ig_88_left_leg.py create mode 100644 scripts/loot/lootItems/collections/prototype_ig_88/ig_88_right_arm.py create mode 100644 scripts/loot/lootItems/collections/prototype_ig_88/ig_88_right_leg.py create mode 100644 scripts/loot/lootItems/collections/prototype_ig_88/ig_88_stand.py create mode 100644 scripts/loot/lootItems/collections/prototype_ig_88/ig_88_torso.py create mode 100644 scripts/loot/lootItems/collections/prototype_ig_88/ig_88_wooden_dowel.py create mode 100644 scripts/loot/lootItems/collections/prototype_stormtrooper/stormtrooper_head.py create mode 100644 scripts/loot/lootItems/collections/prototype_stormtrooper/stormtrooper_left_arm.py create mode 100644 scripts/loot/lootItems/collections/prototype_stormtrooper/stormtrooper_left_leg.py create mode 100644 scripts/loot/lootItems/collections/prototype_stormtrooper/stormtrooper_right_arm.py create mode 100644 scripts/loot/lootItems/collections/prototype_stormtrooper/stormtrooper_right_leg.py create mode 100644 scripts/loot/lootItems/collections/prototype_stormtrooper/stormtrooper_stand.py create mode 100644 scripts/loot/lootItems/collections/prototype_stormtrooper/stormtrooper_torso.py create mode 100644 scripts/loot/lootItems/collections/prototype_stormtrooper/stormtrooper_wooden_dowel.py delete mode 100644 scripts/radial/item/collection/loot_collection.py diff --git a/scripts/loot/lootItems/collections/gem/green_cusion_cut_gem/green_artusian.py b/scripts/loot/lootItems/collections/gem/green_cusion_cut_gem/green_artusian.py new file mode 100644 index 00000000..50f88977 --- /dev/null +++ b/scripts/loot/lootItems/collections/gem/green_cusion_cut_gem/green_artusian.py @@ -0,0 +1,19 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_green_sq_cut_gem_style1.iff'] + +def STFparams(): + + return ['static_item_n','col_green_sq_cut_gem_style1_02_02','static_item_d','col_green_sq_cut_gem_style1_02_02'] + +def AddToCollection(): + + return 'col_square_green_cut_gem_01' + +def CollectionItemName(): + + return 'square_green_gem_style1_02' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/gem/green_cusion_cut_gem/green_baltaran.py b/scripts/loot/lootItems/collections/gem/green_cusion_cut_gem/green_baltaran.py new file mode 100644 index 00000000..3b1d9dea --- /dev/null +++ b/scripts/loot/lootItems/collections/gem/green_cusion_cut_gem/green_baltaran.py @@ -0,0 +1,19 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_green_sq_cut_gem_style1.iff'] + +def STFparams(): + + return ['static_item_n','col_green_sq_cut_gem_style1_02_03','static_item_d','col_green_sq_cut_gem_style1_02_03'] + +def AddToCollection(): + + return 'col_square_green_cut_gem_01' + +def CollectionItemName(): + + return 'square_green_gem_style1_03' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/gem/green_cusion_cut_gem/green_bondar.py b/scripts/loot/lootItems/collections/gem/green_cusion_cut_gem/green_bondar.py new file mode 100644 index 00000000..721d7681 --- /dev/null +++ b/scripts/loot/lootItems/collections/gem/green_cusion_cut_gem/green_bondar.py @@ -0,0 +1,19 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_green_sq_cut_gem_style1.iff'] + +def STFparams(): + + return ['static_item_n','col_green_sq_cut_gem_style1_02_04','static_item_d','col_green_sq_cut_gem_style1_02_04'] + +def AddToCollection(): + + return 'col_square_green_cut_gem_01' + +def CollectionItemName(): + + return 'square_green_gem_style1_04' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/gem/green_cusion_cut_gem/green_chrysopaz.py b/scripts/loot/lootItems/collections/gem/green_cusion_cut_gem/green_chrysopaz.py new file mode 100644 index 00000000..0a10d74c --- /dev/null +++ b/scripts/loot/lootItems/collections/gem/green_cusion_cut_gem/green_chrysopaz.py @@ -0,0 +1,19 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_green_sq_cut_gem_style1.iff'] + +def STFparams(): + + return ['static_item_n','col_green_sq_cut_gem_style1_02_05','static_item_d','col_green_sq_cut_gem_style1_02_05'] + +def AddToCollection(): + + return 'col_square_green_cut_gem_01' + +def CollectionItemName(): + + return 'square_green_gem_style1_05' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/gem/green_cusion_cut_gem/green_dragite.py b/scripts/loot/lootItems/collections/gem/green_cusion_cut_gem/green_dragite.py new file mode 100644 index 00000000..95ac01b9 --- /dev/null +++ b/scripts/loot/lootItems/collections/gem/green_cusion_cut_gem/green_dragite.py @@ -0,0 +1,19 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_green_sq_cut_gem_style1.iff'] + +def STFparams(): + + return ['static_item_n','col_green_sq_cut_gem_style1_02_08','static_item_d','col_green_sq_cut_gem_style1_02_08'] + +def AddToCollection(): + + return 'col_square_green_cut_gem_01' + +def CollectionItemName(): + + return 'square_green_gem_style1_08' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/gem/green_cusion_cut_gem/green_durindfire.py b/scripts/loot/lootItems/collections/gem/green_cusion_cut_gem/green_durindfire.py new file mode 100644 index 00000000..62a0cb60 --- /dev/null +++ b/scripts/loot/lootItems/collections/gem/green_cusion_cut_gem/green_durindfire.py @@ -0,0 +1,19 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_green_sq_cut_gem_style1.iff'] + +def STFparams(): + + return ['static_item_n','col_green_sq_cut_gem_style1_02_06','static_item_d','col_green_sq_cut_gem_style1_02_06'] + +def AddToCollection(): + + return 'col_square_green_cut_gem_01' + +def CollectionItemName(): + + return 'square_green_gem_style1_06' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/gem/green_cusion_cut_gem/green_firefacet.py b/scripts/loot/lootItems/collections/gem/green_cusion_cut_gem/green_firefacet.py new file mode 100644 index 00000000..ca518c62 --- /dev/null +++ b/scripts/loot/lootItems/collections/gem/green_cusion_cut_gem/green_firefacet.py @@ -0,0 +1,19 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_green_sq_cut_gem_style1.iff'] + +def STFparams(): + + return ['static_item_n','col_green_sq_cut_gem_style1_02_09','static_item_d','col_green_sq_cut_gem_style1_02_09'] + +def AddToCollection(): + + return 'col_square_green_cut_gem_01' + +def CollectionItemName(): + + return 'square_green_gem_style1_09' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/gem/green_cusion_cut_gem/green_jenruax.py b/scripts/loot/lootItems/collections/gem/green_cusion_cut_gem/green_jenruax.py new file mode 100644 index 00000000..7e61874a --- /dev/null +++ b/scripts/loot/lootItems/collections/gem/green_cusion_cut_gem/green_jenruax.py @@ -0,0 +1,19 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_green_sq_cut_gem_style1.iff'] + +def STFparams(): + + return ['static_item_n','col_green_sq_cut_gem_style1_02_10','static_item_d','col_green_sq_cut_gem_style1_02_10'] + +def AddToCollection(): + + return 'col_square_green_cut_gem_01' + +def CollectionItemName(): + + return 'square_green_gem_style1_10' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/gem/green_cusion_cut_gem/green_pikach.py b/scripts/loot/lootItems/collections/gem/green_cusion_cut_gem/green_pikach.py new file mode 100644 index 00000000..6f3fa6dd --- /dev/null +++ b/scripts/loot/lootItems/collections/gem/green_cusion_cut_gem/green_pikach.py @@ -0,0 +1,19 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_green_sq_cut_gem_style1.iff'] + +def STFparams(): + + return ['static_item_n','col_green_sq_cut_gem_style1_02_01','static_item_d','col_green_sq_cut_gem_style1_02_01'] + +def AddToCollection(): + + return 'col_square_green_cut_gem_01' + +def CollectionItemName(): + + return 'square_green_gem_style1_01' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/gem/green_cusion_cut_gem/green_vertex.py b/scripts/loot/lootItems/collections/gem/green_cusion_cut_gem/green_vertex.py new file mode 100644 index 00000000..47430210 --- /dev/null +++ b/scripts/loot/lootItems/collections/gem/green_cusion_cut_gem/green_vertex.py @@ -0,0 +1,19 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_green_sq_cut_gem_style1.iff'] + +def STFparams(): + + return ['static_item_n','col_green_sq_cut_gem_style1_02_07','static_item_d','col_green_sq_cut_gem_style1_02_07'] + +def AddToCollection(): + + return 'col_square_green_cut_gem_01' + +def CollectionItemName(): + + return 'square_green_gem_style1_07' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/gem/red_round_cut_gem/red_artusian.py b/scripts/loot/lootItems/collections/gem/red_round_cut_gem/red_artusian.py new file mode 100644 index 00000000..2b544015 --- /dev/null +++ b/scripts/loot/lootItems/collections/gem/red_round_cut_gem/red_artusian.py @@ -0,0 +1,19 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_red_rnd_cut_gem_style1.iff'] + +def STFparams(): + + return ['static_item_n','col_red_rnd_cut_gem_style1_02_02','static_item_d','col_red_rnd_cut_gem_style1_02_02'] + +def AddToCollection(): + + return 'col_round_red_cut_gem_01' + +def CollectionItemName(): + + return 'round_red_gem_style1_02' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/gem/red_round_cut_gem/red_baltaran.py b/scripts/loot/lootItems/collections/gem/red_round_cut_gem/red_baltaran.py new file mode 100644 index 00000000..2315ce1e --- /dev/null +++ b/scripts/loot/lootItems/collections/gem/red_round_cut_gem/red_baltaran.py @@ -0,0 +1,19 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_red_rnd_cut_gem_style1.iff'] + +def STFparams(): + + return ['static_item_n','col_red_rnd_cut_gem_style1_02_03','static_item_d','col_red_rnd_cut_gem_style1_02_03'] + +def AddToCollection(): + + return 'col_round_red_cut_gem_01' + +def CollectionItemName(): + + return 'round_red_gem_style1_03' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/gem/red_round_cut_gem/red_bondar.py b/scripts/loot/lootItems/collections/gem/red_round_cut_gem/red_bondar.py new file mode 100644 index 00000000..2b6dd744 --- /dev/null +++ b/scripts/loot/lootItems/collections/gem/red_round_cut_gem/red_bondar.py @@ -0,0 +1,19 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_red_rnd_cut_gem_style1.iff'] + +def STFparams(): + + return ['static_item_n','col_red_rnd_cut_gem_style1_02_04','static_item_d','col_red_rnd_cut_gem_style1_02_04'] + +def AddToCollection(): + + return 'col_round_red_cut_gem_01' + +def CollectionItemName(): + + return 'round_red_gem_style1_04' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/gem/red_round_cut_gem/red_chrysopaz.py b/scripts/loot/lootItems/collections/gem/red_round_cut_gem/red_chrysopaz.py new file mode 100644 index 00000000..c569e47c --- /dev/null +++ b/scripts/loot/lootItems/collections/gem/red_round_cut_gem/red_chrysopaz.py @@ -0,0 +1,19 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_red_rnd_cut_gem_style1.iff'] + +def STFparams(): + + return ['static_item_n','col_red_rnd_cut_gem_style1_02_05','static_item_d','col_red_rnd_cut_gem_style1_02_05'] + +def AddToCollection(): + + return 'col_round_red_cut_gem_01' + +def CollectionItemName(): + + return 'round_red_gem_style1_05' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/gem/red_round_cut_gem/red_dragite.py b/scripts/loot/lootItems/collections/gem/red_round_cut_gem/red_dragite.py new file mode 100644 index 00000000..9145a5d1 --- /dev/null +++ b/scripts/loot/lootItems/collections/gem/red_round_cut_gem/red_dragite.py @@ -0,0 +1,19 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_red_rnd_cut_gem_style1.iff'] + +def STFparams(): + + return ['static_item_n','col_red_rnd_cut_gem_style1_02_08','static_item_d','col_red_rnd_cut_gem_style1_02_08'] + +def AddToCollection(): + + return 'col_round_red_cut_gem_01' + +def CollectionItemName(): + + return 'round_red_gem_style1_08' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/gem/red_round_cut_gem/red_durindfire.py b/scripts/loot/lootItems/collections/gem/red_round_cut_gem/red_durindfire.py new file mode 100644 index 00000000..a3c80bb8 --- /dev/null +++ b/scripts/loot/lootItems/collections/gem/red_round_cut_gem/red_durindfire.py @@ -0,0 +1,19 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_red_rnd_cut_gem_style1.iff'] + +def STFparams(): + + return ['static_item_n','col_red_rnd_cut_gem_style1_02_06','static_item_d','col_red_rnd_cut_gem_style1_02_06'] + +def AddToCollection(): + + return 'col_round_red_cut_gem_01' + +def CollectionItemName(): + + return 'round_red_gem_style1_06' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/gem/red_round_cut_gem/red_firefacet.py b/scripts/loot/lootItems/collections/gem/red_round_cut_gem/red_firefacet.py new file mode 100644 index 00000000..00c65c86 --- /dev/null +++ b/scripts/loot/lootItems/collections/gem/red_round_cut_gem/red_firefacet.py @@ -0,0 +1,19 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_red_rnd_cut_gem_style1.iff'] + +def STFparams(): + + return ['static_item_n','col_red_rnd_cut_gem_style1_02_09','static_item_d','col_red_rnd_cut_gem_style1_02_09'] + +def AddToCollection(): + + return 'col_round_red_cut_gem_01' + +def CollectionItemName(): + + return 'round_red_gem_style1_09' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/gem/red_round_cut_gem/red_jenruax.py b/scripts/loot/lootItems/collections/gem/red_round_cut_gem/red_jenruax.py new file mode 100644 index 00000000..7c13a2fc --- /dev/null +++ b/scripts/loot/lootItems/collections/gem/red_round_cut_gem/red_jenruax.py @@ -0,0 +1,19 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_red_rnd_cut_gem_style1.iff'] + +def STFparams(): + + return ['static_item_n','col_red_rnd_cut_gem_style1_02_10','static_item_d','col_red_rnd_cut_gem_style1_02_10'] + +def AddToCollection(): + + return 'col_round_red_cut_gem_01' + +def CollectionItemName(): + + return 'round_red_gem_style1_10' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/gem/red_round_cut_gem/red_pikach.py b/scripts/loot/lootItems/collections/gem/red_round_cut_gem/red_pikach.py new file mode 100644 index 00000000..dfa1c5b3 --- /dev/null +++ b/scripts/loot/lootItems/collections/gem/red_round_cut_gem/red_pikach.py @@ -0,0 +1,19 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_red_rnd_cut_gem_style1.iff'] + +def STFparams(): + + return ['static_item_n','col_red_rnd_cut_gem_style1_02_01','static_item_d','col_red_rnd_cut_gem_style1_02_01'] + +def AddToCollection(): + + return 'col_round_red_cut_gem_01' + +def CollectionItemName(): + + return 'round_red_gem_style1_01' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/gem/red_round_cut_gem/red_vertex.py b/scripts/loot/lootItems/collections/gem/red_round_cut_gem/red_vertex.py new file mode 100644 index 00000000..d3122ef5 --- /dev/null +++ b/scripts/loot/lootItems/collections/gem/red_round_cut_gem/red_vertex.py @@ -0,0 +1,19 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_red_rnd_cut_gem_style1.iff'] + +def STFparams(): + + return ['static_item_n','col_red_rnd_cut_gem_style1_02_07','static_item_d','col_red_rnd_cut_gem_style1_02_07'] + +def AddToCollection(): + + return 'col_round_red_cut_gem_01' + +def CollectionItemName(): + + return 'round_red_gem_style1_07' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/nightsister_valuables/set_of_singing_mountain_clan_earrings.py b/scripts/loot/lootItems/collections/nightsister_valuables/set_of_singing_mountain_clan_earrings.py new file mode 100644 index 00000000..bfb33ed5 --- /dev/null +++ b/scripts/loot/lootItems/collections/nightsister_valuables/set_of_singing_mountain_clan_earrings.py @@ -0,0 +1,20 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_nightsister_earrings.iff'] + +def STFparams(): + + return ['static_item_n','col_nightsister_earrings_01','static_item_d','col_nightsister_earrings_01'] + +def AddToCollection(): + + return 'col_nightsister_valuables' + +def CollectionItemName(): + + return 'nightsister_earrings_01' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/nightsister_valuables/singing_mountain_clan_bracelet.py b/scripts/loot/lootItems/collections/nightsister_valuables/singing_mountain_clan_bracelet.py new file mode 100644 index 00000000..029711ca --- /dev/null +++ b/scripts/loot/lootItems/collections/nightsister_valuables/singing_mountain_clan_bracelet.py @@ -0,0 +1,20 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_nightsister_bracelet.iff'] + +def STFparams(): + + return ['static_item_n','col_nightsister_bracelet_01','static_item_d','col_nightsister_bracelet_01'] + +def AddToCollection(): + + return 'col_nightsister_valuables' + +def CollectionItemName(): + + return 'nightsister_bracelet_01' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/nightsister_valuables/singing_mountain_clan_broach.py b/scripts/loot/lootItems/collections/nightsister_valuables/singing_mountain_clan_broach.py new file mode 100644 index 00000000..f822586a --- /dev/null +++ b/scripts/loot/lootItems/collections/nightsister_valuables/singing_mountain_clan_broach.py @@ -0,0 +1,20 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_nightsister_broach.iff'] + +def STFparams(): + + return ['static_item_n','col_nightsister_broach_01','static_item_d','col_nightsister_broach_01'] + +def AddToCollection(): + + return 'col_nightsister_valuables' + +def CollectionItemName(): + + return 'nightsister_broach_01' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/nightsister_valuables/singing_mountain_clan_pendant.py b/scripts/loot/lootItems/collections/nightsister_valuables/singing_mountain_clan_pendant.py new file mode 100644 index 00000000..81c67b54 --- /dev/null +++ b/scripts/loot/lootItems/collections/nightsister_valuables/singing_mountain_clan_pendant.py @@ -0,0 +1,20 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_nightsister_pendant.iff'] + +def STFparams(): + + return ['static_item_n','col_nightsister_pendant_01','static_item_d','col_nightsister_pendant_01'] + +def AddToCollection(): + + return 'col_nightsister_valuables' + +def CollectionItemName(): + + return 'nightsister_pendant_01' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/nightsister_valuables/singing_mountain_clan_ring.py b/scripts/loot/lootItems/collections/nightsister_valuables/singing_mountain_clan_ring.py new file mode 100644 index 00000000..d4e0c59d --- /dev/null +++ b/scripts/loot/lootItems/collections/nightsister_valuables/singing_mountain_clan_ring.py @@ -0,0 +1,20 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_nightsister_ring.iff'] + +def STFparams(): + + return ['static_item_n','col_nightsister_ring_01','static_item_d','col_nightsister_ring_01'] + +def AddToCollection(): + + return 'col_nightsister_valuables' + +def CollectionItemName(): + + return 'nightsister_ring_01' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/prototype_ig_88/ig_88_head.py b/scripts/loot/lootItems/collections/prototype_ig_88/ig_88_head.py new file mode 100644 index 00000000..c32ff78f --- /dev/null +++ b/scripts/loot/lootItems/collections/prototype_ig_88/ig_88_head.py @@ -0,0 +1,20 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_trader_eng_head.iff'] + +def STFparams(): + + return ['static_item_n','col_ig_88_head_02_01','static_item_d','col_ig_88_head_02_01'] + +def AddToCollection(): + + return 'col_eng_trader' + +def CollectionItemName(): + + return 'trader_eng_head' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/prototype_ig_88/ig_88_left_arm.py b/scripts/loot/lootItems/collections/prototype_ig_88/ig_88_left_arm.py new file mode 100644 index 00000000..088b892c --- /dev/null +++ b/scripts/loot/lootItems/collections/prototype_ig_88/ig_88_left_arm.py @@ -0,0 +1,20 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_trader_eng_left_arm.iff'] + +def STFparams(): + + return ['static_item_n','col_ig_88_left_arm_02_01','static_item_d','col_ig_88_left_arm_02_01'] + +def AddToCollection(): + + return 'col_eng_trader' + +def CollectionItemName(): + + return 'trader_eng_left_arm' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/prototype_ig_88/ig_88_left_leg.py b/scripts/loot/lootItems/collections/prototype_ig_88/ig_88_left_leg.py new file mode 100644 index 00000000..243932c9 --- /dev/null +++ b/scripts/loot/lootItems/collections/prototype_ig_88/ig_88_left_leg.py @@ -0,0 +1,20 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_trader_eng_left_leg.iff'] + +def STFparams(): + + return ['static_item_n','col_ig_88_left_leg_02_01','static_item_d','col_ig_88_left_leg_02_01'] + +def AddToCollection(): + + return 'col_eng_trader' + +def CollectionItemName(): + + return 'trader_eng_left_leg' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/prototype_ig_88/ig_88_right_arm.py b/scripts/loot/lootItems/collections/prototype_ig_88/ig_88_right_arm.py new file mode 100644 index 00000000..965fb9ba --- /dev/null +++ b/scripts/loot/lootItems/collections/prototype_ig_88/ig_88_right_arm.py @@ -0,0 +1,20 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_trader_eng_right_arm.iff'] + +def STFparams(): + + return ['static_item_n','col_ig_88_right_arm_02_01','static_item_d','col_ig_88_right_arm_02_01'] + +def AddToCollection(): + + return 'col_eng_trader' + +def CollectionItemName(): + + return 'trader_eng_right_arm' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/prototype_ig_88/ig_88_right_leg.py b/scripts/loot/lootItems/collections/prototype_ig_88/ig_88_right_leg.py new file mode 100644 index 00000000..a572c54c --- /dev/null +++ b/scripts/loot/lootItems/collections/prototype_ig_88/ig_88_right_leg.py @@ -0,0 +1,20 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_trader_eng_right_leg.iff'] + +def STFparams(): + + return ['static_item_n','col_ig_88_right_leg_02_01','static_item_d','col_ig_88_right_leg_02_01'] + +def AddToCollection(): + + return 'col_eng_trader' + +def CollectionItemName(): + + return 'trader_eng_right_leg' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/prototype_ig_88/ig_88_stand.py b/scripts/loot/lootItems/collections/prototype_ig_88/ig_88_stand.py new file mode 100644 index 00000000..1c590c94 --- /dev/null +++ b/scripts/loot/lootItems/collections/prototype_ig_88/ig_88_stand.py @@ -0,0 +1,20 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_trader_eng_stand_base.iff'] + +def STFparams(): + + return ['static_item_n','col_ig_88_metal_stand_02_01','static_item_d','col_ig_88_metal_stand_02_01'] + +def AddToCollection(): + + return 'col_eng_trader' + +def CollectionItemName(): + + return 'trader_eng_stand_base' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/prototype_ig_88/ig_88_torso.py b/scripts/loot/lootItems/collections/prototype_ig_88/ig_88_torso.py new file mode 100644 index 00000000..0fcc996a --- /dev/null +++ b/scripts/loot/lootItems/collections/prototype_ig_88/ig_88_torso.py @@ -0,0 +1,20 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_trader_eng_torso.iff'] + +def STFparams(): + + return ['static_item_n','col_ig_88_torso_02_01','static_item_d','col_ig_88_torso_02_01'] + +def AddToCollection(): + + return 'col_eng_trader' + +def CollectionItemName(): + + return 'trader_eng_torso' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/prototype_ig_88/ig_88_wooden_dowel.py b/scripts/loot/lootItems/collections/prototype_ig_88/ig_88_wooden_dowel.py new file mode 100644 index 00000000..93783d3c --- /dev/null +++ b/scripts/loot/lootItems/collections/prototype_ig_88/ig_88_wooden_dowel.py @@ -0,0 +1,12 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_ig_88_wooden_dowel.iff'] + +def STFparams(): + + return ['static_item_n','col_ig_88_wooden_dowel_02_01','static_item_d','col_ig_88_wooden_dowel_02_01'] + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/prototype_stormtrooper/stormtrooper_head.py b/scripts/loot/lootItems/collections/prototype_stormtrooper/stormtrooper_head.py new file mode 100644 index 00000000..699ce198 --- /dev/null +++ b/scripts/loot/lootItems/collections/prototype_stormtrooper/stormtrooper_head.py @@ -0,0 +1,20 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_trader_mun_head.iff'] + +def STFparams(): + + return ['static_item_n','col_stormtrooper_head_02_01','static_item_d','col_stormtrooper_head_02_01'] + +def AddToCollection(): + + return 'col_mun_trader' + +def CollectionItemName(): + + return 'trader_mun_head' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/prototype_stormtrooper/stormtrooper_left_arm.py b/scripts/loot/lootItems/collections/prototype_stormtrooper/stormtrooper_left_arm.py new file mode 100644 index 00000000..731e0233 --- /dev/null +++ b/scripts/loot/lootItems/collections/prototype_stormtrooper/stormtrooper_left_arm.py @@ -0,0 +1,20 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_trader_mun_left_arm.iff'] + +def STFparams(): + + return ['static_item_n','col_stormtrooper_left_arm_02_01','static_item_d','col_stormtrooper_left_arm_02_01'] + +def AddToCollection(): + + return 'col_mun_trader' + +def CollectionItemName(): + + return 'trader_mun_left_arm' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/prototype_stormtrooper/stormtrooper_left_leg.py b/scripts/loot/lootItems/collections/prototype_stormtrooper/stormtrooper_left_leg.py new file mode 100644 index 00000000..34659202 --- /dev/null +++ b/scripts/loot/lootItems/collections/prototype_stormtrooper/stormtrooper_left_leg.py @@ -0,0 +1,20 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_trader_mun_left_leg.iff'] + +def STFparams(): + + return ['static_item_n','col_stormtrooper_left_leg_02_01','static_item_d','col_stormtrooper_left_leg_02_01'] + +def AddToCollection(): + + return 'col_mun_trader' + +def CollectionItemName(): + + return 'trader_mun_left_leg' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/prototype_stormtrooper/stormtrooper_right_arm.py b/scripts/loot/lootItems/collections/prototype_stormtrooper/stormtrooper_right_arm.py new file mode 100644 index 00000000..728150ec --- /dev/null +++ b/scripts/loot/lootItems/collections/prototype_stormtrooper/stormtrooper_right_arm.py @@ -0,0 +1,20 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_trader_mun_right_arm.iff'] + +def STFparams(): + + return ['static_item_n','col_stormtrooper_right_arm_02_01','static_item_d','col_stormtrooper_right_arm_02_01'] + +def AddToCollection(): + + return 'col_mun_trader' + +def CollectionItemName(): + + return 'trader_mun_right_arm' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/prototype_stormtrooper/stormtrooper_right_leg.py b/scripts/loot/lootItems/collections/prototype_stormtrooper/stormtrooper_right_leg.py new file mode 100644 index 00000000..60dc5e04 --- /dev/null +++ b/scripts/loot/lootItems/collections/prototype_stormtrooper/stormtrooper_right_leg.py @@ -0,0 +1,20 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_trader_mun_right_leg.iff'] + +def STFparams(): + + return ['static_item_n','col_stormtrooper_right_leg_02_01','static_item_d','col_stormtrooper_right_leg_02_01'] + +def AddToCollection(): + + return 'col_mun_trader' + +def CollectionItemName(): + + return 'trader_mun_right_leg' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/prototype_stormtrooper/stormtrooper_stand.py b/scripts/loot/lootItems/collections/prototype_stormtrooper/stormtrooper_stand.py new file mode 100644 index 00000000..2d59886b --- /dev/null +++ b/scripts/loot/lootItems/collections/prototype_stormtrooper/stormtrooper_stand.py @@ -0,0 +1,20 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_trader_mun_stand_base.iff'] + +def STFparams(): + + return ['static_item_n','col_stormtrooper_metal_stand_02_01','static_item_d','col_stormtrooper_metal_stand_02_01'] + +def AddToCollection(): + + return 'col_mun_trader' + +def CollectionItemName(): + + return 'trader_mun_stand_base' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/prototype_stormtrooper/stormtrooper_torso.py b/scripts/loot/lootItems/collections/prototype_stormtrooper/stormtrooper_torso.py new file mode 100644 index 00000000..2f07827c --- /dev/null +++ b/scripts/loot/lootItems/collections/prototype_stormtrooper/stormtrooper_torso.py @@ -0,0 +1,20 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_trader_mun_torso.iff'] + +def STFparams(): + + return ['static_item_n','col_stormtrooper_torso_02_01','static_item_d','col_stormtrooper_torso_02_01'] + +def AddToCollection(): + + return 'col_mun_trader' + +def CollectionItemName(): + + return 'trader_mun_torso' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/prototype_stormtrooper/stormtrooper_wooden_dowel.py b/scripts/loot/lootItems/collections/prototype_stormtrooper/stormtrooper_wooden_dowel.py new file mode 100644 index 00000000..7f60ba3b --- /dev/null +++ b/scripts/loot/lootItems/collections/prototype_stormtrooper/stormtrooper_wooden_dowel.py @@ -0,0 +1,12 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_stormtrooper_wooden_dowel.iff'] + +def STFparams(): + + return ['static_item_n','col_stormtrooper_wooden_dowel_02_01','static_item_d','col_stormtrooper_wooden_dowel_02_01'] + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/radial/item/collection.py b/scripts/radial/item/collection.py index 0b45c9e4..f72a1fd2 100644 --- a/scripts/radial/item/collection.py +++ b/scripts/radial/item/collection.py @@ -7,9 +7,13 @@ def createRadial(core, owner, target, radials): radials.add(RadialOptions(0, 21, 3, '@collection:consume_item')) return -def handleSelection(core, owner, target, option): +def handleSelection(core, actor, target, option): if option == 21 and target: - core.collectionService.addCollection(owner, target.getStfName().rsplit('_n', 1)[0]) - core.objectService.useObject(owner, target) + if target.getAttachment('CollectionItemName'): + print (target.getAttachment('CollectionItemName')) + if core.collectionService.isComplete(actor, target.getAttachment('CollectionItemName')) == False: + core.collectionService.addCollection(actor, target.getAttachment('CollectionItemName')) + core.objectService.useObject(actor, target) + core.objectService.destroyObject(target) return \ No newline at end of file diff --git a/scripts/radial/item/collection/loot_collection.py b/scripts/radial/item/collection/loot_collection.py deleted file mode 100644 index f72a1fd2..00000000 --- a/scripts/radial/item/collection/loot_collection.py +++ /dev/null @@ -1,19 +0,0 @@ -from resources.common import RadialOptions -import sys - -def createRadial(core, owner, target, radials): - radials.add(RadialOptions(0, 21, 1, '')) - radials.add(RadialOptions(0, 7, 1, '')) - radials.add(RadialOptions(0, 21, 3, '@collection:consume_item')) - return - -def handleSelection(core, actor, target, option): - if option == 21 and target: - if target.getAttachment('CollectionItemName'): - print (target.getAttachment('CollectionItemName')) - if core.collectionService.isComplete(actor, target.getAttachment('CollectionItemName')) == False: - core.collectionService.addCollection(actor, target.getAttachment('CollectionItemName')) - core.objectService.useObject(actor, target) - core.objectService.destroyObject(target) - return - \ No newline at end of file diff --git a/src/services/LootService.java b/src/services/LootService.java index 35aec14e..0b45fd30 100644 --- a/src/services/LootService.java +++ b/src/services/LootService.java @@ -758,7 +758,7 @@ public class LootService implements INetworkDispatch { droppedItem.getAttributes().put("@obj_attr_n:collection_name", "@collection_n:"+addToCollection); //droppedItem.getAttributes().put("@obj_attr_n:collection_name", "\\#FFFF00 @collection_n:"+addToCollection + " \\#FFFFFF "); //core.collectionService.addCollection(actor, "new_prof_officer_master") - droppedItem.setAttachment("radial_filename", "item/collection/loot_collection"); + droppedItem.setAttachment("radial_filename", "item/collection"); //System.out.println("collection"); } @@ -1224,7 +1224,7 @@ public class LootService implements INetworkDispatch { droppedItem.getAttributes().put("@obj_attr_n:collection_name", "@collection_n:"+addToCollection); //droppedItem.getAttributes().put("@obj_attr_n:collection_name", "\\#FFFF00 @collection_n:"+addToCollection + " \\#FFFFFF "); //core.collectionService.addCollection(actor, "new_prof_officer_master") - droppedItem.setAttachment("radial_filename", "item/loot_collection"); + droppedItem.setAttachment("radial_filename", "item/collection"); } From 0b315503f0b083e9ac712dbc102305085c7f7aec Mon Sep 17 00:00:00 2001 From: Seefo Date: Sat, 21 Jun 2014 23:03:15 -0400 Subject: [PATCH 27/92] Added coloring to the 'Used in Collection' attribute for collection items --- src/services/AttributeService.java | 16 ++++++++++++++-- src/services/LootService.java | 3 ++- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/services/AttributeService.java b/src/services/AttributeService.java index f5da7e71..97e52c1f 100644 --- a/src/services/AttributeService.java +++ b/src/services/AttributeService.java @@ -28,9 +28,9 @@ import java.util.TreeMap; import org.apache.mina.core.buffer.SimpleBufferAllocator; import main.NGECore; - import protocol.swg.AttributeListMessage; - +import resources.objects.creature.CreatureObject; +import engine.resources.common.Stf; import engine.resources.objects.SWGObject; import engine.resources.service.INetworkDispatch; import engine.resources.service.INetworkRemoteEvent; @@ -65,6 +65,18 @@ public class AttributeService implements INetworkDispatch { if(requester.getClient() == null || requester.getClient().getSession() == null) return; + // Color collection used in attribute based on whether collection is complete or not + if(target.getAttachment("CollectionItemName") != null) + { + String collectionName = new Stf("@collection_n:" + (String) target.getAttachment("AddToCollection")).getStfValue().replace(":", " -"); + + if(core.collectionService.isComplete((CreatureObject) requester, (String) target.getAttachment("CollectionItemName"))) + { + target.getAttributes().put("@obj_attr_n:collection_name", "\\#FF0000 " + collectionName); + } + else target.getAttributes().put("@obj_attr_n:collection_name", "\\#00FF00 " + collectionName); + } + AttributeListMessage message = new AttributeListMessage(target, bufferPool); requester.getClient().getSession().write(message.serialize()); } diff --git a/src/services/LootService.java b/src/services/LootService.java index 35aec14e..60ae4a66 100644 --- a/src/services/LootService.java +++ b/src/services/LootService.java @@ -754,11 +754,12 @@ public class LootService implements INetworkDispatch { setSTFParams(droppedItem, STFparams); } - if (addToCollection!=null){ + if (addToCollection!=null) { droppedItem.getAttributes().put("@obj_attr_n:collection_name", "@collection_n:"+addToCollection); //droppedItem.getAttributes().put("@obj_attr_n:collection_name", "\\#FFFF00 @collection_n:"+addToCollection + " \\#FFFFFF "); //core.collectionService.addCollection(actor, "new_prof_officer_master") droppedItem.setAttachment("radial_filename", "item/collection/loot_collection"); + droppedItem.setAttachment("AddToCollection", addToCollection); //System.out.println("collection"); } From b6fd2643c8ce991c399f9a66bb7c4027900a09fb Mon Sep 17 00:00:00 2001 From: Zing Date: Sat, 21 Jun 2014 21:15:42 -0700 Subject: [PATCH 28/92] Loot Collections DIY: Glass Shelves Holographic Emitter Cabinetry Tech Craftsman Tools Tech in Maximizing Space Shelving Tech Storage Tech --- .../diy_glass_shelves/diy_glass_shelf_1.py | 29 ++++++++++++++++++ .../diy_glass_shelves/diy_glass_shelf_2.py | 29 ++++++++++++++++++ .../diy_glass_shelves/diy_glass_shelf_3.py | 29 ++++++++++++++++++ .../diy_glass_shelves/diy_glass_shelf_4.py | 29 ++++++++++++++++++ .../diy_glass_shelves/diy_glass_shelf_5.py | 29 ++++++++++++++++++ .../a_holographic_light_source.py | 19 ++++++++++++ .../a_holographic_mirror.py | 19 ++++++++++++ .../holographic_imagery/a_photo_detector.py | 19 ++++++++++++ .../an_electric_circuit.py | 19 ++++++++++++ .../an_optical_processor.py | 19 ++++++++++++ .../cabinetry_techniques_1.py | 29 ++++++++++++++++++ .../cabinetry_techniques_10.py | 29 ++++++++++++++++++ .../cabinetry_techniques_2.py | 29 ++++++++++++++++++ .../cabinetry_techniques_3.py | 29 ++++++++++++++++++ .../cabinetry_techniques_4.py | 29 ++++++++++++++++++ .../cabinetry_techniques_5.py | 29 ++++++++++++++++++ .../cabinetry_techniques_6.py | 29 ++++++++++++++++++ .../cabinetry_techniques_7.py | 29 ++++++++++++++++++ .../cabinetry_techniques_8.py | 29 ++++++++++++++++++ .../cabinetry_techniques_9.py | 29 ++++++++++++++++++ .../craftsman_tools/craftsman_tools_1.py | 29 ++++++++++++++++++ .../craftsman_tools/craftsman_tools_10.py | 29 ++++++++++++++++++ .../craftsman_tools/craftsman_tools_2.py | 29 ++++++++++++++++++ .../craftsman_tools/craftsman_tools_3.py | 29 ++++++++++++++++++ .../craftsman_tools/craftsman_tools_4.py | 29 ++++++++++++++++++ .../craftsman_tools/craftsman_tools_5.py | 29 ++++++++++++++++++ .../craftsman_tools/craftsman_tools_6.py | 29 ++++++++++++++++++ .../craftsman_tools/craftsman_tools_7.py | 29 ++++++++++++++++++ .../craftsman_tools/craftsman_tools_8.py | 29 ++++++++++++++++++ .../craftsman_tools/craftsman_tools_9.py | 29 ++++++++++++++++++ .../maximizing_space/maximizing_space_1.py | 30 +++++++++++++++++++ .../maximizing_space/maximizing_space_10.py | 30 +++++++++++++++++++ .../maximizing_space/maximizing_space_2.py | 30 +++++++++++++++++++ .../maximizing_space/maximizing_space_3.py | 30 +++++++++++++++++++ .../maximizing_space/maximizing_space_4.py | 30 +++++++++++++++++++ .../maximizing_space/maximizing_space_5.py | 30 +++++++++++++++++++ .../maximizing_space/maximizing_space_6.py | 30 +++++++++++++++++++ .../maximizing_space/maximizing_space_7.py | 30 +++++++++++++++++++ .../maximizing_space/maximizing_space_8.py | 30 +++++++++++++++++++ .../maximizing_space/maximizing_space_9.py | 30 +++++++++++++++++++ .../shelving_techniques_1.py | 29 ++++++++++++++++++ .../shelving_techniques_10.py | 29 ++++++++++++++++++ .../shelving_techniques_2.py | 29 ++++++++++++++++++ .../shelving_techniques_3.py | 29 ++++++++++++++++++ .../shelving_techniques_4.py | 29 ++++++++++++++++++ .../shelving_techniques_5.py | 29 ++++++++++++++++++ .../shelving_techniques_6.py | 29 ++++++++++++++++++ .../shelving_techniques_7.py | 29 ++++++++++++++++++ .../shelving_techniques_8.py | 29 ++++++++++++++++++ .../shelving_techniques_9.py | 29 ++++++++++++++++++ .../storage_techniques_1.py | 29 ++++++++++++++++++ .../storage_techniques_10.py | 29 ++++++++++++++++++ .../storage_techniques_2.py | 29 ++++++++++++++++++ .../storage_techniques_3.py | 29 ++++++++++++++++++ .../storage_techniques_4.py | 29 ++++++++++++++++++ .../storage_techniques_5.py | 29 ++++++++++++++++++ .../storage_techniques_6.py | 29 ++++++++++++++++++ .../storage_techniques_7.py | 29 ++++++++++++++++++ .../storage_techniques_8.py | 29 ++++++++++++++++++ .../storage_techniques_9.py | 29 ++++++++++++++++++ 60 files changed, 1700 insertions(+) create mode 100644 scripts/loot/lootItems/collections/diy_glass_shelves/diy_glass_shelf_1.py create mode 100644 scripts/loot/lootItems/collections/diy_glass_shelves/diy_glass_shelf_2.py create mode 100644 scripts/loot/lootItems/collections/diy_glass_shelves/diy_glass_shelf_3.py create mode 100644 scripts/loot/lootItems/collections/diy_glass_shelves/diy_glass_shelf_4.py create mode 100644 scripts/loot/lootItems/collections/diy_glass_shelves/diy_glass_shelf_5.py create mode 100644 scripts/loot/lootItems/collections/holographic_imagery/a_holographic_light_source.py create mode 100644 scripts/loot/lootItems/collections/holographic_imagery/a_holographic_mirror.py create mode 100644 scripts/loot/lootItems/collections/holographic_imagery/a_photo_detector.py create mode 100644 scripts/loot/lootItems/collections/holographic_imagery/an_electric_circuit.py create mode 100644 scripts/loot/lootItems/collections/holographic_imagery/an_optical_processor.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/cabinetry_techniques/cabinetry_techniques_1.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/cabinetry_techniques/cabinetry_techniques_10.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/cabinetry_techniques/cabinetry_techniques_2.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/cabinetry_techniques/cabinetry_techniques_3.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/cabinetry_techniques/cabinetry_techniques_4.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/cabinetry_techniques/cabinetry_techniques_5.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/cabinetry_techniques/cabinetry_techniques_6.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/cabinetry_techniques/cabinetry_techniques_7.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/cabinetry_techniques/cabinetry_techniques_8.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/cabinetry_techniques/cabinetry_techniques_9.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/craftsman_tools/craftsman_tools_1.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/craftsman_tools/craftsman_tools_10.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/craftsman_tools/craftsman_tools_2.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/craftsman_tools/craftsman_tools_3.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/craftsman_tools/craftsman_tools_4.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/craftsman_tools/craftsman_tools_5.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/craftsman_tools/craftsman_tools_6.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/craftsman_tools/craftsman_tools_7.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/craftsman_tools/craftsman_tools_8.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/craftsman_tools/craftsman_tools_9.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/maximizing_space/maximizing_space_1.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/maximizing_space/maximizing_space_10.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/maximizing_space/maximizing_space_2.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/maximizing_space/maximizing_space_3.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/maximizing_space/maximizing_space_4.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/maximizing_space/maximizing_space_5.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/maximizing_space/maximizing_space_6.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/maximizing_space/maximizing_space_7.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/maximizing_space/maximizing_space_8.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/maximizing_space/maximizing_space_9.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/shelving_techniques/shelving_techniques_1.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/shelving_techniques/shelving_techniques_10.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/shelving_techniques/shelving_techniques_2.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/shelving_techniques/shelving_techniques_3.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/shelving_techniques/shelving_techniques_4.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/shelving_techniques/shelving_techniques_5.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/shelving_techniques/shelving_techniques_6.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/shelving_techniques/shelving_techniques_7.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/shelving_techniques/shelving_techniques_8.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/shelving_techniques/shelving_techniques_9.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/storage_techniques/storage_techniques_1.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/storage_techniques/storage_techniques_10.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/storage_techniques/storage_techniques_2.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/storage_techniques/storage_techniques_3.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/storage_techniques/storage_techniques_4.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/storage_techniques/storage_techniques_5.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/storage_techniques/storage_techniques_6.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/storage_techniques/storage_techniques_7.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/storage_techniques/storage_techniques_8.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/storage_techniques/storage_techniques_9.py diff --git a/scripts/loot/lootItems/collections/diy_glass_shelves/diy_glass_shelf_1.py b/scripts/loot/lootItems/collections/diy_glass_shelves/diy_glass_shelf_1.py new file mode 100644 index 00000000..2e1ac9ca --- /dev/null +++ b/scripts/loot/lootItems/collections/diy_glass_shelves/diy_glass_shelf_1.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_col_glass_shelf_book_01.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [1] + +def STFparams(): + + return ['static_item_n','col_glass_shelf_02_01','static_item_d','col_glass_shelf_02_01'] + +def AddToCollection(): + + return 'col_glass_shelf_01' + +def CollectionItemName(): + + return 'col_glass_shelf_chapter1' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/diy_glass_shelves/diy_glass_shelf_2.py b/scripts/loot/lootItems/collections/diy_glass_shelves/diy_glass_shelf_2.py new file mode 100644 index 00000000..6ccee2c1 --- /dev/null +++ b/scripts/loot/lootItems/collections/diy_glass_shelves/diy_glass_shelf_2.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_col_glass_shelf_book_01.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [2] + +def STFparams(): + + return ['static_item_n','col_glass_shelf_02_02','static_item_d','col_glass_shelf_02_02'] + +def AddToCollection(): + + return 'col_glass_shelf_01' + +def CollectionItemName(): + + return 'col_glass_shelf_chapter2' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/diy_glass_shelves/diy_glass_shelf_3.py b/scripts/loot/lootItems/collections/diy_glass_shelves/diy_glass_shelf_3.py new file mode 100644 index 00000000..153e0de5 --- /dev/null +++ b/scripts/loot/lootItems/collections/diy_glass_shelves/diy_glass_shelf_3.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_col_glass_shelf_book_01.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [3] + +def STFparams(): + + return ['static_item_n','col_glass_shelf_02_03','static_item_d','col_glass_shelf_02_03'] + +def AddToCollection(): + + return 'col_glass_shelf_01' + +def CollectionItemName(): + + return 'col_glass_shelf_chapter3' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/diy_glass_shelves/diy_glass_shelf_4.py b/scripts/loot/lootItems/collections/diy_glass_shelves/diy_glass_shelf_4.py new file mode 100644 index 00000000..4dbc9c69 --- /dev/null +++ b/scripts/loot/lootItems/collections/diy_glass_shelves/diy_glass_shelf_4.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_col_glass_shelf_book_01.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [4] + +def STFparams(): + + return ['static_item_n','col_glass_shelf_02_04','static_item_d','col_glass_shelf_02_04'] + +def AddToCollection(): + + return 'col_glass_shelf_01' + +def CollectionItemName(): + + return 'col_glass_shelf_chapter4' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/diy_glass_shelves/diy_glass_shelf_5.py b/scripts/loot/lootItems/collections/diy_glass_shelves/diy_glass_shelf_5.py new file mode 100644 index 00000000..9163088e --- /dev/null +++ b/scripts/loot/lootItems/collections/diy_glass_shelves/diy_glass_shelf_5.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_col_glass_shelf_book_01.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [5] + +def STFparams(): + + return ['static_item_n','col_glass_shelf_02_05','static_item_d','col_glass_shelf_02_05'] + +def AddToCollection(): + + return 'col_glass_shelf_01' + +def CollectionItemName(): + + return 'col_glass_shelf_chapter5' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/holographic_imagery/a_holographic_light_source.py b/scripts/loot/lootItems/collections/holographic_imagery/a_holographic_light_source.py new file mode 100644 index 00000000..33180040 --- /dev/null +++ b/scripts/loot/lootItems/collections/holographic_imagery/a_holographic_light_source.py @@ -0,0 +1,19 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_col_holo_emitter_light_source.iff'] + +def STFparams(): + + return ['static_item_n','col_holo_emitter_light_source_02_01','static_item_d','col_holo_emitter_light_source_02_01'] + +def AddToCollection(): + + return 'col_holo_emitter_01' + +def CollectionItemName(): + + return 'holo_emitter_part_02' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/holographic_imagery/a_holographic_mirror.py b/scripts/loot/lootItems/collections/holographic_imagery/a_holographic_mirror.py new file mode 100644 index 00000000..18a0b27d --- /dev/null +++ b/scripts/loot/lootItems/collections/holographic_imagery/a_holographic_mirror.py @@ -0,0 +1,19 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_col_holo_emitter_receptor.iff'] + +def STFparams(): + + return ['static_item_n','col_holo_emitter_receptor_02_01','static_item_d','col_holo_emitter_receptor_02_01'] + +def AddToCollection(): + + return 'col_holo_emitter_01' + +def CollectionItemName(): + + return 'holo_emitter_part_03' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/holographic_imagery/a_photo_detector.py b/scripts/loot/lootItems/collections/holographic_imagery/a_photo_detector.py new file mode 100644 index 00000000..aef7d1ee --- /dev/null +++ b/scripts/loot/lootItems/collections/holographic_imagery/a_photo_detector.py @@ -0,0 +1,19 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_col_holo_emitter_photo_detector.iff'] + +def STFparams(): + + return ['static_item_n','col_holo_emitter_photo_detector_02_01','static_item_d','col_holo_emitter_photo_detector_02_01'] + +def AddToCollection(): + + return 'col_holo_emitter_01' + +def CollectionItemName(): + + return 'holo_emitter_part_05' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/holographic_imagery/an_electric_circuit.py b/scripts/loot/lootItems/collections/holographic_imagery/an_electric_circuit.py new file mode 100644 index 00000000..6d85300c --- /dev/null +++ b/scripts/loot/lootItems/collections/holographic_imagery/an_electric_circuit.py @@ -0,0 +1,19 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_col_holo_emitter_curcuit.iff'] + +def STFparams(): + + return ['static_item_n','col_holo_emitter_circuit_02_01','static_item_d','col_holo_emitter_circuit_02_01'] + +def AddToCollection(): + + return 'col_holo_emitter_01' + +def CollectionItemName(): + + return 'holo_emitter_part_04' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/holographic_imagery/an_optical_processor.py b/scripts/loot/lootItems/collections/holographic_imagery/an_optical_processor.py new file mode 100644 index 00000000..0cf9bf1d --- /dev/null +++ b/scripts/loot/lootItems/collections/holographic_imagery/an_optical_processor.py @@ -0,0 +1,19 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_col_holo_emitter_processor.iff'] + +def STFparams(): + + return ['static_item_n','col_holo_emitter_processor_02_01','static_item_d','col_holo_emitter_processor_02_01'] + +def AddToCollection(): + + return 'col_holo_emitter_01' + +def CollectionItemName(): + + return 'holo_emitter_part_01' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/cabinetry_techniques/cabinetry_techniques_1.py b/scripts/loot/lootItems/collections/housing_improvements/cabinetry_techniques/cabinetry_techniques_1.py new file mode 100644 index 00000000..da572c3d --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/cabinetry_techniques/cabinetry_techniques_1.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_04.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [1] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_04_01','static_item_d','item_collection_housing_improvement_04_01'] + +def AddToCollection(): + + return 'housing_improvement_04' + +def CollectionItemName(): + + return 'housing_improvement_04_01' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/cabinetry_techniques/cabinetry_techniques_10.py b/scripts/loot/lootItems/collections/housing_improvements/cabinetry_techniques/cabinetry_techniques_10.py new file mode 100644 index 00000000..63018c13 --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/cabinetry_techniques/cabinetry_techniques_10.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_04.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [10] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_04_10','static_item_d','item_collection_housing_improvement_04_10'] + +def AddToCollection(): + + return 'housing_improvement_04' + +def CollectionItemName(): + + return 'housing_improvement_04_10' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/cabinetry_techniques/cabinetry_techniques_2.py b/scripts/loot/lootItems/collections/housing_improvements/cabinetry_techniques/cabinetry_techniques_2.py new file mode 100644 index 00000000..9fbd7731 --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/cabinetry_techniques/cabinetry_techniques_2.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_04.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [2] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_04_02','static_item_d','item_collection_housing_improvement_04_02'] + +def AddToCollection(): + + return 'housing_improvement_04' + +def CollectionItemName(): + + return 'housing_improvement_04_02' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/cabinetry_techniques/cabinetry_techniques_3.py b/scripts/loot/lootItems/collections/housing_improvements/cabinetry_techniques/cabinetry_techniques_3.py new file mode 100644 index 00000000..30910a1b --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/cabinetry_techniques/cabinetry_techniques_3.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_04.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [3] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_04_03','static_item_d','item_collection_housing_improvement_04_03'] + +def AddToCollection(): + + return 'housing_improvement_04' + +def CollectionItemName(): + + return 'housing_improvement_04_03' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/cabinetry_techniques/cabinetry_techniques_4.py b/scripts/loot/lootItems/collections/housing_improvements/cabinetry_techniques/cabinetry_techniques_4.py new file mode 100644 index 00000000..d0872226 --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/cabinetry_techniques/cabinetry_techniques_4.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_04.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [4] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_04_04','static_item_d','item_collection_housing_improvement_04_04'] + +def AddToCollection(): + + return 'housing_improvement_04' + +def CollectionItemName(): + + return 'housing_improvement_04_04' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/cabinetry_techniques/cabinetry_techniques_5.py b/scripts/loot/lootItems/collections/housing_improvements/cabinetry_techniques/cabinetry_techniques_5.py new file mode 100644 index 00000000..79ce3dbf --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/cabinetry_techniques/cabinetry_techniques_5.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_04.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [5] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_04_05','static_item_d','item_collection_housing_improvement_04_05'] + +def AddToCollection(): + + return 'housing_improvement_04' + +def CollectionItemName(): + + return 'housing_improvement_04_05' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/cabinetry_techniques/cabinetry_techniques_6.py b/scripts/loot/lootItems/collections/housing_improvements/cabinetry_techniques/cabinetry_techniques_6.py new file mode 100644 index 00000000..1dc202f5 --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/cabinetry_techniques/cabinetry_techniques_6.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_04.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [6] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_04_06','static_item_d','item_collection_housing_improvement_04_06'] + +def AddToCollection(): + + return 'housing_improvement_04' + +def CollectionItemName(): + + return 'housing_improvement_04_06' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/cabinetry_techniques/cabinetry_techniques_7.py b/scripts/loot/lootItems/collections/housing_improvements/cabinetry_techniques/cabinetry_techniques_7.py new file mode 100644 index 00000000..6fe49fa9 --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/cabinetry_techniques/cabinetry_techniques_7.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_04.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [7] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_04_07','static_item_d','item_collection_housing_improvement_04_07'] + +def AddToCollection(): + + return 'housing_improvement_04' + +def CollectionItemName(): + + return 'housing_improvement_04_07' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/cabinetry_techniques/cabinetry_techniques_8.py b/scripts/loot/lootItems/collections/housing_improvements/cabinetry_techniques/cabinetry_techniques_8.py new file mode 100644 index 00000000..8ed90b58 --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/cabinetry_techniques/cabinetry_techniques_8.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_04.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [8] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_04_08','static_item_d','item_collection_housing_improvement_04_08'] + +def AddToCollection(): + + return 'housing_improvement_04' + +def CollectionItemName(): + + return 'housing_improvement_04_08' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/cabinetry_techniques/cabinetry_techniques_9.py b/scripts/loot/lootItems/collections/housing_improvements/cabinetry_techniques/cabinetry_techniques_9.py new file mode 100644 index 00000000..3df1a3d5 --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/cabinetry_techniques/cabinetry_techniques_9.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_04.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [9] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_04_09','static_item_d','item_collection_housing_improvement_04_09'] + +def AddToCollection(): + + return 'housing_improvement_04' + +def CollectionItemName(): + + return 'housing_improvement_04_09' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/craftsman_tools/craftsman_tools_1.py b/scripts/loot/lootItems/collections/housing_improvements/craftsman_tools/craftsman_tools_1.py new file mode 100644 index 00000000..612bdef8 --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/craftsman_tools/craftsman_tools_1.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_03.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [1] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_03_01','static_item_d','item_collection_housing_improvement_03_01'] + +def AddToCollection(): + + return 'housing_improvement_03' + +def CollectionItemName(): + + return 'housing_improvement_03_01' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/craftsman_tools/craftsman_tools_10.py b/scripts/loot/lootItems/collections/housing_improvements/craftsman_tools/craftsman_tools_10.py new file mode 100644 index 00000000..1021d7e4 --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/craftsman_tools/craftsman_tools_10.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_03.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [10] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_03_10','static_item_d','item_collection_housing_improvement_03_10'] + +def AddToCollection(): + + return 'housing_improvement_03' + +def CollectionItemName(): + + return 'housing_improvement_03_10' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/craftsman_tools/craftsman_tools_2.py b/scripts/loot/lootItems/collections/housing_improvements/craftsman_tools/craftsman_tools_2.py new file mode 100644 index 00000000..d66ebccd --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/craftsman_tools/craftsman_tools_2.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_03.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [2] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_03_02','static_item_d','item_collection_housing_improvement_03_02'] + +def AddToCollection(): + + return 'housing_improvement_03' + +def CollectionItemName(): + + return 'housing_improvement_03_02' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/craftsman_tools/craftsman_tools_3.py b/scripts/loot/lootItems/collections/housing_improvements/craftsman_tools/craftsman_tools_3.py new file mode 100644 index 00000000..10ce1ebb --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/craftsman_tools/craftsman_tools_3.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_03.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [3] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_03_03','static_item_d','item_collection_housing_improvement_03_03'] + +def AddToCollection(): + + return 'housing_improvement_03' + +def CollectionItemName(): + + return 'housing_improvement_03_03' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/craftsman_tools/craftsman_tools_4.py b/scripts/loot/lootItems/collections/housing_improvements/craftsman_tools/craftsman_tools_4.py new file mode 100644 index 00000000..400b5359 --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/craftsman_tools/craftsman_tools_4.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_03.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [4] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_03_04','static_item_d','item_collection_housing_improvement_03_04'] + +def AddToCollection(): + + return 'housing_improvement_03' + +def CollectionItemName(): + + return 'housing_improvement_03_04' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/craftsman_tools/craftsman_tools_5.py b/scripts/loot/lootItems/collections/housing_improvements/craftsman_tools/craftsman_tools_5.py new file mode 100644 index 00000000..fc3b740b --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/craftsman_tools/craftsman_tools_5.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_03.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [5] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_03_05','static_item_d','item_collection_housing_improvement_03_05'] + +def AddToCollection(): + + return 'housing_improvement_03' + +def CollectionItemName(): + + return 'housing_improvement_03_05' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/craftsman_tools/craftsman_tools_6.py b/scripts/loot/lootItems/collections/housing_improvements/craftsman_tools/craftsman_tools_6.py new file mode 100644 index 00000000..c5522fd9 --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/craftsman_tools/craftsman_tools_6.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_03.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [6] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_03_06','static_item_d','item_collection_housing_improvement_03_06'] + +def AddToCollection(): + + return 'housing_improvement_03' + +def CollectionItemName(): + + return 'housing_improvement_03_06' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/craftsman_tools/craftsman_tools_7.py b/scripts/loot/lootItems/collections/housing_improvements/craftsman_tools/craftsman_tools_7.py new file mode 100644 index 00000000..b6326726 --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/craftsman_tools/craftsman_tools_7.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_03.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [7] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_03_07','static_item_d','item_collection_housing_improvement_03_07'] + +def AddToCollection(): + + return 'housing_improvement_03' + +def CollectionItemName(): + + return 'housing_improvement_03_07' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/craftsman_tools/craftsman_tools_8.py b/scripts/loot/lootItems/collections/housing_improvements/craftsman_tools/craftsman_tools_8.py new file mode 100644 index 00000000..5a611976 --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/craftsman_tools/craftsman_tools_8.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_03.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [8] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_03_08','static_item_d','item_collection_housing_improvement_03_08'] + +def AddToCollection(): + + return 'housing_improvement_03' + +def CollectionItemName(): + + return 'housing_improvement_03_08' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/craftsman_tools/craftsman_tools_9.py b/scripts/loot/lootItems/collections/housing_improvements/craftsman_tools/craftsman_tools_9.py new file mode 100644 index 00000000..04a376ba --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/craftsman_tools/craftsman_tools_9.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_03.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [9] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_03_09','static_item_d','item_collection_housing_improvement_03_09'] + +def AddToCollection(): + + return 'housing_improvement_03' + +def CollectionItemName(): + + return 'housing_improvement_03_09' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/maximizing_space/maximizing_space_1.py b/scripts/loot/lootItems/collections/housing_improvements/maximizing_space/maximizing_space_1.py new file mode 100644 index 00000000..9d7abad9 --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/maximizing_space/maximizing_space_1.py @@ -0,0 +1,30 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_01.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [1] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_01_01','static_item_d','item_collection_housing_improvement_01_01'] + +def AddToCollection(): + + return 'housing_improvement_01' + +def CollectionItemName(): + + return 'housing_improvement_01_01' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/maximizing_space/maximizing_space_10.py b/scripts/loot/lootItems/collections/housing_improvements/maximizing_space/maximizing_space_10.py new file mode 100644 index 00000000..a3bc51a2 --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/maximizing_space/maximizing_space_10.py @@ -0,0 +1,30 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_01.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [10] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_01_10','static_item_d','item_collection_housing_improvement_01_10'] + +def AddToCollection(): + + return 'housing_improvement_01' + +def CollectionItemName(): + + return 'housing_improvement_01_10' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/maximizing_space/maximizing_space_2.py b/scripts/loot/lootItems/collections/housing_improvements/maximizing_space/maximizing_space_2.py new file mode 100644 index 00000000..c7a3a840 --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/maximizing_space/maximizing_space_2.py @@ -0,0 +1,30 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_01.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [2] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_01_02','static_item_d','item_collection_housing_improvement_01_02'] + +def AddToCollection(): + + return 'housing_improvement_01' + +def CollectionItemName(): + + return 'housing_improvement_01_02' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/maximizing_space/maximizing_space_3.py b/scripts/loot/lootItems/collections/housing_improvements/maximizing_space/maximizing_space_3.py new file mode 100644 index 00000000..0e72292d --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/maximizing_space/maximizing_space_3.py @@ -0,0 +1,30 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_01.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [3] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_01_03','static_item_d','item_collection_housing_improvement_01_03'] + +def AddToCollection(): + + return 'housing_improvement_01' + +def CollectionItemName(): + + return 'housing_improvement_01_03' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/maximizing_space/maximizing_space_4.py b/scripts/loot/lootItems/collections/housing_improvements/maximizing_space/maximizing_space_4.py new file mode 100644 index 00000000..f7d99e0c --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/maximizing_space/maximizing_space_4.py @@ -0,0 +1,30 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_01.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [4] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_01_04','static_item_d','item_collection_housing_improvement_01_04'] + +def AddToCollection(): + + return 'housing_improvement_01' + +def CollectionItemName(): + + return 'housing_improvement_01_04' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/maximizing_space/maximizing_space_5.py b/scripts/loot/lootItems/collections/housing_improvements/maximizing_space/maximizing_space_5.py new file mode 100644 index 00000000..6b10758d --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/maximizing_space/maximizing_space_5.py @@ -0,0 +1,30 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_01.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [5] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_01_05','static_item_d','item_collection_housing_improvement_01_05'] + +def AddToCollection(): + + return 'housing_improvement_01' + +def CollectionItemName(): + + return 'housing_improvement_01_05' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/maximizing_space/maximizing_space_6.py b/scripts/loot/lootItems/collections/housing_improvements/maximizing_space/maximizing_space_6.py new file mode 100644 index 00000000..980592fb --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/maximizing_space/maximizing_space_6.py @@ -0,0 +1,30 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_01.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [6] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_01_06','static_item_d','item_collection_housing_improvement_01_06'] + +def AddToCollection(): + + return 'housing_improvement_01' + +def CollectionItemName(): + + return 'housing_improvement_01_06' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/maximizing_space/maximizing_space_7.py b/scripts/loot/lootItems/collections/housing_improvements/maximizing_space/maximizing_space_7.py new file mode 100644 index 00000000..e7bd30bd --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/maximizing_space/maximizing_space_7.py @@ -0,0 +1,30 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_01.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [7] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_01_07','static_item_d','item_collection_housing_improvement_01_07'] + +def AddToCollection(): + + return 'housing_improvement_01' + +def CollectionItemName(): + + return 'housing_improvement_01_07' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/maximizing_space/maximizing_space_8.py b/scripts/loot/lootItems/collections/housing_improvements/maximizing_space/maximizing_space_8.py new file mode 100644 index 00000000..916b4502 --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/maximizing_space/maximizing_space_8.py @@ -0,0 +1,30 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_01.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [8] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_01_08','static_item_d','item_collection_housing_improvement_01_08'] + +def AddToCollection(): + + return 'housing_improvement_01' + +def CollectionItemName(): + + return 'housing_improvement_01_08' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/maximizing_space/maximizing_space_9.py b/scripts/loot/lootItems/collections/housing_improvements/maximizing_space/maximizing_space_9.py new file mode 100644 index 00000000..1fa5eae3 --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/maximizing_space/maximizing_space_9.py @@ -0,0 +1,30 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_01.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [9] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_01_09','static_item_d','item_collection_housing_improvement_01_09'] + +def AddToCollection(): + + return 'housing_improvement_01' + +def CollectionItemName(): + + return 'housing_improvement_01_09' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/shelving_techniques/shelving_techniques_1.py b/scripts/loot/lootItems/collections/housing_improvements/shelving_techniques/shelving_techniques_1.py new file mode 100644 index 00000000..35608064 --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/shelving_techniques/shelving_techniques_1.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_02.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [1] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_02_01','static_item_d','item_collection_housing_improvement_02_01'] + +def AddToCollection(): + + return 'housing_improvement_02' + +def CollectionItemName(): + + return 'housing_improvement_02_01' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/shelving_techniques/shelving_techniques_10.py b/scripts/loot/lootItems/collections/housing_improvements/shelving_techniques/shelving_techniques_10.py new file mode 100644 index 00000000..4ae31629 --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/shelving_techniques/shelving_techniques_10.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_02.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [1] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_02_10','static_item_d','item_collection_housing_improvement_02_10'] + +def AddToCollection(): + + return 'housing_improvement_02' + +def CollectionItemName(): + + return 'housing_improvement_02_10' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/shelving_techniques/shelving_techniques_2.py b/scripts/loot/lootItems/collections/housing_improvements/shelving_techniques/shelving_techniques_2.py new file mode 100644 index 00000000..bd6666a2 --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/shelving_techniques/shelving_techniques_2.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_02.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [2] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_02_02','static_item_d','item_collection_housing_improvement_02_02'] + +def AddToCollection(): + + return 'housing_improvement_02' + +def CollectionItemName(): + + return 'housing_improvement_02_02' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/shelving_techniques/shelving_techniques_3.py b/scripts/loot/lootItems/collections/housing_improvements/shelving_techniques/shelving_techniques_3.py new file mode 100644 index 00000000..bf414325 --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/shelving_techniques/shelving_techniques_3.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_02.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [3] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_02_03','static_item_d','item_collection_housing_improvement_02_03'] + +def AddToCollection(): + + return 'housing_improvement_02' + +def CollectionItemName(): + + return 'housing_improvement_02_03' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/shelving_techniques/shelving_techniques_4.py b/scripts/loot/lootItems/collections/housing_improvements/shelving_techniques/shelving_techniques_4.py new file mode 100644 index 00000000..45f2a875 --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/shelving_techniques/shelving_techniques_4.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_02.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [4] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_02_04','static_item_d','item_collection_housing_improvement_02_04'] + +def AddToCollection(): + + return 'housing_improvement_02' + +def CollectionItemName(): + + return 'housing_improvement_02_04' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/shelving_techniques/shelving_techniques_5.py b/scripts/loot/lootItems/collections/housing_improvements/shelving_techniques/shelving_techniques_5.py new file mode 100644 index 00000000..ec13a9f0 --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/shelving_techniques/shelving_techniques_5.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_02.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [5] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_02_05','static_item_d','item_collection_housing_improvement_02_05'] + +def AddToCollection(): + + return 'housing_improvement_02' + +def CollectionItemName(): + + return 'housing_improvement_02_05' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/shelving_techniques/shelving_techniques_6.py b/scripts/loot/lootItems/collections/housing_improvements/shelving_techniques/shelving_techniques_6.py new file mode 100644 index 00000000..bb07df98 --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/shelving_techniques/shelving_techniques_6.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_02.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [6] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_02_06','static_item_d','item_collection_housing_improvement_02_06'] + +def AddToCollection(): + + return 'housing_improvement_02' + +def CollectionItemName(): + + return 'housing_improvement_02_06' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/shelving_techniques/shelving_techniques_7.py b/scripts/loot/lootItems/collections/housing_improvements/shelving_techniques/shelving_techniques_7.py new file mode 100644 index 00000000..235a2151 --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/shelving_techniques/shelving_techniques_7.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_02.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [7] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_02_07','static_item_d','item_collection_housing_improvement_02_07'] + +def AddToCollection(): + + return 'housing_improvement_02' + +def CollectionItemName(): + + return 'housing_improvement_02_07' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/shelving_techniques/shelving_techniques_8.py b/scripts/loot/lootItems/collections/housing_improvements/shelving_techniques/shelving_techniques_8.py new file mode 100644 index 00000000..507ed1d7 --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/shelving_techniques/shelving_techniques_8.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_02.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [8] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_02_08','static_item_d','item_collection_housing_improvement_02_08'] + +def AddToCollection(): + + return 'housing_improvement_02' + +def CollectionItemName(): + + return 'housing_improvement_02_08' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/shelving_techniques/shelving_techniques_9.py b/scripts/loot/lootItems/collections/housing_improvements/shelving_techniques/shelving_techniques_9.py new file mode 100644 index 00000000..2409267d --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/shelving_techniques/shelving_techniques_9.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_02.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [9] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_02_09','static_item_d','item_collection_housing_improvement_02_09'] + +def AddToCollection(): + + return 'housing_improvement_02' + +def CollectionItemName(): + + return 'housing_improvement_02_01' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/storage_techniques/storage_techniques_1.py b/scripts/loot/lootItems/collections/housing_improvements/storage_techniques/storage_techniques_1.py new file mode 100644 index 00000000..2ec51b7c --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/storage_techniques/storage_techniques_1.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_05.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [1] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_05_01','static_item_d','item_collection_housing_improvement_05_01'] + +def AddToCollection(): + + return 'housing_improvement_05' + +def CollectionItemName(): + + return 'housing_improvement_05_01' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/storage_techniques/storage_techniques_10.py b/scripts/loot/lootItems/collections/housing_improvements/storage_techniques/storage_techniques_10.py new file mode 100644 index 00000000..9c33814f --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/storage_techniques/storage_techniques_10.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_05.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [10] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_05_10','static_item_d','item_collection_housing_improvement_05_10'] + +def AddToCollection(): + + return 'housing_improvement_05' + +def CollectionItemName(): + + return 'housing_improvement_05_10' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/storage_techniques/storage_techniques_2.py b/scripts/loot/lootItems/collections/housing_improvements/storage_techniques/storage_techniques_2.py new file mode 100644 index 00000000..209f09f5 --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/storage_techniques/storage_techniques_2.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_05.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [2] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_05_02','static_item_d','item_collection_housing_improvement_05_02'] + +def AddToCollection(): + + return 'housing_improvement_05' + +def CollectionItemName(): + + return 'housing_improvement_05_02' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/storage_techniques/storage_techniques_3.py b/scripts/loot/lootItems/collections/housing_improvements/storage_techniques/storage_techniques_3.py new file mode 100644 index 00000000..99ad6938 --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/storage_techniques/storage_techniques_3.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_05.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [3] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_05_03','static_item_d','item_collection_housing_improvement_05_03'] + +def AddToCollection(): + + return 'housing_improvement_05' + +def CollectionItemName(): + + return 'housing_improvement_05_03' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/storage_techniques/storage_techniques_4.py b/scripts/loot/lootItems/collections/housing_improvements/storage_techniques/storage_techniques_4.py new file mode 100644 index 00000000..04449b1d --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/storage_techniques/storage_techniques_4.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_05.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [4] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_05_04','static_item_d','item_collection_housing_improvement_05_04'] + +def AddToCollection(): + + return 'housing_improvement_05' + +def CollectionItemName(): + + return 'housing_improvement_05_04' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/storage_techniques/storage_techniques_5.py b/scripts/loot/lootItems/collections/housing_improvements/storage_techniques/storage_techniques_5.py new file mode 100644 index 00000000..28d98bff --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/storage_techniques/storage_techniques_5.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_05.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [5] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_05_05','static_item_d','item_collection_housing_improvement_05_05'] + +def AddToCollection(): + + return 'housing_improvement_05' + +def CollectionItemName(): + + return 'housing_improvement_05_05' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/storage_techniques/storage_techniques_6.py b/scripts/loot/lootItems/collections/housing_improvements/storage_techniques/storage_techniques_6.py new file mode 100644 index 00000000..16ae5804 --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/storage_techniques/storage_techniques_6.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_05.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [6] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_05_06','static_item_d','item_collection_housing_improvement_05_06'] + +def AddToCollection(): + + return 'housing_improvement_05' + +def CollectionItemName(): + + return 'housing_improvement_05_06' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/storage_techniques/storage_techniques_7.py b/scripts/loot/lootItems/collections/housing_improvements/storage_techniques/storage_techniques_7.py new file mode 100644 index 00000000..8d16bb08 --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/storage_techniques/storage_techniques_7.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_05.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [7] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_05_07','static_item_d','item_collection_housing_improvement_05_07'] + +def AddToCollection(): + + return 'housing_improvement_05' + +def CollectionItemName(): + + return 'housing_improvement_05_07' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/storage_techniques/storage_techniques_8.py b/scripts/loot/lootItems/collections/housing_improvements/storage_techniques/storage_techniques_8.py new file mode 100644 index 00000000..6e5125c7 --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/storage_techniques/storage_techniques_8.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_05.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [8] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_05_08','static_item_d','item_collection_housing_improvement_05_08'] + +def AddToCollection(): + + return 'housing_improvement_05' + +def CollectionItemName(): + + return 'housing_improvement_05_08' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/storage_techniques/storage_techniques_9.py b/scripts/loot/lootItems/collections/housing_improvements/storage_techniques/storage_techniques_9.py new file mode 100644 index 00000000..cbbb528c --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/storage_techniques/storage_techniques_9.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_05.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [9] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_05_09','static_item_d','item_collection_housing_improvement_05_09'] + +def AddToCollection(): + + return 'housing_improvement_05' + +def CollectionItemName(): + + return 'housing_improvement_05_09' + +def stackable(): + + return 1 \ No newline at end of file From 0b17a0b26e735da3ebcc682441d911fb0addd9a6 Mon Sep 17 00:00:00 2001 From: Seefo Date: Sun, 22 Jun 2014 03:25:53 -0400 Subject: [PATCH 29/92] Fixed container limits and added wearable coloring for admins --- scripts/radial/item/recolorable.py | 15 ++++++++ .../objects/tangible/TangibleObject.java | 3 +- src/services/sui/SUIService.java | 37 +++++++++++++++++++ 3 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 scripts/radial/item/recolorable.py diff --git a/scripts/radial/item/recolorable.py b/scripts/radial/item/recolorable.py new file mode 100644 index 00000000..bd13e64b --- /dev/null +++ b/scripts/radial/item/recolorable.py @@ -0,0 +1,15 @@ +from resources.common import RadialOptions +import sys + +def createRadial(core, owner, target, radials): + radials.add(RadialOptions(0, 98, 0, 'Modify primary color')) + radials.add(RadialOptions(0, 99, 0, 'Modify secondary color')) + return + +def handleSelection(core, owner, target, option): + if option == 98 and target: + core.suiService.sendColorPicker(owner, target, '/private/index_color_1') + if option == 99 and target: + core.suiService.sendColorPicker(owner, target, '/private/index_color_2') + return + \ No newline at end of file diff --git a/src/resources/objects/tangible/TangibleObject.java b/src/resources/objects/tangible/TangibleObject.java index 70c5957e..407ea38e 100644 --- a/src/resources/objects/tangible/TangibleObject.java +++ b/src/resources/objects/tangible/TangibleObject.java @@ -570,10 +570,11 @@ public class TangibleObject extends SWGObject implements Serializable { } public boolean isFull() { + if (getTemplateData().getAttribute("containerVolumeLimit") == null) return false; - int containerVolumeLimit = (int) getTemplateData().getAttribute("containerVolumeLimit") >> 8; // Shifting because it seems to be returning an extra byte before it should + int containerVolumeLimit = (int) getTemplateData().getAttribute("containerVolumeLimit"); if (containerVolumeLimit == 0 || getTemplate() == "object/tangible/inventory/shared_appearance_inventory.iff") // appearance inventory - issue #755 return false; diff --git a/src/services/sui/SUIService.java b/src/services/sui/SUIService.java index e031040a..ab354051 100644 --- a/src/services/sui/SUIService.java +++ b/src/services/sui/SUIService.java @@ -49,6 +49,7 @@ import resources.common.RadialOptions; import resources.loot.LootRollSession; import resources.objects.creature.CreatureObject; import resources.objects.harvester.HarvesterObject; +import resources.objects.tangible.TangibleObject; import services.sui.SUIWindow.SUICallback; import services.sui.SUIWindow.Trigger; import engine.clients.Client; @@ -144,6 +145,12 @@ public class SUIService implements INetworkDispatch { sendRadial(owner, target, request.getRadialOptions(), request.getRadialCount()); return; } + + if(target.getTemplate().contains("object/tangible/wearables") && ((CreatureObject)owner).hasAbility("admin")) + { + core.scriptService.callScript("scripts/radial/", "item/recolorable", "createRadial", core, owner, target, request.getRadialOptions()); + if(getRadialFilename(target).equals("default")) sendRadial(owner, target, request.getRadialOptions(), request.getRadialCount()); + } core.scriptService.callScript("scripts/radial/", getRadialFilename(target), "createRadial", core, owner, target, request.getRadialOptions()); if(getRadialFilename(target).equals("default")) @@ -185,6 +192,12 @@ public class SUIService implements INetworkDispatch { core.scriptService.callScript("scripts/radial/", "structure/moveable", "handleSelection", core, owner, target, objMenuSelect.getSelection()); return; } + + + if(target.getTemplate().contains("object/tangible/wearables") && ((CreatureObject)owner).hasAbility("admin")) + { + core.scriptService.callScript("scripts/radial/", "item/recolorable", "handleSelection", core, owner, target, objMenuSelect.getSelection()); + } core.scriptService.callScript("scripts/radial/", getRadialFilename(target), "handleSelection", core, owner, target, objMenuSelect.getSelection()); @@ -422,6 +435,30 @@ public class SUIService implements INetworkDispatch { return window; } + public void sendColorPicker(CreatureObject creature, TangibleObject target, String customizationType) + { + final SUIWindow suiWindow = core.suiService.createSUIWindow("Script.ColorPicker", creature, creature, 0); + + suiWindow.setProperty("bg.caption.lblTitle:Text", "@base_player:swg"); + suiWindow.setProperty("ColorPicker:TargetRangeMax", "500"); + suiWindow.setProperty("ColorPicker:TargetNetworkId", Long.toString(target.getObjectID())); + suiWindow.setProperty("ColorPicker:TargetVariable", customizationType); + + Vector returnList = new Vector(); + returnList.add("ColorPicker:SelectedIndex"); + + suiWindow.addHandler(0, "", Trigger.TRIGGER_OK, returnList, new SUICallback() + { + public void process(SWGObject owner, int eventType, Vector returnList) + { + int index = Integer.parseInt(returnList.get(0)); + target.setCustomizationVariable(customizationType, (byte) index); + } + }); + + core.suiService.openSUIWindow(suiWindow); + } + public void closeSUIWindow(SWGObject owner, int id) { if(owner.getClient() == null || owner.getClient().getSession() == null) From 585469571ab14c5aa65a07b10ba1ab911ea1c14a Mon Sep 17 00:00:00 2001 From: Zing Date: Sun, 22 Jun 2014 11:23:39 -0700 Subject: [PATCH 30/92] example of world collection setup --- .../collection/rare_pistol_blackfalcon.py | 5 ++++- scripts/radial/item/collection.py | 13 ++++++++----- scripts/radial/item/world_collection.py | 17 +++++++++++++++++ 3 files changed, 29 insertions(+), 6 deletions(-) create mode 100644 scripts/radial/item/world_collection.py diff --git a/scripts/object/tangible/collection/rare_pistol_blackfalcon.py b/scripts/object/tangible/collection/rare_pistol_blackfalcon.py index ccad8904..421ffda3 100644 --- a/scripts/object/tangible/collection/rare_pistol_blackfalcon.py +++ b/scripts/object/tangible/collection/rare_pistol_blackfalcon.py @@ -1,4 +1,7 @@ import sys def setup(core, object): - return \ No newline at end of file + print ('test') + object.setAttachment('CollectionItemName', 'blackfalcon_01') + object.setAttachment('radial_filename', 'item/world_collection') + return diff --git a/scripts/radial/item/collection.py b/scripts/radial/item/collection.py index 0b45c9e4..9e6dc8b7 100644 --- a/scripts/radial/item/collection.py +++ b/scripts/radial/item/collection.py @@ -6,10 +6,13 @@ def createRadial(core, owner, target, radials): radials.add(RadialOptions(0, 7, 1, '')) radials.add(RadialOptions(0, 21, 3, '@collection:consume_item')) return - -def handleSelection(core, owner, target, option): + +def handleSelection(core, actor, target, option): if option == 21 and target: - core.collectionService.addCollection(owner, target.getStfName().rsplit('_n', 1)[0]) - core.objectService.useObject(owner, target) + if target.getAttachment('CollectionItemName'): + print (target.getAttachment('CollectionItemName')) + if core.collectionService.isComplete(actor, target.getAttachment('CollectionItemName')) == False: + core.collectionService.addCollection(actor, target.getAttachment('CollectionItemName')) + core.objectService.useObject(actor, target) + core.objectService.destroyObject(target) return - \ No newline at end of file diff --git a/scripts/radial/item/world_collection.py b/scripts/radial/item/world_collection.py new file mode 100644 index 00000000..084007c8 --- /dev/null +++ b/scripts/radial/item/world_collection.py @@ -0,0 +1,17 @@ +from resources.common import RadialOptions +import sys + +def createRadial(core, owner, target, radials): + radials.add(RadialOptions(0, 21, 1, '')) + radials.add(RadialOptions(0, 7, 1, '')) + radials.add(RadialOptions(0, 21, 3, '@collection:consume_item')) + return + +def handleSelection(core, actor, target, option): + if option == 21 and target: + if target.getAttachment('CollectionItemName'): + print (target.getAttachment('CollectionItemName')) + core.collectionService.addCollection(actor, target.getAttachment('CollectionItemName')) + core.objectService.useObject(actor, target) + core.objectService.destroyObject(target) + return From b57e9209dabe79ca5f7ce75690a2b4b2fad0740d Mon Sep 17 00:00:00 2001 From: CharonInferar Date: Wed, 25 Jun 2014 02:39:57 +0200 Subject: [PATCH 31/92] Corrected multi-colored junk items handling --- .../lootItems/re_junk/wiring_red_yellow.py | 4 +- src/services/LootService.java | 59 +++++++++++++++++++ src/services/housing/HousingService.java | 3 +- src/services/object/ObjectService.java | 19 +++++- 4 files changed, 80 insertions(+), 5 deletions(-) diff --git a/scripts/loot/lootItems/re_junk/wiring_red_yellow.py b/scripts/loot/lootItems/re_junk/wiring_red_yellow.py index 88fd2f59..aa17d304 100644 --- a/scripts/loot/lootItems/re_junk/wiring_red_yellow.py +++ b/scripts/loot/lootItems/re_junk/wiring_red_yellow.py @@ -13,11 +13,11 @@ def lootDescriptor(): def customizationAttributes(): - return ['/private/index_color_1'] + return ['/private/index_color_1','/private/index_color_2'] def customizationValues(): - return [13] #not correct + return [6,12] def reverse_engineering_name(): diff --git a/src/services/LootService.java b/src/services/LootService.java index 35aec14e..e26e4443 100644 --- a/src/services/LootService.java +++ b/src/services/LootService.java @@ -2805,8 +2805,67 @@ public class LootService implements INetworkDispatch { item24b.setUses(399); core.objectService.addStackableItem(item24b,playerInventory); + TangibleObject item25a = (TangibleObject)core.objectService.createObject("object/tangible/loot/npc_loot/shared_wiring_generic.iff", player.getPlanet()); + item25a.setCustomName("Wiring"); + item25a.setAttachment("reverse_engineering_name", "Red/Yellow"); + item25a.setStackable(true); + item25a.setUses(299); + Vector customizationAttributes = new Vector(); + customizationAttributes.add("/private/index_color_1"); + customizationAttributes.add("/private/index_color_2"); + Vector customizationValues = new Vector(); + customizationValues.add(6); + customizationValues.add(12); + item25a.setAttachment("lootDescriptor", "customattributes"); + setCustomization(item25a,"Wiring", customizationAttributes, customizationValues); + core.objectService.addStackableItem(item25a,playerInventory); + + TangibleObject item25b = (TangibleObject)core.objectService.createObject("object/tangible/loot/npc_loot/shared_launcher_tube_generic.iff", player.getPlanet()); + item25b.setCustomName("Launcher Tube"); + item25b.setStackable(true); + item25b.setUses(399); + core.objectService.addStackableItem(item25b,playerInventory); + + TangibleObject item27b = (TangibleObject)core.objectService.createObject("object/tangible/loot/npc_loot/shared_small_motor_generic.iff", player.getPlanet()); + item27b.setCustomName("Locomotor"); + item27b.setStackable(true); + item27b.setUses(399); + core.objectService.addStackableItem(item27b,playerInventory); + + TangibleObject item26a = (TangibleObject)core.objectService.createObject("object/tangible/loot/npc_loot/shared_copper_battery_generic.iff", player.getPlanet()); + item26a.setCustomName("Droid Battery"); + item26a.setAttachment("reverse_engineering_name", "Black/Green"); + item26a.setStackable(true); + item26a.setUses(299); + customizationAttributes = new Vector(); + customizationAttributes.add("/private/index_color_1"); + customizationAttributes.add("/private/index_color_2"); + customizationValues = new Vector(); + customizationValues.add(0); + customizationValues.add(15); + item26a.setAttachment("lootDescriptor", "customattributes"); + setCustomization(item26a,"Droid Battery", customizationAttributes, customizationValues); + core.objectService.addStackableItem(item26a,playerInventory); + + + TangibleObject item26b = (TangibleObject)core.objectService.createObject("object/tangible/loot/npc_loot/shared_copper_battery_generic.iff", player.getPlanet()); + item26b.setCustomName("Droid Battery"); + item26b.setAttachment("reverse_engineering_name", "Purple/Green"); + item26b.setStackable(true); + item26b.setUses(299); + customizationAttributes = new Vector(); + customizationAttributes.add("/private/index_color_1"); + customizationAttributes.add("/private/index_color_2"); + customizationValues = new Vector(); + customizationValues.add(33); + customizationValues.add(15); + item26b.setAttachment("lootDescriptor", "customattributes"); + setCustomization(item26b,"Droid Battery", customizationAttributes, customizationValues); + core.objectService.addStackableItem(item26b,playerInventory); + + String modifierBitTemplate = "object/tangible/component/reverse_engineering/shared_modifier_bit.iff"; TangibleObject modifierBit = (TangibleObject) core.objectService.createObject(modifierBitTemplate, player.getPlanet()); modifierBit.setCustomName("Droid Experimentation"); diff --git a/src/services/housing/HousingService.java b/src/services/housing/HousingService.java index 63860a89..dfa0e154 100644 --- a/src/services/housing/HousingService.java +++ b/src/services/housing/HousingService.java @@ -113,7 +113,8 @@ public class HousingService implements INetworkDispatch { HouseTemplate houseTemplate = housingTemplates.get(deed.getTemplate()); int structureLotCost = houseTemplate.getLotCost(); String structureTemplate = houseTemplate.getBuildingTemplate(); - PlayerCity city = core.playerCityService.getCityPositionIsIn(new Point3D(positionX, 0, positionZ)); + //PlayerCity city = core.playerCityService.getCityPositionIsIn(new Point3D(positionX, 0, positionZ)); + PlayerCity city = null; if (!houseTemplate.canBePlacedOn(actor.getPlanet().getName())) { actor.sendSystemMessage("You may not place this structure on this planet.", (byte) 0); // should probably load this from an stf diff --git a/src/services/object/ObjectService.java b/src/services/object/ObjectService.java index 475f7155..fba26116 100644 --- a/src/services/object/ObjectService.java +++ b/src/services/object/ObjectService.java @@ -1439,8 +1439,23 @@ public class ObjectService implements INetworkDispatch { @Override public void process(SWGObject obj) { if (obj.getTemplate().equals(item.getTemplate())){ - alikeItemsInContainer.add(obj); - System.out.println(obj.getTemplate()); + // Check if items are Droid Motors or Wirings + if (obj.getTemplate().equals("object/tangible/loot/npc_loot/shared_wiring_generic.iff")){ + if (obj.getAttachment("reverse_engineering_name")!=null){ + if (obj.getAttachment("reverse_engineering_name").equals(item.getAttachment("reverse_engineering_name"))){ + alikeItemsInContainer.add(obj); + } + } + } else if (obj.getTemplate().equals("object/tangible/loot/npc_loot/shared_copper_battery_generic.iff")){ + if (obj.getAttachment("reverse_engineering_name")!=null){ + if (obj.getAttachment("reverse_engineering_name").equals(item.getAttachment("reverse_engineering_name"))){ + alikeItemsInContainer.add(obj); + } + } + } else { + alikeItemsInContainer.add(obj); + } + } } }); From b1d3c4a6e47d12945f8d6723fd1aa757cc72eb3b Mon Sep 17 00:00:00 2001 From: CharonInferar Date: Wed, 25 Jun 2014 16:53:26 +0200 Subject: [PATCH 32/92] Construction pylons added to structure placement service Like harvesters, houses feature the construction pylons now when placing a structure. Partially fixing #840 --- scripts/constructor_build_phase.py | 7 +++++ src/services/DevService.java | 4 +++ src/services/housing/HousingService.java | 33 ++++++++++++++++++++++-- src/services/object/ObjectService.java | 6 +++++ 4 files changed, 48 insertions(+), 2 deletions(-) create mode 100644 scripts/constructor_build_phase.py diff --git a/scripts/constructor_build_phase.py b/scripts/constructor_build_phase.py new file mode 100644 index 00000000..62755eac --- /dev/null +++ b/scripts/constructor_build_phase.py @@ -0,0 +1,7 @@ +import sys +import time + +def buildConstructor(core): + time.sleep(10) + return + \ No newline at end of file diff --git a/src/services/DevService.java b/src/services/DevService.java index 79b3feca..d0b1f39e 100644 --- a/src/services/DevService.java +++ b/src/services/DevService.java @@ -1243,6 +1243,10 @@ public class DevService implements INetworkDispatch { deed.setIntAttribute("examine_maintenance_rate", 15); inventory.add(deed); + deed = (TangibleObject) core.objectService.createObject("object/tangible/deed/guild_deed/shared_tatooine_guild_deed.iff", planet); + deed.setIntAttribute("examine_maintenance_rate", 15); + inventory.add(deed); + return; case 121: diff --git a/src/services/housing/HousingService.java b/src/services/housing/HousingService.java index 63860a89..fd079196 100644 --- a/src/services/housing/HousingService.java +++ b/src/services/housing/HousingService.java @@ -113,8 +113,10 @@ public class HousingService implements INetworkDispatch { HouseTemplate houseTemplate = housingTemplates.get(deed.getTemplate()); int structureLotCost = houseTemplate.getLotCost(); String structureTemplate = houseTemplate.getBuildingTemplate(); - PlayerCity city = core.playerCityService.getCityPositionIsIn(new Point3D(positionX, 0, positionZ)); - + //PlayerCity city = core.playerCityService.getCityPositionIsIn(new Point3D(positionX, 0, positionZ)); + // This function is not implemented, so it had to be commented out, because it resulted in an error + // Whoever wrote this, should still add the method to playerCityService, then it can be uncommented here. + PlayerCity city = null; if (!houseTemplate.canBePlacedOn(actor.getPlanet().getName())) { actor.sendSystemMessage("You may not place this structure on this planet.", (byte) 0); // should probably load this from an stf return null; @@ -142,6 +144,12 @@ public class HousingService implements INetworkDispatch { float positionY = core.terrainService.getHeight(actor.getPlanetId(), positionX, positionZ) + 2f; + String constructorTemplate = mapConstructor(structureTemplate); + InstallationObject constructors = (InstallationObject) core.objectService.createObject(constructorTemplate, 0, actor.getPlanet(), new Point3D(positionX, positionY, positionZ), quaternion); + core.simulationService.add(constructors, positionX, positionZ, true); + core.scriptService.callScript("scripts/", "constructor_build_phase", "buildConstructor", core); + core.objectService.destroyObject(constructors); + // Create the building BuildingObject building = (BuildingObject) core.objectService.createObject(structureTemplate, 0, actor.getPlanet(), new Point3D(positionX, positionY, positionZ), quaternion); @@ -196,6 +204,27 @@ public class HousingService implements INetworkDispatch { return building; } + public String mapConstructor(String structureTemplate) { + String mappedConstructorTemplate = "object/building/player/construction/shared_construction_player_house_generic_small_style_01.iff"; + if (structureTemplate.contains("small")){ + mappedConstructorTemplate = "object/building/player/construction/shared_construction_player_house_generic_small_style_01.iff"; + } else if (structureTemplate.contains("medium")){ + mappedConstructorTemplate = "object/building/player/construction/shared_construction_player_house_generic_medium_style_01.iff"; + } else if (structureTemplate.contains("large")){ + mappedConstructorTemplate = "object/building/player/construction/shared_construction_player_house_generic_large_style_01.iff"; + } + + if (structureTemplate.contains("guildhall") || structureTemplate.contains("cityhall")){ + mappedConstructorTemplate = "object/building/player/construction/shared_construction_player_guildhall_corellia_style_01.iff"; + } else if (structureTemplate.contains("hangar")){ + mappedConstructorTemplate = "object/building/player/construction/shared_construction_player_house_hangar.iff"; + } else if (structureTemplate.contains("meditation")){ + mappedConstructorTemplate = "object/building/player/construction/shared_construction_player_jedi_meditation_room.iff"; + } + // Probably more could be added + return mappedConstructorTemplate; + } + public void startMaintenanceTask(BuildingObject building) { if(building.getAttachment("isCivicStructure") != null && (boolean) building.getAttachment("isCivicStructure")) diff --git a/src/services/object/ObjectService.java b/src/services/object/ObjectService.java index 475f7155..54fa70e3 100644 --- a/src/services/object/ObjectService.java +++ b/src/services/object/ObjectService.java @@ -291,6 +291,12 @@ public class ObjectService implements INetworkDispatch { object = new WeaponObject(objectID, planet, position, orientation, Template); + } else if(Template.startsWith("object/building/player/construction")) { + + float positionY = core.terrainService.getHeight(planet.getID(), position.x, position.z)-1f; + Point3D newpoint = new Point3D(position.x,positionY,position.z); + object = new InstallationObject(objectID, planet, newpoint, orientation, Template); + } else if(Template.startsWith("object/building") || Template.startsWith("object/static/worldbuilding/structures") || Template.startsWith("object/static/structure")){ object = new BuildingObject(objectID, planet, position, orientation, Template); From 21fefece40a2d8250e0251203f92409a2854986d Mon Sep 17 00:00:00 2001 From: CharonInferar Date: Wed, 25 Jun 2014 21:39:52 +0200 Subject: [PATCH 33/92] Fix for issue #543 Fixes Creatures dropping credits --- src/services/LootService.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/services/LootService.java b/src/services/LootService.java index 6d713cb7..b452d0f9 100644 --- a/src/services/LootService.java +++ b/src/services/LootService.java @@ -54,6 +54,7 @@ import resources.objects.group.GroupObject; import resources.objects.intangible.IntangibleObject; import resources.objects.tangible.TangibleObject; import resources.objects.weapon.WeaponObject; +import services.ai.AIActor; import services.sui.SUIService.ListBoxType; import services.sui.SUIService.MessageBoxType; import services.sui.SUIWindow; @@ -193,7 +194,7 @@ public class LootService implements INetworkDispatch { // set info above corpse //System.out.println("lootedObject instanceof CreatureObject " + (lootedObject instanceof CreatureObject)); - if (lootedObject instanceof CreatureObject){ + if (lootedObject instanceof CreatureObject && lootRollSession.getDroppedItems().size()>0){ try { float y = 0.5F; // 1.3356977F float qz= 1.06535322E9F; @@ -1485,7 +1486,9 @@ public class LootService implements INetworkDispatch { public void handleCreditDrop(CreatureObject requester,TangibleObject lootedObject,LootRollSession lootRollSession){ int lootedCredits = 0; - if (lootedObject.isCreditRelieved()) + AIActor ai = (AIActor) lootedObject.getAttachment("AI"); + String resType = ai.getMobileTemplate().getMeatType(); + if (lootedObject.isCreditRelieved() || resType!=null) return; // Credit drop is depending on the CL of the looted CreatureObject From 2de79c80c526dd688d552c1b05c8c561049ee928 Mon Sep 17 00:00:00 2001 From: Zing Date: Sat, 21 Jun 2014 21:15:42 -0700 Subject: [PATCH 34/92] Loot Collections DIY: Glass Shelves Holographic Emitter Cabinetry Tech Craftsman Tools Tech in Maximizing Space Shelving Tech Storage Tech --- .../diy_glass_shelves/diy_glass_shelf_1.py | 29 ++++++++++++++++++ .../diy_glass_shelves/diy_glass_shelf_2.py | 29 ++++++++++++++++++ .../diy_glass_shelves/diy_glass_shelf_3.py | 29 ++++++++++++++++++ .../diy_glass_shelves/diy_glass_shelf_4.py | 29 ++++++++++++++++++ .../diy_glass_shelves/diy_glass_shelf_5.py | 29 ++++++++++++++++++ .../a_holographic_light_source.py | 19 ++++++++++++ .../a_holographic_mirror.py | 19 ++++++++++++ .../holographic_imagery/a_photo_detector.py | 19 ++++++++++++ .../an_electric_circuit.py | 19 ++++++++++++ .../an_optical_processor.py | 19 ++++++++++++ .../cabinetry_techniques_1.py | 29 ++++++++++++++++++ .../cabinetry_techniques_10.py | 29 ++++++++++++++++++ .../cabinetry_techniques_2.py | 29 ++++++++++++++++++ .../cabinetry_techniques_3.py | 29 ++++++++++++++++++ .../cabinetry_techniques_4.py | 29 ++++++++++++++++++ .../cabinetry_techniques_5.py | 29 ++++++++++++++++++ .../cabinetry_techniques_6.py | 29 ++++++++++++++++++ .../cabinetry_techniques_7.py | 29 ++++++++++++++++++ .../cabinetry_techniques_8.py | 29 ++++++++++++++++++ .../cabinetry_techniques_9.py | 29 ++++++++++++++++++ .../craftsman_tools/craftsman_tools_1.py | 29 ++++++++++++++++++ .../craftsman_tools/craftsman_tools_10.py | 29 ++++++++++++++++++ .../craftsman_tools/craftsman_tools_2.py | 29 ++++++++++++++++++ .../craftsman_tools/craftsman_tools_3.py | 29 ++++++++++++++++++ .../craftsman_tools/craftsman_tools_4.py | 29 ++++++++++++++++++ .../craftsman_tools/craftsman_tools_5.py | 29 ++++++++++++++++++ .../craftsman_tools/craftsman_tools_6.py | 29 ++++++++++++++++++ .../craftsman_tools/craftsman_tools_7.py | 29 ++++++++++++++++++ .../craftsman_tools/craftsman_tools_8.py | 29 ++++++++++++++++++ .../craftsman_tools/craftsman_tools_9.py | 29 ++++++++++++++++++ .../maximizing_space/maximizing_space_1.py | 30 +++++++++++++++++++ .../maximizing_space/maximizing_space_10.py | 30 +++++++++++++++++++ .../maximizing_space/maximizing_space_2.py | 30 +++++++++++++++++++ .../maximizing_space/maximizing_space_3.py | 30 +++++++++++++++++++ .../maximizing_space/maximizing_space_4.py | 30 +++++++++++++++++++ .../maximizing_space/maximizing_space_5.py | 30 +++++++++++++++++++ .../maximizing_space/maximizing_space_6.py | 30 +++++++++++++++++++ .../maximizing_space/maximizing_space_7.py | 30 +++++++++++++++++++ .../maximizing_space/maximizing_space_8.py | 30 +++++++++++++++++++ .../maximizing_space/maximizing_space_9.py | 30 +++++++++++++++++++ .../shelving_techniques_1.py | 29 ++++++++++++++++++ .../shelving_techniques_10.py | 29 ++++++++++++++++++ .../shelving_techniques_2.py | 29 ++++++++++++++++++ .../shelving_techniques_3.py | 29 ++++++++++++++++++ .../shelving_techniques_4.py | 29 ++++++++++++++++++ .../shelving_techniques_5.py | 29 ++++++++++++++++++ .../shelving_techniques_6.py | 29 ++++++++++++++++++ .../shelving_techniques_7.py | 29 ++++++++++++++++++ .../shelving_techniques_8.py | 29 ++++++++++++++++++ .../shelving_techniques_9.py | 29 ++++++++++++++++++ .../storage_techniques_1.py | 29 ++++++++++++++++++ .../storage_techniques_10.py | 29 ++++++++++++++++++ .../storage_techniques_2.py | 29 ++++++++++++++++++ .../storage_techniques_3.py | 29 ++++++++++++++++++ .../storage_techniques_4.py | 29 ++++++++++++++++++ .../storage_techniques_5.py | 29 ++++++++++++++++++ .../storage_techniques_6.py | 29 ++++++++++++++++++ .../storage_techniques_7.py | 29 ++++++++++++++++++ .../storage_techniques_8.py | 29 ++++++++++++++++++ .../storage_techniques_9.py | 29 ++++++++++++++++++ 60 files changed, 1700 insertions(+) create mode 100644 scripts/loot/lootItems/collections/diy_glass_shelves/diy_glass_shelf_1.py create mode 100644 scripts/loot/lootItems/collections/diy_glass_shelves/diy_glass_shelf_2.py create mode 100644 scripts/loot/lootItems/collections/diy_glass_shelves/diy_glass_shelf_3.py create mode 100644 scripts/loot/lootItems/collections/diy_glass_shelves/diy_glass_shelf_4.py create mode 100644 scripts/loot/lootItems/collections/diy_glass_shelves/diy_glass_shelf_5.py create mode 100644 scripts/loot/lootItems/collections/holographic_imagery/a_holographic_light_source.py create mode 100644 scripts/loot/lootItems/collections/holographic_imagery/a_holographic_mirror.py create mode 100644 scripts/loot/lootItems/collections/holographic_imagery/a_photo_detector.py create mode 100644 scripts/loot/lootItems/collections/holographic_imagery/an_electric_circuit.py create mode 100644 scripts/loot/lootItems/collections/holographic_imagery/an_optical_processor.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/cabinetry_techniques/cabinetry_techniques_1.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/cabinetry_techniques/cabinetry_techniques_10.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/cabinetry_techniques/cabinetry_techniques_2.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/cabinetry_techniques/cabinetry_techniques_3.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/cabinetry_techniques/cabinetry_techniques_4.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/cabinetry_techniques/cabinetry_techniques_5.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/cabinetry_techniques/cabinetry_techniques_6.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/cabinetry_techniques/cabinetry_techniques_7.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/cabinetry_techniques/cabinetry_techniques_8.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/cabinetry_techniques/cabinetry_techniques_9.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/craftsman_tools/craftsman_tools_1.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/craftsman_tools/craftsman_tools_10.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/craftsman_tools/craftsman_tools_2.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/craftsman_tools/craftsman_tools_3.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/craftsman_tools/craftsman_tools_4.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/craftsman_tools/craftsman_tools_5.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/craftsman_tools/craftsman_tools_6.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/craftsman_tools/craftsman_tools_7.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/craftsman_tools/craftsman_tools_8.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/craftsman_tools/craftsman_tools_9.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/maximizing_space/maximizing_space_1.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/maximizing_space/maximizing_space_10.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/maximizing_space/maximizing_space_2.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/maximizing_space/maximizing_space_3.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/maximizing_space/maximizing_space_4.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/maximizing_space/maximizing_space_5.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/maximizing_space/maximizing_space_6.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/maximizing_space/maximizing_space_7.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/maximizing_space/maximizing_space_8.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/maximizing_space/maximizing_space_9.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/shelving_techniques/shelving_techniques_1.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/shelving_techniques/shelving_techniques_10.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/shelving_techniques/shelving_techniques_2.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/shelving_techniques/shelving_techniques_3.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/shelving_techniques/shelving_techniques_4.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/shelving_techniques/shelving_techniques_5.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/shelving_techniques/shelving_techniques_6.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/shelving_techniques/shelving_techniques_7.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/shelving_techniques/shelving_techniques_8.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/shelving_techniques/shelving_techniques_9.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/storage_techniques/storage_techniques_1.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/storage_techniques/storage_techniques_10.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/storage_techniques/storage_techniques_2.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/storage_techniques/storage_techniques_3.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/storage_techniques/storage_techniques_4.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/storage_techniques/storage_techniques_5.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/storage_techniques/storage_techniques_6.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/storage_techniques/storage_techniques_7.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/storage_techniques/storage_techniques_8.py create mode 100644 scripts/loot/lootItems/collections/housing_improvements/storage_techniques/storage_techniques_9.py diff --git a/scripts/loot/lootItems/collections/diy_glass_shelves/diy_glass_shelf_1.py b/scripts/loot/lootItems/collections/diy_glass_shelves/diy_glass_shelf_1.py new file mode 100644 index 00000000..2e1ac9ca --- /dev/null +++ b/scripts/loot/lootItems/collections/diy_glass_shelves/diy_glass_shelf_1.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_col_glass_shelf_book_01.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [1] + +def STFparams(): + + return ['static_item_n','col_glass_shelf_02_01','static_item_d','col_glass_shelf_02_01'] + +def AddToCollection(): + + return 'col_glass_shelf_01' + +def CollectionItemName(): + + return 'col_glass_shelf_chapter1' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/diy_glass_shelves/diy_glass_shelf_2.py b/scripts/loot/lootItems/collections/diy_glass_shelves/diy_glass_shelf_2.py new file mode 100644 index 00000000..6ccee2c1 --- /dev/null +++ b/scripts/loot/lootItems/collections/diy_glass_shelves/diy_glass_shelf_2.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_col_glass_shelf_book_01.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [2] + +def STFparams(): + + return ['static_item_n','col_glass_shelf_02_02','static_item_d','col_glass_shelf_02_02'] + +def AddToCollection(): + + return 'col_glass_shelf_01' + +def CollectionItemName(): + + return 'col_glass_shelf_chapter2' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/diy_glass_shelves/diy_glass_shelf_3.py b/scripts/loot/lootItems/collections/diy_glass_shelves/diy_glass_shelf_3.py new file mode 100644 index 00000000..153e0de5 --- /dev/null +++ b/scripts/loot/lootItems/collections/diy_glass_shelves/diy_glass_shelf_3.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_col_glass_shelf_book_01.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [3] + +def STFparams(): + + return ['static_item_n','col_glass_shelf_02_03','static_item_d','col_glass_shelf_02_03'] + +def AddToCollection(): + + return 'col_glass_shelf_01' + +def CollectionItemName(): + + return 'col_glass_shelf_chapter3' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/diy_glass_shelves/diy_glass_shelf_4.py b/scripts/loot/lootItems/collections/diy_glass_shelves/diy_glass_shelf_4.py new file mode 100644 index 00000000..4dbc9c69 --- /dev/null +++ b/scripts/loot/lootItems/collections/diy_glass_shelves/diy_glass_shelf_4.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_col_glass_shelf_book_01.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [4] + +def STFparams(): + + return ['static_item_n','col_glass_shelf_02_04','static_item_d','col_glass_shelf_02_04'] + +def AddToCollection(): + + return 'col_glass_shelf_01' + +def CollectionItemName(): + + return 'col_glass_shelf_chapter4' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/diy_glass_shelves/diy_glass_shelf_5.py b/scripts/loot/lootItems/collections/diy_glass_shelves/diy_glass_shelf_5.py new file mode 100644 index 00000000..9163088e --- /dev/null +++ b/scripts/loot/lootItems/collections/diy_glass_shelves/diy_glass_shelf_5.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_col_glass_shelf_book_01.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [5] + +def STFparams(): + + return ['static_item_n','col_glass_shelf_02_05','static_item_d','col_glass_shelf_02_05'] + +def AddToCollection(): + + return 'col_glass_shelf_01' + +def CollectionItemName(): + + return 'col_glass_shelf_chapter5' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/holographic_imagery/a_holographic_light_source.py b/scripts/loot/lootItems/collections/holographic_imagery/a_holographic_light_source.py new file mode 100644 index 00000000..33180040 --- /dev/null +++ b/scripts/loot/lootItems/collections/holographic_imagery/a_holographic_light_source.py @@ -0,0 +1,19 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_col_holo_emitter_light_source.iff'] + +def STFparams(): + + return ['static_item_n','col_holo_emitter_light_source_02_01','static_item_d','col_holo_emitter_light_source_02_01'] + +def AddToCollection(): + + return 'col_holo_emitter_01' + +def CollectionItemName(): + + return 'holo_emitter_part_02' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/holographic_imagery/a_holographic_mirror.py b/scripts/loot/lootItems/collections/holographic_imagery/a_holographic_mirror.py new file mode 100644 index 00000000..18a0b27d --- /dev/null +++ b/scripts/loot/lootItems/collections/holographic_imagery/a_holographic_mirror.py @@ -0,0 +1,19 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_col_holo_emitter_receptor.iff'] + +def STFparams(): + + return ['static_item_n','col_holo_emitter_receptor_02_01','static_item_d','col_holo_emitter_receptor_02_01'] + +def AddToCollection(): + + return 'col_holo_emitter_01' + +def CollectionItemName(): + + return 'holo_emitter_part_03' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/holographic_imagery/a_photo_detector.py b/scripts/loot/lootItems/collections/holographic_imagery/a_photo_detector.py new file mode 100644 index 00000000..aef7d1ee --- /dev/null +++ b/scripts/loot/lootItems/collections/holographic_imagery/a_photo_detector.py @@ -0,0 +1,19 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_col_holo_emitter_photo_detector.iff'] + +def STFparams(): + + return ['static_item_n','col_holo_emitter_photo_detector_02_01','static_item_d','col_holo_emitter_photo_detector_02_01'] + +def AddToCollection(): + + return 'col_holo_emitter_01' + +def CollectionItemName(): + + return 'holo_emitter_part_05' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/holographic_imagery/an_electric_circuit.py b/scripts/loot/lootItems/collections/holographic_imagery/an_electric_circuit.py new file mode 100644 index 00000000..6d85300c --- /dev/null +++ b/scripts/loot/lootItems/collections/holographic_imagery/an_electric_circuit.py @@ -0,0 +1,19 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_col_holo_emitter_curcuit.iff'] + +def STFparams(): + + return ['static_item_n','col_holo_emitter_circuit_02_01','static_item_d','col_holo_emitter_circuit_02_01'] + +def AddToCollection(): + + return 'col_holo_emitter_01' + +def CollectionItemName(): + + return 'holo_emitter_part_04' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/holographic_imagery/an_optical_processor.py b/scripts/loot/lootItems/collections/holographic_imagery/an_optical_processor.py new file mode 100644 index 00000000..0cf9bf1d --- /dev/null +++ b/scripts/loot/lootItems/collections/holographic_imagery/an_optical_processor.py @@ -0,0 +1,19 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_col_holo_emitter_processor.iff'] + +def STFparams(): + + return ['static_item_n','col_holo_emitter_processor_02_01','static_item_d','col_holo_emitter_processor_02_01'] + +def AddToCollection(): + + return 'col_holo_emitter_01' + +def CollectionItemName(): + + return 'holo_emitter_part_01' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/cabinetry_techniques/cabinetry_techniques_1.py b/scripts/loot/lootItems/collections/housing_improvements/cabinetry_techniques/cabinetry_techniques_1.py new file mode 100644 index 00000000..da572c3d --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/cabinetry_techniques/cabinetry_techniques_1.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_04.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [1] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_04_01','static_item_d','item_collection_housing_improvement_04_01'] + +def AddToCollection(): + + return 'housing_improvement_04' + +def CollectionItemName(): + + return 'housing_improvement_04_01' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/cabinetry_techniques/cabinetry_techniques_10.py b/scripts/loot/lootItems/collections/housing_improvements/cabinetry_techniques/cabinetry_techniques_10.py new file mode 100644 index 00000000..63018c13 --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/cabinetry_techniques/cabinetry_techniques_10.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_04.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [10] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_04_10','static_item_d','item_collection_housing_improvement_04_10'] + +def AddToCollection(): + + return 'housing_improvement_04' + +def CollectionItemName(): + + return 'housing_improvement_04_10' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/cabinetry_techniques/cabinetry_techniques_2.py b/scripts/loot/lootItems/collections/housing_improvements/cabinetry_techniques/cabinetry_techniques_2.py new file mode 100644 index 00000000..9fbd7731 --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/cabinetry_techniques/cabinetry_techniques_2.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_04.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [2] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_04_02','static_item_d','item_collection_housing_improvement_04_02'] + +def AddToCollection(): + + return 'housing_improvement_04' + +def CollectionItemName(): + + return 'housing_improvement_04_02' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/cabinetry_techniques/cabinetry_techniques_3.py b/scripts/loot/lootItems/collections/housing_improvements/cabinetry_techniques/cabinetry_techniques_3.py new file mode 100644 index 00000000..30910a1b --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/cabinetry_techniques/cabinetry_techniques_3.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_04.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [3] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_04_03','static_item_d','item_collection_housing_improvement_04_03'] + +def AddToCollection(): + + return 'housing_improvement_04' + +def CollectionItemName(): + + return 'housing_improvement_04_03' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/cabinetry_techniques/cabinetry_techniques_4.py b/scripts/loot/lootItems/collections/housing_improvements/cabinetry_techniques/cabinetry_techniques_4.py new file mode 100644 index 00000000..d0872226 --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/cabinetry_techniques/cabinetry_techniques_4.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_04.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [4] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_04_04','static_item_d','item_collection_housing_improvement_04_04'] + +def AddToCollection(): + + return 'housing_improvement_04' + +def CollectionItemName(): + + return 'housing_improvement_04_04' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/cabinetry_techniques/cabinetry_techniques_5.py b/scripts/loot/lootItems/collections/housing_improvements/cabinetry_techniques/cabinetry_techniques_5.py new file mode 100644 index 00000000..79ce3dbf --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/cabinetry_techniques/cabinetry_techniques_5.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_04.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [5] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_04_05','static_item_d','item_collection_housing_improvement_04_05'] + +def AddToCollection(): + + return 'housing_improvement_04' + +def CollectionItemName(): + + return 'housing_improvement_04_05' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/cabinetry_techniques/cabinetry_techniques_6.py b/scripts/loot/lootItems/collections/housing_improvements/cabinetry_techniques/cabinetry_techniques_6.py new file mode 100644 index 00000000..1dc202f5 --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/cabinetry_techniques/cabinetry_techniques_6.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_04.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [6] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_04_06','static_item_d','item_collection_housing_improvement_04_06'] + +def AddToCollection(): + + return 'housing_improvement_04' + +def CollectionItemName(): + + return 'housing_improvement_04_06' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/cabinetry_techniques/cabinetry_techniques_7.py b/scripts/loot/lootItems/collections/housing_improvements/cabinetry_techniques/cabinetry_techniques_7.py new file mode 100644 index 00000000..6fe49fa9 --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/cabinetry_techniques/cabinetry_techniques_7.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_04.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [7] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_04_07','static_item_d','item_collection_housing_improvement_04_07'] + +def AddToCollection(): + + return 'housing_improvement_04' + +def CollectionItemName(): + + return 'housing_improvement_04_07' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/cabinetry_techniques/cabinetry_techniques_8.py b/scripts/loot/lootItems/collections/housing_improvements/cabinetry_techniques/cabinetry_techniques_8.py new file mode 100644 index 00000000..8ed90b58 --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/cabinetry_techniques/cabinetry_techniques_8.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_04.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [8] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_04_08','static_item_d','item_collection_housing_improvement_04_08'] + +def AddToCollection(): + + return 'housing_improvement_04' + +def CollectionItemName(): + + return 'housing_improvement_04_08' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/cabinetry_techniques/cabinetry_techniques_9.py b/scripts/loot/lootItems/collections/housing_improvements/cabinetry_techniques/cabinetry_techniques_9.py new file mode 100644 index 00000000..3df1a3d5 --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/cabinetry_techniques/cabinetry_techniques_9.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_04.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [9] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_04_09','static_item_d','item_collection_housing_improvement_04_09'] + +def AddToCollection(): + + return 'housing_improvement_04' + +def CollectionItemName(): + + return 'housing_improvement_04_09' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/craftsman_tools/craftsman_tools_1.py b/scripts/loot/lootItems/collections/housing_improvements/craftsman_tools/craftsman_tools_1.py new file mode 100644 index 00000000..612bdef8 --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/craftsman_tools/craftsman_tools_1.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_03.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [1] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_03_01','static_item_d','item_collection_housing_improvement_03_01'] + +def AddToCollection(): + + return 'housing_improvement_03' + +def CollectionItemName(): + + return 'housing_improvement_03_01' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/craftsman_tools/craftsman_tools_10.py b/scripts/loot/lootItems/collections/housing_improvements/craftsman_tools/craftsman_tools_10.py new file mode 100644 index 00000000..1021d7e4 --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/craftsman_tools/craftsman_tools_10.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_03.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [10] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_03_10','static_item_d','item_collection_housing_improvement_03_10'] + +def AddToCollection(): + + return 'housing_improvement_03' + +def CollectionItemName(): + + return 'housing_improvement_03_10' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/craftsman_tools/craftsman_tools_2.py b/scripts/loot/lootItems/collections/housing_improvements/craftsman_tools/craftsman_tools_2.py new file mode 100644 index 00000000..d66ebccd --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/craftsman_tools/craftsman_tools_2.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_03.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [2] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_03_02','static_item_d','item_collection_housing_improvement_03_02'] + +def AddToCollection(): + + return 'housing_improvement_03' + +def CollectionItemName(): + + return 'housing_improvement_03_02' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/craftsman_tools/craftsman_tools_3.py b/scripts/loot/lootItems/collections/housing_improvements/craftsman_tools/craftsman_tools_3.py new file mode 100644 index 00000000..10ce1ebb --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/craftsman_tools/craftsman_tools_3.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_03.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [3] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_03_03','static_item_d','item_collection_housing_improvement_03_03'] + +def AddToCollection(): + + return 'housing_improvement_03' + +def CollectionItemName(): + + return 'housing_improvement_03_03' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/craftsman_tools/craftsman_tools_4.py b/scripts/loot/lootItems/collections/housing_improvements/craftsman_tools/craftsman_tools_4.py new file mode 100644 index 00000000..400b5359 --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/craftsman_tools/craftsman_tools_4.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_03.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [4] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_03_04','static_item_d','item_collection_housing_improvement_03_04'] + +def AddToCollection(): + + return 'housing_improvement_03' + +def CollectionItemName(): + + return 'housing_improvement_03_04' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/craftsman_tools/craftsman_tools_5.py b/scripts/loot/lootItems/collections/housing_improvements/craftsman_tools/craftsman_tools_5.py new file mode 100644 index 00000000..fc3b740b --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/craftsman_tools/craftsman_tools_5.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_03.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [5] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_03_05','static_item_d','item_collection_housing_improvement_03_05'] + +def AddToCollection(): + + return 'housing_improvement_03' + +def CollectionItemName(): + + return 'housing_improvement_03_05' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/craftsman_tools/craftsman_tools_6.py b/scripts/loot/lootItems/collections/housing_improvements/craftsman_tools/craftsman_tools_6.py new file mode 100644 index 00000000..c5522fd9 --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/craftsman_tools/craftsman_tools_6.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_03.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [6] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_03_06','static_item_d','item_collection_housing_improvement_03_06'] + +def AddToCollection(): + + return 'housing_improvement_03' + +def CollectionItemName(): + + return 'housing_improvement_03_06' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/craftsman_tools/craftsman_tools_7.py b/scripts/loot/lootItems/collections/housing_improvements/craftsman_tools/craftsman_tools_7.py new file mode 100644 index 00000000..b6326726 --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/craftsman_tools/craftsman_tools_7.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_03.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [7] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_03_07','static_item_d','item_collection_housing_improvement_03_07'] + +def AddToCollection(): + + return 'housing_improvement_03' + +def CollectionItemName(): + + return 'housing_improvement_03_07' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/craftsman_tools/craftsman_tools_8.py b/scripts/loot/lootItems/collections/housing_improvements/craftsman_tools/craftsman_tools_8.py new file mode 100644 index 00000000..5a611976 --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/craftsman_tools/craftsman_tools_8.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_03.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [8] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_03_08','static_item_d','item_collection_housing_improvement_03_08'] + +def AddToCollection(): + + return 'housing_improvement_03' + +def CollectionItemName(): + + return 'housing_improvement_03_08' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/craftsman_tools/craftsman_tools_9.py b/scripts/loot/lootItems/collections/housing_improvements/craftsman_tools/craftsman_tools_9.py new file mode 100644 index 00000000..04a376ba --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/craftsman_tools/craftsman_tools_9.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_03.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [9] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_03_09','static_item_d','item_collection_housing_improvement_03_09'] + +def AddToCollection(): + + return 'housing_improvement_03' + +def CollectionItemName(): + + return 'housing_improvement_03_09' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/maximizing_space/maximizing_space_1.py b/scripts/loot/lootItems/collections/housing_improvements/maximizing_space/maximizing_space_1.py new file mode 100644 index 00000000..9d7abad9 --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/maximizing_space/maximizing_space_1.py @@ -0,0 +1,30 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_01.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [1] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_01_01','static_item_d','item_collection_housing_improvement_01_01'] + +def AddToCollection(): + + return 'housing_improvement_01' + +def CollectionItemName(): + + return 'housing_improvement_01_01' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/maximizing_space/maximizing_space_10.py b/scripts/loot/lootItems/collections/housing_improvements/maximizing_space/maximizing_space_10.py new file mode 100644 index 00000000..a3bc51a2 --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/maximizing_space/maximizing_space_10.py @@ -0,0 +1,30 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_01.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [10] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_01_10','static_item_d','item_collection_housing_improvement_01_10'] + +def AddToCollection(): + + return 'housing_improvement_01' + +def CollectionItemName(): + + return 'housing_improvement_01_10' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/maximizing_space/maximizing_space_2.py b/scripts/loot/lootItems/collections/housing_improvements/maximizing_space/maximizing_space_2.py new file mode 100644 index 00000000..c7a3a840 --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/maximizing_space/maximizing_space_2.py @@ -0,0 +1,30 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_01.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [2] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_01_02','static_item_d','item_collection_housing_improvement_01_02'] + +def AddToCollection(): + + return 'housing_improvement_01' + +def CollectionItemName(): + + return 'housing_improvement_01_02' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/maximizing_space/maximizing_space_3.py b/scripts/loot/lootItems/collections/housing_improvements/maximizing_space/maximizing_space_3.py new file mode 100644 index 00000000..0e72292d --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/maximizing_space/maximizing_space_3.py @@ -0,0 +1,30 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_01.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [3] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_01_03','static_item_d','item_collection_housing_improvement_01_03'] + +def AddToCollection(): + + return 'housing_improvement_01' + +def CollectionItemName(): + + return 'housing_improvement_01_03' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/maximizing_space/maximizing_space_4.py b/scripts/loot/lootItems/collections/housing_improvements/maximizing_space/maximizing_space_4.py new file mode 100644 index 00000000..f7d99e0c --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/maximizing_space/maximizing_space_4.py @@ -0,0 +1,30 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_01.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [4] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_01_04','static_item_d','item_collection_housing_improvement_01_04'] + +def AddToCollection(): + + return 'housing_improvement_01' + +def CollectionItemName(): + + return 'housing_improvement_01_04' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/maximizing_space/maximizing_space_5.py b/scripts/loot/lootItems/collections/housing_improvements/maximizing_space/maximizing_space_5.py new file mode 100644 index 00000000..6b10758d --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/maximizing_space/maximizing_space_5.py @@ -0,0 +1,30 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_01.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [5] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_01_05','static_item_d','item_collection_housing_improvement_01_05'] + +def AddToCollection(): + + return 'housing_improvement_01' + +def CollectionItemName(): + + return 'housing_improvement_01_05' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/maximizing_space/maximizing_space_6.py b/scripts/loot/lootItems/collections/housing_improvements/maximizing_space/maximizing_space_6.py new file mode 100644 index 00000000..980592fb --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/maximizing_space/maximizing_space_6.py @@ -0,0 +1,30 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_01.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [6] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_01_06','static_item_d','item_collection_housing_improvement_01_06'] + +def AddToCollection(): + + return 'housing_improvement_01' + +def CollectionItemName(): + + return 'housing_improvement_01_06' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/maximizing_space/maximizing_space_7.py b/scripts/loot/lootItems/collections/housing_improvements/maximizing_space/maximizing_space_7.py new file mode 100644 index 00000000..e7bd30bd --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/maximizing_space/maximizing_space_7.py @@ -0,0 +1,30 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_01.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [7] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_01_07','static_item_d','item_collection_housing_improvement_01_07'] + +def AddToCollection(): + + return 'housing_improvement_01' + +def CollectionItemName(): + + return 'housing_improvement_01_07' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/maximizing_space/maximizing_space_8.py b/scripts/loot/lootItems/collections/housing_improvements/maximizing_space/maximizing_space_8.py new file mode 100644 index 00000000..916b4502 --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/maximizing_space/maximizing_space_8.py @@ -0,0 +1,30 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_01.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [8] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_01_08','static_item_d','item_collection_housing_improvement_01_08'] + +def AddToCollection(): + + return 'housing_improvement_01' + +def CollectionItemName(): + + return 'housing_improvement_01_08' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/maximizing_space/maximizing_space_9.py b/scripts/loot/lootItems/collections/housing_improvements/maximizing_space/maximizing_space_9.py new file mode 100644 index 00000000..1fa5eae3 --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/maximizing_space/maximizing_space_9.py @@ -0,0 +1,30 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_01.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [9] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_01_09','static_item_d','item_collection_housing_improvement_01_09'] + +def AddToCollection(): + + return 'housing_improvement_01' + +def CollectionItemName(): + + return 'housing_improvement_01_09' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/shelving_techniques/shelving_techniques_1.py b/scripts/loot/lootItems/collections/housing_improvements/shelving_techniques/shelving_techniques_1.py new file mode 100644 index 00000000..35608064 --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/shelving_techniques/shelving_techniques_1.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_02.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [1] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_02_01','static_item_d','item_collection_housing_improvement_02_01'] + +def AddToCollection(): + + return 'housing_improvement_02' + +def CollectionItemName(): + + return 'housing_improvement_02_01' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/shelving_techniques/shelving_techniques_10.py b/scripts/loot/lootItems/collections/housing_improvements/shelving_techniques/shelving_techniques_10.py new file mode 100644 index 00000000..4ae31629 --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/shelving_techniques/shelving_techniques_10.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_02.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [1] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_02_10','static_item_d','item_collection_housing_improvement_02_10'] + +def AddToCollection(): + + return 'housing_improvement_02' + +def CollectionItemName(): + + return 'housing_improvement_02_10' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/shelving_techniques/shelving_techniques_2.py b/scripts/loot/lootItems/collections/housing_improvements/shelving_techniques/shelving_techniques_2.py new file mode 100644 index 00000000..bd6666a2 --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/shelving_techniques/shelving_techniques_2.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_02.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [2] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_02_02','static_item_d','item_collection_housing_improvement_02_02'] + +def AddToCollection(): + + return 'housing_improvement_02' + +def CollectionItemName(): + + return 'housing_improvement_02_02' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/shelving_techniques/shelving_techniques_3.py b/scripts/loot/lootItems/collections/housing_improvements/shelving_techniques/shelving_techniques_3.py new file mode 100644 index 00000000..bf414325 --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/shelving_techniques/shelving_techniques_3.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_02.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [3] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_02_03','static_item_d','item_collection_housing_improvement_02_03'] + +def AddToCollection(): + + return 'housing_improvement_02' + +def CollectionItemName(): + + return 'housing_improvement_02_03' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/shelving_techniques/shelving_techniques_4.py b/scripts/loot/lootItems/collections/housing_improvements/shelving_techniques/shelving_techniques_4.py new file mode 100644 index 00000000..45f2a875 --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/shelving_techniques/shelving_techniques_4.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_02.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [4] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_02_04','static_item_d','item_collection_housing_improvement_02_04'] + +def AddToCollection(): + + return 'housing_improvement_02' + +def CollectionItemName(): + + return 'housing_improvement_02_04' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/shelving_techniques/shelving_techniques_5.py b/scripts/loot/lootItems/collections/housing_improvements/shelving_techniques/shelving_techniques_5.py new file mode 100644 index 00000000..ec13a9f0 --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/shelving_techniques/shelving_techniques_5.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_02.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [5] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_02_05','static_item_d','item_collection_housing_improvement_02_05'] + +def AddToCollection(): + + return 'housing_improvement_02' + +def CollectionItemName(): + + return 'housing_improvement_02_05' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/shelving_techniques/shelving_techniques_6.py b/scripts/loot/lootItems/collections/housing_improvements/shelving_techniques/shelving_techniques_6.py new file mode 100644 index 00000000..bb07df98 --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/shelving_techniques/shelving_techniques_6.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_02.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [6] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_02_06','static_item_d','item_collection_housing_improvement_02_06'] + +def AddToCollection(): + + return 'housing_improvement_02' + +def CollectionItemName(): + + return 'housing_improvement_02_06' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/shelving_techniques/shelving_techniques_7.py b/scripts/loot/lootItems/collections/housing_improvements/shelving_techniques/shelving_techniques_7.py new file mode 100644 index 00000000..235a2151 --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/shelving_techniques/shelving_techniques_7.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_02.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [7] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_02_07','static_item_d','item_collection_housing_improvement_02_07'] + +def AddToCollection(): + + return 'housing_improvement_02' + +def CollectionItemName(): + + return 'housing_improvement_02_07' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/shelving_techniques/shelving_techniques_8.py b/scripts/loot/lootItems/collections/housing_improvements/shelving_techniques/shelving_techniques_8.py new file mode 100644 index 00000000..507ed1d7 --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/shelving_techniques/shelving_techniques_8.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_02.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [8] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_02_08','static_item_d','item_collection_housing_improvement_02_08'] + +def AddToCollection(): + + return 'housing_improvement_02' + +def CollectionItemName(): + + return 'housing_improvement_02_08' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/shelving_techniques/shelving_techniques_9.py b/scripts/loot/lootItems/collections/housing_improvements/shelving_techniques/shelving_techniques_9.py new file mode 100644 index 00000000..2409267d --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/shelving_techniques/shelving_techniques_9.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_02.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [9] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_02_09','static_item_d','item_collection_housing_improvement_02_09'] + +def AddToCollection(): + + return 'housing_improvement_02' + +def CollectionItemName(): + + return 'housing_improvement_02_01' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/storage_techniques/storage_techniques_1.py b/scripts/loot/lootItems/collections/housing_improvements/storage_techniques/storage_techniques_1.py new file mode 100644 index 00000000..2ec51b7c --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/storage_techniques/storage_techniques_1.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_05.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [1] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_05_01','static_item_d','item_collection_housing_improvement_05_01'] + +def AddToCollection(): + + return 'housing_improvement_05' + +def CollectionItemName(): + + return 'housing_improvement_05_01' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/storage_techniques/storage_techniques_10.py b/scripts/loot/lootItems/collections/housing_improvements/storage_techniques/storage_techniques_10.py new file mode 100644 index 00000000..9c33814f --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/storage_techniques/storage_techniques_10.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_05.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [10] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_05_10','static_item_d','item_collection_housing_improvement_05_10'] + +def AddToCollection(): + + return 'housing_improvement_05' + +def CollectionItemName(): + + return 'housing_improvement_05_10' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/storage_techniques/storage_techniques_2.py b/scripts/loot/lootItems/collections/housing_improvements/storage_techniques/storage_techniques_2.py new file mode 100644 index 00000000..209f09f5 --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/storage_techniques/storage_techniques_2.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_05.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [2] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_05_02','static_item_d','item_collection_housing_improvement_05_02'] + +def AddToCollection(): + + return 'housing_improvement_05' + +def CollectionItemName(): + + return 'housing_improvement_05_02' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/storage_techniques/storage_techniques_3.py b/scripts/loot/lootItems/collections/housing_improvements/storage_techniques/storage_techniques_3.py new file mode 100644 index 00000000..99ad6938 --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/storage_techniques/storage_techniques_3.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_05.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [3] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_05_03','static_item_d','item_collection_housing_improvement_05_03'] + +def AddToCollection(): + + return 'housing_improvement_05' + +def CollectionItemName(): + + return 'housing_improvement_05_03' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/storage_techniques/storage_techniques_4.py b/scripts/loot/lootItems/collections/housing_improvements/storage_techniques/storage_techniques_4.py new file mode 100644 index 00000000..04449b1d --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/storage_techniques/storage_techniques_4.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_05.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [4] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_05_04','static_item_d','item_collection_housing_improvement_05_04'] + +def AddToCollection(): + + return 'housing_improvement_05' + +def CollectionItemName(): + + return 'housing_improvement_05_04' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/storage_techniques/storage_techniques_5.py b/scripts/loot/lootItems/collections/housing_improvements/storage_techniques/storage_techniques_5.py new file mode 100644 index 00000000..28d98bff --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/storage_techniques/storage_techniques_5.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_05.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [5] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_05_05','static_item_d','item_collection_housing_improvement_05_05'] + +def AddToCollection(): + + return 'housing_improvement_05' + +def CollectionItemName(): + + return 'housing_improvement_05_05' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/storage_techniques/storage_techniques_6.py b/scripts/loot/lootItems/collections/housing_improvements/storage_techniques/storage_techniques_6.py new file mode 100644 index 00000000..16ae5804 --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/storage_techniques/storage_techniques_6.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_05.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [6] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_05_06','static_item_d','item_collection_housing_improvement_05_06'] + +def AddToCollection(): + + return 'housing_improvement_05' + +def CollectionItemName(): + + return 'housing_improvement_05_06' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/storage_techniques/storage_techniques_7.py b/scripts/loot/lootItems/collections/housing_improvements/storage_techniques/storage_techniques_7.py new file mode 100644 index 00000000..8d16bb08 --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/storage_techniques/storage_techniques_7.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_05.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [7] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_05_07','static_item_d','item_collection_housing_improvement_05_07'] + +def AddToCollection(): + + return 'housing_improvement_05' + +def CollectionItemName(): + + return 'housing_improvement_05_07' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/storage_techniques/storage_techniques_8.py b/scripts/loot/lootItems/collections/housing_improvements/storage_techniques/storage_techniques_8.py new file mode 100644 index 00000000..6e5125c7 --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/storage_techniques/storage_techniques_8.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_05.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [8] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_05_08','static_item_d','item_collection_housing_improvement_05_08'] + +def AddToCollection(): + + return 'housing_improvement_05' + +def CollectionItemName(): + + return 'housing_improvement_05_08' + +def stackable(): + + return 1 \ No newline at end of file diff --git a/scripts/loot/lootItems/collections/housing_improvements/storage_techniques/storage_techniques_9.py b/scripts/loot/lootItems/collections/housing_improvements/storage_techniques/storage_techniques_9.py new file mode 100644 index 00000000..cbbb528c --- /dev/null +++ b/scripts/loot/lootItems/collections/housing_improvements/storage_techniques/storage_techniques_9.py @@ -0,0 +1,29 @@ +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_housing_improvement_05.iff'] + +def lootDescriptor(): + + return 'customattributes' + +def customizationAttributes(): + return ['/private/index_color_1'] + +def customizationValues(): + return [9] + +def STFparams(): + + return ['static_item_n','item_collection_housing_improvement_05_09','static_item_d','item_collection_housing_improvement_05_09'] + +def AddToCollection(): + + return 'housing_improvement_05' + +def CollectionItemName(): + + return 'housing_improvement_05_09' + +def stackable(): + + return 1 \ No newline at end of file From 74612814a71093e822bf23623105712568fa4329 Mon Sep 17 00:00:00 2001 From: Zing Date: Sun, 22 Jun 2014 11:23:39 -0700 Subject: [PATCH 35/92] example of world collection setup --- .../collection/rare_pistol_blackfalcon.py | 5 ++++- scripts/radial/item/collection.py | 13 ++++++++----- scripts/radial/item/world_collection.py | 17 +++++++++++++++++ 3 files changed, 29 insertions(+), 6 deletions(-) create mode 100644 scripts/radial/item/world_collection.py diff --git a/scripts/object/tangible/collection/rare_pistol_blackfalcon.py b/scripts/object/tangible/collection/rare_pistol_blackfalcon.py index ccad8904..421ffda3 100644 --- a/scripts/object/tangible/collection/rare_pistol_blackfalcon.py +++ b/scripts/object/tangible/collection/rare_pistol_blackfalcon.py @@ -1,4 +1,7 @@ import sys def setup(core, object): - return \ No newline at end of file + print ('test') + object.setAttachment('CollectionItemName', 'blackfalcon_01') + object.setAttachment('radial_filename', 'item/world_collection') + return diff --git a/scripts/radial/item/collection.py b/scripts/radial/item/collection.py index 0b45c9e4..9e6dc8b7 100644 --- a/scripts/radial/item/collection.py +++ b/scripts/radial/item/collection.py @@ -6,10 +6,13 @@ def createRadial(core, owner, target, radials): radials.add(RadialOptions(0, 7, 1, '')) radials.add(RadialOptions(0, 21, 3, '@collection:consume_item')) return - -def handleSelection(core, owner, target, option): + +def handleSelection(core, actor, target, option): if option == 21 and target: - core.collectionService.addCollection(owner, target.getStfName().rsplit('_n', 1)[0]) - core.objectService.useObject(owner, target) + if target.getAttachment('CollectionItemName'): + print (target.getAttachment('CollectionItemName')) + if core.collectionService.isComplete(actor, target.getAttachment('CollectionItemName')) == False: + core.collectionService.addCollection(actor, target.getAttachment('CollectionItemName')) + core.objectService.useObject(actor, target) + core.objectService.destroyObject(target) return - \ No newline at end of file diff --git a/scripts/radial/item/world_collection.py b/scripts/radial/item/world_collection.py new file mode 100644 index 00000000..084007c8 --- /dev/null +++ b/scripts/radial/item/world_collection.py @@ -0,0 +1,17 @@ +from resources.common import RadialOptions +import sys + +def createRadial(core, owner, target, radials): + radials.add(RadialOptions(0, 21, 1, '')) + radials.add(RadialOptions(0, 7, 1, '')) + radials.add(RadialOptions(0, 21, 3, '@collection:consume_item')) + return + +def handleSelection(core, actor, target, option): + if option == 21 and target: + if target.getAttachment('CollectionItemName'): + print (target.getAttachment('CollectionItemName')) + core.collectionService.addCollection(actor, target.getAttachment('CollectionItemName')) + core.objectService.useObject(actor, target) + core.objectService.destroyObject(target) + return From 0739f87d4b21f62fad7bce29f1818dca1c60644f Mon Sep 17 00:00:00 2001 From: CharonInferar Date: Wed, 25 Jun 2014 22:50:15 +0200 Subject: [PATCH 36/92] Multiple fixes Fix for #849 Fix for #850 --- scripts/object/intangible/vehicle/stap_speeder_pcd.py | 1 + src/services/LootService.java | 4 ++-- src/services/TerrainService.java | 5 +++++ 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/scripts/object/intangible/vehicle/stap_speeder_pcd.py b/scripts/object/intangible/vehicle/stap_speeder_pcd.py index ccad8904..d7c3f4a1 100644 --- a/scripts/object/intangible/vehicle/stap_speeder_pcd.py +++ b/scripts/object/intangible/vehicle/stap_speeder_pcd.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'datapad/vehicle_pcd') return \ No newline at end of file diff --git a/src/services/LootService.java b/src/services/LootService.java index b452d0f9..ea50f3b6 100644 --- a/src/services/LootService.java +++ b/src/services/LootService.java @@ -79,8 +79,8 @@ public class LootService implements INetworkDispatch { private NGECore core; private static int prepInvCnt = 0; - String testDropTemplate = null; - //String testDropTemplate = "kowakian_cage"; + //String testDropTemplate = null; + String testDropTemplate = "stap1_vehicle_deed"; public LootService(NGECore core) { this.core = core; diff --git a/src/services/TerrainService.java b/src/services/TerrainService.java index 9cc2924a..1653690d 100644 --- a/src/services/TerrainService.java +++ b/src/services/TerrainService.java @@ -66,6 +66,11 @@ public class TerrainService { float x = (Float) poiTable.getObject(i, 4); float z = (Float) poiTable.getObject(i, 6); + // Account for more extended no-build radii like they were on live + // Issue #849 + x *= 1.1; + z *= 1.1; + CollidableCircle poiArea = new CollidableCircle(new Point3D(x, 0, z), 150, planet); noBuildAreas.get(planet).add(poiArea); From 41fa010ef51dee5919af6f2906f92ce7500ff9b6 Mon Sep 17 00:00:00 2001 From: CharonInferar Date: Wed, 25 Jun 2014 22:54:22 +0200 Subject: [PATCH 37/92] loot service test state disabled --- src/services/LootService.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/services/LootService.java b/src/services/LootService.java index ea50f3b6..de42eb6e 100644 --- a/src/services/LootService.java +++ b/src/services/LootService.java @@ -79,8 +79,8 @@ public class LootService implements INetworkDispatch { private NGECore core; private static int prepInvCnt = 0; - //String testDropTemplate = null; - String testDropTemplate = "stap1_vehicle_deed"; + String testDropTemplate = null; + //String testDropTemplate = "stap1_vehicle_deed"; public LootService(NGECore core) { this.core = core; From e92d8378a0861aa6a1043636284f52db6bf89023 Mon Sep 17 00:00:00 2001 From: CharonInferar Date: Thu, 26 Jun 2014 00:12:01 +0200 Subject: [PATCH 38/92] Fixes for older issues Fixes #478 Fixes #599 Added rare components to foraging --- src/resources/common/Forager.java | 80 ++++++++++++++++++++++++++++++- src/services/SurveyService.java | 3 ++ 2 files changed, 81 insertions(+), 2 deletions(-) diff --git a/src/resources/common/Forager.java b/src/resources/common/Forager.java index 71874a78..98911cbc 100644 --- a/src/resources/common/Forager.java +++ b/src/resources/common/Forager.java @@ -22,6 +22,7 @@ package resources.common; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Random; import java.util.Vector; @@ -50,6 +51,71 @@ public class Forager { public static final int WORM_BAIT = 4; public static final int MYSTERIOUS_DATA_DISC = 5; + public static final String[] RARE_COMPONENTS_CORELLIA = new String[]{"object/tangible/loot/creature_loot/collections/fried_icecream_components/corellia/shared_charbote.iff", + "object/tangible/loot/creature_loot/collections/fried_icecream_components/corellia/shared_goldfruit.iff", + "object/tangible/loot/creature_loot/collections/fried_icecream_components/corellia/shared_kavasa_fruit.iff", + "object/tangible/loot/creature_loot/collections/fried_icecream_components/corellia/shared_salthia.iff", + "object/tangible/loot/creature_loot/collections/fried_icecream_components/corellia/shared_sunfruit.iff", + "object/tangible/loot/creature_loot/collections/fried_icecream_components/corellia/shared_vweilu.iff", + "object/tangible/loot/creature_loot/collections/fried_icecream_components/corellia/shared_yam.iff" + }; + + public static final String[] RARE_COMPONENTS_DANTOOINE = new String[]{"object/tangible/loot/creature_loot/collections/fried_icecream_components/dantooine/shared_barabel.iff", + "object/tangible/loot/creature_loot/collections/fried_icecream_components/dantooine/shared_celonslay.iff", + "object/tangible/loot/creature_loot/collections/fried_icecream_components/dantooine/shared_dorian.iff", + "object/tangible/loot/creature_loot/collections/fried_icecream_components/dantooine/shared_kibla_greens.iff", + "object/tangible/loot/creature_loot/collections/fried_icecream_components/dantooine/shared_shefna_fruit.iff", + "object/tangible/loot/creature_loot/collections/fried_icecream_components/dantooine/shared_tritacale.iff", + "object/tangible/loot/creature_loot/collections/fried_icecream_components/dantooine/shared_yot_beans.iff" + }; + + public static final String[] RARE_COMPONENTS_DATHOMIR = new String[]{"object/tangible/loot/creature_loot/collections/fried_icecream_components/dathomir/shared_beebleberry.iff", + "object/tangible/loot/creature_loot/collections/fried_icecream_components/dathomir/shared_driblis.iff", + "object/tangible/loot/creature_loot/collections/fried_icecream_components/dathomir/shared_dricklefruit.iff", + "object/tangible/loot/creature_loot/collections/fried_icecream_components/dathomir/shared_grape.iff", + "object/tangible/loot/creature_loot/collections/fried_icecream_components/dathomir/shared_hwotha.iff", + "object/tangible/loot/creature_loot/collections/fried_icecream_components/dathomir/shared_plaitfruit.iff", + "object/tangible/loot/creature_loot/collections/fried_icecream_components/dathomir/shared_qana.iff" + }; + + public static final String[] RARE_COMPONENTS_ENDOR = new String[]{"object/tangible/loot/creature_loot/collections/fried_icecream_components/endor/shared_acorns.iff", + "object/tangible/loot/creature_loot/collections/fried_icecream_components/endor/shared_blumfruit.iff", + "object/tangible/loot/creature_loot/collections/fried_icecream_components/endor/shared_burr_ball.iff", + "object/tangible/loot/creature_loot/collections/fried_icecream_components/endor/shared_gin_jang_berry.iff", + "object/tangible/loot/creature_loot/collections/fried_icecream_components/endor/shared_honey_melon.iff", + "object/tangible/loot/creature_loot/collections/fried_icecream_components/endor/shared_sunberries.iff", + "object/tangible/loot/creature_loot/collections/fried_icecream_components/endor/shared_yubnut.iff" + }; + + public static final String[] RARE_COMPONENTS_NABOO = new String[]{"object/tangible/loot/creature_loot/collections/fried_icecream_components/naboo/shared_cligs.iff", + "object/tangible/loot/creature_loot/collections/fried_icecream_components/naboo/shared_cracknut.iff", + "object/tangible/loot/creature_loot/collections/fried_icecream_components/naboo/shared_denta.iff", + "object/tangible/loot/creature_loot/collections/fried_icecream_components/naboo/shared_muja.iff", + "object/tangible/loot/creature_loot/collections/fried_icecream_components/naboo/shared_ootoowergs.iff", + "object/tangible/loot/creature_loot/collections/fried_icecream_components/naboo/shared_phraig.iff", + "object/tangible/loot/creature_loot/collections/fried_icecream_components/naboo/shared_stinkmelon.iff" + }; + + public static final String[] RARE_COMPONENTS_TATOOINE = new String[]{"object/tangible/loot/creature_loot/collections/fried_icecream_components/tatooine/shared_banthaweed.iff", + "object/tangible/loot/creature_loot/collections/fried_icecream_components/tatooine/shared_bestinnian.iff", + "object/tangible/loot/creature_loot/collections/fried_icecream_components/tatooine/shared_bloddle.iff", + "object/tangible/loot/creature_loot/collections/fried_icecream_components/tatooine/shared_bristlemelon.iff", + "object/tangible/loot/creature_loot/collections/fried_icecream_components/tatooine/shared_tatoes.iff", + "object/tangible/loot/creature_loot/collections/fried_icecream_components/tatooine/shared_wyykmelons.iff", + "object/tangible/loot/creature_loot/collections/fried_icecream_components/tatooine/shared_zog.iff" + }; + + public static final String[] RARE_COMPONENTS_YAVIN = new String[]{"object/tangible/loot/creature_loot/collections/fried_icecream_components/yavin/shared_blueleaf_shrub.iff", + "object/tangible/loot/creature_loot/collections/fried_icecream_components/yavin/shared_celto.iff", + "object/tangible/loot/creature_loot/collections/fried_icecream_components/yavin/shared_farrberries.iff", + "object/tangible/loot/creature_loot/collections/fried_icecream_components/yavin/shared_sweetmelon.iff", + "object/tangible/loot/creature_loot/collections/fried_icecream_components/yavin/shared_topatoes.iff", + "object/tangible/loot/creature_loot/collections/fried_icecream_components/yavin/shared_trig_berries.iff", + "object/tangible/loot/creature_loot/collections/fried_icecream_components/yavin/shared_wuli_nuts.iff" + }; + + private static final HashMap rareComponentHash= new HashMap(); + private int[] mapPlanetIDs = new int[]{6,7,8}; // consider foraged food food/foraged @@ -77,7 +143,14 @@ public class Forager { int[] forageChances = new int[]{10,10,25,25,25,5}; int[] forageChances2 = new int[]{12,10,21,23,24,10}; // Kommerken Steak int[] forageChances3 = new int[]{20,9,22,22,22,5}; // if you got the pig - + + rareComponentHash.put(1,RARE_COMPONENTS_TATOOINE); + rareComponentHash.put(2,RARE_COMPONENTS_NABOO); + rareComponentHash.put(3,RARE_COMPONENTS_CORELLIA); + rareComponentHash.put(6,RARE_COMPONENTS_DANTOOINE); + rareComponentHash.put(8,RARE_COMPONENTS_YAVIN); + rareComponentHash.put(9,RARE_COMPONENTS_ENDOR); + rareComponentHash.put(10,RARE_COMPONENTS_DATHOMIR); int chosenObject = 0; @@ -120,7 +193,10 @@ public class Forager { forager.sendSystemMessage("",(byte) 0); break; - case RARE_COMPONENT: template = "object/tangible/loot/beast/shared_enzyme_1.iff"; // for now, must find temp + case RARE_COMPONENT: template = ""; + String[] componentArray = rareComponentHash.get(forager.getPlanetId()); + int componentRoll = new Random().nextInt(componentArray.length); + template = componentArray[componentRoll]; foragedObject = (TangibleObject) NGECore.getInstance().objectService.createObject(template, forager.getPlanet()); foragerInventory.add(foragedObject); forager.sendSystemMessage("",(byte) 0); diff --git a/src/services/SurveyService.java b/src/services/SurveyService.java index b218982a..ff01a6fb 100644 --- a/src/services/SurveyService.java +++ b/src/services/SurveyService.java @@ -273,6 +273,9 @@ public class SurveyService implements INetworkDispatch { if (target==null) return; // target object not valid + if (crafter.getContainer()!=null) + return; + SurveyTool surveyTool = (SurveyTool)target; if (surveyTool.getToolType()==-1) return; // Survey tool type was not recognized From 6256d6fc72848b4133d766ef2e461fc17a9821d4 Mon Sep 17 00:00:00 2001 From: CharonInferar Date: Thu, 26 Jun 2014 02:41:27 +0200 Subject: [PATCH 39/92] Fix2 --- src/services/housing/HousingService.java | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/services/housing/HousingService.java b/src/services/housing/HousingService.java index 237eb56a..fd079196 100644 --- a/src/services/housing/HousingService.java +++ b/src/services/housing/HousingService.java @@ -114,14 +114,9 @@ public class HousingService implements INetworkDispatch { int structureLotCost = houseTemplate.getLotCost(); String structureTemplate = houseTemplate.getBuildingTemplate(); //PlayerCity city = core.playerCityService.getCityPositionIsIn(new Point3D(positionX, 0, positionZ)); -<<<<<<< HEAD - PlayerCity city = null; - -======= // This function is not implemented, so it had to be commented out, because it resulted in an error // Whoever wrote this, should still add the method to playerCityService, then it can be uncommented here. PlayerCity city = null; ->>>>>>> origin/master if (!houseTemplate.canBePlacedOn(actor.getPlanet().getName())) { actor.sendSystemMessage("You may not place this structure on this planet.", (byte) 0); // should probably load this from an stf return null; From bbbc26177f0b8f4298469562f4d6c67b19c60565 Mon Sep 17 00:00:00 2001 From: CharonInferar Date: Fri, 27 Jun 2014 03:35:29 +0200 Subject: [PATCH 40/92] Implementation of AI Patrol and AI Loiter states Applied to Dantooine Imp OP to get it alive. --- options.cfg | 2 +- scripts/mobiles/generic/droids/r4_base.py | 39 +++ scripts/mobiles/generic/droids/r5_base.py | 39 +++ .../generic/faction/imperial/bek_rabor.py | 36 +++ .../generic/faction/imperial/fbase_at_st.py | 41 +++ .../generic/faction/imperial/juntah_herm.py | 37 +++ .../dantooine/imperial_outpost.py | 95 +++++- src/services/SimulationService.java | 4 +- src/services/ai/AIActor.java | 78 +++++ src/services/ai/AIService.java | 36 +++ src/services/ai/states/AIState.java | 282 +++++++++++++++++- src/services/ai/states/LoiterState.java | 60 ++++ src/services/ai/states/PatrolState.java | 13 +- 13 files changed, 751 insertions(+), 11 deletions(-) create mode 100644 scripts/mobiles/generic/droids/r4_base.py create mode 100644 scripts/mobiles/generic/droids/r5_base.py create mode 100644 scripts/mobiles/generic/faction/imperial/bek_rabor.py create mode 100644 scripts/mobiles/generic/faction/imperial/fbase_at_st.py create mode 100644 scripts/mobiles/generic/faction/imperial/juntah_herm.py create mode 100644 src/services/ai/states/LoiterState.java diff --git a/options.cfg b/options.cfg index 03abf4cf..892ff452 100644 --- a/options.cfg +++ b/options.cfg @@ -1,6 +1,6 @@ LOAD.SNAPSHOT_OBJECTS=1 LOAD.BUILDOUT_OBJECTS=1 -#LOAD.BUILDOUT_ONLY_FOR="dantooine" +LOAD.BUILDOUT_ONLY_FOR="dantooine" LOAD.RESOURCE.SYSTEM=1 # Misc diff --git a/scripts/mobiles/generic/droids/r4_base.py b/scripts/mobiles/generic/droids/r4_base.py new file mode 100644 index 00000000..ab864baa --- /dev/null +++ b/scripts/mobiles/generic/droids/r4_base.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from resources.datatables import WeaponType +from resources.datatables import Difficulty +from resources.datatables import Options +from java.util import Vector + + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('r4') + mobileTemplate.setLevel(1) + mobileTemplate.setDifficulty(Difficulty.NORMAL) + + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setSocialGroup("astromech") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(Options.INVULNERABLE) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', WeaponType.UNARMED, 1.0, 6, 'kinetic') + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + templates = Vector() + templates.add('object/creature/npc/droid/shared_r4_base.iff') + mobileTemplate.setTemplates(templates) + + core.spawnService.addMobileTemplate('r4_base', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/droids/r5_base.py b/scripts/mobiles/generic/droids/r5_base.py new file mode 100644 index 00000000..86e87ef9 --- /dev/null +++ b/scripts/mobiles/generic/droids/r5_base.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from resources.datatables import WeaponType +from resources.datatables import Difficulty +from resources.datatables import Options +from java.util import Vector + + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('r5') + mobileTemplate.setLevel(1) + mobileTemplate.setDifficulty(Difficulty.NORMAL) + + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setSocialGroup("astromech") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(Options.INVULNERABLE) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', WeaponType.UNARMED, 1.0, 6, 'kinetic') + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + templates = Vector() + templates.add('object/creature/npc/droid/shared_r5_base.iff') + mobileTemplate.setTemplates(templates) + + core.spawnService.addMobileTemplate('r5_base', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/bek_rabor.py b/scripts/mobiles/generic/faction/imperial/bek_rabor.py new file mode 100644 index 00000000..79219f63 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/bek_rabor.py @@ -0,0 +1,36 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from resources.datatables import WeaponType +from resources.datatables import Difficulty +from resources.datatables import Options +from resources.datatables import FactionStatus +from java.util import Vector + + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('storyteller_imperial_officer') + mobileTemplate.setLevel(19) + mobileTemplate.setDifficulty(Difficulty.NORMAL) + + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setOptionsBitmask(Options.INVULNERABLE | Options.QUEST) + + templates = Vector() + templates.add('object/mobile/shared_dressed_npe_imperial_officer.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', WeaponType.CARBINE, 1.0, 15, 'energy') + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('bek_rabor', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/fbase_at_st.py b/scripts/mobiles/generic/faction/imperial/fbase_at_st.py new file mode 100644 index 00000000..b882294c --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/fbase_at_st.py @@ -0,0 +1,41 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from resources.datatables import WeaponType +from resources.datatables import Difficulty +from resources.datatables import Options +from resources.datatables import FactionStatus +from java.util import Vector + + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('fbase_at_st') + mobileTemplate.setLevel(90) + mobileTemplate.setDifficulty(Difficulty.NORMAL) + + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(FactionStatus.Combatant) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', WeaponType.CARBINE, 1.0, 15, 'energy') + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + templates = Vector() + templates.add('object/mobile/shared_atst.iff') + mobileTemplate.setTemplates(templates) + + core.spawnService.addMobileTemplate('fbase_at_st', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/juntah_herm.py b/scripts/mobiles/generic/faction/imperial/juntah_herm.py new file mode 100644 index 00000000..c2359579 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/juntah_herm.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from resources.datatables import WeaponType +from resources.datatables import Difficulty +from resources.datatables import Options +from resources.datatables import FactionStatus +from java.util import Vector + + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('storyteller_imperial_pilot') + mobileTemplate.setLevel(64) + mobileTemplate.setDifficulty(Difficulty.NORMAL) + + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setOptionsBitmask(Options.INVULNERABLE | Options.QUEST) + + templates = Vector() + templates.add('object/mobile/shared_tie_pilot_f.iff') + templates.add('object/mobile/shared_tie_pilot_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', WeaponType.CARBINE, 1.0, 15, 'energy') + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('juntah_herm', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/static_spawns/dantooine/imperial_outpost.py b/scripts/static_spawns/dantooine/imperial_outpost.py index d19b18d5..0e3b5c3a 100644 --- a/scripts/static_spawns/dantooine/imperial_outpost.py +++ b/scripts/static_spawns/dantooine/imperial_outpost.py @@ -1,10 +1,14 @@ import sys from resources.datatables import Options from resources.datatables import State +from java.util import Vector +import engine.resources.scene.Point3D + def addPlanetSpawns(core, planet): stcSvc = core.staticService objSvc = core.objectService + aiSvc = core.aiService stormtrooper1 = stcSvc.spawnObject('eow_fbase_stormtrooper', 'dantooine', long(0), float(-4211), float(3), float(-2384), float(0.011), float(0.999)) stormtrooper2 = stcSvc.spawnObject('eow_fbase_stormtrooper', 'dantooine', long(0), float(-4212), float(3), float(-2384), float(0.011), float(0.999)) @@ -12,18 +16,97 @@ def addPlanetSpawns(core, planet): stormtrooper4 = stcSvc.spawnObject('eow_fbase_stormtrooper', 'dantooine', long(0), float(-4212), float(3), float(-2386), float(0.011), float(0.999)) stormtrooper5 = stcSvc.spawnObject('eow_fbase_stormtrooper', 'dantooine', long(0), float(-4212), float(3), float(-2388), float(0.011), float(0.999)) + point1_1 = engine.resources.scene.Point3D(float(-4209), float(3), float(-2360)) + point1_2 = engine.resources.scene.Point3D(float(-4225), float(3), float(-2396)) + point1_3 = engine.resources.scene.Point3D(float(-4272), float(3), float(-2396)) + point1_4 = engine.resources.scene.Point3D(float(-4272), float(3), float(-2418)) + point1_5 = engine.resources.scene.Point3D(float(-4203), float(3), float(-2418)) + point1_6 = engine.resources.scene.Point3D(float(-4203), float(3), float(-2396)) + point1_7 = engine.resources.scene.Point3D(float(-4225), float(3), float(-2396)) + point1_8 = engine.resources.scene.Point3D(float(-4242), float(3), float(-2361)) + + patrolpoints1 = Vector() + patrolpoints1.add(point1_1) + patrolpoints1.add(point1_2) + patrolpoints1.add(point1_3) + patrolpoints1.add(point1_4) + patrolpoints1.add(point1_5) + patrolpoints1.add(point1_6) + patrolpoints1.add(point1_7) + patrolpoints1.add(point1_8) + aiSvc.setPatrol(stormtrooper1, patrolpoints1) + + aiSvc.setPatrol(stormtrooper2, patrolpoints1) + + aiSvc.setPatrol(stormtrooper3, patrolpoints1) + + aiSvc.setPatrol(stormtrooper4, patrolpoints1) + + aiSvc.setPatrol(stormtrooper5, patrolpoints1) + stormtrooper6 = stcSvc.spawnObject('eow_fbase_stormtrooper', 'dantooine', long(0), float(-4229), float(3), float(-2394), float(0.703), float(0.710)) corporal1 = stcSvc.spawnObject('eow_fbase_imperial_corporal', 'dantooine', long(0), float(-4228), float(3), float(-2395), float(0.703), float(0.710)) corporal2 = stcSvc.spawnObject('eow_fbase_imperial_corporal', 'dantooine', long(0), float(-4230), float(3), float(-2394), float(0.703), float(0.710)) - atst1 = stcSvc.spawnObject('object/mobile/shared_atst.iff', 'dantooine', long(0), float(-4291), float(3), float(-2433), float(0.819), float(-0.572)) - atst2 = stcSvc.spawnObject('object/mobile/shared_atst.iff', 'dantooine', long(0), float(-4154), float(3), float(-2383), float(0.264), float(0.964)) + point6_1 = engine.resources.scene.Point3D(float(-4209), float(3), float(-2360)) + point6_2 = engine.resources.scene.Point3D(float(-4245), float(3), float(-2382)) + point6_3 = engine.resources.scene.Point3D(float(-4212), float(3), float(-2388)) + patrolpoints6 = Vector() + patrolpoints6.add(point6_1) + patrolpoints6.add(point6_2) + patrolpoints6.add(point6_3) + aiSvc.setPatrol(stormtrooper6, patrolpoints6) + + aiSvc.setPatrol(corporal1, patrolpoints6) + + aiSvc.setPatrol(corporal2, patrolpoints6) - r5u0 = stcSvc.spawnObject('object/creature/npc/droid/shared_r4_base.iff', 'dantooine', long(0), float(-4231), float(3), float(-2363), float(0.264), float(0.964)) - r4h3 = stcSvc.spawnObject('object/creature/npc/droid/shared_r5_base.iff', 'dantooine', long(0), float(-4215), float(3), float(-2363), float(0.264), float(0.964)) + + stormtrooper7 = stcSvc.spawnObject('eow_fbase_stormtrooper', 'dantooine', long(0), float(-4199), float(3), float(-2396), float(0.011), float(0.999)) + stormtrooper8 = stcSvc.spawnObject('eow_fbase_stormtrooper', 'dantooine', long(0), float(-4199), float(3), float(-2395), float(0.011), float(0.999)) + stormtrooper9 = stcSvc.spawnObject('eow_fbase_stormtrooper', 'dantooine', long(0), float(-4199), float(3), float(-2394), float(0.011), float(0.999)) + point7_1 = engine.resources.scene.Point3D(float(-4209), float(3), float(-2360)) + point7_2 = engine.resources.scene.Point3D(float(-4225), float(3), float(-2396)) + point7_3 = engine.resources.scene.Point3D(float(-4272), float(3), float(-2396)) + point7_4 = engine.resources.scene.Point3D(float(-4272), float(3), float(-2418)) + point7_5 = engine.resources.scene.Point3D(float(-4203), float(3), float(-2418)) + point7_6 = engine.resources.scene.Point3D(float(-4203), float(3), float(-2396)) + point7_7 = engine.resources.scene.Point3D(float(-4225), float(3), float(-2396)) + point7_8 = engine.resources.scene.Point3D(float(-4242), float(3), float(-2361)) + + patrolpoints7 = Vector() + patrolpoints7.add(point7_1) + patrolpoints7.add(point7_2) + patrolpoints7.add(point7_3) + patrolpoints7.add(point7_4) + patrolpoints7.add(point7_5) + patrolpoints7.add(point7_6) + patrolpoints7.add(point7_7) + patrolpoints7.add(point7_8) + + aiSvc.setPatrol(stormtrooper7, patrolpoints7) + aiSvc.setPatrol(stormtrooper8, patrolpoints7) + aiSvc.setPatrol(stormtrooper9, patrolpoints7) + + atst1 = stcSvc.spawnObject('fbase_at_st', 'dantooine', long(0), float(-4291), float(3), float(-2433), float(0.819), float(-0.572)) + atst2 = stcSvc.spawnObject('fbase_at_st', 'dantooine', long(0), float(-4154), float(3), float(-2383), float(0.264), float(0.964)) + + aiSvc.setLoiter(atst1, float(5), float(10)) + aiSvc.setLoiter(atst2, float(5), float(10)) + + r5u0 = stcSvc.spawnObject('r4_base', 'dantooine', long(0), float(-4231), float(3), float(-2363), float(0.264), float(0.964)) + r4h3 = stcSvc.spawnObject('r5_base', 'dantooine', long(0), float(-4215), float(3), float(-2363), float(0.264), float(0.964)) + aiSvc.setLoiter(r5u0, float(4), float(5)) + aiSvc.setLoiter(r4h3, float(4), float(5)) + commoner1 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_fat_human_male_01.iff', 'dantooine', long(0), float(-4224), float(3), float(-2366), float(0.264), float(0.964)) - commoner1.setOptionsBitmask(256) + commoner1.setOptionsBitmask(Options.INVULNERABLE) commoner2 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_fat_human_female_01.iff', 'dantooine', long(0), float(-4238), float(3), float(-2365), float(0.264), float(0.964)) - commoner2.setOptionsBitmask(256) + commoner2.setOptionsBitmask(Options.INVULNERABLE) + + juntah_herm = stcSvc.spawnObject('juntah_herm', 'dantooine', long(0), float(-4223), float(3), float(-2380), float(0.264), float(0.964)) + + bek_rabor = stcSvc.spawnObject('bek_rabor', 'dantooine', long(0), float(-4228), float(3), float(-2380), float(0.264), float(0.964)) + return diff --git a/src/services/SimulationService.java b/src/services/SimulationService.java index 60c4b8a2..ffeae9f0 100644 --- a/src/services/SimulationService.java +++ b/src/services/SimulationService.java @@ -282,7 +282,9 @@ public class SimulationService implements INetworkDispatch { boolean success = quadTrees.get(object.getPlanet().getName()).put(newX, newZ, object); return success; } - System.out.println("Move failed."); + // Note: This sysout keeps getting spammed, so the quadtree remove fails for some reason + // The NPC does move though + //System.out.println("Move failed."); return false; } diff --git a/src/services/ai/AIActor.java b/src/services/ai/AIActor.java index 1e461e9c..b0489bd3 100644 --- a/src/services/ai/AIActor.java +++ b/src/services/ai/AIActor.java @@ -66,6 +66,15 @@ public class AIActor { private boolean isStalking = false; private byte milkState = 0; private boolean hasBeenHarvested = false; + private Vector patrolPoints; + private int patrolPointIndex = 0; + private String loiterDestType = "LOITER"; + private Point3D loiterDestination; + private Point3D originPosition; + private float minLoiterDist; + private float maxLoiterDist; + private String waitState = "NO"; + private long waitStartTime = 0L; public AIActor(CreatureObject creature, Point3D spawnPosition, ScheduledExecutorService scheduler) { this.creature = creature; @@ -374,4 +383,73 @@ public class AIActor { } } + public void setPatrolPoints(Vector patrolPoints){ + this.patrolPoints = patrolPoints; + setMovementPoints(patrolPoints); + } + + public int getPatrolPointIndex() { + return patrolPointIndex; + } + + public void setPatrolPointIndex(int patrolPointIndex) { + this.patrolPointIndex = patrolPointIndex; + } + + public Point3D getLoiterDestination() { + return loiterDestination; + } + + public void setLoiterDestination(Point3D loiterDestination) { + this.loiterDestination = loiterDestination; + } + + public Point3D getOriginPosition() { + return originPosition; + } + + public void setOriginPosition(Point3D originPosition) { + this.originPosition = originPosition; + } + + public String getLoiterDestType() { + return loiterDestType; + } + + public void setLoiterDestType(String loiterDestType) { + this.loiterDestType = loiterDestType; + } + + public float getMinLoiterDist() { + return minLoiterDist; + } + + public void setMinLoiterDist(float minLoiterDist) { + this.minLoiterDist = minLoiterDist; + } + + public float getMaxLoiterDist() { + return maxLoiterDist; + } + + public void setMaxLoiterDist(float maxLoiterDist) { + this.maxLoiterDist = maxLoiterDist; + } + + public String getWaitState() { + return waitState; + } + + public void setWaitState(String waitState) { + this.waitState = waitState; + } + + public long getWaitStartTime() { + return waitStartTime; + } + + public void setWaitStartTime(long waitStartTime) { + this.waitStartTime = waitStartTime; + } + } diff --git a/src/services/ai/AIService.java b/src/services/ai/AIService.java index 2b76826f..cc477b63 100644 --- a/src/services/ai/AIService.java +++ b/src/services/ai/AIService.java @@ -26,12 +26,16 @@ import java.util.Map.Entry; import java.util.Random; import java.util.Vector; +import resources.common.SpawnPoint; import resources.datatables.Difficulty; import resources.datatables.FactionStatus; import resources.datatables.GcwType; import resources.objects.creature.CreatureObject; import resources.objects.group.GroupObject; import resources.objects.player.PlayerObject; +import services.ai.states.IdleState; +import services.ai.states.LoiterState; +import services.ai.states.PatrolState; import engine.resources.objects.SWGObject; import engine.resources.scene.Point3D; import main.NGECore; @@ -164,4 +168,36 @@ public class AIService { } } + public void setPatrol(CreatureObject creature, Vector patrolpoints){ + AIActor actor = (AIActor) creature.getAttachment("AI"); + if (actor==null) + return; + + actor.setPatrolPoints(patrolpoints); + actor.setCurrentState(new PatrolState()); + } + + public void setPatrol(CreatureObject creature, boolean active){ + AIActor actor = (AIActor) creature.getAttachment("AI"); + if (actor==null) + return; + + if (active) + actor.setCurrentState(new PatrolState()); + else + actor.setCurrentState(new IdleState()); + } + + public void setLoiter(CreatureObject creature, float minDist, float maxDist){ + AIActor actor = (AIActor) creature.getAttachment("AI"); + if (actor==null) + return; + actor.setOriginPosition(creature.getWorldPosition()); + Point3D currentDestination = SpawnPoint.getRandomPosition(creature.getWorldPosition(), minDist, maxDist, creature.getPlanetId()); + actor.getMovementPoints().add(currentDestination); + actor.setLoiterDestination(currentDestination); + actor.setMinLoiterDist(minDist); + actor.setMaxLoiterDist(maxDist); + actor.setCurrentState(new LoiterState()); + } } diff --git a/src/services/ai/states/AIState.java b/src/services/ai/states/AIState.java index 286b51b8..b565ae7f 100644 --- a/src/services/ai/states/AIState.java +++ b/src/services/ai/states/AIState.java @@ -24,9 +24,9 @@ package services.ai.states; import java.util.Vector; import main.NGECore; - import engine.resources.scene.Point3D; import engine.resources.scene.Quaternion; +import resources.common.SpawnPoint; import resources.objects.cell.CellObject; import resources.objects.creature.CreatureObject; import resources.objects.weapon.WeaponObject; @@ -72,6 +72,11 @@ public abstract class AIState { } targetPosition = movementPoints.firstElement(); + + if (actor.getCurrentState().getClass().equals(PatrolState.class)){ + targetPosition = movementPoints.get(actor.getPatrolPointIndex()); + } + Vector path = core.aiService.findPath(creature.getPlanetId(), currentPosition, targetPosition); float distanceToTarget = targetPosition.getWorldPosition().getDistance(creature.getWorldPosition()); @@ -162,6 +167,112 @@ public abstract class AIState { return true; } + + public boolean findNewLoiterPosition(AIActor actor, float speed, float stopDistance, Point3D newPosition) { + + speed *= 0.5; // 2 updates per second + CreatureObject creature = actor.getCreature(); + NGECore core = NGECore.getInstance(); + Point3D currentPosition = creature.getPosition(); + Point3D targetPosition = null; + float maxDistance = stopDistance; + boolean finished = false; + float dx, dz, newX = 0, newY = 0, newZ = 0; + Vector movementPoints = actor.getMovementPoints(); + CellObject cell = null; + + targetPosition = actor.getLoiterDestination(); + + Vector path = core.aiService.findPath(creature.getPlanetId(), currentPosition, targetPosition); + + float distanceToTarget = targetPosition.getWorldPosition().getDistance(creature.getWorldPosition()); + + if(distanceToTarget > stopDistance) { + maxDistance = Math.min(speed, distanceToTarget - stopDistance); + } else { + return false; + } + + Point3D oldPosition = null; + float pathDistance = 0; + + for(int i = 1; i < path.size() && !finished; i++) { + + Point3D currentPathPosition = path.get(i); + cell = currentPathPosition.getCell(); + + if(oldPosition == null) + oldPosition = path.get(0); + Point3D oldWorldPos = oldPosition.getWorldPosition(); + + pathDistance += oldWorldPos.getDistance(currentPathPosition.getWorldPosition()); + if(pathDistance >= maxDistance || i == path.size() - 1 || currentPathPosition.getCell() != creature.getContainer()) { + + finished = true; + + if(currentPosition.getWorldPosition().getDistance(currentPathPosition.getWorldPosition()) <= stopDistance && cell == creature.getContainer()) { +// if(i == path.size() - 1) +// movementPoints.remove(0); + finished = false; + } else { + + if(cell == null) + oldPosition = oldPosition.getWorldPosition(); + else { + if(oldPosition.getCell() == null) + oldPosition = core.simulationService.convertPointToModelSpace(oldPosition, cell.getContainer()); + } + + if(pathDistance > maxDistance) { + + float distance = oldWorldPos.getDistance(currentPathPosition.getWorldPosition()); + float travelDistance = distance - (pathDistance - maxDistance); + // temp fix for melee npcs + travelDistance *= 1.3; + if(travelDistance <= 0) { + newX = currentPathPosition.x; + newZ = currentPathPosition.z; + } else { + + if(distance > 0) { + dx = currentPathPosition.x - oldPosition.x; + dz = currentPathPosition.z - oldPosition.z; + float deltaDist = (float) Math.sqrt((dx * dx) + (dz * dz)); + newX = (float) (oldPosition.x + (speed * (dx / deltaDist))); + newZ = (float) (oldPosition.z + (speed * (dz / deltaDist))); + + } else { + newX = currentPathPosition.x; + newZ = currentPathPosition.z; + } + + } + + if(cell == null) { + float height = core.terrainService.getHeight(creature.getPlanetId(), newX, newZ); + newY = height; + } else { + newY = currentPathPosition.y; + } + } + } + + } else { + newX = currentPathPosition.x; + newZ = currentPathPosition.z; + newY = core.terrainService.getHeight(creature.getPlanetId(), newX, newZ); + } + oldPosition = currentPathPosition; + } + + newPosition.x = newX; + newPosition.y = newY; + newPosition.z = newZ; + newPosition.setCell(cell); + + return true; + } + public void doMove(AIActor actor) { NGECore core = NGECore.getInstance(); @@ -207,5 +318,174 @@ public abstract class AIState { core.simulationService.moveObject(creature, newPosition, quaternion, creature.getMovementCounter(), speed, newPosition.getCell()); } + + public void doPatrol(AIActor actor) { + + NGECore core = NGECore.getInstance(); + + CreatureObject creature = actor.getCreature(); + if(creature.getPosture() == 14 || creature.getPosture() == 13) { + actor.setFollowObject(null); + return; + } + CreatureObject target = actor.getFollowObject(); + float speed = (float) creature.getWalkSpeed(); + float maxDistance = 6; + if(creature.getWeaponId() != 0) { + WeaponObject weapon = (WeaponObject) core.objectService.getObject(creature.getWeaponId()); + if(weapon != null) + maxDistance = weapon.getMaxRange() - 1; + } else if(creature.getSlottedObject("default_weapon") != null) { + WeaponObject weapon = (WeaponObject) creature.getSlottedObject("default_weapon"); + if(weapon != null) + maxDistance = weapon.getMaxRange() - 1; + } + Point3D currentPosition = creature.getWorldPosition(); + + if(target != null && !core.simulationService.checkLineOfSight(creature, target)) + maxDistance = 1; + + // Manage Patrol points + maxDistance = 1; + Point3D currentDestination = actor.getMovementPoints().get(actor.getPatrolPointIndex()); + //System.out.println("currentPosition.getDistance2D(currentDestination)<1) " + currentPosition.getDistance2D(currentDestination)); + if (currentPosition.getDistance2D(currentDestination)<2){ + if (actor.getPatrolPointIndex() 0.0f) { + quaternion.y *= -1; + quaternion.w *= -1; + } + +// if (newPosition.getCell()==null) +// System.out.println("newPosition.getCell() is NULL"); + + core.simulationService.moveObject(creature, newPosition, quaternion, creature.getMovementCounter(), speed, newPosition.getCell()); + + } + + public void doLoiter(AIActor actor) { + + NGECore core = NGECore.getInstance(); + + CreatureObject creature = actor.getCreature(); + if(creature.getPosture() == 14 || creature.getPosture() == 13) { + actor.setFollowObject(null); + return; + } + CreatureObject target = actor.getFollowObject(); + float speed = (float) creature.getWalkSpeed(); + float maxDistance = 6; + if(creature.getWeaponId() != 0) { + WeaponObject weapon = (WeaponObject) core.objectService.getObject(creature.getWeaponId()); + if(weapon != null) + maxDistance = weapon.getMaxRange() - 1; + } else if(creature.getSlottedObject("default_weapon") != null) { + WeaponObject weapon = (WeaponObject) creature.getSlottedObject("default_weapon"); + if(weapon != null) + maxDistance = weapon.getMaxRange() - 1; + } + Point3D currentPosition = creature.getWorldPosition(); + + if(target != null && !core.simulationService.checkLineOfSight(creature, target)) + maxDistance = 1; + + // Manage Loiter points + maxDistance = 1; + long waitTime = 10000; + + Point3D currentDestination = actor.getLoiterDestination(); + if (actor.getLoiterDestType().equals("LOITER")){ + + if (actor.getWaitState().equals("NO")){ + if (currentPosition.getDistance2D(currentDestination)<2){ + actor.setWaitState("WAIT"); + actor.setWaitStartTime(System.currentTimeMillis()); + } + } + + if (actor.getWaitState().equals("WAIT")){ + if (System.currentTimeMillis()-actor.getWaitStartTime()>waitTime){ + actor.setWaitState("NO"); + currentDestination = actor.getOriginPosition(); + actor.setLoiterDestType("ORIGIN"); + actor.setLoiterDestination(actor.getOriginPosition()); + } + } + +// if (currentPosition.getDistance2D(currentDestination)<2){ +// // wait +// core.scriptService.callScript("scripts/", "constructor_build_phase", "buildConstructor", core); +// currentDestination = actor.getOriginPosition(); +// actor.setLoiterDestType("ORIGIN"); +// actor.setLoiterDestination(actor.getOriginPosition()); +// } + } + if (actor.getLoiterDestType().equals("ORIGIN")){ + currentDestination = actor.getOriginPosition(); + + if (actor.getWaitState().equals("NO")){ + if (currentPosition.getDistance2D(currentDestination)<2){ + actor.setWaitState("WAIT"); + actor.setWaitStartTime(System.currentTimeMillis()); + } + } + + if (actor.getWaitState().equals("WAIT")){ + if (System.currentTimeMillis()-actor.getWaitStartTime()>waitTime){ + actor.setWaitState("NO"); + actor.setLoiterDestType("LOITER"); + currentDestination = SpawnPoint.getRandomPosition(currentPosition, actor.getMinLoiterDist(), actor.getMaxLoiterDist(), creature.getPlanetId()); + actor.setLoiterDestination(currentDestination); + } + } + +// if (currentPosition.getDistance2D(currentDestination)<2){ +// // wait +// core.scriptService.callScript("scripts/", "constructor_build_phase", "buildConstructor", core); +// actor.setLoiterDestType("LOITER"); +// currentDestination = SpawnPoint.getRandomPosition(currentPosition, actor.getMinLoiterDist(), actor.getMaxLoiterDist(), creature.getPlanetId()); +// actor.setLoiterDestination(currentDestination); +// } + } + + Point3D newPosition = new Point3D(); + boolean foundNewPos = findNewLoiterPosition(actor, speed, maxDistance, newPosition); + + if(!foundNewPos || (newPosition.x == 0 && newPosition.z == 0)) + return; + + Point3D newWorldPos = newPosition.getWorldPosition(); + float direction = (float) Math.atan2(newWorldPos.x - currentPosition.x, newWorldPos.z - currentPosition.z); + if(direction < 0) + direction = (float) (2 * Math.PI + direction); + Quaternion quaternion = new Quaternion((float) Math.cos(direction / 2), 0, (float) Math.sin(direction / 2), 0); + if (quaternion.y < 0.0f && quaternion.w > 0.0f) { + quaternion.y *= -1; + quaternion.w *= -1; + } + +// if (newPosition.getCell()==null) +// System.out.println("newPosition.getCell() is NULL"); + + core.simulationService.moveObject(creature, newPosition, quaternion, creature.getMovementCounter(), speed, newPosition.getCell()); + + } } diff --git a/src/services/ai/states/LoiterState.java b/src/services/ai/states/LoiterState.java new file mode 100644 index 00000000..1358185a --- /dev/null +++ b/src/services/ai/states/LoiterState.java @@ -0,0 +1,60 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package services.ai.states; + +import resources.objects.creature.CreatureObject; +import services.ai.AIActor; + +public class LoiterState extends AIState { + + @Override + public byte onEnter(AIActor actor) { + // TODO Auto-generated method stub + CreatureObject creature = actor.getCreature(); + if(creature.getPosture() == 14) + return StateResult.DEAD; + actor.scheduleMovement(); + actor.scheduleRecovery(); + return StateResult.UNFINISHED; + } + + @Override + public byte onExit(AIActor actor) { + // TODO Auto-generated method stub + return 0; + } + + @Override + public byte move(AIActor actor) { + // TODO Auto-generated method stub + doLoiter(actor); + actor.scheduleMovement(); + return StateResult.UNFINISHED; + } + + @Override + public byte recover(AIActor actor) { + // TODO Auto-generated method stub + return 0; + } + +} diff --git a/src/services/ai/states/PatrolState.java b/src/services/ai/states/PatrolState.java index fef5cb1a..27218b1c 100644 --- a/src/services/ai/states/PatrolState.java +++ b/src/services/ai/states/PatrolState.java @@ -21,6 +21,7 @@ ******************************************************************************/ package services.ai.states; +import resources.objects.creature.CreatureObject; import services.ai.AIActor; public class PatrolState extends AIState { @@ -28,7 +29,12 @@ public class PatrolState extends AIState { @Override public byte onEnter(AIActor actor) { // TODO Auto-generated method stub - return 0; + CreatureObject creature = actor.getCreature(); + if(creature.getPosture() == 14) + return StateResult.DEAD; + actor.scheduleMovement(); + actor.scheduleRecovery(); + return StateResult.UNFINISHED; } @Override @@ -40,7 +46,10 @@ public class PatrolState extends AIState { @Override public byte move(AIActor actor) { // TODO Auto-generated method stub - return 0; + //System.out.println("move in patrolState"); + doPatrol(actor); + actor.scheduleMovement(); + return StateResult.UNFINISHED; } @Override From e363a316a2f75a700a6752fd5ca734157f9669af Mon Sep 17 00:00:00 2001 From: CharonInferar Date: Sat, 28 Jun 2014 04:08:33 +0200 Subject: [PATCH 41/92] Nightsister Stronghold NPCs added Patrols done NS Quest NPCs added Mobile template alternate naming option considered Tool functions for easier static spawn creation written Client POI nobuild error fixed Client POI custom radius datatable added --- options.cfg | 2 +- scripts/commands/setgodmode.py | 33 ++++ scripts/mobiles/dathomir/baritha.py | 38 +++++ scripts/mobiles/dathomir/diax.py | 38 +++++ scripts/mobiles/dathomir/fath_hray.py | 37 +++++ scripts/mobiles/dathomir/gate_guardian.py | 38 +++++ scripts/mobiles/dathomir/gate_keeper.py | 38 +++++ scripts/mobiles/dathomir/gethzerion.py | 38 +++++ scripts/mobiles/dathomir/kais.py | 38 +++++ scripts/mobiles/dathomir/leandra.py | 38 +++++ .../mobiles/dathomir/nightsister_protector.py | 2 +- scripts/mobiles/dathomir/ns_pirate.py | 35 +++++ scripts/mobiles/dathomir/ns_vendor.py | 38 +++++ scripts/mobiles/dathomir/satra.py | 38 +++++ .../dathomir/singing_mtn_clan_outcast.py | 2 +- scripts/mobiles/dathomir/st_rancor_tamer.py | 38 +++++ .../generic/faction/imperial/bek_rabor.py | 3 +- .../faction/imperial/eow_scout_trooper.py | 41 +++++ .../generic/faction/imperial/juntah_herm.py | 3 +- .../dantooine/imperial_outpost.py | 135 +++++++++------- .../static_spawns/dathomir/ns_stronghold.py | 109 +++++++++++++ src/main/NGECore.java | 2 +- src/resources/datatables/ClientPOIRadius.java | 148 ++++++++++++++++++ src/services/DevService.java | 5 + src/services/TerrainService.java | 18 ++- src/services/ai/states/AIState.java | 33 +++- src/services/spawn/MobileTemplate.java | 18 +++ src/services/spawn/SpawnService.java | 10 +- 28 files changed, 941 insertions(+), 75 deletions(-) create mode 100644 scripts/mobiles/dathomir/baritha.py create mode 100644 scripts/mobiles/dathomir/diax.py create mode 100644 scripts/mobiles/dathomir/fath_hray.py create mode 100644 scripts/mobiles/dathomir/gate_guardian.py create mode 100644 scripts/mobiles/dathomir/gate_keeper.py create mode 100644 scripts/mobiles/dathomir/gethzerion.py create mode 100644 scripts/mobiles/dathomir/kais.py create mode 100644 scripts/mobiles/dathomir/leandra.py create mode 100644 scripts/mobiles/dathomir/ns_pirate.py create mode 100644 scripts/mobiles/dathomir/ns_vendor.py create mode 100644 scripts/mobiles/dathomir/satra.py create mode 100644 scripts/mobiles/dathomir/st_rancor_tamer.py create mode 100644 scripts/mobiles/generic/faction/imperial/eow_scout_trooper.py create mode 100644 scripts/static_spawns/dathomir/ns_stronghold.py create mode 100644 src/resources/datatables/ClientPOIRadius.java diff --git a/options.cfg b/options.cfg index 892ff452..64b699db 100644 --- a/options.cfg +++ b/options.cfg @@ -1,6 +1,6 @@ LOAD.SNAPSHOT_OBJECTS=1 LOAD.BUILDOUT_OBJECTS=1 -LOAD.BUILDOUT_ONLY_FOR="dantooine" +LOAD.BUILDOUT_ONLY_FOR="dathomir" LOAD.RESOURCE.SYSTEM=1 # Misc diff --git a/scripts/commands/setgodmode.py b/scripts/commands/setgodmode.py index 84cab742..a7da7dbc 100644 --- a/scripts/commands/setgodmode.py +++ b/scripts/commands/setgodmode.py @@ -3,6 +3,10 @@ from engine.resources.scene import Point3D from protocol.swg import ObjControllerMessage from protocol.swg import UnknownAbilityPacket from engine.resources.objects import SWGObject +from java.awt.datatransfer import StringSelection +from java.awt.datatransfer import Clipboard +from java.awt import Toolkit +#from decimal import Decimal def setup(): return @@ -132,6 +136,35 @@ def run(core, actor, target, commandString): elif command == 'spawnobj': pos = actor.getPosition() core.staticService.spawnObject(arg1, actor.getPlanet().getName(), 0, pos.x, pos.y, pos.z, 0, 0) + + elif command == 'showpos': + pos = actor.getPosition() + ori = actor.getOrientation() + cellid = 0 + planetName = actor.getPlanet().getName() + + actor.sendSystemMessage('Position.x : %s' % pos.x, 0) + actor.sendSystemMessage('Position.y : %s' % pos.y, 0) + actor.sendSystemMessage('Position.z : %s' % pos.z, 0) + actor.sendSystemMessage('Orientation.y : %s' % ori.y, 0) + actor.sendSystemMessage('Orientation.w : %s' % ori.w, 0) + if (actor.getContainer()): + cid = actor.getContainer().getObjectID() + cellid = cid + actor.sendSystemMessage('Cell ID : %s' % cid, 0) + + str = " = stcSvc.spawnObject('', '" + planetName + "', long(%s" % cellid + "), float(%.4f" % pos.x + "), float(%.4f" % pos.y + "), float(%.4f" % pos.z + "), float(%.4f" % ori.y + "), float(%.4f" % ori.w + "))" + toolkit = Toolkit.getDefaultToolkit() + clipboard = toolkit.getSystemClipboard() + clipboard.setContents(StringSelection(str), None) + + elif command == 'patrolpoint': + pos = actor.getPosition() + str = "patrolpoints.add(Point3D(float(%.2f" % pos.x + "), float(%.2f" % pos.y + "), float(%.2f" % pos.z + ")))" + toolkit = Toolkit.getDefaultToolkit() + clipboard = toolkit.getSystemClipboard() + clipboard.setContents(StringSelection(str), None) + actor.sendSystemMessage('Patrolpoint copied to clipboard', 0) elif command == 'unknownAbilityPacket' and arg1: packet = UnknownAbilityPacket(arg1) diff --git a/scripts/mobiles/dathomir/baritha.py b/scripts/mobiles/dathomir/baritha.py new file mode 100644 index 00000000..8f6b9c2a --- /dev/null +++ b/scripts/mobiles/dathomir/baritha.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from resources.datatables import WeaponType +from resources.datatables import Difficulty +from resources.datatables import Options +from java.util import Vector + + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('') + mobileTemplate.setCustomName('Baritha') + mobileTemplate.setLevel(81) + mobileTemplate.setDifficulty(Difficulty.ELITE) + + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(6) + mobileTemplate.setSocialGroup('nightsister') + mobileTemplate.setRespawnTime(300) + mobileTemplate.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + + templates = Vector() + templates.add('object/mobile/shared_dressed_dathomir_nightsister_spellweaver.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/sword/shared_sword_01.iff', WeaponType.ONEHANDEDMELEE, 1.0, 5, 'kinetic') + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('baritha', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/dathomir/diax.py b/scripts/mobiles/dathomir/diax.py new file mode 100644 index 00000000..48a304ae --- /dev/null +++ b/scripts/mobiles/dathomir/diax.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from resources.datatables import WeaponType +from resources.datatables import Difficulty +from resources.datatables import Options +from java.util import Vector + + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('') + mobileTemplate.setCustomName('Diax') + mobileTemplate.setLevel(81) + mobileTemplate.setDifficulty(Difficulty.ELITE) + + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(6) + mobileTemplate.setSocialGroup('nightsister') + mobileTemplate.setRespawnTime(300) + mobileTemplate.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + + templates = Vector() + templates.add('object/mobile/shared_dressed_dathomir_nightsister_rancor_tamer.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/sword/shared_sword_01.iff', WeaponType.ONEHANDEDMELEE, 1.0, 5, 'kinetic') + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('diax', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/dathomir/fath_hray.py b/scripts/mobiles/dathomir/fath_hray.py new file mode 100644 index 00000000..127ac798 --- /dev/null +++ b/scripts/mobiles/dathomir/fath_hray.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from resources.datatables import WeaponType +from resources.datatables import Difficulty +from resources.datatables import Options +from java.util import Vector + + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('fath_hray') + mobileTemplate.setLevel(81) + mobileTemplate.setDifficulty(Difficulty.ELITE) + + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(6) + mobileTemplate.setSocialGroup('nightsister') + mobileTemplate.setRespawnTime(300) + mobileTemplate.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + + templates = Vector() + templates.add('object/mobile/shared_dressed_dathomir_nightsister_rancor_tamer.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/sword/shared_sword_01.iff', WeaponType.ONEHANDEDMELEE, 1.0, 5, 'kinetic') + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('fath_hray', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/dathomir/gate_guardian.py b/scripts/mobiles/dathomir/gate_guardian.py new file mode 100644 index 00000000..dfe1a14f --- /dev/null +++ b/scripts/mobiles/dathomir/gate_guardian.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from resources.datatables import WeaponType +from resources.datatables import Difficulty +from resources.datatables import Options +from java.util import Vector + + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('') + mobileTemplate.setCustomName('Gate Guardian') + mobileTemplate.setLevel(81) + mobileTemplate.setDifficulty(Difficulty.ELITE) + + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(6) + mobileTemplate.setSocialGroup('nightsister') + mobileTemplate.setRespawnTime(300) + mobileTemplate.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + + templates = Vector() + templates.add('object/mobile/shared_dressed_dathomir_nightsister_protector.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/sword/shared_sword_01.iff', WeaponType.ONEHANDEDMELEE, 1.0, 5, 'kinetic') + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('gate_guardian', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/dathomir/gate_keeper.py b/scripts/mobiles/dathomir/gate_keeper.py new file mode 100644 index 00000000..19679a95 --- /dev/null +++ b/scripts/mobiles/dathomir/gate_keeper.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from resources.datatables import WeaponType +from resources.datatables import Difficulty +from resources.datatables import Options +from java.util import Vector + + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('') + mobileTemplate.setCustomName('Gate Keeper Seik') + mobileTemplate.setLevel(81) + mobileTemplate.setDifficulty(Difficulty.ELITE) + + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(6) + mobileTemplate.setSocialGroup('nightsister') + mobileTemplate.setRespawnTime(300) + mobileTemplate.setOptionsBitmask(Options.QUEST | Options.CONVERSABLE | Options.INVULNERABLE) + + templates = Vector() + templates.add('object/mobile/shared_dressed_dathomir_nightsister_protector.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/sword/shared_sword_01.iff', WeaponType.ONEHANDEDMELEE, 1.0, 5, 'kinetic') + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('gate_keeper', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/dathomir/gethzerion.py b/scripts/mobiles/dathomir/gethzerion.py new file mode 100644 index 00000000..59ec4b24 --- /dev/null +++ b/scripts/mobiles/dathomir/gethzerion.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from resources.datatables import WeaponType +from resources.datatables import Difficulty +from resources.datatables import Options +from java.util import Vector + + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('') + mobileTemplate.setCustomName('Gethzerion') + mobileTemplate.setLevel(81) + mobileTemplate.setDifficulty(Difficulty.ELITE) + + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(6) + mobileTemplate.setSocialGroup('nightsister') + mobileTemplate.setRespawnTime(300) + mobileTemplate.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + + templates = Vector() + templates.add('object/mobile/shared_dressed_dathomir_nightsister_rancor_tamer.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/sword/shared_sword_01.iff', WeaponType.ONEHANDEDMELEE, 1.0, 5, 'kinetic') + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('gethzerion', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/dathomir/kais.py b/scripts/mobiles/dathomir/kais.py new file mode 100644 index 00000000..a3203b34 --- /dev/null +++ b/scripts/mobiles/dathomir/kais.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from resources.datatables import WeaponType +from resources.datatables import Difficulty +from resources.datatables import Options +from java.util import Vector + + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('') + mobileTemplate.setCustomName('Kais') + mobileTemplate.setLevel(81) + mobileTemplate.setDifficulty(Difficulty.ELITE) + + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(6) + mobileTemplate.setSocialGroup('nightsister') + mobileTemplate.setRespawnTime(300) + mobileTemplate.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + + templates = Vector() + templates.add('object/mobile/shared_dressed_dathomir_nightsister_rancor_tamer.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/sword/shared_sword_01.iff', WeaponType.ONEHANDEDMELEE, 1.0, 5, 'kinetic') + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('kais', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/dathomir/leandra.py b/scripts/mobiles/dathomir/leandra.py new file mode 100644 index 00000000..a45ea660 --- /dev/null +++ b/scripts/mobiles/dathomir/leandra.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from resources.datatables import WeaponType +from resources.datatables import Difficulty +from resources.datatables import Options +from java.util import Vector + + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('') + mobileTemplate.setCustomName('Leandra') + mobileTemplate.setLevel(81) + mobileTemplate.setDifficulty(Difficulty.ELITE) + + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(6) + mobileTemplate.setSocialGroup('nightsister') + mobileTemplate.setRespawnTime(300) + mobileTemplate.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + + templates = Vector() + templates.add('object/mobile/shared_dressed_dathomir_nightsister_spellweaver.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/sword/shared_sword_01.iff', WeaponType.ONEHANDEDMELEE, 1.0, 5, 'kinetic') + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('leandra', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/dathomir/nightsister_protector.py b/scripts/mobiles/dathomir/nightsister_protector.py index f9087440..212104d3 100644 --- a/scripts/mobiles/dathomir/nightsister_protector.py +++ b/scripts/mobiles/dathomir/nightsister_protector.py @@ -23,7 +23,7 @@ def addTemplate(core): mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() - templates.add('object/mobile/shared_dressed_dathomir_nightsister_protector.iff') + templates.add('object/mobile/shared_dressed_dathomir_nightsister_rancor_tamer.iff') mobileTemplate.setTemplates(templates) weaponTemplates = Vector() diff --git a/scripts/mobiles/dathomir/ns_pirate.py b/scripts/mobiles/dathomir/ns_pirate.py new file mode 100644 index 00000000..a02a7e58 --- /dev/null +++ b/scripts/mobiles/dathomir/ns_pirate.py @@ -0,0 +1,35 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from resources.datatables import WeaponType +from resources.datatables import Difficulty +from resources.datatables import Options +from java.util import Vector + + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('pirate') + mobileTemplate.setLevel(90) + mobileTemplate.setDifficulty(Difficulty.NORMAL) + + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(6) + mobileTemplate.setRespawnTime(300) + + templates = Vector() + templates.add('object/mobile/shared_dressed_criminal_pirate_human_male_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', WeaponType.UNARMED, 1.0, 6, 'kinetic') + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('ns_pirate', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/dathomir/ns_vendor.py b/scripts/mobiles/dathomir/ns_vendor.py new file mode 100644 index 00000000..a4fcde11 --- /dev/null +++ b/scripts/mobiles/dathomir/ns_vendor.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from resources.datatables import WeaponType +from resources.datatables import Difficulty +from resources.datatables import Options +from java.util import Vector + + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('') + mobileTemplate.setCustomName('Nightsister Vendor') + mobileTemplate.setLevel(81) + mobileTemplate.setDifficulty(Difficulty.ELITE) + + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(6) + mobileTemplate.setSocialGroup('nightsister') + mobileTemplate.setRespawnTime(300) + mobileTemplate.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + + templates = Vector() + templates.add('object/mobile/shared_dressed_dathomir_nightsister_protector.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/sword/shared_sword_01.iff', WeaponType.ONEHANDEDMELEE, 1.0, 5, 'kinetic') + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('ns_vendor', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/dathomir/satra.py b/scripts/mobiles/dathomir/satra.py new file mode 100644 index 00000000..e4f73954 --- /dev/null +++ b/scripts/mobiles/dathomir/satra.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from resources.datatables import WeaponType +from resources.datatables import Difficulty +from resources.datatables import Options +from java.util import Vector + + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('') + mobileTemplate.setCustomName('Satra (Nightsister Herbalist)') + mobileTemplate.setLevel(81) + mobileTemplate.setDifficulty(Difficulty.ELITE) + + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(6) + mobileTemplate.setSocialGroup('nightsister') + mobileTemplate.setRespawnTime(300) + mobileTemplate.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + + templates = Vector() + templates.add('object/mobile/shared_dressed_dathomir_nightsister_protector.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/sword/shared_sword_01.iff', WeaponType.ONEHANDEDMELEE, 1.0, 5, 'kinetic') + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('satra', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/dathomir/singing_mtn_clan_outcast.py b/scripts/mobiles/dathomir/singing_mtn_clan_outcast.py index 5ca536aa..17dec8ef 100644 --- a/scripts/mobiles/dathomir/singing_mtn_clan_outcast.py +++ b/scripts/mobiles/dathomir/singing_mtn_clan_outcast.py @@ -55,4 +55,4 @@ def addTemplate(core): lootGroupChance_5 = 3 mobileTemplate.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) - core.spawnService.addMobileTemplate('singing_mtn_clan_initiate', mobileTemplate) \ No newline at end of file + core.spawnService.addMobileTemplate('singing_mtn_clan_outcast', mobileTemplate) \ No newline at end of file diff --git a/scripts/mobiles/dathomir/st_rancor_tamer.py b/scripts/mobiles/dathomir/st_rancor_tamer.py new file mode 100644 index 00000000..a502fa2a --- /dev/null +++ b/scripts/mobiles/dathomir/st_rancor_tamer.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from resources.datatables import WeaponType +from resources.datatables import Difficulty +from resources.datatables import Options +from java.util import Vector + + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('') + mobileTemplate.setCustomName('Rancor Tamer') + mobileTemplate.setLevel(81) + mobileTemplate.setDifficulty(Difficulty.ELITE) + + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(6) + mobileTemplate.setSocialGroup('nightsister') + mobileTemplate.setRespawnTime(300) + mobileTemplate.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + + templates = Vector() + templates.add('object/mobile/shared_dressed_dathomir_nightsister_rancor_tamer.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/sword/shared_sword_01.iff', WeaponType.ONEHANDEDMELEE, 1.0, 5, 'kinetic') + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('st_rancor_tamer', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/bek_rabor.py b/scripts/mobiles/generic/faction/imperial/bek_rabor.py index 79219f63..0475fe3c 100644 --- a/scripts/mobiles/generic/faction/imperial/bek_rabor.py +++ b/scripts/mobiles/generic/faction/imperial/bek_rabor.py @@ -11,7 +11,8 @@ from java.util import Vector def addTemplate(core): mobileTemplate = MobileTemplate() - mobileTemplate.setCreatureName('storyteller_imperial_officer') + mobileTemplate.setCreatureName('bek_rabor') + mobileTemplate.setStfFilename('npc_spawner_n') mobileTemplate.setLevel(19) mobileTemplate.setDifficulty(Difficulty.NORMAL) diff --git a/scripts/mobiles/generic/faction/imperial/eow_scout_trooper.py b/scripts/mobiles/generic/faction/imperial/eow_scout_trooper.py new file mode 100644 index 00000000..f2d422e1 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/eow_scout_trooper.py @@ -0,0 +1,41 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from resources.datatables import WeaponType +from resources.datatables import Difficulty +from resources.datatables import Options +from resources.datatables import FactionStatus +from java.util import Vector + + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('eow_scout_trooper') + mobileTemplate.setLevel(90) + mobileTemplate.setDifficulty(Difficulty.NORMAL) + + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(FactionStatus.Combatant) + + templates = Vector() + templates.add('object/mobile/shared_dressed_scout_trooper_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', WeaponType.CARBINE, 1.0, 15, 'energy') + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('eow_scout_trooper', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/juntah_herm.py b/scripts/mobiles/generic/faction/imperial/juntah_herm.py index c2359579..f9a7aa3e 100644 --- a/scripts/mobiles/generic/faction/imperial/juntah_herm.py +++ b/scripts/mobiles/generic/faction/imperial/juntah_herm.py @@ -11,7 +11,8 @@ from java.util import Vector def addTemplate(core): mobileTemplate = MobileTemplate() - mobileTemplate.setCreatureName('storyteller_imperial_pilot') + mobileTemplate.setCreatureName('juntah_herm') + mobileTemplate.setStfFilename('npc_spawner_n') mobileTemplate.setLevel(64) mobileTemplate.setDifficulty(Difficulty.NORMAL) diff --git a/scripts/static_spawns/dantooine/imperial_outpost.py b/scripts/static_spawns/dantooine/imperial_outpost.py index 0e3b5c3a..013124b1 100644 --- a/scripts/static_spawns/dantooine/imperial_outpost.py +++ b/scripts/static_spawns/dantooine/imperial_outpost.py @@ -2,7 +2,7 @@ import sys from resources.datatables import Options from resources.datatables import State from java.util import Vector -import engine.resources.scene.Point3D +from engine.resources.scene import Point3D def addPlanetSpawns(core, planet): @@ -16,78 +16,91 @@ def addPlanetSpawns(core, planet): stormtrooper4 = stcSvc.spawnObject('eow_fbase_stormtrooper', 'dantooine', long(0), float(-4212), float(3), float(-2386), float(0.011), float(0.999)) stormtrooper5 = stcSvc.spawnObject('eow_fbase_stormtrooper', 'dantooine', long(0), float(-4212), float(3), float(-2388), float(0.011), float(0.999)) - point1_1 = engine.resources.scene.Point3D(float(-4209), float(3), float(-2360)) - point1_2 = engine.resources.scene.Point3D(float(-4225), float(3), float(-2396)) - point1_3 = engine.resources.scene.Point3D(float(-4272), float(3), float(-2396)) - point1_4 = engine.resources.scene.Point3D(float(-4272), float(3), float(-2418)) - point1_5 = engine.resources.scene.Point3D(float(-4203), float(3), float(-2418)) - point1_6 = engine.resources.scene.Point3D(float(-4203), float(3), float(-2396)) - point1_7 = engine.resources.scene.Point3D(float(-4225), float(3), float(-2396)) - point1_8 = engine.resources.scene.Point3D(float(-4242), float(3), float(-2361)) - patrolpoints1 = Vector() - patrolpoints1.add(point1_1) - patrolpoints1.add(point1_2) - patrolpoints1.add(point1_3) - patrolpoints1.add(point1_4) - patrolpoints1.add(point1_5) - patrolpoints1.add(point1_6) - patrolpoints1.add(point1_7) - patrolpoints1.add(point1_8) - aiSvc.setPatrol(stormtrooper1, patrolpoints1) - - aiSvc.setPatrol(stormtrooper2, patrolpoints1) - - aiSvc.setPatrol(stormtrooper3, patrolpoints1) - - aiSvc.setPatrol(stormtrooper4, patrolpoints1) + patrolpoints1.add(Point3D(float(-4209), float(3), float(-2360))) + patrolpoints1.add(Point3D(float(-4225), float(3), float(-2396))) + patrolpoints1.add(Point3D(float(-4272), float(3), float(-2396))) + patrolpoints1.add(Point3D(float(-4272), float(3), float(-2418))) + patrolpoints1.add(Point3D(float(-4203), float(3), float(-2418))) + patrolpoints1.add(Point3D(float(-4203), float(3), float(-2396))) + patrolpoints1.add(Point3D(float(-4225), float(3), float(-2396))) + patrolpoints1.add(Point3D(float(-4242), float(3), float(-2361))) + aiSvc.setPatrol(stormtrooper1, patrolpoints1) + aiSvc.setPatrol(stormtrooper2, patrolpoints1) + aiSvc.setPatrol(stormtrooper3, patrolpoints1) + aiSvc.setPatrol(stormtrooper4, patrolpoints1) aiSvc.setPatrol(stormtrooper5, patrolpoints1) stormtrooper6 = stcSvc.spawnObject('eow_fbase_stormtrooper', 'dantooine', long(0), float(-4229), float(3), float(-2394), float(0.703), float(0.710)) corporal1 = stcSvc.spawnObject('eow_fbase_imperial_corporal', 'dantooine', long(0), float(-4228), float(3), float(-2395), float(0.703), float(0.710)) corporal2 = stcSvc.spawnObject('eow_fbase_imperial_corporal', 'dantooine', long(0), float(-4230), float(3), float(-2394), float(0.703), float(0.710)) - point6_1 = engine.resources.scene.Point3D(float(-4209), float(3), float(-2360)) - point6_2 = engine.resources.scene.Point3D(float(-4245), float(3), float(-2382)) - point6_3 = engine.resources.scene.Point3D(float(-4212), float(3), float(-2388)) patrolpoints6 = Vector() - patrolpoints6.add(point6_1) - patrolpoints6.add(point6_2) - patrolpoints6.add(point6_3) + patrolpoints6.add(Point3D(float(-4209), float(3), float(-2360))) + patrolpoints6.add(Point3D(float(-4245), float(3), float(-2382))) + patrolpoints6.add(Point3D(float(-4212), float(3), float(-2388))) + aiSvc.setPatrol(stormtrooper6, patrolpoints6) - aiSvc.setPatrol(corporal1, patrolpoints6) - aiSvc.setPatrol(corporal2, patrolpoints6) + #Group of 3 + stormtrooper7 = stcSvc.spawnObject('eow_fbase_stormtrooper', 'dantooine', long(0), float(-4212), float(3), float(-2395), float(0.011), float(0.999)) + stormtrooper8 = stcSvc.spawnObject('eow_fbase_stormtrooper', 'dantooine', long(0), float(-4212), float(3), float(-2396), float(0.011), float(0.999)) + stormtrooper9 = stcSvc.spawnObject('eow_fbase_stormtrooper', 'dantooine', long(0), float(-4214), float(3), float(-2396), float(0.011), float(0.999)) - stormtrooper7 = stcSvc.spawnObject('eow_fbase_stormtrooper', 'dantooine', long(0), float(-4199), float(3), float(-2396), float(0.011), float(0.999)) - stormtrooper8 = stcSvc.spawnObject('eow_fbase_stormtrooper', 'dantooine', long(0), float(-4199), float(3), float(-2395), float(0.011), float(0.999)) - stormtrooper9 = stcSvc.spawnObject('eow_fbase_stormtrooper', 'dantooine', long(0), float(-4199), float(3), float(-2394), float(0.011), float(0.999)) - point7_1 = engine.resources.scene.Point3D(float(-4209), float(3), float(-2360)) - point7_2 = engine.resources.scene.Point3D(float(-4225), float(3), float(-2396)) - point7_3 = engine.resources.scene.Point3D(float(-4272), float(3), float(-2396)) - point7_4 = engine.resources.scene.Point3D(float(-4272), float(3), float(-2418)) - point7_5 = engine.resources.scene.Point3D(float(-4203), float(3), float(-2418)) - point7_6 = engine.resources.scene.Point3D(float(-4203), float(3), float(-2396)) - point7_7 = engine.resources.scene.Point3D(float(-4225), float(3), float(-2396)) - point7_8 = engine.resources.scene.Point3D(float(-4242), float(3), float(-2361)) - patrolpoints7 = Vector() - patrolpoints7.add(point7_1) - patrolpoints7.add(point7_2) - patrolpoints7.add(point7_3) - patrolpoints7.add(point7_4) - patrolpoints7.add(point7_5) - patrolpoints7.add(point7_6) - patrolpoints7.add(point7_7) - patrolpoints7.add(point7_8) + patrolpoints7.add(Point3D(float(-4177), float(3), float(-2396))) + patrolpoints7.add(Point3D(float(-4177), float(3), float(-2419))) + patrolpoints7.add(Point3D(float(-4246), float(3), float(-2417))) + patrolpoints7.add(Point3D(float(-4246), float(3), float(-2396))) aiSvc.setPatrol(stormtrooper7, patrolpoints7) aiSvc.setPatrol(stormtrooper8, patrolpoints7) aiSvc.setPatrol(stormtrooper9, patrolpoints7) + + stormtrooper10 = stcSvc.spawnObject('eow_fbase_stormtrooper', 'dantooine', long(0), float(-4242), float(3), float(-2420), float(0.011), float(0.999)) + stormtrooper11 = stcSvc.spawnObject('eow_fbase_stormtrooper', 'dantooine', long(0), float(-4242), float(3), float(-2418), float(0.011), float(0.999)) + corporal3 = stcSvc.spawnObject('eow_fbase_imperial_corporal', 'dantooine', long(0), float(-4240), float(3), float(-2420), float(0.011), float(0.999)) + stormtrooper12 = stcSvc.spawnObject('eow_fbase_stormtrooper', 'dantooine', long(0), float(-4240), float(3), float(-2418), float(0.011), float(0.999)) + stormtrooper13 = stcSvc.spawnObject('eow_fbase_stormtrooper', 'dantooine', long(0), float(-4238), float(3), float(-2420), float(0.703), float(0.710)) + + patrolpoints8 = Vector() + patrolpoints8.add(Point3D(float(-4273), float(3), float(-2418))) + patrolpoints8.add(Point3D(float(-4273), float(3), float(-2396))) + patrolpoints8.add(Point3D(float(-4177), float(3), float(-2396))) + patrolpoints8.add(Point3D(float(-4177), float(3), float(-2418))) + patrolpoints8.add(Point3D(float(-4242), float(3), float(-2420))) + + aiSvc.setPatrol(stormtrooper10, patrolpoints8) + aiSvc.setPatrol(stormtrooper11, patrolpoints8) + aiSvc.setPatrol(stormtrooper12, patrolpoints8) + aiSvc.setPatrol(stormtrooper13, patrolpoints8) + aiSvc.setPatrol(corporal3, patrolpoints8) + + + #Outside perimeter patrol + stormtrooper14 = stcSvc.spawnObject('eow_fbase_stormtrooper', 'dantooine', long(0), float(-4282), float(3), float(-2366), float(0.011), float(0.999)) + stormtrooper15 = stcSvc.spawnObject('eow_fbase_stormtrooper', 'dantooine', long(0), float(-4284), float(3), float(-2366), float(0.011), float(0.999)) + stormtrooper16 = stcSvc.spawnObject('eow_fbase_stormtrooper', 'dantooine', long(0), float(-4284), float(3), float(-2362), float(0.011), float(0.999)) + + patrolpoints9 = Vector() + patrolpoints9.add(Point3D(float(-4298), float(3), float(-2399))) + patrolpoints9.add(Point3D(float(-4299), float(3), float(-2418))) + patrolpoints9.add(Point3D(float(-4266), float(3), float(-2453))) + patrolpoints9.add(Point3D(float(-4180), float(3), float(-2451))) + patrolpoints9.add(Point3D(float(-4146), float(3), float(-2420))) + patrolpoints9.add(Point3D(float(-4146), float(3), float(-2396))) + patrolpoints9.add(Point3D(float(-4195), float(3), float(-2332))) + patrolpoints9.add(Point3D(float(-4258), float(3), float(-2333))) + + aiSvc.setPatrol(stormtrooper14, patrolpoints9) + aiSvc.setPatrol(stormtrooper15, patrolpoints9) + aiSvc.setPatrol(stormtrooper16, patrolpoints9) + + atst1 = stcSvc.spawnObject('fbase_at_st', 'dantooine', long(0), float(-4291), float(3), float(-2433), float(0.819), float(-0.572)) atst2 = stcSvc.spawnObject('fbase_at_st', 'dantooine', long(0), float(-4154), float(3), float(-2383), float(0.264), float(0.964)) @@ -104,9 +117,19 @@ def addPlanetSpawns(core, planet): commoner1.setOptionsBitmask(Options.INVULNERABLE) commoner2 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_fat_human_female_01.iff', 'dantooine', long(0), float(-4238), float(3), float(-2365), float(0.264), float(0.964)) commoner2.setOptionsBitmask(Options.INVULNERABLE) + commoner3 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_fat_human_female_01.iff', 'dantooine', long(0), float(-4229), float(3), float(-2421), float(0.264), float(0.964)) + commoner3.setOptionsBitmask(Options.INVULNERABLE) + commoner4 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_old_human_female_02.iff', 'dantooine', long(0), float(-4212), float(3), float(-2411), float(0.264), float(0.964)) + commoner4.setOptionsBitmask(Options.INVULNERABLE) + commoner5 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_old_human_male_01.iff', 'dantooine', long(0), float(-4186), float(3), float(-2428), float(0.264), float(0.964)) + commoner5.setOptionsBitmask(Options.INVULNERABLE) + commoner6 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_old_human_male_02.iff', 'dantooine', long(0), float(-4245), float(3), float(-2371), float(0.264), float(0.964)) + commoner6.setOptionsBitmask(Options.INVULNERABLE) - juntah_herm = stcSvc.spawnObject('juntah_herm', 'dantooine', long(0), float(-4223), float(3), float(-2380), float(0.264), float(0.964)) - - bek_rabor = stcSvc.spawnObject('bek_rabor', 'dantooine', long(0), float(-4228), float(3), float(-2380), float(0.264), float(0.964)) + stormtrooper17 = stcSvc.spawnObject('eow_scout_trooper', 'dantooine', long(0), float(-4217), float(3), float(-2431), float(0.011), float(0.999)) + stormtrooper18 = stcSvc.spawnObject('eow_fbase_stormtrooper', 'dantooine', long(0), float(-4184), float(3), float(-2388), float(0.935), float(-0.354)) + + juntah_herm = stcSvc.spawnObject('juntah_herm', 'dantooine', long(0), float(-4223), float(3), float(-2380), float(0.992), float(-0.124)) + bek_rabor = stcSvc.spawnObject('bek_rabor', 'dantooine', long(0), float(-4228), float(3), float(-2380), float(0.992), float(-0.124)) return diff --git a/scripts/static_spawns/dathomir/ns_stronghold.py b/scripts/static_spawns/dathomir/ns_stronghold.py new file mode 100644 index 00000000..ad59f31a --- /dev/null +++ b/scripts/static_spawns/dathomir/ns_stronghold.py @@ -0,0 +1,109 @@ +import sys +from resources.datatables import Options +from resources.datatables import State +from java.util import Vector +from engine.resources.scene import Point3D + + +def addPlanetSpawns(core, planet): + stcSvc = core.staticService + objSvc = core.objectService + aiSvc = core.aiService + + # N Entrance Guards + ns_sentry1 = stcSvc.spawnObject('nightsister_sentry', 'dathomir', long(0), float(-4100), float(127), float(-100), float(0.55), float(0.83)) + ns_sentry2 = stcSvc.spawnObject('nightsister_sentry', 'dathomir', long(0), float(-4097), float(127), float(-101), float(0.55), float(0.83)) + ns_sentry3 = stcSvc.spawnObject('nightsister_sentry', 'dathomir', long(0), float(-4106), float(127), float(-103), float(0.55), float(0.83)) + ns_sentry4 = stcSvc.spawnObject('nightsister_sentry', 'dathomir', long(0), float(-4097), float(127), float(-104), float(0.55), float(0.83)) + ns_sentry5 = stcSvc.spawnObject('nightsister_sentry', 'dathomir', long(0), float(-4095), float(127), float(-105), float(0.55), float(0.83)) + + patrolpoints1 = Vector() + patrolpoints1.add(Point3D(float(-4062), float(126), float(-92))) + patrolpoints1.add(Point3D(float(-4019), float(124), float(-95))) + patrolpoints1.add(Point3D(float(-4003), float(123), float(-74))) + patrolpoints1.add(Point3D(float(-3972), float(126), float(-76))) + patrolpoints1.add(Point3D(float(-4003), float(123), float(-74))) + patrolpoints1.add(Point3D(float(-4019), float(124), float(-95))) + patrolpoints1.add(Point3D(float(-4100), float(127), float(-100))) + + aiSvc.setPatrol(ns_sentry1, patrolpoints1) + aiSvc.setPatrol(ns_sentry2, patrolpoints1) + aiSvc.setPatrol(ns_sentry3, patrolpoints1) + aiSvc.setPatrol(ns_sentry4, patrolpoints1) + aiSvc.setPatrol(ns_sentry5, patrolpoints1) + + # SW Entrance Guards + ns_sentry6 = stcSvc.spawnObject('nightsister_sentry', 'dathomir', long(0), float(-4009.7249), float(119.7003), float(-238.9914), float(-0.6984), float(0.7157)) + ns_sentry7 = stcSvc.spawnObject('nightsister_sentry', 'dathomir', long(0), float(-4008.7249), float(119.7003), float(-238.9914), float(-0.6984), float(0.7157)) + ns_sentry8 = stcSvc.spawnObject('nightsister_sentry', 'dathomir', long(0), float(-4007.7249), float(119.7003), float(-238.9914), float(-0.6984), float(0.7157)) + ns_sentry9 = stcSvc.spawnObject('nightsister_sentry', 'dathomir', long(0), float(-4006.7249), float(119.7003), float(-238.9914), float(-0.6984), float(0.7157)) + ns_sentry10 = stcSvc.spawnObject('nightsister_sentry', 'dathomir', long(0), float(-4005.7249), float(119.7003), float(-238.9914), float(-0.6984), float(0.7157)) + + patrolpoints2 = Vector() + patrolpoints2.add(Point3D(float(-4023.24), float(118.67), float(-242.87))) + patrolpoints2.add(Point3D(float(-4065.97), float(124.01), float(-278.84))) + patrolpoints2.add(Point3D(float(-4045.83), float(123.62), float(-299.27))) + patrolpoints2.add(Point3D(float(-4065.97), float(124.01), float(-278.84))) + patrolpoints2.add(Point3D(float(-4023.24), float(118.67), float(-242.87))) + patrolpoints2.add(Point3D(float(-4009.72), float(119.70), float(-238.99))) + + aiSvc.setPatrol(ns_sentry6, patrolpoints2) + aiSvc.setPatrol(ns_sentry7, patrolpoints2) + aiSvc.setPatrol(ns_sentry8, patrolpoints2) + aiSvc.setPatrol(ns_sentry9, patrolpoints2) + aiSvc.setPatrol(ns_sentry10, patrolpoints2) + + #NW Entrance Guards + ns_sentry11 = stcSvc.spawnObject('nightsister_sentry', 'dathomir', long(0), float(-4131.4868), float(125.9164), float(-127.0344), float(0.0496), float(0.9988)) + ns_sentry12 = stcSvc.spawnObject('nightsister_sentry', 'dathomir', long(0), float(-4131.4868), float(125.9164), float(-127.0344), float(0.0496), float(0.9988)) + ns_sentry13 = stcSvc.spawnObject('nightsister_sentry', 'dathomir', long(0), float(-4131.4868), float(125.9164), float(-127.0344), float(0.0496), float(0.9988)) + ns_sentry14 = stcSvc.spawnObject('nightsister_sentry', 'dathomir', long(0), float(-4131.4868), float(125.9164), float(-127.0344), float(0.0496), float(0.9988)) + ns_sentry15 = stcSvc.spawnObject('nightsister_sentry', 'dathomir', long(0), float(-4131.4868), float(125.9164), float(-127.0344), float(0.0496), float(0.9988)) + + patrolpoints3 = Vector() + patrolpoints3.add(Point3D(float(-4126.84), float(121.32), float(-93.56))) + patrolpoints3.add(Point3D(float(-4129.24), float(120.81), float(-23.27))) + patrolpoints3.add(Point3D(float(-4126.84), float(121.32), float(-93.56))) + patrolpoints3.add(Point3D(float(-4131.4868), float(125.9164), float(-127.0344))) + + aiSvc.setPatrol(ns_sentry11, patrolpoints3) + aiSvc.setPatrol(ns_sentry12, patrolpoints3) + aiSvc.setPatrol(ns_sentry13, patrolpoints3) + aiSvc.setPatrol(ns_sentry14, patrolpoints3) + aiSvc.setPatrol(ns_sentry15, patrolpoints3) + + # Quest NPCs etc. + ns_elder = stcSvc.spawnObject('nightsister_elder', 'dathomir', long(0), float(-3975), float(131), float(-158), float(0.992), float(-0.002)) + baritha = stcSvc.spawnObject('baritha', 'dathomir', long(0), float(-3976), float(131), float(-172), float(0.992), float(-0.124)) + fath_hray = stcSvc.spawnObject('fath_hray', 'dathomir', long(0), float(-4118), float(105), float(-156), float(0.992), float(-0.124)) + spell_leandra = stcSvc.spawnObject('leandra', 'dathomir', long(0), float(-4085), float(105), float(-210), float(0.992), float(-0.124)) + gate_guardian = stcSvc.spawnObject('gate_guardian', 'dathomir', long(0), float(-3999), float(105), float(-65), float(0.992), float(-0.124)) + gate_keeper = stcSvc.spawnObject('gate_keeper', 'dathomir', long(189375), float(0.5690), float(0.7599), float(-1.5566), float(-0.0166), float(0.9999)) + ns_vendor = stcSvc.spawnObject('ns_vendor', 'dathomir', long(189379), float(0.6680), float(0.7599), float(-53.5354), float(-0.0587), float(0.9983)) + satra = stcSvc.spawnObject('satra', 'dathomir', long(189378), float(-13.5346), float(0.7599), float(-12.9636), float(0.9879), float(-0.1549)) + rancor_tamer = stcSvc.spawnObject('st_rancor_tamer', 'dathomir', long(0), float(-4156), float(105), float(-83), float(0.992), float(-0.124)) + diax = stcSvc.spawnObject('diax', 'dathomir', long(189384), float(-19.0310), float(7.2190), float(-27.2504), float(0.6629), float(0.7487)) + kais = stcSvc.spawnObject('kais', 'dathomir', long(189382), float(13.62), float(7.21), float(-21.23), float(0.915), float(-0.402)) + gethzerion = stcSvc.spawnObject('gethzerion', 'dathomir', long(189383), float(0.109), float(7.21), float(-4.17), float(0.992), float(-0.119)) + + pirate1 = stcSvc.spawnObject('ns_pirate', 'dathomir', long(0), float(-3964.2300), float(131.6703), float(-201.5431), float(0.1860), float(0.9825)) + pirate2 = stcSvc.spawnObject('ns_pirate', 'dathomir', long(0), float(-3957.6968), float(131.5686), float(-190.7077), float(0.9335), float(-0.3585)) + aiSvc.setLoiter(pirate1, float(6), float(10)) + aiSvc.setLoiter(pirate2, float(6), float(10)) + + pirate3 = stcSvc.spawnObject('ns_pirate', 'dathomir', long(0), float(-3935.2058), float(130.9562), float(-198.1271), float(0.9974), float(-0.0719)) + pirate4 = stcSvc.spawnObject('ns_pirate', 'dathomir', long(0), float(-3934.0264), float(131.3799), float(-212.0725), float(-0.1989), float(0.9800)) + aiSvc.setLoiter(pirate3, float(6), float(10)) + aiSvc.setLoiter(pirate4, float(6), float(10)) + + pirate5 = stcSvc.spawnObject('ns_pirate', 'dathomir', long(0), float(-3951.2546), float(123.8093), float(-258.2355), float(0.9539), float(-0.3003)) + pirate6 = stcSvc.spawnObject('ns_pirate', 'dathomir', long(0), float(-3963.6440), float(122.6283), float(-270.6916), float(0.2454), float(0.9694)) + aiSvc.setLoiter(pirate5, float(6), float(10)) + aiSvc.setLoiter(pirate6, float(6), float(10)) + + pirate7 = stcSvc.spawnObject('ns_pirate', 'dathomir', long(0), float(-3959.8911), float(123.3668), float(-254.1581), float(0.3242), float(0.9460)) + pirate8 = stcSvc.spawnObject('ns_pirate', 'dathomir', long(0), float(-3950.1411), float(125.6901), float(-244.8228), float(0.9176), float(-0.3975)) + aiSvc.setLoiter(pirate7, float(6), float(10)) + aiSvc.setLoiter(pirate8, float(6), float(10)) + + return diff --git a/src/main/NGECore.java b/src/main/NGECore.java index 757f4d39..af65f16a 100644 --- a/src/main/NGECore.java +++ b/src/main/NGECore.java @@ -805,7 +805,7 @@ public class NGECore { public Vector getExcludedDevelopers(){ Vector excludedDevelopers = new Vector(); - excludedDevelopers.add("Charon"); + //excludedDevelopers.add("Charon"); // Feel free to add your OS user account name here to exclude yourself from loading buildouts and snapshots // without having to change options.cfg all the time return excludedDevelopers; diff --git a/src/resources/datatables/ClientPOIRadius.java b/src/resources/datatables/ClientPOIRadius.java new file mode 100644 index 00000000..c17ae3f6 --- /dev/null +++ b/src/resources/datatables/ClientPOIRadius.java @@ -0,0 +1,148 @@ +package resources.datatables; + +import java.util.HashMap; +import java.util.Map; + +public class ClientPOIRadius { + + public static Map radiusMap = new HashMap(); + static{ + radiusMap.put("@clientpoi_n:hideout", 150); + radiusMap.put("@clientpoi_n:corsecbase", 150); + radiusMap.put("@clientpoi_n:grandtheater", 150); + radiusMap.put("@clientpoi_n:crystalfountain", 150); + radiusMap.put("@clientpoi_n:agrilat", 150); + radiusMap.put("@clientpoi_n:drall", 150); + radiusMap.put("@clientpoi_n:nyax", 150); + radiusMap.put("@clientpoi_n:stronghold", 150); + radiusMap.put("@clientpoi_n:afarathu", 150); + radiusMap.put("@clientpoi_n:racingagrilat", 150); + radiusMap.put("@clientpoi_n:dantari1", 150); + radiusMap.put("@clientpoi_n:dantari2", 150); + radiusMap.put("@clientpoi_n:dantari3", 150); + radiusMap.put("@clientpoi_n:abandoned", 150); + radiusMap.put("@clientpoi_n:jeditemple", 250); + radiusMap.put("@clientpoi_n:cystalhunter", 150); + radiusMap.put("@clientpoi_n:janta", 150); + radiusMap.put("@clientpoi_n:mokk", 150); + radiusMap.put("@clientpoi_n:kunga", 150); + radiusMap.put("@clientpoi_n:warren", 150); + radiusMap.put("@clientpoi_n:prison", 150); + radiusMap.put("@clientpoi_n:lessersarlacc", 150); + radiusMap.put("@clientpoi_n:dathpod", 150); + radiusMap.put("@clientpoi_n:mistyfalls", 150); + radiusMap.put("@clientpoi_n:tarpit", 150); + radiusMap.put("@clientpoi_n:nightsister", 300); + radiusMap.put("@clientpoi_n:singing", 150); + radiusMap.put("@clientpoi_n:nightvssing", 150); + radiusMap.put("@clientpoi_n:nightspider", 150); + radiusMap.put("@clientpoi_n:slavecamp", 150); + radiusMap.put("@clientpoi_n:tree1", 150); + radiusMap.put("@clientpoi_n:tree2", 150); + radiusMap.put("@clientpoi_n:lake1", 150); + radiusMap.put("@clientpoi_n:lake2", 150); + radiusMap.put("@clientpoi_n:dulok1", 150); + radiusMap.put("@clientpoi_n:dulok2", 150); + radiusMap.put("@clientpoi_n:marauder", 150); + radiusMap.put("@clientpoi_n:korga", 150); + radiusMap.put("@clientpoi_n:orphan", 150); + radiusMap.put("@clientpoi_n:jinda", 150); + radiusMap.put("@clientpoi_n:dead_mysess", 150); + radiusMap.put("@clientpoi_n:dead_grave", 150); + radiusMap.put("@clientpoi_n:dead_web", 150); + radiusMap.put("@clientpoi_n:dead_entrance_dead", 150); + radiusMap.put("@clientpoi_n:dead_entrance_kkowir", 150); + radiusMap.put("@clientpoi_n:dead_kerritamba", 150); + radiusMap.put("@clientpoi_n:dead_arena", 150); + radiusMap.put("@clientpoi_n:dead_myyydril", 150); + radiusMap.put("@clientpoi_n:dead_abandon", 150); + radiusMap.put("@clientpoi_d:kash_etyyy_gate_to_kachirho", 150); + radiusMap.put("@clientpoi_n:kash_etyyy_rodian_hunters_camp", 150); + radiusMap.put("@clientpoi_n:kash_etyyy_hracca_glade_camp", 150); + radiusMap.put("@clientpoi_n:kash_etyyy_arcona_compound", 150); + radiusMap.put("@clientpoi_n:kashyyyk_kachirho", 150); + radiusMap.put("@clientpoi_n:kashyyyk_dead_forest", 150); + radiusMap.put("@clientpoi_n:kashyyyk_hunting_grounds", 150); + radiusMap.put("@clientpoi_n:kashyyyk_rryatt_trail", 150); + radiusMap.put("@clientpoi_n:kashyyyk_blackscale_compound", 150); + radiusMap.put("@clientpoi_n:kashyyyk_slave_camp_one", 150); + radiusMap.put("@clientpoi_n:kashyyyk_slave_camp_two", 150); + radiusMap.put("@clientpoi_n:kashyyyk_wookiee_village", 150); + radiusMap.put("@clientpoi_n:kashyyyk_rodian_hunters_camp", 150); + radiusMap.put("@clientpoi_n:volcano", 150); + radiusMap.put("@clientpoi_n:lokimpoutpost", 150); + radiusMap.put("@clientpoi_n:kimogilaskel", 150); + radiusMap.put("@clientpoi_n:kimogilatown", 150); + radiusMap.put("@clientpoi_n:canyoncosair", 150); + radiusMap.put("@clientpoi_n:bloodrazor", 150); + radiusMap.put("@clientpoi_n:droidcave", 150); + radiusMap.put("@clientpoi_n:greatmaze", 150); + radiusMap.put("@clientpoi_n:volcano_crash", 150); + radiusMap.put("@clientpoi_n:new_mining_facility", 150); + radiusMap.put("@clientpoi_n:old_mining_facility", 150); + radiusMap.put("@clientpoi_n:striking_mining_camp", 150); + radiusMap.put("@clientpoi_n:old_republic_research", 150); + radiusMap.put("@clientpoi_n:burning_plains", 150); + radiusMap.put("@clientpoi_n:crystal_flats", 150); + radiusMap.put("@clientpoi_n:berkens_flow", 150); + radiusMap.put("@clientpoi_n:mining_fields", 150); + radiusMap.put("@clientpoi_n:tulrus_isle", 150); + radiusMap.put("@clientpoi_n:central_volcano", 150); + radiusMap.put("@clientpoi_n:smoking_forest", 150); + radiusMap.put("@clientpoi_n:gungan", 150); + radiusMap.put("@clientpoi_n:theedfalls", 150); + radiusMap.put("@clientpoi_n:deejafalls", 150); + radiusMap.put("@clientpoi_n:amidalasbeach", 150); + radiusMap.put("@clientpoi_n:impvsgun", 150); + radiusMap.put("@clientpoi_n:mordran", 150); + radiusMap.put("@clientpoi_n:weaponfacility", 150); + radiusMap.put("@clientpoi_n:narglatch", 150); + radiusMap.put("@clientpoi_n:mauler", 150); + radiusMap.put("@clientpoi_n:racingkeren", 150); + radiusMap.put("@clientpoi_n:reboutpost", 150); + radiusMap.put("@clientpoi_n:kobala", 150); + radiusMap.put("@clientpoi_n:impencampment", 150); + radiusMap.put("@clientpoi_n:hyperdrive", 150); + radiusMap.put("@clientpoi_n:garyn", 150); + radiusMap.put("@clientpoi_n:borglebat", 150); + radiusMap.put("@clientpoi_n:cobral", 150); + radiusMap.put("@clientpoi_n:tortoncave", 150); + radiusMap.put("@clientpoi_n:poacher", 150); + radiusMap.put("@clientpoi_n:barkmite", 150); + radiusMap.put("@clientpoi_n:swamptown", 150); + radiusMap.put("@clientpoi_n:impoutpost", 150); + radiusMap.put("@clientpoi_n:creaturevillage", 150); + radiusMap.put("@clientpoi_n:impvsreb", 150); + radiusMap.put("@clientpoi_n:aqualishcave", 150); + radiusMap.put("@clientpoi_n:weapondepot", 150); + radiusMap.put("@clientpoi_n:detainment", 150); + radiusMap.put("@clientpoi_n:corvsflail", 150); + radiusMap.put("@clientpoi_n:flynock", 150); + radiusMap.put("@clientpoi_n:erransif", 150); + radiusMap.put("@clientpoi_n:aakuan", 150); + radiusMap.put("@clientpoi_n:khamurrabio", 150); + radiusMap.put("@clientpoi_n:decaymite", 150); + radiusMap.put("@clientpoi_n:binyare", 150); + radiusMap.put("@clientpoi_n:jabbaspalace", 150); + radiusMap.put("@clientpoi_n:forttusken", 150); + radiusMap.put("@clientpoi_n:jawatraders", 150); + radiusMap.put("@clientpoi_n:darklighter", 150); + radiusMap.put("@clientpoi_n:kraytgraveyard", 250); + radiusMap.put("@clientpoi_n:larshomestead", 150); + radiusMap.put("@clientpoi_n:kenobishouse", 150); + radiusMap.put("@clientpoi_n:sarlacc", 150); + radiusMap.put("@clientpoi_n:pod", 150); + radiusMap.put("@clientpoi_n:skeleton", 150); + radiusMap.put("@clientpoi_n:racingmosespa", 150); + radiusMap.put("@clientpoi_n:woolamander", 150); + radiusMap.put("@clientpoi_n:blueleaf", 150); + radiusMap.put("@clientpoi_n:exarkun", 150); + radiusMap.put("@clientpoi_n:massassi", 150); + } + + public ClientPOIRadius(){} + + public static int getRadius(String POIName){ + return radiusMap.get(POIName); + } +} diff --git a/src/services/DevService.java b/src/services/DevService.java index d0b1f39e..fcb5c294 100644 --- a/src/services/DevService.java +++ b/src/services/DevService.java @@ -150,6 +150,7 @@ public class DevService implements INetworkDispatch { suiOptions.put((long) 166, "Teleport to Imperial Op"); suiOptions.put((long) 167, "Teleport to Rebel Base "); suiOptions.put((long) 168, "Teleport to NS vs SMC Battle"); + suiOptions.put((long) 169, "Teleport to NS Stronghold"); suiOptions.put((long) 153, "Teleport to Force Crystal Hunter's Cave"); suiOptions.put((long) 121, "Teleport to Sandbox City"); } @@ -1280,6 +1281,10 @@ public class DevService implements INetworkDispatch { case 168: core.simulationService.transferToPlanet(player, core.terrainService.getPlanetByName("dathomir"), new Point3D(-2450,18,1521), player.getOrientation(), null); return; + + case 169: + core.simulationService.transferToPlanet(player, core.terrainService.getPlanetByName("dathomir"), new Point3D(-4002, 4, -58), player.getOrientation(), null); + return; case 123: TangibleObject arakydDroids = (TangibleObject) core.objectService.createObject("object/tangible/mission/shared_mission_bounty_droid_probot.iff", planet); diff --git a/src/services/TerrainService.java b/src/services/TerrainService.java index 1653690d..8bea9b00 100644 --- a/src/services/TerrainService.java +++ b/src/services/TerrainService.java @@ -30,6 +30,7 @@ import java.util.concurrent.ConcurrentHashMap; import resources.common.FileUtilities; import resources.common.collidables.CollidableCircle; +import resources.datatables.ClientPOIRadius; import services.playercities.ClientRegion; import engine.clientdata.ClientFileManager; import engine.clientdata.visitors.DatatableVisitor; @@ -58,20 +59,18 @@ public class TerrainService { for (int i = 0; i < poiTable.getRowCount(); i++) { - Planet planet = getPlanetByName((String) poiTable.getObject(i, 0)); + // Planet planet = getPlanetByName((String) poiTable.getObject(i, 0)); Has this ever worked? + Planet planet = getPlanetByName((String) poiTable.getObject(i, 2)); if(planet == null) continue; float x = (Float) poiTable.getObject(i, 4); float z = (Float) poiTable.getObject(i, 6); - - // Account for more extended no-build radii like they were on live - // Issue #849 - x *= 1.1; - z *= 1.1; - - CollidableCircle poiArea = new CollidableCircle(new Point3D(x, 0, z), 150, planet); + String POIName = (String) poiTable.getObject(i, 0); + int radius = ClientPOIRadius.getRadius(POIName); + + CollidableCircle poiArea = new CollidableCircle(new Point3D(x, 0, z), radius, planet); noBuildAreas.get(planet).add(poiArea); } @@ -97,6 +96,9 @@ public class TerrainService { float x = (Float) regionTable.getObject(i, 1); float z = (Float) regionTable.getObject(i, 2); float radius = (Float) regionTable.getObject(i, 3); + // Account for more extended no-build radii like they were on live + // Issue #849 + radius *= 1.1; CollidableCircle region = new CollidableCircle(new Point3D(x, 0, z), radius, planet); noBuildAreas.get(planet).add(region); diff --git a/src/services/ai/states/AIState.java b/src/services/ai/states/AIState.java index b565ae7f..d7354dc7 100644 --- a/src/services/ai/states/AIState.java +++ b/src/services/ai/states/AIState.java @@ -375,8 +375,21 @@ public abstract class AIState { // if (newPosition.getCell()==null) // System.out.println("newPosition.getCell() is NULL"); - - core.simulationService.moveObject(creature, newPosition, quaternion, creature.getMovementCounter(), speed, newPosition.getCell()); + try{ + core.simulationService.moveObject(creature, newPosition, quaternion, creature.getMovementCounter(), speed, newPosition.getCell()); + } catch (NullPointerException e) { + // Just to identify what exactly is null here + if (creature==null) + System.out.print("creature==null" ); + if (newPosition==null) + System.out.print("newPosition==null" ); + if (quaternion==null) + System.out.print("quaternion==null" ); + if (newPosition.getCell()==null) + System.out.print("newPosition.getCell()==null" ); + + System.out.print("creature.getMovementCounter() " + creature.getMovementCounter()); + } } @@ -484,7 +497,21 @@ public abstract class AIState { // if (newPosition.getCell()==null) // System.out.println("newPosition.getCell() is NULL"); - core.simulationService.moveObject(creature, newPosition, quaternion, creature.getMovementCounter(), speed, newPosition.getCell()); + try{ + core.simulationService.moveObject(creature, newPosition, quaternion, creature.getMovementCounter(), speed, newPosition.getCell()); + } catch (NullPointerException e) { + // Just to identify what exactly is null here + if (creature==null) + System.out.print("creature==null" ); + if (newPosition==null) + System.out.print("newPosition==null" ); + if (quaternion==null) + System.out.print("quaternion==null" ); + if (newPosition.getCell()==null) + System.out.print("newPosition.getCell()==null" ); + + System.out.print("creature.getMovementCounter() " + creature.getMovementCounter()); + } } diff --git a/src/services/spawn/MobileTemplate.java b/src/services/spawn/MobileTemplate.java index d0cc6c17..e6b61612 100644 --- a/src/services/spawn/MobileTemplate.java +++ b/src/services/spawn/MobileTemplate.java @@ -45,6 +45,8 @@ public class MobileTemplate implements Cloneable { private int difficulty = 0; private int health, action; private String creatureName; + private String StfFilename; + private String customName; private float scale = 1; private Vector weaponTemplates = new Vector(); private Vector weaponTemplateVector = new Vector(); @@ -333,5 +335,21 @@ public class MobileTemplate implements Cloneable { public Object clone() throws CloneNotSupportedException { return super.clone(); } + + public String getStfFilename() { + return StfFilename; + } + + public void setStfFilename(String stfFilename) { + StfFilename = stfFilename; + } + + public String getCustomName() { + return customName; + } + + public void setCustomName(String customName) { + this.customName = customName; + } } diff --git a/src/services/spawn/SpawnService.java b/src/services/spawn/SpawnService.java index 7de14991..1ba62fe8 100644 --- a/src/services/spawn/SpawnService.java +++ b/src/services/spawn/SpawnService.java @@ -108,8 +108,14 @@ public class SpawnService { creature.setFaction(mobileTemplate.getFaction()); creature.setFactionStatus(mobileTemplate.getFactionStatus()); creature.setPvpBitmask(mobileTemplate.getPvpBitmask()); - creature.setStfFilename("mob/creature_names"); // TODO: set other STFs for NPCs other than creatures - creature.setStfName(mobileTemplate.getCreatureName()); + if (mobileTemplate.getCustomName()==null){ + creature.setStfFilename("mob/creature_names"); // TODO: set other STFs for NPCs other than creatures -> DONE + if (mobileTemplate.getStfFilename()!=null) + creature.setStfFilename(mobileTemplate.getStfFilename()); + creature.setStfName(mobileTemplate.getCreatureName()); + } else { + creature.setCustomName(mobileTemplate.getCustomName()); // For cases where no STF name can be found! + } creature.setHeight(mobileTemplate.getScale()); int difficulty = mobileTemplate.getDifficulty(); creature.setDifficulty((byte) difficulty); From 9d0bf56efe700e1b8e4d470607cd79543664dcb2 Mon Sep 17 00:00:00 2001 From: Zing Date: Sat, 28 Jun 2014 20:23:39 -0700 Subject: [PATCH 42/92] Rebel rank reward system --- scripts/commands/setgodmode.py | 7 + scripts/conversation/reb_recruiter.py | 11 +- scripts/gcw_rewards_rebel.py | 1507 +++++++++++++++++ .../vehicle/barc_speeder_rebel_pcd.py | 13 + .../mobile/vehicle/barc_speeder_rebel.py | 10 +- .../collection/rare_pistol_blackfalcon.py | 1 - .../deed/vehicle_deed/barc_speeder_deed.py | 30 +- .../generic_usable/binoculars_s1_generic.py | 6 + .../generic_usable/binoculars_s2_generic.py | 10 + .../painting/painting_pvp_reward_rebel.py | 6 +- .../armor_rebel_spec_ops_belt.py | 15 + .../armor_rebel_spec_ops_bicep_l.py | 14 + .../armor_rebel_spec_ops_bicep_r.py | 14 + .../armor_rebel_spec_ops_boots.py | 14 + .../armor_rebel_spec_ops_bracer_l.py | 14 + .../armor_rebel_spec_ops_bracer_r.py | 14 + .../armor_rebel_spec_ops_chest_plate.py | 14 + .../armor_rebel_spec_ops_gloves.py | 14 + .../armor_rebel_spec_ops_helmet.py | 14 + .../armor_rebel_spec_ops_leggings.py | 14 + .../weapon/ranged/carbine/carbine_pvp.py | 18 + .../object/weapon/ranged/heavy/heavy_pvp.py | 18 + .../ranged/pistol/exceptional_pistol_rebel.py | 16 + .../object/weapon/ranged/pistol/pistol_pvp.py | 18 + .../object/weapon/ranged/rifle/rifle_pvp.py | 18 + 25 files changed, 1812 insertions(+), 18 deletions(-) create mode 100644 scripts/gcw_rewards_rebel.py create mode 100644 scripts/object/weapon/ranged/pistol/exceptional_pistol_rebel.py diff --git a/scripts/commands/setgodmode.py b/scripts/commands/setgodmode.py index 84cab742..ef902b72 100644 --- a/scripts/commands/setgodmode.py +++ b/scripts/commands/setgodmode.py @@ -3,6 +3,8 @@ from engine.resources.scene import Point3D from protocol.swg import ObjControllerMessage from protocol.swg import UnknownAbilityPacket from engine.resources.objects import SWGObject +from resources.datatables import GcwRank +from services.gcw import GCWService def setup(): return @@ -138,4 +140,9 @@ def run(core, actor, target, commandString): actor.getClient().getSession().write(packet.serialize()) actor.sendSystemMessage('Sent UnknownAbilityPacket for ability ' + arg1, 0) return + + elif command == 'rank' and arg1: + playerObject.setCurrentRank(int(arg1)) + print (playerObject.getCurrentRank()) + return return diff --git a/scripts/conversation/reb_recruiter.py b/scripts/conversation/reb_recruiter.py index d1b8a1a3..5c6ce3e7 100644 --- a/scripts/conversation/reb_recruiter.py +++ b/scripts/conversation/reb_recruiter.py @@ -126,13 +126,8 @@ def handleFirstScreen(core, actor, npc, selection): convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage("@conversation/faction_recruiter_rebel:s_332", percent, "TO", str(100 - percent))) return if selection == 2: - convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_76')) - - options = Vector() - options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_78'), 0)) - options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_360'), 1)) - convSvc.sendConversationOptions(actor, npc, options, handleSecondScreen) - + core.scriptService.callScript("scripts/", "gcw_rewards_rebel", "handleRebelItems1", core, actor, object, 0); + core.conversationService.sendStopConversation(actor, npc, 'conversation/faction_recruiter_rebel', 's_75') return return elif actor.getFaction() == 'rebel' and actor.getFactionStatus() == FactionStatus.SpecialForces: @@ -194,7 +189,7 @@ def handleSecondScreen(core, actor, npc, selection): options = Vector() options.add(ConversationOption(outOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_78'), 0)) - options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_360'), 1)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_75'), 1)) convSvc.sendConversationOptions(actor, npc, options, handleThirdScreen) return diff --git a/scripts/gcw_rewards_rebel.py b/scripts/gcw_rewards_rebel.py new file mode 100644 index 00000000..24920ad2 --- /dev/null +++ b/scripts/gcw_rewards_rebel.py @@ -0,0 +1,1507 @@ +from resources.common import RadialOptions +from resources.common import OutOfBand +from protocol.swg import ResourceListForSurveyMessage +from services.sui.SUIService import MessageBoxType +from services.sui.SUIWindow import Trigger +from java.util import Vector +from java.lang import System +from java.lang import Long +from java.util import Map +from java.util import TreeMap +from resources.datatables import GcwRank +import main.NGECore +from services.gcw import GCWService +import sys +import math + + +def handleRebelItems1 (core, owner, target, option): + actor = owner.getSlottedObject('ghost') + window = core.suiService.createSUIWindow('Script.listBox', owner, owner, 0); + window.setProperty('bg.caption.lblTitle:Text', 'Rebel Item Requisition') + window.setProperty('Prompt.lblPrompt:Text', 'Items') + if actor.getCurrentRank() == GcwRank.PRIVATE: + window.addListBoxMenuItem('Private',0) + window.setProperty('btnOk:visible', 'True') + window.setProperty('btnCancel:visible', 'True') + window.setProperty('btnOk:Text', '@ok') + window.setProperty('btnCancel:Text', '@cancel') + returnList = Vector() + returnList.add('List.lstList:SelectedRow') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, setRebelBox1Callback) + core.suiService.openSUIWindow(window); + + if actor.getCurrentRank() == GcwRank.TROOPER: + window.addListBoxMenuItem('Private',0) + window.addListBoxMenuItem('Trooper',1) + window.setProperty('btnOk:visible', 'True') + window.setProperty('btnCancel:visible', 'True') + window.setProperty('btnOk:Text', '@ok') + window.setProperty('btnCancel:Text', '@cancel') + returnList = Vector() + returnList.add('List.lstList:SelectedRow') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, setRebelBox1Callback) + core.suiService.openSUIWindow(window); + + + if actor.getCurrentRank() == GcwRank.HIGHTROOPER: + window.addListBoxMenuItem('Private',0) + window.addListBoxMenuItem('Trooper',1) + window.addListBoxMenuItem('High Trooper',2) + window.setProperty('btnOk:visible', 'True') + window.setProperty('btnCancel:visible', 'True') + window.setProperty('btnOk:Text', '@ok') + window.setProperty('btnCancel:Text', '@cancel') + returnList = Vector() + returnList.add('List.lstList:SelectedRow') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, setRebelBox1Callback) + core.suiService.openSUIWindow(window); + + + if actor.getCurrentRank() == GcwRank.SERGEANT: + window.addListBoxMenuItem('Private',0) + window.addListBoxMenuItem('Trooper',1) + window.addListBoxMenuItem('High Trooper',2) + window.addListBoxMenuItem('Sergeant',3) + returnList = Vector() + returnList.add('List.lstList:SelectedRow') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, setRebelBox1Callback) + core.suiService.openSUIWindow(window); + + + if actor.getCurrentRank() == GcwRank.SENIORSERGEANT: + window.addListBoxMenuItem('Private',0) + window.addListBoxMenuItem('Trooper',1) + window.addListBoxMenuItem('High Trooper',2) + window.addListBoxMenuItem('Sergeant',3) + window.addListBoxMenuItem('Senior Sergeant',4) + window.setProperty('btnOk:visible', 'True') + window.setProperty('btnCancel:visible', 'True') + window.setProperty('btnOk:Text', '@ok') + window.setProperty('btnCancel:Text', '@cancel') + returnList = Vector() + returnList.add('List.lstList:SelectedRow') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, setRebelBox1Callback) + core.suiService.openSUIWindow(window); + + + if actor.getCurrentRank() == GcwRank.SERGEANTMAJOR: + window.addListBoxMenuItem('Private',0) + window.addListBoxMenuItem('Trooper',1) + window.addListBoxMenuItem('High Trooper',2) + window.addListBoxMenuItem('Sergeant',3) + window.addListBoxMenuItem('Senior Sergeant',4) + window.addListBoxMenuItem('Sergeant Major',5) + window.setProperty('btnOk:visible', 'True') + window.setProperty('btnCancel:visible', 'True') + window.setProperty('btnOk:Text', '@ok') + window.setProperty('btnCancel:Text', '@cancel') + returnList = Vector() + returnList.add('List.lstList:SelectedRow') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, setRebelBox1Callback) + core.suiService.openSUIWindow(window); + + + if actor.getCurrentRank() == GcwRank.LIEUTENANT: + window.addListBoxMenuItem('Private',0) + window.addListBoxMenuItem('Trooper',1) + window.addListBoxMenuItem('High Trooper',2) + window.addListBoxMenuItem('Sergeant',3) + window.addListBoxMenuItem('Senior Sergeant',4) + window.addListBoxMenuItem('Sergeant Major',5) + window.addListBoxMenuItem('Lieutenant',6) + window.setProperty('btnOk:visible', 'True') + window.setProperty('btnCancel:visible', 'True') + window.setProperty('btnOk:Text', '@ok') + window.setProperty('btnCancel:Text', '@cancel') + returnList = Vector() + returnList.add('List.lstList:SelectedRow') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, setRebelBox1Callback) + core.suiService.openSUIWindow(window); + + + if actor.getCurrentRank() == GcwRank.CAPTAIN: + window.addListBoxMenuItem('Private',0) + window.addListBoxMenuItem('Trooper',1) + window.addListBoxMenuItem('High Trooper',2) + window.addListBoxMenuItem('Sergeant',3) + window.addListBoxMenuItem('Senior Sergeant',4) + window.addListBoxMenuItem('Sergeant Major',5) + window.addListBoxMenuItem('Lieutenant',6) + window.addListBoxMenuItem('Captain',7) + window.setProperty('btnOk:visible', 'True') + window.setProperty('btnCancel:visible', 'True') + window.setProperty('btnOk:Text', '@ok') + window.setProperty('btnCancel:Text', '@cancel') + returnList = Vector() + returnList.add('List.lstList:SelectedRow') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, setRebelBox1Callback) + core.suiService.openSUIWindow(window); + + + if actor.getCurrentRank() == GcwRank.MAJOR: + window.addListBoxMenuItem('Private',0) + window.addListBoxMenuItem('Trooper',1) + window.addListBoxMenuItem('High Trooper',2) + window.addListBoxMenuItem('Sergeant',3) + window.addListBoxMenuItem('Senior Sergeant',4) + window.addListBoxMenuItem('Sergeant Major',5) + window.addListBoxMenuItem('Lieutenant',6) + window.addListBoxMenuItem('Captain',7) + window.addListBoxMenuItem('Major',8) + window.setProperty('btnOk:visible', 'True') + window.setProperty('btnCancel:visible', 'True') + window.setProperty('btnOk:Text', '@ok') + window.setProperty('btnCancel:Text', '@cancel') + returnList = Vector() + returnList.add('List.lstList:SelectedRow') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, setRebelBox1Callback) + core.suiService.openSUIWindow(window); + + + if actor.getCurrentRank() == GcwRank.COMMANDER: + window.addListBoxMenuItem('Private',0) + window.addListBoxMenuItem('Trooper',1) + window.addListBoxMenuItem('High Trooper',2) + window.addListBoxMenuItem('Sergeant',3) + window.addListBoxMenuItem('Senior Sergeant',4) + window.addListBoxMenuItem('Sergeant Major',5) + window.addListBoxMenuItem('Lieutenant',6) + window.addListBoxMenuItem('Captain',7) + window.addListBoxMenuItem('Major',8) + window.addListBoxMenuItem('Commander',9) + window.setProperty('btnOk:visible', 'True') + window.setProperty('btnCancel:visible', 'True') + window.setProperty('btnOk:Text', '@ok') + window.setProperty('btnCancel:Text', '@cancel') + returnList = Vector() + returnList.add('List.lstList:SelectedRow') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, setRebelBox1Callback) + core.suiService.openSUIWindow(window); + + + if actor.getCurrentRank() == GcwRank.COLONEL: + window.addListBoxMenuItem('Private',0) + window.addListBoxMenuItem('Trooper',1) + window.addListBoxMenuItem('High Trooper',2) + window.addListBoxMenuItem('Sergeant',3) + window.addListBoxMenuItem('Senior Sergeant',4) + window.addListBoxMenuItem('Sergeant Major',5) + window.addListBoxMenuItem('Lieutenant',6) + window.addListBoxMenuItem('Captain',7) + window.addListBoxMenuItem('Major',8) + window.addListBoxMenuItem('Commander',9) + window.addListBoxMenuItem('Colonel',10) + window.setProperty('btnOk:visible', 'True') + window.setProperty('btnCancel:visible', 'True') + window.setProperty('btnOk:Text', '@ok') + window.setProperty('btnCancel:Text', '@cancel') + returnList = Vector() + returnList.add('List.lstList:SelectedRow') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, setRebelBox1Callback) + core.suiService.openSUIWindow(window); + + + if actor.getCurrentRank() == GcwRank.GENERAL: + window.addListBoxMenuItem('Private',0) + window.addListBoxMenuItem('Trooper',1) + window.addListBoxMenuItem('High Trooper',2) + window.addListBoxMenuItem('Sergeant',3) + window.addListBoxMenuItem('Senior Sergeant',4) + window.addListBoxMenuItem('Sergeant Major',5) + window.addListBoxMenuItem('Lieutenant',6) + window.addListBoxMenuItem('Captain',7) + window.addListBoxMenuItem('Major',8) + window.addListBoxMenuItem('Commander',9) + window.addListBoxMenuItem('Colonel',10) + window.addListBoxMenuItem('General',11) + window.setProperty('btnOk:visible', 'True') + window.setProperty('btnCancel:visible', 'True') + window.setProperty('btnOk:Text', '@ok') + window.setProperty('btnCancel:Text', '@cancel') + returnList = Vector() + returnList.add('List.lstList:SelectedRow') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, setRebelBox1Callback) + core.suiService.openSUIWindow(window); + + +def setRebelBox1Callback(owner, window, eventType, returnList): + + if returnList.size()==0: + owner.sendSystemMessage('NULL', 0) + return + + if returnList.get(0)=='0': + privateHandler(owner) + return + if returnList.get(0)=='1': + trooperHandler(owner) + return + if returnList.get(0)=='2': + highTrooperHandler(owner) + return + if returnList.get(0)=='3': + sergeantHandler(owner) + return + if returnList.get(0)=='4': + seniorSergeantHandler(owner) + return + if returnList.get(0)=='5': + sergeantMajorHandler(owner) + return + if returnList.get(0)=='6': + lieutenantHandler(owner) + return + if returnList.get(0)=='7': + captainHandler(owner) + return + if returnList.get(0)=='8': + majorHandler(owner) + return + if returnList.get(0)=='9': + commanderHandler(owner) + return + if returnList.get(0)=='10': + colonelHandler(owner) + return + if returnList.get(0)=='11': + generalHandler(owner) + return + + return + +def privateHandler(owner): + actor = owner.getSlottedObject('ghost') + core = main.NGECore.getInstance() + window = core.suiService.createSUIWindow('Script.listBox', owner, owner, 0); + window.setProperty('bg.caption.lblTitle:Text', 'Rebel Item Requisition') + window.setProperty('Prompt.lblPrompt:Text', 'Items') + #window.addListBoxMenuItem('R2 Droid Schematic 165000',0) + #window.addListBoxMenuItem('R3 Droid Schematic 180000',1) + #window.addListBoxMenuItem('R4 Droid Schematic 195000',2) + #window.addListBoxMenuItem('Sergical Droid Schematic 16500', 3) + #window.addListBoxMenuItem('Dead Eye Prototype 15000',4) + window.setProperty('btnOk:visible', 'True') + window.setProperty('btnCancel:visible', 'True') + window.setProperty('btnOk:Text', '@ok') + window.setProperty('btnCancel:Text', '@cancel') + returnList = Vector() + returnList.add('List.lstList:SelectedRow') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, privateRewards) + core.suiService.openSUIWindow(window); + return + +def trooperHandler(owner): + actor = owner.getSlottedObject('ghost') + core = main.NGECore.getInstance() + window = core.suiService.createSUIWindow('Script.listBox', owner, owner, 0); + window.setProperty('bg.caption.lblTitle:Text', 'Rebel Item Requisition') + window.setProperty('Prompt.lblPrompt:Text', 'Items') + window.addListBoxMenuItem('Tech Armoire 105000',0) + window.addListBoxMenuItem('Tech Bookcase 105000',1) + window.addListBoxMenuItem('Tech Cabinet 105000',2) + window.addListBoxMenuItem('Tech Chest 75000', 3) + window.addListBoxMenuItem('Tech Couch 112500',4) + window.addListBoxMenuItem('Tech Chair 75000',5) + window.addListBoxMenuItem('Tech Coffee Table 75000',6) + window.addListBoxMenuItem('Tech End Table 75000',7) + window.setProperty('btnOk:visible', 'True') + window.setProperty('btnCancel:visible', 'True') + window.setProperty('btnOk:Text', '@ok') + window.setProperty('btnCancel:Text', '@cancel') + returnList = Vector() + returnList.add('List.lstList:SelectedRow') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, trooperRewards) + core.suiService.openSUIWindow(window); + return + +def highTrooperHandler(owner): + actor = owner.getSlottedObject('ghost') + core = main.NGECore.getInstance() + window = core.suiService.createSUIWindow('Script.listBox', owner, owner, 0); + window.setProperty('bg.caption.lblTitle:Text', 'Rebel Item Requisition') + window.setProperty('Prompt.lblPrompt:Text', 'Items') + window.addListBoxMenuItem('Electrobinoculars 15000',0) + window.addListBoxMenuItem('Advanced Electrobinoculars 22500',1) + window.addListBoxMenuItem('Superior Electrobinoculars 30000',2) + window.addListBoxMenuItem('Experimental Electrobinoculars 37500', 3) + window.setProperty('btnOk:visible', 'True') + window.setProperty('btnCancel:visible', 'True') + window.setProperty('btnOk:Text', '@ok') + window.setProperty('btnCancel:Text', '@cancel') + returnList = Vector() + returnList.add('List.lstList:SelectedRow') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, highTrooperRewards) + core.suiService.openSUIWindow(window); + return + +def sergeantHandler(owner): + actor = owner.getSlottedObject('ghost') + core = main.NGECore.getInstance() + window = core.suiService.createSUIWindow('Script.listBox', owner, owner, 0); + window.setProperty('bg.caption.lblTitle:Text', 'Rebel Item Requisition') + window.setProperty('Prompt.lblPrompt:Text', 'Items') + window.addListBoxMenuItem('Laser Carbine 187500',0) + window.addListBoxMenuItem('Scout Pistol 40500',1) + window.addListBoxMenuItem('Metal Staff',2) + window.setProperty('btnOk:visible', 'True') + window.setProperty('btnCancel:visible', 'True') + window.setProperty('btnOk:Text', '@ok') + window.setProperty('btnCancel:Text', '@cancel') + returnList = Vector() + returnList.add('List.lstList:SelectedRow') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, sergeantRewards) + core.suiService.openSUIWindow(window); + return + +def seniorSergeantHandler(owner): + actor = owner.getSlottedObject('ghost') + core = main.NGECore.getInstance() + window = core.suiService.createSUIWindow('Script.listBox', owner, owner, 0); + window.setProperty('bg.caption.lblTitle:Text', 'Rebel Item Requisition') + window.setProperty('Prompt.lblPrompt:Text', 'Items') + window.addListBoxMenuItem('Small Block Turret 120000',0) + window.addListBoxMenuItem('Small Dish Turret 120000',1) + window.addListBoxMenuItem('Small Tower Turret 120000',2) + #window.addListBoxMenuItem('DRX-55 Mine 12000',3) + #window.addListBoxMenuItem('SR-88 Cyro Mine 12000',4) + #window.addListBoxMenuItem('XG Mine 12000',5) + window.addListBoxMenuItem('Painting We will never surrender 375000',6) + window.setProperty('btnOk:visible', 'True') + window.setProperty('btnCancel:visible', 'True') + window.setProperty('btnOk:Text', '@ok') + window.setProperty('btnCancel:Text', '@cancel') + returnList = Vector() + returnList.add('List.lstList:SelectedRow') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, seniorSergeantRewards) + core.suiService.openSUIWindow(window); + return + +def sergeantMajorHandler(owner): + actor = owner.getSlottedObject('ghost') + core = main.NGECore.getInstance() + window = core.suiService.createSUIWindow('Script.listBox', owner, owner, 0); + window.setProperty('bg.caption.lblTitle:Text', 'Rebel Item Requisition') + window.setProperty('Prompt.lblPrompt:Text', 'Items') + window.addListBoxMenuItem('Medium Block Turret 150000', 0) + window.addListBoxMenuItem('Medium Tower Turret 150000', 1) + window.addListBoxMenuItem('HQ Forward Outpost 525000', 2) + window.addListBoxMenuItem('HQ Field Hospital 1050000', 3) + window.addListBoxMenuItem('SF HQ Forward Outpost 750000' ,4) + window.addListBoxMenuItem('SF HQ Field Hospital 1500000', 5) + window.addListBoxMenuItem('Crimson Phoenix Medal of the Rebel Alliance 240000', 6) + window.setProperty('btnOk:visible', 'True') + window.setProperty('btnCancel:visible', 'True') + window.setProperty('btnOk:Text', '@ok') + window.setProperty('btnCancel:Text', '@cancel') + returnList = Vector() + returnList.add('List.lstList:SelectedRow') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, sergeantMajorRewards) + core.suiService.openSUIWindow(window); + return + +def lieutenantHandler(owner): + actor = owner.getSlottedObject('ghost') + core = main.NGECore.getInstance() + window = core.suiService.createSUIWindow('Script.listBox', owner, owner, 0); + window.setProperty('bg.caption.lblTitle:Text', 'Rebel Item Requisition') + window.setProperty('Prompt.lblPrompt:Text', 'Items') + window.addListBoxMenuItem('Large Block Turret 210000',0) + window.addListBoxMenuItem('Large Dish Turret 210000',1) + window.addListBoxMenuItem('Large Tower Turret 210000',2) + window.addListBoxMenuItem('HQ Tactical Center 1875000', 3) + window.addListBoxMenuItem('HQ Field Hospital 3600000',4) + window.addListBoxMenuItem('SF HQ Tactical Center 2325000',5) + window.addListBoxMenuItem('SF HQ Detachment Headquarters 4500000',6) + window.setProperty('btnOk:visible', 'True') + window.setProperty('btnCancel:visible', 'True') + window.setProperty('btnOk:Text', '@ok') + window.setProperty('btnCancel:Text', '@cancel') + returnList = Vector() + returnList.add('List.lstList:SelectedRow') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, lieutenantRewards) + core.suiService.openSUIWindow(window); + return + +def captainHandler(owner): + actor = owner.getSlottedObject('ghost') + core = main.NGECore.getInstance() + window = core.suiService.createSUIWindow('Script.listBox', owner, owner, 0); + window.setProperty('bg.caption.lblTitle:Text', 'Rebel Item Requisition') + window.setProperty('Prompt.lblPrompt:Text', 'Items') + window.addListBoxMenuItem('Factional Banner 81600', 0) + window.setProperty('btnOk:visible', 'True') + window.setProperty('btnCancel:visible', 'True') + window.setProperty('btnOk:Text', '@ok') + window.setProperty('btnCancel:Text', '@cancel') + returnList = Vector() + returnList.add('List.lstList:SelectedRow') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, captainRewards) + core.suiService.openSUIWindow(window); + return + +def majorHandler(owner): + actor = owner.getSlottedObject('ghost') + core = main.NGECore.getInstance() + window = core.suiService.createSUIWindow('Script.listBox', owner, owner, 0); + window.setProperty('bg.caption.lblTitle:Text', 'Rebel Item Requisition') + window.setProperty('Prompt.lblPrompt:Text', 'Items') + window.addListBoxMenuItem('Grey Spec Ops Armor Leggings 135000', 0) + window.addListBoxMenuItem('Grey Spec Ops Armor Belt 112500', 1) + window.addListBoxMenuItem('Grey Spec Ops Armor Boots 120000', 2) + window.addListBoxMenuItem('Technical Readout of an Rebel Spec Ops Armor Dye Kit 37500', 3) + window.setProperty('btnOk:visible', 'True') + window.setProperty('btnCancel:visible', 'True') + window.setProperty('btnOk:Text', '@ok') + window.setProperty('btnCancel:Text', '@cancel') + returnList = Vector() + returnList.add('List.lstList:SelectedRow') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, majorRewards) + core.suiService.openSUIWindow(window); + return + +def commanderHandler(owner): + actor = owner.getSlottedObject('ghost') + core = main.NGECore.getInstance() + window = core.suiService.createSUIWindow('Script.listBox', owner, owner, 0); + window.setProperty('bg.caption.lblTitle:Text', 'Rebel Item Requisition') + window.setProperty('Prompt.lblPrompt:Text', 'Items') + window.addListBoxMenuItem('Grey Spec Ops Armor Left Bicep 120000', 0) + window.addListBoxMenuItem('Grey Spec Ops Armor Right Bicep 120000', 1) + window.addListBoxMenuItem('Grey Spec Ops Armor Left Bracer 120000', 2) + window.addListBoxMenuItem('Grey Spec Ops Armor Right Bracer 120000', 3) + window.addListBoxMenuItem('Grey Spec Ops Armor Gloves 120000', 4) + window.addListBoxMenuItem('Grey Spec Ops Armor Helmet 150000', 5) + window.addListBoxMenuItem('Grey Spec Ops Armor Chest Plate 225000', 6) + window.setProperty('btnOk:visible', 'True') + window.setProperty('btnCancel:visible', 'True') + window.setProperty('btnOk:Text', '@ok') + window.setProperty('btnCancel:Text', '@cancel') + returnList = Vector() + returnList.add('List.lstList:SelectedRow') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, commanderRewards) + core.suiService.openSUIWindow(window); + return + +def colonelHandler(owner): + actor = owner.getSlottedObject('ghost') + core = main.NGECore.getInstance() + window = core.suiService.createSUIWindow('Script.listBox', owner, owner, 0); + window.setProperty('bg.caption.lblTitle:Text', 'Rebel Item Requisition') + window.setProperty('Prompt.lblPrompt:Text', 'Items') + window.addListBoxMenuItem('Colonel Ring 2800000', 0) + window.addListBoxMenuItem('BARC Command Vehicle 2100000', 1) + window.setProperty('btnOk:visible', 'True') + window.setProperty('btnCancel:visible', 'True') + window.setProperty('btnOk:Text', '@ok') + window.setProperty('btnCancel:Text', '@cancel') + returnList = Vector() + returnList.add('List.lstList:SelectedRow') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, colonelRewards) + core.suiService.openSUIWindow(window); + return + +def generalHandler(owner): + actor = owner.getSlottedObject('ghost') + core = main.NGECore.getInstance() + window = core.suiService.createSUIWindow('Script.listBox', owner, owner, 0); + window.setProperty('bg.caption.lblTitle:Text', 'Rebel Item Requisition') + window.setProperty('Prompt.lblPrompt:Text', 'Items') + window.addListBoxMenuItem('Windu\'s Guile 2000000', 0) + window.addListBoxMenuItem('Exceptional Rebel DL44 Pistol', 1) + window.addListBoxMenuItem('The Legendary Starlight Carbine 200000', 2) + window.addListBoxMenuItem('The Legendary Crimson Nova Pistol 200000', 3) + window.addListBoxMenuItem('The Legendary Vortex Rifle 200000', 4) + window.addListBoxMenuItem('The Legendary Reaper Cannon 200000', 5) + window.setProperty('btnOk:visible', 'True') + window.setProperty('btnCancel:visible', 'True') + window.setProperty('btnOk:Text', '@ok') + window.setProperty('btnCancel:Text', '@cancel') + returnList = Vector() + returnList.add('List.lstList:SelectedRow') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, generalRewards) + core.suiService.openSUIWindow(window); + return + +def privateRewards(owner, window, eventType, returnList): + + if returnList.size()==0: + return + + if returnList.get(0)=='0': + r2DroidSchematic(object, owner) + return + + if returnList.get(0)=='1': + r3DroidSchematic(object, owner) + return + + if returnList.get(0)=='2': + r4DroidSchematic(object, owner) + return + + if returnList.get(0)=='3': + r5DroidSchematic(object, owner) + return + + if returnList.get(0)=='4': + sergicalDroidSchematic(object, owner) + return + + if returnList.get(0)=='5': + deadEyePrototype(object, owner) + return + +def trooperRewards(owner, window, eventType, returnList): + + if returnList.size()==0: + return + + if returnList.get(0)=='0': + techArmoire(object, owner) + return + + if returnList.get(0)=='1': + techBookcase(object, owner) + return + + if returnList.get(0)=='2': + techCabinet(object, owner) + return + + if returnList.get(0)=='3': + techChest(object, owner) + return + + if returnList.get(0)=='4': + techCouch(object, owner) + return + + if returnList.get(0)=='5': + techChair(object, owner) + return + + if returnList.get(0)=='6': + techCoffeeTable(object, owner) + return + + if returnList.get(0)=='7': + techEndTable(object, owner) + return + +def highTrooperRewards(owner, window, eventType, returnList): + + if returnList.size()==0: + return + + if returnList.get(0)=='0': + electrobinoculars(object, owner) + return + + if returnList.get(0)=='1': + advancedElectrobinoculars(object, owner) + return + + if returnList.get(0)=='2': + superiorElectrobinoculars(object, owner) + return + + if returnList.get(0)=='3': + experimentalElectrobinoculars(object, owner) + return + +def sergeantRewards(owner, window, eventType, returnList): + + if returnList.size()==0: + return + + if returnList.get(0)=='0': + laserCarbine(object, owner) + return + + if returnList.get(0)=='1': + scoutPistol(object, owner) + return + + if returnList.get(0)=='2': + metalStaff(object, owner) + return + +def seniorSergeantRewards(owner, window, eventType, returnList): + + if returnList.size()==0: + return + + if returnList.get(0)=='0': + smallBlockTurret(object, owner) + return + + if returnList.get(0)=='1': + smallDishTurret(object, owner) + return + + if returnList.get(0)=='2': + smallTowerTurret(object, owner) + return + + if returnList.get(0)=='3': + drx55Mine(object, owner) + return + + if returnList.get(0)=='4': + sr88CryoMine(object, owner) + return + + if returnList.get(0)=='5': + xgMine(object, owner) + return + + if returnList.get(0)=='6': + paintingNeverSurrender(object, owner) + return + +def sergeantMajorRewards(owner, window, eventType, returnList): + + if returnList.size()==0: + return + + if returnList.get(0)=='0': + mediumBlockTurret(object, owner) + return + + if returnList.get(0)=='1': + mediumTowerTurret(object, owner) + return + + if returnList.get(0)=='2': + hqForwardOutpost(object, owner) + return + + if returnList.get(0)=='3': + hqFieldHospital(object, owner) + return + + if returnList.get(0)=='4': + sfhqForwardOutpost(object, owner) + return + + if returnList.get(0)=='5': + sfhqFieldHospital(object, owner) + return + + if returnList.get(0)=='6': + crimsonPhoenixMedal(object, owner) + return + +def lieutenantRewards(owner, window, eventType, returnList): + + if returnList.size()==0: + return + + if returnList.get(0)=='0': + largeBlockTurret(object, owner) + return + + if returnList.get(0)=='1': + largeDishTurret(object, owner) + return + + if returnList.get(0)=='2': + largeTowerTurret(object, owner) + return + + if returnList.get(0)=='3': + hqTacticalCenter(object, owner) + return + + if returnList.get(0)=='4': + hqFieldHospital(object, owner) + return + + if returnList.get(0)=='5': + sfhqTacticalCenter(object, owner) + return + + if returnList.get(0)=='6': + sfhqDetachmentHeadquarters(object, owner) + return + +def captainRewards(owner, window, eventType, returnList): + + if returnList.size()==0: + return + + if returnList.get(0)=='0': + factionalBanner(object, owner) + return + +def majorRewards(owner, window, eventType, returnList): + + if returnList.size()==0: + return + + if returnList.get(0)=='0': + specOpsLeggings(object, owner) + return + + if returnList.get(0)=='1': + specOpsBelt(object, owner) + return + + if returnList.get(0)=='2': + specOpsBoots(object, owner) + return + + if returnList.get(0)=='3': + specOpsDyeKit(object, owner) + return + +def commanderRewards(owner, window, eventType, returnList): + + if returnList.size()==0: + return + + if returnList.get(0)=='0': + specOpsLeftBicep(object, owner) + return + + if returnList.get(0)=='1': + specOpsRightBicep(object, owner) + return + + if returnList.get(0)=='2': + specOpsLeftBracer(object, owner) + return + + if returnList.get(0)=='3': + specOpsRightBracer(object, owner) + return + + if returnList.get(0)=='4': + specOpsGloves(object, owner) + return + + if returnList.get(0)=='5': + specOpsHelmet(object, owner) + return + + if returnList.get(0)=='6': + specOpsChestPlate(object, owner) + return + +def colonelRewards(owner, window, eventType, returnList): + + if returnList.size()==0: + return + + if returnList.get(0)=='0': + colonelRing(object, owner) + return + + if returnList.get(0)=='1': + barcSpeeder(object, owner) + return + + +def generalRewards(owner, window, eventType, returnList): + + if returnList.size()==0: + owner.sendSystemMessage('NULL', 0) + return + + if returnList.get(0)=='0': + windusGuile(object, owner) + return + + if returnList.get(0)=='1': + exceptionalPistol(object, owner) + return + + if returnList.get(0)=='2': + starlightCarbine(object, owner) + return + + if returnList.get(0)=='3': + crimsonNova(object, owner) + return + + if returnList.get(0)=='4': + vortexRifle(object, owner) + return + if returnList.get(0)=='5': + reaperCannon(object, owner) + return + +def r2DroidSchematic(object, owner): + if owner.getCashCredits() >= 165000: + owner.setCashCredits(owner.getCashCredits() - 165000) + core = main.NGECore.getInstance() + r2 = core.objectService.createObject('object/draft_schematic/droid/shared_droid_r2.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(r2) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def r3DroidSchematic(object, owner): + if owner.getCashCredits() >= 180000: + owner.setCashCredits(owner.getCashCredits() - 180000) + core = main.NGECore.getInstance() + r3 = core.objectService.createObject('object/draft_schematic/droid/shared_droid_r3.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(r3) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def r4DroidSchematic(object, owner): + if owner.getCashCredits() >= 195000: + owner.setCashCredits(owner.getCashCredits() - 195000) + core = main.NGECore.getInstance() + r4 = core.objectService.createObject('object/draft_schematic/droid/shared_droid_r4.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(r4) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def r5DroidSchematic(object, owner): + if owner.getCashCredits() >= 210000: + owner.setCashCredits(owner.getCashCredits() - 210000) + core = main.NGECore.getInstance() + r5 = core.objectService.createObject('object/draft_schematic/droid/shared_droid_r5.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(r5) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def sergicalDroidSchematic(object, owner): + if owner.getCashCredits() >= 16500: + owner.setCashCredits(owner.getCashCredits() - 16500) + core = main.NGECore.getInstance() + sergical = core.objectService.createObject('object/draft_schematic/droid/shared_droid_sergical.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(sergical) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def deadEyeSchematic(object, owner): + if owner.getCashCredits() >= 16000: + owner.setCashCredits(owner.getCashCredits() - 16000) + core = main.NGECore.getInstance() + deadeye = core.objectService.createObject('object/draft_schematic/item/theme_park/alderaan/shared_dead_eye_prototype.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(deadeye) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def techArmoire(object, owner): + if owner.getCashCredits() >= 105000: + owner.setCashCredits(owner.getCashCredits() - 105000) + core = main.NGECore.getInstance() + armoire = core.objectService.createObject('object/tangible/furniture/technical/shared_armoire_s01.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(armoire) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def techBookcase(object, owner): + if owner.getCashCredits() >= 105000: + owner.setCashCredits(owner.getCashCredits() - 105000) + core = main.NGECore.getInstance() + bookcase = core.objectService.createObject('object/tangible/furniture/technical/shared_bookcase_s01.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(bookcase) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def techCabinet(object, owner): + if owner.getCashCredits() >= 105000: + owner.setCashCredits(owner.getCashCredits() - 105000) + core = main.NGECore.getInstance() + cabinet = core.objectService.createObject('object/tangible/furniture/technical/shared_cabinet_s01.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(cabinet) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def techChest(object, owner): + if owner.getCashCredits() >= 75000: + owner.setCashCredits(owner.getCashCredits() - 75000) + core = main.NGECore.getInstance() + chest = core.objectService.createObject('object/tangible/furniture/technical/shared_chest_s01.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(chest) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def techCouch(object, owner): + if owner.getCashCredits() >= 112500: + owner.setCashCredits(owner.getCashCredits() - 112500) + core = main.NGECore.getInstance() + couch = core.objectService.createObject('object/tangible/furniture/technical/shared_couch_s01.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(couch) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def techChair(object, owner): + if owner.getCashCredits() >= 75000: + owner.setCashCredits(owner.getCashCredits() - 75000) + core = main.NGECore.getInstance() + chair = core.objectService.createObject('object/tangible/furniture/technical/shared_bookcase_s01.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(chair) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def techCoffeeTable(object, owner): + if owner.getCashCredits() >= 75000: + owner.setCashCredits(owner.getCashCredits() - 75000) + core = main.NGECore.getInstance() + coffeetable = core.objectService.createObject('object/tangible/furniture/technical/shared_coffee_table_s01.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(coffeetable) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def techEndTable(object, owner): + if owner.getCashCredits() >= 75000: + owner.setCashCredits(owner.getCashCredits() - 75000) + core = main.NGECore.getInstance() + endtable = core.objectService.createObject('object/tangible/furniture/technical/shared_end_table_s01.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(endtable) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def electrobinoculars(object, owner): + if owner.getCashCredits() >= 15000: + owner.setCashCredits(owner.getCashCredits() - 15000) + core = main.NGECore.getInstance() + electrobinoculars = core.objectService.createObject('object/tangible/loot/generic_usable/shared_binoculars_s2_generic.iff', owner.getPlanet()) + electrobinoculars.setAttachment('radial_filename', 'object/usable') + electrobinoculars.setStfFilename('static_item_n') + electrobinoculars.setStfName('item_consumable_detect_hidden_02_01') + electrobinoculars.setDetailFilename('static_item_d') + electrobinoculars.setDetailName('item_consumable_detect_hidden_02_01') + inventory = owner.getSlottedObject('inventory') + inventory.add(electrobinoculars) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def advancedElectrobinoculars(object, owner): + if owner.getCashCredits() >= 22500: + owner.setCashCredits(owner.getCashCredits() - 22500) + core = main.NGECore.getInstance() + electrobinoculars = core.objectService.createObject('object/tangible/loot/generic_usable/shared_binoculars_s2_generic.iff', owner.getPlanet()) + electrobinoculars.setAttachment('radial_filename', 'object/usable') + electrobinoculars.setStfFilename('static_item_n') + electrobinoculars.setStfName('item_consumable_detect_hidden_02_02') + electrobinoculars.setDetailFilename('static_item_d') + electrobinoculars.setDetailName('item_consumable_detect_hidden_02_02') + inventory = owner.getSlottedObject('inventory') + inventory.add(electrobinoculars) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def superiorElectrobinoculars(object, owner): + if owner.getCashCredits() >= 30000: + owner.setCashCredits(owner.getCashCredits() - 30000) + core = main.NGECore.getInstance() + electrobinoculars = core.objectService.createObject('object/tangible/loot/generic_usable/shared_binoculars_s2_generic.iff', owner.getPlanet()) + electrobinoculars.setAttachment('radial_filename', 'object/usable') + electrobinoculars.setStfFilename('static_item_n') + electrobinoculars.setStfName('item_consumable_detect_hidden_02_03') + electrobinoculars.setDetailFilename('static_item_d') + electrobinoculars.setDetailName('item_consumable_detect_hidden_02_03') + inventory = owner.getSlottedObject('inventory') + inventory.add(electrobinoculars) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def experimentalElectrobinoculars(object, owner): + if owner.getCashCredits() >= 37500: + owner.setCashCredits(owner.getCashCredits() - 37500) + core = main.NGECore.getInstance() + electrobinoculars = core.objectService.createObject('object/tangible/loot/generic_usable/shared_binoculars_s1_generic.iff', owner.getPlanet()) + electrobinoculars.setAttachment('radial_filename', 'object/usable') + electrobinoculars.setStfFilename('static_item_n') + electrobinoculars.setStfName('item_consumable_detect_hidden_02_04') + electrobinoculars.setDetailFilename('static_item_d') + electrobinoculars.setDetailName('item_consumable_detect_hidden_02_04') + inventory = owner.getSlottedObject('inventory') + inventory.add(electrobinoculars) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def smallBlockTurret(object, owner): + if owner.getCashCredits() >= 120000: + owner.setCashCredits(owner.getCashCredits() - 120000) + core = main.NGECore.getInstance() + turret = core.objectService.createObject('object/tangible/deed/faction_perk/turret/shared_block_sm_deed.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(turret) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def smallDishTurret(object, owner): + if owner.getCashCredits() >= 120000: + owner.setCashCredits(owner.getCashCredits() - 120000) + core = main.NGECore.getInstance() + turret = core.objectService.createObject('object/tangible/deed/faction_perk/turret/shared_dish_sm_deed.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(turret) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def smallTowerTurret(object, owner): + if owner.getCashCredits() >= 120000: + owner.setCashCredits(owner.getCashCredits() - 120000) + core = main.NGECore.getInstance() + turret = core.objectService.createObject('object/tangible/deed/faction_perk/turret/shared_tower_sm_deed.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(turret) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def drx55Mine(object, owner): + if owner.getCashCredits() >= 12000: + owner.setCashCredits(owner.getCashCredits() - 12000) + core = main.NGECore.getInstance() + mine = core.objectService.createObject('object/weapon/mine/shared_wp_mine_drx55.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(mine) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def sr88CryoMine(object, owner): + if owner.getCashCredits() >= 12000: + owner.setCashCredits(owner.getCashCredits() - 12000) + core = main.NGECore.getInstance() + mine = core.objectService.createObject('object/weapon/mine/shared_wp_mine_anti_vehicle.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(mine) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def xgMine(object, owner): + if owner.getCashCredits() >= 12000: + owner.setCashCredits(owner.getCashCredits() - 12000) + core = main.NGECore.getInstance() + mine = core.objectService.createObject('object/weapon/mine/shared_wp_mine_xg.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(mine) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def barcSpeeder(object, owner): + if owner.getCashCredits() >= 2100000: + owner.setCashCredits(owner.getCashCredits() - 2100000) + core = main.NGECore.getInstance() + barc = core.objectService.createObject('object/tangible/deed/vehicle_deed/shared_barc_speeder_deed.iff', owner.getPlanet()) + barc.setStfFilename('static_item_n') + barc.setStfName('item_deed_barc_rebel_06_01') + barc.setDetailFilename('static_item_d') + barc.setDetailName('item_deed_barc_rebel_06_01') + barc.setIntAttribute('no_trade', 1) + inventory = owner.getSlottedObject('inventory') + inventory.add(barc) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def mediumBlockTurret(object, owner): + if owner.getCashCredits() >= 150000: + owner.setCashCredits(owner.getCashCredits() - 150000) + core = main.NGECore.getInstance() + turret = core.objectService.createObject('object/tangible/deed/faction_perk/turret/shared_block_med_deed.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(turret) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def mediumTowerTurret(object, owner): + if owner.getCashCredits() >= 150000: + owner.setCashCredits(owner.getCashCredits() - 150000) + core = main.NGECore.getInstance() + turret = core.objectService.createObject('object/tangible/deed/faction_perk/turret/shared_tower_med_deed.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(turret) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def hqForwardOutpost(object, owner): + if owner.getCashCredits() >= 525000: + owner.setCashCredits(owner.getCashCredits() - 525000) + core = main.NGECore.getInstance() + hq = core.objectService.createObject('object/tangible/deed/faction_perk/hq/shared_hq_s01.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(hq) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def hqFieldHospital(object, owner): + if owner.getCashCredits() >= 1050000: + owner.setCashCredits(owner.getCashCredits() - 4500000) + core = main.NGECore.getInstance() + hq = core.objectService.createObject('object/tangible/deed/faction_perk/hq/shared_hq_s02.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(hq) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def sfhqForwardOutpost(object, owner): + if owner.getCashCredits() >= 750000: + owner.setCashCredits(owner.getCashCredits() - 750000) + core = main.NGECore.getInstance() + hq = core.objectService.createObject('object/tangible/deed/faction_perk/hq/shared_hq_s01_pvp.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(hq) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def hqTacticalCenter(object, owner): + if owner.getCashCredits() >= 1875000: + owner.setCashCredits(owner.getCashCredits() - 1875000) + core = main.NGECore.getInstance() + hq = core.objectService.createObject('object/tangible/deed/faction_perk/hq/shared_hq_s03.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(hq) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def sfhqTacticalCenter(object, owner): + if owner.getCashCredits() >= 2325000: + owner.setCashCredits(owner.getCashCredits() - 2325000) + core = main.NGECore.getInstance() + hq = core.objectService.createObject('object/tangible/deed/faction_perk/hq/shared_hq_s03_pvp.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(hq) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def sfhqDetachmentHeadquarters(object, owner): + if owner.getCashCredits() >= 4500000: + owner.setCashCredits(owner.getCashCredits() - 4500000) + core = main.NGECore.getInstance() + hq = core.objectService.createObject('object/tangible/deed/faction_perk/hq/shared_hq_s04_pvp.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(hq) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def largeBlockTurret(object, owner): + if owner.getCashCredits() >= 210000: + owner.setCashCredits(owner.getCashCredits() - 210000) + core = main.NGECore.getInstance() + turret = core.objectService.createObject('object/tangible/deed/faction_perk/turret/shared_block_lg_deed.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(turret) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def largeDishTurret(object, owner): + if owner.getCashCredits() >= 210000: + owner.setCashCredits(owner.getCashCredits() - 210000) + core = main.NGECore.getInstance() + turret = core.objectService.createObject('object/tangible/deed/faction_perk/turret/shared_dish_lg_deed.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(turret) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def largeTowerTurret(object, owner): + if owner.getCashCredits() >= 210000: + owner.setCashCredits(owner.getCashCredits() - 210000) + core = main.NGECore.getInstance() + turret = core.objectService.createObject('object/tangible/deed/faction_perk/turret/shared_tower_lg_deed.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(turret) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def specOpsLeggings(object, owner): + if owner.getCashCredits() >= 135000: + owner.setCashCredits(owner.getCashCredits() - 135000) + core = main.NGECore.getInstance() + print ('test1') + leggings = core.objectService.createObject('object/tangible/wearables/armor/rebel_assault/shared_armor_rebel_spec_ops_leggings.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(leggings) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def specOpsBelt(object, owner): + if owner.getCashCredits() >= 112500: + owner.setCashCredits(owner.getCashCredits() - 112500) + core = main.NGECore.getInstance() + belt = core.objectService.createObject('object/tangible/wearables/armor/rebel_assault/shared_armor_rebel_spec_ops_belt.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(belt) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def specOpsBoots(object, owner): + if owner.getCashCredits() >= 120000: + owner.setCashCredits(owner.getCashCredits() - 120000) + core = main.NGECore.getInstance() + boots = core.objectService.createObject('object/tangible/wearables/armor/rebel_assault/shared_armor_rebel_spec_ops_boots.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(boots) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def specOpsLeftBicep(object, owner): + if owner.getCashCredits() >= 120000: + owner.setCashCredits(owner.getCashCredits() - 120000) + core = main.NGECore.getInstance() + bicepl = core.objectService.createObject('object/tangible/wearables/armor/rebel_assault/shared_armor_rebel_spec_ops_bicep_l.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(bicepl) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def specOpsRightBicep(object, owner): + if owner.getCashCredits() >= 120000: + owner.setCashCredits(owner.getCashCredits() - 120000) + core = main.NGECore.getInstance() + bicepr = core.objectService.createObject('object/tangible/wearables/armor/rebel_assault/shared_armor_rebel_spec_ops_bicep_r.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(bicepr) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def specOpsLeftBracer(object, owner): + if owner.getCashCredits() >= 120000: + owner.setCashCredits(owner.getCashCredits() - 120000) + core = main.NGECore.getInstance() + bracerl = core.objectService.createObject('object/tangible/wearables/armor/rebel_assault/shared_armor_rebel_spec_ops_bracer_l.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(bracerl) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def specOpsRightBracer(object, owner): + if owner.getCashCredits() >= 120000: + owner.setCashCredits(owner.getCashCredits() - 120000) + core = main.NGECore.getInstance() + bracerr = core.objectService.createObject('object/tangible/wearables/armor/rebel_assault/shared_armor_rebel_spec_ops_bracer_r.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(bracerr) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def specOpsGloves(object, owner): + if owner.getCashCredits() >= 120000: + owner.setCashCredits(owner.getCashCredits() - 120000) + core = main.NGECore.getInstance() + gloves = core.objectService.createObject('object/tangible/wearables/armor/rebel_assault/shared_armor_rebel_spec_ops_gloves.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(gloves) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def specOpsHelmet(object, owner): + if owner.getCashCredits() >= 150000: + owner.setCashCredits(owner.getCashCredits() - 150000) + core = main.NGECore.getInstance() + helmet = core.objectService.createObject('object/tangible/wearables/armor/rebel_assault/shared_armor_rebel_spec_ops_helmet.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(helmet) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def specOpsChestPlate(object, owner): + if owner.getCashCredits() >= 225000: + owner.setCashCredits(owner.getCashCredits() - 225000) + core = main.NGECore.getInstance() + chest = core.objectService.createObject('object/tangible/wearables/armor/rebel_assault/shared_armor_rebel_spec_ops_chest_plate.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(chest) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def specOpsDyeKit(object, owner): + if owner.getCashCredits() >= 37500: + owner.setCashCredits(owner.getCashCredits() - 37500) + core = main.NGECore.getInstance() + dyekit = core.objectService.createObject('object/tangible/item/shared_pvp_spec_ops_rebel_dye_kit.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(dyekit) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def paintingNeverSurrender(object, owner): + if owner.getCashCredits() >= 375000: + owner.setCashCredits(owner.getCashCredits() - 375000) + core = main.NGECore.getInstance() + painting = core.objectService.createObject('object/tangible/painting/shared_painting_pvp_reward_rebel.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(painting) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def crimsonPhoenixMedal(object, owner): + if owner.getCashCredits() >= 240000: + owner.setCashCredits(owner.getCashCredits() - 240000) + core = main.NGECore.getInstance() + necklace = core.objectService.createObject('object/tangible/wearables/necklace/shared_necklace_deepspace_rebel_f.iff', owner.getPlanet()) + necklace.setStfFilename('static_item_n') + necklace.setStfName('item_pvp_rebel_sergeant_major_medal_03_01') + necklace.setDetailFilename('static_item_d') + necklace.setDetailName('item_pvp_rebel_sergeant_major_medal_03_01') + necklace.setIntAttribute('no_trade', 1) + necklace.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 30) + necklace.setIntAttribute('cat_stat_mod_bonus.@stat_n:luck_modified', 30) + necklace.setIntAttribute('cat_stat_mod_bonus.@stat_n:precision_modified', 24) + necklace.setIntAttribute('cat_stat_mod_bonus.@stat_n:strength_modified', 24) + inventory = owner.getSlottedObject('inventory') + inventory.add(necklace) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def factionalBanner(object, owner): + if owner.getCashCredits() >= 80000: + owner.setCashCredits(owner.getCashCredits() - 80000) + core = main.NGECore.getInstance() + banner = core.objectService.createObject('object/tangible/gcw/pvp_rank_rewards/shared_pvp_rebel_battle_banner.iff', owner.getPlanet()) + banner.setIntAttribute('no_trade', 1) + inventory = owner.getSlottedObject('inventory') + inventory.add(banner) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def colonelRing(object, owner): + if owner.getCashCredits() >= 2800000: + owner.setCashCredits(owner.getCashCredits() - 2800000) + core = main.NGECore.getInstance() + ring = core.objectService.createObject('object/tangible/wearables/ring/shared_ring_s03.iff', owner.getPlanet()) + ring.setStfFilename('static_item_n') + ring.setStfName('item_pvp_rebel_colonel_signet_ring_05_01') + ring.setDetailFilename('static_item_d') + ring.setDetailName('item_pvp_rebel_colonel_signet_ring_05_01') + ring.setIntAttribute('no_trade', 1) + ring.setIntAttribute('cat_stat_mod_bonus.@stat_n:strength_modified', 24) + ring.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 60) + ring.setIntAttribute('cat_stat_mod_bonus.@stat_n:precision_modified', 24) + ring.setIntAttribute('cat_stat_mod_bonus.@stat_n:agility_modified', 24) + inventory = owner.getSlottedObject('inventory') + inventory.add(ring) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def laserCarbine(object, owner): + if owner.getCashCredits() >= 187500: + owner.setCashCredits(owner.getCashCredits() - 187500) + core = main.NGECore.getInstance() + carbine = core.objectService.createObject('object/weapon/ranged/carbine/shared_carbine_laser.iff', owner.getPlanet()) + carbine.setAttackSpeed(0.6) + carbine.setMaxRange(50) + carbine.setDamageType("energy") + carbine.setMinDamage(350) + carbine.setMaxDamage(700) + carbine.setWeaponType(1) + inventory = owner.getSlottedObject('inventory') + inventory.add(carbine) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def scoutPistol(object, owner): + if owner.getCashCredits() >= 40500: + owner.setCashCredits(owner.getCashCredits() - 40500) + core = main.NGECore.getInstance() + pistol = core.objectService.createObject('object/weapon/ranged/pistol/shared_pistol_scout_blaster.iff', owner.getPlanet()) + pistol.setAttackSpeed(0.4) + pistol.setMaxRange(35); + pistol.setDamageType("kinetic"); + pistol.setMinDamage(80); + pistol.setMaxDamage(130); + pistol.setWeaponType(2); + inventory = owner.getSlottedObject('inventory') + inventory.add(pistol) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def metalStaff(object, owner): + if owner.getCashCredits() >= 30000: + owner.setCashCredits(owner.getCashCredits() - 30000) + core = main.NGECore.getInstance() + staff = core.objectService.createObject('object/weapon/melee/polearm/shared_lance_staff_metal.iff', owner.getPlanet()) + staff.setAttackSpeed(1.0); + staff.setMaxRange(35); + staff.setDamageType("kinetic"); + staff.setMinDamage(300); + staff.setMaxDamage(400); + staff.setWeaponType(2); + inventory = owner.getSlottedObject('inventory') + inventory.add(staff) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def windusGuile(object, owner): + if owner.getCashCredits() >= 2000000: + owner.setCashCredits(owner.getCashCredits() - 2000000) + core = main.NGECore.getInstance() + windu = core.objectService.createObject('object/tangible/component/weapon/lightsaber/shared_lightsaber_module_force_crystal.iff', owner.getPlanet()) + windu.setCustomizationVariable('/private/index_color_1', 20) + windu.setStfFilename('static_item_n') + windu.setStfName('item_color_crystal_02_20') + windu.setDetailFilename('static_item_d') + windu.setDetailName('item_color_crystal_02_20') + windu.setIntAttribute('no_trade', 1) + windu.setStringAttribute('condition', '1000/1000') + windu.getAttributes().put("@obj_attr_n:color", "Windu's Guile") + windu.setAttachment('radial_filename', 'item/tunable') + inventory = owner.getSlottedObject('inventory') + inventory.add(windu) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def exceptionalPistol(object, owner): + if owner.getCashCredits() >= 200000: + owner.setCashCredits(owner.getCashCredits() - 200000) + core = main.NGECore.getInstance() + core.scriptService.callScript("scripts/object/weapon/ranged/pistol/", "exceptional_pistol_rebel", "exceptionalPistol", core, object, owner); + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def starlightCarbine(object, owner): + if owner.getCashCredits() >= 200000: + owner.setCashCredits(owner.getCashCredits() - 200000) + core = main.NGECore.getInstance() + carbine = core.objectService.createObject('object/weapon/ranged/carbine/shared_carbine_pvp.iff', owner.getPlanet()) + carbine.setStringAttribute('faction_restriction', 'Rebel') + inventory = owner.getSlottedObject('inventory') + inventory.add(carbine) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def crimsonNova(object, owner): + if owner.getCashCredits() >= 200000: + owner.setCashCredits(owner.getCashCredits() - 200000) + core = main.NGECore.getInstance() + nova = core.objectService.createObject('object/weapon/ranged/pistol/shared_pistol_pvp.iff', owner.getPlanet()) + nova.setStringAttribute('faction_restriction', 'Rebel') + inventory = owner.getSlottedObject('inventory') + inventory.add(nova) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def vortexRifle(object, owner): + if owner.getCashCredits() >= 200000: + owner.setCashCredits(owner.getCashCredits() - 200000) + core = main.NGECore.getInstance() + rifle = core.objectService.createObject('object/weapon/ranged/rifle/shared_rifle_pvp.iff', owner.getPlanet()) + rifle.setStringAttribute('faction_restriction', 'Rebel') + inventory = owner.getSlottedObject('inventory') + inventory.add(rifle) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def reaperCannon(object, owner): + if owner.getCashCredits() >= 200000: + owner.setCashCredits(owner.getCashCredits() - 200000) + core = main.NGECore.getInstance() + cannon = core.objectService.createObject('object/weapon/ranged/heavy/shared_heavy_pvp.iff', owner.getPlanet()) + cannon.setStringAttribute('faction_restriction', 'Rebel') + inventory = owner.getSlottedObject('inventory') + inventory.add(cannon) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return \ No newline at end of file diff --git a/scripts/object/intangible/vehicle/barc_speeder_rebel_pcd.py b/scripts/object/intangible/vehicle/barc_speeder_rebel_pcd.py index ccad8904..140a663d 100644 --- a/scripts/object/intangible/vehicle/barc_speeder_rebel_pcd.py +++ b/scripts/object/intangible/vehicle/barc_speeder_rebel_pcd.py @@ -1,4 +1,17 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'datapad/vehicle_pcd') + object.setIntAttribute('no_trade', 1) + object.setStringAttribute('faction_restriction', 'Rebel') + return + +def use(core, actor, object): + if object and actor.getAttachment('activeVehicleID') == None: + barc = core.objectService.createObject('object/mobile/vehicle/shared_barc_speeder_rebel.iff', 0, actor.getPlanet(), actor.getPosition(), actor.getOrientation()) + + barc.setOwnerId(actor.getObjectID()) + actor.setAttachment('activeVehicleID', barc.getObjectID()) + + core.simulationService.add(barc, barc.getPosition().x, barc.getPosition().z, True) return \ No newline at end of file diff --git a/scripts/object/mobile/vehicle/barc_speeder_rebel.py b/scripts/object/mobile/vehicle/barc_speeder_rebel.py index 402fab24..5713d540 100644 --- a/scripts/object/mobile/vehicle/barc_speeder_rebel.py +++ b/scripts/object/mobile/vehicle/barc_speeder_rebel.py @@ -1,8 +1,16 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'creature/vehicle') return def use(core, actor, object): - core.buffService.addBuffToCreature(object, 'vehicle_pvp_barc_rebel', object) + vehicle = actor.getContainer() + + if vehicle: + if vehicle.getObjectID() == object.getObjectID(): + vehicle.remove(actor) + else: + vehicle.add(actor) + return \ No newline at end of file diff --git a/scripts/object/tangible/collection/rare_pistol_blackfalcon.py b/scripts/object/tangible/collection/rare_pistol_blackfalcon.py index 421ffda3..163da641 100644 --- a/scripts/object/tangible/collection/rare_pistol_blackfalcon.py +++ b/scripts/object/tangible/collection/rare_pistol_blackfalcon.py @@ -1,7 +1,6 @@ import sys def setup(core, object): - print ('test') object.setAttachment('CollectionItemName', 'blackfalcon_01') object.setAttachment('radial_filename', 'item/world_collection') return diff --git a/scripts/object/tangible/deed/vehicle_deed/barc_speeder_deed.py b/scripts/object/tangible/deed/vehicle_deed/barc_speeder_deed.py index af21fb67..17638f96 100644 --- a/scripts/object/tangible/deed/vehicle_deed/barc_speeder_deed.py +++ b/scripts/object/tangible/deed/vehicle_deed/barc_speeder_deed.py @@ -1,24 +1,40 @@ import sys def setup(core, object): - object.setAttachment('radial_filename', 'vehicleDeed') + object.setAttachment('radial_filename', 'deeds/vehicleDeed') return def use(core, actor, object): - datapad = actor.getSlottedObject('datapad') - pcd = core.objectService.createObject('object/intangible/vehicle/shared_barc_speeder_pcd.iff', actor.getPlanet(), actor.getPosition().x, actor.getPosition().z,actor.getPosition().y) + if object.getStfName() == ('barc_speeder'): + datapad = actor.getSlottedObject('datapad') + pcd = core.objectService.createObject('object/intangible/vehicle/shared_barc_speeder_pcd.iff', actor.getPlanet(), actor.getPosition().x, actor.getPosition().z,actor.getPosition().y) - if datapad and pcd: + if datapad and pcd: - datapad.add(pcd) - core.objectService.destroyObject(object) + datapad.add(pcd) + core.objectService.destroyObject(object) - vehicleId = actor.getAttachment('activeVehicleID') + vehicleId = actor.getAttachment('activeVehicleID') if vehicleId == None: vehicle = core.objectService.createObject('object/mobile/vehicle/shared_barc_speeder.iff', actor.getPlanet(), actor.getPosition().x, actor.getPosition().z,actor.getPosition().y) vehicle.setOwnerId(actor.getObjectID()) core.simulationService.add(vehicle, vehicle.getPosition().x, vehicle.getPosition().z, True) actor.setAttachment('activeVehicleID', vehicle.getObjectID()) + elif object.getStfName() == ('item_deed_barc_rebel_06_01'): + datapad = actor.getSlottedObject('datapad') + pcd = core.objectService.createObject('object/intangible/vehicle/shared_barc_speeder_rebel_pcd.iff', actor.getPlanet(), actor.getPosition().x, actor.getPosition().z,actor.getPosition().y) + + if datapad and pcd: + datapad.add(pcd) + core.objectService.destroyObject(object) + + vehicleId = actor.getAttachment('activeVehicleID') + + if vehicleId == None: + vehicle = core.objectService.createObject('object/mobile/vehicle/shared_barc_speeder_rebel.iff', actor.getPlanet(), actor.getPosition().x, actor.getPosition().z,actor.getPosition().y) + vehicle.setOwnerId(actor.getObjectID()) + core.simulationService.add(vehicle, vehicle.getPosition().x, vehicle.getPosition().z, True) + actor.setAttachment('activeVehicleID', vehicle.getObjectID()) return \ No newline at end of file diff --git a/scripts/object/tangible/loot/generic_usable/binoculars_s1_generic.py b/scripts/object/tangible/loot/generic_usable/binoculars_s1_generic.py index ccad8904..9124f885 100644 --- a/scripts/object/tangible/loot/generic_usable/binoculars_s1_generic.py +++ b/scripts/object/tangible/loot/generic_usable/binoculars_s1_generic.py @@ -1,4 +1,10 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'object/usable') + return + +def use(core, actor, object): + if object.getStfName() == ('item_consumable_detect_hidden_02_04'): + core.buffService.addBuffToCreature(actor, 'detectHiddenConsumable100', actor) return \ No newline at end of file diff --git a/scripts/object/tangible/loot/generic_usable/binoculars_s2_generic.py b/scripts/object/tangible/loot/generic_usable/binoculars_s2_generic.py index ccad8904..c3102575 100644 --- a/scripts/object/tangible/loot/generic_usable/binoculars_s2_generic.py +++ b/scripts/object/tangible/loot/generic_usable/binoculars_s2_generic.py @@ -1,4 +1,14 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'object/usable') + return + +def use(core, actor, object): + if object.getStfName() == ('item_consumable_detect_hidden_02_01'): + core.buffService.addBuffToCreature(actor, 'detectHiddenConsumable20', actor) + elif object.getStfName() == ('item_consumable_detect_hidden_02_02'): + core.buffService.addBuffToCreature(actor, 'detectHiddenConsumable40', actor) + elif object.getStfName() == ('item_consumable_detect_hidden_02_03'): + core.buffService.addBuffToCreature(actor, 'detectHiddenConsumable65', actor) return \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_pvp_reward_rebel.py b/scripts/object/tangible/painting/painting_pvp_reward_rebel.py index 2113f9c2..5845be66 100644 --- a/scripts/object/tangible/painting/painting_pvp_reward_rebel.py +++ b/scripts/object/tangible/painting/painting_pvp_reward_rebel.py @@ -1,6 +1,10 @@ import sys def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_pvp_rebel_painting_03_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_pvp_rebel_painting_03_01') return - #No name (Cruiser Escort) \ No newline at end of file + #We Will Never Surrender \ No newline at end of file diff --git a/scripts/object/tangible/wearables/armor/rebel_assault/armor_rebel_spec_ops_belt.py b/scripts/object/tangible/wearables/armor/rebel_assault/armor_rebel_spec_ops_belt.py index ccad8904..e69005be 100644 --- a/scripts/object/tangible/wearables/armor/rebel_assault/armor_rebel_spec_ops_belt.py +++ b/scripts/object/tangible/wearables/armor/rebel_assault/armor_rebel_spec_ops_belt.py @@ -1,4 +1,19 @@ import sys def setup(core, object): + object.setCustomizationVariable('/private/index_color_1', 44); + object.setCustomizationVariable('/private/index_color_2', 32); + object.setStfFilename('static_item_n') + object.setStfName('armor_pvp_spec_ops_rebel_black_grey_belt_05_01') + object.setDetailFilename('static_item_d') + object.setDetailName('armor_pvp_spec_ops_rebel_black_grey_belt_05_01') + object.setIntAttribute('no_trade') + object.setStringAttribute('faction_restriction', 'Rebel') + object.setStringAttribute('armor_category', '@obj_attr_n:armor_assault') + object.setIntAttribute('cat_armor_standard_protection.kinetic', 6608) + object.setIntAttribute('cat_armor_standard_protection.energy', 4608) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_heat', 5608) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_cold', 5608) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_acid', 5608) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_electricity', 5608) return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/armor/rebel_assault/armor_rebel_spec_ops_bicep_l.py b/scripts/object/tangible/wearables/armor/rebel_assault/armor_rebel_spec_ops_bicep_l.py index ccad8904..b09b90f7 100644 --- a/scripts/object/tangible/wearables/armor/rebel_assault/armor_rebel_spec_ops_bicep_l.py +++ b/scripts/object/tangible/wearables/armor/rebel_assault/armor_rebel_spec_ops_bicep_l.py @@ -1,4 +1,18 @@ import sys def setup(core, object): + object.setCustomizationVariable('/private/index_color_1', 5); + object.setCustomizationVariable('/private/index_color_2', 0); + object.setStfFilename('static_item_n') + object.setStfName('armor_pvp_spec_ops_rebel_black_grey_bicep_l_05_01') + object.setDetailFilename('static_item_d') + object.setDetailName('armor_pvp_spec_ops_rebel_black_grey_bicep_l_05_01') + object.setStringAttribute('faction_restriction', 'Rebel') + object.setStringAttribute('armor_category', '@obj_attr_n:armor_assault') + object.setIntAttribute('cat_armor_standard_protection.kinetic', 6608) + object.setIntAttribute('cat_armor_standard_protection.energy', 4608) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_heat', 5608) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_cold', 5608) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_acid', 5608) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_electricity', 5608) return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/armor/rebel_assault/armor_rebel_spec_ops_bicep_r.py b/scripts/object/tangible/wearables/armor/rebel_assault/armor_rebel_spec_ops_bicep_r.py index ccad8904..e232b4ad 100644 --- a/scripts/object/tangible/wearables/armor/rebel_assault/armor_rebel_spec_ops_bicep_r.py +++ b/scripts/object/tangible/wearables/armor/rebel_assault/armor_rebel_spec_ops_bicep_r.py @@ -1,4 +1,18 @@ import sys def setup(core, object): + object.setCustomizationVariable('/private/index_color_1', 5); + object.setCustomizationVariable('/private/index_color_2', 0); + object.setStfFilename('static_item_n') + object.setStfName('armor_pvp_spec_ops_rebel_black_grey_bicep_r_05_01') + object.setDetailFilename('static_item_d') + object.setDetailName('armor_pvp_spec_ops_rebel_black_grey_bicep_r_05_01') + object.setStringAttribute('faction_restriction', 'Rebel') + object.setStringAttribute('armor_category', '@obj_attr_n:armor_assault') + object.setIntAttribute('cat_armor_standard_protection.kinetic', 6608) + object.setIntAttribute('cat_armor_standard_protection.energy', 4608) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_heat', 5608) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_cold', 5608) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_acid', 5608) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_electricity', 5608) return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/armor/rebel_assault/armor_rebel_spec_ops_boots.py b/scripts/object/tangible/wearables/armor/rebel_assault/armor_rebel_spec_ops_boots.py index ccad8904..05a3bb8d 100644 --- a/scripts/object/tangible/wearables/armor/rebel_assault/armor_rebel_spec_ops_boots.py +++ b/scripts/object/tangible/wearables/armor/rebel_assault/armor_rebel_spec_ops_boots.py @@ -1,4 +1,18 @@ import sys def setup(core, object): + object.setCustomizationVariable('/private/index_color_1', 0); + object.setCustomizationVariable('/private/index_color_2', 5); + object.setStfFilename('static_item_n') + object.setStfName('armor_pvp_spec_ops_rebel_black_grey_boots_05_01') + object.setDetailFilename('static_item_d') + object.setDetailName('armor_pvp_spec_ops_rebel_black_grey_boots_05_01') + object.setStringAttribute('faction_restriction', 'Rebel') + object.setStringAttribute('armor_category', '@obj_attr_n:armor_assault') + object.setIntAttribute('cat_armor_standard_protection.kinetic', 6608) + object.setIntAttribute('cat_armor_standard_protection.energy', 4608) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_heat', 5608) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_cold', 5608) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_acid', 5608) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_electricity', 5608) return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/armor/rebel_assault/armor_rebel_spec_ops_bracer_l.py b/scripts/object/tangible/wearables/armor/rebel_assault/armor_rebel_spec_ops_bracer_l.py index ccad8904..29c4ac03 100644 --- a/scripts/object/tangible/wearables/armor/rebel_assault/armor_rebel_spec_ops_bracer_l.py +++ b/scripts/object/tangible/wearables/armor/rebel_assault/armor_rebel_spec_ops_bracer_l.py @@ -1,4 +1,18 @@ import sys def setup(core, object): + object.setCustomizationVariable('/private/index_color_1', 5); + object.setCustomizationVariable('/private/index_color_2', 0); + object.setStfFilename('static_item_n') + object.setStfName('armor_pvp_spec_ops_rebel_black_grey_bracer_l_05_01') + object.setDetailFilename('static_item_d') + object.setDetailName('armor_pvp_spec_ops_rebel_black_grey_bracer_l_05_01') + object.setStringAttribute('faction_restriction', 'Rebel') + object.setStringAttribute('armor_category', '@obj_attr_n:armor_assault') + object.setIntAttribute('cat_armor_standard_protection.kinetic', 6608) + object.setIntAttribute('cat_armor_standard_protection.energy', 4608) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_heat', 5608) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_cold', 5608) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_acid', 5608) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_electricity', 5608) return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/armor/rebel_assault/armor_rebel_spec_ops_bracer_r.py b/scripts/object/tangible/wearables/armor/rebel_assault/armor_rebel_spec_ops_bracer_r.py index ccad8904..c34a6463 100644 --- a/scripts/object/tangible/wearables/armor/rebel_assault/armor_rebel_spec_ops_bracer_r.py +++ b/scripts/object/tangible/wearables/armor/rebel_assault/armor_rebel_spec_ops_bracer_r.py @@ -1,4 +1,18 @@ import sys def setup(core, object): + object.setCustomizationVariable('/private/index_color_1', 5); + object.setCustomizationVariable('/private/index_color_2', 0); + object.setStfFilename('static_item_n') + object.setStfName('armor_pvp_spec_ops_rebel_black_grey_bracer_r_05_01') + object.setDetailFilename('static_item_d') + object.setDetailName('armor_pvp_spec_ops_rebel_black_grey_bracer_r_05_01') + object.setStringAttribute('faction_restriction', 'Rebel') + object.setStringAttribute('armor_category', '@obj_attr_n:armor_assault') + object.setIntAttribute('cat_armor_standard_protection.kinetic', 6608) + object.setIntAttribute('cat_armor_standard_protection.energy', 4608) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_heat', 5608) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_cold', 5608) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_acid', 5608) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_electricity', 5608) return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/armor/rebel_assault/armor_rebel_spec_ops_chest_plate.py b/scripts/object/tangible/wearables/armor/rebel_assault/armor_rebel_spec_ops_chest_plate.py index ccad8904..c1ef4d6f 100644 --- a/scripts/object/tangible/wearables/armor/rebel_assault/armor_rebel_spec_ops_chest_plate.py +++ b/scripts/object/tangible/wearables/armor/rebel_assault/armor_rebel_spec_ops_chest_plate.py @@ -1,4 +1,18 @@ import sys def setup(core, object): + object.setCustomizationVariable('/private/index_color_1', 5); + object.setCustomizationVariable('/private/index_color_2', 0); + object.setStfFilename('static_item_n') + object.setStfName('armor_pvp_spec_ops_rebel_black_grey_chest_plate_05_01') + object.setDetailFilename('static_item_d') + object.setDetailName('armor_pvp_spec_ops_rebel_black_grey_chest_plate_05_01') + object.setStringAttribute('faction_restriction', 'Rebel') + object.setStringAttribute('armor_category', '@obj_attr_n:armor_assault') + object.setIntAttribute('cat_armor_standard_protection.kinetic', 6608) + object.setIntAttribute('cat_armor_standard_protection.energy', 4608) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_heat', 5608) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_cold', 5608) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_acid', 5608) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_electricity', 5608) return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/armor/rebel_assault/armor_rebel_spec_ops_gloves.py b/scripts/object/tangible/wearables/armor/rebel_assault/armor_rebel_spec_ops_gloves.py index ccad8904..fa5f80ef 100644 --- a/scripts/object/tangible/wearables/armor/rebel_assault/armor_rebel_spec_ops_gloves.py +++ b/scripts/object/tangible/wearables/armor/rebel_assault/armor_rebel_spec_ops_gloves.py @@ -1,4 +1,18 @@ import sys def setup(core, object): + object.setCustomizationVariable('/private/index_color_1', 5); + object.setCustomizationVariable('/private/index_color_2', 0); + object.setStfFilename('static_item_n') + object.setStfName('armor_pvp_spec_ops_rebel_black_grey_gloves_05_01') + object.setDetailFilename('static_item_d') + object.setDetailName('armor_pvp_spec_ops_rebel_black_grey_gloves_05_01') + object.setStringAttribute('faction_restriction', 'Rebel') + object.setStringAttribute('armor_category', '@obj_attr_n:armor_assault') + object.setIntAttribute('cat_armor_standard_protection.kinetic', 6608) + object.setIntAttribute('cat_armor_standard_protection.energy', 4608) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_heat', 5608) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_cold', 5608) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_acid', 5608) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_electricity', 5608) return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/armor/rebel_assault/armor_rebel_spec_ops_helmet.py b/scripts/object/tangible/wearables/armor/rebel_assault/armor_rebel_spec_ops_helmet.py index ccad8904..5f2e7d34 100644 --- a/scripts/object/tangible/wearables/armor/rebel_assault/armor_rebel_spec_ops_helmet.py +++ b/scripts/object/tangible/wearables/armor/rebel_assault/armor_rebel_spec_ops_helmet.py @@ -1,4 +1,18 @@ import sys def setup(core, object): + object.setCustomizationVariable('/private/index_color_1', 5); + object.setCustomizationVariable('/private/index_color_2', 0); + object.setStfFilename('static_item_n') + object.setStfName('armor_pvp_spec_ops_rebel_black_grey_helmet_05_01') + object.setDetailFilename('static_item_d') + object.setDetailName('armor_pvp_spec_ops_rebel_black_grey_helmet_05_01') + object.setStringAttribute('faction_restriction', 'Rebel') + object.setStringAttribute('armor_category', '@obj_attr_n:armor_assault') + object.setIntAttribute('cat_armor_standard_protection.kinetic', 6608) + object.setIntAttribute('cat_armor_standard_protection.energy', 4608) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_heat', 5608) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_cold', 5608) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_acid', 5608) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_electricity', 5608) return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/armor/rebel_assault/armor_rebel_spec_ops_leggings.py b/scripts/object/tangible/wearables/armor/rebel_assault/armor_rebel_spec_ops_leggings.py index ccad8904..4f9fe253 100644 --- a/scripts/object/tangible/wearables/armor/rebel_assault/armor_rebel_spec_ops_leggings.py +++ b/scripts/object/tangible/wearables/armor/rebel_assault/armor_rebel_spec_ops_leggings.py @@ -1,4 +1,18 @@ import sys def setup(core, object): + object.setCustomizationVariable('/private/index_color_1', 0); + object.setCustomizationVariable('/private/index_color_2', 5); + object.setStfFilename('static_item_n') + object.setStfName('armor_pvp_spec_ops_rebel_black_grey_leggings_05_01') + object.setDetailFilename('static_item_d') + object.setDetailName('armor_pvp_spec_ops_rebel_black_grey_leggings_05_01') + object.setStringAttribute('faction_restriction', 'Rebel') + object.setStringAttribute('armor_category', '@obj_attr_n:armor_assault') + object.setIntAttribute('cat_armor_standard_protection.kinetic', 6608) + object.setIntAttribute('cat_armor_standard_protection.energy', 4608) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_heat', 5608) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_cold', 5608) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_acid', 5608) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_electricity', 5608) return \ No newline at end of file diff --git a/scripts/object/weapon/ranged/carbine/carbine_pvp.py b/scripts/object/weapon/ranged/carbine/carbine_pvp.py index ccad8904..df45159e 100644 --- a/scripts/object/weapon/ranged/carbine/carbine_pvp.py +++ b/scripts/object/weapon/ranged/carbine/carbine_pvp.py @@ -1,4 +1,22 @@ import sys def setup(core, object): + object.setStringAttribute('tier', '6') + object.setIntAttribute('no_trade', 1) + object.setStfFilename('static_item_n') + object.setStfName('weapon_carbine_pvp_general_reward_06_01') + object.setDetailFilename('static_item_d') + object.setDetailName('weapon_carbine_pvp_general_reward_06_01') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 10) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:precision_modified', 10) + object.setStringAttribute('faction_restriction', 'Rebel') + object.setStringAttribute('required_skill', 'None') + object.setDamageType("energy"); + object.setWeaponType(1); + object.setAttackSpeed(0.6); + object.setMinDamage(389); + object.setMaxDamage(780); + object.setStringAttribute('wpn_elemental_type', 'Cold') + object.setStringAttribute('wpn_elemental_value', '20') + object.setMaxRange(50); return \ No newline at end of file diff --git a/scripts/object/weapon/ranged/heavy/heavy_pvp.py b/scripts/object/weapon/ranged/heavy/heavy_pvp.py index ccad8904..0bbf3010 100644 --- a/scripts/object/weapon/ranged/heavy/heavy_pvp.py +++ b/scripts/object/weapon/ranged/heavy/heavy_pvp.py @@ -1,4 +1,22 @@ import sys def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('weapon_heavy_pvp_general_reward_06_01') + object.setDetailFilename('static_item_d') + object.setDetailName('weapon_heavy_pvp_general_reward_06_01') + object.setStringAttribute('tier', '6') + object.setIntAttribute('no_trade', 1) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 10) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:precision_modified', 10) + object.setStringAttribute('healing_combat_level_required', '75') + object.setStringAttribute('required_skill', 'None') + object.setDamageType("energy"); + object.setWeaponType(12); + object.setAttackSpeed(1); + object.setMinDamage(850); + object.setMaxDamage(1350); + object.setStringAttribute('wpn_elemental_type', 'Heat') + object.setStringAttribute('wpn_elemental_value', '50') + object.setMaxRange(64); return \ No newline at end of file diff --git a/scripts/object/weapon/ranged/pistol/exceptional_pistol_rebel.py b/scripts/object/weapon/ranged/pistol/exceptional_pistol_rebel.py new file mode 100644 index 00000000..647c61de --- /dev/null +++ b/scripts/object/weapon/ranged/pistol/exceptional_pistol_rebel.py @@ -0,0 +1,16 @@ +import sys + +def exceptionalPistol(core, object, owner): + object = core.objectService.createObject('object/weapon/ranged/pistol/shared_pistol_dl44.iff', owner.getPlanet()) + object.setStringAttribute('required_skill', 'None') + object.setStringAttribute('faction_restriction', 'Rebel') + object.setAttackSpeed(0.4); + object.setCustomName('Exceptional Rebel DL44 Pistol'); + object.setMaxRange(35); + object.setDamageType("energy"); + object.setMinDamage(275); + object.setMaxDamage(518); + object.setWeaponType(2); + inventory = owner.getSlottedObject('inventory') + inventory.add(object) + return \ No newline at end of file diff --git a/scripts/object/weapon/ranged/pistol/pistol_pvp.py b/scripts/object/weapon/ranged/pistol/pistol_pvp.py index ccad8904..a4f22603 100644 --- a/scripts/object/weapon/ranged/pistol/pistol_pvp.py +++ b/scripts/object/weapon/ranged/pistol/pistol_pvp.py @@ -1,4 +1,22 @@ import sys def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('weapon_pistol_pvp_general_reward_06_01') + object.setDetailFilename('static_item_d') + object.setDetailName('weapon_pistol_pvp_general_reward_06_01') + object.setStringAttribute('tier', '6') + object.setIntAttribute('no_trade', 1) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 10) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:precision_modified', 10) + object.setStringAttribute('healing_combat_level_required', '75') + object.setStringAttribute('required_skill', 'None') + object.setDamageType("energy"); + object.setWeaponType(2); + object.setAttackSpeed(0.4); + object.setMinDamage(259); + object.setMaxDamage(518); + object.setStringAttribute('wpn_elemental_type', 'Electricity') + object.setStringAttribute('wpn_elemental_value', '20') + object.setMaxRange(35); return \ No newline at end of file diff --git a/scripts/object/weapon/ranged/rifle/rifle_pvp.py b/scripts/object/weapon/ranged/rifle/rifle_pvp.py index ccad8904..2de5b766 100644 --- a/scripts/object/weapon/ranged/rifle/rifle_pvp.py +++ b/scripts/object/weapon/ranged/rifle/rifle_pvp.py @@ -1,4 +1,22 @@ import sys def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('weapon_rifle_pvp_general_reward_06_01') + object.setDetailFilename('static_item_d') + object.setDetailName('weapon_rifle_pvp_general_reward_06_01') + object.setStringAttribute('tier', '6') + object.setIntAttribute('no_trade', 1) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 10) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:precision_modified', 10) + object.setStringAttribute('healing_combat_level_required', '75') + object.setStringAttribute('required_skill', 'None') + object.setDamageType("energy"); + object.setWeaponType(0); + object.setAttackSpeed(0.8); + object.setMinDamage(518); + object.setMaxDamage(1035); + object.setStringAttribute('wpn_elemental_type', 'Acid') + object.setStringAttribute('wpn_elemental_value', '20') + object.setMaxRange(64) return \ No newline at end of file From 935eb3c6046a68b251bcdcc7aaab7e02c60f975b Mon Sep 17 00:00:00 2001 From: Treeku Date: Sun, 29 Jun 2014 15:23:40 +0100 Subject: [PATCH 43/92] Updated readme --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index ff4c8504..abccf1b8 100644 --- a/README.md +++ b/README.md @@ -62,3 +62,5 @@ Now your changes will be reviewed by other developers and once the changes are a For more information please visit the wiki: https://github.com/ProjectSWGCore/NGECore2/wiki Documentation can be found here: http://projectswgcore.github.io/NGECore2/doc/ + +Please prefix all commits with Added, Changed, Removed or Fixed. If you don't have enough room for multiple changes, use the extended description. Try not to bundle multiple changes into one vague line (ie. "Changed various combat things"). Try to make all commit messages understandable by non-programmers. From 0e33ad7c226018a81af629dd5275fb5e9acb8cfa Mon Sep 17 00:00:00 2001 From: CharonInferar Date: Sun, 29 Jun 2014 16:51:35 +0200 Subject: [PATCH 44/92] Added 2 Pets for AI Tests - Added Follow State to AI - Pets get attacked by enemies and do attack damaging enemies - Some QA fixes --- scripts/commands/combat/droid_attack.py | 10 + scripts/commands/setgodmode.py | 7 + scripts/mobiles/pets/pet_droideka.py | 38 + scripts/mobiles/pets/pet_gurreck.py | 38 + scripts/object/intangible/pet/droideka.py | 1 + scripts/object/intangible/pet/gurreck_hue.py | 1 + .../tangible/deed/pet_deed/deed_droideka.py | 9 +- .../tangible/deed/pet_deed/gurreck_deed.py | 9 +- scripts/radial/datapad/pet_pcd.py | 23 + scripts/radial/deeds/petdeed.py | 16 + src/main/NGECore.java | 4 + .../objects/creature/CreatureObject.java | 10 + src/services/DevService.java | 8 + src/services/LootService.java | 4 + src/services/ai/AIActor.java | 63 +- src/services/ai/AIService.java | 28 +- src/services/ai/states/AIState.java | 262 +++++- src/services/ai/states/FollowState.java | 66 ++ src/services/ai/states/LoiterState.java | 2 - src/services/ai/states/PatrolState.java | 6 + src/services/ai/states/RetreatState.java | 30 +- src/services/combat/CombatService.java | 9 + src/services/pet/MountService.java | 5 +- src/services/pet/PetService.java | 794 ++++++++++++++++++ 24 files changed, 1397 insertions(+), 46 deletions(-) create mode 100644 scripts/commands/combat/droid_attack.py create mode 100644 scripts/mobiles/pets/pet_droideka.py create mode 100644 scripts/mobiles/pets/pet_gurreck.py create mode 100644 scripts/radial/datapad/pet_pcd.py create mode 100644 scripts/radial/deeds/petdeed.py create mode 100644 src/services/ai/states/FollowState.java create mode 100644 src/services/pet/PetService.java diff --git a/scripts/commands/combat/droid_attack.py b/scripts/commands/combat/droid_attack.py new file mode 100644 index 00000000..39356bbb --- /dev/null +++ b/scripts/commands/combat/droid_attack.py @@ -0,0 +1,10 @@ +import sys + +def setup(core, actor, target, command): + + return + +def run(core, actor, target, commandString): + pet = actor.getCalledPet() + pet.addDefender(target); + return diff --git a/scripts/commands/setgodmode.py b/scripts/commands/setgodmode.py index a7da7dbc..5f67bb5e 100644 --- a/scripts/commands/setgodmode.py +++ b/scripts/commands/setgodmode.py @@ -165,6 +165,13 @@ def run(core, actor, target, commandString): clipboard = toolkit.getSystemClipboard() clipboard.setContents(StringSelection(str), None) actor.sendSystemMessage('Patrolpoint copied to clipboard', 0) + + elif command == 'jesus': + actor.setHealth(actor.getMaxHealth()) + actor.setAction(actor.getMaxAction()) + actor.setPosture(0) + actor.setSpeedMultiplierBase(1) + actor.setTurnRadius(1) elif command == 'unknownAbilityPacket' and arg1: packet = UnknownAbilityPacket(arg1) diff --git a/scripts/mobiles/pets/pet_droideka.py b/scripts/mobiles/pets/pet_droideka.py new file mode 100644 index 00000000..b234326f --- /dev/null +++ b/scripts/mobiles/pets/pet_droideka.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from resources.datatables import WeaponType +from resources.datatables import Difficulty +from resources.datatables import Options +from java.util import Vector + + +def addTemplate(core): + mobileTemplate = MobileTemplate() + mobileTemplate.setCreatureName('droideka') + mobileTemplate.setLevel(90) + mobileTemplate.setDifficulty(Difficulty.NORMAL) + + mobileTemplate.setMinSpawnDistance(5) + mobileTemplate.setMaxSpawnDistance(10) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup("droideka") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(Options.ATTACKABLE) + + templates = Vector() + templates.add('object/mobile/shared_droideka.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/droid/shared_droid_droideka_ranged.iff', WeaponType.CARBINE, 1.0, 15, 'energy') + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('pet_droideka', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/pets/pet_gurreck.py b/scripts/mobiles/pets/pet_gurreck.py new file mode 100644 index 00000000..431ba9e3 --- /dev/null +++ b/scripts/mobiles/pets/pet_gurreck.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from resources.datatables import WeaponType +from resources.datatables import Difficulty +from resources.datatables import Options +from java.util import Vector + + +def addTemplate(core): + mobileTemplate = MobileTemplate() + mobileTemplate.setCreatureName('bio_engineered_gurreck') + mobileTemplate.setLevel(90) + mobileTemplate.setDifficulty(Difficulty.NORMAL) + + mobileTemplate.setMinSpawnDistance(5) + mobileTemplate.setMaxSpawnDistance(10) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup("gurreck") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(Options.ATTACKABLE) + + templates = Vector() + templates.add('object/mobile/shared_gurreck.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', WeaponType.UNARMED, 1.0, 6, 'kinetic') + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('pet_gurreck', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/object/intangible/pet/droideka.py b/scripts/object/intangible/pet/droideka.py index ccad8904..d7c3f4a1 100644 --- a/scripts/object/intangible/pet/droideka.py +++ b/scripts/object/intangible/pet/droideka.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'datapad/vehicle_pcd') return \ No newline at end of file diff --git a/scripts/object/intangible/pet/gurreck_hue.py b/scripts/object/intangible/pet/gurreck_hue.py index ccad8904..d7c3f4a1 100644 --- a/scripts/object/intangible/pet/gurreck_hue.py +++ b/scripts/object/intangible/pet/gurreck_hue.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'datapad/vehicle_pcd') return \ No newline at end of file diff --git a/scripts/object/tangible/deed/pet_deed/deed_droideka.py b/scripts/object/tangible/deed/pet_deed/deed_droideka.py index ccad8904..589cccaf 100644 --- a/scripts/object/tangible/deed/pet_deed/deed_droideka.py +++ b/scripts/object/tangible/deed/pet_deed/deed_droideka.py @@ -1,4 +1,11 @@ import sys def setup(core, object): - return \ No newline at end of file + object.setAttachment('radial_filename', 'deeds/petDeed') + return + +def use(core, actor, object): + core.petService.generatePet(actor, object, 'pet_droideka', 'object/intangible/pet/shared_droideka.iff') + + return + \ No newline at end of file diff --git a/scripts/object/tangible/deed/pet_deed/gurreck_deed.py b/scripts/object/tangible/deed/pet_deed/gurreck_deed.py index ccad8904..ccbcbf92 100644 --- a/scripts/object/tangible/deed/pet_deed/gurreck_deed.py +++ b/scripts/object/tangible/deed/pet_deed/gurreck_deed.py @@ -1,4 +1,11 @@ import sys def setup(core, object): - return \ No newline at end of file + object.setAttachment('radial_filename', 'deeds/petDeed') + return + +def use(core, actor, object): + core.petService.generatePet(actor, object, 'pet_gurreck', 'object/intangible/pet/shared_gurreck_hue.iff') + #core.petService.generatePet(actor, object, 'pet_gurreck', 'object/intangible/vehicle/shared_speederbike_swoop_pcd.iff') + return + \ No newline at end of file diff --git a/scripts/radial/datapad/pet_pcd.py b/scripts/radial/datapad/pet_pcd.py new file mode 100644 index 00000000..e38b4a6e --- /dev/null +++ b/scripts/radial/datapad/pet_pcd.py @@ -0,0 +1,23 @@ +from resources.common import RadialOptions +import sys + +def createRadial(core, owner, target, radials): + if core.petService.getMount(target) is None: + radials.add(RadialOptions(0, 61, 1, '@pet/pet_menu:menu_call')) + else: + radials.add(RadialOptions(0, 61, 1, '@pet/pet_menu:menu_store')) + radials.add(RadialOptions(0, 7, 1, '')) + radials.add(RadialOptions(0, 15, 1, '')) + return + +def handleSelection(core, owner, target, option): + if option == 61 and target: + if core.petService.getMount(target) is None: + core.petService.call(owner, target) + else: + core.petService.store(owner, core.petService.getMount(target)) + elif option == 15 and target: + core.petService.destroy(owner, target) + + return + \ No newline at end of file diff --git a/scripts/radial/deeds/petdeed.py b/scripts/radial/deeds/petdeed.py new file mode 100644 index 00000000..ad08a40f --- /dev/null +++ b/scripts/radial/deeds/petdeed.py @@ -0,0 +1,16 @@ +from resources.common import RadialOptions +import sys + +def createRadial(core, owner, target, radials): + radials.add(RadialOptions(0, 7, 1, '')) + radials.add(RadialOptions(0, 15, 1, '')) + radials.add(RadialOptions(0, 61, 3, '@pet/pet_menu:menu_generate')) + return + +def handleSelection(core, owner, target, option): + if option == 61 and target: + core.objectService.useObject(owner, target) + if option == 15 and target: + core.objectService.destroyObject(target) + return + \ No newline at end of file diff --git a/src/main/NGECore.java b/src/main/NGECore.java index af65f16a..145ef6e7 100644 --- a/src/main/NGECore.java +++ b/src/main/NGECore.java @@ -99,6 +99,7 @@ import services.object.ObjectId; import services.object.ObjectService; import services.object.UpdateService; import services.pet.MountService; +import services.pet.PetService; import services.playercities.PlayerCity; import services.playercities.PlayerCityService; import services.resources.HarvesterService; @@ -202,6 +203,7 @@ public class NGECore { public MountService mountService; public PlayerCityService playerCityService; public ReverseEngineeringService reverseEngineeringService; + public PetService petService; // Login Server public NetworkDispatch loginDispatch; @@ -345,6 +347,7 @@ public class NGECore { playerCityService = new PlayerCityService(this); staticService = new StaticService(this); reverseEngineeringService = new ReverseEngineeringService(this); + petService = new PetService(this); if (config.keyExists("JYTHONCONSOLE.PORT")) { int jythonPort = config.getInt("JYTHONCONSOLE.PORT"); @@ -404,6 +407,7 @@ public class NGECore { zoneDispatch.addService(playerCityService); zoneDispatch.addService(staticService); zoneDispatch.addService(reverseEngineeringService); + zoneDispatch.addService(petService); if (optionsConfigLoaded && options.getInt("LOAD.RESOURCE.SYSTEM") == 1) { zoneDispatch.addService(surveyService); diff --git a/src/resources/objects/creature/CreatureObject.java b/src/resources/objects/creature/CreatureObject.java index b178e20a..e65109d7 100644 --- a/src/resources/objects/creature/CreatureObject.java +++ b/src/resources/objects/creature/CreatureObject.java @@ -183,6 +183,8 @@ public class CreatureObject extends TangibleObject implements Serializable { private transient long tefTime = 0; @NotPersistent private transient SWGObject useTarget; + @NotPersistent + private transient CreatureObject calledPet; private byte locomotion = 0; @@ -1868,4 +1870,12 @@ public class CreatureObject extends TangibleObject implements Serializable { { return getCustomName().split(" ")[1]; } + + public CreatureObject getCalledPet() { + return calledPet; + } + + public void setCalledPet(CreatureObject calledPet) { + this.calledPet = calledPet; + } } diff --git a/src/services/DevService.java b/src/services/DevService.java index fcb5c294..4b9bb46e 100644 --- a/src/services/DevService.java +++ b/src/services/DevService.java @@ -92,6 +92,7 @@ public class DevService implements INetworkDispatch { suiOptions.put((long) 120, "House Deeds"); suiOptions.put((long) 125, "Crafting Tools"); suiOptions.put((long) 130, "Vehicle Deeds"); + suiOptions.put((long) 131, "Pet Deeds"); suiOptions.put((long) 121, "Sandbox City"); if(creature.getPlayerObject().getProfession().equals("trader_0a") || creature.getPlayerObject().getProfession().equals("trader_0b") || creature.getPlayerObject().getProfession().equals("trader_0c") || creature.getPlayerObject().getProfession().equals("trader_0d")) suiOptions.put((long) 177, "REing"); @@ -1309,6 +1310,13 @@ public class DevService implements INetworkDispatch { inventory.add(swoopDeed); inventory.add(av21deed); return; + + case 131: + TangibleObject gurreckDeed = (TangibleObject) core.objectService.createObject("object/tangible/deed/pet_deed/shared_gurreck_deed.iff", planet); + inventory.add(gurreckDeed); + TangibleObject droidekaDeed = (TangibleObject) core.objectService.createObject("object/tangible/deed/pet_deed/shared_deed_droideka.iff", planet); + inventory.add(droidekaDeed); + return; case 140: TangibleObject guildRegistry = (TangibleObject) core.objectService.createObject("object/tangible/furniture/technical/shared_guild_registry_initial.iff", planet); diff --git a/src/services/LootService.java b/src/services/LootService.java index 12f43747..ff677f79 100644 --- a/src/services/LootService.java +++ b/src/services/LootService.java @@ -52,6 +52,7 @@ import resources.objects.creature.CreatureObject; import resources.objects.factorycrate.FactoryCrateObject; import resources.objects.group.GroupObject; import resources.objects.intangible.IntangibleObject; +import resources.objects.player.PlayerObject; import resources.objects.tangible.TangibleObject; import resources.objects.weapon.WeaponObject; import services.ai.AIActor; @@ -130,6 +131,9 @@ public class LootService implements INetworkDispatch { if (requester==null || lootedObject==null) return; //QA + if (! requester.isPlayer()) + return; //QA + GroupObject group = null; if(requester.getGroupId()!=0) group = (GroupObject) core.objectService.getObject(requester.getGroupId()); diff --git a/src/services/ai/AIActor.java b/src/services/ai/AIActor.java index b0489bd3..acb8996d 100644 --- a/src/services/ai/AIActor.java +++ b/src/services/ai/AIActor.java @@ -42,7 +42,10 @@ import services.ai.states.AIState; import services.ai.states.AIState.StateResult; import services.ai.states.AttackState; import services.ai.states.DeathState; +import services.ai.states.FollowState; import services.ai.states.IdleState; +import services.ai.states.LoiterState; +import services.ai.states.PatrolState; import services.ai.states.RetreatState; import services.combat.CombatEvents.DamageTaken; import services.spawn.MobileTemplate; @@ -66,7 +69,7 @@ public class AIActor { private boolean isStalking = false; private byte milkState = 0; private boolean hasBeenHarvested = false; - private Vector patrolPoints; + private Vector patrolPoints = new Vector(); private int patrolPointIndex = 0; private String loiterDestType = "LOITER"; private Point3D loiterDestination; @@ -75,13 +78,17 @@ public class AIActor { private float maxLoiterDist; private String waitState = "NO"; private long waitStartTime = 0L; + private AIState intendedPrimaryAIState; + private Point3D lastPositionBeforeStateChange; public AIActor(CreatureObject creature, Point3D spawnPosition, ScheduledExecutorService scheduler) { this.creature = creature; this.spawnPosition = spawnPosition; + setLastPositionBeforeStateChange(spawnPosition); // just to make sure it's initialized this.scheduler = scheduler; creature.getEventBus().subscribe(this); this.currentState = new IdleState(); + setIntendedPrimaryAIState(this.currentState); // to switch back to after aggro regenTask = scheduler.scheduleAtFixedRate(() -> { try { if(creature.getHealth() < creature.getMaxHealth() && !creature.isInCombat() && creature.getPosture() != 13 && creature.getPosture() != 14) @@ -95,14 +102,25 @@ public class AIActor { try { if(creature == null || creature.getObservers().isEmpty() || creature.isInCombat() || isStalking) return; - creature.getObservers().stream().map(Client::getParent).filter(obj -> obj.inRange(creature.getWorldPosition(), 10)).forEach((obj) -> { - if(new Random().nextFloat() <= 0.33 || creature.isInCombat() || isStalking) { + creature.getObservers().stream().map(Client::getParent).filter(obj -> obj.inRange(creature.getWorldPosition(), 15)).forEach((obj) -> { + if(new Random().nextFloat() <= 0.5 || creature.isInCombat() || isStalking) { /*if(mobileTemplate.isStalker()) { setFollowObject((CreatureObject) obj); setCurrentState(new StalkState()); } else */ - addDefender((CreatureObject) obj); - + + if (obj instanceof CreatureObject){ + CreatureObject addedObject = (CreatureObject) obj; + if (addedObject.getCalledPet()!=null){ + CreatureObject calledPet = addedObject.getCalledPet(); + if (calledPet.getPosture() != 13 && calledPet.getPosture() != 14){ + addDefender(calledPet); + } + } + if (addedObject.getPosture() != 13 && addedObject.getPosture() != 14){ + addDefender(addedObject); + } + } } }); } catch (Exception e) { @@ -301,11 +319,23 @@ public class AIActor { case StateResult.DEAD: setCurrentState(new DeathState()); + break; case StateResult.FINISHED: case StateResult.UNFINISHED: return; case StateResult.IDLE: setCurrentState(new IdleState()); + return; + case StateResult.PATROL: + setCurrentState(new PatrolState()); + return; + case StateResult.LOITER: + setCurrentState(new LoiterState()); + return; + case StateResult.FOLLOW: + setCurrentState(new FollowState()); + return; + //case StateResult.NONE: // System.out.println("State action returned error result"); @@ -385,7 +415,7 @@ public class AIActor { public void setPatrolPoints(Vector patrolPoints){ this.patrolPoints = patrolPoints; - setMovementPoints(patrolPoints); + //setMovementPoints(patrolPoints); } public int getPatrolPointIndex() { @@ -451,5 +481,26 @@ public class AIActor { public void setWaitStartTime(long waitStartTime) { this.waitStartTime = waitStartTime; } + + public Vector getPatrolPoints() { + return patrolPoints; + } + + public AIState getIntendedPrimaryAIState() { + return intendedPrimaryAIState; + } + + public void setIntendedPrimaryAIState(AIState intendedPrimaryAIState) { + this.intendedPrimaryAIState = intendedPrimaryAIState; + } + + public Point3D getLastPositionBeforeStateChange() { + return lastPositionBeforeStateChange; + } + + public void setLastPositionBeforeStateChange( + Point3D lastPositionBeforeStateChange) { + this.lastPositionBeforeStateChange = lastPositionBeforeStateChange; + } } diff --git a/src/services/ai/AIService.java b/src/services/ai/AIService.java index cc477b63..b492da20 100644 --- a/src/services/ai/AIService.java +++ b/src/services/ai/AIService.java @@ -33,6 +33,7 @@ import resources.datatables.GcwType; import resources.objects.creature.CreatureObject; import resources.objects.group.GroupObject; import resources.objects.player.PlayerObject; +import services.ai.states.AIState; import services.ai.states.IdleState; import services.ai.states.LoiterState; import services.ai.states.PatrolState; @@ -174,7 +175,9 @@ public class AIService { return; actor.setPatrolPoints(patrolpoints); - actor.setCurrentState(new PatrolState()); + AIState intendedPrimaryAIState = new PatrolState(); + actor.setIntendedPrimaryAIState(intendedPrimaryAIState); + actor.setCurrentState(intendedPrimaryAIState); } public void setPatrol(CreatureObject creature, boolean active){ @@ -182,8 +185,11 @@ public class AIService { if (actor==null) return; - if (active) - actor.setCurrentState(new PatrolState()); + if (active){ + AIState intendedPrimaryAIState = new PatrolState(); + actor.setIntendedPrimaryAIState(intendedPrimaryAIState); + actor.setCurrentState(intendedPrimaryAIState); + } else actor.setCurrentState(new IdleState()); } @@ -198,6 +204,20 @@ public class AIService { actor.setLoiterDestination(currentDestination); actor.setMinLoiterDist(minDist); actor.setMaxLoiterDist(maxDist); - actor.setCurrentState(new LoiterState()); + AIState intendedPrimaryAIState = new LoiterState(); + actor.setIntendedPrimaryAIState(intendedPrimaryAIState); + actor.setCurrentState(intendedPrimaryAIState); } + + public void logAI(String logMsg){ + if (checkDeveloperIdentity()){ + System.err.println("AI-LOG: " + logMsg); + } + } + + public boolean checkDeveloperIdentity(){ + if (System.getProperty("user.name").equals("Charon")) + return true; + return false; + } } diff --git a/src/services/ai/states/AIState.java b/src/services/ai/states/AIState.java index d7354dc7..1b2b84e7 100644 --- a/src/services/ai/states/AIState.java +++ b/src/services/ai/states/AIState.java @@ -21,6 +21,7 @@ ******************************************************************************/ package services.ai.states; +import java.util.NoSuchElementException; import java.util.Vector; import main.NGECore; @@ -50,6 +51,9 @@ public abstract class AIState { public static final byte DEAD = 3; // for deaggro or idling public static final byte IDLE = 4; + public static final byte PATROL = 5; + public static final byte LOITER = 6; + public static final byte FOLLOW = 7; } @@ -64,17 +68,28 @@ public abstract class AIState { boolean finished = false; float dx, dz, newX = 0, newY = 0, newZ = 0; Vector movementPoints = actor.getMovementPoints(); + Vector patrolPoints = actor.getPatrolPoints(); CellObject cell = null; //while(!finished && movementPoints.size() != 0) { - if (movementPoints.size() == 0) { - return false; + if ((!(actor.getCurrentState() instanceof FollowState)) && movementPoints.size() == 0 && patrolPoints.size() == 0) { + return false; } - targetPosition = movementPoints.firstElement(); + if (movementPoints.size() != 0){ + try{ + targetPosition = movementPoints.firstElement(); + } catch (NoSuchElementException e) { + targetPosition = currentPosition; + } + } if (actor.getCurrentState().getClass().equals(PatrolState.class)){ - targetPosition = movementPoints.get(actor.getPatrolPointIndex()); + targetPosition = patrolPoints.get(actor.getPatrolPointIndex()); + } + + if (actor.getCurrentState().getClass().equals(FollowState.class)){ + targetPosition = actor.getFollowObject().getWorldPosition(); } Vector path = core.aiService.findPath(creature.getPlanetId(), currentPosition, targetPosition); @@ -90,6 +105,8 @@ public abstract class AIState { Point3D oldPosition = null; float pathDistance = 0; + + for(int i = 1; i < path.size() && !finished; i++) { Point3D currentPathPosition = path.get(i); @@ -104,7 +121,7 @@ public abstract class AIState { finished = true; - if(currentPosition.getWorldPosition().getDistance(currentPathPosition.getWorldPosition()) <= stopDistance && cell == creature.getContainer()) { + if(movementPoints.size() != 0 && currentPosition.getWorldPosition().getDistance(currentPathPosition.getWorldPosition()) <= stopDistance && cell == creature.getContainer()) { if(i == path.size() - 1) movementPoints.remove(0); finished = false; @@ -273,6 +290,128 @@ public abstract class AIState { return true; } + public boolean findNewFollowPosition(AIActor actor, float speed, float stopDistance, Point3D newPosition) { + + speed *= 0.5; // 2 updates per second + CreatureObject creature = actor.getCreature(); + NGECore core = NGECore.getInstance(); + Point3D currentPosition = creature.getPosition(); + Point3D targetPosition = null; + float maxDistance = stopDistance; + boolean finished = false; + float dx, dz, newX = 0, newY = 0, newZ = 0; + Vector movementPoints = actor.getMovementPoints(); + Vector patrolPoints = actor.getPatrolPoints(); + CellObject cell = null; + //while(!finished && movementPoints.size() != 0) { + + if ((!(actor.getCurrentState() instanceof FollowState)) && movementPoints.size() == 0 && patrolPoints.size() == 0) { + return false; + } + + if (movementPoints.size() != 0) + targetPosition = movementPoints.firstElement(); + + if (actor.getCurrentState().getClass().equals(PatrolState.class)){ + targetPosition = patrolPoints.get(actor.getPatrolPointIndex()); + } + + if (actor.getCurrentState().getClass().equals(FollowState.class)){ + targetPosition = actor.getFollowObject().getWorldPosition(); + } + + Vector path = core.aiService.findPath(creature.getPlanetId(), currentPosition, targetPosition); + + float distanceToTarget = targetPosition.getWorldPosition().getDistance(creature.getWorldPosition()); + + if(distanceToTarget > stopDistance) { + maxDistance = Math.min(speed, distanceToTarget - stopDistance); + } else { + return false; + } + + Point3D oldPosition = null; + float pathDistance = 0; + + + + for(int i = 1; i < path.size() && !finished; i++) { + + Point3D currentPathPosition = path.get(i); + cell = currentPathPosition.getCell(); + + if(oldPosition == null) + oldPosition = path.get(0); + Point3D oldWorldPos = oldPosition.getWorldPosition(); + + pathDistance += oldWorldPos.getDistance(currentPathPosition.getWorldPosition()); + if(pathDistance >= maxDistance || i == path.size() - 1 || currentPathPosition.getCell() != creature.getContainer()) { + + finished = true; + + if(movementPoints.size() != 0 && currentPosition.getWorldPosition().getDistance(currentPathPosition.getWorldPosition()) <= stopDistance && cell == creature.getContainer()) { + if(i == path.size() - 1) + movementPoints.remove(0); + finished = false; + } else { + + if(cell == null) + oldPosition = oldPosition.getWorldPosition(); + else { + if(oldPosition.getCell() == null) + oldPosition = core.simulationService.convertPointToModelSpace(oldPosition, cell.getContainer()); + } + + if(pathDistance > maxDistance) { + + float distance = oldWorldPos.getDistance(currentPathPosition.getWorldPosition()); + float travelDistance = distance - (pathDistance - maxDistance); + // temp fix for melee npcs + travelDistance *= 1.3; + if(travelDistance <= 0) { + newX = currentPathPosition.x; + newZ = currentPathPosition.z; + } else { + + if(distance > 0) { + dx = currentPathPosition.x - oldPosition.x; + dz = currentPathPosition.z - oldPosition.z; + float deltaDist = (float) Math.sqrt((dx * dx) + (dz * dz)); + newX = (float) (oldPosition.x + (speed * (dx / deltaDist))); + newZ = (float) (oldPosition.z + (speed * (dz / deltaDist))); + + } else { + newX = currentPathPosition.x; + newZ = currentPathPosition.z; + } + + } + + if(cell == null) { + float height = core.terrainService.getHeight(creature.getPlanetId(), newX, newZ); + newY = height; + } else { + newY = currentPathPosition.y; + } + } + } + + } else { + newX = currentPathPosition.x; + newZ = currentPathPosition.z; + newY = core.terrainService.getHeight(creature.getPlanetId(), newX, newZ); + } + oldPosition = currentPathPosition; + } + //} + newPosition.x = newX; + newPosition.y = newY; + newPosition.z = newZ; + newPosition.setCell(cell); + + return true; + } + public void doMove(AIActor actor) { NGECore core = NGECore.getInstance(); @@ -320,7 +459,7 @@ public abstract class AIState { } public void doPatrol(AIActor actor) { - + //NGECore.getInstance().aiService.logAI("AI STATE doPatrol"); NGECore core = NGECore.getInstance(); CreatureObject creature = actor.getCreature(); @@ -347,10 +486,10 @@ public abstract class AIState { // Manage Patrol points maxDistance = 1; - Point3D currentDestination = actor.getMovementPoints().get(actor.getPatrolPointIndex()); + Point3D currentDestination = actor.getPatrolPoints().get(actor.getPatrolPointIndex()); //System.out.println("currentPosition.getDistance2D(currentDestination)<1) " + currentPosition.getDistance2D(currentDestination)); if (currentPosition.getDistance2D(currentDestination)<2){ - if (actor.getPatrolPointIndex() 0.0f) { + quaternion.y *= -1; + quaternion.w *= -1; + } + +// if (newPosition.getCell()==null) +// System.out.println("newPosition.getCell() is NULL"); + try{ + core.simulationService.moveObject(creature, newPosition, quaternion, creature.getMovementCounter(), speed, newPosition.getCell()); + } catch (NullPointerException e) { + // Just to identify what exactly is null here +// if (creature==null) +// System.out.print("creature==null" ); +// if (newPosition==null) +// System.out.print("newPosition==null" ); +// if (quaternion==null) +// System.out.print("quaternion==null" ); +// if (newPosition.getCell()==null) +// System.out.print("newPosition.getCell()==null" ); +// +// System.out.print("creature.getMovementCounter() " + creature.getMovementCounter()); } } diff --git a/src/services/ai/states/FollowState.java b/src/services/ai/states/FollowState.java new file mode 100644 index 00000000..01efb83a --- /dev/null +++ b/src/services/ai/states/FollowState.java @@ -0,0 +1,66 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package services.ai.states; + +import main.NGECore; +import resources.objects.creature.CreatureObject; +import services.ai.AIActor; + +public class FollowState extends AIState { + + @Override + public byte onEnter(AIActor actor) { + // TODO Auto-generated method stub + NGECore.getInstance().aiService.logAI("FOLLOW ENTERED!"); + CreatureObject creature = actor.getCreature(); + if(creature.getPosture() == 14) + return StateResult.DEAD; + actor.scheduleMovement(); + actor.scheduleRecovery(); + return StateResult.UNFINISHED; + } + + @Override + public byte onExit(AIActor actor) { + // TODO Auto-generated method stub + NGECore.getInstance().aiService.logAI("EXITING FOLLOW STATE"); + return 0; + } + + @Override + public byte move(AIActor actor) { + // TODO Auto-generated method stub + //System.out.println("move in patrolState"); + doFollow(actor); +// if (actor.getCreature().getPlanet().getName().equals("dathomir")) +// NGECore.getInstance().aiService.logAI("WalkingSpeed " + actor.getCreature().getWalkSpeed()); + actor.scheduleMovement(); + return StateResult.UNFINISHED; + } + + @Override + public byte recover(AIActor actor) { + // TODO Auto-generated method stub + return 0; + } + +} diff --git a/src/services/ai/states/LoiterState.java b/src/services/ai/states/LoiterState.java index 1358185a..7acf9458 100644 --- a/src/services/ai/states/LoiterState.java +++ b/src/services/ai/states/LoiterState.java @@ -28,7 +28,6 @@ public class LoiterState extends AIState { @Override public byte onEnter(AIActor actor) { - // TODO Auto-generated method stub CreatureObject creature = actor.getCreature(); if(creature.getPosture() == 14) return StateResult.DEAD; @@ -45,7 +44,6 @@ public class LoiterState extends AIState { @Override public byte move(AIActor actor) { - // TODO Auto-generated method stub doLoiter(actor); actor.scheduleMovement(); return StateResult.UNFINISHED; diff --git a/src/services/ai/states/PatrolState.java b/src/services/ai/states/PatrolState.java index 27218b1c..2a571391 100644 --- a/src/services/ai/states/PatrolState.java +++ b/src/services/ai/states/PatrolState.java @@ -21,6 +21,7 @@ ******************************************************************************/ package services.ai.states; +import main.NGECore; import resources.objects.creature.CreatureObject; import services.ai.AIActor; @@ -29,6 +30,7 @@ public class PatrolState extends AIState { @Override public byte onEnter(AIActor actor) { // TODO Auto-generated method stub + NGECore.getInstance().aiService.logAI("PATROL ENTERED!"); CreatureObject creature = actor.getCreature(); if(creature.getPosture() == 14) return StateResult.DEAD; @@ -40,6 +42,8 @@ public class PatrolState extends AIState { @Override public byte onExit(AIActor actor) { // TODO Auto-generated method stub + NGECore.getInstance().aiService.logAI("EXITING PATROL STATE"); + actor.setLastPositionBeforeStateChange(actor.getCreature().getWorldPosition()); return 0; } @@ -48,6 +52,8 @@ public class PatrolState extends AIState { // TODO Auto-generated method stub //System.out.println("move in patrolState"); doPatrol(actor); +// if (actor.getCreature().getPlanet().getName().equals("dathomir")) +// NGECore.getInstance().aiService.logAI("WalkingSpeed " + actor.getCreature().getWalkSpeed()); actor.scheduleMovement(); return StateResult.UNFINISHED; } diff --git a/src/services/ai/states/RetreatState.java b/src/services/ai/states/RetreatState.java index 315f8cb3..00aa451e 100644 --- a/src/services/ai/states/RetreatState.java +++ b/src/services/ai/states/RetreatState.java @@ -21,6 +21,8 @@ ******************************************************************************/ package services.ai.states; +import main.NGECore; +import engine.resources.scene.Point3D; import services.ai.AIActor; public class RetreatState extends AIState { @@ -32,6 +34,7 @@ public class RetreatState extends AIState { actor.removeDefender(defender); } }*/ + NGECore.getInstance().aiService.logAI("RetreatState ENTER "); actor.setFollowObject(null); actor.scheduleMovement(); return StateResult.UNFINISHED; @@ -40,17 +43,38 @@ public class RetreatState extends AIState { @Override public byte onExit(AIActor actor) { // TODO Auto-generated method stub + //actor.setCurrentState(actor.getIntendedPrimaryAIState()); return StateResult.FINISHED; } @Override public byte move(AIActor actor) { - actor.setNextPosition(actor.getSpawnPosition()); + + Point3D retreatPosition = actor.getSpawnPosition(); + if (actor.getIntendedPrimaryAIState() instanceof PatrolState) + retreatPosition = actor.getLastPositionBeforeStateChange(); + + actor.setNextPosition(retreatPosition); + actor.getMovementPoints().clear(); + actor.getMovementPoints().add(retreatPosition); doMove(actor); - if(actor.getCreature().getWorldPosition().getDistance(actor.getSpawnPosition()) > 3) { + + if (actor.getIntendedPrimaryAIState().getClass().equals(FollowState.class)) + return StateResult.FOLLOW; + + if(actor.getCreature().getWorldPosition().getDistance(retreatPosition) > 5) { + //NGECore.getInstance().aiService.logAI("RetreatState ENTER move if case dist " + actor.getCreature().getWorldPosition().getDistance(retreatPosition)); actor.scheduleMovement(); } else { - return StateResult.IDLE; + //NGECore.getInstance().aiService.logAI("RetreatState ENTER move else case"); + if (actor.getIntendedPrimaryAIState().getClass().equals(IdleState.class)) + return StateResult.IDLE; + if (actor.getIntendedPrimaryAIState().getClass().equals(PatrolState.class)) + return StateResult.PATROL; + if (actor.getIntendedPrimaryAIState().getClass().equals(LoiterState.class)) + return StateResult.LOITER; + if (actor.getIntendedPrimaryAIState().getClass().equals(FollowState.class)) + return StateResult.FOLLOW; } return StateResult.UNFINISHED; } diff --git a/src/services/combat/CombatService.java b/src/services/combat/CombatService.java index 2a732b7a..83c6c742 100644 --- a/src/services/combat/CombatService.java +++ b/src/services/combat/CombatService.java @@ -318,6 +318,15 @@ public class CombatService implements INetworkDispatch { core.mountService.damage((CreatureObject) target); } + if (target instanceof CreatureObject){ + CreatureObject targetCreature = (CreatureObject)target; + if (targetCreature.getCalledPet()!=null) { + AIActor petActor = (AIActor) targetCreature.getCalledPet().getAttachment("AI"); + if (petActor!=null) + petActor.addDefender(attacker); + } + } + DamageTaken event = events.new DamageTaken(); event.attacker = attacker; event.damage = damage; diff --git a/src/services/pet/MountService.java b/src/services/pet/MountService.java index e326c362..39e78ecb 100644 --- a/src/services/pet/MountService.java +++ b/src/services/pet/MountService.java @@ -36,6 +36,7 @@ import resources.datatables.State; import resources.objects.building.BuildingObject; import resources.objects.creature.CreatureObject; import resources.objects.player.PlayerObject; +import services.ai.AIActor; import engine.clientdata.ClientFileManager; import engine.clientdata.visitors.DatatableVisitor; import engine.resources.container.Traverser; @@ -184,6 +185,8 @@ public class MountService implements INetworkDispatch { mount.setFaction(actor.getFaction()); mount.setFactionStatus(actor.getFactionStatus()); mount.setOwnerId(actor.getObjectID()); + AIActor aiActor = (AIActor) mount.getAttachment("AI"); + aiActor.setFollowObject(actor); if (pcd.getTemplate().contains("vehicle")) { callVehicle(actor, pcd, player, mount); @@ -786,5 +789,5 @@ public class MountService implements INetworkDispatch { public void shutdown() { } - + } diff --git a/src/services/pet/PetService.java b/src/services/pet/PetService.java new file mode 100644 index 00000000..bf863810 --- /dev/null +++ b/src/services/pet/PetService.java @@ -0,0 +1,794 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package services.pet; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.concurrent.atomic.LongAdder; + +import protocol.swg.UpdateContainmentMessage; +import main.NGECore; +import resources.common.OutOfBand; +import resources.datatables.DisplayType; +import resources.datatables.Options; +import resources.datatables.Posture; +import resources.datatables.State; +import resources.objects.building.BuildingObject; +import resources.objects.creature.CreatureObject; +import resources.objects.player.PlayerObject; +import services.ai.AIActor; +import services.ai.states.FollowState; +import engine.clientdata.ClientFileManager; +import engine.clientdata.visitors.DatatableVisitor; +import engine.resources.container.Traverser; +import engine.resources.objects.SWGObject; +import engine.resources.service.INetworkDispatch; +import engine.resources.service.INetworkRemoteEvent; + +public class PetService implements INetworkDispatch { + + private NGECore core; + + public PetService(NGECore core) { + this.core = core; + } + + + + public void generateMount(CreatureObject actor, SWGObject deed, String vehicleTemplate, String pcdTemplate) { + return; // NOT IMPLEMENTED + } + + public void call(CreatureObject actor, CreatureObject pet, SWGObject pcd) { + if (actor == null) { + return; + } + + if (pcd == null) { + System.out.println("(pcd == null)"); + actor.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:cant_call"), DisplayType.Broadcast); + return; + } + + if (isMounted(actor)) { + actor.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:cannot_call_another_rideable"), DisplayType.Broadcast); + return; + } + + if (actor.isInCombat()) { + actor.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:cannot_call_in_combat"), DisplayType.Broadcast); + return; + } + + if (actor.getContainer() != null) { + actor.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:cannot_call_indoors"), DisplayType.Broadcast); + return; + } + + if (actor.getPosture() == Posture.Dead) { + actor.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:cannot_call_while_dead"), DisplayType.Broadcast); + return; + } + +// if (pcd.getSlottedObject("inventory") == null) { +// System.out.println("(pcd.getSlottedObject(inventory)"); +// actor.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:cant_call"), DisplayType.Broadcast); +// return; +// } + + + + PlayerObject player = (PlayerObject) actor.getSlottedObject("ghost"); + + if (player == null) { + return; + } + + //CreatureObject mount = (CreatureObject) core.objectService.getObject((Long) pcd.getAttachment("companionId")); + + if (pet == null) { + System.out.println("mount == null)"); + // Somehow the vehicle object has got lost + actor.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:cant_call"), DisplayType.Broadcast); + return; + } + + //pet.setAttachment("pcdAppearanceFilename", pcd.getTemplateData().getAttribute("appearanceFilename")); + + pet.setFaction(actor.getFaction()); + pet.setFactionStatus(actor.getFactionStatus()); + pet.setOwnerId(actor.getObjectID()); + AIActor aiActor = (AIActor) pet.getAttachment("AI"); + aiActor.setFollowObject(actor); + aiActor.setCurrentState(new FollowState()); + + if (pcd.getTemplate().contains("vehicle")) { + callVehicle(actor, pcd, player, pet); + } else { + callMount(actor, pcd, player, pet); + } + } + + private void callVehicle(CreatureObject actor, SWGObject pcd, PlayerObject player, CreatureObject mount) { + if ((mount.getLevel() - actor.getLevel()) > 5) { + actor.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:cant_call_level"), DisplayType.Broadcast); + return; + } + + // FIXME Movement skillmod should always be used instead of CREO4 speed vars directly. Movement skillmod should NEVER be 0 unless rooted. Currently it is, which is wrong. + //if (actor.getSkillModBase("movement") == 0) { + //actor.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:cant_call_vehicle_rooted"), DisplayType.Broadcast); + //return; + //} + + if (actor.getPlanet().getName().contains("kashyyyk") && !actor.getPlanet().getName().contains("_main")) { + actor.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:vehicle_restricted_scene"), DisplayType.Broadcast); + //mount_restricted_scene for creature mounts + return; + } + + if (player.isCallingCompanion()) { + actor.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:cant_call_1sec"), DisplayType.Broadcast); + return; + } + + storeAll(actor); + + player.setCallingCompanion(true); + + if (actor.getTefTime() > 0) { + actor.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:call_vehicle_delay", actor.getTefTime()), DisplayType.Broadcast); + } + + try { + while (actor.getTefTime() > 0) { + Thread.sleep(3000); + } + } catch (InterruptedException e) { + e.printStackTrace(); + } + + SWGObject datapad = actor.getSlottedObject("datapad"); + + if (datapad == null) { + return; + } + + datapad.viewChildren(actor, false, false, new Traverser() { + + public void process(SWGObject pcd) { + if (pcd.getAttachment("companionId") != null && mount.getObjectID() == ((Long) pcd.getAttachment("companionId"))) { + if (pcd.getSlottedObject("inventory") != null) { + LongAdder adder = new LongAdder(); + pcd.getSlottedObject("inventory").viewChildren(actor, false, false, (obj) -> adder.increment()); + + if (adder.intValue() == 1) { + pcd.getSlottedObject("inventory").remove(mount); + mount.setPosition(actor.getPosition().clone()); + mount.setOrientation(actor.getOrientation().clone()); + mount.setPlanet(actor.getPlanet()); + core.simulationService.add(mount, actor.getWorldPosition().x, actor.getWorldPosition().z, false); + } + } + } + } + + }); + + player.setCallingCompanion(false); + } + + private void callMount(CreatureObject actor, SWGObject pcd, PlayerObject player, CreatureObject mount) { + return; // NOT IMPLEMENTED + } + + public void damage(CreatureObject mount) { + // alter components to progressively reduce the painting. + //stfs + //customization_fading_veh + //customization_gone_veh + + if (mount == null) { + return; + } + + CreatureObject owner = (CreatureObject) core.objectService.getObject(mount.getOwnerId()); + + if (!mount.getTemplate().contains("vehicle")) { + dismount(owner, mount); + store(owner, mount); + mount.setConditionDamage(0); + return; + } + + if (mount.getConditionDamage() >= mount.getMaximumCondition()) { + disable(mount); + } + } + + public void disable(CreatureObject mount) { + mount.setOptions(Options.DISABLED, true); + + mount.viewChildren(mount, false, false, new Traverser() { + + public void process(SWGObject object) { + if (object == null || !(object instanceof CreatureObject)) { + return; + } + + CreatureObject rider = (CreatureObject) object; + + dismount(rider, mount); + + rider.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:veh_disabled"), DisplayType.Broadcast); + } + + }); + } + + public boolean canRepair(CreatureObject actor, CreatureObject mount) { + if (actor == null || mount == null) { + return false; + } + + if (!mount.getOption(Options.MOUNT)) { + return false; + } + + if (!mount.getTemplate().contains("vehicle")) { + return false; + } + + if (mount.getOwnerId() != actor.getObjectID()) { + return false; + } + + if (mount.getOption(Options.DISABLED)) { + return false; + } + + if (mount.getConditionDamage() == 0) { + return false; + } + + List surroundings = core.simulationService.get(mount.getPlanet(), mount.getPosition().x, mount.getPosition().z, 32); + + for (SWGObject object : surroundings) { + if (object instanceof BuildingObject) { + if (object.getTemplate().contains("garage")) { + return true; + } + } + } + + return false; + } + + public void repair(CreatureObject repairer, CreatureObject mount) { + if (repairer == null || mount == null) { + return; + } + + if (!mount.getOption(Options.MOUNT)) { + return; + } + + if (core.objectService.getObject(mount.getOwnerId()) != repairer) { + return; + } + + if (mount.getOption(Options.DISABLED)) { + repairer.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:cannot_repair_disabled"), DisplayType.Broadcast); + return; + } + + if (mount.getConditionDamage() == 0) { + repairer.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:undamaged_vehicle"), DisplayType.Broadcast); + return; + } + + // This should produce an SUI window regarding cost and cost might be determined differently. + // But at the moment it's not important. + + if (!canRepair(repairer, mount)) { + repairer.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:repair_unrecognized_garages"), DisplayType.Broadcast); + return; + } + + int cost = mount.getConditionDamage(); + + if (repairer.getCashCredits() < cost) { + repairer.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:repair_failed_due_to_funds"), DisplayType.Broadcast); + return; + } + + mount.setConditionDamage(0); + + mount.setOptions(Options.DISABLED, false); + + repairer.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:repaired_to_max"), DisplayType.Broadcast); + } + + public void mount(CreatureObject rider, CreatureObject mount) { + // Check if mount may be mounted // This is already checked in canMount + + if (rider == null) { + return; + } + + if (mount == null) { + return; + } + + if (!mount.getOption(Options.MOUNT)) { + return; + } + + if (mount.getOption(Options.DISABLED)) { + rider.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:cant_mount_veh_disabled"), DisplayType.Broadcast); + return; + } + + if (rider.isInStealth()) { + rider.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:no_mount_stealth"), DisplayType.Broadcast); + return; + } + + if (!canMount(rider, mount)) { + rider.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:cant_mount"), DisplayType.Broadcast); + return; + } + + mount._add(rider); + mount.notifyObservers(new UpdateContainmentMessage(rider.getObjectID(), mount.getObjectID(), 4), true); + core.simulationService.remove(rider, rider.getWorldPosition().x, rider.getWorldPosition().z, false); + + rider.setState(State.RidingMount, true); + mount.setState(State.MountedCreature, true); + + // For some reason SOE decided the mount would need the following posture to be set for the character to have the driving or riding animation. + mount.setPosture((mount.getTemplate().contains("vehicle")) ? Posture.DrivingVehicle : Posture.RidingCreature); + + if (!mount.getSlotNameForObject(rider).equals("rider1")) { + core.buffService.addBuffToCreature(rider, "vehicle_passenger", mount); + } + } + + public CreatureObject getMount(SWGObject pcd) { + if (pcd == null) { + return null; + } + + if (pcd.getAttachment("companionId") == null) { + return null; + } + + CreatureObject mount = (CreatureObject) core.objectService.getObject((Long) pcd.getAttachment("companionId")); + + if (mount == null) { + return null; + } + + if (mount.getContainer() != null) { + return null; + } + + return mount; + } + + public CreatureObject getCompanion(CreatureObject actor) { + if (actor == null) { + return null; + } + + if (isMounted(actor)) { + return (CreatureObject) actor.getContainer(); + } + + SWGObject datapad = actor.getSlottedObject("datapad"); + + if (datapad == null) { + return null; + } + + final List companions = new ArrayList(); + + datapad.viewChildren(actor, false, false, new Traverser() { + + public void process(SWGObject pcd) { + if (pcd.getAttachment("companionId") != null) { + if (pcd.getSlottedObject("inventory") != null) { + LongAdder adder = new LongAdder(); + pcd.getSlottedObject("inventory").viewChildren(actor, false, false, (obj) -> adder.increment()); + + if (adder.intValue() == 0) { + CreatureObject companion = (CreatureObject) core.objectService.getObject((Long) pcd.getAttachment("companionId")); + companions.add(companion); + } + } + } + } + + }); + + if (companions.size() > 0) { + return companions.get(0); + } else { + return null; + } + } + + public boolean isMounted(CreatureObject rider) { + if (rider.getContainer() == null) { + return false; + } + + if (!(rider.getContainer() instanceof CreatureObject)) { + return false; + } + + CreatureObject mount = (CreatureObject) rider.getContainer(); + + if (!mount.getOption(Options.MOUNT)) { + return false; + } + + return true; + } + + public boolean isMounted(SWGObject actor, CreatureObject mount) { + return actor.getContainer() == mount; + } + + public boolean canMount(CreatureObject rider, CreatureObject mount) { + if (mount == null) { + return false; + } + + if (!mount.getOption(Options.MOUNT)) { + return false; + } + + if (isMounted(rider)) { + return false; + } + + if (rider.getObjectID() == mount.getOwnerId()) { + return true; + } + + // It's a potential passenger + + // See if there's driver first + if (mount.getSlottedObject("rider") == null) { + return false; + } + + // Check if there are any passenger slots left + + LongAdder adder = new LongAdder(); + + try { + mount.viewChildren(mount, false, false, (object) -> adder.increment()); + } catch(Exception ex) { + + } + + int passengers = adder.intValue(); + + try { + DatatableVisitor visitor = ClientFileManager.loadFile("datatables/mount/saddle_appearance_map.iff", DatatableVisitor.class); + + for (int i = 0; i < visitor.getRowCount(); i++) { + if (visitor.getObject(i, 2).equals(mount.getAttachment("pcdAppearanceFilename"))) { // saddle_appearance_filename + if (passengers >= (int) visitor.getObject(i, 1)) { // saddle_capacity + return false; + } + + break; + } + } + } catch (Exception e) { + e.printStackTrace(); + } + + CreatureObject owner = (CreatureObject) NGECore.getInstance().objectService.getObject(mount.getOwnerId()); + + if (owner == null) { + return false; + } + + if (owner.isAttackableBy(rider)) { + return false; + } + + if (rider.getGroupId() == 0 || rider.getGroupId() != owner.getGroupId()) { + return false; + } + + return true; + } + + public void dismount(CreatureObject rider, CreatureObject mount) { + + if (rider == null || mount == null) { + return; + } + + if (!isMounted(rider)) { + return; + } + + if (!mount.getOption(Options.MOUNT)) { + return; + } + + // Dismount all passengers + if (rider.getObjectID() == mount.getOwnerId()) { + + mount.viewChildren(mount, false, false, new Traverser() + { + public void process(SWGObject passenger) + { + if (passenger.getObjectId() != mount.getOwnerId()) dismount((CreatureObject) passenger, mount); + } + + }); + } + + // Remove rider from mount + mount._remove(rider); + + // Set mount states and stuff + if (rider.getObjectID() == mount.getOwnerId()) { + mount.setStateBitmask(mount.getOptionsBitmask() & ~State.MountedCreature); + mount.setState(State.MountedCreature, false); + } + + // Set rider states and stuff + rider.setStateBitmask(rider.getOptionsBitmask() & ~State.RidingMount); + rider.setState(State.RidingMount, false); + rider.setPosture(Posture.Upright); + + // Update observers and quadtree + mount.notifyObservers(new UpdateContainmentMessage(rider.getObjectID(), 0, -1), true); + core.simulationService.teleport(rider, mount.getWorldPosition(), mount.getOrientation(), 0); + core.simulationService.add(rider, mount.getWorldPosition().x, mount.getWorldPosition().z, false); + + core.buffService.clearBuffs(mount); + core.buffService.removeBuffFromCreature(rider, rider.getBuffByName("vehicle_passenger")); + + // Store mount if it's a creature + if (!mount.getTemplate().contains("vehicle") && rider.getObjectID() == mount.getOwnerId()) { + store(rider, mount); + } + } + + /* + * They seem to have been stored in the inventory of the pcd object. + * Judging by the fact pcds have inventories and many other things don't. + */ + public void store(CreatureObject storer, CreatureObject mount) { + if (mount == null) { + System.err.println("MountService:store(): mount is null; this should never be the case."); + return; + } + + if (mount.getContainer() != null) { + return; + } + + if (mount.getOwnerId() == 0) { + return; + } + + CreatureObject owner = (CreatureObject) core.objectService.getObject(mount.getOwnerId()); + + if (owner == null || storer == null || owner != storer) { + return; + } + + PlayerObject player = (PlayerObject) owner.getSlottedObject("ghost"); + + if (player.isCallingCompanion()) { + storer.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:cant_store_1sec"), DisplayType.Broadcast); + return; + } + + if (isMounted(owner, mount)) { + //storer.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:must_dismount"), DisplayType.Broadcast); + //return; + dismount(storer, mount); + } + + if (owner.getTefTime() > 0) { + owner.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:prose_cant_store_yet", owner.getTefTime()), DisplayType.Broadcast); + return; + } + + SWGObject datapad = owner.getSlottedObject("datapad"); + + if (datapad == null) { + return; + } + + datapad.viewChildren(owner, false, false, new Traverser() { + + public void process(SWGObject pcd) { + if (pcd.getAttachment("companionId") != null && mount.getObjectID() == ((Long) pcd.getAttachment("companionId"))) { + if (pcd.getSlottedObject("inventory") != null) { + LongAdder adder = new LongAdder(); + pcd.getSlottedObject("inventory").viewChildren(owner, false, false, (obj) -> adder.increment()); + + if (adder.intValue() == 0) { + core.simulationService.remove(mount, mount.getWorldPosition().x, mount.getWorldPosition().z, true); + pcd.getSlottedObject("inventory").add(mount); + } + } + } + } + + }); + } + + public void storeAll(CreatureObject actor) { + if (actor == null) { + return; + } + + while (getCompanion(actor) != null) { + SWGObject mount = getCompanion(actor); + + SWGObject datapad = actor.getSlottedObject("datapad"); + + if (datapad == null) { + return; + } + + datapad.viewChildren(actor, false, false, new Traverser() { + + public void process(SWGObject pcd) { + if (pcd.getAttachment("companionId") != null && mount.getObjectID() == ((Long) pcd.getAttachment("companionId"))) { + if (pcd.getSlottedObject("inventory") != null) { + LongAdder adder = new LongAdder(); + pcd.getSlottedObject("inventory").viewChildren(actor, false, false, (obj) -> adder.increment()); + + if (adder.intValue() == 0) { + core.simulationService.remove(mount, mount.getWorldPosition().x, mount.getWorldPosition().z, true); + pcd.getSlottedObject("inventory").add(mount); + } + } + } + } + + }); + } + } + + public void destroy(CreatureObject destroyer, SWGObject pcd) { + if (destroyer == null || pcd == null || pcd.getGrandparent() == null) { + return; + } + + if (destroyer.getObjectID() != pcd.getGrandparent().getObjectID()) { + return; + } + + if (pcd.getAttachment("companionId") == null) { + return; + } + + CreatureObject mount = (CreatureObject) core.objectService.getObject((Long) pcd.getAttachment("companionId")); + + dismount(destroyer, mount); + + store(destroyer, mount); + + String type = mount.getTemplate(); + + core.objectService.destroyObject(mount); + core.objectService.destroyObject(pcd); + + if (type.contains("vehicle")) { + destroyer.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:vehicle_released"), DisplayType.Broadcast); + } else { + destroyer.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:pet_released"), DisplayType.Broadcast); + } + } + + public void insertOpcodes(Map arg0, Map arg1) { + + } + + public void shutdown() { + + } + + + public void generatePet(CreatureObject actor, SWGObject deed, String petTemplate, String pcdTemplate) { + if (actor == null || petTemplate == null || pcdTemplate == null) { + return; + } + + if (actor.getSlottedObject("ghost") == null) { + actor.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:failed_to_call_vehicle"), DisplayType.Broadcast); + return; + } + + SWGObject datapad = actor.getSlottedObject("datapad"); + + if (datapad == null) { + return; + } + + // Unsure if these are the right attributes. It doesn't generate the vehicle if the datapad has max # of vehicles. + //if (datapad.getIntAttribute("data_size") >= datapad.getIntAttribute("datapad_slots")) { + //actor.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:has_max_vehicle"), DisplayType.Broadcast); + //return; + //} + + if (actor.getTefTime() > 0){ + actor.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:prose_cant_generate_yet", actor.getTefTime()), DisplayType.Broadcast); + return; + } + + SWGObject pcd = core.objectService.createObject(pcdTemplate, actor.getPlanet()); + + if (pcd == null) { + return; + } + +// if (pcd.getSlottedObject("inventory") == null) { +// pcd.add(core.objectService.createObject("object/tangible/inventory/shared_character_inventory.iff", pcd.getPlanet())); +// } + + //CreatureObject vehicle = (CreatureObject) core.objectService.createObject(petTemplate, actor.getPlanet()); + + CreatureObject pet = (CreatureObject) NGECore.getInstance().staticService.spawnObject(petTemplate, actor.getPlanet().getName(), 0L, actor.getWorldPosition().x, actor.getWorldPosition().y, actor.getWorldPosition().z, actor.getOrientation().y, actor.getOrientation().w); + + if (pet == null) { + return; + } + + +// pet.setOptions(Options.MOUNT | Options.ATTACKABLE, true); +// + pet.setOwnerId(actor.getObjectID()); + actor.setCalledPet(pet); +// + pcd.setAttachment("companionId", pet.getObjectID()); +// +// //pcd.getSlottedObject("inventory").add(pet); +// + datapad.add(pcd); +// + if (deed != null) { + core.objectService.destroyObject(deed); + } + + actor.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:device_added"), DisplayType.Broadcast); + + call(actor, pet, pcd); + } + +} From e48749eae1b354cc9176b10f88f7ac3944fd813f Mon Sep 17 00:00:00 2001 From: Ziggeh Date: Sun, 29 Jun 2014 20:41:09 +0200 Subject: [PATCH 45/92] Added Deed for Jetpack --- scripts/object/tangible/deed/vehicle_deed/jetpack_deed.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/scripts/object/tangible/deed/vehicle_deed/jetpack_deed.py b/scripts/object/tangible/deed/vehicle_deed/jetpack_deed.py index ccad8904..d042fbeb 100644 --- a/scripts/object/tangible/deed/vehicle_deed/jetpack_deed.py +++ b/scripts/object/tangible/deed/vehicle_deed/jetpack_deed.py @@ -1,4 +1,9 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/vehicleDeed') + return + +def use(core, actor, object): + core.mountService.generateVehicle(actor, object, 'object/mobile/vehicle/shared_jetpack.iff', 'object/intangible/vehicle/shared_jetpack_pcd.iff') return \ No newline at end of file From f69f1b4c9b0dba71a8fba7f1e946c792e40ec581 Mon Sep 17 00:00:00 2001 From: Ziggeh Date: Sun, 29 Jun 2014 20:45:34 +0200 Subject: [PATCH 46/92] Fixed Deed for BARC Speeder --- .../deed/vehicle_deed/barc_speeder_deed.py | 36 ++----------------- 1 file changed, 3 insertions(+), 33 deletions(-) diff --git a/scripts/object/tangible/deed/vehicle_deed/barc_speeder_deed.py b/scripts/object/tangible/deed/vehicle_deed/barc_speeder_deed.py index 17638f96..5bd711f9 100644 --- a/scripts/object/tangible/deed/vehicle_deed/barc_speeder_deed.py +++ b/scripts/object/tangible/deed/vehicle_deed/barc_speeder_deed.py @@ -5,36 +5,6 @@ def setup(core, object): return def use(core, actor, object): - if object.getStfName() == ('barc_speeder'): - datapad = actor.getSlottedObject('datapad') - pcd = core.objectService.createObject('object/intangible/vehicle/shared_barc_speeder_pcd.iff', actor.getPlanet(), actor.getPosition().x, actor.getPosition().z,actor.getPosition().y) - - if datapad and pcd: - - datapad.add(pcd) - core.objectService.destroyObject(object) - - vehicleId = actor.getAttachment('activeVehicleID') - - if vehicleId == None: - vehicle = core.objectService.createObject('object/mobile/vehicle/shared_barc_speeder.iff', actor.getPlanet(), actor.getPosition().x, actor.getPosition().z,actor.getPosition().y) - vehicle.setOwnerId(actor.getObjectID()) - core.simulationService.add(vehicle, vehicle.getPosition().x, vehicle.getPosition().z, True) - actor.setAttachment('activeVehicleID', vehicle.getObjectID()) - elif object.getStfName() == ('item_deed_barc_rebel_06_01'): - datapad = actor.getSlottedObject('datapad') - pcd = core.objectService.createObject('object/intangible/vehicle/shared_barc_speeder_rebel_pcd.iff', actor.getPlanet(), actor.getPosition().x, actor.getPosition().z,actor.getPosition().y) - - if datapad and pcd: - - datapad.add(pcd) - core.objectService.destroyObject(object) - - vehicleId = actor.getAttachment('activeVehicleID') - - if vehicleId == None: - vehicle = core.objectService.createObject('object/mobile/vehicle/shared_barc_speeder_rebel.iff', actor.getPlanet(), actor.getPosition().x, actor.getPosition().z,actor.getPosition().y) - vehicle.setOwnerId(actor.getObjectID()) - core.simulationService.add(vehicle, vehicle.getPosition().x, vehicle.getPosition().z, True) - actor.setAttachment('activeVehicleID', vehicle.getObjectID()) - return \ No newline at end of file + core.mountService.generateVehicle(actor, object, 'object/mobile/vehicle/shared_barc_speeder.iff', 'object/intangible/vehicle/shared_barc_speeder_pcd.iff') + return + \ No newline at end of file From 6f12467a7516750fd19e6c64b5ffd142b3922a1e Mon Sep 17 00:00:00 2001 From: Waverunner Date: Sun, 29 Jun 2014 14:47:45 -0400 Subject: [PATCH 47/92] Fixed null error when sending mail to an offline player --- src/services/chat/ChatService.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/services/chat/ChatService.java b/src/services/chat/ChatService.java index df40f785..15f9c1dd 100644 --- a/src/services/chat/ChatService.java +++ b/src/services/chat/ChatService.java @@ -289,8 +289,11 @@ public class ChatService implements INetworkDispatch { return; } - SWGObject recipient = getObjectByFirstName(packet.getRecipient()); - + SWGObject recipient = core.objectService.getObjectByFirstName(packet.getRecipient()); + + if (recipient == null) + return; + PlayerObject recipientGhost = (PlayerObject) recipient.getSlottedObject("ghost"); if (recipientGhost.getIgnoreList().contains(sender.getCustomName().toLowerCase())) From c49df6fec380fcacc4850255f6c6c6960b14ef6a Mon Sep 17 00:00:00 2001 From: Ziggeh Date: Sun, 29 Jun 2014 21:23:18 +0200 Subject: [PATCH 48/92] Added Deed for Merr-Sonn JT12 Jetpack --- .../tcg/series3/deed_tcg_merr_sonn_jt12_jetpack.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/scripts/object/tangible/tcg/series3/deed_tcg_merr_sonn_jt12_jetpack.py b/scripts/object/tangible/tcg/series3/deed_tcg_merr_sonn_jt12_jetpack.py index ccad8904..480d6918 100644 --- a/scripts/object/tangible/tcg/series3/deed_tcg_merr_sonn_jt12_jetpack.py +++ b/scripts/object/tangible/tcg/series3/deed_tcg_merr_sonn_jt12_jetpack.py @@ -1,4 +1,10 @@ import sys def setup(core, object): - return \ No newline at end of file + object.setAttachment('radial_filename', 'deeds/vehicleDeed') + return + +def use(core, actor, object): + core.mountService.generateVehicle(actor, object, 'object/mobile/vehicle/shared_tcg_merr_sonn_jt12_jetpack.iff', 'object/intangible/vehicle/shared_tcg_merr_sonn_jt12_jetpack_pcd.iff') + return + \ No newline at end of file From 99a1b523ec6a15ed4cbdd39a103133124947ae70 Mon Sep 17 00:00:00 2001 From: Ziggeh Date: Sun, 29 Jun 2014 20:41:09 +0200 Subject: [PATCH 49/92] Added Deed for Jetpack --- scripts/object/tangible/deed/vehicle_deed/jetpack_deed.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/scripts/object/tangible/deed/vehicle_deed/jetpack_deed.py b/scripts/object/tangible/deed/vehicle_deed/jetpack_deed.py index ccad8904..d042fbeb 100644 --- a/scripts/object/tangible/deed/vehicle_deed/jetpack_deed.py +++ b/scripts/object/tangible/deed/vehicle_deed/jetpack_deed.py @@ -1,4 +1,9 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/vehicleDeed') + return + +def use(core, actor, object): + core.mountService.generateVehicle(actor, object, 'object/mobile/vehicle/shared_jetpack.iff', 'object/intangible/vehicle/shared_jetpack_pcd.iff') return \ No newline at end of file From 745991a960534e3a5f5bc85081df16662d2e74f9 Mon Sep 17 00:00:00 2001 From: Ziggeh Date: Sun, 29 Jun 2014 20:45:34 +0200 Subject: [PATCH 50/92] Fixed Deed for BARC Speeder --- .../deed/vehicle_deed/barc_speeder_deed.py | 36 ++----------------- 1 file changed, 3 insertions(+), 33 deletions(-) diff --git a/scripts/object/tangible/deed/vehicle_deed/barc_speeder_deed.py b/scripts/object/tangible/deed/vehicle_deed/barc_speeder_deed.py index 17638f96..5bd711f9 100644 --- a/scripts/object/tangible/deed/vehicle_deed/barc_speeder_deed.py +++ b/scripts/object/tangible/deed/vehicle_deed/barc_speeder_deed.py @@ -5,36 +5,6 @@ def setup(core, object): return def use(core, actor, object): - if object.getStfName() == ('barc_speeder'): - datapad = actor.getSlottedObject('datapad') - pcd = core.objectService.createObject('object/intangible/vehicle/shared_barc_speeder_pcd.iff', actor.getPlanet(), actor.getPosition().x, actor.getPosition().z,actor.getPosition().y) - - if datapad and pcd: - - datapad.add(pcd) - core.objectService.destroyObject(object) - - vehicleId = actor.getAttachment('activeVehicleID') - - if vehicleId == None: - vehicle = core.objectService.createObject('object/mobile/vehicle/shared_barc_speeder.iff', actor.getPlanet(), actor.getPosition().x, actor.getPosition().z,actor.getPosition().y) - vehicle.setOwnerId(actor.getObjectID()) - core.simulationService.add(vehicle, vehicle.getPosition().x, vehicle.getPosition().z, True) - actor.setAttachment('activeVehicleID', vehicle.getObjectID()) - elif object.getStfName() == ('item_deed_barc_rebel_06_01'): - datapad = actor.getSlottedObject('datapad') - pcd = core.objectService.createObject('object/intangible/vehicle/shared_barc_speeder_rebel_pcd.iff', actor.getPlanet(), actor.getPosition().x, actor.getPosition().z,actor.getPosition().y) - - if datapad and pcd: - - datapad.add(pcd) - core.objectService.destroyObject(object) - - vehicleId = actor.getAttachment('activeVehicleID') - - if vehicleId == None: - vehicle = core.objectService.createObject('object/mobile/vehicle/shared_barc_speeder_rebel.iff', actor.getPlanet(), actor.getPosition().x, actor.getPosition().z,actor.getPosition().y) - vehicle.setOwnerId(actor.getObjectID()) - core.simulationService.add(vehicle, vehicle.getPosition().x, vehicle.getPosition().z, True) - actor.setAttachment('activeVehicleID', vehicle.getObjectID()) - return \ No newline at end of file + core.mountService.generateVehicle(actor, object, 'object/mobile/vehicle/shared_barc_speeder.iff', 'object/intangible/vehicle/shared_barc_speeder_pcd.iff') + return + \ No newline at end of file From 3dd2691d53f560f807387d7564199bbf46821729 Mon Sep 17 00:00:00 2001 From: Waverunner Date: Sun, 29 Jun 2014 14:47:45 -0400 Subject: [PATCH 51/92] Fixed null error when sending mail to an offline player --- src/services/chat/ChatService.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/services/chat/ChatService.java b/src/services/chat/ChatService.java index df40f785..15f9c1dd 100644 --- a/src/services/chat/ChatService.java +++ b/src/services/chat/ChatService.java @@ -289,8 +289,11 @@ public class ChatService implements INetworkDispatch { return; } - SWGObject recipient = getObjectByFirstName(packet.getRecipient()); - + SWGObject recipient = core.objectService.getObjectByFirstName(packet.getRecipient()); + + if (recipient == null) + return; + PlayerObject recipientGhost = (PlayerObject) recipient.getSlottedObject("ghost"); if (recipientGhost.getIgnoreList().contains(sender.getCustomName().toLowerCase())) From bd91f7435a0e0ccd69c3c8600ccd22171fc16487 Mon Sep 17 00:00:00 2001 From: Ziggeh Date: Sun, 29 Jun 2014 21:23:18 +0200 Subject: [PATCH 52/92] Added Deed for Merr-Sonn JT12 Jetpack --- .../tcg/series3/deed_tcg_merr_sonn_jt12_jetpack.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/scripts/object/tangible/tcg/series3/deed_tcg_merr_sonn_jt12_jetpack.py b/scripts/object/tangible/tcg/series3/deed_tcg_merr_sonn_jt12_jetpack.py index ccad8904..480d6918 100644 --- a/scripts/object/tangible/tcg/series3/deed_tcg_merr_sonn_jt12_jetpack.py +++ b/scripts/object/tangible/tcg/series3/deed_tcg_merr_sonn_jt12_jetpack.py @@ -1,4 +1,10 @@ import sys def setup(core, object): - return \ No newline at end of file + object.setAttachment('radial_filename', 'deeds/vehicleDeed') + return + +def use(core, actor, object): + core.mountService.generateVehicle(actor, object, 'object/mobile/vehicle/shared_tcg_merr_sonn_jt12_jetpack.iff', 'object/intangible/vehicle/shared_tcg_merr_sonn_jt12_jetpack_pcd.iff') + return + \ No newline at end of file From 5d3b6167f1666da63b466f386131c798e016a6d0 Mon Sep 17 00:00:00 2001 From: Ziggeh Date: Sun, 29 Jun 2014 22:24:01 +0200 Subject: [PATCH 53/92] Added Deed for Flashspeeder --- .../tangible/deed/vehicle_deed/speederbike_flash_deed.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/scripts/object/tangible/deed/vehicle_deed/speederbike_flash_deed.py b/scripts/object/tangible/deed/vehicle_deed/speederbike_flash_deed.py index ccad8904..9760160e 100644 --- a/scripts/object/tangible/deed/vehicle_deed/speederbike_flash_deed.py +++ b/scripts/object/tangible/deed/vehicle_deed/speederbike_flash_deed.py @@ -1,4 +1,10 @@ import sys def setup(core, object): - return \ No newline at end of file + object.setAttachment('radial_filename', 'deeds/vehicleDeed') + return + +def use(core, actor, object): + core.mountService.generateVehicle(actor, object, 'object/mobile/vehicle/shared_speederbike_flash.iff', 'object/intangible/vehicle/shared_speederbike_flash_pcd.iff') + return + \ No newline at end of file From 0025e2787cf2208cef18887861b31793584ef1d1 Mon Sep 17 00:00:00 2001 From: Ziggeh Date: Sun, 29 Jun 2014 23:58:50 +0200 Subject: [PATCH 54/92] Changed Kneel command script Now uses the Posture datatable --- scripts/commands/kneel.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/scripts/commands/kneel.py b/scripts/commands/kneel.py index 77bec3ee..3d238983 100644 --- a/scripts/commands/kneel.py +++ b/scripts/commands/kneel.py @@ -1,15 +1,17 @@ import sys +from resources.datatables import Posture def setup(): return def run(core, actor, target, commandString): - if actor.getPosture() == 13 or actor.getPosture() == 14: + if actor.getPosture() == Posture.Incapacitated or actor.getPosture() == Posture.Dead: return - actor.setPosture(1) + actor.setPosture(Posture.Crouched) actor.setSpeedMultiplierBase(0) actor.setTurnRadius(0) + return \ No newline at end of file From d4cedc33735126864b24e54d611a6277d79850f9 Mon Sep 17 00:00:00 2001 From: Ziggeh Date: Mon, 30 Jun 2014 00:03:22 +0200 Subject: [PATCH 55/92] Added Windu's Guile colour crystal --- .../weapon/lightsaber/item_color_crystal_02_20.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 scripts/object/tangible/component/weapon/lightsaber/item_color_crystal_02_20.py diff --git a/scripts/object/tangible/component/weapon/lightsaber/item_color_crystal_02_20.py b/scripts/object/tangible/component/weapon/lightsaber/item_color_crystal_02_20.py new file mode 100644 index 00000000..e2d7e71a --- /dev/null +++ b/scripts/object/tangible/component/weapon/lightsaber/item_color_crystal_02_20.py @@ -0,0 +1,14 @@ +import sys +from resources.datatables import LightsaberColors + +def setup(core, object): + object.setCustomizationVariable('/private/index_color_1', LightsaberColors.getByName('Windu\'s Guile')) + object.setStfFilename('static_item_n') + object.setStfName('item_color_crystal_02_20') + object.setDetailFilename('static_item_d') + object.setDetailName('item_color_crystal_02_20') + object.setIntAttribute('no_trade', 1) + object.setStringAttribute('condition', '1000/1000') + object.setStringAttribute("@obj_attr_n:color", "Windu's Guile") + object.setAttachment('radial_filename', 'item/tunable') + return \ No newline at end of file From 5e94fd024c4c3b1ca1504ef845f1941d39d0f4ac Mon Sep 17 00:00:00 2001 From: CharonInferar Date: Mon, 30 Jun 2014 00:15:43 +0200 Subject: [PATCH 56/92] Fix for #952 - Weapons, armor and clothing are now correctly equipped again serverside. This also re-ensures armor buffs etc - Vehicles spawn correctly again --- scripts/commands/transferitemarmor.py | 6 ++++++ scripts/commands/transferitemmisc.py | 8 +++++++- scripts/commands/transferitemweapon.py | 8 +++++++- src/services/equipment/EquipmentService.java | 6 ++---- src/services/pet/MountService.java | 2 -- 5 files changed, 22 insertions(+), 8 deletions(-) diff --git a/scripts/commands/transferitemarmor.py b/scripts/commands/transferitemarmor.py index c78c862c..6bf734c3 100644 --- a/scripts/commands/transferitemarmor.py +++ b/scripts/commands/transferitemarmor.py @@ -39,6 +39,12 @@ 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 fe26a0fa..d5d42299 100644 --- a/scripts/commands/transferitemmisc.py +++ b/scripts/commands/transferitemmisc.py @@ -78,7 +78,13 @@ def run(core, actor, target, commandString): replacedObjects.append(object) if object != None: - container.transferTo(actor, container, object) + 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) diff --git a/scripts/commands/transferitemweapon.py b/scripts/commands/transferitemweapon.py index 500ee505..c75635a3 100644 --- a/scripts/commands/transferitemweapon.py +++ b/scripts/commands/transferitemweapon.py @@ -39,7 +39,13 @@ 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/services/equipment/EquipmentService.java b/src/services/equipment/EquipmentService.java index 9a989109..c6d93c85 100644 --- a/src/services/equipment/EquipmentService.java +++ b/src/services/equipment/EquipmentService.java @@ -157,17 +157,15 @@ public class EquipmentService implements INetworkDispatch { } 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", ""); 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(func != null) func.__call__(Py.java2py(core), Py.java2py(actor), Py.java2py(item)); if(!actor.getEquipmentList().contains(item.getObjectID())) { if(item instanceof WeaponObject) actor.setWeaponId(item.getObjectID()); - actor.addObjectToEquipList(item); processItemAtrributes(actor, item, true); } diff --git a/src/services/pet/MountService.java b/src/services/pet/MountService.java index 39e78ecb..0af426b8 100644 --- a/src/services/pet/MountService.java +++ b/src/services/pet/MountService.java @@ -185,8 +185,6 @@ public class MountService implements INetworkDispatch { mount.setFaction(actor.getFaction()); mount.setFactionStatus(actor.getFactionStatus()); mount.setOwnerId(actor.getObjectID()); - AIActor aiActor = (AIActor) mount.getAttachment("AI"); - aiActor.setFollowObject(actor); if (pcd.getTemplate().contains("vehicle")) { callVehicle(actor, pcd, player, mount); From 10ac29655dd266b8a2b04ab2ad2643c5451aa5f6 Mon Sep 17 00:00:00 2001 From: Ziggeh Date: Mon, 30 Jun 2014 00:40:00 +0200 Subject: [PATCH 57/92] Added Colonel Signet Ring of the Rebel Alliance Added item script for the ring - to be used in the GCW Rewards for Rebels. --- .../ring/item_pvp_rebel_colonel_signet_ring_05_01.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 scripts/object/tangible/wearables/ring/item_pvp_rebel_colonel_signet_ring_05_01.py diff --git a/scripts/object/tangible/wearables/ring/item_pvp_rebel_colonel_signet_ring_05_01.py b/scripts/object/tangible/wearables/ring/item_pvp_rebel_colonel_signet_ring_05_01.py new file mode 100644 index 00000000..15cfb481 --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_pvp_rebel_colonel_signet_ring_05_01.py @@ -0,0 +1,12 @@ +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_pvp_rebel_colonel_signet_ring_05_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_pvp_rebel_colonel_signet_ring_05_01') + object.setIntAttribute('no_trade', 1) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:strength_modified', 24) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 60) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:precision_modified', 24) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:agility_modified', 24) + return + \ No newline at end of file From 6d3b5a52ec1834fc1997a064c139526918203867 Mon Sep 17 00:00:00 2001 From: Ziggeh Date: Mon, 30 Jun 2014 01:08:24 +0200 Subject: [PATCH 58/92] Added Crimson Phoenix Medal of the Rebel Alliance Created the item script for the necklace - this is to be used in the factional reward system. --- .../weapon/lightsaber/item_color_crystal_02_20.py | 3 ++- .../item_pvp_rebel_sergeant_major_medal_03_01.py | 12 ++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 scripts/object/tangible/wearables/necklace/item_pvp_rebel_sergeant_major_medal_03_01.py diff --git a/scripts/object/tangible/component/weapon/lightsaber/item_color_crystal_02_20.py b/scripts/object/tangible/component/weapon/lightsaber/item_color_crystal_02_20.py index e2d7e71a..0d6b44b4 100644 --- a/scripts/object/tangible/component/weapon/lightsaber/item_color_crystal_02_20.py +++ b/scripts/object/tangible/component/weapon/lightsaber/item_color_crystal_02_20.py @@ -11,4 +11,5 @@ def setup(core, object): object.setStringAttribute('condition', '1000/1000') object.setStringAttribute("@obj_attr_n:color", "Windu's Guile") object.setAttachment('radial_filename', 'item/tunable') - return \ No newline at end of file + return + \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/item_pvp_rebel_sergeant_major_medal_03_01.py b/scripts/object/tangible/wearables/necklace/item_pvp_rebel_sergeant_major_medal_03_01.py new file mode 100644 index 00000000..21068b7e --- /dev/null +++ b/scripts/object/tangible/wearables/necklace/item_pvp_rebel_sergeant_major_medal_03_01.py @@ -0,0 +1,12 @@ +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_pvp_rebel_sergeant_major_medal_03_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_pvp_rebel_sergeant_major_medal_03_01') + object.setIntAttribute('no_trade', 1) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 30) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:luck_modified', 30) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:precision_modified', 24) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:strength_modified', 24) + return + \ No newline at end of file From 85b8f0b1ed92e7e2d1c758ec1011f20d5c52eeb9 Mon Sep 17 00:00:00 2001 From: Ziggeh Date: Mon, 30 Jun 2014 01:42:22 +0200 Subject: [PATCH 59/92] Added Experimental Electrobinoculars --- .../item_consumable_detect_hidden_02_04.py | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 scripts/object/tangible/loot/generic_usable/item_consumable_detect_hidden_02_04.py diff --git a/scripts/object/tangible/loot/generic_usable/item_consumable_detect_hidden_02_04.py b/scripts/object/tangible/loot/generic_usable/item_consumable_detect_hidden_02_04.py new file mode 100644 index 00000000..6b52f198 --- /dev/null +++ b/scripts/object/tangible/loot/generic_usable/item_consumable_detect_hidden_02_04.py @@ -0,0 +1,9 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'object/usable') + object.setStfFilename('static_item_n') + object.setStfName('item_consumable_detect_hidden_02_04') + object.setDetailFilename('static_item_d') + object.setDetailName('item_consumable_detect_hidden_02_04') + return \ No newline at end of file From 9e368e6b84ea9551c8dcd388ec32541ac7e3f4b6 Mon Sep 17 00:00:00 2001 From: Ziggeh Date: Mon, 30 Jun 2014 01:42:34 +0200 Subject: [PATCH 60/92] Added Superior Electrobinoculars --- .../item_consumable_detect_hidden_02_03.py | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 scripts/object/tangible/loot/generic_usable/item_consumable_detect_hidden_02_03.py diff --git a/scripts/object/tangible/loot/generic_usable/item_consumable_detect_hidden_02_03.py b/scripts/object/tangible/loot/generic_usable/item_consumable_detect_hidden_02_03.py new file mode 100644 index 00000000..cd4de72b --- /dev/null +++ b/scripts/object/tangible/loot/generic_usable/item_consumable_detect_hidden_02_03.py @@ -0,0 +1,9 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'object/usable') + object.setStfFilename('static_item_n') + object.setStfName('item_consumable_detect_hidden_02_03') + object.setDetailFilename('static_item_d') + object.setDetailName('item_consumable_detect_hidden_02_03') + return \ No newline at end of file From 1e5e997755f76cd9331a6b7a073d0e913702ad25 Mon Sep 17 00:00:00 2001 From: Ziggeh Date: Mon, 30 Jun 2014 01:47:06 +0200 Subject: [PATCH 61/92] Added Advanced Electrobinoculars --- .../item_consumable_detect_hidden_02_02.py | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 scripts/object/tangible/loot/generic_usable/item_consumable_detect_hidden_02_02.py diff --git a/scripts/object/tangible/loot/generic_usable/item_consumable_detect_hidden_02_02.py b/scripts/object/tangible/loot/generic_usable/item_consumable_detect_hidden_02_02.py new file mode 100644 index 00000000..467bb575 --- /dev/null +++ b/scripts/object/tangible/loot/generic_usable/item_consumable_detect_hidden_02_02.py @@ -0,0 +1,9 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'object/usable') + object.setStfFilename('static_item_n') + object.setStfName('item_consumable_detect_hidden_02_02') + object.setDetailFilename('static_item_d') + object.setDetailName('item_consumable_detect_hidden_02_02') + return \ No newline at end of file From ed509f46c658c65622be652a0d7796d8c0a8e398 Mon Sep 17 00:00:00 2001 From: Ziggeh Date: Mon, 30 Jun 2014 01:55:47 +0200 Subject: [PATCH 62/92] Added Electrobinoculars --- .../item_consumable_detect_hidden_02_01.py | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 scripts/object/tangible/loot/generic_usable/item_consumable_detect_hidden_02_01.py diff --git a/scripts/object/tangible/loot/generic_usable/item_consumable_detect_hidden_02_01.py b/scripts/object/tangible/loot/generic_usable/item_consumable_detect_hidden_02_01.py new file mode 100644 index 00000000..d21ff8b0 --- /dev/null +++ b/scripts/object/tangible/loot/generic_usable/item_consumable_detect_hidden_02_01.py @@ -0,0 +1,9 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'object/usable') + object.setStfFilename('static_item_n') + object.setStfName('item_consumable_detect_hidden_02_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_consumable_detect_hidden_02_01') + return \ No newline at end of file From de7571aa4f3d2f10598e5bfc3de0abc5021a7c77 Mon Sep 17 00:00:00 2001 From: Ziggeh Date: Mon, 30 Jun 2014 04:02:44 +0200 Subject: [PATCH 63/92] Added buffs to factional electrobinoculars --- .../gcw/pvp_rank_rewards/pvp_rebel_battle_banner.py | 1 + .../generic_usable/item_consumable_detect_hidden_02_01.py | 5 +++++ .../generic_usable/item_consumable_detect_hidden_02_02.py | 5 +++++ .../generic_usable/item_consumable_detect_hidden_02_03.py | 5 +++++ .../generic_usable/item_consumable_detect_hidden_02_04.py | 7 ++++++- 5 files changed, 22 insertions(+), 1 deletion(-) diff --git a/scripts/object/tangible/gcw/pvp_rank_rewards/pvp_rebel_battle_banner.py b/scripts/object/tangible/gcw/pvp_rank_rewards/pvp_rebel_battle_banner.py index ccad8904..1edf1ba9 100644 --- a/scripts/object/tangible/gcw/pvp_rank_rewards/pvp_rebel_battle_banner.py +++ b/scripts/object/tangible/gcw/pvp_rank_rewards/pvp_rebel_battle_banner.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setIntAttribute('no_trade', 1) return \ No newline at end of file diff --git a/scripts/object/tangible/loot/generic_usable/item_consumable_detect_hidden_02_01.py b/scripts/object/tangible/loot/generic_usable/item_consumable_detect_hidden_02_01.py index d21ff8b0..66111d54 100644 --- a/scripts/object/tangible/loot/generic_usable/item_consumable_detect_hidden_02_01.py +++ b/scripts/object/tangible/loot/generic_usable/item_consumable_detect_hidden_02_01.py @@ -6,4 +6,9 @@ def setup(core, object): object.setStfName('item_consumable_detect_hidden_02_01') object.setDetailFilename('static_item_d') object.setDetailName('item_consumable_detect_hidden_02_01') + object.setIntAttribute('reuse_time', 5) + object.setIntAttribute('num_in_stack' 8) + object.setStringAttribute('proc_name', '@ui_buff:detecthiddenconsumable20') + return + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/generic_usable/item_consumable_detect_hidden_02_02.py b/scripts/object/tangible/loot/generic_usable/item_consumable_detect_hidden_02_02.py index 467bb575..aabd0b55 100644 --- a/scripts/object/tangible/loot/generic_usable/item_consumable_detect_hidden_02_02.py +++ b/scripts/object/tangible/loot/generic_usable/item_consumable_detect_hidden_02_02.py @@ -6,4 +6,9 @@ def setup(core, object): object.setStfName('item_consumable_detect_hidden_02_02') object.setDetailFilename('static_item_d') object.setDetailName('item_consumable_detect_hidden_02_02') + object.setIntAttribute('reuse_time', 5) + object.setIntAttribute('num_in_stack' 8) + object.setStringAttribute('proc_name', '@ui_buff:detecthiddenconsumable40') + return + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/generic_usable/item_consumable_detect_hidden_02_03.py b/scripts/object/tangible/loot/generic_usable/item_consumable_detect_hidden_02_03.py index cd4de72b..a9188a59 100644 --- a/scripts/object/tangible/loot/generic_usable/item_consumable_detect_hidden_02_03.py +++ b/scripts/object/tangible/loot/generic_usable/item_consumable_detect_hidden_02_03.py @@ -6,4 +6,9 @@ def setup(core, object): object.setStfName('item_consumable_detect_hidden_02_03') object.setDetailFilename('static_item_d') object.setDetailName('item_consumable_detect_hidden_02_03') + object.setIntAttribute('reuse_time', 5) + object.setIntAttribute('num_in_stack' 8) + object.setStringAttribute('proc_name', '@ui_buff:detecthiddenconsumable65') + return + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/generic_usable/item_consumable_detect_hidden_02_04.py b/scripts/object/tangible/loot/generic_usable/item_consumable_detect_hidden_02_04.py index 6b52f198..1814ad32 100644 --- a/scripts/object/tangible/loot/generic_usable/item_consumable_detect_hidden_02_04.py +++ b/scripts/object/tangible/loot/generic_usable/item_consumable_detect_hidden_02_04.py @@ -6,4 +6,9 @@ def setup(core, object): object.setStfName('item_consumable_detect_hidden_02_04') object.setDetailFilename('static_item_d') object.setDetailName('item_consumable_detect_hidden_02_04') - return \ No newline at end of file + object.setIntAttribute('reuse_time', 5) + object.setIntAttribute('num_in_stack' 8) + object.setStringAttribute('proc_name', '@ui_buff:detecthiddenconsumable100') + return + + \ No newline at end of file From a2e6b77624e1e2d107b55a2da1f7da434fa781d7 Mon Sep 17 00:00:00 2001 From: Ziggeh Date: Mon, 30 Jun 2014 04:32:45 +0200 Subject: [PATCH 64/92] Added Exceptional Rebel DL-44 Pistol --- .../ranged/pistol/exceptional_pistol_rebel.py | 16 ---------------- ...pon_pistol_pvp_rebel_general_reward_06_01.py | 17 +++++++++++++++++ 2 files changed, 17 insertions(+), 16 deletions(-) delete mode 100644 scripts/object/weapon/ranged/pistol/exceptional_pistol_rebel.py create mode 100644 scripts/object/weapon/ranged/pistol/weapon_pistol_pvp_rebel_general_reward_06_01.py diff --git a/scripts/object/weapon/ranged/pistol/exceptional_pistol_rebel.py b/scripts/object/weapon/ranged/pistol/exceptional_pistol_rebel.py deleted file mode 100644 index 647c61de..00000000 --- a/scripts/object/weapon/ranged/pistol/exceptional_pistol_rebel.py +++ /dev/null @@ -1,16 +0,0 @@ -import sys - -def exceptionalPistol(core, object, owner): - object = core.objectService.createObject('object/weapon/ranged/pistol/shared_pistol_dl44.iff', owner.getPlanet()) - object.setStringAttribute('required_skill', 'None') - object.setStringAttribute('faction_restriction', 'Rebel') - object.setAttackSpeed(0.4); - object.setCustomName('Exceptional Rebel DL44 Pistol'); - object.setMaxRange(35); - object.setDamageType("energy"); - object.setMinDamage(275); - object.setMaxDamage(518); - object.setWeaponType(2); - inventory = owner.getSlottedObject('inventory') - inventory.add(object) - return \ No newline at end of file diff --git a/scripts/object/weapon/ranged/pistol/weapon_pistol_pvp_rebel_general_reward_06_01.py b/scripts/object/weapon/ranged/pistol/weapon_pistol_pvp_rebel_general_reward_06_01.py new file mode 100644 index 00000000..66c27d1d --- /dev/null +++ b/scripts/object/weapon/ranged/pistol/weapon_pistol_pvp_rebel_general_reward_06_01.py @@ -0,0 +1,17 @@ +import sys +from resources.datatables import WeaponType + +def setup(core, object): + object.setStringAttribute('faction_restriction', 'Rebel') + object.setStfFilename('static_item_n') + object.setStfName('weapon_pistol_pvp_rebel_general_reward_06_01') + object.setDetailFilename('static_item_d') + object.setDetailName('weapon_pistol_pvp_rebel_general_reward_06_01') + object.setAttackSpeed(0.4); + object.setCustomName('Exceptional Rebel DL44 Pistol'); + object.setMaxRange(35); + object.setDamageType('energy'); + object.setMinDamage(275); + object.setMaxDamage(518); + object.setWeaponType(WeaponType.PISTOL); + return \ No newline at end of file From 6024ad324157d3b5b261e865312e4cfd0ae568b3 Mon Sep 17 00:00:00 2001 From: Ziggeh Date: Mon, 30 Jun 2014 04:33:47 +0200 Subject: [PATCH 65/92] Changed GCW Rebel Rewards script Made a few changes that generally reduced the length of the script. A couple more improvements can be made, since there still are a couple lines of code that are repeating quite often. --- scripts/gcw_rewards_rebel.py | 322 +++++++---------------------------- 1 file changed, 57 insertions(+), 265 deletions(-) diff --git a/scripts/gcw_rewards_rebel.py b/scripts/gcw_rewards_rebel.py index 24920ad2..25a39969 100644 --- a/scripts/gcw_rewards_rebel.py +++ b/scripts/gcw_rewards_rebel.py @@ -9,222 +9,63 @@ from java.lang import Long from java.util import Map from java.util import TreeMap from resources.datatables import GcwRank +from resources.datatables import WeaponType import main.NGECore from services.gcw import GCWService import sys import math -def handleRebelItems1 (core, owner, target, option): +def handleRebelItems1 (core, owner): actor = owner.getSlottedObject('ghost') window = core.suiService.createSUIWindow('Script.listBox', owner, owner, 0); window.setProperty('bg.caption.lblTitle:Text', 'Rebel Item Requisition') - window.setProperty('Prompt.lblPrompt:Text', 'Items') - if actor.getCurrentRank() == GcwRank.PRIVATE: - window.addListBoxMenuItem('Private',0) - window.setProperty('btnOk:visible', 'True') - window.setProperty('btnCancel:visible', 'True') - window.setProperty('btnOk:Text', '@ok') - window.setProperty('btnCancel:Text', '@cancel') - returnList = Vector() - returnList.add('List.lstList:SelectedRow') - window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, setRebelBox1Callback) - core.suiService.openSUIWindow(window); + window.setProperty('Prompt.lblPrompt:Text', 'Items') + window.setProperty('btnOk:visible', 'True') + window.setProperty('btnCancel:visible', 'True') + window.setProperty('btnOk:Text', '@ok') + window.setProperty('btnCancel:Text', '@cancel') + returnList = Vector() + returnList.add('List.lstList:SelectedRow') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, setRebelBox1Callback) - if actor.getCurrentRank() == GcwRank.TROOPER: - window.addListBoxMenuItem('Private',0) - window.addListBoxMenuItem('Trooper',1) - window.setProperty('btnOk:visible', 'True') - window.setProperty('btnCancel:visible', 'True') - window.setProperty('btnOk:Text', '@ok') - window.setProperty('btnCancel:Text', '@cancel') - returnList = Vector() - returnList.add('List.lstList:SelectedRow') - window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, setRebelBox1Callback) - core.suiService.openSUIWindow(window); + if actor.getCurrentRank() >= GcwRank.PRIVATE: + window.addListBoxMenuItem('Private', 0) + + if actor.getCurrentRank() >= GcwRank.TROOPER: + window.addListBoxMenuItem('Trooper', 1) + + if actor.getCurrentRank() >= GcwRank.HIGHTROOPER: + window.addListBoxMenuItem('High Trooper', 2) + + if actor.getCurrentRank() >= GcwRank.SERGEANT: + window.addListBoxMenuItem('Sergeant', 3) + + if actor.getCurrentRank() >= GcwRank.SENIORSERGEANT: + window.addListBoxMenuItem('Senior Sergeant', 4) + + if actor.getCurrentRank() >= GcwRank.SERGEANTMAJOR: + window.addListBoxMenuItem('Sergeant Major', 5) - - if actor.getCurrentRank() == GcwRank.HIGHTROOPER: - window.addListBoxMenuItem('Private',0) - window.addListBoxMenuItem('Trooper',1) - window.addListBoxMenuItem('High Trooper',2) - window.setProperty('btnOk:visible', 'True') - window.setProperty('btnCancel:visible', 'True') - window.setProperty('btnOk:Text', '@ok') - window.setProperty('btnCancel:Text', '@cancel') - returnList = Vector() - returnList.add('List.lstList:SelectedRow') - window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, setRebelBox1Callback) - core.suiService.openSUIWindow(window); + if actor.getCurrentRank() >= GcwRank.LIEUTENANT: + window.addListBoxMenuItem('Lieutenant', 6) - - if actor.getCurrentRank() == GcwRank.SERGEANT: - window.addListBoxMenuItem('Private',0) - window.addListBoxMenuItem('Trooper',1) - window.addListBoxMenuItem('High Trooper',2) - window.addListBoxMenuItem('Sergeant',3) - returnList = Vector() - returnList.add('List.lstList:SelectedRow') - window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, setRebelBox1Callback) - core.suiService.openSUIWindow(window); + if actor.getCurrentRank() >= GcwRank.CAPTAIN: + window.addListBoxMenuItem('Captain', 7) + if actor.getCurrentRank() >= GcwRank.MAJOR: + window.addListBoxMenuItem('Major', 8) - if actor.getCurrentRank() == GcwRank.SENIORSERGEANT: - window.addListBoxMenuItem('Private',0) - window.addListBoxMenuItem('Trooper',1) - window.addListBoxMenuItem('High Trooper',2) - window.addListBoxMenuItem('Sergeant',3) - window.addListBoxMenuItem('Senior Sergeant',4) - window.setProperty('btnOk:visible', 'True') - window.setProperty('btnCancel:visible', 'True') - window.setProperty('btnOk:Text', '@ok') - window.setProperty('btnCancel:Text', '@cancel') - returnList = Vector() - returnList.add('List.lstList:SelectedRow') - window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, setRebelBox1Callback) - core.suiService.openSUIWindow(window); + if actor.getCurrentRank() >= GcwRank.COMMANDER: + window.addListBoxMenuItem('Commander', 9) + + if actor.getCurrentRank() >= GcwRank.COLONEL: + window.addListBoxMenuItem('Colonel', 10) + + if actor.getCurrentRank() >= GcwRank.GENERAL: + window.addListBoxMenuItem('General', 11) - - if actor.getCurrentRank() == GcwRank.SERGEANTMAJOR: - window.addListBoxMenuItem('Private',0) - window.addListBoxMenuItem('Trooper',1) - window.addListBoxMenuItem('High Trooper',2) - window.addListBoxMenuItem('Sergeant',3) - window.addListBoxMenuItem('Senior Sergeant',4) - window.addListBoxMenuItem('Sergeant Major',5) - window.setProperty('btnOk:visible', 'True') - window.setProperty('btnCancel:visible', 'True') - window.setProperty('btnOk:Text', '@ok') - window.setProperty('btnCancel:Text', '@cancel') - returnList = Vector() - returnList.add('List.lstList:SelectedRow') - window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, setRebelBox1Callback) - core.suiService.openSUIWindow(window); - - - if actor.getCurrentRank() == GcwRank.LIEUTENANT: - window.addListBoxMenuItem('Private',0) - window.addListBoxMenuItem('Trooper',1) - window.addListBoxMenuItem('High Trooper',2) - window.addListBoxMenuItem('Sergeant',3) - window.addListBoxMenuItem('Senior Sergeant',4) - window.addListBoxMenuItem('Sergeant Major',5) - window.addListBoxMenuItem('Lieutenant',6) - window.setProperty('btnOk:visible', 'True') - window.setProperty('btnCancel:visible', 'True') - window.setProperty('btnOk:Text', '@ok') - window.setProperty('btnCancel:Text', '@cancel') - returnList = Vector() - returnList.add('List.lstList:SelectedRow') - window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, setRebelBox1Callback) - core.suiService.openSUIWindow(window); - - - if actor.getCurrentRank() == GcwRank.CAPTAIN: - window.addListBoxMenuItem('Private',0) - window.addListBoxMenuItem('Trooper',1) - window.addListBoxMenuItem('High Trooper',2) - window.addListBoxMenuItem('Sergeant',3) - window.addListBoxMenuItem('Senior Sergeant',4) - window.addListBoxMenuItem('Sergeant Major',5) - window.addListBoxMenuItem('Lieutenant',6) - window.addListBoxMenuItem('Captain',7) - window.setProperty('btnOk:visible', 'True') - window.setProperty('btnCancel:visible', 'True') - window.setProperty('btnOk:Text', '@ok') - window.setProperty('btnCancel:Text', '@cancel') - returnList = Vector() - returnList.add('List.lstList:SelectedRow') - window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, setRebelBox1Callback) - core.suiService.openSUIWindow(window); - - - if actor.getCurrentRank() == GcwRank.MAJOR: - window.addListBoxMenuItem('Private',0) - window.addListBoxMenuItem('Trooper',1) - window.addListBoxMenuItem('High Trooper',2) - window.addListBoxMenuItem('Sergeant',3) - window.addListBoxMenuItem('Senior Sergeant',4) - window.addListBoxMenuItem('Sergeant Major',5) - window.addListBoxMenuItem('Lieutenant',6) - window.addListBoxMenuItem('Captain',7) - window.addListBoxMenuItem('Major',8) - window.setProperty('btnOk:visible', 'True') - window.setProperty('btnCancel:visible', 'True') - window.setProperty('btnOk:Text', '@ok') - window.setProperty('btnCancel:Text', '@cancel') - returnList = Vector() - returnList.add('List.lstList:SelectedRow') - window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, setRebelBox1Callback) - core.suiService.openSUIWindow(window); - - - if actor.getCurrentRank() == GcwRank.COMMANDER: - window.addListBoxMenuItem('Private',0) - window.addListBoxMenuItem('Trooper',1) - window.addListBoxMenuItem('High Trooper',2) - window.addListBoxMenuItem('Sergeant',3) - window.addListBoxMenuItem('Senior Sergeant',4) - window.addListBoxMenuItem('Sergeant Major',5) - window.addListBoxMenuItem('Lieutenant',6) - window.addListBoxMenuItem('Captain',7) - window.addListBoxMenuItem('Major',8) - window.addListBoxMenuItem('Commander',9) - window.setProperty('btnOk:visible', 'True') - window.setProperty('btnCancel:visible', 'True') - window.setProperty('btnOk:Text', '@ok') - window.setProperty('btnCancel:Text', '@cancel') - returnList = Vector() - returnList.add('List.lstList:SelectedRow') - window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, setRebelBox1Callback) - core.suiService.openSUIWindow(window); - - - if actor.getCurrentRank() == GcwRank.COLONEL: - window.addListBoxMenuItem('Private',0) - window.addListBoxMenuItem('Trooper',1) - window.addListBoxMenuItem('High Trooper',2) - window.addListBoxMenuItem('Sergeant',3) - window.addListBoxMenuItem('Senior Sergeant',4) - window.addListBoxMenuItem('Sergeant Major',5) - window.addListBoxMenuItem('Lieutenant',6) - window.addListBoxMenuItem('Captain',7) - window.addListBoxMenuItem('Major',8) - window.addListBoxMenuItem('Commander',9) - window.addListBoxMenuItem('Colonel',10) - window.setProperty('btnOk:visible', 'True') - window.setProperty('btnCancel:visible', 'True') - window.setProperty('btnOk:Text', '@ok') - window.setProperty('btnCancel:Text', '@cancel') - returnList = Vector() - returnList.add('List.lstList:SelectedRow') - window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, setRebelBox1Callback) - core.suiService.openSUIWindow(window); - - - if actor.getCurrentRank() == GcwRank.GENERAL: - window.addListBoxMenuItem('Private',0) - window.addListBoxMenuItem('Trooper',1) - window.addListBoxMenuItem('High Trooper',2) - window.addListBoxMenuItem('Sergeant',3) - window.addListBoxMenuItem('Senior Sergeant',4) - window.addListBoxMenuItem('Sergeant Major',5) - window.addListBoxMenuItem('Lieutenant',6) - window.addListBoxMenuItem('Captain',7) - window.addListBoxMenuItem('Major',8) - window.addListBoxMenuItem('Commander',9) - window.addListBoxMenuItem('Colonel',10) - window.addListBoxMenuItem('General',11) - window.setProperty('btnOk:visible', 'True') - window.setProperty('btnCancel:visible', 'True') - window.setProperty('btnOk:Text', '@ok') - window.setProperty('btnCancel:Text', '@cancel') - returnList = Vector() - returnList.add('List.lstList:SelectedRow') - window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, setRebelBox1Callback) - core.suiService.openSUIWindow(window); - - + core.suiService.openSUIWindow(window); def setRebelBox1Callback(owner, window, eventType, returnList): if returnList.size()==0: @@ -976,12 +817,7 @@ def electrobinoculars(object, owner): if owner.getCashCredits() >= 15000: owner.setCashCredits(owner.getCashCredits() - 15000) core = main.NGECore.getInstance() - electrobinoculars = core.objectService.createObject('object/tangible/loot/generic_usable/shared_binoculars_s2_generic.iff', owner.getPlanet()) - electrobinoculars.setAttachment('radial_filename', 'object/usable') - electrobinoculars.setStfFilename('static_item_n') - electrobinoculars.setStfName('item_consumable_detect_hidden_02_01') - electrobinoculars.setDetailFilename('static_item_d') - electrobinoculars.setDetailName('item_consumable_detect_hidden_02_01') + electrobinoculars = core.objectService.createObject('object/tangible/loot/generic_usable/shared_binoculars_s2_generic.iff', owner.getPlanet(), 'item_consumable_detect_hidden_02_01') inventory = owner.getSlottedObject('inventory') inventory.add(electrobinoculars) elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): @@ -991,12 +827,7 @@ def advancedElectrobinoculars(object, owner): if owner.getCashCredits() >= 22500: owner.setCashCredits(owner.getCashCredits() - 22500) core = main.NGECore.getInstance() - electrobinoculars = core.objectService.createObject('object/tangible/loot/generic_usable/shared_binoculars_s2_generic.iff', owner.getPlanet()) - electrobinoculars.setAttachment('radial_filename', 'object/usable') - electrobinoculars.setStfFilename('static_item_n') - electrobinoculars.setStfName('item_consumable_detect_hidden_02_02') - electrobinoculars.setDetailFilename('static_item_d') - electrobinoculars.setDetailName('item_consumable_detect_hidden_02_02') + electrobinoculars = core.objectService.createObject('object/tangible/loot/generic_usable/shared_binoculars_s2_generic.iff', owner.getPlanet(), 'item_consumable_detect_hidden_02_02') inventory = owner.getSlottedObject('inventory') inventory.add(electrobinoculars) elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): @@ -1006,12 +837,7 @@ def superiorElectrobinoculars(object, owner): if owner.getCashCredits() >= 30000: owner.setCashCredits(owner.getCashCredits() - 30000) core = main.NGECore.getInstance() - electrobinoculars = core.objectService.createObject('object/tangible/loot/generic_usable/shared_binoculars_s2_generic.iff', owner.getPlanet()) - electrobinoculars.setAttachment('radial_filename', 'object/usable') - electrobinoculars.setStfFilename('static_item_n') - electrobinoculars.setStfName('item_consumable_detect_hidden_02_03') - electrobinoculars.setDetailFilename('static_item_d') - electrobinoculars.setDetailName('item_consumable_detect_hidden_02_03') + electrobinoculars = core.objectService.createObject('object/tangible/loot/generic_usable/shared_binoculars_s2_generic.iff', owner.getPlanet(), 'item_consumable_detect_hidden_02_03') inventory = owner.getSlottedObject('inventory') inventory.add(electrobinoculars) elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): @@ -1021,12 +847,7 @@ def experimentalElectrobinoculars(object, owner): if owner.getCashCredits() >= 37500: owner.setCashCredits(owner.getCashCredits() - 37500) core = main.NGECore.getInstance() - electrobinoculars = core.objectService.createObject('object/tangible/loot/generic_usable/shared_binoculars_s1_generic.iff', owner.getPlanet()) - electrobinoculars.setAttachment('radial_filename', 'object/usable') - electrobinoculars.setStfFilename('static_item_n') - electrobinoculars.setStfName('item_consumable_detect_hidden_02_04') - electrobinoculars.setDetailFilename('static_item_d') - electrobinoculars.setDetailName('item_consumable_detect_hidden_02_04') + electrobinoculars = core.objectService.createObject('object/tangible/loot/generic_usable/shared_binoculars_s1_generic.iff', owner.getPlanet(), 'item_consumable_detect_hidden_02_04') inventory = owner.getSlottedObject('inventory') inventory.add(electrobinoculars) elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): @@ -1221,7 +1042,6 @@ def specOpsLeggings(object, owner): if owner.getCashCredits() >= 135000: owner.setCashCredits(owner.getCashCredits() - 135000) core = main.NGECore.getInstance() - print ('test1') leggings = core.objectService.createObject('object/tangible/wearables/armor/rebel_assault/shared_armor_rebel_spec_ops_leggings.iff', owner.getPlanet()) inventory = owner.getSlottedObject('inventory') inventory.add(leggings) @@ -1342,16 +1162,7 @@ def crimsonPhoenixMedal(object, owner): if owner.getCashCredits() >= 240000: owner.setCashCredits(owner.getCashCredits() - 240000) core = main.NGECore.getInstance() - necklace = core.objectService.createObject('object/tangible/wearables/necklace/shared_necklace_deepspace_rebel_f.iff', owner.getPlanet()) - necklace.setStfFilename('static_item_n') - necklace.setStfName('item_pvp_rebel_sergeant_major_medal_03_01') - necklace.setDetailFilename('static_item_d') - necklace.setDetailName('item_pvp_rebel_sergeant_major_medal_03_01') - necklace.setIntAttribute('no_trade', 1) - necklace.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 30) - necklace.setIntAttribute('cat_stat_mod_bonus.@stat_n:luck_modified', 30) - necklace.setIntAttribute('cat_stat_mod_bonus.@stat_n:precision_modified', 24) - necklace.setIntAttribute('cat_stat_mod_bonus.@stat_n:strength_modified', 24) + necklace = core.objectService.createObject('object/tangible/wearables/necklace/shared_necklace_deepspace_rebel_f.iff', owner.getPlanet(), 'item_pvp_rebel_sergeant_major_medal_03_01') inventory = owner.getSlottedObject('inventory') inventory.add(necklace) elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): @@ -1362,7 +1173,6 @@ def factionalBanner(object, owner): owner.setCashCredits(owner.getCashCredits() - 80000) core = main.NGECore.getInstance() banner = core.objectService.createObject('object/tangible/gcw/pvp_rank_rewards/shared_pvp_rebel_battle_banner.iff', owner.getPlanet()) - banner.setIntAttribute('no_trade', 1) inventory = owner.getSlottedObject('inventory') inventory.add(banner) elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): @@ -1372,16 +1182,7 @@ def colonelRing(object, owner): if owner.getCashCredits() >= 2800000: owner.setCashCredits(owner.getCashCredits() - 2800000) core = main.NGECore.getInstance() - ring = core.objectService.createObject('object/tangible/wearables/ring/shared_ring_s03.iff', owner.getPlanet()) - ring.setStfFilename('static_item_n') - ring.setStfName('item_pvp_rebel_colonel_signet_ring_05_01') - ring.setDetailFilename('static_item_d') - ring.setDetailName('item_pvp_rebel_colonel_signet_ring_05_01') - ring.setIntAttribute('no_trade', 1) - ring.setIntAttribute('cat_stat_mod_bonus.@stat_n:strength_modified', 24) - ring.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 60) - ring.setIntAttribute('cat_stat_mod_bonus.@stat_n:precision_modified', 24) - ring.setIntAttribute('cat_stat_mod_bonus.@stat_n:agility_modified', 24) + ring = core.objectService.createObject('object/tangible/wearables/ring/shared_ring_s03.iff', owner.getPlanet(), 'item_pvp_rebel_colonel_signet_ring_05_01') inventory = owner.getSlottedObject('inventory') inventory.add(ring) elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): @@ -1394,10 +1195,10 @@ def laserCarbine(object, owner): carbine = core.objectService.createObject('object/weapon/ranged/carbine/shared_carbine_laser.iff', owner.getPlanet()) carbine.setAttackSpeed(0.6) carbine.setMaxRange(50) - carbine.setDamageType("energy") + carbine.setDamageType('energy') carbine.setMinDamage(350) carbine.setMaxDamage(700) - carbine.setWeaponType(1) + carbine.setWeaponType(WeaponType.CARBINE) inventory = owner.getSlottedObject('inventory') inventory.add(carbine) elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): @@ -1410,10 +1211,10 @@ def scoutPistol(object, owner): pistol = core.objectService.createObject('object/weapon/ranged/pistol/shared_pistol_scout_blaster.iff', owner.getPlanet()) pistol.setAttackSpeed(0.4) pistol.setMaxRange(35); - pistol.setDamageType("kinetic"); + pistol.setDamageType('energy'); pistol.setMinDamage(80); pistol.setMaxDamage(130); - pistol.setWeaponType(2); + pistol.setWeaponType(WeaponType.PISTOL); inventory = owner.getSlottedObject('inventory') inventory.add(pistol) elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): @@ -1425,11 +1226,11 @@ def metalStaff(object, owner): core = main.NGECore.getInstance() staff = core.objectService.createObject('object/weapon/melee/polearm/shared_lance_staff_metal.iff', owner.getPlanet()) staff.setAttackSpeed(1.0); - staff.setMaxRange(35); - staff.setDamageType("kinetic"); + staff.setMaxRange(5); + staff.setDamageType('kinetic'); staff.setMinDamage(300); staff.setMaxDamage(400); - staff.setWeaponType(2); + staff.setWeaponType(WeaponType.POLEARMMELEE); inventory = owner.getSlottedObject('inventory') inventory.add(staff) elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): @@ -1439,16 +1240,7 @@ def windusGuile(object, owner): if owner.getCashCredits() >= 2000000: owner.setCashCredits(owner.getCashCredits() - 2000000) core = main.NGECore.getInstance() - windu = core.objectService.createObject('object/tangible/component/weapon/lightsaber/shared_lightsaber_module_force_crystal.iff', owner.getPlanet()) - windu.setCustomizationVariable('/private/index_color_1', 20) - windu.setStfFilename('static_item_n') - windu.setStfName('item_color_crystal_02_20') - windu.setDetailFilename('static_item_d') - windu.setDetailName('item_color_crystal_02_20') - windu.setIntAttribute('no_trade', 1) - windu.setStringAttribute('condition', '1000/1000') - windu.getAttributes().put("@obj_attr_n:color", "Windu's Guile") - windu.setAttachment('radial_filename', 'item/tunable') + windu = core.objectService.createObject('object/tangible/component/weapon/lightsaber/shared_lightsaber_module_force_crystal.iff', owner.getPlanet(), 'item_color_crystal_02_20') inventory = owner.getSlottedObject('inventory') inventory.add(windu) elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): @@ -1458,7 +1250,7 @@ def exceptionalPistol(object, owner): if owner.getCashCredits() >= 200000: owner.setCashCredits(owner.getCashCredits() - 200000) core = main.NGECore.getInstance() - core.scriptService.callScript("scripts/object/weapon/ranged/pistol/", "exceptional_pistol_rebel", "exceptionalPistol", core, object, owner); + core.objectService.createObject('object/weapon/ranged/pistol/shared_pistol_dl44.iff', owner.getPlanet(), 'weapon_pistol_pvp_rebel_general_reward_06_01') elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): return From ad2091a9c3b866e24922ffe0ea952852af1813c1 Mon Sep 17 00:00:00 2001 From: Zing Date: Sun, 29 Jun 2014 19:53:19 -0700 Subject: [PATCH 66/92] Added Multiple Imperial rank reward scripts --- .../item_pvp_imperial_sergeant_major_medal_03_01.py | 12 ++++++++++++ .../item_pvp_imperial_colonel_signet_ring_05_01.py | 12 ++++++++++++ .../carbine/exceptional_e11_carbine_imperial.py | 13 +++++++++++++ .../carbine/imperial_sergeant_reward_carbine_e11.py | 13 +++++++++++++ .../pistol/imperial_segeant_reward_pistol_power5.py | 13 +++++++++++++ 5 files changed, 63 insertions(+) create mode 100644 scripts/object/tangible/wearables/necklace/item_pvp_imperial_sergeant_major_medal_03_01.py create mode 100644 scripts/object/tangible/wearables/ring/item_pvp_imperial_colonel_signet_ring_05_01.py create mode 100644 scripts/object/weapon/ranged/carbine/exceptional_e11_carbine_imperial.py create mode 100644 scripts/object/weapon/ranged/carbine/imperial_sergeant_reward_carbine_e11.py create mode 100644 scripts/object/weapon/ranged/pistol/imperial_segeant_reward_pistol_power5.py diff --git a/scripts/object/tangible/wearables/necklace/item_pvp_imperial_sergeant_major_medal_03_01.py b/scripts/object/tangible/wearables/necklace/item_pvp_imperial_sergeant_major_medal_03_01.py new file mode 100644 index 00000000..b99f3c9c --- /dev/null +++ b/scripts/object/tangible/wearables/necklace/item_pvp_imperial_sergeant_major_medal_03_01.py @@ -0,0 +1,12 @@ +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_pvp_imperial_sergeant_major_medal_03_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_pvp_imperial_sergeant_major_medal_03_01') + object.setIntAttribute('no_trade', 1) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 30) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:luck_modified', 30) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:precision_modified', 24) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:strength_modified', 24) + return + \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_pvp_imperial_colonel_signet_ring_05_01.py b/scripts/object/tangible/wearables/ring/item_pvp_imperial_colonel_signet_ring_05_01.py new file mode 100644 index 00000000..df6386c3 --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_pvp_imperial_colonel_signet_ring_05_01.py @@ -0,0 +1,12 @@ +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_pvp_imperial_colonel_signet_ring_05_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_pvp_imperial_colonel_signet_ring_05_01') + object.setIntAttribute('no_trade', 1) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:strength_modified', 24) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 60) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:precision_modified', 24) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:agility_modified', 24) + return + \ No newline at end of file diff --git a/scripts/object/weapon/ranged/carbine/exceptional_e11_carbine_imperial.py b/scripts/object/weapon/ranged/carbine/exceptional_e11_carbine_imperial.py new file mode 100644 index 00000000..67f080e0 --- /dev/null +++ b/scripts/object/weapon/ranged/carbine/exceptional_e11_carbine_imperial.py @@ -0,0 +1,13 @@ +import sys + +def setup(core, object):: + object.setStringAttribute('required_skill', 'None') + object.setStringAttribute('faction_restriction', 'Imperial') + object.setAttackSpeed(0.6); + object.setCustomName('Exceptional Imperial E-11 Carbine'); + object.setMaxRange(50); + object.setDamageType("energy"); + object.setMinDamage(310); + object.setMaxDamage(550); + object.setWeaponType(1); + return \ No newline at end of file diff --git a/scripts/object/weapon/ranged/carbine/imperial_sergeant_reward_carbine_e11.py b/scripts/object/weapon/ranged/carbine/imperial_sergeant_reward_carbine_e11.py new file mode 100644 index 00000000..2c1d2cb9 --- /dev/null +++ b/scripts/object/weapon/ranged/carbine/imperial_sergeant_reward_carbine_e11.py @@ -0,0 +1,13 @@ +import sys + +def setup(core, Object):: + object.setStringAttribute('required_skill', 'None') + object.setStringAttribute('faction_restriction', 'Imperial') + object.setAttackSpeed(0.6); + object.setCustomName('Imperial E-11 Carbine'); + object.setMaxRange(50); + object.setDamageType("energy"); + object.setMinDamage(200); + object.setMaxDamage(350); + object.setWeaponType(1); + return \ No newline at end of file diff --git a/scripts/object/weapon/ranged/pistol/imperial_segeant_reward_pistol_power5.py b/scripts/object/weapon/ranged/pistol/imperial_segeant_reward_pistol_power5.py new file mode 100644 index 00000000..e56e4ddb --- /dev/null +++ b/scripts/object/weapon/ranged/pistol/imperial_segeant_reward_pistol_power5.py @@ -0,0 +1,13 @@ +import sys + +def setup(core, object):: + object.setStringAttribute('required_skill', 'None') + object.setStringAttribute('faction_restriction', 'Imperial') + object.setAttackSpeed(0.4); + object.setCustomName('Imperial Power5 Pistol'); + object.setMaxRange(35); + object.setDamageType("energy"); + object.setMinDamage(90); + object.setMaxDamage(210); + object.setWeaponType(2); + return \ No newline at end of file From be9650db6b9b082fd2df8ac400ba9d69e43d6bf0 Mon Sep 17 00:00:00 2001 From: Zing Date: Sun, 29 Jun 2014 20:47:13 -0700 Subject: [PATCH 67/92] Fixed a few rebel rank reward items Rebel recruiter rewards can now be called by conversing with the recruiter again. Exceptional pistol is now deposited in inventory Binocular buff now adds to player Rebel Command Barc now generates correct vehicle --- scripts/conversation/reb_recruiter.py | 2 +- scripts/gcw_rewards_rebel.py | 11 ++++------- .../vehicle_deed/item_deed_barc_rebel_06_01.py | 15 +++++++++++++++ .../loot/generic_usable/binoculars_s1_generic.py | 6 ------ .../loot/generic_usable/binoculars_s2_generic.py | 10 ---------- .../item_consumable_detect_hidden_02_01.py | 4 +++- .../item_consumable_detect_hidden_02_02.py | 4 +++- .../item_consumable_detect_hidden_02_03.py | 4 +++- .../item_consumable_detect_hidden_02_04.py | 6 +++++- ...eapon_pistol_pvp_rebel_general_reward_06_01.py | 1 - 10 files changed, 34 insertions(+), 29 deletions(-) create mode 100644 scripts/object/tangible/deed/vehicle_deed/item_deed_barc_rebel_06_01.py diff --git a/scripts/conversation/reb_recruiter.py b/scripts/conversation/reb_recruiter.py index 5c6ce3e7..8a8e2af0 100644 --- a/scripts/conversation/reb_recruiter.py +++ b/scripts/conversation/reb_recruiter.py @@ -126,7 +126,7 @@ def handleFirstScreen(core, actor, npc, selection): convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage("@conversation/faction_recruiter_rebel:s_332", percent, "TO", str(100 - percent))) return if selection == 2: - core.scriptService.callScript("scripts/", "gcw_rewards_rebel", "handleRebelItems1", core, actor, object, 0); + core.scriptService.callScript("scripts/", "gcw_rewards_rebel", "handleRebelItems1", core, actor); core.conversationService.sendStopConversation(actor, npc, 'conversation/faction_recruiter_rebel', 's_75') return return diff --git a/scripts/gcw_rewards_rebel.py b/scripts/gcw_rewards_rebel.py index 25a39969..5c86205e 100644 --- a/scripts/gcw_rewards_rebel.py +++ b/scripts/gcw_rewards_rebel.py @@ -917,12 +917,7 @@ def barcSpeeder(object, owner): if owner.getCashCredits() >= 2100000: owner.setCashCredits(owner.getCashCredits() - 2100000) core = main.NGECore.getInstance() - barc = core.objectService.createObject('object/tangible/deed/vehicle_deed/shared_barc_speeder_deed.iff', owner.getPlanet()) - barc.setStfFilename('static_item_n') - barc.setStfName('item_deed_barc_rebel_06_01') - barc.setDetailFilename('static_item_d') - barc.setDetailName('item_deed_barc_rebel_06_01') - barc.setIntAttribute('no_trade', 1) + barc = core.objectService.createObject('object/tangible/deed/vehicle_deed/shared_barc_speeder_deed.iff', owner.getPlanet(), 'item_deed_barc_rebel_06_01') inventory = owner.getSlottedObject('inventory') inventory.add(barc) elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): @@ -1250,7 +1245,9 @@ def exceptionalPistol(object, owner): if owner.getCashCredits() >= 200000: owner.setCashCredits(owner.getCashCredits() - 200000) core = main.NGECore.getInstance() - core.objectService.createObject('object/weapon/ranged/pistol/shared_pistol_dl44.iff', owner.getPlanet(), 'weapon_pistol_pvp_rebel_general_reward_06_01') + pistol = core.objectService.createObject('object/weapon/ranged/pistol/shared_pistol_dl44.iff', owner.getPlanet(), 'weapon_pistol_pvp_rebel_general_reward_06_01') + inventory = owner.getSlottedObject('inventory') + inventory.add(pistol) elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): return diff --git a/scripts/object/tangible/deed/vehicle_deed/item_deed_barc_rebel_06_01.py b/scripts/object/tangible/deed/vehicle_deed/item_deed_barc_rebel_06_01.py new file mode 100644 index 00000000..8b3a3713 --- /dev/null +++ b/scripts/object/tangible/deed/vehicle_deed/item_deed_barc_rebel_06_01.py @@ -0,0 +1,15 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'deeds/vehicleDeed') + object.setStfFilename('static_item_n') + object.setStfName('item_deed_barc_rebel_06_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_deed_barc_rebel_06_01') + object.setIntAttribute('no_trade', 1) + return + +def use(core, actor, object): + core.mountService.generateVehicle(actor, object, 'object/mobile/vehicle/shared_barc_speeder_rebel.iff', 'object/intangible/vehicle/shared_barc_speeder_rebel_pcd.iff') + return + \ No newline at end of file diff --git a/scripts/object/tangible/loot/generic_usable/binoculars_s1_generic.py b/scripts/object/tangible/loot/generic_usable/binoculars_s1_generic.py index 9124f885..ccad8904 100644 --- a/scripts/object/tangible/loot/generic_usable/binoculars_s1_generic.py +++ b/scripts/object/tangible/loot/generic_usable/binoculars_s1_generic.py @@ -1,10 +1,4 @@ import sys def setup(core, object): - object.setAttachment('radial_filename', 'object/usable') - return - -def use(core, actor, object): - if object.getStfName() == ('item_consumable_detect_hidden_02_04'): - core.buffService.addBuffToCreature(actor, 'detectHiddenConsumable100', actor) return \ No newline at end of file diff --git a/scripts/object/tangible/loot/generic_usable/binoculars_s2_generic.py b/scripts/object/tangible/loot/generic_usable/binoculars_s2_generic.py index c3102575..ccad8904 100644 --- a/scripts/object/tangible/loot/generic_usable/binoculars_s2_generic.py +++ b/scripts/object/tangible/loot/generic_usable/binoculars_s2_generic.py @@ -1,14 +1,4 @@ import sys def setup(core, object): - object.setAttachment('radial_filename', 'object/usable') - return - -def use(core, actor, object): - if object.getStfName() == ('item_consumable_detect_hidden_02_01'): - core.buffService.addBuffToCreature(actor, 'detectHiddenConsumable20', actor) - elif object.getStfName() == ('item_consumable_detect_hidden_02_02'): - core.buffService.addBuffToCreature(actor, 'detectHiddenConsumable40', actor) - elif object.getStfName() == ('item_consumable_detect_hidden_02_03'): - core.buffService.addBuffToCreature(actor, 'detectHiddenConsumable65', actor) return \ No newline at end of file diff --git a/scripts/object/tangible/loot/generic_usable/item_consumable_detect_hidden_02_01.py b/scripts/object/tangible/loot/generic_usable/item_consumable_detect_hidden_02_01.py index 66111d54..0dad6dbc 100644 --- a/scripts/object/tangible/loot/generic_usable/item_consumable_detect_hidden_02_01.py +++ b/scripts/object/tangible/loot/generic_usable/item_consumable_detect_hidden_02_01.py @@ -7,8 +7,10 @@ def setup(core, object): object.setDetailFilename('static_item_d') object.setDetailName('item_consumable_detect_hidden_02_01') object.setIntAttribute('reuse_time', 5) - object.setIntAttribute('num_in_stack' 8) + object.setIntAttribute('num_in_stack', 8) object.setStringAttribute('proc_name', '@ui_buff:detecthiddenconsumable20') return +def use(core, actor, object): + core.buffService.addBuffToCreature(actor, 'detectHiddenConsumable20', actor) return \ No newline at end of file diff --git a/scripts/object/tangible/loot/generic_usable/item_consumable_detect_hidden_02_02.py b/scripts/object/tangible/loot/generic_usable/item_consumable_detect_hidden_02_02.py index aabd0b55..64a64c15 100644 --- a/scripts/object/tangible/loot/generic_usable/item_consumable_detect_hidden_02_02.py +++ b/scripts/object/tangible/loot/generic_usable/item_consumable_detect_hidden_02_02.py @@ -7,8 +7,10 @@ def setup(core, object): object.setDetailFilename('static_item_d') object.setDetailName('item_consumable_detect_hidden_02_02') object.setIntAttribute('reuse_time', 5) - object.setIntAttribute('num_in_stack' 8) + object.setIntAttribute('num_in_stack', 8) object.setStringAttribute('proc_name', '@ui_buff:detecthiddenconsumable40') return +def use(core, actor, object): + core.buffService.addBuffToCreature(actor, 'detectHiddenConsumable40', actor) return \ No newline at end of file diff --git a/scripts/object/tangible/loot/generic_usable/item_consumable_detect_hidden_02_03.py b/scripts/object/tangible/loot/generic_usable/item_consumable_detect_hidden_02_03.py index a9188a59..850a5731 100644 --- a/scripts/object/tangible/loot/generic_usable/item_consumable_detect_hidden_02_03.py +++ b/scripts/object/tangible/loot/generic_usable/item_consumable_detect_hidden_02_03.py @@ -7,8 +7,10 @@ def setup(core, object): object.setDetailFilename('static_item_d') object.setDetailName('item_consumable_detect_hidden_02_03') object.setIntAttribute('reuse_time', 5) - object.setIntAttribute('num_in_stack' 8) + object.setIntAttribute('num_in_stack', 8) object.setStringAttribute('proc_name', '@ui_buff:detecthiddenconsumable65') return +def use(core, actor, object): + core.buffService.addBuffToCreature(actor, 'detectHiddenConsumable65', actor) return \ No newline at end of file diff --git a/scripts/object/tangible/loot/generic_usable/item_consumable_detect_hidden_02_04.py b/scripts/object/tangible/loot/generic_usable/item_consumable_detect_hidden_02_04.py index 1814ad32..41c2bfcb 100644 --- a/scripts/object/tangible/loot/generic_usable/item_consumable_detect_hidden_02_04.py +++ b/scripts/object/tangible/loot/generic_usable/item_consumable_detect_hidden_02_04.py @@ -7,8 +7,12 @@ def setup(core, object): object.setDetailFilename('static_item_d') object.setDetailName('item_consumable_detect_hidden_02_04') object.setIntAttribute('reuse_time', 5) - object.setIntAttribute('num_in_stack' 8) + object.setIntAttribute('num_in_stack', 8) object.setStringAttribute('proc_name', '@ui_buff:detecthiddenconsumable100') return +def use(core, actor, object): + core.buffService.addBuffToCreature(actor, 'detectHiddenConsumable100', actor) + return + \ No newline at end of file diff --git a/scripts/object/weapon/ranged/pistol/weapon_pistol_pvp_rebel_general_reward_06_01.py b/scripts/object/weapon/ranged/pistol/weapon_pistol_pvp_rebel_general_reward_06_01.py index 66c27d1d..a68f47af 100644 --- a/scripts/object/weapon/ranged/pistol/weapon_pistol_pvp_rebel_general_reward_06_01.py +++ b/scripts/object/weapon/ranged/pistol/weapon_pistol_pvp_rebel_general_reward_06_01.py @@ -8,7 +8,6 @@ def setup(core, object): object.setDetailFilename('static_item_d') object.setDetailName('weapon_pistol_pvp_rebel_general_reward_06_01') object.setAttackSpeed(0.4); - object.setCustomName('Exceptional Rebel DL44 Pistol'); object.setMaxRange(35); object.setDamageType('energy'); object.setMinDamage(275); From baa61a543f96d5720d07284bbaa5436f9e76c01b Mon Sep 17 00:00:00 2001 From: Ziggeh Date: Mon, 30 Jun 2014 14:25:11 +0200 Subject: [PATCH 68/92] Fixed several GCW reward weapons --- .../exceptional_e11_carbine_imperial.py | 18 +++++++++--------- .../imperial_sergeant_reward_carbine_e11.py | 18 +++++++++--------- .../imperial_segeant_reward_pistol_power5.py | 18 +++++++++--------- ...on_pistol_pvp_rebel_general_reward_06_01.py | 12 ++++++------ 4 files changed, 33 insertions(+), 33 deletions(-) diff --git a/scripts/object/weapon/ranged/carbine/exceptional_e11_carbine_imperial.py b/scripts/object/weapon/ranged/carbine/exceptional_e11_carbine_imperial.py index 67f080e0..655395ce 100644 --- a/scripts/object/weapon/ranged/carbine/exceptional_e11_carbine_imperial.py +++ b/scripts/object/weapon/ranged/carbine/exceptional_e11_carbine_imperial.py @@ -1,13 +1,13 @@ import sys +from resources.datatables import WeaponType -def setup(core, object):: - object.setStringAttribute('required_skill', 'None') +def setup(core, object): object.setStringAttribute('faction_restriction', 'Imperial') - object.setAttackSpeed(0.6); - object.setCustomName('Exceptional Imperial E-11 Carbine'); - object.setMaxRange(50); - object.setDamageType("energy"); - object.setMinDamage(310); - object.setMaxDamage(550); - object.setWeaponType(1); + object.setAttackSpeed(0.6) + object.setCustomName('Exceptional Imperial E-11 Carbine') + object.setMaxRange(50) + object.setDamageType('energy') + object.setMinDamage(310) + object.setMaxDamage(550) + object.setWeaponType(WeaponType.CARBINE) return \ No newline at end of file diff --git a/scripts/object/weapon/ranged/carbine/imperial_sergeant_reward_carbine_e11.py b/scripts/object/weapon/ranged/carbine/imperial_sergeant_reward_carbine_e11.py index 2c1d2cb9..69ce568d 100644 --- a/scripts/object/weapon/ranged/carbine/imperial_sergeant_reward_carbine_e11.py +++ b/scripts/object/weapon/ranged/carbine/imperial_sergeant_reward_carbine_e11.py @@ -1,13 +1,13 @@ import sys +from resources.datatables import WeaponType -def setup(core, Object):: - object.setStringAttribute('required_skill', 'None') +def setup(core, object): object.setStringAttribute('faction_restriction', 'Imperial') - object.setAttackSpeed(0.6); - object.setCustomName('Imperial E-11 Carbine'); - object.setMaxRange(50); - object.setDamageType("energy"); - object.setMinDamage(200); - object.setMaxDamage(350); - object.setWeaponType(1); + object.setAttackSpeed(0.6) + object.setCustomName('Imperial E-11 Carbine') + object.setMaxRange(50) + object.setDamageType('energy') + object.setMinDamage(200) + object.setMaxDamage(350) + object.setWeaponType(WeaponType.CARBINE) return \ No newline at end of file diff --git a/scripts/object/weapon/ranged/pistol/imperial_segeant_reward_pistol_power5.py b/scripts/object/weapon/ranged/pistol/imperial_segeant_reward_pistol_power5.py index e56e4ddb..5dfbea18 100644 --- a/scripts/object/weapon/ranged/pistol/imperial_segeant_reward_pistol_power5.py +++ b/scripts/object/weapon/ranged/pistol/imperial_segeant_reward_pistol_power5.py @@ -1,13 +1,13 @@ import sys +from resources.datatables import WeaponType -def setup(core, object):: - object.setStringAttribute('required_skill', 'None') +def setup(core, object): object.setStringAttribute('faction_restriction', 'Imperial') - object.setAttackSpeed(0.4); - object.setCustomName('Imperial Power5 Pistol'); - object.setMaxRange(35); - object.setDamageType("energy"); - object.setMinDamage(90); - object.setMaxDamage(210); - object.setWeaponType(2); + object.setAttackSpeed(0.4) + object.setCustomName('Imperial Power5 Pistol') + object.setMaxRange(35) + object.setDamageType('energy') + object.setMinDamage(90) + object.setMaxDamage(210) + object.setWeaponType(WeaponType.PISTOL) return \ No newline at end of file diff --git a/scripts/object/weapon/ranged/pistol/weapon_pistol_pvp_rebel_general_reward_06_01.py b/scripts/object/weapon/ranged/pistol/weapon_pistol_pvp_rebel_general_reward_06_01.py index a68f47af..86fece0a 100644 --- a/scripts/object/weapon/ranged/pistol/weapon_pistol_pvp_rebel_general_reward_06_01.py +++ b/scripts/object/weapon/ranged/pistol/weapon_pistol_pvp_rebel_general_reward_06_01.py @@ -7,10 +7,10 @@ def setup(core, object): object.setStfName('weapon_pistol_pvp_rebel_general_reward_06_01') object.setDetailFilename('static_item_d') object.setDetailName('weapon_pistol_pvp_rebel_general_reward_06_01') - object.setAttackSpeed(0.4); - object.setMaxRange(35); - object.setDamageType('energy'); - object.setMinDamage(275); - object.setMaxDamage(518); - object.setWeaponType(WeaponType.PISTOL); + object.setAttackSpeed(0.4) + object.setMaxRange(35) + object.setDamageType('energy') + object.setMinDamage(275) + object.setMaxDamage(518) + object.setWeaponType(WeaponType.PISTOL) return \ No newline at end of file From 23ee8754bfdfe4d079c6808e55d10b71276165a5 Mon Sep 17 00:00:00 2001 From: Mesagoppinmypants Date: Mon, 30 Jun 2014 09:13:55 -0400 Subject: [PATCH 69/92] Fixed Set Bonus Bug --- .../ring/item_band_set_smuggler_utility_b_01_01.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/object/tangible/wearables/ring/item_band_set_smuggler_utility_b_01_01.py b/scripts/object/tangible/wearables/ring/item_band_set_smuggler_utility_b_01_01.py index 6a9fc806..50975e6d 100644 --- a/scripts/object/tangible/wearables/ring/item_band_set_smuggler_utility_b_01_01.py +++ b/scripts/object/tangible/wearables/ring/item_band_set_smuggler_utility_b_01_01.py @@ -11,8 +11,8 @@ def setup(core, object): object.setIntAttribute('required_combat_level', 85) object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_sm_false_hope', 2) object.setIntAttribute('cat_stat_mod_bonus.@stat_n:luck_modified', 30) - object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_smuggler_utility_b_1') - object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_smuggler_utility_b_2') - object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_smuggler_utility_b_3') + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_smuggler_utility_b_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_smuggler_utility_b_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_smuggler_utility_b_3') object.setAttachment('setBonus', 'set_smuggler_utility_b') - return \ No newline at end of file + return From a67f37700d9b2b50d91fd0c8303fba66d58ebba5 Mon Sep 17 00:00:00 2001 From: Mesagoppinmypants Date: Mon, 30 Jun 2014 09:14:48 -0400 Subject: [PATCH 70/92] Fixed Set Bonus Bug --- .../ring/item_ring_set_smuggler_utility_b_01_01.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/object/tangible/wearables/ring/item_ring_set_smuggler_utility_b_01_01.py b/scripts/object/tangible/wearables/ring/item_ring_set_smuggler_utility_b_01_01.py index 6b74bc35..0952ba6f 100644 --- a/scripts/object/tangible/wearables/ring/item_ring_set_smuggler_utility_b_01_01.py +++ b/scripts/object/tangible/wearables/ring/item_ring_set_smuggler_utility_b_01_01.py @@ -11,8 +11,8 @@ def setup(core, object): object.setIntAttribute('required_combat_level', 85) object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_sm_false_hope', 2) object.setIntAttribute('cat_stat_mod_bonus.@stat_n:luck_modified', 30) - object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_smuggler_utility_b_1') - object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_smuggler_utility_b_2') - object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_smuggler_utility_b_3') + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_smuggler_utility_b_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_smuggler_utility_b_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_smuggler_utility_b_3') object.setAttachment('setBonus', 'set_smuggler_utility_b') - return \ No newline at end of file + return From a8a4e340adeab7d613464e456b967b27dce766c8 Mon Sep 17 00:00:00 2001 From: Mesagoppinmypants Date: Mon, 30 Jun 2014 09:15:34 -0400 Subject: [PATCH 71/92] Fixed Set Bonus Bug --- .../item_necklace_set_smuggler_utility_b_01_01.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/object/tangible/wearables/necklace/item_necklace_set_smuggler_utility_b_01_01.py b/scripts/object/tangible/wearables/necklace/item_necklace_set_smuggler_utility_b_01_01.py index bda69a67..56d025b3 100644 --- a/scripts/object/tangible/wearables/necklace/item_necklace_set_smuggler_utility_b_01_01.py +++ b/scripts/object/tangible/wearables/necklace/item_necklace_set_smuggler_utility_b_01_01.py @@ -9,8 +9,8 @@ def setup(core, object): object.setIntAttribute('required_combat_level', 85) object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_sm_false_hope', 2) object.setIntAttribute('cat_stat_mod_bonus.@stat_n:luck_modified', 30) - object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_smuggler_utility_b_1') - object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_smuggler_utility_b_2') - object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_smuggler_utility_b_3') + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_smuggler_utility_b_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_smuggler_utility_b_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_smuggler_utility_b_3') object.setAttachment('setBonus', 'set_smuggler_utility_b') - return \ No newline at end of file + return From 13734401a45f5a4dca6188836294fbf25d5cad15 Mon Sep 17 00:00:00 2001 From: Mesagoppinmypants Date: Mon, 30 Jun 2014 09:16:00 -0400 Subject: [PATCH 72/92] Fixed Set Bonus Bug --- .../item_bracelet_l_set_smuggler_utility_b_01_01.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_smuggler_utility_b_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_smuggler_utility_b_01_01.py index 610fc4df..eb134929 100644 --- a/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_smuggler_utility_b_01_01.py +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_smuggler_utility_b_01_01.py @@ -9,8 +9,8 @@ def setup(core, object): object.setIntAttribute('required_combat_level', 85) object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_sm_false_hope', 2) object.setIntAttribute('cat_stat_mod_bonus.@stat_n:luck_modified', 30) - object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_smuggler_utility_b_1') - object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_smuggler_utility_b_2') - object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_smuggler_utility_b_3') + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_smuggler_utility_b_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_smuggler_utility_b_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_smuggler_utility_b_3') object.setAttachment('setBonus', 'set_smuggler_utility_b') - return \ No newline at end of file + return From c6fc586c01425f16e9ba10c1a1acc202174f392b Mon Sep 17 00:00:00 2001 From: Mesagoppinmypants Date: Mon, 30 Jun 2014 09:16:17 -0400 Subject: [PATCH 73/92] Fixed Set Bonus Bug --- .../item_bracelet_r_set_smuggler_utility_b_01_01.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_smuggler_utility_b_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_smuggler_utility_b_01_01.py index e07a84d5..bf5e7628 100644 --- a/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_smuggler_utility_b_01_01.py +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_smuggler_utility_b_01_01.py @@ -9,8 +9,8 @@ def setup(core, object): object.setIntAttribute('required_combat_level', 85) object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_sm_false_hope', 2) object.setIntAttribute('cat_stat_mod_bonus.@stat_n:luck_modified', 30) - object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_smuggler_utility_b_1') - object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_smuggler_utility_b_2') - object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_smuggler_utility_b_3') + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_smuggler_utility_b_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_smuggler_utility_b_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_smuggler_utility_b_3') object.setAttachment('setBonus', 'set_smuggler_utility_b') - return \ No newline at end of file + return From dc6f5460a65574b0b215dbafa393eb174e5ea2ec Mon Sep 17 00:00:00 2001 From: Ziggeh Date: Mon, 30 Jun 2014 16:18:34 +0200 Subject: [PATCH 74/92] Fixed an issue where items with uses weren't being consumed Fixed #970 Fixed #964 --- src/services/object/ObjectService.java | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/services/object/ObjectService.java b/src/services/object/ObjectService.java index 897abb06..65fd0562 100644 --- a/src/services/object/ObjectService.java +++ b/src/services/object/ObjectService.java @@ -732,8 +732,7 @@ public class ObjectService implements INetworkDispatch { } public void useObject(CreatureObject creature, final SWGObject object) { - System.out.println("creature " + creature); - System.out.println("object " + object); + if (creature == null || object == null) { return; } @@ -819,7 +818,7 @@ public class ObjectService implements INetworkDispatch { //shirt.setIntAttribute(effectName, powerValue); shirt.setAttachment("PUPEffectName", effectName); shirt.setAttachment("PUPEffectValue", powerValue); - + } if (object.getTemplate().equals(powerUpTemplate3)){ // weapon @@ -906,22 +905,27 @@ public class ObjectService implements INetworkDispatch { } catch (Exception e) { e.printStackTrace(); } - + if (object instanceof TangibleObject) { TangibleObject item = (TangibleObject) object; int uses = item.getUses(); if (uses > 0) { - item.setUses(uses--); + item.setUses(uses - 1); if (item.getUses() == 0) { destroyObject(object); } } } - + if (object.getStringAttribute("proc_name") != null) { - core.buffService.addBuffToCreature(creature, object.getStringAttribute("proc_name").replace("@ui_buff:", ""), creature); + String buffName = object.getStringAttribute("proc_name").replace("@ui_buff:", ""); + + if (object.getAttachment("alternateBuffName") != null) + buffName = (String) object.getAttachment("alternateBuffName"); + + core.buffService.addBuffToCreature(creature, buffName, creature); } String filePath = "scripts/" + template.split("shared_" , 2)[0].replace("shared_", "") + template.split("shared_" , 2)[1].replace(".iff", "") + ".py"; From 56edcdc95c4ad47a5c072b9be965b1918c73e976 Mon Sep 17 00:00:00 2001 From: Ziggeh Date: Mon, 30 Jun 2014 16:25:08 +0200 Subject: [PATCH 75/92] Fixed factional electrobinoculars --- .../generic_usable/item_consumable_detect_hidden_02_01.py | 8 +++----- .../generic_usable/item_consumable_detect_hidden_02_02.py | 8 +++----- .../generic_usable/item_consumable_detect_hidden_02_03.py | 8 +++----- .../generic_usable/item_consumable_detect_hidden_02_04.py | 8 ++------ 4 files changed, 11 insertions(+), 21 deletions(-) diff --git a/scripts/object/tangible/loot/generic_usable/item_consumable_detect_hidden_02_01.py b/scripts/object/tangible/loot/generic_usable/item_consumable_detect_hidden_02_01.py index 0dad6dbc..4cb55547 100644 --- a/scripts/object/tangible/loot/generic_usable/item_consumable_detect_hidden_02_01.py +++ b/scripts/object/tangible/loot/generic_usable/item_consumable_detect_hidden_02_01.py @@ -7,10 +7,8 @@ def setup(core, object): object.setDetailFilename('static_item_d') object.setDetailName('item_consumable_detect_hidden_02_01') object.setIntAttribute('reuse_time', 5) - object.setIntAttribute('num_in_stack', 8) + object.setUses(8) object.setStringAttribute('proc_name', '@ui_buff:detecthiddenconsumable20') + object.setAttachment('alternateBuffName', 'detectHiddenConsumable20') return - -def use(core, actor, object): - core.buffService.addBuffToCreature(actor, 'detectHiddenConsumable20', actor) - return \ No newline at end of file + \ No newline at end of file diff --git a/scripts/object/tangible/loot/generic_usable/item_consumable_detect_hidden_02_02.py b/scripts/object/tangible/loot/generic_usable/item_consumable_detect_hidden_02_02.py index 64a64c15..e4bd5ded 100644 --- a/scripts/object/tangible/loot/generic_usable/item_consumable_detect_hidden_02_02.py +++ b/scripts/object/tangible/loot/generic_usable/item_consumable_detect_hidden_02_02.py @@ -7,10 +7,8 @@ def setup(core, object): object.setDetailFilename('static_item_d') object.setDetailName('item_consumable_detect_hidden_02_02') object.setIntAttribute('reuse_time', 5) - object.setIntAttribute('num_in_stack', 8) + object.setUses(8) object.setStringAttribute('proc_name', '@ui_buff:detecthiddenconsumable40') + object.setAttachment('alternateBuffName', 'detectHiddenConsumable40') return - -def use(core, actor, object): - core.buffService.addBuffToCreature(actor, 'detectHiddenConsumable40', actor) - return \ No newline at end of file + \ No newline at end of file diff --git a/scripts/object/tangible/loot/generic_usable/item_consumable_detect_hidden_02_03.py b/scripts/object/tangible/loot/generic_usable/item_consumable_detect_hidden_02_03.py index 850a5731..dbe9173e 100644 --- a/scripts/object/tangible/loot/generic_usable/item_consumable_detect_hidden_02_03.py +++ b/scripts/object/tangible/loot/generic_usable/item_consumable_detect_hidden_02_03.py @@ -7,10 +7,8 @@ def setup(core, object): object.setDetailFilename('static_item_d') object.setDetailName('item_consumable_detect_hidden_02_03') object.setIntAttribute('reuse_time', 5) - object.setIntAttribute('num_in_stack', 8) + object.setUses(8) object.setStringAttribute('proc_name', '@ui_buff:detecthiddenconsumable65') + object.setAttachment('alternateBuffName', 'detectHiddenConsumable65') return - -def use(core, actor, object): - core.buffService.addBuffToCreature(actor, 'detectHiddenConsumable65', actor) - return \ No newline at end of file + \ No newline at end of file diff --git a/scripts/object/tangible/loot/generic_usable/item_consumable_detect_hidden_02_04.py b/scripts/object/tangible/loot/generic_usable/item_consumable_detect_hidden_02_04.py index 41c2bfcb..de881c2a 100644 --- a/scripts/object/tangible/loot/generic_usable/item_consumable_detect_hidden_02_04.py +++ b/scripts/object/tangible/loot/generic_usable/item_consumable_detect_hidden_02_04.py @@ -7,12 +7,8 @@ def setup(core, object): object.setDetailFilename('static_item_d') object.setDetailName('item_consumable_detect_hidden_02_04') object.setIntAttribute('reuse_time', 5) - object.setIntAttribute('num_in_stack', 8) + object.setUses(8) object.setStringAttribute('proc_name', '@ui_buff:detecthiddenconsumable100') + object.setAttachment('alternateBuffName', 'detectHiddenConsumable100') return - -def use(core, actor, object): - core.buffService.addBuffToCreature(actor, 'detectHiddenConsumable100', actor) - return - \ No newline at end of file From 504a59b6871ca815938af557d45f7e9cdfe1cfdb Mon Sep 17 00:00:00 2001 From: Ziggeh Date: Mon, 30 Jun 2014 16:43:14 +0200 Subject: [PATCH 76/92] Changed Rebel GCW reward weapons to use templates --- scripts/gcw_rewards_rebel.py | 78 +++++++------------ .../melee/polearm/factional_metal_staff.py | 11 +++ .../ranged/carbine/factional_laser_carbine.py | 11 +++ .../ranged/pistol/factional_scout_pistol.py | 11 +++ 4 files changed, 63 insertions(+), 48 deletions(-) create mode 100644 scripts/object/weapon/melee/polearm/factional_metal_staff.py create mode 100644 scripts/object/weapon/ranged/carbine/factional_laser_carbine.py create mode 100644 scripts/object/weapon/ranged/pistol/factional_scout_pistol.py diff --git a/scripts/gcw_rewards_rebel.py b/scripts/gcw_rewards_rebel.py index 5c86205e..d0ac37cf 100644 --- a/scripts/gcw_rewards_rebel.py +++ b/scripts/gcw_rewards_rebel.py @@ -9,7 +9,6 @@ from java.lang import Long from java.util import Map from java.util import TreeMap from resources.datatables import GcwRank -from resources.datatables import WeaponType import main.NGECore from services.gcw import GCWService import sys @@ -18,7 +17,7 @@ import math def handleRebelItems1 (core, owner): actor = owner.getSlottedObject('ghost') - window = core.suiService.createSUIWindow('Script.listBox', owner, owner, 0); + window = core.suiService.createSUIWindow('Script.listBox', owner, owner, 0) window.setProperty('bg.caption.lblTitle:Text', 'Rebel Item Requisition') window.setProperty('Prompt.lblPrompt:Text', 'Items') window.setProperty('btnOk:visible', 'True') @@ -65,7 +64,8 @@ def handleRebelItems1 (core, owner): if actor.getCurrentRank() >= GcwRank.GENERAL: window.addListBoxMenuItem('General', 11) - core.suiService.openSUIWindow(window); + core.suiService.openSUIWindow(window) + def setRebelBox1Callback(owner, window, eventType, returnList): if returnList.size()==0: @@ -114,7 +114,7 @@ def setRebelBox1Callback(owner, window, eventType, returnList): def privateHandler(owner): actor = owner.getSlottedObject('ghost') core = main.NGECore.getInstance() - window = core.suiService.createSUIWindow('Script.listBox', owner, owner, 0); + window = core.suiService.createSUIWindow('Script.listBox', owner, owner, 0) window.setProperty('bg.caption.lblTitle:Text', 'Rebel Item Requisition') window.setProperty('Prompt.lblPrompt:Text', 'Items') #window.addListBoxMenuItem('R2 Droid Schematic 165000',0) @@ -129,13 +129,13 @@ def privateHandler(owner): returnList = Vector() returnList.add('List.lstList:SelectedRow') window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, privateRewards) - core.suiService.openSUIWindow(window); + core.suiService.openSUIWindow(window) return def trooperHandler(owner): actor = owner.getSlottedObject('ghost') core = main.NGECore.getInstance() - window = core.suiService.createSUIWindow('Script.listBox', owner, owner, 0); + window = core.suiService.createSUIWindow('Script.listBox', owner, owner, 0) window.setProperty('bg.caption.lblTitle:Text', 'Rebel Item Requisition') window.setProperty('Prompt.lblPrompt:Text', 'Items') window.addListBoxMenuItem('Tech Armoire 105000',0) @@ -153,13 +153,13 @@ def trooperHandler(owner): returnList = Vector() returnList.add('List.lstList:SelectedRow') window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, trooperRewards) - core.suiService.openSUIWindow(window); + core.suiService.openSUIWindow(window) return def highTrooperHandler(owner): actor = owner.getSlottedObject('ghost') core = main.NGECore.getInstance() - window = core.suiService.createSUIWindow('Script.listBox', owner, owner, 0); + window = core.suiService.createSUIWindow('Script.listBox', owner, owner, 0) window.setProperty('bg.caption.lblTitle:Text', 'Rebel Item Requisition') window.setProperty('Prompt.lblPrompt:Text', 'Items') window.addListBoxMenuItem('Electrobinoculars 15000',0) @@ -173,13 +173,13 @@ def highTrooperHandler(owner): returnList = Vector() returnList.add('List.lstList:SelectedRow') window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, highTrooperRewards) - core.suiService.openSUIWindow(window); + core.suiService.openSUIWindow(window) return def sergeantHandler(owner): actor = owner.getSlottedObject('ghost') core = main.NGECore.getInstance() - window = core.suiService.createSUIWindow('Script.listBox', owner, owner, 0); + window = core.suiService.createSUIWindow('Script.listBox', owner, owner, 0) window.setProperty('bg.caption.lblTitle:Text', 'Rebel Item Requisition') window.setProperty('Prompt.lblPrompt:Text', 'Items') window.addListBoxMenuItem('Laser Carbine 187500',0) @@ -192,13 +192,13 @@ def sergeantHandler(owner): returnList = Vector() returnList.add('List.lstList:SelectedRow') window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, sergeantRewards) - core.suiService.openSUIWindow(window); + core.suiService.openSUIWindow(window) return def seniorSergeantHandler(owner): actor = owner.getSlottedObject('ghost') core = main.NGECore.getInstance() - window = core.suiService.createSUIWindow('Script.listBox', owner, owner, 0); + window = core.suiService.createSUIWindow('Script.listBox', owner, owner, 0) window.setProperty('bg.caption.lblTitle:Text', 'Rebel Item Requisition') window.setProperty('Prompt.lblPrompt:Text', 'Items') window.addListBoxMenuItem('Small Block Turret 120000',0) @@ -215,13 +215,13 @@ def seniorSergeantHandler(owner): returnList = Vector() returnList.add('List.lstList:SelectedRow') window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, seniorSergeantRewards) - core.suiService.openSUIWindow(window); + core.suiService.openSUIWindow(window) return def sergeantMajorHandler(owner): actor = owner.getSlottedObject('ghost') core = main.NGECore.getInstance() - window = core.suiService.createSUIWindow('Script.listBox', owner, owner, 0); + window = core.suiService.createSUIWindow('Script.listBox', owner, owner, 0) window.setProperty('bg.caption.lblTitle:Text', 'Rebel Item Requisition') window.setProperty('Prompt.lblPrompt:Text', 'Items') window.addListBoxMenuItem('Medium Block Turret 150000', 0) @@ -238,13 +238,13 @@ def sergeantMajorHandler(owner): returnList = Vector() returnList.add('List.lstList:SelectedRow') window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, sergeantMajorRewards) - core.suiService.openSUIWindow(window); + core.suiService.openSUIWindow(window) return def lieutenantHandler(owner): actor = owner.getSlottedObject('ghost') core = main.NGECore.getInstance() - window = core.suiService.createSUIWindow('Script.listBox', owner, owner, 0); + window = core.suiService.createSUIWindow('Script.listBox', owner, owner, 0) window.setProperty('bg.caption.lblTitle:Text', 'Rebel Item Requisition') window.setProperty('Prompt.lblPrompt:Text', 'Items') window.addListBoxMenuItem('Large Block Turret 210000',0) @@ -261,13 +261,13 @@ def lieutenantHandler(owner): returnList = Vector() returnList.add('List.lstList:SelectedRow') window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, lieutenantRewards) - core.suiService.openSUIWindow(window); + core.suiService.openSUIWindow(window) return def captainHandler(owner): actor = owner.getSlottedObject('ghost') core = main.NGECore.getInstance() - window = core.suiService.createSUIWindow('Script.listBox', owner, owner, 0); + window = core.suiService.createSUIWindow('Script.listBox', owner, owner, 0) window.setProperty('bg.caption.lblTitle:Text', 'Rebel Item Requisition') window.setProperty('Prompt.lblPrompt:Text', 'Items') window.addListBoxMenuItem('Factional Banner 81600', 0) @@ -278,13 +278,13 @@ def captainHandler(owner): returnList = Vector() returnList.add('List.lstList:SelectedRow') window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, captainRewards) - core.suiService.openSUIWindow(window); + core.suiService.openSUIWindow(window) return def majorHandler(owner): actor = owner.getSlottedObject('ghost') core = main.NGECore.getInstance() - window = core.suiService.createSUIWindow('Script.listBox', owner, owner, 0); + window = core.suiService.createSUIWindow('Script.listBox', owner, owner, 0) window.setProperty('bg.caption.lblTitle:Text', 'Rebel Item Requisition') window.setProperty('Prompt.lblPrompt:Text', 'Items') window.addListBoxMenuItem('Grey Spec Ops Armor Leggings 135000', 0) @@ -298,13 +298,13 @@ def majorHandler(owner): returnList = Vector() returnList.add('List.lstList:SelectedRow') window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, majorRewards) - core.suiService.openSUIWindow(window); + core.suiService.openSUIWindow(window) return def commanderHandler(owner): actor = owner.getSlottedObject('ghost') core = main.NGECore.getInstance() - window = core.suiService.createSUIWindow('Script.listBox', owner, owner, 0); + window = core.suiService.createSUIWindow('Script.listBox', owner, owner, 0) window.setProperty('bg.caption.lblTitle:Text', 'Rebel Item Requisition') window.setProperty('Prompt.lblPrompt:Text', 'Items') window.addListBoxMenuItem('Grey Spec Ops Armor Left Bicep 120000', 0) @@ -321,13 +321,13 @@ def commanderHandler(owner): returnList = Vector() returnList.add('List.lstList:SelectedRow') window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, commanderRewards) - core.suiService.openSUIWindow(window); + core.suiService.openSUIWindow(window) return def colonelHandler(owner): actor = owner.getSlottedObject('ghost') core = main.NGECore.getInstance() - window = core.suiService.createSUIWindow('Script.listBox', owner, owner, 0); + window = core.suiService.createSUIWindow('Script.listBox', owner, owner, 0) window.setProperty('bg.caption.lblTitle:Text', 'Rebel Item Requisition') window.setProperty('Prompt.lblPrompt:Text', 'Items') window.addListBoxMenuItem('Colonel Ring 2800000', 0) @@ -339,13 +339,13 @@ def colonelHandler(owner): returnList = Vector() returnList.add('List.lstList:SelectedRow') window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, colonelRewards) - core.suiService.openSUIWindow(window); + core.suiService.openSUIWindow(window) return def generalHandler(owner): actor = owner.getSlottedObject('ghost') core = main.NGECore.getInstance() - window = core.suiService.createSUIWindow('Script.listBox', owner, owner, 0); + window = core.suiService.createSUIWindow('Script.listBox', owner, owner, 0) window.setProperty('bg.caption.lblTitle:Text', 'Rebel Item Requisition') window.setProperty('Prompt.lblPrompt:Text', 'Items') window.addListBoxMenuItem('Windu\'s Guile 2000000', 0) @@ -361,7 +361,7 @@ def generalHandler(owner): returnList = Vector() returnList.add('List.lstList:SelectedRow') window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, generalRewards) - core.suiService.openSUIWindow(window); + core.suiService.openSUIWindow(window) return def privateRewards(owner, window, eventType, returnList): @@ -1187,13 +1187,7 @@ def laserCarbine(object, owner): if owner.getCashCredits() >= 187500: owner.setCashCredits(owner.getCashCredits() - 187500) core = main.NGECore.getInstance() - carbine = core.objectService.createObject('object/weapon/ranged/carbine/shared_carbine_laser.iff', owner.getPlanet()) - carbine.setAttackSpeed(0.6) - carbine.setMaxRange(50) - carbine.setDamageType('energy') - carbine.setMinDamage(350) - carbine.setMaxDamage(700) - carbine.setWeaponType(WeaponType.CARBINE) + carbine = core.objectService.createObject('object/weapon/ranged/carbine/shared_carbine_laser.iff', owner.getPlanet(), 'factional_laser_carbine') inventory = owner.getSlottedObject('inventory') inventory.add(carbine) elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): @@ -1203,13 +1197,7 @@ def scoutPistol(object, owner): if owner.getCashCredits() >= 40500: owner.setCashCredits(owner.getCashCredits() - 40500) core = main.NGECore.getInstance() - pistol = core.objectService.createObject('object/weapon/ranged/pistol/shared_pistol_scout_blaster.iff', owner.getPlanet()) - pistol.setAttackSpeed(0.4) - pistol.setMaxRange(35); - pistol.setDamageType('energy'); - pistol.setMinDamage(80); - pistol.setMaxDamage(130); - pistol.setWeaponType(WeaponType.PISTOL); + pistol = core.objectService.createObject('object/weapon/ranged/pistol/shared_pistol_scout_blaster.iff', owner.getPlanet(), 'factional_scout_pistol') inventory = owner.getSlottedObject('inventory') inventory.add(pistol) elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): @@ -1219,13 +1207,7 @@ def metalStaff(object, owner): if owner.getCashCredits() >= 30000: owner.setCashCredits(owner.getCashCredits() - 30000) core = main.NGECore.getInstance() - staff = core.objectService.createObject('object/weapon/melee/polearm/shared_lance_staff_metal.iff', owner.getPlanet()) - staff.setAttackSpeed(1.0); - staff.setMaxRange(5); - staff.setDamageType('kinetic'); - staff.setMinDamage(300); - staff.setMaxDamage(400); - staff.setWeaponType(WeaponType.POLEARMMELEE); + staff = core.objectService.createObject('object/weapon/melee/polearm/shared_lance_staff_metal.iff', owner.getPlanet(), 'factional_metal_staff') inventory = owner.getSlottedObject('inventory') inventory.add(staff) elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): diff --git a/scripts/object/weapon/melee/polearm/factional_metal_staff.py b/scripts/object/weapon/melee/polearm/factional_metal_staff.py new file mode 100644 index 00000000..e54ac755 --- /dev/null +++ b/scripts/object/weapon/melee/polearm/factional_metal_staff.py @@ -0,0 +1,11 @@ +import sys +from resources.datatables import WeaponType + +def setup(core, object): + object.setAttackSpeed(1.0) + object.setMaxRange(5) + object.setDamageType('kinetic') + object.setMinDamage(300) + object.setMaxDamage(400) + object.setWeaponType(WeaponType.POLEARMMELEE) + return \ No newline at end of file diff --git a/scripts/object/weapon/ranged/carbine/factional_laser_carbine.py b/scripts/object/weapon/ranged/carbine/factional_laser_carbine.py new file mode 100644 index 00000000..833ae5dd --- /dev/null +++ b/scripts/object/weapon/ranged/carbine/factional_laser_carbine.py @@ -0,0 +1,11 @@ +import sys +from resources.datatables import WeaponType + +def setup(core, object): + object.setAttackSpeed(0.6) + object.setMaxRange(50) + object.setDamageType('energy') + object.setMinDamage(350) + object.setMaxDamage(700) + object.setWeaponType(WeaponType.CARBINE) + return \ No newline at end of file diff --git a/scripts/object/weapon/ranged/pistol/factional_scout_pistol.py b/scripts/object/weapon/ranged/pistol/factional_scout_pistol.py new file mode 100644 index 00000000..2fd8f2f1 --- /dev/null +++ b/scripts/object/weapon/ranged/pistol/factional_scout_pistol.py @@ -0,0 +1,11 @@ +import sys +from resources.datatables import WeaponType + +def setup(core, object): + object.setAttackSpeed(0.4) + object.setMaxRange(35) + object.setDamageType('energy') + object.setMinDamage(80) + object.setMaxDamage(130) + object.setWeaponType(WeaponType.PISTOL) + return \ No newline at end of file From cda6332745b71c709e648986b5aa054036cc8ca3 Mon Sep 17 00:00:00 2001 From: Ziggeh Date: Mon, 30 Jun 2014 17:23:29 +0200 Subject: [PATCH 77/92] Added Lava Crystal item --- .../component/weapon/lightsaber/item_color_crystal_02_20.py | 1 + .../weapon/lightsaber/lightsaber_module_lava_crystal.py | 6 +++++- src/services/DevService.java | 5 +---- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/scripts/object/tangible/component/weapon/lightsaber/item_color_crystal_02_20.py b/scripts/object/tangible/component/weapon/lightsaber/item_color_crystal_02_20.py index 0d6b44b4..b10205e1 100644 --- a/scripts/object/tangible/component/weapon/lightsaber/item_color_crystal_02_20.py +++ b/scripts/object/tangible/component/weapon/lightsaber/item_color_crystal_02_20.py @@ -11,5 +11,6 @@ def setup(core, object): object.setStringAttribute('condition', '1000/1000') object.setStringAttribute("@obj_attr_n:color", "Windu's Guile") object.setAttachment('radial_filename', 'item/tunable') + object.setStringAttribute('@obj_attr_n:crystal_owner", "\\#D1F56F UNTUNED \\#FFFFFF ') return \ No newline at end of file diff --git a/scripts/object/tangible/component/weapon/lightsaber/lightsaber_module_lava_crystal.py b/scripts/object/tangible/component/weapon/lightsaber/lightsaber_module_lava_crystal.py index ccad8904..94ca341b 100644 --- a/scripts/object/tangible/component/weapon/lightsaber/lightsaber_module_lava_crystal.py +++ b/scripts/object/tangible/component/weapon/lightsaber/lightsaber_module_lava_crystal.py @@ -1,4 +1,8 @@ import sys def setup(core, object): - return \ No newline at end of file + object.setStringAttribute('condition', '100/100') + object.setStringAttribute('@obj_attr_n:color', 'Lava') + object.setAttachment('radial_filename', 'item/tunable') + return + \ No newline at end of file diff --git a/src/services/DevService.java b/src/services/DevService.java index 4b9bb46e..3700a3da 100644 --- a/src/services/DevService.java +++ b/src/services/DevService.java @@ -1057,10 +1057,6 @@ public class DevService implements INetworkDispatch { inventory.add(colorCrystal); TangibleObject lavaCrystal = (TangibleObject) core.objectService.createObject("object/tangible/component/weapon/lightsaber/shared_lightsaber_module_lava_crystal.iff", planet); - lavaCrystal.getAttributes().put("@obj_attr_n:condition", "100/100"); - lavaCrystal.getAttributes().put("@obj_attr_n:crystal_owner", "\\#D1F56F UNTUNED \\#FFFFFF "); - lavaCrystal.getAttributes().put("@obj_attr_n:color", "Lava"); - lavaCrystal.setAttachment("radial_filename", "item/tunable"); inventory.add(lavaCrystal); return; @@ -1334,6 +1330,7 @@ public class DevService implements INetworkDispatch { inventory.add(REingTool); core.lootService.prepInv2(player); return; + } } }); From 0f607f4b4e6bafb02bc86880fbc4fb30ad9b2da2 Mon Sep 17 00:00:00 2001 From: Ziggeh Date: Mon, 30 Jun 2014 17:31:24 +0200 Subject: [PATCH 78/92] Added Permafrost Crystal item --- .../weapon/lightsaber/lightsaber_module_lava_crystal.py | 1 + .../lightsaber/lightsaber_module_permafrost_crystal.py | 7 ++++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/scripts/object/tangible/component/weapon/lightsaber/lightsaber_module_lava_crystal.py b/scripts/object/tangible/component/weapon/lightsaber/lightsaber_module_lava_crystal.py index 94ca341b..ee964907 100644 --- a/scripts/object/tangible/component/weapon/lightsaber/lightsaber_module_lava_crystal.py +++ b/scripts/object/tangible/component/weapon/lightsaber/lightsaber_module_lava_crystal.py @@ -4,5 +4,6 @@ def setup(core, object): object.setStringAttribute('condition', '100/100') object.setStringAttribute('@obj_attr_n:color', 'Lava') object.setAttachment('radial_filename', 'item/tunable') + object.setStringAttribute('@obj_attr_n:crystal_owner", "\\#D1F56F UNTUNED \\#FFFFFF ') return \ No newline at end of file diff --git a/scripts/object/tangible/component/weapon/lightsaber/lightsaber_module_permafrost_crystal.py b/scripts/object/tangible/component/weapon/lightsaber/lightsaber_module_permafrost_crystal.py index ccad8904..34b27b77 100644 --- a/scripts/object/tangible/component/weapon/lightsaber/lightsaber_module_permafrost_crystal.py +++ b/scripts/object/tangible/component/weapon/lightsaber/lightsaber_module_permafrost_crystal.py @@ -1,4 +1,9 @@ import sys def setup(core, object): - return \ No newline at end of file + object.setStringAttribute('condition', '100/100') + object.setStringAttribute('@obj_attr_n:color', 'Permafrost') + object.setAttachment('radial_filename', 'item/tunable') + object.setStringAttribute('@obj_attr_n:crystal_owner", "\\#D1F56F UNTUNED \\#FFFFFF ') + return + \ No newline at end of file From 60299183d7b5d4f4d5fb24faecca968423f7bba2 Mon Sep 17 00:00:00 2001 From: Waverunner Date: Mon, 30 Jun 2014 18:53:15 -0400 Subject: [PATCH 79/92] Added ability to transfer leadership to another member in a Guild --- scripts/radial/object/guild_access_device.py | 5 +- src/resources/guild/Guild.java | 9 +++ src/resources/guild/GuildMember.java | 4 +- src/services/GuildService.java | 73 +++++++++++++++++--- src/services/sui/SUIService.java | 6 ++ 5 files changed, 85 insertions(+), 12 deletions(-) diff --git a/scripts/radial/object/guild_access_device.py b/scripts/radial/object/guild_access_device.py index 48784bda..4c92fbe7 100644 --- a/scripts/radial/object/guild_access_device.py +++ b/scripts/radial/object/guild_access_device.py @@ -45,7 +45,7 @@ def createRadial(core, owner, target, radials): radials.add(RadialOptions(4, RadialOptions.serverGuildSponsored, 3, '@guild:menu_sponsored')) # Sponsored for Membership if owner.getObjectID() == guild.getLeader(): radials.add(RadialOptions(4, 218, 3, '@guild:menu_member_motd')) # Create a Guild Message - #radials.add(RadialOptions(4, 69, 3, '@guild:menu_leader_change')) # Transfer PA Leadership + radials.add(RadialOptions(4, 69, 3, '@guild:menu_leader_change')) # Transfer PA Leadership return return @@ -77,6 +77,7 @@ def handleSelection(core, owner, target, option): core.guildService.showDisbandConfirmWindow(owner, guild) return + # - Change Guild Name elif option == RadialOptions.serverGuildNameChange: core.guildService.handleChangeGuildName(owner, guild) return @@ -100,8 +101,10 @@ def handleSelection(core, owner, target, option): # - Transfer PA Leadership elif option == 69: + core.guildService.handleTransferLeadership(owner, guild) return + # - Change Message of the Day elif option == 218: core.guildService.handleChangeGuildMotd(owner, guild) return diff --git a/src/resources/guild/Guild.java b/src/resources/guild/Guild.java index d152ad8d..76d0ac30 100644 --- a/src/resources/guild/Guild.java +++ b/src/resources/guild/Guild.java @@ -41,6 +41,7 @@ public class Guild { private Map members = new HashMap(); private Map sponsoredPlayers = new HashMap(); private String motd = ""; + private boolean electionsEnabled = false; public Guild(int id, String abbreviation, String name, SWGObject leader) { this.id = id; @@ -162,4 +163,12 @@ public class Guild { public GuildMember getMember(long objectID) { return members.get(objectID); } + + public boolean isElectionsEnabled() { + return electionsEnabled; + } + + public void setElectionsEnabled(boolean electionsEnabled) { + this.electionsEnabled = electionsEnabled; + } } diff --git a/src/resources/guild/GuildMember.java b/src/resources/guild/GuildMember.java index c8188cd1..e60573de 100644 --- a/src/resources/guild/GuildMember.java +++ b/src/resources/guild/GuildMember.java @@ -33,9 +33,7 @@ public class GuildMember { private String rank = ""; private String name = ""; private String title = ""; - // TODO: These might have to be moved to a new GuildRank class depending on how permissions worked for NGE - //this works for now... Lack of NGE Guild Rank guides makes re-creation difficult (Ranks introduced Game Update 8: http://swg.wikia.com/wiki/Game_Update_8) - + private Vector permissions = new Vector(); private boolean mailPermission = false; private boolean sponsorPermission = false; diff --git a/src/services/GuildService.java b/src/services/GuildService.java index 41418f30..5c36eec2 100644 --- a/src/services/GuildService.java +++ b/src/services/GuildService.java @@ -169,6 +169,71 @@ public class GuildService implements INetworkDispatch { return member; } + public void changeGuildLeader(Guild guild, CreatureObject formerLeaderCreo, CreatureObject newLeaderCreo, boolean elected) { + GuildMember formerLeader = guild.getMember(formerLeaderCreo.getObjectID()); + + if (formerLeader == null) + return; + + GuildMember newLeader = guild.getMember(newLeaderCreo.getObjectID()); + + if (newLeader == null) + return; + + formerLeader.removeAllPermissions(); + newLeader.giveAllPermissions(); + + // TODO: Handling of guild PA Halls + + guild.setLeader(newLeaderCreo.getObjectID()); + guild.setLeaderName(newLeaderCreo.getCustomName()); + + if (elected) { + // TODO: Guild leader elections + } else { + formerLeaderCreo.sendSystemMessage("@guild:ml_success", DisplayType.Broadcast); + newLeaderCreo.sendSystemMessage("@guild:ml_you_are_leader", DisplayType.Broadcast); + guild.sendGuildMail(guild.getName(), "@guildmail:leaderchange_subject", new ProsePackage("@guildmail:leaderchange_text", "TU", newLeaderCreo.getCustomName())); + } + + } + + public void handleTransferLeadership(CreatureObject actor, Guild guild) { + + SUIWindow transferWindow = core.suiService.createInputBox(InputBoxType.INPUT_BOX_OK_CANCEL, "@guild:make_leader_t", "@guild:make_leader_d", actor, null, 0, + (owner, eventType, returnList) -> { + String name = returnList.get(0); + + if (name == "" || name == " ") + return; + + SWGObject transferTarget = core.chatService.getObjectByFirstName(name); + + if (transferTarget == null) { + actor.sendSystemMessage("@guild:ml_not_loaded", DisplayType.Broadcast); + return; + } + + if (!guild.getMembers().containsKey(transferTarget.getObjectID())) { + actor.sendSystemMessage("@guild:ml_fail", DisplayType.Broadcast); + return; + } + + if (actor.getPlanetId() != transferTarget.getPlanetId() || actor.getWorldPosition().getDistance2D(transferTarget.getWorldPosition()) > (float) 10) { + actor.sendSystemMessage("@guild:ml_not_loaded", DisplayType.Broadcast); + return; + } + + SUIWindow confirmTransferWindow = core.suiService.createMessageBox(MessageBoxType.MESSAGE_BOX_YES_NO, "@guild:make_leader_t", "@guild:make_leader_p", transferTarget, null, 0, (owner2, eventType2, returnList2) -> { + changeGuildLeader(guild, actor, (CreatureObject) transferTarget, false); + }); + core.suiService.openSUIWindow(confirmTransferWindow); + + }); + + core.suiService.openSUIWindow(transferWindow); + } + public void handleCreateGuildName(CreatureObject actor, SWGObject creationSource) { if (actor.getGuildId() != 0) { actor.sendSystemMessage("@guild:create_fail_in_guild", DisplayType.Broadcast); return; } @@ -606,8 +671,6 @@ public class GuildService implements INetworkDispatch { core.suiService.openSUIWindow(window); } - - public void handleGuildSponsorWindow(CreatureObject actor) { SUIWindow wndSponsorPlayer = core.suiService.createInputBox(InputBoxType.INPUT_BOX_OK_CANCEL, "@guild:sponsor_title", "@guild:sponsor_prompt", actor, null, (float) 10, (sponsor, eventType, returnList) -> { @@ -660,7 +723,6 @@ public class GuildService implements INetworkDispatch { core.suiService.openSUIWindow(wndSponsorPlayer); } - public void handleGuildDisband(CreatureObject actor, Guild guild) { Map members = guild.getMembers(); @@ -700,7 +762,6 @@ public class GuildService implements INetworkDispatch { removeGuild(guild.getId()); } - public void handleManageSponsoredPlayers(CreatureObject actor) { Guild guild = getGuildById(actor.getGuildId()); @@ -794,7 +855,6 @@ public class GuildService implements INetworkDispatch { core.chatService.sendPersistentMessageHeader(sponsoree.getClient(), declinedMail); } - public void showKickConfirmWindow(CreatureObject actor, CreatureObject target, Guild guild) { if (target.getObjectID() == guild.getLeader() && target.getObjectID() == actor.getObjectID()) { @@ -889,7 +949,6 @@ public class GuildService implements INetworkDispatch { } } - public void sendMailToGuild(String sender, String subject, String message, int guildId) { Guild guild = getGuildById(guildId); @@ -917,12 +976,10 @@ public class GuildService implements INetworkDispatch { target.getClient().getSession().write(roomMessage.serialize()); } - public GuildObject getGuildObject() { return object; } - public SWGSet getGuildList() { return object.getGuildList(); } diff --git a/src/services/sui/SUIService.java b/src/services/sui/SUIService.java index ab354051..8c4e6fc2 100644 --- a/src/services/sui/SUIService.java +++ b/src/services/sui/SUIService.java @@ -384,6 +384,12 @@ public class SUIService implements INetworkDispatch { } + public SUIWindow createMessageBox(int type, String title, String promptText, SWGObject owner, SWGObject rangeObject, float maxDistance, SUICallback handleFunc) { + SUIWindow window = createMessageBox(type, title, promptText, owner, rangeObject, maxDistance); + window.addHandler(0, "", Trigger.TRIGGER_OK, new Vector(), handleFunc); + return window; + } + public SUIWindow createInputBox(int type, String title, String promptText, SWGObject owner, SWGObject rangeObject, float maxDistance) { SUIWindow window = createSUIWindow("Script.inputBox", owner, rangeObject, maxDistance); From 6f7744845bf45ea377ee1eb8c5bbcad47978325f Mon Sep 17 00:00:00 2001 From: Zing Date: Mon, 30 Jun 2014 22:02:49 -0700 Subject: [PATCH 80/92] Added Imperial Rank reward setup Added Imperial Spec Ops Armor (need to find a way to FORCE primary color, it is only allowed to be white. Secondary color can be changed to black.) Added Imperial Command BARC Added Factional Weapons Added Painting Added Nova Necklace and Colonel Ring Changed Factional Recruiter script to allow Rewards. Added Imperial Comm Link (Does not call a pet) --- scripts/conversation/imp_recruiter.py | 9 +- scripts/gcw_rewards_imperial.py | 1451 +++++++++++++++++ .../item_deed_barc_imperial_06_01.py | 15 + ...utenant_comm_link_imperial_reward_04_01.py | 9 + .../painting/painting_pvp_reward_imperial.py | 6 +- ..._pvp_spec_ops_imperial_black_belt_05_01.py | 18 + ...p_spec_ops_imperial_black_bicep_l_05_01.py | 18 + ...p_spec_ops_imperial_black_bicep_r_05_01.py | 18 + ...pvp_spec_ops_imperial_black_boots_05_01.py | 18 + ..._spec_ops_imperial_black_bracer_l_05_01.py | 18 + ..._spec_ops_imperial_black_bracer_r_05_01.py | 18 + ...vp_spec_ops_imperial_black_gloves_05_01.py | 18 + ...vp_spec_ops_imperial_black_helmet_05_01.py | 18 + ..._spec_ops_imperial_black_leggings_05_01.py | 18 + ...or_stormtrooper_pvp_officer_chest_plate.py | 14 + ...pvp_imperial_sergeant_major_medal_03_01.py | 3 + .../weapon/melee/sword/factional_sword.py | 11 + .../ranged/carbine/factional_e11_carbine.py | 11 + ...weapon_carbine_pvp_general_reward_05_01.py | 13 + .../ranged/heavy/factional_rocket_launcher.py | 13 + .../ranged/pistol/factional_power_5_pistol.py | 11 + 21 files changed, 1720 insertions(+), 8 deletions(-) create mode 100644 scripts/gcw_rewards_imperial.py create mode 100644 scripts/object/tangible/deed/vehicle_deed/item_deed_barc_imperial_06_01.py create mode 100644 scripts/object/tangible/gcw/pvp_rank_rewards/item_pvp_lieutenant_comm_link_imperial_reward_04_01.py create mode 100644 scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_belt_05_01.py create mode 100644 scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_bicep_l_05_01.py create mode 100644 scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_bicep_r_05_01.py create mode 100644 scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_boots_05_01.py create mode 100644 scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_bracer_l_05_01.py create mode 100644 scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_bracer_r_05_01.py create mode 100644 scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_gloves_05_01.py create mode 100644 scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_helmet_05_01.py create mode 100644 scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_leggings_05_01.py create mode 100644 scripts/object/weapon/melee/sword/factional_sword.py create mode 100644 scripts/object/weapon/ranged/carbine/factional_e11_carbine.py create mode 100644 scripts/object/weapon/ranged/carbine/weapon_carbine_pvp_general_reward_05_01.py create mode 100644 scripts/object/weapon/ranged/heavy/factional_rocket_launcher.py create mode 100644 scripts/object/weapon/ranged/pistol/factional_power_5_pistol.py diff --git a/scripts/conversation/imp_recruiter.py b/scripts/conversation/imp_recruiter.py index 3b506483..1803a584 100644 --- a/scripts/conversation/imp_recruiter.py +++ b/scripts/conversation/imp_recruiter.py @@ -129,13 +129,8 @@ def handleFirstScreen(core, actor, npc, selection): return if selection == 2: - convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage('@conversation/faction_recruiter_imperial:s_90')) - - options = Vector() - options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_imperial:s_92'), 0)) - options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_imperial:s_96'), 1)) - convSvc.sendConversationOptions(actor, npc, options, handleSecondScreen) - + core.scriptService.callScript("scripts/", "gcw_rewards_imperial", "handleImperialItems1", core, actor); + core.conversationService.sendStopConversation(actor, npc, 'conversation/faction_recruiter_imperial', 's_90') return return elif actor.getFaction() == 'imperial' and actor.getFactionStatus() == FactionStatus.SpecialForces: diff --git a/scripts/gcw_rewards_imperial.py b/scripts/gcw_rewards_imperial.py new file mode 100644 index 00000000..f94cf77b --- /dev/null +++ b/scripts/gcw_rewards_imperial.py @@ -0,0 +1,1451 @@ +from resources.common import RadialOptions +from resources.common import OutOfBand +from protocol.swg import ResourceListForSurveyMessage +from services.sui.SUIService import MessageBoxType +from services.sui.SUIWindow import Trigger +from java.util import Vector +from java.lang import System +from java.lang import Long +from java.util import Map +from java.util import TreeMap +from resources.datatables import GcwRank +from resources.datatables import WeaponType +import main.NGECore +from services.gcw import GCWService +import sys +import math + + +def handleImperialItems1 (core, owner): + actor = owner.getSlottedObject('ghost') + window = core.suiService.createSUIWindow('Script.listBox', owner, owner, 0); + window.setProperty('bg.caption.lblTitle:Text', 'Imperial Item Requisition') + window.setProperty('Prompt.lblPrompt:Text', 'Items') + window.setProperty('btnOk:visible', 'True') + window.setProperty('btnCancel:visible', 'True') + window.setProperty('btnOk:Text', '@ok') + window.setProperty('btnCancel:Text', '@cancel') + returnList = Vector() + returnList.add('List.lstList:SelectedRow') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, setImperialBox1Callback) + + if actor.getCurrentRank() >= GcwRank.PRIVATE: + window.addListBoxMenuItem('Private', 0) + + if actor.getCurrentRank() >= GcwRank.LANCECORPORAL: + window.addListBoxMenuItem('Lance Corporal', 1) + + if actor.getCurrentRank() >= GcwRank.CORPORAL: + window.addListBoxMenuItem('Corporal', 2) + + if actor.getCurrentRank() >= GcwRank.SERGEANT: + window.addListBoxMenuItem('Sergeant', 3) + + if actor.getCurrentRank() >= GcwRank.MASTERSERGEANT: + window.addListBoxMenuItem('Master Sergeant', 4) + + if actor.getCurrentRank() >= GcwRank.SERGEANTMAJOR: + window.addListBoxMenuItem('Sergeant Major', 5) + + if actor.getCurrentRank() >= GcwRank.LIEUTENANT: + window.addListBoxMenuItem('Lieutenant', 6) + + if actor.getCurrentRank() >= GcwRank.CAPTAIN: + window.addListBoxMenuItem('Captain', 7) + + if actor.getCurrentRank() >= GcwRank.MAJOR: + window.addListBoxMenuItem('Major', 8) + + if actor.getCurrentRank() >= GcwRank.LTCOLONEL: + window.addListBoxMenuItem('LT Colonel', 9) + + if actor.getCurrentRank() >= GcwRank.COLONEL: + window.addListBoxMenuItem('Colonel', 10) + + if actor.getCurrentRank() >= GcwRank.GENERAL: + window.addListBoxMenuItem('General', 11) + + core.suiService.openSUIWindow(window); +def setImperialBox1Callback(owner, window, eventType, returnList): + + if returnList.size()==0: + owner.sendSystemMessage('NULL', 0) + return + + if returnList.get(0)=='0': + privateHandler(owner) + return + if returnList.get(0)=='1': + lanceCorporalHandler(owner) + return + if returnList.get(0)=='2': + corporalHandler(owner) + return + if returnList.get(0)=='3': + sergeantHandler(owner) + return + if returnList.get(0)=='4': + masterSergeantHandler(owner) + return + if returnList.get(0)=='5': + sergeantMajorHandler(owner) + return + if returnList.get(0)=='6': + lieutenantHandler(owner) + return + if returnList.get(0)=='7': + captainHandler(owner) + return + if returnList.get(0)=='8': + majorHandler(owner) + return + if returnList.get(0)=='9': + ltColonelHandler(owner) + return + if returnList.get(0)=='10': + colonelHandler(owner) + return + if returnList.get(0)=='11': + generalHandler(owner) + return + + return + +def privateHandler(owner): + actor = owner.getSlottedObject('ghost') + core = main.NGECore.getInstance() + window = core.suiService.createSUIWindow('Script.listBox', owner, owner, 0); + window.setProperty('bg.caption.lblTitle:Text', 'Imperial Item Requisition') + window.setProperty('Prompt.lblPrompt:Text', 'Items') + #window.addListBoxMenuItem('R2 Droid Schematic 165000', 0) + #window.addListBoxMenuItem('R3 Droid Schematic 180000', 1) + #window.addListBoxMenuItem('R4 Droid Schematic 195000', 2) + #window.addListBoxMenuItem('DZ-70 Droid Schematic 225000', 3) + #window.addListBoxMenuItem('Proximity Caltrop Trap 3250' ,4) + #window.addListBoxMenuItem('Remote Caltrop Trap 4000', 5) + #window.addListBoxMenuItem('Proximity Flashbang Trap 3250', 6) + #window.addListBoxMenuItem('Remote Flashbang Trap 4000', 7) + #window.addListBoxMenuItem('Proximity HX2 Trap 3250', 8) + #window.addListBoxMenuItem('Remote HX2 Trap 4000', 9) + window.setProperty('btnOk:visible', 'True') + window.setProperty('btnCancel:visible', 'True') + window.setProperty('btnOk:Text', '@ok') + window.setProperty('btnCancel:Text', '@cancel') + returnList = Vector() + returnList.add('List.lstList:SelectedRow') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, privateRewards) + core.suiService.openSUIWindow(window); + return + +def lanceCorporalHandler(owner): + actor = owner.getSlottedObject('ghost') + core = main.NGECore.getInstance() + window = core.suiService.createSUIWindow('Script.listBox', owner, owner, 0); + window.setProperty('bg.caption.lblTitle:Text', 'Imperial Item Requisition') + window.setProperty('Prompt.lblPrompt:Text', 'Items') + window.addListBoxMenuItem('Tech Armoire 105000', 0) + window.addListBoxMenuItem('Tech Bookcase 105000', 1) + window.addListBoxMenuItem('Tech Cabinet 105000', 2) + window.addListBoxMenuItem('Tech Chest 75000', 3) + window.addListBoxMenuItem('Tech Couch 112500', 4) + window.addListBoxMenuItem('Tech Chair 75000', 5) + window.addListBoxMenuItem('Tech Coffee Table 75000', 6) + window.addListBoxMenuItem('Tech End Table 75000', 7) + window.addListBoxMenuItem('Data Terminal Slim 60000', 8) + window.addListBoxMenuItem('Data Terminal Standard 75000', 9) + window.addListBoxMenuItem('Data Terminal Bulky 90000', 10) + window.addListBoxMenuItem('Data Terminal Wall 105000', 11) + window.addListBoxMenuItem('Imperial Table 75000', 12) + window.setProperty('btnOk:visible', 'True') + window.setProperty('btnCancel:visible', 'True') + window.setProperty('btnOk:Text', '@ok') + window.setProperty('btnCancel:Text', '@cancel') + returnList = Vector() + returnList.add('List.lstList:SelectedRow') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, lanceCorporalRewards) + core.suiService.openSUIWindow(window); + return + +def corporalHandler(owner): + actor = owner.getSlottedObject('ghost') + core = main.NGECore.getInstance() + window = core.suiService.createSUIWindow('Script.listBox', owner, owner, 0); + window.setProperty('bg.caption.lblTitle:Text', 'Imperial Item Requisition') + window.setProperty('Prompt.lblPrompt:Text', 'Items') + window.addListBoxMenuItem('Electrobinoculars 15000', 0) + window.addListBoxMenuItem('Advanced Electrobinoculars 22500',1) + window.addListBoxMenuItem('Superior Electrobinoculars 30000', 2) + window.addListBoxMenuItem('Experimental Electrobinoculars 37500', 3) + window.setProperty('btnOk:visible', 'True') + window.setProperty('btnCancel:visible', 'True') + window.setProperty('btnOk:Text', '@ok') + window.setProperty('btnCancel:Text', '@cancel') + returnList = Vector() + returnList.add('List.lstList:SelectedRow') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, corporalRewards) + core.suiService.openSUIWindow(window); + return + +def sergeantHandler(owner): + actor = owner.getSlottedObject('ghost') + core = main.NGECore.getInstance() + window = core.suiService.createSUIWindow('Script.listBox', owner, owner, 0); + window.setProperty('bg.caption.lblTitle:Text', 'Imperial Item Requisition') + window.setProperty('Prompt.lblPrompt:Text', 'Items') + window.addListBoxMenuItem('Imperial Boots 37500', 0) + window.addListBoxMenuItem('Imperial Jacket 37500' ,1) + window.addListBoxMenuItem('Imperial Pants 37500', 2) + window.addListBoxMenuItem('Imperial Hat 37500', 3) + window.addListBoxMenuItem('Power5 Pistol 112500', 4) + window.addListBoxMenuItem('E-11 Carbine', 5) + window.addListBoxMenuItem('Sword 30000', 6) + window.addListBoxMenuItem('Rocket Launcher 150000', 7) + window.setProperty('btnOk:visible', 'True') + window.setProperty('btnCancel:visible', 'True') + window.setProperty('btnOk:Text', '@ok') + window.setProperty('btnCancel:Text', '@cancel') + returnList = Vector() + returnList.add('List.lstList:SelectedRow') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, sergeantRewards) + core.suiService.openSUIWindow(window); + return + +def masterSergeantHandler(owner): + actor = owner.getSlottedObject('ghost') + core = main.NGECore.getInstance() + window = core.suiService.createSUIWindow('Script.listBox', owner, owner, 0); + window.setProperty('bg.caption.lblTitle:Text', 'Imperial Item Requisition') + window.setProperty('Prompt.lblPrompt:Text', 'Items') + window.addListBoxMenuItem('Small Block Turret 120000',0) + window.addListBoxMenuItem('Small Dish Turret 120000',1) + window.addListBoxMenuItem('Small Tower Turret 120000',2) + window.addListBoxMenuItem('Painting Might of the Empire 375000',3) + #window.addListBoxMenuItem('DRX-55 Mine 12000',4) + #window.addListBoxMenuItem('SR-88 Cyro Mine 12000',5) + #window.addListBoxMenuItem('XG Mine 12000',6) + window.setProperty('btnOk:visible', 'True') + window.setProperty('btnCancel:visible', 'True') + window.setProperty('btnOk:Text', '@ok') + window.setProperty('btnCancel:Text', '@cancel') + returnList = Vector() + returnList.add('List.lstList:SelectedRow') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, masterSergeantRewards) + core.suiService.openSUIWindow(window); + return + +def sergeantMajorHandler(owner): + actor = owner.getSlottedObject('ghost') + core = main.NGECore.getInstance() + window = core.suiService.createSUIWindow('Script.listBox', owner, owner, 0); + window.setProperty('bg.caption.lblTitle:Text', 'Imperial Item Requisition') + window.setProperty('Prompt.lblPrompt:Text', 'Items') + window.addListBoxMenuItem('Medium Block Turret 150000', 0) + window.addListBoxMenuItem('Medium Tower Turret 150000', 1) + window.addListBoxMenuItem('HQ Forward Outpost 525000', 2) + window.addListBoxMenuItem('HQ Field Hospital 1050000', 3) + window.addListBoxMenuItem('SF HQ Forward Outpost 750000' ,4) + window.addListBoxMenuItem('SF HQ Field Hospital 1500000', 5) + window.addListBoxMenuItem('Nova Star Medal of the Empire 80000', 6) + window.setProperty('btnOk:visible', 'True') + window.setProperty('btnCancel:visible', 'True') + window.setProperty('btnOk:Text', '@ok') + window.setProperty('btnCancel:Text', '@cancel') + returnList = Vector() + returnList.add('List.lstList:SelectedRow') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, sergeantMajorRewards) + core.suiService.openSUIWindow(window); + return + +def lieutenantHandler(owner): + actor = owner.getSlottedObject('ghost') + core = main.NGECore.getInstance() + window = core.suiService.createSUIWindow('Script.listBox', owner, owner, 0); + window.setProperty('bg.caption.lblTitle:Text', 'Imperial Item Requisition') + window.setProperty('Prompt.lblPrompt:Text', 'Items') + window.addListBoxMenuItem('Large Block Turret 210000',0) + window.addListBoxMenuItem('Large Dish Turret 210000',1) + window.addListBoxMenuItem('Large Tower Turret 210000',2) + window.addListBoxMenuItem('HQ Tactical Center 1875000', 3) + window.addListBoxMenuItem('HQ Field Hospital 3600000',4) + window.addListBoxMenuItem('SF HQ Tactical Center 2325000',5) + window.addListBoxMenuItem('SF HQ Detachment Headquarters 4500000',6) + window.addListBoxMenuItem('Factional Comm link 200000', 7) + window.setProperty('btnOk:visible', 'True') + window.setProperty('btnCancel:visible', 'True') + window.setProperty('btnOk:Text', '@ok') + window.setProperty('btnCancel:Text', '@cancel') + returnList = Vector() + returnList.add('List.lstList:SelectedRow') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, lieutenantRewards) + core.suiService.openSUIWindow(window); + return + +def captainHandler(owner): + actor = owner.getSlottedObject('ghost') + core = main.NGECore.getInstance() + window = core.suiService.createSUIWindow('Script.listBox', owner, owner, 0); + window.setProperty('bg.caption.lblTitle:Text', 'Imperial Item Requisition') + window.setProperty('Prompt.lblPrompt:Text', 'Items') + window.addListBoxMenuItem('Factional Banner 81600', 0) + window.setProperty('btnOk:visible', 'True') + window.setProperty('btnCancel:visible', 'True') + window.setProperty('btnOk:Text', '@ok') + window.setProperty('btnCancel:Text', '@cancel') + returnList = Vector() + returnList.add('List.lstList:SelectedRow') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, captainRewards) + core.suiService.openSUIWindow(window); + return + +def majorHandler(owner): + actor = owner.getSlottedObject('ghost') + core = main.NGECore.getInstance() + window = core.suiService.createSUIWindow('Script.listBox', owner, owner, 0); + window.setProperty('bg.caption.lblTitle:Text', 'Imperial Item Requisition') + window.setProperty('Prompt.lblPrompt:Text', 'Items') + window.addListBoxMenuItem('Black Spec Ops Armor Leggings 46636', 0) + window.addListBoxMenuItem('Black Spec Ops Armor Belt 38863', 1) + window.addListBoxMenuItem('Black Spec Ops Armor Boots 41454', 2) + window.addListBoxMenuItem('Technical Readout of an Imperial Spec Ops Armor Dye Kit 12954', 3) + window.setProperty('btnOk:visible', 'True') + window.setProperty('btnCancel:visible', 'True') + window.setProperty('btnOk:Text', '@ok') + window.setProperty('btnCancel:Text', '@cancel') + returnList = Vector() + returnList.add('List.lstList:SelectedRow') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, majorRewards) + core.suiService.openSUIWindow(window); + return + +def ltColonelHandler(owner): + actor = owner.getSlottedObject('ghost') + core = main.NGECore.getInstance() + window = core.suiService.createSUIWindow('Script.listBox', owner, owner, 0); + window.setProperty('bg.caption.lblTitle:Text', 'Imperial Item Requisition') + window.setProperty('Prompt.lblPrompt:Text', 'Items') + window.addListBoxMenuItem('Black Spec Ops Armor Left Bicep 120000', 0) + window.addListBoxMenuItem('Black Spec Ops Armor Right Bicep 120000', 1) + window.addListBoxMenuItem('Black Spec Ops Armor Left Bracer 120000', 2) + window.addListBoxMenuItem('Black Spec Ops Armor Right Bracer 120000', 3) + window.addListBoxMenuItem('Black Spec Ops Armor Gloves 120000', 4) + window.addListBoxMenuItem('Black Spec Ops Armor Helmet 150000', 5) + window.addListBoxMenuItem('Black Spec Ops Armor Torso 225000', 6) + window.setProperty('btnOk:visible', 'True') + window.setProperty('btnCancel:visible', 'True') + window.setProperty('btnOk:Text', '@ok') + window.setProperty('btnCancel:Text', '@cancel') + returnList = Vector() + returnList.add('List.lstList:SelectedRow') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, ltColonelRewards) + core.suiService.openSUIWindow(window); + return + +def colonelHandler(owner): + actor = owner.getSlottedObject('ghost') + core = main.NGECore.getInstance() + window = core.suiService.createSUIWindow('Script.listBox', owner, owner, 0); + window.setProperty('bg.caption.lblTitle:Text', 'Imperial Item Requisition') + window.setProperty('Prompt.lblPrompt:Text', 'Items') + window.addListBoxMenuItem('Colonel Signet Ring of the Empire 142500', 0) + window.addListBoxMenuItem('BARC Command Vehicle 1050000', 1) + window.setProperty('btnOk:visible', 'True') + window.setProperty('btnCancel:visible', 'True') + window.setProperty('btnOk:Text', '@ok') + window.setProperty('btnCancel:Text', '@cancel') + returnList = Vector() + returnList.add('List.lstList:SelectedRow') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, colonelRewards) + core.suiService.openSUIWindow(window); + return + +def generalHandler(owner): + actor = owner.getSlottedObject('ghost') + core = main.NGECore.getInstance() + window = core.suiService.createSUIWindow('Script.listBox', owner, owner, 0); + window.setProperty('bg.caption.lblTitle:Text', 'Imperial Item Requisition') + window.setProperty('Prompt.lblPrompt:Text', 'Items') + window.addListBoxMenuItem('Windu\'s Guile 2000000', 0) + window.addListBoxMenuItem('Exceptional Imperial E-11 Carbine 200000', 1) + window.addListBoxMenuItem('The Legendary Starlight Carbine 200000', 2) + window.addListBoxMenuItem('The Legendary Crimson Nova Pistol 200000', 3) + window.addListBoxMenuItem('The Legendary Vortex Rifle 200000', 4) + window.addListBoxMenuItem('The Legendary Reaper Cannon 200000', 5) + window.setProperty('btnOk:visible', 'True') + window.setProperty('btnCancel:visible', 'True') + window.setProperty('btnOk:Text', '@ok') + window.setProperty('btnCancel:Text', '@cancel') + returnList = Vector() + returnList.add('List.lstList:SelectedRow') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, generalRewards) + core.suiService.openSUIWindow(window); + return + +def privateRewards(owner, window, eventType, returnList): + + if returnList.size()==0: + return + + if returnList.get(0)=='0': + r2DroidSchematic(object, owner) + return + + if returnList.get(0)=='1': + r3DroidSchematic(object, owner) + return + + if returnList.get(0)=='2': + r4DroidSchematic(object, owner) + return + + if returnList.get(0)=='3': + r5DroidSchematic(object, owner) + return + + if returnList.get(0)=='4': + dz70DroidSchematic(object, owner) + return + + if returnList.get(0)=='5': + proximityCaltrop(object, owner) + return + + if returnList.get(0)=='6': + remoteCaltrop(object, owner) + return + + if returnList.get(0)=='7': + proximityFlashbang(object, owner) + return + + if returnList.get(0)=='8': + remoteFlashbang(object, owner) + return + + if returnList.get(0)=='9': + proximityHX2(object, owner) + return + + if returnList.get(0)=='10': + remoteHX2(object, owner) + return + +def lanceCorporalRewards(owner, window, eventType, returnList): + + if returnList.size()==0: + return + + if returnList.get(0)=='0': + techArmoire(object, owner) + return + + if returnList.get(0)=='1': + techBookcase(object, owner) + return + + if returnList.get(0)=='2': + techCabinet(object, owner) + return + + if returnList.get(0)=='3': + techChest(object, owner) + return + + if returnList.get(0)=='4': + techCouch(object, owner) + return + + if returnList.get(0)=='5': + techChair(object, owner) + return + + if returnList.get(0)=='6': + techCoffeeTable(object, owner) + return + + if returnList.get(0)=='7': + techEndTable(object, owner) + return + + if returnList.get(0)=='8': + dataTerminalSlim(object, owner) + return + + if returnList.get(0)=='9': + dataTerminalStandard(object, owner) + return + + if returnList.get(0)=='10': + dataTerminalBulky(object, owner) + return + + if returnList.get(0)=='11': + dataTerminalWall(object, owner) + return + + if returnList.get(0)=='12': + imperialTable(object, owner) + return + +def corporalRewards(owner, window, eventType, returnList): + + if returnList.size()==0: + return + + if returnList.get(0)=='0': + electrobinoculars(object, owner) + return + + if returnList.get(0)=='1': + advancedElectrobinoculars(object, owner) + return + + if returnList.get(0)=='2': + superiorElectrobinoculars(object, owner) + return + + if returnList.get(0)=='3': + experimentalElectrobinoculars(object, owner) + return + +def sergeantRewards(owner, window, eventType, returnList): + + if returnList.size()==0: + return + + if returnList.get(0)=='0': + imperialBoots(object, owner) + return + + if returnList.get(0)=='1': + imperialJacket(object, owner) + return + + if returnList.get(0)=='2': + imperialPants(object, owner) + return + + if returnList.get(0)=='3': + imperialHat(object, owner) + return + + if returnList.get(0)=='4': + power5Pistol(object, owner) + return + + if returnList.get(0)=='5': + e11Carbine(object, owner) + return + + if returnList.get(0)=='6': + sword(object, owner) + return + + if returnList.get(0)=='7': + rocketLauncher(object, owner) + return + +def masterSergeantRewards(owner, window, eventType, returnList): + + if returnList.size()==0: + return + + if returnList.get(0)=='0': + smallBlockTurret(object, owner) + return + + if returnList.get(0)=='1': + smallDishTurret(object, owner) + return + + if returnList.get(0)=='2': + smallTowerTurret(object, owner) + return + + if returnList.get(0)=='3': + paintingMightEmpire(object, owner) + return + +def sergeantMajorRewards(owner, window, eventType, returnList): + + if returnList.size()==0: + return + + if returnList.get(0)=='0': + mediumBlockTurret(object, owner) + return + + if returnList.get(0)=='1': + mediumTowerTurret(object, owner) + return + + if returnList.get(0)=='2': + hqForwardOutpost(object, owner) + return + + if returnList.get(0)=='3': + hqFieldHospital(object, owner) + return + + if returnList.get(0)=='4': + sfhqForwardOutpost(object, owner) + return + + if returnList.get(0)=='5': + sfhqFieldHospital(object, owner) + return + + if returnList.get(0)=='6': + novaStarMedal(object, owner) + return + +def lieutenantRewards(owner, window, eventType, returnList): + + if returnList.size()==0: + return + + if returnList.get(0)=='0': + largeBlockTurret(object, owner) + return + + if returnList.get(0)=='1': + largeDishTurret(object, owner) + return + + if returnList.get(0)=='2': + largeTowerTurret(object, owner) + return + + if returnList.get(0)=='3': + hqTacticalCenter(object, owner) + return + + if returnList.get(0)=='4': + hqFieldHospital(object, owner) + return + + if returnList.get(0)=='5': + sfhqTacticalCenter(object, owner) + return + + if returnList.get(0)=='6': + sfhqDetachmentHeadquarters(object, owner) + return + + if returnList.get(0)=='7': + factionalCommlink(object, owner) + return + +def captainRewards(owner, window, eventType, returnList): + + if returnList.size()==0: + return + + if returnList.get(0)=='0': + factionalBanner(object, owner) + return + +def majorRewards(owner, window, eventType, returnList): + + if returnList.size()==0: + return + + if returnList.get(0)=='0': + specOpsLeggings(object, owner) + return + + if returnList.get(0)=='1': + specOpsBelt(object, owner) + return + + if returnList.get(0)=='2': + specOpsBoots(object, owner) + return + + if returnList.get(0)=='3': + specOpsDyeKit(object, owner) + return + +def ltColonelRewards(owner, window, eventType, returnList): + + if returnList.size()==0: + return + + if returnList.get(0)=='0': + specOpsLeftBicep(object, owner) + return + + if returnList.get(0)=='1': + specOpsRightBicep(object, owner) + return + + if returnList.get(0)=='2': + specOpsLeftBracer(object, owner) + return + + if returnList.get(0)=='3': + specOpsRightBracer(object, owner) + return + + if returnList.get(0)=='4': + specOpsGloves(object, owner) + return + + if returnList.get(0)=='5': + specOpsHelmet(object, owner) + return + + if returnList.get(0)=='6': + specOpsChestPlate(object, owner) + return + +def colonelRewards(owner, window, eventType, returnList): + + if returnList.size()==0: + return + + if returnList.get(0)=='0': + colonelRing(object, owner) + return + + if returnList.get(0)=='1': + barcSpeeder(object, owner) + return + + +def generalRewards(owner, window, eventType, returnList): + + if returnList.size()==0: + owner.sendSystemMessage('NULL', 0) + return + + if returnList.get(0)=='0': + windusGuile(object, owner) + return + + if returnList.get(0)=='1': + exceptionalCarbine(object, owner) + return + + if returnList.get(0)=='2': + starlightCarbine(object, owner) + return + + if returnList.get(0)=='3': + crimsonNova(object, owner) + return + + if returnList.get(0)=='4': + vortexRifle(object, owner) + return + if returnList.get(0)=='5': + reaperCannon(object, owner) + return + +def r2DroidSchematic(object, owner): + if owner.getCashCredits() >= 165000: + owner.setCashCredits(owner.getCashCredits() - 165000) + core = main.NGECore.getInstance() + r2 = core.objectService.createObject('object/draft_schematic/droid/shared_droid_r2.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(r2) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def r3DroidSchematic(object, owner): + if owner.getCashCredits() >= 180000: + owner.setCashCredits(owner.getCashCredits() - 180000) + core = main.NGECore.getInstance() + r3 = core.objectService.createObject('object/draft_schematic/droid/shared_droid_r3.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(r3) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def r4DroidSchematic(object, owner): + if owner.getCashCredits() >= 195000: + owner.setCashCredits(owner.getCashCredits() - 195000) + core = main.NGECore.getInstance() + r4 = core.objectService.createObject('object/draft_schematic/droid/shared_droid_r4.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(r4) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def r5DroidSchematic(object, owner): + if owner.getCashCredits() >= 210000: + owner.setCashCredits(owner.getCashCredits() - 210000) + core = main.NGECore.getInstance() + r5 = core.objectService.createObject('object/draft_schematic/droid/shared_droid_r5.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(r5) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def dz70DroidSchematic(object, owner): + if owner.getCashCredits() >= 16500: + owner.setCashCredits(owner.getCashCredits() - 16500) + core = main.NGECore.getInstance() + sergical = core.objectService.createObject('object/draft_schematic/droid/shared_droid_dz70.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(sergical) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + + +def techArmoire(object, owner): + if owner.getCashCredits() >= 105000: + owner.setCashCredits(owner.getCashCredits() - 105000) + core = main.NGECore.getInstance() + armoire = core.objectService.createObject('object/tangible/furniture/technical/shared_armoire_s01.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(armoire) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def techBookcase(object, owner): + if owner.getCashCredits() >= 105000: + owner.setCashCredits(owner.getCashCredits() - 105000) + core = main.NGECore.getInstance() + bookcase = core.objectService.createObject('object/tangible/furniture/technical/shared_bookcase_s01.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(bookcase) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def techCabinet(object, owner): + if owner.getCashCredits() >= 105000: + owner.setCashCredits(owner.getCashCredits() - 105000) + core = main.NGECore.getInstance() + cabinet = core.objectService.createObject('object/tangible/furniture/technical/shared_cabinet_s01.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(cabinet) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def techChest(object, owner): + if owner.getCashCredits() >= 75000: + owner.setCashCredits(owner.getCashCredits() - 75000) + core = main.NGECore.getInstance() + chest = core.objectService.createObject('object/tangible/furniture/technical/shared_chest_s01.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(chest) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def techCouch(object, owner): + if owner.getCashCredits() >= 112500: + owner.setCashCredits(owner.getCashCredits() - 112500) + core = main.NGECore.getInstance() + couch = core.objectService.createObject('object/tangible/furniture/technical/shared_couch_s01.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(couch) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def techChair(object, owner): + if owner.getCashCredits() >= 75000: + owner.setCashCredits(owner.getCashCredits() - 75000) + core = main.NGECore.getInstance() + chair = core.objectService.createObject('object/tangible/furniture/technical/shared_bookcase_s01.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(chair) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def techCoffeeTable(object, owner): + if owner.getCashCredits() >= 75000: + owner.setCashCredits(owner.getCashCredits() - 75000) + core = main.NGECore.getInstance() + coffeetable = core.objectService.createObject('object/tangible/furniture/technical/shared_coffee_table_s01.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(coffeetable) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def techEndTable(object, owner): + if owner.getCashCredits() >= 75000: + owner.setCashCredits(owner.getCashCredits() - 75000) + core = main.NGECore.getInstance() + endtable = core.objectService.createObject('object/tangible/furniture/technical/shared_end_table_s01.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(endtable) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def dataTerminalSlim(object, owner): + if owner.getCashCredits() >= 60000: + owner.setCashCredits(owner.getCashCredits() - 60000) + core = main.NGECore.getInstance() + terminal = core.objectService.createObject('object/tangible/furniture/imperial/shared_data_terminal_s1.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(terminal) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def dataTerminalStandard(object, owner): + if owner.getCashCredits() >= 75000: + owner.setCashCredits(owner.getCashCredits() - 75000) + core = main.NGECore.getInstance() + terminal = core.objectService.createObject('object/tangible/furniture/imperial/shared_data_terminal_s2.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(terminal) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def dataTerminalBulky(object, owner): + if owner.getCashCredits() >= 90000: + owner.setCashCredits(owner.getCashCredits() - 90000) + core = main.NGECore.getInstance() + terminal = core.objectService.createObject('object/tangible/furniture/imperial/shared_data_terminal_s3.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(terminal) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def dataTerminalWall(object, owner): + if owner.getCashCredits() >= 105000: + owner.setCashCredits(owner.getCashCredits() - 105000) + core = main.NGECore.getInstance() + terminal = core.objectService.createObject('object/tangible/furniture/imperial/shared_data_terminal_s4.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(terminal) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def imperialTable(object, owner): + if owner.getCashCredits() >= 75000: + owner.setCashCredits(owner.getCashCredits() - 75000) + core = main.NGECore.getInstance() + table = core.objectService.createObject('object/tangible/furniture/imperial/shared_table_s1.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(table) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def electrobinoculars(object, owner): + if owner.getCashCredits() >= 15000: + owner.setCashCredits(owner.getCashCredits() - 15000) + core = main.NGECore.getInstance() + electrobinoculars = core.objectService.createObject('object/tangible/loot/generic_usable/shared_binoculars_s2_generic.iff', owner.getPlanet(), 'item_consumable_detect_hidden_02_01') + inventory = owner.getSlottedObject('inventory') + inventory.add(electrobinoculars) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def advancedElectrobinoculars(object, owner): + if owner.getCashCredits() >= 22500: + owner.setCashCredits(owner.getCashCredits() - 22500) + core = main.NGECore.getInstance() + electrobinoculars = core.objectService.createObject('object/tangible/loot/generic_usable/shared_binoculars_s2_generic.iff', owner.getPlanet(), 'item_consumable_detect_hidden_02_02') + inventory = owner.getSlottedObject('inventory') + inventory.add(electrobinoculars) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def superiorElectrobinoculars(object, owner): + if owner.getCashCredits() >= 30000: + owner.setCashCredits(owner.getCashCredits() - 30000) + core = main.NGECore.getInstance() + electrobinoculars = core.objectService.createObject('object/tangible/loot/generic_usable/shared_binoculars_s2_generic.iff', owner.getPlanet(), 'item_consumable_detect_hidden_02_03') + inventory = owner.getSlottedObject('inventory') + inventory.add(electrobinoculars) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def experimentalElectrobinoculars(object, owner): + if owner.getCashCredits() >= 37500: + owner.setCashCredits(owner.getCashCredits() - 37500) + core = main.NGECore.getInstance() + electrobinoculars = core.objectService.createObject('object/tangible/loot/generic_usable/shared_binoculars_s1_generic.iff', owner.getPlanet(), 'item_consumable_detect_hidden_02_04') + inventory = owner.getSlottedObject('inventory') + inventory.add(electrobinoculars) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def imperialBoots(object, owner): + if owner.getCashCredits() >= 37500: + owner.setCashCredits(owner.getCashCredits() - 37500) + core = main.NGECore.getInstance() + boots = core.objectService.createObject('object/tangible/wearables/boots/shared_boots_s14.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(boots) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def imperialJacket(object, owner): + if owner.getCashCredits() >= 37500: + owner.setCashCredits(owner.getCashCredits() - 37500) + core = main.NGECore.getInstance() + jacket = core.objectService.createObject('object/tangible/wearables/jacket/shared_jacket_s03.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(jacket) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def imperialPants(object, owner): + if owner.getCashCredits() >= 37500: + owner.setCashCredits(owner.getCashCredits() - 37500) + core = main.NGECore.getInstance() + pants = core.objectService.createObject('object/tangible/wearables/pants/shared_pants_s15.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(pants) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def imperialHat(object, owner): + if owner.getCashCredits() >= 37500: + owner.setCashCredits(owner.getCashCredits() - 37500) + core = main.NGECore.getInstance() + hat = core.objectService.createObject('object/tangible/wearables/hat/shared_hat_imp_s01.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(hat) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def power5Pistol(object, owner): + if owner.getCashCredits() >= 112500: + owner.setCashCredits(owner.getCashCredits() - 112500) + core = main.NGECore.getInstance() + pistol = core.objectService.createObject('object/weapon/ranged/pistol/shared_pistol_power5.iff', owner.getPlanet(), 'factional_power_5_pistol') + inventory = owner.getSlottedObject('inventory') + inventory.add(pistol) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def e11Carbine(object, owner): + if owner.getCashCredits() >= 82500: + owner.setCashCredits(owner.getCashCredits() - 82500) + core = main.NGECore.getInstance() + carbine = core.objectService.createObject('object/weapon/ranged/carbine/shared_carbine_e11.iff', owner.getPlanet(), 'factional_e11_carbine') + inventory = owner.getSlottedObject('inventory') + inventory.add(carbine) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def sword(object, owner): + if owner.getCashCredits() >= 30000: + owner.setCashCredits(owner.getCashCredits() - 30000) + core = main.NGECore.getInstance() + sword = core.objectService.createObject('object/weapon/melee/sword/shared_sword_s01.iff', owner.getPlanet(), 'factional_sword') + inventory = owner.getSlottedObject('inventory') + inventory.add(carbine) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def rocketLauncher(object, owner): + if owner.getCashCredits() >= 150000: + owner.setCashCredits(owner.getCashCredits() - 150000) + core = main.NGECore.getInstance() + launcher = core.objectService.createObject('object/weapon/ranged/heavy/shared_heavy_rocket_launcher.iff', owner.getPlanet(), 'factional_rocket_launcher') + inventory = owner.getSlottedObject('inventory') + inventory.add(launcher) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + + + +def smallBlockTurret(object, owner): + if owner.getCashCredits() >= 120000: + owner.setCashCredits(owner.getCashCredits() - 120000) + core = main.NGECore.getInstance() + turret = core.objectService.createObject('object/tangible/deed/faction_perk/turret/shared_block_sm_deed.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(turret) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def smallDishTurret(object, owner): + if owner.getCashCredits() >= 120000: + owner.setCashCredits(owner.getCashCredits() - 120000) + core = main.NGECore.getInstance() + turret = core.objectService.createObject('object/tangible/deed/faction_perk/turret/shared_dish_sm_deed.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(turret) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def smallTowerTurret(object, owner): + if owner.getCashCredits() >= 120000: + owner.setCashCredits(owner.getCashCredits() - 120000) + core = main.NGECore.getInstance() + turret = core.objectService.createObject('object/tangible/deed/faction_perk/turret/shared_tower_sm_deed.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(turret) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def drx55Mine(object, owner): + if owner.getCashCredits() >= 12000: + owner.setCashCredits(owner.getCashCredits() - 12000) + core = main.NGECore.getInstance() + mine = core.objectService.createObject('object/weapon/mine/shared_wp_mine_drx55.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(mine) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def sr88CryoMine(object, owner): + if owner.getCashCredits() >= 12000: + owner.setCashCredits(owner.getCashCredits() - 12000) + core = main.NGECore.getInstance() + mine = core.objectService.createObject('object/weapon/mine/shared_wp_mine_anti_vehicle.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(mine) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def xgMine(object, owner): + if owner.getCashCredits() >= 12000: + owner.setCashCredits(owner.getCashCredits() - 12000) + core = main.NGECore.getInstance() + mine = core.objectService.createObject('object/weapon/mine/shared_wp_mine_xg.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(mine) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def barcSpeeder(object, owner): + if owner.getCashCredits() >= 1050000: + owner.setCashCredits(owner.getCashCredits() - 1050000) + core = main.NGECore.getInstance() + barc = core.objectService.createObject('object/tangible/deed/vehicle_deed/shared_barc_speeder_deed.iff', owner.getPlanet(), 'item_deed_barc_imperial_06_01') + inventory = owner.getSlottedObject('inventory') + inventory.add(barc) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def mediumBlockTurret(object, owner): + if owner.getCashCredits() >= 150000: + owner.setCashCredits(owner.getCashCredits() - 150000) + core = main.NGECore.getInstance() + turret = core.objectService.createObject('object/tangible/deed/faction_perk/turret/shared_block_med_deed.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(turret) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def mediumTowerTurret(object, owner): + if owner.getCashCredits() >= 150000: + owner.setCashCredits(owner.getCashCredits() - 150000) + core = main.NGECore.getInstance() + turret = core.objectService.createObject('object/tangible/deed/faction_perk/turret/shared_tower_med_deed.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(turret) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def hqForwardOutpost(object, owner): + if owner.getCashCredits() >= 525000: + owner.setCashCredits(owner.getCashCredits() - 525000) + core = main.NGECore.getInstance() + hq = core.objectService.createObject('object/tangible/deed/faction_perk/hq/shared_hq_s01.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(hq) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def hqFieldHospital(object, owner): + if owner.getCashCredits() >= 1050000: + owner.setCashCredits(owner.getCashCredits() - 4500000) + core = main.NGECore.getInstance() + hq = core.objectService.createObject('object/tangible/deed/faction_perk/hq/shared_hq_s02.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(hq) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def sfhqForwardOutpost(object, owner): + if owner.getCashCredits() >= 750000: + owner.setCashCredits(owner.getCashCredits() - 750000) + core = main.NGECore.getInstance() + hq = core.objectService.createObject('object/tangible/deed/faction_perk/hq/shared_hq_s01_pvp.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(hq) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def hqTacticalCenter(object, owner): + if owner.getCashCredits() >= 1875000: + owner.setCashCredits(owner.getCashCredits() - 1875000) + core = main.NGECore.getInstance() + hq = core.objectService.createObject('object/tangible/deed/faction_perk/hq/shared_hq_s03.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(hq) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def sfhqTacticalCenter(object, owner): + if owner.getCashCredits() >= 2325000: + owner.setCashCredits(owner.getCashCredits() - 2325000) + core = main.NGECore.getInstance() + hq = core.objectService.createObject('object/tangible/deed/faction_perk/hq/shared_hq_s03_pvp.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(hq) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def sfhqDetachmentHeadquarters(object, owner): + if owner.getCashCredits() >= 4500000: + owner.setCashCredits(owner.getCashCredits() - 4500000) + core = main.NGECore.getInstance() + hq = core.objectService.createObject('object/tangible/deed/faction_perk/hq/shared_hq_s04_pvp.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(hq) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def largeBlockTurret(object, owner): + if owner.getCashCredits() >= 210000: + owner.setCashCredits(owner.getCashCredits() - 210000) + core = main.NGECore.getInstance() + turret = core.objectService.createObject('object/tangible/deed/faction_perk/turret/shared_block_lg_deed.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(turret) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def largeDishTurret(object, owner): + if owner.getCashCredits() >= 210000: + owner.setCashCredits(owner.getCashCredits() - 210000) + core = main.NGECore.getInstance() + turret = core.objectService.createObject('object/tangible/deed/faction_perk/turret/shared_dish_lg_deed.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(turret) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def largeTowerTurret(object, owner): + if owner.getCashCredits() >= 210000: + owner.setCashCredits(owner.getCashCredits() - 210000) + core = main.NGECore.getInstance() + turret = core.objectService.createObject('object/tangible/deed/faction_perk/turret/shared_tower_lg_deed.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(turret) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def specOpsLeggings(object, owner): + if owner.getCashCredits() >= 46636: + owner.setCashCredits(owner.getCashCredits() - 46636) + core = main.NGECore.getInstance() + leggings = core.objectService.createObject('object/tangible/wearables/armor/stormtrooper/shared_armor_stormtrooper_leggings.iff', owner.getPlanet(), 'armor_pvp_spec_ops_imperial_black_leggings_05_01') + inventory = owner.getSlottedObject('inventory') + inventory.add(leggings) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def specOpsBelt(object, owner): + if owner.getCashCredits() >= 38863: + owner.setCashCredits(owner.getCashCredits() - 38863) + core = main.NGECore.getInstance() + belt = core.objectService.createObject('object/tangible/wearables/armor/stormtrooper/shared_armor_stormtrooper_utility_belt.iff', owner.getPlanet(), 'armor_pvp_spec_ops_imperial_black_belt_05_01') + inventory = owner.getSlottedObject('inventory') + inventory.add(belt) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def specOpsBoots(object, owner): + if owner.getCashCredits() >= 41454: + owner.setCashCredits(owner.getCashCredits() - 41454) + core = main.NGECore.getInstance() + boots = core.objectService.createObject('object/tangible/wearables/armor/stormtrooper/shared_armor_stormtrooper_boots.iff', owner.getPlanet(), 'armor_pvp_spec_ops_imperial_black_boots_05_01') + inventory = owner.getSlottedObject('inventory') + inventory.add(boots) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def specOpsLeftBicep(object, owner): + if owner.getCashCredits() >= 120000: + owner.setCashCredits(owner.getCashCredits() - 120000) + core = main.NGECore.getInstance() + bicepl = core.objectService.createObject('object/tangible/wearables/armor/stormtrooper/shared_armor_stormtrooper_bicep_l.iff', owner.getPlanet(), 'armor_pvp_spec_ops_imperial_black_bicep_l_05_01') + inventory = owner.getSlottedObject('inventory') + inventory.add(bicepl) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def specOpsRightBicep(object, owner): + if owner.getCashCredits() >= 120000: + owner.setCashCredits(owner.getCashCredits() - 120000) + core = main.NGECore.getInstance() + bicepr = core.objectService.createObject('object/tangible/wearables/armor/stormtrooper/shared_armor_stormtrooper_bicep_r.iff', owner.getPlanet(), 'armor_pvp_spec_ops_imperial_black_bicep_r_05_01') + inventory = owner.getSlottedObject('inventory') + inventory.add(bicepr) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def specOpsLeftBracer(object, owner): + if owner.getCashCredits() >= 120000: + owner.setCashCredits(owner.getCashCredits() - 120000) + core = main.NGECore.getInstance() + bracerl = core.objectService.createObject('object/tangible/wearables/armor/stormtrooper/shared_armor_stormtrooper_bracer_l.iff', owner.getPlanet(), 'armor_pvp_spec_ops_imperial_black_bracer_l_05_01') + inventory = owner.getSlottedObject('inventory') + inventory.add(bracerl) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def specOpsRightBracer(object, owner): + if owner.getCashCredits() >= 120000: + owner.setCashCredits(owner.getCashCredits() - 120000) + core = main.NGECore.getInstance() + bracerr = core.objectService.createObject('object/tangible/wearables/armor/stormtrooper/shared_armor_stormtrooper_bracer_r.iff', owner.getPlanet(), 'armor_pvp_spec_ops_imperial_black_bracer_r_05_01') + inventory = owner.getSlottedObject('inventory') + inventory.add(bracerr) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def specOpsGloves(object, owner): + if owner.getCashCredits() >= 120000: + owner.setCashCredits(owner.getCashCredits() - 120000) + core = main.NGECore.getInstance() + gloves = core.objectService.createObject('object/tangible/wearables/armor/stormtrooper/shared_armor_stormtrooper_gloves.iff', owner.getPlanet(), 'armor_pvp_spec_ops_imperial_black_gloves_05_01') + inventory = owner.getSlottedObject('inventory') + inventory.add(gloves) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def specOpsHelmet(object, owner): + if owner.getCashCredits() >= 150000: + owner.setCashCredits(owner.getCashCredits() - 150000) + core = main.NGECore.getInstance() + helmet = core.objectService.createObject('object/tangible/wearables/armor/stormtrooper/shared_armor_stormtrooper_helmet.iff', owner.getPlanet(), 'armor_pvp_spec_ops_imperial_black_helmet_05_01') + inventory = owner.getSlottedObject('inventory') + inventory.add(helmet) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def specOpsChestPlate(object, owner): + if owner.getCashCredits() >= 225000: + owner.setCashCredits(owner.getCashCredits() - 225000) + core = main.NGECore.getInstance() + chest = core.objectService.createObject('object/tangible/wearables/armor/stormtrooper/shared_armor_stormtrooper_pvp_officer_chest_plate.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(chest) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def specOpsDyeKit(object, owner): + if owner.getCashCredits() >= 12954: + owner.setCashCredits(owner.getCashCredits() - 12954) + core = main.NGECore.getInstance() + dyekit = core.objectService.createObject('object/tangible/item/shared_pvp_spec_ops_imperial_dye_kit.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(dyekit) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def paintingMightEmpire(object, owner): + if owner.getCashCredits() >= 375000: + owner.setCashCredits(owner.getCashCredits() - 375000) + core = main.NGECore.getInstance() + painting = core.objectService.createObject('object/tangible/painting/shared_painting_pvp_reward_imperial.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(painting) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def novaStarMedal(object, owner): + if owner.getCashCredits() >= 80000: + owner.setCashCredits(owner.getCashCredits() - 80000) + core = main.NGECore.getInstance() + necklace = core.objectService.createObject('object/tangible/wearables/necklace/shared_necklace_deepspace_empire_f.iff', owner.getPlanet(), 'item_pvp_imperial_sergeant_major_medal_03_01') + inventory = owner.getSlottedObject('inventory') + inventory.add(necklace) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def factionalCommlink(object, owner): + if owner.getCashCredits() >= 200000: + owner.setCashCredits(owner.getCashCredits() - 200000) + core = main.NGECore.getInstance() + commlink = core.objectService.createObject('object/tangible/gcw/pvp_rank_rewards/shared_comm_link.iff', owner.getPlanet(), 'item_pvp_lieutenant_comm_link_imperial_reward_04_01') + inventory = owner.getSlottedObject('inventory') + inventory.add(commlink) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def factionalBanner(object, owner): + if owner.getCashCredits() >= 80000: + owner.setCashCredits(owner.getCashCredits() - 80000) + core = main.NGECore.getInstance() + banner = core.objectService.createObject('object/tangible/gcw/pvp_rank_rewards/shared_pvp_imperial_battle_banner.iff', owner.getPlanet()) + inventory = owner.getSlottedObject('inventory') + inventory.add(banner) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def colonelRing(object, owner): + if owner.getCashCredits() >= 142500: + owner.setCashCredits(owner.getCashCredits() - 142500) + core = main.NGECore.getInstance() + ring = core.objectService.createObject('object/tangible/wearables/ring/shared_ring_s03.iff', owner.getPlanet(), 'item_pvp_imperial_colonel_signet_ring_05_01') + inventory = owner.getSlottedObject('inventory') + inventory.add(ring) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + + + +def windusGuile(object, owner): + if owner.getCashCredits() >= 2000000: + owner.setCashCredits(owner.getCashCredits() - 2000000) + core = main.NGECore.getInstance() + windu = core.objectService.createObject('object/tangible/component/weapon/lightsaber/shared_lightsaber_module_force_crystal.iff', owner.getPlanet(), 'item_color_crystal_02_20') + inventory = owner.getSlottedObject('inventory') + inventory.add(windu) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def exceptionalCarbine(object, owner): + if owner.getCashCredits() >= 200000: + owner.setCashCredits(owner.getCashCredits() - 200000) + core = main.NGECore.getInstance() + carbine = core.objectService.createObject('object/weapon/ranged/carbine/shared_carbine_e11.iff', owner.getPlanet(), 'weapon_carbine_pvp_general_reward_05_01') + inventory = owner.getSlottedObject('inventory') + inventory.add(carbine) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def starlightCarbine(object, owner): + if owner.getCashCredits() >= 200000: + owner.setCashCredits(owner.getCashCredits() - 200000) + core = main.NGECore.getInstance() + carbine = core.objectService.createObject('object/weapon/ranged/carbine/shared_carbine_pvp.iff', owner.getPlanet()) + carbine.setStringAttribute('faction_restriction', 'Imperial') + inventory = owner.getSlottedObject('inventory') + inventory.add(carbine) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def crimsonNova(object, owner): + if owner.getCashCredits() >= 200000: + owner.setCashCredits(owner.getCashCredits() - 200000) + core = main.NGECore.getInstance() + nova = core.objectService.createObject('object/weapon/ranged/pistol/shared_pistol_pvp.iff', owner.getPlanet()) + nova.setStringAttribute('faction_restriction', 'Imperial') + inventory = owner.getSlottedObject('inventory') + inventory.add(nova) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def vortexRifle(object, owner): + if owner.getCashCredits() >= 200000: + owner.setCashCredits(owner.getCashCredits() - 200000) + core = main.NGECore.getInstance() + rifle = core.objectService.createObject('object/weapon/ranged/rifle/shared_rifle_pvp.iff', owner.getPlanet()) + rifle.setStringAttribute('faction_restriction', 'Imperial') + inventory = owner.getSlottedObject('inventory') + inventory.add(rifle) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return + +def reaperCannon(object, owner): + if owner.getCashCredits() >= 200000: + owner.setCashCredits(owner.getCashCredits() - 200000) + core = main.NGECore.getInstance() + cannon = core.objectService.createObject('object/weapon/ranged/heavy/shared_heavy_pvp.iff', owner.getPlanet()) + cannon.setStringAttribute('faction_restriction', 'Imperial') + inventory = owner.getSlottedObject('inventory') + inventory.add(cannon) + elif owner.sendSystemMessage('You do not have enough credits to purchase this item.', 0): + return \ No newline at end of file diff --git a/scripts/object/tangible/deed/vehicle_deed/item_deed_barc_imperial_06_01.py b/scripts/object/tangible/deed/vehicle_deed/item_deed_barc_imperial_06_01.py new file mode 100644 index 00000000..a7d3432b --- /dev/null +++ b/scripts/object/tangible/deed/vehicle_deed/item_deed_barc_imperial_06_01.py @@ -0,0 +1,15 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'deeds/vehicleDeed') + object.setStfFilename('static_item_n') + object.setStfName('item_deed_barc_imperial_06_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_deed_barc_imperial_06_01') + object.setIntAttribute('no_trade', 1) + return + +def use(core, actor, object): + core.mountService.generateVehicle(actor, object, 'object/mobile/vehicle/shared_barc_speeder_imperial.iff', 'object/intangible/vehicle/shared_barc_speeder_imperial_pcd.iff') + return + \ No newline at end of file diff --git a/scripts/object/tangible/gcw/pvp_rank_rewards/item_pvp_lieutenant_comm_link_imperial_reward_04_01.py b/scripts/object/tangible/gcw/pvp_rank_rewards/item_pvp_lieutenant_comm_link_imperial_reward_04_01.py new file mode 100644 index 00000000..271eeb94 --- /dev/null +++ b/scripts/object/tangible/gcw/pvp_rank_rewards/item_pvp_lieutenant_comm_link_imperial_reward_04_01.py @@ -0,0 +1,9 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_pvp_lieutenant_comm_link_imperial_reward_04_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_pvp_lieutenant_comm_link_imperial_reward_04_01') + + return \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_pvp_reward_imperial.py b/scripts/object/tangible/painting/painting_pvp_reward_imperial.py index 1914d9c0..88c32389 100644 --- a/scripts/object/tangible/painting/painting_pvp_reward_imperial.py +++ b/scripts/object/tangible/painting/painting_pvp_reward_imperial.py @@ -1,6 +1,10 @@ import sys def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_pvp_imperial_painting_03_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_pvp_imperial_painting_03_01') return - #No name (Palpatine and Star Destroyers) \ No newline at end of file + #Might of the Empire \ No newline at end of file diff --git a/scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_belt_05_01.py b/scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_belt_05_01.py new file mode 100644 index 00000000..a3961224 --- /dev/null +++ b/scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_belt_05_01.py @@ -0,0 +1,18 @@ +import sys + +def setup(core, object): + object.setCustomizationVariable('/private/index_color_1', 15); + object.setCustomizationVariable('/private/index_color_2', 15); + object.setStfFilename('static_item_n') + object.setStfName('armor_pvp_spec_ops_imperial_black_belt_05_01') + object.setDetailFilename('static_item_d') + object.setDetailName('armor_pvp_spec_ops_imperial_black_belt_05_01') + object.setStringAttribute('faction_restriction', 'Imperial') + object.setStringAttribute('armor_category', '@obj_attr_n:armor_assault') + object.setIntAttribute('cat_armor_standard_protection.kinetic', 6608) + object.setIntAttribute('cat_armor_standard_protection.energy', 4608) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_heat', 5608) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_cold', 5608) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_acid', 5608) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_electricity', 5608) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_bicep_l_05_01.py b/scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_bicep_l_05_01.py new file mode 100644 index 00000000..35457e52 --- /dev/null +++ b/scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_bicep_l_05_01.py @@ -0,0 +1,18 @@ +import sys + +def setup(core, object): + object.setCustomizationVariable('/private/index_color_1', 15); + object.setCustomizationVariable('/private/index_color_2', 15); + object.setStfFilename('static_item_n') + object.setStfName('armor_pvp_spec_ops_imperial_black_bicep_l_05_01') + object.setDetailFilename('static_item_d') + object.setDetailName('armor_pvp_spec_ops_imperial_black_bicep_l_05_01') + object.setStringAttribute('faction_restriction', 'Imperial') + object.setStringAttribute('armor_category', '@obj_attr_n:armor_assault') + object.setIntAttribute('cat_armor_standard_protection.kinetic', 6608) + object.setIntAttribute('cat_armor_standard_protection.energy', 4608) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_heat', 5608) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_cold', 5608) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_acid', 5608) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_electricity', 5608) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_bicep_r_05_01.py b/scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_bicep_r_05_01.py new file mode 100644 index 00000000..5e4090ff --- /dev/null +++ b/scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_bicep_r_05_01.py @@ -0,0 +1,18 @@ +import sys + +def setup(core, object): + object.setCustomizationVariable('/private/index_color_1', 15); + object.setCustomizationVariable('/private/index_color_2', 15); + object.setStfFilename('static_item_n') + object.setStfName('armor_pvp_spec_ops_imperial_black_bicep_r_05_01') + object.setDetailFilename('static_item_d') + object.setDetailName('armor_pvp_spec_ops_imperial_black_bicep_r_05_01') + object.setStringAttribute('faction_restriction', 'Imperial') + object.setStringAttribute('armor_category', '@obj_attr_n:armor_assault') + object.setIntAttribute('cat_armor_standard_protection.kinetic', 6608) + object.setIntAttribute('cat_armor_standard_protection.energy', 4608) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_heat', 5608) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_cold', 5608) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_acid', 5608) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_electricity', 5608) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_boots_05_01.py b/scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_boots_05_01.py new file mode 100644 index 00000000..71062b0f --- /dev/null +++ b/scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_boots_05_01.py @@ -0,0 +1,18 @@ +import sys + +def setup(core, object): + object.setCustomizationVariable('/private/index_color_1', 15); + object.setCustomizationVariable('/private/index_color_2', 15); + object.setStfFilename('static_item_n') + object.setStfName('armor_pvp_spec_ops_imperial_black_boots_05_01') + object.setDetailFilename('static_item_d') + object.setDetailName('armor_pvp_spec_ops_imperial_black_boots_05_01') + object.setStringAttribute('faction_restriction', 'Imperial') + object.setStringAttribute('armor_category', '@obj_attr_n:armor_assault') + object.setIntAttribute('cat_armor_standard_protection.kinetic', 6608) + object.setIntAttribute('cat_armor_standard_protection.energy', 4608) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_heat', 5608) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_cold', 5608) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_acid', 5608) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_electricity', 5608) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_bracer_l_05_01.py b/scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_bracer_l_05_01.py new file mode 100644 index 00000000..b961e244 --- /dev/null +++ b/scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_bracer_l_05_01.py @@ -0,0 +1,18 @@ +import sys + +def setup(core, object): + object.setCustomizationVariable('/private/index_color_1', 15); + object.setCustomizationVariable('/private/index_color_2', 15); + object.setStfFilename('static_item_n') + object.setStfName('armor_pvp_spec_ops_imperial_black_bracer_l_05_01') + object.setDetailFilename('static_item_d') + object.setDetailName('armor_pvp_spec_ops_imperial_black_bracer_l_05_01') + object.setStringAttribute('faction_restriction', 'Imperial') + object.setStringAttribute('armor_category', '@obj_attr_n:armor_assault') + object.setIntAttribute('cat_armor_standard_protection.kinetic', 6608) + object.setIntAttribute('cat_armor_standard_protection.energy', 4608) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_heat', 5608) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_cold', 5608) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_acid', 5608) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_electricity', 5608) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_bracer_r_05_01.py b/scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_bracer_r_05_01.py new file mode 100644 index 00000000..85b15e13 --- /dev/null +++ b/scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_bracer_r_05_01.py @@ -0,0 +1,18 @@ +import sys + +def setup(core, object): + object.setCustomizationVariable('/private/index_color_1', 15); + object.setCustomizationVariable('/private/index_color_2', 15); + object.setStfFilename('static_item_n') + object.setStfName('armor_pvp_spec_ops_imperial_black_bracer_r_05_01') + object.setDetailFilename('static_item_d') + object.setDetailName('armor_pvp_spec_ops_imperial_black_bracer_r_05_01') + object.setStringAttribute('faction_restriction', 'Imperial') + object.setStringAttribute('armor_category', '@obj_attr_n:armor_assault') + object.setIntAttribute('cat_armor_standard_protection.kinetic', 6608) + object.setIntAttribute('cat_armor_standard_protection.energy', 4608) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_heat', 5608) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_cold', 5608) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_acid', 5608) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_electricity', 5608) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_gloves_05_01.py b/scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_gloves_05_01.py new file mode 100644 index 00000000..681fe707 --- /dev/null +++ b/scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_gloves_05_01.py @@ -0,0 +1,18 @@ +import sys + +def setup(core, object): + object.setCustomizationVariable('/private/index_color_1', 15); + object.setCustomizationVariable('/private/index_color_2', 15); + object.setStfFilename('static_item_n') + object.setStfName('armor_pvp_spec_ops_imperial_black_gloves_05_01') + object.setDetailFilename('static_item_d') + object.setDetailName('armor_pvp_spec_ops_imperial_black_gloves_05_01') + object.setStringAttribute('faction_restriction', 'Imperial') + object.setStringAttribute('armor_category', '@obj_attr_n:armor_assault') + object.setIntAttribute('cat_armor_standard_protection.kinetic', 6608) + object.setIntAttribute('cat_armor_standard_protection.energy', 4608) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_heat', 5608) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_cold', 5608) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_acid', 5608) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_electricity', 5608) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_helmet_05_01.py b/scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_helmet_05_01.py new file mode 100644 index 00000000..5566f5f5 --- /dev/null +++ b/scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_helmet_05_01.py @@ -0,0 +1,18 @@ +import sys + +def setup(core, object): + object.setCustomizationVariable('/private/index_color_1', 15); + object.setCustomizationVariable('/private/index_color_2', 15); + object.setStfFilename('static_item_n') + object.setStfName('armor_pvp_spec_ops_imperial_black_helmet_05_01') + object.setDetailFilename('static_item_d') + object.setDetailName('armor_pvp_spec_ops_imperial_black_helmet_05_01') + object.setStringAttribute('faction_restriction', 'Imperial') + object.setStringAttribute('armor_category', '@obj_attr_n:armor_assault') + object.setIntAttribute('cat_armor_standard_protection.kinetic', 6608) + object.setIntAttribute('cat_armor_standard_protection.energy', 4608) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_heat', 5608) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_cold', 5608) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_acid', 5608) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_electricity', 5608) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_leggings_05_01.py b/scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_leggings_05_01.py new file mode 100644 index 00000000..21cb662b --- /dev/null +++ b/scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_leggings_05_01.py @@ -0,0 +1,18 @@ +import sys + +def setup(core, object): + object.setCustomizationVariable('/private/index_color_1', 15); + object.setCustomizationVariable('/private/index_color_2', 15); + object.setStfFilename('static_item_n') + object.setStfName('armor_pvp_spec_ops_imperial_black_leggings_05_01') + object.setDetailFilename('static_item_d') + object.setDetailName('armor_pvp_spec_ops_imperial_black_leggings_05_01') + object.setStringAttribute('faction_restriction', 'Imperial') + object.setStringAttribute('armor_category', '@obj_attr_n:armor_assault') + object.setIntAttribute('cat_armor_standard_protection.kinetic', 6608) + object.setIntAttribute('cat_armor_standard_protection.energy', 4608) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_heat', 5608) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_cold', 5608) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_acid', 5608) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_electricity', 5608) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/armor/stormtrooper/armor_stormtrooper_pvp_officer_chest_plate.py b/scripts/object/tangible/wearables/armor/stormtrooper/armor_stormtrooper_pvp_officer_chest_plate.py index ccad8904..25a4d368 100644 --- a/scripts/object/tangible/wearables/armor/stormtrooper/armor_stormtrooper_pvp_officer_chest_plate.py +++ b/scripts/object/tangible/wearables/armor/stormtrooper/armor_stormtrooper_pvp_officer_chest_plate.py @@ -1,4 +1,18 @@ import sys def setup(core, object): + object.setCustomizationVariable('/private/index_color_1', 15); + object.setCustomizationVariable('/private/index_color_2', 15); + object.setStfFilename('static_item_n') + object.setStfName('armor_pvp_spec_ops_imperial_black_chest_plate_orange_pad_05_01') + object.setDetailFilename('static_item_d') + object.setDetailName('armor_pvp_spec_ops_imperial_black_chest_plate_orange_pad_05_01') + object.setStringAttribute('faction_restriction', 'Imperial') + object.setStringAttribute('armor_category', '@obj_attr_n:armor_assault') + object.setIntAttribute('cat_armor_standard_protection.kinetic', 6608) + object.setIntAttribute('cat_armor_standard_protection.energy', 4608) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_heat', 5608) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_cold', 5608) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_acid', 5608) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_electricity', 5608) return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/item_pvp_imperial_sergeant_major_medal_03_01.py b/scripts/object/tangible/wearables/necklace/item_pvp_imperial_sergeant_major_medal_03_01.py index b99f3c9c..44565fc0 100644 --- a/scripts/object/tangible/wearables/necklace/item_pvp_imperial_sergeant_major_medal_03_01.py +++ b/scripts/object/tangible/wearables/necklace/item_pvp_imperial_sergeant_major_medal_03_01.py @@ -1,3 +1,6 @@ +import sys + + def setup(core, object): object.setStfFilename('static_item_n') object.setStfName('item_pvp_imperial_sergeant_major_medal_03_01') diff --git a/scripts/object/weapon/melee/sword/factional_sword.py b/scripts/object/weapon/melee/sword/factional_sword.py new file mode 100644 index 00000000..1420b4c8 --- /dev/null +++ b/scripts/object/weapon/melee/sword/factional_sword.py @@ -0,0 +1,11 @@ +import sys +from resources.datatables import WeaponType + +def setup(core, object): + object.setAttackSpeed(1.0) + object.setMaxRange(5) + object.setDamageType('kinetic') + object.setMinDamage(300) + object.setMaxDamage(400) + object.setWeaponType(WeaponType.ONEHANDEDMELEE) + return \ No newline at end of file diff --git a/scripts/object/weapon/ranged/carbine/factional_e11_carbine.py b/scripts/object/weapon/ranged/carbine/factional_e11_carbine.py new file mode 100644 index 00000000..833ae5dd --- /dev/null +++ b/scripts/object/weapon/ranged/carbine/factional_e11_carbine.py @@ -0,0 +1,11 @@ +import sys +from resources.datatables import WeaponType + +def setup(core, object): + object.setAttackSpeed(0.6) + object.setMaxRange(50) + object.setDamageType('energy') + object.setMinDamage(350) + object.setMaxDamage(700) + object.setWeaponType(WeaponType.CARBINE) + return \ No newline at end of file diff --git a/scripts/object/weapon/ranged/carbine/weapon_carbine_pvp_general_reward_05_01.py b/scripts/object/weapon/ranged/carbine/weapon_carbine_pvp_general_reward_05_01.py new file mode 100644 index 00000000..e2abfc0f --- /dev/null +++ b/scripts/object/weapon/ranged/carbine/weapon_carbine_pvp_general_reward_05_01.py @@ -0,0 +1,13 @@ +import sys +from resources.datatables import WeaponType + +def setup(core, object): + object.setStringAttribute('required_skill', 'None') + object.setStringAttribute('faction_restriction', 'Imperial') + object.setAttackSpeed(0.6); + object.setMaxRange(50); + object.setDamageType("energy"); + object.setMinDamage(310); + object.setMaxDamage(550); + object.setWeaponType(WeaponType.CARBINE); + return \ No newline at end of file diff --git a/scripts/object/weapon/ranged/heavy/factional_rocket_launcher.py b/scripts/object/weapon/ranged/heavy/factional_rocket_launcher.py new file mode 100644 index 00000000..e6e66dec --- /dev/null +++ b/scripts/object/weapon/ranged/heavy/factional_rocket_launcher.py @@ -0,0 +1,13 @@ +import sys +from resources.datatables import WeaponType + +def setup(core, object): + object.setAttackSpeed(1) + object.setMaxRange(64) + object.setDamageType('energy') + object.setMinDamage(400) + object.setMaxDamage(775) + object.setWeaponType(WeaponType.HEAVYWEAPON) + object.setStringAttribute('wpn_elemental_type', 'heat') + object.setStringAttribute('wpn_elemental_value', '70') + return \ No newline at end of file diff --git a/scripts/object/weapon/ranged/pistol/factional_power_5_pistol.py b/scripts/object/weapon/ranged/pistol/factional_power_5_pistol.py new file mode 100644 index 00000000..2fd8f2f1 --- /dev/null +++ b/scripts/object/weapon/ranged/pistol/factional_power_5_pistol.py @@ -0,0 +1,11 @@ +import sys +from resources.datatables import WeaponType + +def setup(core, object): + object.setAttackSpeed(0.4) + object.setMaxRange(35) + object.setDamageType('energy') + object.setMinDamage(80) + object.setMaxDamage(130) + object.setWeaponType(WeaponType.PISTOL) + return \ No newline at end of file From 79944e09a950cb1df6184b491cccb2129385e521 Mon Sep 17 00:00:00 2001 From: Zing Date: Mon, 30 Jun 2014 23:09:44 -0700 Subject: [PATCH 81/92] Fixed Tirtiary color on Imperial Spec Ops Armor. Added Tirtiary option to recolorable radial. --- .../armor_pvp_spec_ops_imperial_black_belt_05_01.py | 1 + .../armor_pvp_spec_ops_imperial_black_bicep_l_05_01.py | 1 + .../armor_pvp_spec_ops_imperial_black_bicep_r_05_01.py | 1 + .../armor_pvp_spec_ops_imperial_black_boots_05_01.py | 1 + .../armor_pvp_spec_ops_imperial_black_bracer_l_05_01.py | 1 + .../armor_pvp_spec_ops_imperial_black_bracer_r_05_01.py | 1 + .../armor_pvp_spec_ops_imperial_black_gloves_05_01.py | 1 + .../armor_pvp_spec_ops_imperial_black_helmet_05_01.py | 1 + .../armor_pvp_spec_ops_imperial_black_leggings_05_01.py | 1 + scripts/radial/item/recolorable.py | 3 +++ 10 files changed, 12 insertions(+) diff --git a/scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_belt_05_01.py b/scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_belt_05_01.py index a3961224..2fe0f47a 100644 --- a/scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_belt_05_01.py +++ b/scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_belt_05_01.py @@ -3,6 +3,7 @@ import sys def setup(core, object): object.setCustomizationVariable('/private/index_color_1', 15); object.setCustomizationVariable('/private/index_color_2', 15); + object.setCustomizationVariable('/private/index_color_3', 2); object.setStfFilename('static_item_n') object.setStfName('armor_pvp_spec_ops_imperial_black_belt_05_01') object.setDetailFilename('static_item_d') diff --git a/scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_bicep_l_05_01.py b/scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_bicep_l_05_01.py index 35457e52..0fc14ba5 100644 --- a/scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_bicep_l_05_01.py +++ b/scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_bicep_l_05_01.py @@ -3,6 +3,7 @@ import sys def setup(core, object): object.setCustomizationVariable('/private/index_color_1', 15); object.setCustomizationVariable('/private/index_color_2', 15); + object.setCustomizationVariable('/private/index_color_3', 2); object.setStfFilename('static_item_n') object.setStfName('armor_pvp_spec_ops_imperial_black_bicep_l_05_01') object.setDetailFilename('static_item_d') diff --git a/scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_bicep_r_05_01.py b/scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_bicep_r_05_01.py index 5e4090ff..925e7386 100644 --- a/scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_bicep_r_05_01.py +++ b/scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_bicep_r_05_01.py @@ -3,6 +3,7 @@ import sys def setup(core, object): object.setCustomizationVariable('/private/index_color_1', 15); object.setCustomizationVariable('/private/index_color_2', 15); + object.setCustomizationVariable('/private/index_color_3', 2); object.setStfFilename('static_item_n') object.setStfName('armor_pvp_spec_ops_imperial_black_bicep_r_05_01') object.setDetailFilename('static_item_d') diff --git a/scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_boots_05_01.py b/scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_boots_05_01.py index 71062b0f..4facba04 100644 --- a/scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_boots_05_01.py +++ b/scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_boots_05_01.py @@ -3,6 +3,7 @@ import sys def setup(core, object): object.setCustomizationVariable('/private/index_color_1', 15); object.setCustomizationVariable('/private/index_color_2', 15); + object.setCustomizationVariable('/private/index_color_3', 2); object.setStfFilename('static_item_n') object.setStfName('armor_pvp_spec_ops_imperial_black_boots_05_01') object.setDetailFilename('static_item_d') diff --git a/scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_bracer_l_05_01.py b/scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_bracer_l_05_01.py index b961e244..e0e28e01 100644 --- a/scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_bracer_l_05_01.py +++ b/scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_bracer_l_05_01.py @@ -3,6 +3,7 @@ import sys def setup(core, object): object.setCustomizationVariable('/private/index_color_1', 15); object.setCustomizationVariable('/private/index_color_2', 15); + object.setCustomizationVariable('/private/index_color_3', 2); object.setStfFilename('static_item_n') object.setStfName('armor_pvp_spec_ops_imperial_black_bracer_l_05_01') object.setDetailFilename('static_item_d') diff --git a/scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_bracer_r_05_01.py b/scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_bracer_r_05_01.py index 85b15e13..9b4cca31 100644 --- a/scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_bracer_r_05_01.py +++ b/scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_bracer_r_05_01.py @@ -3,6 +3,7 @@ import sys def setup(core, object): object.setCustomizationVariable('/private/index_color_1', 15); object.setCustomizationVariable('/private/index_color_2', 15); + object.setCustomizationVariable('/private/index_color_3', 2); object.setStfFilename('static_item_n') object.setStfName('armor_pvp_spec_ops_imperial_black_bracer_r_05_01') object.setDetailFilename('static_item_d') diff --git a/scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_gloves_05_01.py b/scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_gloves_05_01.py index 681fe707..6a09e147 100644 --- a/scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_gloves_05_01.py +++ b/scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_gloves_05_01.py @@ -3,6 +3,7 @@ import sys def setup(core, object): object.setCustomizationVariable('/private/index_color_1', 15); object.setCustomizationVariable('/private/index_color_2', 15); + object.setCustomizationVariable('/private/index_color_3', 2); object.setStfFilename('static_item_n') object.setStfName('armor_pvp_spec_ops_imperial_black_gloves_05_01') object.setDetailFilename('static_item_d') diff --git a/scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_helmet_05_01.py b/scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_helmet_05_01.py index 5566f5f5..50505d89 100644 --- a/scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_helmet_05_01.py +++ b/scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_helmet_05_01.py @@ -3,6 +3,7 @@ import sys def setup(core, object): object.setCustomizationVariable('/private/index_color_1', 15); object.setCustomizationVariable('/private/index_color_2', 15); + object.setCustomizationVariable('/private/index_color_3', 2); object.setStfFilename('static_item_n') object.setStfName('armor_pvp_spec_ops_imperial_black_helmet_05_01') object.setDetailFilename('static_item_d') diff --git a/scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_leggings_05_01.py b/scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_leggings_05_01.py index 21cb662b..7dd77943 100644 --- a/scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_leggings_05_01.py +++ b/scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_leggings_05_01.py @@ -3,6 +3,7 @@ import sys def setup(core, object): object.setCustomizationVariable('/private/index_color_1', 15); object.setCustomizationVariable('/private/index_color_2', 15); + object.setCustomizationVariable('/private/index_color_3', 2); object.setStfFilename('static_item_n') object.setStfName('armor_pvp_spec_ops_imperial_black_leggings_05_01') object.setDetailFilename('static_item_d') diff --git a/scripts/radial/item/recolorable.py b/scripts/radial/item/recolorable.py index bd13e64b..0690521e 100644 --- a/scripts/radial/item/recolorable.py +++ b/scripts/radial/item/recolorable.py @@ -4,6 +4,7 @@ import sys def createRadial(core, owner, target, radials): radials.add(RadialOptions(0, 98, 0, 'Modify primary color')) radials.add(RadialOptions(0, 99, 0, 'Modify secondary color')) + radials.add(RadialOptions(0, 100, 0, 'Modify tirtiary color')) return def handleSelection(core, owner, target, option): @@ -11,5 +12,7 @@ def handleSelection(core, owner, target, option): core.suiService.sendColorPicker(owner, target, '/private/index_color_1') if option == 99 and target: core.suiService.sendColorPicker(owner, target, '/private/index_color_2') + if option == 100 and target: + core.suiService.sendColorPicker(owner, target, '/private/index_color_3') return \ No newline at end of file From 777db5d04464488aad1ca4a398adc8ee6ac68382 Mon Sep 17 00:00:00 2001 From: Ziggeh Date: Tue, 1 Jul 2014 20:43:29 +0200 Subject: [PATCH 82/92] Added a method to get items in inventory by STF name --- src/resources/objects/creature/CreatureObject.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/resources/objects/creature/CreatureObject.java b/src/resources/objects/creature/CreatureObject.java index e65109d7..ea15438d 100644 --- a/src/resources/objects/creature/CreatureObject.java +++ b/src/resources/objects/creature/CreatureObject.java @@ -1821,6 +1821,15 @@ public class CreatureObject extends TangibleObject implements Serializable { getSlottedObject("inventory").viewChildren(this, true, true, (obj) -> adder.increment()); return adder.intValue(); } + + public Vector getItemsInInventoryByStfName(CreatureObject creature, String stfName) { + Vector itemList = new Vector(); + SWGObject inventory = creature.getSlottedObject("inventory"); + + inventory.viewChildren(creature, false, false, (item) -> { if (item.getStfName() == stfName) { itemList.add(item); } }); + + return itemList; + } public ObjectMessageBuilder getMessageBuilder() { return messageBuilder; From a6280631943a4161c13d4518ab6845bfc29e7140 Mon Sep 17 00:00:00 2001 From: Waverunner Date: Tue, 1 Jul 2014 16:59:36 -0400 Subject: [PATCH 83/92] Added Guild Leader Elections --- scripts/radial/object/guild_access_device.py | 53 +++++++++++- src/resources/guild/Guild.java | 18 +++++ src/resources/guild/GuildMember.java | 27 ++++++- src/services/GuildService.java | 85 ++++++++++++++++++++ 4 files changed, 180 insertions(+), 3 deletions(-) diff --git a/scripts/radial/object/guild_access_device.py b/scripts/radial/object/guild_access_device.py index 4c92fbe7..962f12db 100644 --- a/scripts/radial/object/guild_access_device.py +++ b/scripts/radial/object/guild_access_device.py @@ -36,7 +36,7 @@ def createRadial(core, owner, target, radials): radials.add(RadialOptions(3, RadialOptions.serverGuildDisband, 3, '@guild:menu_disband')) # Disband Guild if member.hasChangeNamePermission(): radials.add(RadialOptions(3, RadialOptions.serverGuildNameChange, 3, '@guild:menu_namechange')) # Change Guild Name - + #### Member Management #### radials.add(RadialOptions(4, RadialOptions.serverGuildMembers, 3, '@guild:menu_members')) # Guild Members if member.hasSponsorPermission(): @@ -46,6 +46,22 @@ def createRadial(core, owner, target, radials): if owner.getObjectID() == guild.getLeader(): radials.add(RadialOptions(4, 218, 3, '@guild:menu_member_motd')) # Create a Guild Message radials.add(RadialOptions(4, 69, 3, '@guild:menu_leader_change')) # Transfer PA Leadership + + #### Guild Leader Elections #### + if guild.isElectionsEnabled(): + radials.add(RadialOptions(0, 71, 3, '@guild:menu_leader_race')) # Guild Leader Elections + + if guild.getLeaderCandidates().containsKey(owner.getObjectID()): + radials.add(RadialOptions(5, 72, 3, '@guild:menu_leader_register')) # Register to Run + else + radials.add(RadialOptions(5, 73, 3, '@guild:menu_leader_unregister')) # Unregister from Race + radials.add(RadialOptions(5, 74, 4, '@guild:menu_leader_vote')) # Cast a Vote + radials.add(RadialOptions(5, 75, 4, '@guild:menu_leader_standings')) # View Standings + if owner.getObjectID() == guild.getLeader(): + radials.add(4, 56, 3, '@guild:menu_disable_elections') # Disable Elections + else: + if owner.getObjectID() == guild.getLeader(): + radials.add(RadialOptions(4, 57, 3, '@guild:menu_enable_elections')) # Enable Elections return return @@ -81,7 +97,7 @@ def handleSelection(core, owner, target, option): elif option == RadialOptions.serverGuildNameChange: core.guildService.handleChangeGuildName(owner, guild) return - + #### Member Management #### # - Guild Members @@ -108,4 +124,37 @@ def handleSelection(core, owner, target, option): elif option == 218: core.guildService.handleChangeGuildMotd(owner, guild) return + + #### Guild Management #### + + # - Register to Run + elif option == 72: + guild.getLeaderCandidates().put(owner.getObjectID(), 1) + owner.sendSystemMessage('@guild:vote_register_congrats', 0) + return + + # - Unregister from Race + elif option == 73: + guild.getLeaderCandidates().remove(owner.getObjectID()) + owner.sendSystemMessage('@guild:vote_unregistered', 0) + return + + # - Cast a Vote + elif option == 74: + core.guildService.handleVoteForLeader(owner, guild) + return + + # - View Standings + elif option == 75: + core.guildService.handleViewElectionStandings(owner, guild) + return + + # - Enable Elections + elif option == 56: + core.guildService.handleEnableGuildElections(guild) + return + + # - Disable Elections + elif option == 57: + return return \ No newline at end of file diff --git a/src/resources/guild/Guild.java b/src/resources/guild/Guild.java index 76d0ac30..727fd17a 100644 --- a/src/resources/guild/Guild.java +++ b/src/resources/guild/Guild.java @@ -40,8 +40,10 @@ public class Guild { private String leaderName; private Map members = new HashMap(); private Map sponsoredPlayers = new HashMap(); + private Map leaderCandidates; private String motd = ""; private boolean electionsEnabled = false; + private long electionResultsDate; public Guild(int id, String abbreviation, String name, SWGObject leader) { this.id = id; @@ -171,4 +173,20 @@ public class Guild { public void setElectionsEnabled(boolean electionsEnabled) { this.electionsEnabled = electionsEnabled; } + + public long getElectionResultsDate() { + return electionResultsDate; + } + + public void setElectionResultsDate(long electionResultsDate) { + this.electionResultsDate = electionResultsDate; + } + + public Map getLeaderCandidates() { + return leaderCandidates; + } + + public void setLeaderCandidates(Map leaderCandidates) { + this.leaderCandidates = leaderCandidates; + } } diff --git a/src/resources/guild/GuildMember.java b/src/resources/guild/GuildMember.java index e60573de..f6721ff2 100644 --- a/src/resources/guild/GuildMember.java +++ b/src/resources/guild/GuildMember.java @@ -33,7 +33,8 @@ public class GuildMember { private String rank = ""; private String name = ""; private String title = ""; - + private int votes = 0; + private long votedId; private Vector permissions = new Vector(); private boolean mailPermission = false; private boolean sponsorPermission = false; @@ -93,6 +94,30 @@ public class GuildMember { this.joinTime = joinTime; } + public int getVotes() { + return votes; + } + + public void setVotes(int votes) { + this.votes = votes; + } + + public void incrementVotes() { + this.votes++; + } + + public void decrementVotes() { + this.votes--; + } + + public long getVotedId() { + return votedId; + } + + public void setVotedId(long votedId) { + this.votedId = votedId; + } + public boolean hasMailPermission() { return mailPermission; } diff --git a/src/services/GuildService.java b/src/services/GuildService.java index 5c36eec2..28094a54 100644 --- a/src/services/GuildService.java +++ b/src/services/GuildService.java @@ -252,6 +252,91 @@ public class GuildService implements INetworkDispatch { core.suiService.openSUIWindow(window); } + public void handleEnableGuildElections(Guild guild) { + guild.setElectionsEnabled(true); + guild.setElectionResultsDate(System.currentTimeMillis() + (12095 * 100000)); // 2 weeks + + Map candidates = new HashMap(); + candidates.put(guild.getLeader(), 1); + + GuildMember leader = guild.getMember(guild.getLeader()); + + leader.setVotedId(guild.getLeader()); + + guild.sendGuildMail(guild.getName(), "@guild:open_elections_email_subject", "@guild:open_elections_email_body"); + } + + public void handleViewElectionStandings(CreatureObject actor, Guild guild) { + + Map candidates = guild.getLeaderCandidates(); + + if (candidates.size() <= 1) { + actor.sendSystemMessage("@guild:vote_no_candidates", DisplayType.Broadcast); + return; + } + + SUIWindow window = core.suiService.createListBox(ListBoxType.LIST_BOX_OK_CANCEL, "@guild:leader_standings_t", "@guild:leader_standings_d", new TreeMap(), actor, null, 0); + + candidates.keySet().stream().forEach(candidateId -> { + if (candidateId == guild.getLeader()) { + window.addListBoxMenuItem("Incumbent: " + guild.getLeaderName() + " -- Votes: " + String.valueOf(candidates.get(candidateId)), candidateId); + } else { + GuildMember candidate = guild.getMember(candidateId); + + window.addListBoxMenuItem("Challenger: " + candidate.getName() + " -- Votes: " + String.valueOf(candidates.get(candidateId)), candidateId); + } + + }); + core.suiService.openSUIWindow(window); + } + + public void handleVoteForLeader(CreatureObject actor, Guild guild) { + + SUIWindow window = core.suiService.createListBox(ListBoxType.LIST_BOX_OK_CANCEL, "@guild:leader_vote_t", "@guild:leader_vote_d", new TreeMap(), actor, null, 0); + + Map candidates = guild.getLeaderCandidates(); + candidates.keySet().stream().forEach(candidateId -> { + if (candidateId == guild.getLeader()) { + window.addListBoxMenuItem("Incumbent: " + guild.getLeaderName() + " -- Votes: " + String.valueOf(candidates.get(candidateId)), candidateId); + } else { + GuildMember candidate = guild.getMember(candidateId); + + window.addListBoxMenuItem("Challenger: " + candidate.getName() + " -- Votes: " + String.valueOf(candidates.get(candidateId)), candidateId); + } + + }); + + Vector returnList = new Vector(); + returnList.add("List.lstList:SelectedRow"); + + window.addHandler(0, "", Trigger.TRIGGER_OK, returnList, (owner, eventType, resultList) -> { + long voteId = Long.parseLong(resultList.get(0)); + + GuildMember voter = guild.getMember(actor.getObjectID()); + if (voter == null) + return; + + if (voter.getVotedId() == voteId) { + if (guild.getLeaderCandidates().containsKey(voteId)) + guild.getLeaderCandidates().put(voteId, guild.getLeaderCandidates().get(voteId) - 1); + + actor.sendSystemMessage("@guild:vote_abstain", DisplayType.Broadcast); + return; + } + + // remove prior votes + if (voter.getVotedId() != 0 && guild.getLeaderCandidates().containsKey(voter.getVotedId())) + guild.getLeaderCandidates().put(voter.getVotedId(), guild.getLeaderCandidates().get(voter.getVotedId()) - 1); + + voter.setVotedId(voteId); + guild.getLeaderCandidates().put(voteId, guild.getLeaderCandidates().get(voteId) + 1); + actor.sendSystemMessage(OutOfBand.ProsePackage("@guild:vote_placed", "TO", guild.getMember(voteId).getName()), DisplayType.Broadcast); + + }); + + core.suiService.openSUIWindow(window); + } + public void handleCreateGuildAbbrev(CreatureObject actor, String guildName, SWGObject creationSource) { SUIWindow window = core.suiService.createInputBox(InputBoxType.INPUT_BOX_OK_CANCEL, "@guild:create_abbrev_title", "@guild:create_abbrev_prompt", actor, null, 0, (owner, eventType, returnList) -> { From 3d0a5c268570b322821391ccc59a289032532a39 Mon Sep 17 00:00:00 2001 From: Ziggeh Date: Wed, 2 Jul 2014 00:56:52 +0200 Subject: [PATCH 84/92] Changed method for getting items by STF name to work with any container Also moved it out of CreatureObject since that didn't really make sense anymore. --- src/resources/objects/creature/CreatureObject.java | 9 --------- src/services/object/ObjectService.java | 10 ++++++++++ 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/resources/objects/creature/CreatureObject.java b/src/resources/objects/creature/CreatureObject.java index ea15438d..e65109d7 100644 --- a/src/resources/objects/creature/CreatureObject.java +++ b/src/resources/objects/creature/CreatureObject.java @@ -1821,15 +1821,6 @@ public class CreatureObject extends TangibleObject implements Serializable { getSlottedObject("inventory").viewChildren(this, true, true, (obj) -> adder.increment()); return adder.intValue(); } - - public Vector getItemsInInventoryByStfName(CreatureObject creature, String stfName) { - Vector itemList = new Vector(); - SWGObject inventory = creature.getSlottedObject("inventory"); - - inventory.viewChildren(creature, false, false, (item) -> { if (item.getStfName() == stfName) { itemList.add(item); } }); - - return itemList; - } public ObjectMessageBuilder getMessageBuilder() { return messageBuilder; diff --git a/src/services/object/ObjectService.java b/src/services/object/ObjectService.java index 65fd0562..1c9940da 100644 --- a/src/services/object/ObjectService.java +++ b/src/services/object/ObjectService.java @@ -731,6 +731,16 @@ public class ObjectService implements INetworkDispatch { return objectId; } + + public Vector getItemsInContainerByStfName(CreatureObject creature, String containerName, String stfName) { + Vector itemList = new Vector(); + SWGObject container = creature.getSlottedObject(containerName); + + container.viewChildren(creature, false, false, (item) -> { if (item.getStfName() == stfName) { itemList.add(item); } }); + + return itemList; + } + public void useObject(CreatureObject creature, final SWGObject object) { if (creature == null || object == null) { From 9d1d7f096579160cf2e17a7ede236008f92ab8cd Mon Sep 17 00:00:00 2001 From: Bronco69 Date: Wed, 2 Jul 2014 03:27:09 +0200 Subject: [PATCH 85/92] Added correct radial for all vehicles --- .../intangible/vehicle/a1_deluxe_floater_pcd.py | 1 + .../intangible/vehicle/air2_swoop_speeder_pcd.py | 1 + .../intangible/vehicle/barc_speeder_imperial_pcd.py | 3 +++ .../object/intangible/vehicle/barc_speeder_pcd.py | 12 +----------- .../intangible/vehicle/barc_speeder_rebel_pcd.py | 10 ---------- .../object/intangible/vehicle/basilisk_war_droid.py | 1 + .../object/intangible/vehicle/fg_8t8_podracer_pcd.py | 1 + .../intangible/vehicle/flare_s_swoop_crafted_pcd.py | 1 + .../object/intangible/vehicle/flare_s_swoop_pcd.py | 1 + .../intangible/vehicle/geonosian_speeder_pcd.py | 1 + scripts/object/intangible/vehicle/gift_stap_pcd.py | 1 + .../object/intangible/vehicle/grievous_wheel_bike.py | 1 + scripts/object/intangible/vehicle/hoth_at_st_pcd.py | 1 + scripts/object/intangible/vehicle/hover_chair_pcd.py | 1 + .../vehicle/hoverlifter_speeder_crafted_pcd.py | 1 + .../intangible/vehicle/hoverlifter_speeder_pcd.py | 1 + scripts/object/intangible/vehicle/jetpack_pcd.py | 1 + .../object/intangible/vehicle/koro2_speeder_pcd.py | 1 + .../object/intangible/vehicle/landspeeder_ab1_pcd.py | 1 + .../vehicle/landspeeder_desert_skiff_pcd.py | 1 + .../intangible/vehicle/landspeeder_lava_skiff_pcd.py | 1 + .../intangible/vehicle/landspeeder_organa_pcd.py | 1 + .../vehicle/landspeeder_tantive4_adv_pcd.py | 1 + .../intangible/vehicle/landspeeder_tantive4_pcd.py | 12 +----------- .../intangible/vehicle/landspeeder_usv5_pcd.py | 1 + .../intangible/vehicle/landspeeder_usv5_s02_pcd.py | 1 + .../object/intangible/vehicle/landspeeder_v35_pcd.py | 1 + .../object/intangible/vehicle/landspeeder_x31_pcd.py | 1 + .../object/intangible/vehicle/landspeeder_x34_pcd.py | 1 + .../intangible/vehicle/landspeeder_xp38_pcd.py | 1 + .../object/intangible/vehicle/light_bending_barc.py | 1 + .../object/intangible/vehicle/mechno_chair_pcd.py | 1 + .../intangible/vehicle/mustafar_panning_droid.py | 1 + .../vehicle/pod_racer_balta_podracer_pcd.py | 1 + .../intangible/vehicle/pod_racer_ipg_longtail_pcd.py | 1 + .../intangible/vehicle/pod_racer_light_bending.py | 1 + .../object/intangible/vehicle/pod_racer_one_pcd.py | 1 + .../object/intangible/vehicle/pod_racer_two_pcd.py | 1 + .../object/intangible/vehicle/podracer_anakin_pcd.py | 1 + scripts/object/intangible/vehicle/senate_pod_pcd.py | 1 + .../object/intangible/vehicle/sith_speeder_pcd.py | 1 + scripts/object/intangible/vehicle/snowspeeder.py | 1 + .../object/intangible/vehicle/speeder_ric_920_pcd.py | 1 + .../intangible/vehicle/speederbike_flash_pcd.py | 1 + scripts/object/intangible/vehicle/speederbike_pcd.py | 1 + .../object/intangible/vehicle/swamp_speeder_pcd.py | 1 + .../object/intangible/vehicle/tcg_8_air_speeder.py | 1 + .../intangible/vehicle/tcg_8_air_speeder_pcd.py | 1 + .../vehicle/tcg_8_single_pod_airspeeder.py | 1 + .../intangible/vehicle/tcg_at_pt_walker_pcd.py | 1 + .../intangible/vehicle/tcg_hk47_jetpack_pcd.py | 1 + .../vehicle/tcg_merr_sonn_jt12_jetpack_pcd.py | 1 + .../intangible/vehicle/tcg_military_transport_pcd.py | 1 + .../intangible/vehicle/tcg_republic_gunship_pcd.py | 1 + .../object/intangible/vehicle/temp_walker1_pcd.py | 1 + .../object/intangible/vehicle/vehicle_pcd_base.py | 1 + .../intangible/vehicle/walker_at_rt_camo_pcd.py | 1 + .../intangible/vehicle/walker_at_rt_reg_pcd.py | 1 + .../intangible/vehicle/walker_at_st_walker_pcd.py | 1 + .../object/intangible/vehicle/walker_at_xt_pcd.py | 1 + .../object/intangible/vehicle/xj6_air_speeder_pcd.py | 1 + 61 files changed, 62 insertions(+), 32 deletions(-) diff --git a/scripts/object/intangible/vehicle/a1_deluxe_floater_pcd.py b/scripts/object/intangible/vehicle/a1_deluxe_floater_pcd.py index ccad8904..d7c3f4a1 100644 --- a/scripts/object/intangible/vehicle/a1_deluxe_floater_pcd.py +++ b/scripts/object/intangible/vehicle/a1_deluxe_floater_pcd.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'datapad/vehicle_pcd') return \ No newline at end of file diff --git a/scripts/object/intangible/vehicle/air2_swoop_speeder_pcd.py b/scripts/object/intangible/vehicle/air2_swoop_speeder_pcd.py index ccad8904..d7c3f4a1 100644 --- a/scripts/object/intangible/vehicle/air2_swoop_speeder_pcd.py +++ b/scripts/object/intangible/vehicle/air2_swoop_speeder_pcd.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'datapad/vehicle_pcd') return \ No newline at end of file diff --git a/scripts/object/intangible/vehicle/barc_speeder_imperial_pcd.py b/scripts/object/intangible/vehicle/barc_speeder_imperial_pcd.py index ccad8904..d0506fa1 100644 --- a/scripts/object/intangible/vehicle/barc_speeder_imperial_pcd.py +++ b/scripts/object/intangible/vehicle/barc_speeder_imperial_pcd.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'datapad/vehicle_pcd') + object.setIntAttribute('no_trade', 1) + object.setStringAttribute('faction_restriction', 'Imperial') return \ No newline at end of file diff --git a/scripts/object/intangible/vehicle/barc_speeder_pcd.py b/scripts/object/intangible/vehicle/barc_speeder_pcd.py index e9fa1234..d7c3f4a1 100644 --- a/scripts/object/intangible/vehicle/barc_speeder_pcd.py +++ b/scripts/object/intangible/vehicle/barc_speeder_pcd.py @@ -1,15 +1,5 @@ import sys def setup(core, object): - object.setAttachment('radial_filename', 'vehicle_pcd') - return - -def use(core, actor, object): - if object and actor.getAttachment('activeVehicleID') == None: - barc = core.objectService.createObject('object/mobile/vehicle/shared_barc_speeder.iff', 0, actor.getPlanet(), actor.getPosition(), actor.getOrientation()) - - barc.setOwnerId(actor.getObjectID()) - actor.setAttachment('activeVehicleID', barc.getObjectID()) - - core.simulationService.add(barc, barc.getPosition().x, barc.getPosition().z, True) + object.setAttachment('radial_filename', 'datapad/vehicle_pcd') return \ No newline at end of file diff --git a/scripts/object/intangible/vehicle/barc_speeder_rebel_pcd.py b/scripts/object/intangible/vehicle/barc_speeder_rebel_pcd.py index 140a663d..ab226baa 100644 --- a/scripts/object/intangible/vehicle/barc_speeder_rebel_pcd.py +++ b/scripts/object/intangible/vehicle/barc_speeder_rebel_pcd.py @@ -4,14 +4,4 @@ def setup(core, object): object.setAttachment('radial_filename', 'datapad/vehicle_pcd') object.setIntAttribute('no_trade', 1) object.setStringAttribute('faction_restriction', 'Rebel') - return - -def use(core, actor, object): - if object and actor.getAttachment('activeVehicleID') == None: - barc = core.objectService.createObject('object/mobile/vehicle/shared_barc_speeder_rebel.iff', 0, actor.getPlanet(), actor.getPosition(), actor.getOrientation()) - - barc.setOwnerId(actor.getObjectID()) - actor.setAttachment('activeVehicleID', barc.getObjectID()) - - core.simulationService.add(barc, barc.getPosition().x, barc.getPosition().z, True) return \ No newline at end of file diff --git a/scripts/object/intangible/vehicle/basilisk_war_droid.py b/scripts/object/intangible/vehicle/basilisk_war_droid.py index ccad8904..d7c3f4a1 100644 --- a/scripts/object/intangible/vehicle/basilisk_war_droid.py +++ b/scripts/object/intangible/vehicle/basilisk_war_droid.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'datapad/vehicle_pcd') return \ No newline at end of file diff --git a/scripts/object/intangible/vehicle/fg_8t8_podracer_pcd.py b/scripts/object/intangible/vehicle/fg_8t8_podracer_pcd.py index ccad8904..d7c3f4a1 100644 --- a/scripts/object/intangible/vehicle/fg_8t8_podracer_pcd.py +++ b/scripts/object/intangible/vehicle/fg_8t8_podracer_pcd.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'datapad/vehicle_pcd') return \ No newline at end of file diff --git a/scripts/object/intangible/vehicle/flare_s_swoop_crafted_pcd.py b/scripts/object/intangible/vehicle/flare_s_swoop_crafted_pcd.py index ccad8904..d7c3f4a1 100644 --- a/scripts/object/intangible/vehicle/flare_s_swoop_crafted_pcd.py +++ b/scripts/object/intangible/vehicle/flare_s_swoop_crafted_pcd.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'datapad/vehicle_pcd') return \ No newline at end of file diff --git a/scripts/object/intangible/vehicle/flare_s_swoop_pcd.py b/scripts/object/intangible/vehicle/flare_s_swoop_pcd.py index ccad8904..d7c3f4a1 100644 --- a/scripts/object/intangible/vehicle/flare_s_swoop_pcd.py +++ b/scripts/object/intangible/vehicle/flare_s_swoop_pcd.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'datapad/vehicle_pcd') return \ No newline at end of file diff --git a/scripts/object/intangible/vehicle/geonosian_speeder_pcd.py b/scripts/object/intangible/vehicle/geonosian_speeder_pcd.py index ccad8904..d7c3f4a1 100644 --- a/scripts/object/intangible/vehicle/geonosian_speeder_pcd.py +++ b/scripts/object/intangible/vehicle/geonosian_speeder_pcd.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'datapad/vehicle_pcd') return \ No newline at end of file diff --git a/scripts/object/intangible/vehicle/gift_stap_pcd.py b/scripts/object/intangible/vehicle/gift_stap_pcd.py index ccad8904..d7c3f4a1 100644 --- a/scripts/object/intangible/vehicle/gift_stap_pcd.py +++ b/scripts/object/intangible/vehicle/gift_stap_pcd.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'datapad/vehicle_pcd') return \ No newline at end of file diff --git a/scripts/object/intangible/vehicle/grievous_wheel_bike.py b/scripts/object/intangible/vehicle/grievous_wheel_bike.py index ccad8904..d7c3f4a1 100644 --- a/scripts/object/intangible/vehicle/grievous_wheel_bike.py +++ b/scripts/object/intangible/vehicle/grievous_wheel_bike.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'datapad/vehicle_pcd') return \ No newline at end of file diff --git a/scripts/object/intangible/vehicle/hoth_at_st_pcd.py b/scripts/object/intangible/vehicle/hoth_at_st_pcd.py index ccad8904..d7c3f4a1 100644 --- a/scripts/object/intangible/vehicle/hoth_at_st_pcd.py +++ b/scripts/object/intangible/vehicle/hoth_at_st_pcd.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'datapad/vehicle_pcd') return \ No newline at end of file diff --git a/scripts/object/intangible/vehicle/hover_chair_pcd.py b/scripts/object/intangible/vehicle/hover_chair_pcd.py index ccad8904..d7c3f4a1 100644 --- a/scripts/object/intangible/vehicle/hover_chair_pcd.py +++ b/scripts/object/intangible/vehicle/hover_chair_pcd.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'datapad/vehicle_pcd') return \ No newline at end of file diff --git a/scripts/object/intangible/vehicle/hoverlifter_speeder_crafted_pcd.py b/scripts/object/intangible/vehicle/hoverlifter_speeder_crafted_pcd.py index ccad8904..d7c3f4a1 100644 --- a/scripts/object/intangible/vehicle/hoverlifter_speeder_crafted_pcd.py +++ b/scripts/object/intangible/vehicle/hoverlifter_speeder_crafted_pcd.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'datapad/vehicle_pcd') return \ No newline at end of file diff --git a/scripts/object/intangible/vehicle/hoverlifter_speeder_pcd.py b/scripts/object/intangible/vehicle/hoverlifter_speeder_pcd.py index ccad8904..d7c3f4a1 100644 --- a/scripts/object/intangible/vehicle/hoverlifter_speeder_pcd.py +++ b/scripts/object/intangible/vehicle/hoverlifter_speeder_pcd.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'datapad/vehicle_pcd') return \ No newline at end of file diff --git a/scripts/object/intangible/vehicle/jetpack_pcd.py b/scripts/object/intangible/vehicle/jetpack_pcd.py index ccad8904..d7c3f4a1 100644 --- a/scripts/object/intangible/vehicle/jetpack_pcd.py +++ b/scripts/object/intangible/vehicle/jetpack_pcd.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'datapad/vehicle_pcd') return \ No newline at end of file diff --git a/scripts/object/intangible/vehicle/koro2_speeder_pcd.py b/scripts/object/intangible/vehicle/koro2_speeder_pcd.py index ccad8904..d7c3f4a1 100644 --- a/scripts/object/intangible/vehicle/koro2_speeder_pcd.py +++ b/scripts/object/intangible/vehicle/koro2_speeder_pcd.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'datapad/vehicle_pcd') return \ No newline at end of file diff --git a/scripts/object/intangible/vehicle/landspeeder_ab1_pcd.py b/scripts/object/intangible/vehicle/landspeeder_ab1_pcd.py index ccad8904..d7c3f4a1 100644 --- a/scripts/object/intangible/vehicle/landspeeder_ab1_pcd.py +++ b/scripts/object/intangible/vehicle/landspeeder_ab1_pcd.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'datapad/vehicle_pcd') return \ No newline at end of file diff --git a/scripts/object/intangible/vehicle/landspeeder_desert_skiff_pcd.py b/scripts/object/intangible/vehicle/landspeeder_desert_skiff_pcd.py index ccad8904..d7c3f4a1 100644 --- a/scripts/object/intangible/vehicle/landspeeder_desert_skiff_pcd.py +++ b/scripts/object/intangible/vehicle/landspeeder_desert_skiff_pcd.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'datapad/vehicle_pcd') return \ No newline at end of file diff --git a/scripts/object/intangible/vehicle/landspeeder_lava_skiff_pcd.py b/scripts/object/intangible/vehicle/landspeeder_lava_skiff_pcd.py index ccad8904..d7c3f4a1 100644 --- a/scripts/object/intangible/vehicle/landspeeder_lava_skiff_pcd.py +++ b/scripts/object/intangible/vehicle/landspeeder_lava_skiff_pcd.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'datapad/vehicle_pcd') return \ No newline at end of file diff --git a/scripts/object/intangible/vehicle/landspeeder_organa_pcd.py b/scripts/object/intangible/vehicle/landspeeder_organa_pcd.py index ccad8904..d7c3f4a1 100644 --- a/scripts/object/intangible/vehicle/landspeeder_organa_pcd.py +++ b/scripts/object/intangible/vehicle/landspeeder_organa_pcd.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'datapad/vehicle_pcd') return \ No newline at end of file diff --git a/scripts/object/intangible/vehicle/landspeeder_tantive4_adv_pcd.py b/scripts/object/intangible/vehicle/landspeeder_tantive4_adv_pcd.py index ccad8904..d7c3f4a1 100644 --- a/scripts/object/intangible/vehicle/landspeeder_tantive4_adv_pcd.py +++ b/scripts/object/intangible/vehicle/landspeeder_tantive4_adv_pcd.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'datapad/vehicle_pcd') return \ No newline at end of file diff --git a/scripts/object/intangible/vehicle/landspeeder_tantive4_pcd.py b/scripts/object/intangible/vehicle/landspeeder_tantive4_pcd.py index ff8849f4..d7c3f4a1 100644 --- a/scripts/object/intangible/vehicle/landspeeder_tantive4_pcd.py +++ b/scripts/object/intangible/vehicle/landspeeder_tantive4_pcd.py @@ -1,15 +1,5 @@ import sys def setup(core, object): - object.setAttachment('radial_filename', 'vehicle_pcd') - return - -def use(core, actor, object): - if object and actor.getAttachment('activeVehicleID') == None: - tantive4 = core.objectService.createObject('object/mobile/vehicle/shared_landspeeder_tantive4.iff', 0, actor.getPlanet(), actor.getPosition(), actor.getOrientation()) - - tantive4.setOwnerId(actor.getObjectID()) - actor.setAttachment('activeVehicleID', tantive4.getObjectID()) - - core.simulationService.add(tantive4, tantive4.getPosition().x, tantive4.getPosition().z, True) + object.setAttachment('radial_filename', 'datapad/vehicle_pcd') return \ No newline at end of file diff --git a/scripts/object/intangible/vehicle/landspeeder_usv5_pcd.py b/scripts/object/intangible/vehicle/landspeeder_usv5_pcd.py index ccad8904..d7c3f4a1 100644 --- a/scripts/object/intangible/vehicle/landspeeder_usv5_pcd.py +++ b/scripts/object/intangible/vehicle/landspeeder_usv5_pcd.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'datapad/vehicle_pcd') return \ No newline at end of file diff --git a/scripts/object/intangible/vehicle/landspeeder_usv5_s02_pcd.py b/scripts/object/intangible/vehicle/landspeeder_usv5_s02_pcd.py index ccad8904..d7c3f4a1 100644 --- a/scripts/object/intangible/vehicle/landspeeder_usv5_s02_pcd.py +++ b/scripts/object/intangible/vehicle/landspeeder_usv5_s02_pcd.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'datapad/vehicle_pcd') return \ No newline at end of file diff --git a/scripts/object/intangible/vehicle/landspeeder_v35_pcd.py b/scripts/object/intangible/vehicle/landspeeder_v35_pcd.py index ccad8904..d7c3f4a1 100644 --- a/scripts/object/intangible/vehicle/landspeeder_v35_pcd.py +++ b/scripts/object/intangible/vehicle/landspeeder_v35_pcd.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'datapad/vehicle_pcd') return \ No newline at end of file diff --git a/scripts/object/intangible/vehicle/landspeeder_x31_pcd.py b/scripts/object/intangible/vehicle/landspeeder_x31_pcd.py index ccad8904..d7c3f4a1 100644 --- a/scripts/object/intangible/vehicle/landspeeder_x31_pcd.py +++ b/scripts/object/intangible/vehicle/landspeeder_x31_pcd.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'datapad/vehicle_pcd') return \ No newline at end of file diff --git a/scripts/object/intangible/vehicle/landspeeder_x34_pcd.py b/scripts/object/intangible/vehicle/landspeeder_x34_pcd.py index ccad8904..d7c3f4a1 100644 --- a/scripts/object/intangible/vehicle/landspeeder_x34_pcd.py +++ b/scripts/object/intangible/vehicle/landspeeder_x34_pcd.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'datapad/vehicle_pcd') return \ No newline at end of file diff --git a/scripts/object/intangible/vehicle/landspeeder_xp38_pcd.py b/scripts/object/intangible/vehicle/landspeeder_xp38_pcd.py index ccad8904..d7c3f4a1 100644 --- a/scripts/object/intangible/vehicle/landspeeder_xp38_pcd.py +++ b/scripts/object/intangible/vehicle/landspeeder_xp38_pcd.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'datapad/vehicle_pcd') return \ No newline at end of file diff --git a/scripts/object/intangible/vehicle/light_bending_barc.py b/scripts/object/intangible/vehicle/light_bending_barc.py index ccad8904..d7c3f4a1 100644 --- a/scripts/object/intangible/vehicle/light_bending_barc.py +++ b/scripts/object/intangible/vehicle/light_bending_barc.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'datapad/vehicle_pcd') return \ No newline at end of file diff --git a/scripts/object/intangible/vehicle/mechno_chair_pcd.py b/scripts/object/intangible/vehicle/mechno_chair_pcd.py index ccad8904..d7c3f4a1 100644 --- a/scripts/object/intangible/vehicle/mechno_chair_pcd.py +++ b/scripts/object/intangible/vehicle/mechno_chair_pcd.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'datapad/vehicle_pcd') return \ No newline at end of file diff --git a/scripts/object/intangible/vehicle/mustafar_panning_droid.py b/scripts/object/intangible/vehicle/mustafar_panning_droid.py index ccad8904..d7c3f4a1 100644 --- a/scripts/object/intangible/vehicle/mustafar_panning_droid.py +++ b/scripts/object/intangible/vehicle/mustafar_panning_droid.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'datapad/vehicle_pcd') return \ No newline at end of file diff --git a/scripts/object/intangible/vehicle/pod_racer_balta_podracer_pcd.py b/scripts/object/intangible/vehicle/pod_racer_balta_podracer_pcd.py index ccad8904..d7c3f4a1 100644 --- a/scripts/object/intangible/vehicle/pod_racer_balta_podracer_pcd.py +++ b/scripts/object/intangible/vehicle/pod_racer_balta_podracer_pcd.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'datapad/vehicle_pcd') return \ No newline at end of file diff --git a/scripts/object/intangible/vehicle/pod_racer_ipg_longtail_pcd.py b/scripts/object/intangible/vehicle/pod_racer_ipg_longtail_pcd.py index ccad8904..d7c3f4a1 100644 --- a/scripts/object/intangible/vehicle/pod_racer_ipg_longtail_pcd.py +++ b/scripts/object/intangible/vehicle/pod_racer_ipg_longtail_pcd.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'datapad/vehicle_pcd') return \ No newline at end of file diff --git a/scripts/object/intangible/vehicle/pod_racer_light_bending.py b/scripts/object/intangible/vehicle/pod_racer_light_bending.py index ccad8904..d7c3f4a1 100644 --- a/scripts/object/intangible/vehicle/pod_racer_light_bending.py +++ b/scripts/object/intangible/vehicle/pod_racer_light_bending.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'datapad/vehicle_pcd') return \ No newline at end of file diff --git a/scripts/object/intangible/vehicle/pod_racer_one_pcd.py b/scripts/object/intangible/vehicle/pod_racer_one_pcd.py index ccad8904..d7c3f4a1 100644 --- a/scripts/object/intangible/vehicle/pod_racer_one_pcd.py +++ b/scripts/object/intangible/vehicle/pod_racer_one_pcd.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'datapad/vehicle_pcd') return \ No newline at end of file diff --git a/scripts/object/intangible/vehicle/pod_racer_two_pcd.py b/scripts/object/intangible/vehicle/pod_racer_two_pcd.py index ccad8904..d7c3f4a1 100644 --- a/scripts/object/intangible/vehicle/pod_racer_two_pcd.py +++ b/scripts/object/intangible/vehicle/pod_racer_two_pcd.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'datapad/vehicle_pcd') return \ No newline at end of file diff --git a/scripts/object/intangible/vehicle/podracer_anakin_pcd.py b/scripts/object/intangible/vehicle/podracer_anakin_pcd.py index ccad8904..d7c3f4a1 100644 --- a/scripts/object/intangible/vehicle/podracer_anakin_pcd.py +++ b/scripts/object/intangible/vehicle/podracer_anakin_pcd.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'datapad/vehicle_pcd') return \ No newline at end of file diff --git a/scripts/object/intangible/vehicle/senate_pod_pcd.py b/scripts/object/intangible/vehicle/senate_pod_pcd.py index ccad8904..d7c3f4a1 100644 --- a/scripts/object/intangible/vehicle/senate_pod_pcd.py +++ b/scripts/object/intangible/vehicle/senate_pod_pcd.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'datapad/vehicle_pcd') return \ No newline at end of file diff --git a/scripts/object/intangible/vehicle/sith_speeder_pcd.py b/scripts/object/intangible/vehicle/sith_speeder_pcd.py index ccad8904..d7c3f4a1 100644 --- a/scripts/object/intangible/vehicle/sith_speeder_pcd.py +++ b/scripts/object/intangible/vehicle/sith_speeder_pcd.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'datapad/vehicle_pcd') return \ No newline at end of file diff --git a/scripts/object/intangible/vehicle/snowspeeder.py b/scripts/object/intangible/vehicle/snowspeeder.py index ccad8904..d7c3f4a1 100644 --- a/scripts/object/intangible/vehicle/snowspeeder.py +++ b/scripts/object/intangible/vehicle/snowspeeder.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'datapad/vehicle_pcd') return \ No newline at end of file diff --git a/scripts/object/intangible/vehicle/speeder_ric_920_pcd.py b/scripts/object/intangible/vehicle/speeder_ric_920_pcd.py index ccad8904..d7c3f4a1 100644 --- a/scripts/object/intangible/vehicle/speeder_ric_920_pcd.py +++ b/scripts/object/intangible/vehicle/speeder_ric_920_pcd.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'datapad/vehicle_pcd') return \ No newline at end of file diff --git a/scripts/object/intangible/vehicle/speederbike_flash_pcd.py b/scripts/object/intangible/vehicle/speederbike_flash_pcd.py index ccad8904..d7c3f4a1 100644 --- a/scripts/object/intangible/vehicle/speederbike_flash_pcd.py +++ b/scripts/object/intangible/vehicle/speederbike_flash_pcd.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'datapad/vehicle_pcd') return \ No newline at end of file diff --git a/scripts/object/intangible/vehicle/speederbike_pcd.py b/scripts/object/intangible/vehicle/speederbike_pcd.py index ccad8904..d7c3f4a1 100644 --- a/scripts/object/intangible/vehicle/speederbike_pcd.py +++ b/scripts/object/intangible/vehicle/speederbike_pcd.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'datapad/vehicle_pcd') return \ No newline at end of file diff --git a/scripts/object/intangible/vehicle/swamp_speeder_pcd.py b/scripts/object/intangible/vehicle/swamp_speeder_pcd.py index ccad8904..d7c3f4a1 100644 --- a/scripts/object/intangible/vehicle/swamp_speeder_pcd.py +++ b/scripts/object/intangible/vehicle/swamp_speeder_pcd.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'datapad/vehicle_pcd') return \ No newline at end of file diff --git a/scripts/object/intangible/vehicle/tcg_8_air_speeder.py b/scripts/object/intangible/vehicle/tcg_8_air_speeder.py index ccad8904..d7c3f4a1 100644 --- a/scripts/object/intangible/vehicle/tcg_8_air_speeder.py +++ b/scripts/object/intangible/vehicle/tcg_8_air_speeder.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'datapad/vehicle_pcd') return \ No newline at end of file diff --git a/scripts/object/intangible/vehicle/tcg_8_air_speeder_pcd.py b/scripts/object/intangible/vehicle/tcg_8_air_speeder_pcd.py index ccad8904..d7c3f4a1 100644 --- a/scripts/object/intangible/vehicle/tcg_8_air_speeder_pcd.py +++ b/scripts/object/intangible/vehicle/tcg_8_air_speeder_pcd.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'datapad/vehicle_pcd') return \ No newline at end of file diff --git a/scripts/object/intangible/vehicle/tcg_8_single_pod_airspeeder.py b/scripts/object/intangible/vehicle/tcg_8_single_pod_airspeeder.py index ccad8904..d7c3f4a1 100644 --- a/scripts/object/intangible/vehicle/tcg_8_single_pod_airspeeder.py +++ b/scripts/object/intangible/vehicle/tcg_8_single_pod_airspeeder.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'datapad/vehicle_pcd') return \ No newline at end of file diff --git a/scripts/object/intangible/vehicle/tcg_at_pt_walker_pcd.py b/scripts/object/intangible/vehicle/tcg_at_pt_walker_pcd.py index ccad8904..d7c3f4a1 100644 --- a/scripts/object/intangible/vehicle/tcg_at_pt_walker_pcd.py +++ b/scripts/object/intangible/vehicle/tcg_at_pt_walker_pcd.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'datapad/vehicle_pcd') return \ No newline at end of file diff --git a/scripts/object/intangible/vehicle/tcg_hk47_jetpack_pcd.py b/scripts/object/intangible/vehicle/tcg_hk47_jetpack_pcd.py index ccad8904..d7c3f4a1 100644 --- a/scripts/object/intangible/vehicle/tcg_hk47_jetpack_pcd.py +++ b/scripts/object/intangible/vehicle/tcg_hk47_jetpack_pcd.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'datapad/vehicle_pcd') return \ No newline at end of file diff --git a/scripts/object/intangible/vehicle/tcg_merr_sonn_jt12_jetpack_pcd.py b/scripts/object/intangible/vehicle/tcg_merr_sonn_jt12_jetpack_pcd.py index ccad8904..d7c3f4a1 100644 --- a/scripts/object/intangible/vehicle/tcg_merr_sonn_jt12_jetpack_pcd.py +++ b/scripts/object/intangible/vehicle/tcg_merr_sonn_jt12_jetpack_pcd.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'datapad/vehicle_pcd') return \ No newline at end of file diff --git a/scripts/object/intangible/vehicle/tcg_military_transport_pcd.py b/scripts/object/intangible/vehicle/tcg_military_transport_pcd.py index ccad8904..d7c3f4a1 100644 --- a/scripts/object/intangible/vehicle/tcg_military_transport_pcd.py +++ b/scripts/object/intangible/vehicle/tcg_military_transport_pcd.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'datapad/vehicle_pcd') return \ No newline at end of file diff --git a/scripts/object/intangible/vehicle/tcg_republic_gunship_pcd.py b/scripts/object/intangible/vehicle/tcg_republic_gunship_pcd.py index ccad8904..d7c3f4a1 100644 --- a/scripts/object/intangible/vehicle/tcg_republic_gunship_pcd.py +++ b/scripts/object/intangible/vehicle/tcg_republic_gunship_pcd.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'datapad/vehicle_pcd') return \ No newline at end of file diff --git a/scripts/object/intangible/vehicle/temp_walker1_pcd.py b/scripts/object/intangible/vehicle/temp_walker1_pcd.py index ccad8904..d7c3f4a1 100644 --- a/scripts/object/intangible/vehicle/temp_walker1_pcd.py +++ b/scripts/object/intangible/vehicle/temp_walker1_pcd.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'datapad/vehicle_pcd') return \ No newline at end of file diff --git a/scripts/object/intangible/vehicle/vehicle_pcd_base.py b/scripts/object/intangible/vehicle/vehicle_pcd_base.py index ccad8904..d7c3f4a1 100644 --- a/scripts/object/intangible/vehicle/vehicle_pcd_base.py +++ b/scripts/object/intangible/vehicle/vehicle_pcd_base.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'datapad/vehicle_pcd') return \ No newline at end of file diff --git a/scripts/object/intangible/vehicle/walker_at_rt_camo_pcd.py b/scripts/object/intangible/vehicle/walker_at_rt_camo_pcd.py index ccad8904..d7c3f4a1 100644 --- a/scripts/object/intangible/vehicle/walker_at_rt_camo_pcd.py +++ b/scripts/object/intangible/vehicle/walker_at_rt_camo_pcd.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'datapad/vehicle_pcd') return \ No newline at end of file diff --git a/scripts/object/intangible/vehicle/walker_at_rt_reg_pcd.py b/scripts/object/intangible/vehicle/walker_at_rt_reg_pcd.py index ccad8904..d7c3f4a1 100644 --- a/scripts/object/intangible/vehicle/walker_at_rt_reg_pcd.py +++ b/scripts/object/intangible/vehicle/walker_at_rt_reg_pcd.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'datapad/vehicle_pcd') return \ No newline at end of file diff --git a/scripts/object/intangible/vehicle/walker_at_st_walker_pcd.py b/scripts/object/intangible/vehicle/walker_at_st_walker_pcd.py index ccad8904..d7c3f4a1 100644 --- a/scripts/object/intangible/vehicle/walker_at_st_walker_pcd.py +++ b/scripts/object/intangible/vehicle/walker_at_st_walker_pcd.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'datapad/vehicle_pcd') return \ No newline at end of file diff --git a/scripts/object/intangible/vehicle/walker_at_xt_pcd.py b/scripts/object/intangible/vehicle/walker_at_xt_pcd.py index ccad8904..d7c3f4a1 100644 --- a/scripts/object/intangible/vehicle/walker_at_xt_pcd.py +++ b/scripts/object/intangible/vehicle/walker_at_xt_pcd.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'datapad/vehicle_pcd') return \ No newline at end of file diff --git a/scripts/object/intangible/vehicle/xj6_air_speeder_pcd.py b/scripts/object/intangible/vehicle/xj6_air_speeder_pcd.py index ccad8904..d7c3f4a1 100644 --- a/scripts/object/intangible/vehicle/xj6_air_speeder_pcd.py +++ b/scripts/object/intangible/vehicle/xj6_air_speeder_pcd.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'datapad/vehicle_pcd') return \ No newline at end of file From 2614ff6ca262a067c1c8574057130eba9549c4ed Mon Sep 17 00:00:00 2001 From: Waverunner Date: Wed, 2 Jul 2014 11:44:54 -0400 Subject: [PATCH 86/92] Fixed variety of bugs associated with guild elections, Disabled loading of Lady Valarian - should fix some crashes on loading screen --- scripts/radial/object/guild_access_device.py | 23 ++++++------- scripts/static_spawns/tatooine/mos_eisley.py | 7 ++-- src/resources/guild/Guild.java | 7 +++- src/services/GuildService.java | 35 ++++++++++++++++---- 4 files changed, 50 insertions(+), 22 deletions(-) diff --git a/scripts/radial/object/guild_access_device.py b/scripts/radial/object/guild_access_device.py index 962f12db..644c9ec5 100644 --- a/scripts/radial/object/guild_access_device.py +++ b/scripts/radial/object/guild_access_device.py @@ -24,6 +24,8 @@ def createRadial(core, owner, target, radials): radials.add(RadialOptions(0, RadialOptions.serverGuildGuildManagement, 3, '@guild:menu_guild_management')) # Guild Management radials.add(RadialOptions(0, RadialOptions.serverGuildMemberManagement, 3, '@guild:menu_member_management')) # Member Management + if guild.isElectionsEnabled() or owner.getObjectID() == guild.getLeader(): + radials.add(RadialOptions(0, 216, 3, '@guild:menu_leader_race')) # Guild Leader Elections #### Guild Management #### radials.add(RadialOptions(3, RadialOptions.serverGuildInfo, 3, '@guild:menu_info')) # Guild Information @@ -49,19 +51,18 @@ def createRadial(core, owner, target, radials): #### Guild Leader Elections #### if guild.isElectionsEnabled(): - radials.add(RadialOptions(0, 71, 3, '@guild:menu_leader_race')) # Guild Leader Elections - if guild.getLeaderCandidates().containsKey(owner.getObjectID()): + if guild.isRunningForLeader(owner.getObjectID()) == False: radials.add(RadialOptions(5, 72, 3, '@guild:menu_leader_register')) # Register to Run - else + else: radials.add(RadialOptions(5, 73, 3, '@guild:menu_leader_unregister')) # Unregister from Race radials.add(RadialOptions(5, 74, 4, '@guild:menu_leader_vote')) # Cast a Vote radials.add(RadialOptions(5, 75, 4, '@guild:menu_leader_standings')) # View Standings if owner.getObjectID() == guild.getLeader(): - radials.add(4, 56, 3, '@guild:menu_disable_elections') # Disable Elections + radials.add(RadialOptions(5, 56, 3, '@guild:menu_disable_elections')) # Disable Elections else: if owner.getObjectID() == guild.getLeader(): - radials.add(RadialOptions(4, 57, 3, '@guild:menu_enable_elections')) # Enable Elections + radials.add(RadialOptions(5, 57, 3, '@guild:menu_enable_elections')) # Enable Elections return return @@ -125,18 +126,16 @@ def handleSelection(core, owner, target, option): core.guildService.handleChangeGuildMotd(owner, guild) return - #### Guild Management #### + #### Guild Leader Elections #### # - Register to Run elif option == 72: - guild.getLeaderCandidates().put(owner.getObjectID(), 1) - owner.sendSystemMessage('@guild:vote_register_congrats', 0) + core.guildService.handleRunForLeader(owner, guild) return # - Unregister from Race elif option == 73: - guild.getLeaderCandidates().remove(owner.getObjectID()) - owner.sendSystemMessage('@guild:vote_unregistered', 0) + core.guildService.handleUnregisterForLeader(owner, guild) return # - Cast a Vote @@ -150,11 +149,11 @@ def handleSelection(core, owner, target, option): return # - Enable Elections - elif option == 56: + elif option == 57: core.guildService.handleEnableGuildElections(guild) return # - Disable Elections - elif option == 57: + elif option == 56: return return \ No newline at end of file diff --git a/scripts/static_spawns/tatooine/mos_eisley.py b/scripts/static_spawns/tatooine/mos_eisley.py index d4c7ee3d..7b0d9042 100644 --- a/scripts/static_spawns/tatooine/mos_eisley.py +++ b/scripts/static_spawns/tatooine/mos_eisley.py @@ -143,9 +143,10 @@ def addPlanetSpawns(core, planet): #building = core.objectService.getObject(long(-466404040703447347)) #stcSvc.spawnObject('object/mobile/shared_han_solo.iff', 'tatooine', building.getCellByCellNumber(9), float(32.3), float(7.0), float(1.6), float(0), float(0), float(0), float(0)) - valarian = stcSvc.spawnObject('object/mobile/shared_lady_valarian.iff', 'tatooine', building.getCellByCellNumber(4), float(-21.5), float(9.0), float(0.5), float(0), float(0.70), float(0), float(-0.71)) - valarian.setCustomName('Lady Valarian') - valarian.setOptionsBitmask(256) + # Disabled for now. She seems to be the cause for quite a few crashes (but not the only reason for the crashes) + #valarian = stcSvc.spawnObject('object/mobile/shared_lady_valarian.iff', 'tatooine', building.getCellByCellNumber(4), float(-21.5), float(9.0), float(0.5), float(0), float(0.70), float(0), float(-0.71)) + #valarian.setCustomName('Lady Valarian') + #valarian.setOptionsBitmask(256) #Medical Center Interior diff --git a/src/resources/guild/Guild.java b/src/resources/guild/Guild.java index 727fd17a..3ad306f7 100644 --- a/src/resources/guild/Guild.java +++ b/src/resources/guild/Guild.java @@ -40,7 +40,7 @@ public class Guild { private String leaderName; private Map members = new HashMap(); private Map sponsoredPlayers = new HashMap(); - private Map leaderCandidates; + private Map leaderCandidates = new HashMap(); private String motd = ""; private boolean electionsEnabled = false; private long electionResultsDate; @@ -189,4 +189,9 @@ public class Guild { public void setLeaderCandidates(Map leaderCandidates) { this.leaderCandidates = leaderCandidates; } + + public boolean isRunningForLeader(long objectID) { + if (leaderCandidates.containsKey(Long.valueOf(objectID))) return true; + else return false; + } } diff --git a/src/services/GuildService.java b/src/services/GuildService.java index 28094a54..3676e36a 100644 --- a/src/services/GuildService.java +++ b/src/services/GuildService.java @@ -257,7 +257,8 @@ public class GuildService implements INetworkDispatch { guild.setElectionResultsDate(System.currentTimeMillis() + (12095 * 100000)); // 2 weeks Map candidates = new HashMap(); - candidates.put(guild.getLeader(), 1); + candidates.put(Long.valueOf(guild.getLeader()), 1); + guild.setLeaderCandidates(candidates); GuildMember leader = guild.getMember(guild.getLeader()); @@ -270,7 +271,7 @@ public class GuildService implements INetworkDispatch { Map candidates = guild.getLeaderCandidates(); - if (candidates.size() <= 1) { + if (candidates == null || candidates.size() <= 1) { actor.sendSystemMessage("@guild:vote_no_candidates", DisplayType.Broadcast); return; } @@ -290,12 +291,29 @@ public class GuildService implements INetworkDispatch { core.suiService.openSUIWindow(window); } + public void handleRunForLeader(CreatureObject actor, Guild guild) { + if (guild.isRunningForLeader(actor.getObjectID())) { + actor.sendSystemMessage("@guild:vote_register_dupe", DisplayType.Broadcast); + return; + } else guild.getLeaderCandidates().put(actor.getObjectID(), 1); + + actor.sendSystemMessage("@guild:vote_register_congrats", DisplayType.Broadcast); + } + + public void handleUnregisterForLeader(CreatureObject actor, Guild guild) { + if (!guild.isRunningForLeader(actor.getObjectID())) { + return; + } else guild.getLeaderCandidates().remove(actor.getObjectID()); + + actor.sendSystemMessage("@guild:vote_unregistered", DisplayType.Broadcast); + } + public void handleVoteForLeader(CreatureObject actor, Guild guild) { SUIWindow window = core.suiService.createListBox(ListBoxType.LIST_BOX_OK_CANCEL, "@guild:leader_vote_t", "@guild:leader_vote_d", new TreeMap(), actor, null, 0); Map candidates = guild.getLeaderCandidates(); - candidates.keySet().stream().forEach(candidateId -> { + for (Long candidateId : candidates.keySet()) { if (candidateId == guild.getLeader()) { window.addListBoxMenuItem("Incumbent: " + guild.getLeaderName() + " -- Votes: " + String.valueOf(candidates.get(candidateId)), candidateId); } else { @@ -303,14 +321,19 @@ public class GuildService implements INetworkDispatch { window.addListBoxMenuItem("Challenger: " + candidate.getName() + " -- Votes: " + String.valueOf(candidates.get(candidateId)), candidateId); } + } - }); - Vector returnList = new Vector(); returnList.add("List.lstList:SelectedRow"); window.addHandler(0, "", Trigger.TRIGGER_OK, returnList, (owner, eventType, resultList) -> { - long voteId = Long.parseLong(resultList.get(0)); + + int index = Integer.parseInt(resultList.get(0)); + + long voteId = window.getObjectIdByIndex(index); + + if(voteId == 0) + return; GuildMember voter = guild.getMember(actor.getObjectID()); if (voter == null) From 724a6a6c5fdb6396cc0ce43f91f720bfab65eaaa Mon Sep 17 00:00:00 2001 From: Zing Date: Wed, 2 Jul 2014 18:05:48 -0700 Subject: [PATCH 87/92] Modified Removed Factional Comm-link until pet AI is ready. --- scripts/gcw_rewards_imperial.py | 2 +- scripts/gcw_rewards_rebel.py | 20 +++++++++++--------- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/scripts/gcw_rewards_imperial.py b/scripts/gcw_rewards_imperial.py index f94cf77b..a475d9db 100644 --- a/scripts/gcw_rewards_imperial.py +++ b/scripts/gcw_rewards_imperial.py @@ -269,7 +269,7 @@ def lieutenantHandler(owner): window.addListBoxMenuItem('HQ Field Hospital 3600000',4) window.addListBoxMenuItem('SF HQ Tactical Center 2325000',5) window.addListBoxMenuItem('SF HQ Detachment Headquarters 4500000',6) - window.addListBoxMenuItem('Factional Comm link 200000', 7) + #window.addListBoxMenuItem('Factional Comm link 200000', 7) window.setProperty('btnOk:visible', 'True') window.setProperty('btnCancel:visible', 'True') window.setProperty('btnOk:Text', '@ok') diff --git a/scripts/gcw_rewards_rebel.py b/scripts/gcw_rewards_rebel.py index d0ac37cf..e9e099ec 100644 --- a/scripts/gcw_rewards_rebel.py +++ b/scripts/gcw_rewards_rebel.py @@ -204,10 +204,10 @@ def seniorSergeantHandler(owner): window.addListBoxMenuItem('Small Block Turret 120000',0) window.addListBoxMenuItem('Small Dish Turret 120000',1) window.addListBoxMenuItem('Small Tower Turret 120000',2) - #window.addListBoxMenuItem('DRX-55 Mine 12000',3) - #window.addListBoxMenuItem('SR-88 Cyro Mine 12000',4) - #window.addListBoxMenuItem('XG Mine 12000',5) - window.addListBoxMenuItem('Painting We will never surrender 375000',6) + window.addListBoxMenuItem('Painting We will never surrender 375000',3) + #window.addListBoxMenuItem('DRX-55 Mine 12000',4) + #window.addListBoxMenuItem('SR-88 Cyro Mine 12000',5) + #window.addListBoxMenuItem('XG Mine 12000',6) window.setProperty('btnOk:visible', 'True') window.setProperty('btnCancel:visible', 'True') window.setProperty('btnOk:Text', '@ok') @@ -486,20 +486,22 @@ def seniorSergeantRewards(owner, window, eventType, returnList): return if returnList.get(0)=='3': + paintingNeverSurrender(object, owner) + return + + if returnList.get(0)=='4': drx55Mine(object, owner) return - if returnList.get(0)=='4': + if returnList.get(0)=='5': sr88CryoMine(object, owner) return - if returnList.get(0)=='5': + if returnList.get(0)=='6': xgMine(object, owner) return - if returnList.get(0)=='6': - paintingNeverSurrender(object, owner) - return + def sergeantMajorRewards(owner, window, eventType, returnList): From 8d05655c890f74fda9d0feb11822fa8a65684097 Mon Sep 17 00:00:00 2001 From: Treeku Date: Thu, 3 Jul 2014 02:30:26 +0100 Subject: [PATCH 88/92] Fixed size issue with SWGList resetAll --- src/resources/objects/SWGList.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/resources/objects/SWGList.java b/src/resources/objects/SWGList.java index 781a676d..8bc43472 100644 --- a/src/resources/objects/SWGList.java +++ b/src/resources/objects/SWGList.java @@ -317,7 +317,7 @@ public class SWGList implements List, Serializable { public boolean set(List list) { synchronized(objectMutex) { - byte[] newListData = { 0x03 }; + byte[] newListData = { }; if (!list.isEmpty()) { for (E element : list) { @@ -331,9 +331,15 @@ public class SWGList implements List, Serializable { } } + IoBuffer buffer = Delta.createBuffer(3 + newListData.length); + buffer.put((byte) 3); + buffer.put((short) list.size()); + buffer.put(newListData); + newListData = buffer.array(); + this.list = list; - updateCounter++; + updateCounter += list.size(); queue(newListData); return true; From d799398283f8a95e1ec7b44b482b6cd078ab3d2c Mon Sep 17 00:00:00 2001 From: Treeku Date: Thu, 3 Jul 2014 02:35:16 +0100 Subject: [PATCH 89/92] Fixed a minor syntax error --- src/resources/objects/SWGList.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/resources/objects/SWGList.java b/src/resources/objects/SWGList.java index 8bc43472..4160f6c0 100644 --- a/src/resources/objects/SWGList.java +++ b/src/resources/objects/SWGList.java @@ -333,7 +333,7 @@ public class SWGList implements List, Serializable { IoBuffer buffer = Delta.createBuffer(3 + newListData.length); buffer.put((byte) 3); - buffer.put((short) list.size()); + buffer.putShort((short) list.size()); buffer.put(newListData); newListData = buffer.array(); From d8525822b86587cb8548fc35e7cbf87f6ad8e08d Mon Sep 17 00:00:00 2001 From: Zing Date: Wed, 2 Jul 2014 19:17:03 -0700 Subject: [PATCH 90/92] Fixed Jetpack Height mod. --- scripts/object/mobile/vehicle/jetpack.py | 1 + scripts/object/mobile/vehicle/tcg_hk47_jetpack.py | 1 + scripts/object/mobile/vehicle/tcg_merr_sonn_jt12_jetpack.py | 1 + 3 files changed, 3 insertions(+) diff --git a/scripts/object/mobile/vehicle/jetpack.py b/scripts/object/mobile/vehicle/jetpack.py index ccad8904..522f3cbf 100644 --- a/scripts/object/mobile/vehicle/jetpack.py +++ b/scripts/object/mobile/vehicle/jetpack.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setCustomizationVariable('/private/index_hover_height', 40) return \ No newline at end of file diff --git a/scripts/object/mobile/vehicle/tcg_hk47_jetpack.py b/scripts/object/mobile/vehicle/tcg_hk47_jetpack.py index ccad8904..522f3cbf 100644 --- a/scripts/object/mobile/vehicle/tcg_hk47_jetpack.py +++ b/scripts/object/mobile/vehicle/tcg_hk47_jetpack.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setCustomizationVariable('/private/index_hover_height', 40) return \ No newline at end of file diff --git a/scripts/object/mobile/vehicle/tcg_merr_sonn_jt12_jetpack.py b/scripts/object/mobile/vehicle/tcg_merr_sonn_jt12_jetpack.py index ccad8904..522f3cbf 100644 --- a/scripts/object/mobile/vehicle/tcg_merr_sonn_jt12_jetpack.py +++ b/scripts/object/mobile/vehicle/tcg_merr_sonn_jt12_jetpack.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setCustomizationVariable('/private/index_hover_height', 40) return \ No newline at end of file From ad92b947318a3accaea66630f3ee6b491d5afb52 Mon Sep 17 00:00:00 2001 From: Ziggeh Date: Thu, 3 Jul 2014 06:42:33 +0200 Subject: [PATCH 91/92] Fixed issue with getting items from containers The method should now work with any container that, even ones that aren't related to PlayerObject and CreatureObject. --- src/services/object/ObjectService.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/services/object/ObjectService.java b/src/services/object/ObjectService.java index 1c9940da..d1849ab9 100644 --- a/src/services/object/ObjectService.java +++ b/src/services/object/ObjectService.java @@ -730,11 +730,10 @@ public class ObjectService implements INetworkDispatch { return objectId; } - - public Vector getItemsInContainerByStfName(CreatureObject creature, String containerName, String stfName) { + public Vector getItemsInContainerByStfName(CreatureObject creature, long containerId, String stfName) { Vector itemList = new Vector(); - SWGObject container = creature.getSlottedObject(containerName); + SWGObject container = getObject(containerId); container.viewChildren(creature, false, false, (item) -> { if (item.getStfName() == stfName) { itemList.add(item); } }); From dd7d93b9163fd5968ca1db9091187541321f4d90 Mon Sep 17 00:00:00 2001 From: Mesagoppinmypants Date: Sat, 5 Jul 2014 11:06:50 -0400 Subject: [PATCH 92/92] Removed un-used and un-needed file This was useful before we had the services built up to what they are now. --- scripts/demo.py | 474 ------------------------------------------------ 1 file changed, 474 deletions(-) delete mode 100644 scripts/demo.py diff --git a/scripts/demo.py b/scripts/demo.py deleted file mode 100644 index 1b5dbf3d..00000000 --- a/scripts/demo.py +++ /dev/null @@ -1,474 +0,0 @@ -import sys - -def CreateStartingCharacter(core, object): - - #testObject = core.objectService.createObject('object/weapon/ranged/rifle/shared_rifle_t21.iff', object.getPlanet()) - #testObject.setCustomName('This is a Jython Rifle') - #testObject.setStringAttribute('crafter', 'Light') - #testObject.setDamageType('@obj_attr_n:armor_eff_energy') - #testObject.setElementalType('@obj_attr_n:elemental_cold') - #testObject.setStringAttribute('cat_wpn_damage.damage', '0-0') - #testObject.setMinDamage(425) - #testObject.setMaxDamage(1150) - #testObject.setElementalDamage(50) - #testObject.setIntAttribute('cat_wpn_damage.weapon_dps', testObject.getDamagePerSecond()) - #testObject.setIntAttribute('cat_skill_mod_bonus.@stat_n:precision_modified', 35) - #object.addSkillMod('kinetic' , 0) - #object.addSkillMod('energy' , 0) - #object.addSkillMod('heat' , 0) - #object.addSkillMod('cold' , 0) - #object.addSkillMod('acid' , 0) - #object.addSkillMod('electricity' , 0) - #object.addSkillMod('combat_strikethrough_value' , 50) - #object.addSkillMod('display_only_dodge' , 2000) - #object.addSkillMod('display_only_parry' , 1000) - #object.addSkillMod('display_only_strikethrough' , 500) - #object.addSkillMod('display_only_critical' , 2500) - #object.addSkillMod('display_only_evasion' , 1000) - #object.addSkillMod('display_only_glancing_blow' , 750) - #object.addSkillMod('display_only_block' , 2000) - #object.addSkillMod('combat_block_value' , 0) - -# #inventory = object.getSlottedObject('inventory') -# #if not inventory: -# # return -# #inventory.add(testObject) - -# #testClothing = core.objectService.createObject('object/tangible/wearables/cape/shared_cape_rebel_01.iff', object.getPlanet()) -# #testClothing.setCustomName('Test Cape') -# #testCloak = core.objectService.createObject('object/tangible/wearables/robe/shared_robe_jedi_dark_s05.iff', object.getPlanet()) -# #testCloak.setCustomName('Test Cloak') - -# #inventory.add(testClothing) -# #inventory.add(testCloak) -# #profession = object.getSlottedObject('ghost').getProfession() -# #if profession == 'commando_1a': -# # object.addSkillMod('expertise_devastation_bonus' , 20) -# # testObject2 = core.objectService.createObject('object/weapon/ranged/heavy/shared_heavy_rocket_launcher.iff', object.getPlanet()) -# # testObject2.setCustomName('Test Heavy Weapon') -# # testObject2.setStringAttribute('crafter', 'Light') -# # testObject2.setDamageType('@obj_attr_n:armor_eff_kinetic') -# # testObject2.setElementalType('@obj_attr_n:elemental_heat') -# # testObject2.setStringAttribute('cat_wpn_damage.damage', '0-0') -# # testObject2.setMinDamage(550) -# # testObject2.setMaxDamage(1315) -# # testObject2.setElementalDamage(216) -# # testObject2.setIntAttribute('cat_wpn_damage.weapon_dps', testObject2.getDamagePerSecond()) -# # inventory.add(testObject2) -# -# addProfessionAbilities(core, object, profession) - -# heroism1 = core.objectService.createObject('object/tangible/wearables/necklace/shared_necklace_s10.iff', object.getPlanet()) - # heroism1.setStfFilename('static_item_n') - # heroism1.setStfName('item_necklace_set_hero_01_01') - # heroism1.setDetailFilename('static_item_d') - # heroism1.setDetailName('item_necklace_set_hero_01_01') -# heroism1.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_hero_1') -# heroism1.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_hero_2') -# heroism1.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_hero_3') -# heroism1.setIntAttribute('cat_stat_mod_bonus.food_luck_modified' , 30) -# heroism1.setIntAttribute('cat_stat_mod_bonus.food_precision_modified' , 30) -# heroism1.setIntAttribute('cat_stat_mod_bonus.food_strength_modified' , 30) - - - # inventory = object.getSlottedObject('inventory') - # if not inventory: - # return - # inventory.add(heroism1) - - # heroism2 = core.objectService.createObject('object/tangible/wearables/bracelet/shared_bracelet_s03_r.iff', object.getPlanet()) - # heroism2.setStfFilename('static_item_n') - # heroism2.setStfName('item_bracelet_r_set_hero_01_01') - # heroism2.setDetailFilename('static_item_d') - # heroism2.setDetailName('item_bracelet_r_set_hero_01_01') - # heroism2.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_hero_1') - # heroism2.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_hero_2') - # heroism2.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_hero_3') - # heroism2.setIntAttribute('cat_stat_mod_bonus.food_luck_modified' , 30) - # heroism2.setIntAttribute('cat_stat_mod_bonus.food_precision_modified' , 30) - # heroism2.setIntAttribute('cat_stat_mod_bonus.food_strength_modified' , 30) - - -# inventory = object.getSlottedObject('inventory') -# if not inventory: -# return -# inventory.add(heroism2) - -# heroism3 = core.objectService.createObject('object/tangible/wearables/bracelet/shared_bracelet_s03_l.iff', object.getPlanet()) -# heroism3.setStfFilename('static_item_n') -# heroism3.setStfName('item_bracelet_l_set_hero_01_01') -# heroism3.setDetailFilename('static_item_d') -# heroism3.setDetailName('item_bracelet_l_set_hero_01_01') -# heroism3.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_hero_1') -# heroism3.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_hero_2') -# heroism3.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_hero_3') - # heroism3.setIntAttribute('cat_stat_mod_bonus.food_luck_modified' , 30) - # heroism3.setIntAttribute('cat_stat_mod_bonus.food_precision_modified' , 30) - # heroism3.setIntAttribute('cat_stat_mod_bonus.food_strength_modified' , 30) - - - # inventory = object.getSlottedObject('inventory') - # if not inventory: - # return - # inventory.add(heroism3) - - # heroism4 = core.objectService.createObject('object/tangible/wearables/ring/shared_ring_s04.iff', object.getPlanet()) - # heroism4.setStfFilename('static_item_n') - # heroism4.setStfName('item_ring_set_hero_01_01') - # heroism4.setDetailFilename('static_item_d') - # heroism4.setDetailName('item_ring_set_hero_01_01') - # heroism4.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_hero_1') - # heroism4.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_hero_2') - # heroism4.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_hero_3') - # heroism4.setIntAttribute('cat_stat_mod_bonus.food_luck_modified' , 30) - # heroism4.setIntAttribute('cat_stat_mod_bonus.food_precision_modified' , 30) - # heroism4.setIntAttribute('cat_stat_mod_bonus.food_strength_modified' , 30) - - -# inventory = object.getSlottedObject('inventory') -# if not inventory: -# return -# inventory.add(heroism4) - - # heroism5 = core.objectService.createObject('object/tangible/wearables/ring/shared_ring_s02.iff', object.getPlanet()) - # heroism5.setStfFilename('static_item_n') - # heroism5.setStfName('item_ring_a_set_hero') - # heroism5.setDetailFilename('static_item_d') - # heroism5.setDetailName('item_ring_a_set_hero') - # heroism5.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_hero_1') - # heroism5.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_hero_2') - # heroism5.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_hero_3') - # heroism5.setIntAttribute('cat_stat_mod_bonus.food_luck_modified' , 30) - # heroism5.setIntAttribute('cat_stat_mod_bonus.food_precision_modified' , 30) - # heroism5.setIntAttribute('cat_stat_mod_bonus.food_strength_modified' , 30) - - - # inventory = object.getSlottedObject('inventory') - # if not inventory: - # return - # inventory.add(heroism5) - return - -def addProfessionAbilities(core, object, profession): - -# if profession == 'force_sensitive_1a': -# testObject = core.objectService.createObject('object/weapon/melee/2h_sword/crafted_saber/shared_sword_lightsaber_two_handed_gcw_s01_gen5.iff', object.getPlanet()) -# testObject.setCustomName('Lightsaber') -# testObject.setStringAttribute('crafter', 'Light') -# testObject.setDamageType('@obj_attr_n:armor_eff_energy') -# testObject.setElementalType('@obj_attr_n:elemental_cold') -# testObject.setStringAttribute('cat_wpn_damage.damage', '0-0') -# testObject.setMinDamage(600) -# testObject.setMaxDamage(1190) -# testObject.setElementalDamage(72) -# testObject.setIntAttribute('cat_wpn_damage.weapon_dps', testObject.getDamagePerSecond()) -# inventory = object.getSlottedObject('inventory') -# inventory.add(testObject) - - ##Case Sensitive - # object.addAbility('fs_sweep_7') - # object.addAbility('fs_drain_7') - # object.addAbility('forceRun') - # object.addAbility('fs_dm_cc_crit_5') - # object.addAbility('fs_maelstrom_5') - # object.addAbility('fs_ae_dm_cc_6') - # object.addAbility('fs_sh_3') - # object.addAbility('fs_dm_cc_6') - # object.addAbility('fs_dm_7') - # object.addAbility('fs_buff_def_1_1') - # object.addAbility('fs_buff_ca_1') - # object.addAbility('saberBlock') - #elif profession == 'medic_1a': - # object.addAbility('me_bacta_bomb_5') - # object.addAbility('me_bacta_grenade_5') - # object.addAbility('me_bacta_ampule_6') - # object.addAbility('me_ae_heal_6') - # object.addAbility('me_dm_8') - # object.addAbility('me_dm_dot_6') - # object.addAbility('me_drag_1') - # object.addAbility('me_rv_pvp_single') - # object.addAbility('me_rv_area') - # object.addAbility('me_rv_pvp_area') - # object.addAbility('me_reckless_stimulation_6') - # object.addAbility('me_sh_1') - # object.addAbility('me_stasis_1') - # object.addAbility('me_stasis_self_1') - # object.addAbility('me_thyroid_rupture_1') - # object.addAbility('me_traumatize_5') - # object.addAbility('me_induce_insanity_1') - #elif profession == 'commando_1a': - # object.addAbility('co_del_ae_cc_2_2') - # object.addAbility('co_del_ae_dm_3') - # object.addAbility('co_del_ae_cc_1_3') - # object.addAbility('co_hw_dot') - # object.addAbility('co_ae_hw_dot') - #elif profession == 'bounty_hunter_1a': - #object.addAbility('bh_shields_1') - #object.addAbility('bh_dm_8') - #object.addAbility('bh_sh_3') - #object.addAbility('bh_armor_sprint_1') - #object.addAbility('bh_prescience') - #object.addAbility('bh_dm_crit_8') - #object.addAbility('crippleShot') - #object.addAbility('bh_fumble_6') - #object.addAbility('bh_intimidate_6') - #object.addAbility('bh_flawless_strike') - - # direfate1 = core.objectService.createObject('object/tangible/wearables/necklace/shared_necklace_s03.iff', object.getPlanet()) - # direfate1.setStfFilename('static_item_n') - # direfate1.setStfName('item_necklace_set_bh_utility_b_01_01') - # direfate1.setDetailFilename('static_item_d') - # direfate1.setDetailName('item_necklace_set_bh_utility_b_01_01') - # direfate1.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_bh_utility_b_1') - # direfate1.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_utility_b_2') - # direfate1.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_utility_b_3') - # direfate1.setIntAttribute('cat_skill_mod_bonus.@stat_n:bh_dire_root' , 1) - # direfate1.setIntAttribute('cat_skill_mod_bonus.@stat_n:bh_dire_snare' , 1) - # direfate1.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_dm_cc' , 2) - - # inventory = object.getSlottedObject('inventory') - # if not inventory: - # return - # inventory.add(direfate1) - - # direfate2 = core.objectService.createObject('object/tangible/wearables/bracelet/shared_bracelet_s04_r.iff', object.getPlanet()) - # direfate2.setStfFilename('static_item_n') - # direfate2.setStfName('item_bracelet_r_set_bh_utility_b_01_01') - # direfate2.setDetailFilename('static_item_d') - # direfate2.setDetailName('item_bracelet_r_set_bh_utility_b_01_01') - # direfate2.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_utility_b_2') - # direfate2.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_utility_b_3') - # direfate2.setIntAttribute('cat_skill_mod_bonus.@stat_n:bh_dire_root' , 1) - # direfate2.setIntAttribute('cat_skill_mod_bonus.@stat_n:bh_dire_snare' , 1) - # direfate2.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_dm_cc' , 2) - - # inventory = object.getSlottedObject('inventory') - # if not inventory: - # return - # inventory.add(direfate2) - - # direfate3 = core.objectService.createObject('object/tangible/wearables/bracelet/shared_bracelet_s04_l.iff', object.getPlanet()) - # direfate3.setStfFilename('static_item_n') - # direfate3.setStfName('item_bracelet_l_set_bh_utility_b_01_01') - # direfate3.setDetailFilename('static_item_d') - # direfate3.setDetailName('item_bracelet_l_set_bh_utility_b_01_01') - # direfate3.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_bh_utility_b_1') - # direfate3.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_utility_b_2') - # direfate3.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_utility_b_3') - # direfate3.setIntAttribute('cat_skill_mod_bonus.@stat_n:bh_dire_root' , 1) - # direfate3.setIntAttribute('cat_skill_mod_bonus.@stat_n:bh_dire_snare' , 1) - # direfate3.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_dm_cc' , 2) - - # inventory = object.getSlottedObject('inventory') - # if not inventory: - # return - # inventory.add(direfate3) - - # direfate4 = core.objectService.createObject('object/tangible/wearables/ring/shared_ring_s01.iff', object.getPlanet()) - # direfate4.setStfFilename('static_item_n') - # direfate4.setStfName('item_ring_set_bh_utility_b_01_01') - # direfate4.setDetailFilename('static_item_d') - # direfate4.setDetailName('item_ring_set_bh_utility_b_01_01') - # direfate4.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_bh_utility_b_1') - # direfate4.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_utility_b_2') - # direfate4.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_utility_b_3') - # direfate4.setIntAttribute('cat_skill_mod_bonus.@stat_n:bh_dire_root' , 1) - # direfate4.setIntAttribute('cat_skill_mod_bonus.@stat_n:bh_dire_snare' , 1) - # direfate4.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_dm_cc' , 2) - - # inventory = object.getSlottedObject('inventory') - # if not inventory: - # return - # inventory.add(direfate4) - - # direfate5 = core.objectService.createObject('object/tangible/wearables/ring/shared_ring_s03.iff', object.getPlanet()) - # direfate5.setStfFilename('static_item_n') - # direfate5.setStfName('item_ring_a_set_bh_utility_b') - # direfate5.setDetailFilename('static_item_d') - # direfate5.setDetailName('item_ring_a_set_bh_utility_b') - # direfate5.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_bh_utility_b_1') - # direfate5.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_utility_b_2') - # direfate5.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_utility_b_3') - # direfate5.setIntAttribute('cat_skill_mod_bonus.@stat_n:bh_dire_root' , 1) - # direfate5.setIntAttribute('cat_skill_mod_bonus.@stat_n:bh_dire_snare' , 1) - # direfate5.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_dm_cc' , 2) - - # inventory = object.getSlottedObject('inventory') - # if not inventory: - # return - # inventory.add(direfate5) - - # flawless1 = core.objectService.createObject('object/tangible/wearables/necklace/shared_necklace_s02.iff', object.getPlanet()) - # flawless1.setStfFilename('static_item_n') - # flawless1.setStfName('item_necklace_set_bh_utility_a_01_01') - # flawless1.setDetailFilename('static_item_d') - # flawless1.setDetailName('item_necklace_set_bh_utility_a_01_01') - # flawless1.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_bh_utility_a_1') - # flawless1.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_utility_a_2') - # flawless1.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_utility_a_3') - # flawless1.setIntAttribute('cat_stat_mod_bonus.food_luck_modified' , 30) - # flawless1.setIntAttribute('cat_stat_mod_bonus.food_precision_modified' , 50) - - # inventory = object.getSlottedObject('inventory') - # if not inventory: - # return - # inventory.add(flawless1) - - # flawless2 = core.objectService.createObject('object/tangible/wearables/bracelet/shared_bracelet_s03_r.iff', object.getPlanet()) - # flawless2.setStfFilename('static_item_n') - # flawless2.setStfName('item_bracelet_r_set_bh_utility_a_01_01') - # flawless2.setDetailFilename('static_item_d') - # flawless2.setDetailName('item_bracelet_r_set_bh_utility_a_01_01') - # flawless2.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_bh_utility_b_1') - # flawless2.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_utility_b_2') - # flawless2.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_utility_b_3') - # flawless2.setIntAttribute('cat_stat_mod_bonus.food_luck_modified' , 30) - # flawless2.setIntAttribute('cat_stat_mod_bonus.food_precision_modified' , 50) - - # inventory = object.getSlottedObject('inventory') - # if not inventory: - # return - # inventory.add(flawless2) - - # flawless3 = core.objectService.createObject('object/tangible/wearables/bracelet/shared_bracelet_s03_l.iff', object.getPlanet()) - # flawless3.setStfFilename('static_item_n') - # flawless3.setStfName('item_bracelet_l_set_bh_utility_a_01_01') - # flawless3.setDetailFilename('static_item_d') - # flawless3.setDetailName('item_bracelet_l_set_bh_utility_a_01_01') - # flawless3.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_bh_utility_b_1') - # flawless3.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_utility_b_2') - # flawless3.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_utility_b_3') - # flawless3.setIntAttribute('cat_stat_mod_bonus.food_luck_modified' , 30) - # flawless3.setIntAttribute('cat_stat_mod_bonus.food_precision_modified' , 50) - - # inventory = object.getSlottedObject('inventory') - # if not inventory: - # return - # inventory.add(flawless3) - - # flawless4 = core.objectService.createObject('object/tangible/wearables/ring/shared_ring_s02.iff', object.getPlanet()) - # flawless4.setStfFilename('static_item_n') - # flawless4.setStfName('item_ring_set_bh_utility_a_01_01') - # flawless4.setDetailFilename('static_item_d') - # flawless4.setDetailName('item_ring_set_bh_utility_a_01_01') - # flawless4.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_bh_utility_b_1') - # flawless4.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_utility_b_2') - # flawless4.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_utility_b_3') - # flawless4.setIntAttribute('cat_stat_mod_bonus.food_luck_modified' , 30) - # flawless4.setIntAttribute('cat_stat_mod_bonus.food_precision_modified' , 50) - - # inventory = object.getSlottedObject('inventory') - # if not inventory: - # return - # inventory.add(flawless4) - - # flawless5 = core.objectService.createObject('object/tangible/wearables/ring/shared_ring_s04.iff', object.getPlanet()) - # flawless5.setStfFilename('static_item_n') - # flawless5.setStfName('item_ring_a_set_bh_utility_a') - # flawless5.setDetailFilename('static_item_d') - # flawless5.setDetailName('item_ring_a_set_bh_utility_a') - # flawless5.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_bh_utility_b_1') - # flawless5.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_utility_b_2') - # flawless5.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_utility_b_3') - # flawless5.setIntAttribute('cat_stat_mod_bonus.food_luck_modified' , 30) - # flawless5.setIntAttribute('cat_stat_mod_bonus.food_precision_modified' , 50) - - # inventory = object.getSlottedObject('inventory') - # if not inventory: - # return - # inventory.add(flawless5) - - # enforcer1 = core.objectService.createObject('object/tangible/wearables/necklace/shared_necklace_s01.iff', object.getPlanet()) - # enforcer1.setStfFilename('static_item_n') - # enforcer1.setStfName('item_necklace_set_bh_dps_01_01') - # enforcer1.setDetailFilename('static_item_d') - # enforcer1.setDetailName('item_necklace_set_bh_dps_01_01') - # enforcer1.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_bh_dps_1') - # enforcer1.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_dps_2') - # enforcer1.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_dps_3') - # enforcer1.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_dm' , 1) - # enforcer1.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_dm_crit' , 1) - # enforcer1.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_buff_duration_line_bh_return_fire' , 1) - # enforcer1.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_dm' , 1) - - # inventory = object.getSlottedObject('inventory') - # if not inventory: - # return - # inventory.add(enforcer1) - - # enforcer2 = core.objectService.createObject('object/tangible/wearables/bracelet/shared_bracelet_s02_r.iff', object.getPlanet()) - # enforcer2.setStfFilename('static_item_n') - # enforcer2.setStfName('item_bracelet_r_set_bh_dps_01_01') - # enforcer2.setDetailFilename('static_item_d') - # enforcer2.setDetailName('item_bracelet_r_set_dps_01_01') - # enforcer2.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_bh_dps_1') - # enforcer2.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_dps_2') - # enforcer2.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_dps_3') - # enforcer2.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_dm' , 1) - # enforcer2.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_dm_crit' , 1) - # enforcer2.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_buff_duration_line_bh_return_fire' , 1) - # enforcer2.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_dm' , 1) - - # inventory = object.getSlottedObject('inventory') - # if not inventory: - # return - # inventory.add(enforcer2) - - # enforcer3 = core.objectService.createObject('object/tangible/wearables/bracelet/shared_bracelet_s02_l.iff', object.getPlanet()) - # enforcer3.setStfFilename('static_item_n') - # enforcer3.setStfName('item_bracelet_l_set_bh_dps_01_01') - #enforcer3.setDetailFilename('static_item_d') - # enforcer3.setDetailName('item_bracelet_l_set_bh_dps_01_01') - # enforcer3.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_bh_dps_1') - # enforcer3.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_dps_2') - # enforcer3.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_dps_3') - #enforcer3.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_dm' , 1) - # enforcer3.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_dm_crit' , 1) - # enforcer3.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_buff_duration_line_bh_return_fire' , 1) - # enforcer3.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_dm' , 1) - - #inventory = object.getSlottedObject('inventory') - #if not inventory: - # return - #inventory.add(enforcer3) - - #enforcer4 = core.objectService.createObject('object/tangible/wearables/ring/shared_ring_s01.iff', object.getPlanet()) - #enforcer4.setStfFilename('static_item_n') - #enforcer4.setStfName('item_ring_set_bh_dps_01_01') - #enforcer4.setDetailFilename('static_item_d') - #enforcer4.setDetailName('item_ring_set_bh_dps_01_01') - #enforcer4.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_bh_dps_1') - #enforcer4.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_dps_2') - #enforcer4.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_dps_3') - #enforcer4.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_dm' , 1) - #enforcer4.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_dm_crit' , 1) - #enforcer4.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_buff_duration_line_bh_return_fire' , 1) - #enforcer4.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_dm' , 1) - - #inventory = object.getSlottedObject('inventory') - #if not inventory: - # return - #inventory.add(enforcer4) - - #enforcer5 = core.objectService.createObject('object/tangible/wearables/ring/shared_ring_s03.iff', object.getPlanet()) - #enforcer5.setStfFilename('static_item_n') - #enforcer5.setStfName('item_ring_a_set_bh_dps') - #enforcer5.setDetailFilename('static_item_d') - #enforcer5.setDetailName('item_ring_a_set_bh_dps') - #enforcer5.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_bh_dps_1') - #enforcer5.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_dps_2') - #enforcer5.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_dps_3') - #enforcer5.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_dm' , 1) - #enforcer5.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_dm_crit' , 1) - #enforcer5.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_buff_duration_line_bh_return_fire' , 1) - #enforcer5.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_dm' , 1) - - #inventory = object.getSlottedObject('inventory') - #if not inventory: - # return - #inventory.add(enforcer5) - #return - #return - - - return