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. diff --git a/options.cfg b/options.cfg index 03abf4cf..bf00d91a 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/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/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/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/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 diff --git a/scripts/commands/setgodmode.py b/scripts/commands/setgodmode.py index 84cab742..9874cbd3 100644 --- a/scripts/commands/setgodmode.py +++ b/scripts/commands/setgodmode.py @@ -3,6 +3,12 @@ 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 resources.datatables import GcwRank +from services.gcw import GCWService + def setup(): return @@ -132,10 +138,51 @@ 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 == '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) 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/commands/transferitemarmor.py b/scripts/commands/transferitemarmor.py index 8e166cbc..6bf734c3 100644 --- a/scripts/commands/transferitemarmor.py +++ b/scripts/commands/transferitemarmor.py @@ -12,51 +12,47 @@ 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 - - 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) + + replacedObject = None + slotName = None + replacedObjects = [] + slotNames = None + + if actor == container: + slotNames = container.getSlotNamesForObject(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 container == actor.getSlottedObject('appearance_inventory'): - actor.addObjectToAppearanceEquipList(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.getTemplate().find('/wearables/') or target.getTemplate().find('/weapon/'): + core.equipmentService.equip(actor, 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) + core.equipmentService.unequip(actor, object) + 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..d5d42299 100644 --- a/scripts/commands/transferitemmisc.py +++ b/scripts/commands/transferitemmisc.py @@ -2,102 +2,96 @@ 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) + + if target.getTemplate().find('/wearables/') or target.getTemplate().find('/weapon/'): + core.equipmentService.equip(actor, target) + + for object in replacedObjects: + core.equipmentService.unequip(actor, object) # Needs to be verified due to the new structure of the script + + oldContainer.transferTo(actor, container, target) if oldContainer == actor.getSlottedObject('appearance_inventory'): 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..c75635a3 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,28 @@ 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) - - oldContainer.transferTo(actor, container, target) - - if actor == container: - if target.getTemplate().find('/wearables/') or target.getTemplate().find('/weapon/'): - core.equipmentService.equip(actor, target) + + 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) - #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()) + + oldContainer.transferTo(actor, container, target) + return \ No newline at end of file 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/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/conversation/reb_recruiter.py b/scripts/conversation/reb_recruiter.py index d1b8a1a3..8a8e2af0 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); + 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/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 diff --git a/scripts/gcw_rewards_imperial.py b/scripts/gcw_rewards_imperial.py new file mode 100644 index 00000000..a475d9db --- /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/gcw_rewards_rebel.py b/scripts/gcw_rewards_rebel.py new file mode 100644 index 00000000..e9e099ec --- /dev/null +++ b/scripts/gcw_rewards_rebel.py @@ -0,0 +1,1280 @@ +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): + 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') + 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.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.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.COMMANDER: + window.addListBoxMenuItem('Commander', 9) + + if actor.getCurrentRank() >= GcwRank.COLONEL: + window.addListBoxMenuItem('Colonel', 10) + + if actor.getCurrentRank() >= GcwRank.GENERAL: + window.addListBoxMenuItem('General', 11) + + 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('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') + 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': + paintingNeverSurrender(object, owner) + return + + if returnList.get(0)=='4': + drx55Mine(object, owner) + return + + if returnList.get(0)=='5': + sr88CryoMine(object, owner) + return + + if returnList.get(0)=='6': + xgMine(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(), '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 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(), '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): + 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() + 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(), '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): + 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()) + 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(), '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): + 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(), 'factional_laser_carbine') + 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(), 'factional_scout_pistol') + 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(), 'factional_metal_staff') + 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(), '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 exceptionalPistol(object, owner): + if owner.getCashCredits() >= 200000: + owner.setCashCredits(owner.getCashCredits() - 200000) + core = main.NGECore.getInstance() + 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 + +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/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/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/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 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/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/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/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/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' 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 bc2abee6..d2e68e52 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'] 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/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..0475fe3c --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/bek_rabor.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('bek_rabor') + mobileTemplate.setStfFilename('npc_spawner_n') + 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/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/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..f9a7aa3e --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/juntah_herm.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 resources.datatables import FactionStatus +from java.util import Vector + + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('juntah_herm') + mobileTemplate.setStfFilename('npc_spawner_n') + 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/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/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 ccad8904..ab226baa 100644 --- a/scripts/object/intangible/vehicle/barc_speeder_rebel_pcd.py +++ b/scripts/object/intangible/vehicle/barc_speeder_rebel_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', 'Rebel') 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/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/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 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/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 diff --git a/scripts/object/tangible/collection/rare_pistol_blackfalcon.py b/scripts/object/tangible/collection/rare_pistol_blackfalcon.py index ccad8904..163da641 100644 --- a/scripts/object/tangible/collection/rare_pistol_blackfalcon.py +++ b/scripts/object/tangible/collection/rare_pistol_blackfalcon.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + object.setAttachment('CollectionItemName', 'blackfalcon_01') + object.setAttachment('radial_filename', 'item/world_collection') + return 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..b10205e1 --- /dev/null +++ b/scripts/object/tangible/component/weapon/lightsaber/item_color_crystal_02_20.py @@ -0,0 +1,16 @@ +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') + 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..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 @@ -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', '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 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/object/tangible/deed/vehicle_deed/barc_speeder_deed.py b/scripts/object/tangible/deed/vehicle_deed/barc_speeder_deed.py index af21fb67..5bd711f9 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,10 @@ 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 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()) - - 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 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/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/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 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 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 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/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_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 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 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..4cb55547 --- /dev/null +++ b/scripts/object/tangible/loot/generic_usable/item_consumable_detect_hidden_02_01.py @@ -0,0 +1,14 @@ +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') + object.setIntAttribute('reuse_time', 5) + object.setUses(8) + object.setStringAttribute('proc_name', '@ui_buff:detecthiddenconsumable20') + object.setAttachment('alternateBuffName', 'detectHiddenConsumable20') + 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 new file mode 100644 index 00000000..e4bd5ded --- /dev/null +++ b/scripts/object/tangible/loot/generic_usable/item_consumable_detect_hidden_02_02.py @@ -0,0 +1,14 @@ +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') + object.setIntAttribute('reuse_time', 5) + object.setUses(8) + object.setStringAttribute('proc_name', '@ui_buff:detecthiddenconsumable40') + object.setAttachment('alternateBuffName', 'detectHiddenConsumable40') + 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 new file mode 100644 index 00000000..dbe9173e --- /dev/null +++ b/scripts/object/tangible/loot/generic_usable/item_consumable_detect_hidden_02_03.py @@ -0,0 +1,14 @@ +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') + object.setIntAttribute('reuse_time', 5) + object.setUses(8) + object.setStringAttribute('proc_name', '@ui_buff:detecthiddenconsumable65') + object.setAttachment('alternateBuffName', 'detectHiddenConsumable65') + 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 new file mode 100644 index 00000000..de881c2a --- /dev/null +++ b/scripts/object/tangible/loot/generic_usable/item_consumable_detect_hidden_02_04.py @@ -0,0 +1,14 @@ +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') + object.setIntAttribute('reuse_time', 5) + object.setUses(8) + object.setStringAttribute('proc_name', '@ui_buff:detecthiddenconsumable100') + object.setAttachment('alternateBuffName', 'detectHiddenConsumable100') + return + \ No newline at end of file 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 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 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 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 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 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 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/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/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 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/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/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..2fe0f47a --- /dev/null +++ b/scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_belt_05_01.py @@ -0,0 +1,19 @@ +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') + 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..0fc14ba5 --- /dev/null +++ b/scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_bicep_l_05_01.py @@ -0,0 +1,19 @@ +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') + 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..925e7386 --- /dev/null +++ b/scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_bicep_r_05_01.py @@ -0,0 +1,19 @@ +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') + 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..4facba04 --- /dev/null +++ b/scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_boots_05_01.py @@ -0,0 +1,19 @@ +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') + 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..e0e28e01 --- /dev/null +++ b/scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_bracer_l_05_01.py @@ -0,0 +1,19 @@ +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') + 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..9b4cca31 --- /dev/null +++ b/scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_bracer_r_05_01.py @@ -0,0 +1,19 @@ +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') + 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..6a09e147 --- /dev/null +++ b/scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_gloves_05_01.py @@ -0,0 +1,19 @@ +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') + 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..50505d89 --- /dev/null +++ b/scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_helmet_05_01.py @@ -0,0 +1,19 @@ +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') + 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..7dd77943 --- /dev/null +++ b/scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_leggings_05_01.py @@ -0,0 +1,19 @@ +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') + 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/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 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 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 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..44565fc0 --- /dev/null +++ b/scripts/object/tangible/wearables/necklace/item_pvp_imperial_sergeant_major_medal_03_01.py @@ -0,0 +1,15 @@ +import sys + + +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/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 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 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/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 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 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/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/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/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/carbine/exceptional_e11_carbine_imperial.py b/scripts/object/weapon/ranged/carbine/exceptional_e11_carbine_imperial.py new file mode 100644 index 00000000..655395ce --- /dev/null +++ b/scripts/object/weapon/ranged/carbine/exceptional_e11_carbine_imperial.py @@ -0,0 +1,13 @@ +import sys +from resources.datatables import WeaponType + +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(WeaponType.CARBINE) + 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/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/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..69ce568d --- /dev/null +++ b/scripts/object/weapon/ranged/carbine/imperial_sergeant_reward_carbine_e11.py @@ -0,0 +1,13 @@ +import sys +from resources.datatables import WeaponType + +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(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/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/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 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 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..5dfbea18 --- /dev/null +++ b/scripts/object/weapon/ranged/pistol/imperial_segeant_reward_pistol_power5.py @@ -0,0 +1,13 @@ +import sys +from resources.datatables import WeaponType + +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(WeaponType.PISTOL) + 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/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..86fece0a --- /dev/null +++ b/scripts/object/weapon/ranged/pistol/weapon_pistol_pvp_rebel_general_reward_06_01.py @@ -0,0 +1,16 @@ +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.setMaxRange(35) + object.setDamageType('energy') + object.setMinDamage(275) + object.setMaxDamage(518) + object.setWeaponType(WeaponType.PISTOL) + 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 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/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 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/recolorable.py b/scripts/radial/item/recolorable.py new file mode 100644 index 00000000..0690521e --- /dev/null +++ b/scripts/radial/item/recolorable.py @@ -0,0 +1,18 @@ +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')) + radials.add(RadialOptions(0, 100, 0, 'Modify tirtiary 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') + if option == 100 and target: + core.suiService.sendColorPicker(owner, target, '/private/index_color_3') + return + \ No newline at end of file diff --git a/scripts/radial/item/collection/loot_collection.py b/scripts/radial/item/world_collection.py similarity index 92% rename from scripts/radial/item/collection/loot_collection.py rename to scripts/radial/item/world_collection.py index 51fd1e57..084007c8 100644 --- a/scripts/radial/item/collection/loot_collection.py +++ b/scripts/radial/item/world_collection.py @@ -6,13 +6,12 @@ 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, 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) + core.objectService.destroyObject(target) return - \ No newline at end of file diff --git a/scripts/radial/object/guild_access_device.py b/scripts/radial/object/guild_access_device.py index 48784bda..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 @@ -36,7 +38,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(): @@ -45,7 +47,22 @@ 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 + + #### Guild Leader Elections #### + if guild.isElectionsEnabled(): + + if guild.isRunningForLeader(owner.getObjectID()) == False: + 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(RadialOptions(5, 56, 3, '@guild:menu_disable_elections')) # Disable Elections + else: + if owner.getObjectID() == guild.getLeader(): + radials.add(RadialOptions(5, 57, 3, '@guild:menu_enable_elections')) # Enable Elections return return @@ -77,10 +94,11 @@ 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 - + #### Member Management #### # - Guild Members @@ -100,9 +118,42 @@ 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 + + #### Guild Leader Elections #### + + # - Register to Run + elif option == 72: + core.guildService.handleRunForLeader(owner, guild) + return + + # - Unregister from Race + elif option == 73: + core.guildService.handleUnregisterForLeader(owner, guild) + 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 == 57: + core.guildService.handleEnableGuildElections(guild) + return + + # - Disable Elections + elif option == 56: + return 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/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/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 + 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" 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" 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" diff --git a/scripts/static_spawns/dantooine/imperial_outpost.py b/scripts/static_spawns/dantooine/imperial_outpost.py index d19b18d5..013124b1 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 +from engine.resources.scene import 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,120 @@ 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)) + patrolpoints1 = Vector() + 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)) - 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)) + patrolpoints6 = Vector() + 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)) + + patrolpoints7 = Vector() + 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) - 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)) + 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) + 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) + + 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/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/main/NGECore.java b/src/main/NGECore.java index 757f4d39..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); @@ -805,7 +809,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/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/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/resources/guild/Guild.java b/src/resources/guild/Guild.java index 4ea74669..3ad306f7 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; @@ -40,7 +40,10 @@ public class Guild { private String leaderName; private Map members = new HashMap(); private Map sponsoredPlayers = new HashMap(); + private Map leaderCandidates = new HashMap(); private String motd = ""; + private boolean electionsEnabled = false; + private long electionResultsDate; public Guild(int id, String abbreviation, String name, SWGObject leader) { this.id = id; @@ -58,7 +61,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 +71,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 +82,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; } @@ -153,4 +165,33 @@ 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; + } + + 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; + } + + public boolean isRunningForLeader(long objectID) { + if (leaderCandidates.containsKey(Long.valueOf(objectID))) return true; + else return false; + } } diff --git a/src/resources/guild/GuildMember.java b/src/resources/guild/GuildMember.java index c8188cd1..f6721ff2 100644 --- a/src/resources/guild/GuildMember.java +++ b/src/resources/guild/GuildMember.java @@ -33,9 +33,8 @@ 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 int votes = 0; + private long votedId; private Vector permissions = new Vector(); private boolean mailPermission = false; private boolean sponsorPermission = false; @@ -95,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/resources/objects/SWGList.java b/src/resources/objects/SWGList.java index 781a676d..4160f6c0 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.putShort((short) list.size()); + buffer.put(newListData); + newListData = buffer.array(); + this.list = list; - updateCounter++; + updateCounter += list.size(); queue(newListData); return true; 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/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/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/DevService.java b/src/services/DevService.java index 79b3feca..3700a3da 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"); @@ -150,6 +151,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"); } @@ -1055,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; @@ -1243,6 +1241,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: @@ -1276,6 +1278,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); @@ -1300,6 +1306,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); @@ -1317,6 +1330,7 @@ public class DevService implements INetworkDispatch { inventory.add(REingTool); core.lootService.prepInv2(player); return; + } } }); diff --git a/src/services/GuildService.java b/src/services/GuildService.java index 95e34fe9..3676e36a 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); @@ -168,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; } @@ -186,6 +252,114 @@ 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(Long.valueOf(guild.getLeader()), 1); + guild.setLeaderCandidates(candidates); + + 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 == null || 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 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(); + for (Long candidateId : candidates.keySet()) { + 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) -> { + + 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) + 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) -> { @@ -404,8 +578,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) { @@ -606,8 +779,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) -> { @@ -650,7 +821,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); @@ -660,7 +831,6 @@ public class GuildService implements INetworkDispatch { core.suiService.openSUIWindow(wndSponsorPlayer); } - public void handleGuildDisband(CreatureObject actor, Guild guild) { Map members = guild.getMembers(); @@ -681,9 +851,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,13 +864,12 @@ 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()); } - public void handleManageSponsoredPlayers(CreatureObject actor) { Guild guild = getGuildById(actor.getGuildId()); @@ -778,14 +947,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); @@ -794,7 +963,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()) { @@ -855,7 +1023,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 +1035,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,15 +1049,14 @@ 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"); } }); } } - public void sendMailToGuild(String sender, String subject, String message, int guildId) { Guild guild = getGuildById(guildId); @@ -917,12 +1084,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/LootService.java b/src/services/LootService.java index 35aec14e..ff677f79 100644 --- a/src/services/LootService.java +++ b/src/services/LootService.java @@ -52,8 +52,10 @@ 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; import services.sui.SUIService.ListBoxType; import services.sui.SUIService.MessageBoxType; import services.sui.SUIWindow; @@ -79,7 +81,7 @@ public class LootService implements INetworkDispatch { private NGECore core; private static int prepInvCnt = 0; String testDropTemplate = null; - //String testDropTemplate = "kowakian_cage"; + //String testDropTemplate = "stap1_vehicle_deed"; public LootService(NGECore core) { this.core = core; @@ -129,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()); @@ -193,7 +198,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; @@ -754,11 +759,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); + droppedItem.setAttachment("radial_filename", "item/collection"); //System.out.println("collection"); } @@ -1224,7 +1230,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"); } @@ -1484,7 +1490,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 @@ -2805,8 +2813,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/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) { diff --git a/src/services/SimulationService.java b/src/services/SimulationService.java index b89de8ef..8b7822f3 100644 --- a/src/services/SimulationService.java +++ b/src/services/SimulationService.java @@ -292,7 +292,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/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 diff --git a/src/services/TerrainService.java b/src/services/TerrainService.java index 9cc2924a..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,15 +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); - - 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); } @@ -92,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/AIActor.java b/src/services/ai/AIActor.java index 1e461e9c..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,13 +69,26 @@ public class AIActor { private boolean isStalking = false; private byte milkState = 0; private boolean hasBeenHarvested = false; + private Vector patrolPoints = new Vector(); + 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; + 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) @@ -86,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) { @@ -292,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"); @@ -374,4 +413,94 @@ 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; + } + + 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 2b76826f..b492da20 100644 --- a/src/services/ai/AIService.java +++ b/src/services/ai/AIService.java @@ -26,12 +26,17 @@ 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.AIState; +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 +169,55 @@ public class AIService { } } + public void setPatrol(CreatureObject creature, Vector patrolpoints){ + AIActor actor = (AIActor) creature.getAttachment("AI"); + if (actor==null) + return; + + actor.setPatrolPoints(patrolpoints); + AIState intendedPrimaryAIState = new PatrolState(); + actor.setIntendedPrimaryAIState(intendedPrimaryAIState); + actor.setCurrentState(intendedPrimaryAIState); + } + + public void setPatrol(CreatureObject creature, boolean active){ + AIActor actor = (AIActor) creature.getAttachment("AI"); + if (actor==null) + return; + + if (active){ + AIState intendedPrimaryAIState = new PatrolState(); + actor.setIntendedPrimaryAIState(intendedPrimaryAIState); + actor.setCurrentState(intendedPrimaryAIState); + } + 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); + 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 286b51b8..1b2b84e7 100644 --- a/src/services/ai/states/AIState.java +++ b/src/services/ai/states/AIState.java @@ -21,12 +21,13 @@ ******************************************************************************/ package services.ai.states; +import java.util.NoSuchElementException; 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; @@ -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,14 +68,138 @@ 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) { + if ((!(actor.getCurrentState() instanceof FollowState)) && movementPoints.size() == 0 && patrolPoints.size() == 0) { + return false; + } + + if (movementPoints.size() != 0){ + try{ + targetPosition = movementPoints.firstElement(); + } catch (NoSuchElementException e) { + targetPosition = currentPosition; + } + } + + 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; } - targetPosition = movementPoints.firstElement(); + 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 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()); @@ -100,6 +228,128 @@ public abstract class AIState { 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 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; @@ -207,5 +457,268 @@ public abstract class AIState { core.simulationService.moveObject(creature, newPosition, quaternion, creature.getMovementCounter(), speed, newPosition.getCell()); } + + public void doPatrol(AIActor actor) { + //NGECore.getInstance().aiService.logAI("AI STATE doPatrol"); + 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.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()); + } + + } + + 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"); + + 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()); + } + + } + + public void doFollow(AIActor actor) { + //NGECore.getInstance().aiService.logAI("AI STATE doPatrol"); + 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.getRunSpeed(); + 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 = target.getWorldPosition(); + //System.out.println("currentPosition.getDistance2D(currentDestination)<1) " + currentPosition.getDistance2D(currentDestination)); + + Point3D newPosition = new Point3D(); + boolean foundNewPos = findNewFollowPosition(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"); + 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 new file mode 100644 index 00000000..7acf9458 --- /dev/null +++ b/src/services/ai/states/LoiterState.java @@ -0,0 +1,58 @@ +/******************************************************************************* + * 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) { + 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) { + 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..2a571391 100644 --- a/src/services/ai/states/PatrolState.java +++ b/src/services/ai/states/PatrolState.java @@ -21,6 +21,8 @@ ******************************************************************************/ package services.ai.states; +import main.NGECore; +import resources.objects.creature.CreatureObject; import services.ai.AIActor; public class PatrolState extends AIState { @@ -28,19 +30,32 @@ public class PatrolState extends AIState { @Override public byte onEnter(AIActor actor) { // TODO Auto-generated method stub - return 0; + NGECore.getInstance().aiService.logAI("PATROL 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 PATROL STATE"); + actor.setLastPositionBeforeStateChange(actor.getCreature().getWorldPosition()); return 0; } @Override public byte move(AIActor actor) { // TODO Auto-generated method stub - return 0; + //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; } @Override 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/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()); 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())) 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); 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/equipment/EquipmentService.java b/src/services/equipment/EquipmentService.java index 5da16f29..c6d93c85 100644 --- a/src/services/equipment/EquipmentService.java +++ b/src/services/equipment/EquipmentService.java @@ -157,15 +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); } @@ -182,6 +182,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); } diff --git a/src/services/housing/HousingService.java b/src/services/housing/HousingService.java index e5c3caee..fd079196 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,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)); + // 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; @@ -118,6 +127,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 @@ -130,8 +144,15 @@ 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); + core.simulationService.add(building, building.getPosition().x, building.getPosition().z, true); // Name the sign @@ -156,7 +177,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 @@ -180,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..d1849ab9 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); @@ -724,10 +730,18 @@ public class ObjectService implements INetworkDispatch { return objectId; } + + public Vector getItemsInContainerByStfName(CreatureObject creature, long containerId, String stfName) { + Vector itemList = new Vector(); + SWGObject container = getObject(containerId); + + container.viewChildren(creature, false, false, (item) -> { if (item.getStfName() == stfName) { itemList.add(item); } }); + + return itemList; + } public void useObject(CreatureObject creature, final SWGObject object) { - System.out.println("creature " + creature); - System.out.println("object " + object); + if (creature == null || object == null) { return; } @@ -813,7 +827,7 @@ public class ObjectService implements INetworkDispatch { //shirt.setIntAttribute(effectName, powerValue); shirt.setAttachment("PUPEffectName", effectName); shirt.setAttachment("PUPEffectValue", powerValue); - + } if (object.getTemplate().equals(powerUpTemplate3)){ // weapon @@ -900,22 +914,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"; @@ -1439,8 +1458,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); + } + } } }); diff --git a/src/services/pet/MountService.java b/src/services/pet/MountService.java index e326c362..0af426b8 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; @@ -786,5 +787,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); + } + +} 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(); 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); diff --git a/src/services/sui/SUIService.java b/src/services/sui/SUIService.java index 1fcee751..8c4e6fc2 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; @@ -139,14 +140,16 @@ public class SUIService implements INetworkDispatch { return; } - if(target.getGrandparent() != null && target.getGrandparent().getAttachment("structureAdmins") != null) + 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; + } + + if(target.getTemplate().contains("object/tangible/wearables") && ((CreatureObject)owner).hasAbility("admin")) { - 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/", "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()); @@ -185,11 +188,15 @@ 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; - } + } + + + 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()); @@ -377,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); @@ -428,6 +441,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)