diff --git a/.gitignore b/.gitignore index 24eef345..de39aaf3 100644 --- a/.gitignore +++ b/.gitignore @@ -77,6 +77,8 @@ odb/cities/je.info.* # PDT-specific .buildpath +# Log files +debuglogs/ ################# ## Visual Studio 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/debuglogs/placeHolder.txt b/debuglogs/placeHolder.txt new file mode 100644 index 00000000..e69de29b diff --git a/ngengine_public.jar b/ngengine_public.jar index 91d5298a..85f3ce18 100644 Binary files a/ngengine_public.jar and b/ngengine_public.jar differ diff --git a/odb/cities/je.info.0.8 b/odb/cities/je.info.0.8 deleted file mode 100644 index c6a20587..00000000 --- a/odb/cities/je.info.0.8 +++ /dev/null @@ -1 +0,0 @@ -140613 19:57:33:302 INFO [.\odb\cities]Chose lowest utilized file for cleaning. totalUtilization: 14 bestFileUtilization: 101 lnSizeCorrectionFactor: NaN isProbe: false diff --git a/options.cfg b/options.cfg index 03abf4cf..5ea9e0ab 100644 --- a/options.cfg +++ b/options.cfg @@ -1,7 +1,7 @@ LOAD.SNAPSHOT_OBJECTS=1 LOAD.BUILDOUT_OBJECTS=1 -#LOAD.BUILDOUT_ONLY_FOR="dantooine" -LOAD.RESOURCE.SYSTEM=1 +#LOAD.BUILDOUT_ONLY_FOR="dathomir" +LOAD.RESOURCE.SYSTEM=0 # Misc -CLEAN.ODB.FOLDERS=0 \ No newline at end of file +CLEAN.ODB.FOLDERS=0 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/callforg9riggerpickup.py b/scripts/commands/callforg9riggerpickup.py new file mode 100644 index 00000000..5c165a6b --- /dev/null +++ b/scripts/commands/callforg9riggerpickup.py @@ -0,0 +1,42 @@ +import sys +import time + +def setup(core, actor, target, command): + return + +def run(core, actor, target, commandstring): + + stcSvc = core.staticService + objSvc = core.objectService + object = objSvc.createObject('object/tangible/terminal/shared_terminal_travel_instant_tcg_location.iff', actor.getPlanet(), (actor.getWorldPosition().x)+5, actor.getWorldPosition().z, actor.getWorldPosition().y) + + + if actor.getAttachment("itv") is None: + if core.gcwService.isInPvpZone is True: + actor.sendSystemMessage('@travel:no_pickup_in_pvp', 0) + return + + if actor.getCombatFlag() == 1: + actor.sendSystemMessage('@travel:in_combat', 0) + return + + if core.terrainService.canBuildAtPosition(actor, actor.getWorldPosition().x, actor.getWorldPosition().z) is True: + core.simulationService.add(object, (actor.getWorldPosition().x)+5, actor.getWorldPosition().z) + actor.sendSystemMessage('@travel:calling_for_pickup', 0) + else: + actor.sendSystemMessage('@travel:invalid_pickup_loc', 0) + return + + if core.simulationService.checkForObject(20, actor) is True: + actor.sendSystemMessage('@travel:no_pickup_location', 0) + return + + core.travelService.checkForItvTimedDespawn(actor, object) + + actor.setAttachment("itv", object.getObjectID()) + return + elif actor.getAttachment("itv") is not None: + actor.sendSystemMessage('@travel:pickup_craft_already_out', 0) + return + + return diff --git a/scripts/commands/callforpickup.py b/scripts/commands/callforpickup.py new file mode 100644 index 00000000..e88ff69e --- /dev/null +++ b/scripts/commands/callforpickup.py @@ -0,0 +1,42 @@ +import sys +import time + +def setup(core, actor, target, command): + return + +def run(core, actor, target, commandstring): + + stcSvc = core.staticService + objSvc = core.objectService + object = objSvc.createObject('object/tangible/terminal/shared_terminal_travel_instant.iff', actor.getPlanet(), (actor.getWorldPosition().x)+5, actor.getWorldPosition().z, actor.getWorldPosition().y) + + + if actor.getAttachment("itv") is None: + if core.gcwService.isInPvpZone is True: + actor.sendSystemMessage('@travel:no_pickup_in_pvp', 0) + return + + if actor.getCombatFlag() == 1: + actor.sendSystemMessage('@travel:in_combat', 0) + return + + if core.terrainService.canBuildAtPosition(actor, actor.getWorldPosition().x, actor.getWorldPosition().z) is True: + core.simulationService.add(object, (actor.getWorldPosition().x)+5, actor.getWorldPosition().z) + actor.sendSystemMessage('@travel:calling_for_pickup', 0) + else: + actor.sendSystemMessage('@travel:invalid_pickup_loc', 0) + return + + if core.simulationService.checkForObject(20, actor) is True: + actor.sendSystemMessage('@travel:no_pickup_location', 0) + return + + core.travelService.checkForItvTimedDespawn(actor, object) + + actor.setAttachment("itv", object.getObjectID()) + return + elif actor.getAttachment("itv") is not None: + actor.sendSystemMessage('@travel:pickup_craft_already_out', 0) + return + + return diff --git a/scripts/commands/callforprivateerpickup.py b/scripts/commands/callforprivateerpickup.py new file mode 100644 index 00000000..f998c46b --- /dev/null +++ b/scripts/commands/callforprivateerpickup.py @@ -0,0 +1,42 @@ +import sys +import time + +def setup(core, actor, target, command): + return + +def run(core, actor, target, commandstring): + + stcSvc = core.staticService + objSvc = core.objectService + object = objSvc.createObject('object/tangible/terminal/shared_terminal_travel_instant_privateer.iff', actor.getPlanet(), (actor.getWorldPosition().x)+5, actor.getWorldPosition().z, actor.getWorldPosition().y) + + + if actor.getAttachment("itv") is None: + if core.gcwService.isInPvpZone is True: + actor.sendSystemMessage('@travel:no_pickup_in_pvp', 0) + return + + if actor.getCombatFlag() == 1: + actor.sendSystemMessage('@travel:in_combat', 0) + return + + if core.terrainService.canBuildAtPosition(actor, actor.getWorldPosition().x, actor.getWorldPosition().z) is True: + core.simulationService.add(object, (actor.getWorldPosition().x)+5, actor.getWorldPosition().z) + actor.sendSystemMessage('@travel:calling_for_pickup', 0) + else: + actor.sendSystemMessage('@travel:invalid_pickup_loc', 0) + return + + if core.simulationService.checkForObject(20, actor) is True: + actor.sendSystemMessage('@travel:no_pickup_location', 0) + return + + core.travelService.checkForItvTimedDespawn(actor, object) + + actor.setAttachment("itv", object.getObjectID()) + return + elif actor.getAttachment("itv") is not None: + actor.sendSystemMessage('@travel:pickup_craft_already_out', 0) + return + + return diff --git a/scripts/commands/callforrattletrappickup.py b/scripts/commands/callforrattletrappickup.py new file mode 100644 index 00000000..053fdcf5 --- /dev/null +++ b/scripts/commands/callforrattletrappickup.py @@ -0,0 +1,42 @@ +import sys +import time + +def setup(core, actor, target, command): + return + +def run(core, actor, target, commandstring): + + stcSvc = core.staticService + objSvc = core.objectService + object = objSvc.createObject('object/tangible/terminal/shared_terminal_travel_instant_jalopy.iff', actor.getPlanet(), (actor.getWorldPosition().x)+5, actor.getWorldPosition().z, actor.getWorldPosition().y) + + + if actor.getAttachment("itv") is None: + if core.gcwService.isInPvpZone is True: + actor.sendSystemMessage('@travel:no_pickup_in_pvp', 0) + return + + if actor.getCombatFlag() == 1: + actor.sendSystemMessage('@travel:in_combat', 0) + return + + if core.terrainService.canBuildAtPosition(actor, actor.getWorldPosition().x, actor.getWorldPosition().z) is True: + core.simulationService.add(object, (actor.getWorldPosition().x)+5, actor.getWorldPosition().z) + actor.sendSystemMessage('@travel:calling_for_pickup', 0) + else: + actor.sendSystemMessage('@travel:invalid_pickup_loc', 0) + return + + if core.simulationService.checkForObject(20, actor) is True: + actor.sendSystemMessage('@travel:no_pickup_location', 0) + return + + core.travelService.checkForItvTimedDespawn(actor, object) + + actor.setAttachment("itv", object.getObjectID()) + return + elif actor.getAttachment("itv") is not None: + actor.sendSystemMessage('@travel:pickup_craft_already_out', 0) + return + + return diff --git a/scripts/commands/callforroyalpickup.py b/scripts/commands/callforroyalpickup.py new file mode 100644 index 00000000..997b010c --- /dev/null +++ b/scripts/commands/callforroyalpickup.py @@ -0,0 +1,42 @@ +import sys +import time + +def setup(core, actor, target, command): + return + +def run(core, actor, target, commandstring): + + stcSvc = core.staticService + objSvc = core.objectService + object = objSvc.createObject('object/tangible/terminal/shared_terminal_travel_instant_royal_ship.iff', actor.getPlanet(), (actor.getWorldPosition().x)+5, actor.getWorldPosition().z, actor.getWorldPosition().y) + + + if actor.getAttachment("itv") is None: + if core.gcwService.isInPvpZone is True: + actor.sendSystemMessage('@travel:no_pickup_in_pvp', 0) + return + + if actor.getCombatFlag() == 1: + actor.sendSystemMessage('@travel:in_combat', 0) + return + + if core.terrainService.canBuildAtPosition(actor, actor.getWorldPosition().x, actor.getWorldPosition().z) is True: + core.simulationService.add(object, (actor.getWorldPosition().x)+5, actor.getWorldPosition().z) + actor.sendSystemMessage('@travel:calling_for_pickup', 0) + else: + actor.sendSystemMessage('@travel:invalid_pickup_loc', 0) + return + + if core.simulationService.checkForObject(20, actor) is True: + actor.sendSystemMessage('@travel:no_pickup_location', 0) + return + + core.travelService.checkForItvTimedDespawn(actor, object) + + actor.setAttachment("itv", object.getObjectID()) + return + elif actor.getAttachment("itv") is not None: + actor.sendSystemMessage('@travel:pickup_craft_already_out', 0) + return + + return diff --git a/scripts/commands/callforslave1pickup.py b/scripts/commands/callforslave1pickup.py new file mode 100644 index 00000000..522bb27e --- /dev/null +++ b/scripts/commands/callforslave1pickup.py @@ -0,0 +1,42 @@ +import sys +import time + +def setup(core, actor, target, command): + return + +def run(core, actor, target, commandstring): + + stcSvc = core.staticService + objSvc = core.objectService + object = objSvc.createObject('object/tangible/terminal/shared_terminal_travel_instant_tcg_slave_1.iff', actor.getPlanet(), (actor.getWorldPosition().x)+5, actor.getWorldPosition().z, actor.getWorldPosition().y) + + + if actor.getAttachment("itv") is None: + if core.gcwService.isInPvpZone is True: + actor.sendSystemMessage('@travel:no_pickup_in_pvp', 0) + return + + if actor.getCombatFlag() == 1: + actor.sendSystemMessage('@travel:in_combat', 0) + return + + if core.terrainService.canBuildAtPosition(actor, actor.getWorldPosition().x, actor.getWorldPosition().z) is True: + core.simulationService.add(object, (actor.getWorldPosition().x)+5, actor.getWorldPosition().z) + actor.sendSystemMessage('@travel:calling_for_pickup', 0) + else: + actor.sendSystemMessage('@travel:invalid_pickup_loc', 0) + return + + if core.simulationService.checkForObject(20, actor) is True: + actor.sendSystemMessage('@travel:no_pickup_location', 0) + return + + core.travelService.checkForItvTimedDespawn(actor, object) + + actor.setAttachment("itv", object.getObjectID()) + return + elif actor.getAttachment("itv") is not None: + actor.sendSystemMessage('@travel:pickup_craft_already_out', 0) + return + + return diff --git a/scripts/commands/callforsnowspeeder.py b/scripts/commands/callforsnowspeeder.py new file mode 100644 index 00000000..a7e056f7 --- /dev/null +++ b/scripts/commands/callforsnowspeeder.py @@ -0,0 +1,42 @@ +import sys +import time + +def setup(core, actor, target, command): + return + +def run(core, actor, target, commandstring): + + stcSvc = core.staticService + objSvc = core.objectService + object = objSvc.createObject('object/tangible/terminal/shared_terminal_travel_instant_snowspeeder.iff', actor.getPlanet(), (actor.getWorldPosition().x)+5, actor.getWorldPosition().z, actor.getWorldPosition().y) + + + if actor.getAttachment("itv") is None: + if core.gcwService.isInPvpZone is True: + actor.sendSystemMessage('@travel:no_pickup_in_pvp', 0) + return + + if actor.getCombatFlag() == 1: + actor.sendSystemMessage('@travel:in_combat', 0) + return + + if core.terrainService.canBuildAtPosition(actor, actor.getWorldPosition().x, actor.getWorldPosition().z) is True: + core.simulationService.add(object, (actor.getWorldPosition().x)+5, actor.getWorldPosition().z) + actor.sendSystemMessage('@travel:calling_for_pickup', 0) + else: + actor.sendSystemMessage('@travel:invalid_pickup_loc', 0) + return + + if core.simulationService.checkForObject(20, actor) is True: + actor.sendSystemMessage('@travel:no_pickup_location', 0) + return + + core.travelService.checkForItvTimedDespawn(actor, object) + + actor.setAttachment("itv", object.getObjectID()) + return + elif actor.getAttachment("itv") is not None: + actor.sendSystemMessage('@travel:pickup_craft_already_out', 0) + return + + return diff --git a/scripts/commands/callforsolarsailerpickup.py b/scripts/commands/callforsolarsailerpickup.py new file mode 100644 index 00000000..b0d2be31 --- /dev/null +++ b/scripts/commands/callforsolarsailerpickup.py @@ -0,0 +1,42 @@ +import sys +import time + +def setup(core, actor, target, command): + return + +def run(core, actor, target, commandstring): + + stcSvc = core.staticService + objSvc = core.objectService + object = objSvc.createObject('object/tangible/terminal/shared_terminal_travel_instant_tcg_home.iff', actor.getPlanet(), (actor.getWorldPosition().x)+5, actor.getWorldPosition().z, actor.getWorldPosition().y) + + + if actor.getAttachment("itv") is None: + if core.gcwService.isInPvpZone is True: + actor.sendSystemMessage('@travel:no_pickup_in_pvp', 0) + return + + if actor.getCombatFlag() == 1: + actor.sendSystemMessage('@travel:in_combat', 0) + return + + if core.terrainService.canBuildAtPosition(actor, actor.getWorldPosition().x, actor.getWorldPosition().z) is True: + core.simulationService.add(object, (actor.getWorldPosition().x)+5, actor.getWorldPosition().z) + actor.sendSystemMessage('@travel:calling_for_pickup', 0) + else: + actor.sendSystemMessage('@travel:invalid_pickup_loc', 0) + return + + if core.simulationService.checkForObject(20, actor) is True: + actor.sendSystemMessage('@travel:no_pickup_location', 0) + return + + core.travelService.checkForItvTimedDespawn(actor, object) + + actor.setAttachment("itv", object.getObjectID()) + return + elif actor.getAttachment("itv") is not None: + actor.sendSystemMessage('@travel:pickup_craft_already_out', 0) + return + + return 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/server.py b/scripts/commands/server.py index 0514fa98..09765edc 100644 --- a/scripts/commands/server.py +++ b/scripts/commands/server.py @@ -1,5 +1,6 @@ import sys from engine.resources.scene import Point3D +from resources.datatables import GalaxyStatus def setup(): return @@ -26,9 +27,9 @@ def run(core, actor, target, commandString): return if command == 'lockServer': - core.setGalaxyStatus(3) + core.setGalaxyStatus(GalaxyStatus.Locked) if command == 'unlockServer': - core.setGalaxyStatus(2) + core.setGalaxyStatus(GalaxyStatus.Online) if command == 'info': actor.sendSystemMessage(str(core.getActiveZoneClients()) + ' online characters.', 0) if command == 'shutdown': 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 9aa20aa6..03bf8fc3 100644 --- a/scripts/commands/transferitemmisc.py +++ b/scripts/commands/transferitemmisc.py @@ -2,102 +2,95 @@ 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 and 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): + + 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 and 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): 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 - - canEquip = core.equipmentService.canEquip(actor, target) - if canEquip[0] is False and container == actor: - actor.sendSystemMessage(canEquip[1], 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) + + 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 target and container and target.getContainer(): - oldContainer = target.getContainer() - - if container == oldContainer: - print 'Error: New container is same as old container.' - return; - + 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/commands/waypoint.py b/scripts/commands/waypoint.py index b646ff14..3790fafa 100644 --- a/scripts/commands/waypoint.py +++ b/scripts/commands/waypoint.py @@ -5,123 +5,124 @@ import sys def run(core, actor, target, commandString): - validPlanets = ["tatooine", "naboo", "corellia", "rori", "talus", "yavin4", "endor", "lok", "dantooine", "dathomir", "kachirho", "etyyy", "khowir", "mustafar"] - validColors = ["blue", "green", "orange", "purple", "white", "yellow"] - crc = CRC - commandArgs = commandString.split(" ") - actorPlayer = actor.getSlottedObject("ghost") - - #/wp PLANET X Z Y COLOR NAME - if commandArgs[0] in validPlanets and commandArgs[4] in validColors: - try: - float(commandArgs[1]) - float(commandArgs[2]) - float(commandArgs[3]) - except ValueError: - return - planet = core.terrainService.getPlanetByName(commandArgs[0]) - waypoint = core.objectService.createObject('object/waypoint/shared_waypoint.iff', planet, float(commandArgs[1]), float(commandArgs[2]), float(commandArgs[3])) - waypoint.setActive(True) - waypoint.setColor(colorCheck(commandArgs[4])) - name = commandString.split(" ", 5) - waypoint.setName(name[5]) - waypoint.setPlanetCRC(crc.StringtoCRC(planet.getName())) - waypoint.setStringAttribute('', '') # This simply allows the attributes to display (nothing else has to be done) - actorPlayer.waypointAdd(waypoint) - actor.sendSystemMessage('A waypoint has been created in your datapad at the location.', 0) - return - + validPlanets = ["tatooine", "naboo", "corellia", "rori", "talus", "yavin4", "endor", "lok", "dantooine", "dathomir", "kachirho", "etyyy", "khowir", "mustafar"] + validColors = ["blue", "green", "orange", "purple", "white", "yellow"] + crc = CRC + commandArgs = commandString.split(" ") + actorPlayer = actor.getSlottedObject("ghost") - #/wp X Z Y NAME - if len(commandArgs) >= 4 and isFloat(commandArgs[0]) and isFloat(commandArgs[1]) and isFloat(commandArgs[2]): - waypoint = core.objectService.createObject('object/waypoint/shared_waypoint.iff', actor.getPlanet(), float(commandArgs[0]), float(commandArgs[2]), float(commandArgs[1])) - waypoint.setActive(True) - waypoint.setColor(WaypointObject.BLUE) - name = commandString.split(" ", 3) - waypoint.setName(name[3]) - waypoint.setPlanetCRC(crc.StringtoCRC(actor.getPlanet().getName())) - waypoint.setStringAttribute('', '') # This simply allows the attributes to display (nothing else has to be done) - actorPlayer.waypointAdd(waypoint) - actor.sendSystemMessage('A waypoint has been created in your datapad at the location.', 0) - return - #/wp X Z Name - elif len(commandArgs) >= 3 and isFloat(commandArgs[0]) and isFloat(commandArgs[1]): - waypoint = core.objectService.createObject('object/waypoint/shared_waypoint.iff', actor.getPlanet(), float(commandArgs[0]), float(commandArgs[1]), actor.getWorldPosition().y) - waypoint.setActive(True) - waypoint.setColor(WaypointObject.BLUE) - name = commandString.split(" ", 2) - waypoint.setName(name[2]) - waypoint.setPlanetCRC(crc.StringtoCRC(actor.getPlanet().getName())) - waypoint.setStringAttribute('', '') # This simply allows the attributes to display (nothing else has to be done) - actorPlayer.waypointAdd(waypoint) - actor.sendSystemMessage('A waypoint has been created in your datapad at the location.', 0) - return - #/wp X Z - elif len(commandArgs) >= 2 and isFloat(commandArgs[0]) and isFloat(commandArgs[1]): - waypoint = core.objectService.createObject('object/waypoint/shared_waypoint.iff', actor.getPlanet(), float(commandArgs[0]), float(commandArgs[1]), actor.getWorldPosition().y) - waypoint.setActive(True) - waypoint.setColor(WaypointObject.BLUE) - waypoint.setName("Waypoint") - waypoint.setPlanetCRC(crc.StringtoCRC(actor.getPlanet().getName())) - waypoint.setStringAttribute('', '') # This simply allows the attributes to display (nothing else has to be done) - actorPlayer.waypointAdd(waypoint) - actor.sendSystemMessage('A waypoint has been created in your datapad at the location.', 0) - return - - #/wp planet x z y name - elif len(commandArgs) >= 3 and isFloat(commandArgs[2]) and isFloat(commandArgs[3]) and isFloat(commandArgs[4]): - waypoint = core.objectService.createObject('object/waypoint/shared_waypoint.iff', core.terrainService.getPlanetByName(commandArgs[1]), float(commandArgs[2]), float(commandArgs[4]), float(commandArgs[3])) - waypoint.setActive(True) - waypoint.setColor(WaypointObject.BLUE) - name = commandString.split(" ", 5) - if name == "": - name = "Waypoint" + #/wp PLANET X Z Y COLOR NAME + if len(commandArgs) > 4 and commandArgs[0] in validPlanets and commandArgs[4] in validColors: + try: + float(commandArgs[1]) + float(commandArgs[2]) + float(commandArgs[3]) + except ValueError: + return - waypoint.setName(name[5]) - waypoint.setPlanetCRC(crc.StringtoCRC(actor.getPlanet().getName())) - waypoint.setStringAttribute('', '') # This simply allows the attributes to display (nothing else has to be done) - actorPlayer.waypointAdd(waypoint) - actor.sendSystemMessage('A waypoint has been created in your datapad at the location.', 0) - return - - #/wp - else: - waypoint = core.objectService.createObject('object/waypoint/shared_waypoint.iff', actor.getPlanet(), actor.getWorldPosition().x, actor.getWorldPosition().z, actor.getWorldPosition().y) - waypoint.setActive(True) - waypoint.setColor(WaypointObject.BLUE) - if commandString == '': - waypoint.setName(actor.getPlanet().name.capitalize()) - else: - waypoint.setName(commandString) - waypoint.setPlanetCRC(crc.StringtoCRC(actor.getPlanet().getName())) - waypoint.setStringAttribute('', '') # This simply allows the attributes to display (nothing else has to be done) - actorPlayer.waypointAdd(waypoint) - actor.sendSystemMessage('A waypoint has been created in your datapad at your location.', 0) - return - - return + planet = core.terrainService.getPlanetByName(commandArgs[0]) + waypoint = core.objectService.createObject('object/waypoint/shared_waypoint.iff', planet, float(commandArgs[1]), float(commandArgs[3]), float(commandArgs[2])) + waypoint.setActive(True) + waypoint.setColor(colorCheck(commandArgs[4])) + name = commandString.split(" ", 5) + waypoint.setName(name[5]) + waypoint.setPlanetCRC(crc.StringtoCRC(planet.getName())) + waypoint.setStringAttribute('', '') # This simply allows the attributes to display (nothing else has to be done) + actorPlayer.waypointAdd(waypoint) + actor.sendSystemMessage('A waypoint has been created in your datapad at the location.', 0) + return + + #/wp X Z Y NAME + elif len(commandArgs) > 3 and isFloat(commandArgs[0]) and isFloat(commandArgs[1]) and isFloat(commandArgs[2]): + waypoint = core.objectService.createObject('object/waypoint/shared_waypoint.iff', actor.getPlanet(), float(commandArgs[0]), float(commandArgs[2]), float(commandArgs[1])) + waypoint.setActive(True) + waypoint.setColor(WaypointObject.BLUE) + name = commandString.split(" ", 3) + waypoint.setName(name[3]) + waypoint.setPlanetCRC(crc.StringtoCRC(actor.getPlanet().getName())) + waypoint.setStringAttribute('', '') # This simply allows the attributes to display (nothing else has to be done) + actorPlayer.waypointAdd(waypoint) + actor.sendSystemMessage('A waypoint has been created in your datapad at the location.', 0) + return + + #/wp X Z Name + elif len(commandArgs) > 2 and isFloat(commandArgs[0]) and isFloat(commandArgs[1]): + waypoint = core.objectService.createObject('object/waypoint/shared_waypoint.iff', actor.getPlanet(), float(commandArgs[0]), float(commandArgs[1]), actor.getWorldPosition().y) + waypoint.setActive(True) + waypoint.setColor(WaypointObject.BLUE) + name = commandString.split(" ", 2) + waypoint.setName(name[2]) + waypoint.setPlanetCRC(crc.StringtoCRC(actor.getPlanet().getName())) + waypoint.setStringAttribute('', '') # This simply allows the attributes to display (nothing else has to be done) + actorPlayer.waypointAdd(waypoint) + actor.sendSystemMessage('A waypoint has been created in your datapad at the location.', 0) + return + + #/wp X Z + elif len(commandArgs) == 2 and isFloat(commandArgs[0]) and isFloat(commandArgs[1]): + waypoint = core.objectService.createObject('object/waypoint/shared_waypoint.iff', actor.getPlanet(), float(commandArgs[0]), float(commandArgs[1]), actor.getWorldPosition().y) + waypoint.setActive(True) + waypoint.setColor(WaypointObject.BLUE) + waypoint.setName("Waypoint") + waypoint.setPlanetCRC(crc.StringtoCRC(actor.getPlanet().getName())) + waypoint.setStringAttribute('', '') # This simply allows the attributes to display (nothing else has to be done) + actorPlayer.waypointAdd(waypoint) + actor.sendSystemMessage('A waypoint has been created in your datapad at the location.', 0) + return + + #/wp planet x z y name + elif len(commandArgs) > 4 and commandArgs[0] in validPlanets and isFloat(commandArgs[1]) and isFloat(commandArgs[2]) and isFloat(commandArgs[3]): + waypoint = core.objectService.createObject('object/waypoint/shared_waypoint.iff', core.terrainService.getPlanetByName(commandArgs[0]), float(commandArgs[1]), float(commandArgs[3]), float(commandArgs[2])) + waypoint.setActive(True) + waypoint.setColor(WaypointObject.BLUE) + name = commandString.split(" ", 4) + if name == "": + name = "Waypoint" + + waypoint.setName(name[4]) + waypoint.setPlanetCRC(crc.StringtoCRC(actor.getPlanet().getName())) + waypoint.setStringAttribute('', '') # This simply allows the attributes to display (nothing else has to be done) + actorPlayer.waypointAdd(waypoint) + actor.sendSystemMessage('A waypoint has been created in your datapad at the location.', 0) + return + + #/wp + else: + waypoint = core.objectService.createObject('object/waypoint/shared_waypoint.iff', actor.getPlanet(), actor.getWorldPosition().x, actor.getWorldPosition().z, actor.getWorldPosition().y) + waypoint.setActive(True) + waypoint.setColor(WaypointObject.BLUE) + if commandString == '': + waypoint.setName(actor.getPlanet().name.capitalize()) + else: + waypoint.setName(commandString) + waypoint.setPlanetCRC(crc.StringtoCRC(actor.getPlanet().getName())) + waypoint.setStringAttribute('', '') # This simply allows the attributes to display (nothing else has to be done) + actorPlayer.waypointAdd(waypoint) + actor.sendSystemMessage('A waypoint has been created in your datapad at your location.', 0) + return + return def colorCheck(validcolors): - if validcolors == "blue": - return WaypointObject.BLUE - if validcolors == "green": - return WaypointObject.GREEN - if validcolors == "orange": - return WaypointObject.ORANGE - if validcolors == "purple": - return WaypointObject.PURPLE - if validcolors == "white": - return WaypointObject.WHITE - if validcolors == "yellow": - return WaypointObject.YELLOW - return + if validcolors == "blue": + return WaypointObject.BLUE + if validcolors == "green": + return WaypointObject.GREEN + if validcolors == "orange": + return WaypointObject.ORANGE + if validcolors == "purple": + return WaypointObject.PURPLE + if validcolors == "white": + return WaypointObject.WHITE + if validcolors == "yellow": + return WaypointObject.YELLOW + return def isFloat(string): - try: - stringFloat = float(string) - except ValueError: - return False - - else: - return True - return \ No newline at end of file + try: + stringFloat = float(string) + except ValueError: + return False + + else: + return True + 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/missions/deliver.py b/scripts/conversation/missions/deliver.py index 126665a7..f199410e 100644 --- a/scripts/conversation/missions/deliver.py +++ b/scripts/conversation/missions/deliver.py @@ -4,9 +4,18 @@ from resources.objectives import DeliveryMissionObjective import sys def startConversation(core, actor, npc): - missionId = npc.getAttachment('assignedMission') + + player = actor.getPlayerObject() - if missionId is None: + if player is None: + return + + activeMissions = player.getActiveMissions() + + missionId = checkMissions(core, actor, npc, activeMissions) + + if missionId == 0: + core.conversationService.sendStopConversation(actor, npc, 'mission/mission_generic', 'npc_job_request_no_job') return mission = core.objectService.getObject(missionId) @@ -16,7 +25,7 @@ def startConversation(core, actor, npc): objective = mission.getObjective() - if mission.getGrandparent().getObjectId() != actor.getObjectId() or objective is None: + if objective is None: core.conversationService.sendStopConversation(actor, npc, 'mission/mission_generic', 'npc_job_request_no_job') return @@ -38,33 +47,43 @@ def endConversation(core, actor, npc): return def handlePickupStage(core, actor, npc, objective, mission): - - if objective.getMissionGiver().getObjectId() != npc.getObjectId(): + if objective.getMissionGiver() != npc.getObjectId(): endConversation(core, actor, npc) return - core.conversationService.sendStopConversation(actor, npc, mission.getMissionStf(), 'm' + str(mission.getMissionId()) + 'p') + core.conversationService.sendStopConversation(actor, npc, mission.getTitle().getStfFilename(), 'm' + str(mission.getMissionId()) + 'p') objective.createDeliveryItem(core, actor) objective.update(core, actor) return def handleDeliveryStage(core, actor, npc, objective, mission): - if objective.getDropOffNpc().getObjectId() != npc.getObjectId(): + if objective.getDropOffNpc() != npc.getObjectId(): endConversation(core, actor, npc) return - core.conversationService.sendStopConversation(actor, npc, mission.getMissionStf(), 'm' + str(mission.getMissionId()) + 'r') + core.conversationService.sendStopConversation(actor, npc, mission.getTitle().getStfFilename(), 'm' + str(mission.getMissionId()) + 'r') core.objectService.destroyObject(objective.getDeliveryObject()) objective.update(core, actor) return def handleCompletionStage(core, actor, npc, objective, mission): - if objective.getMissionGiver().getObjectId() != npc.getObjectId(): + if objective.getMissionGiver() != npc.getObjectId(): endConversation(core, actor, npc) return - core.conversationService.sendStopConversation(actor, npc, mission.getMissionStf(), 'm' + str(mission.getMissionId()) + 's') + core.conversationService.sendStopConversation(actor, npc, mission.getTitle().getStfFilename(), 'm' + str(mission.getMissionId()) + 's') core.missionService.handleMissionComplete(actor, mission) - return \ No newline at end of file + return + +def checkMissions(core, actor, npc, activeMissions): + for objId in activeMissions: + missionObj = core.objectService.getObject(objId) + + if (missionObj != None): + if (missionObj.getStartLocation() is not None and missionObj.getStartLocation().getObjectId() == npc.getObjectID()): + return missionObj.getObjectID() + elif (missionObj.getDestinationLocation() is not None and missionObj.getDestinationLocation().getObjectId() == npc.getObjectID()): + return missionObj.getObjectID() + return 0 \ No newline at end of file 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/expertise/expertise_en_heal_1.py b/scripts/expertise/expertise_en_heal_1.py index d4e3d669..e7e7280d 100644 --- a/scripts/expertise/expertise_en_heal_1.py +++ b/scripts/expertise/expertise_en_heal_1.py @@ -1,9 +1,19 @@ import sys def addAbilities(core, actor, player): - actor.addAbility("en_heal_1") + if actor.getLevel() >= 10: + actor.addAbility("en_heal_1") + if actor.getLevel() >= 34: + actor.addAbility("en_heal_2") + if actor.getLevel() >= 58: + actor.addAbility("en_heal_3") + if actor.getLevel() >= 82: + actor.addAbility("en_heal_4") return def removeAbilities(core, actor, player): actor.removeAbility("en_heal_1") + actor.removeAbility("en_heal_2") + actor.removeAbility("en_heal_3") + actor.removeAbility("en_heal_4") 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/houses/player_house_generic_small_style_01.py b/scripts/houses/player_house_generic_small_style_01.py index 3c225c31..fe35b693 100644 --- a/scripts/houses/player_house_generic_small_style_01.py +++ b/scripts/houses/player_house_generic_small_style_01.py @@ -15,6 +15,7 @@ def setup(housingTemplates): houseTemplate.addPlaceablePlanet("lok") houseTemplate.setDefaultItemLimit(200) houseTemplate.setBaseMaintenanceRate(8) + houseTemplate.setDestructionFee(800) housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) 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/exceptionallootchest/legendary_power_hammer.py b/scripts/loot/lootItems/exceptionallootchest/legendary_power_hammer.py index a05de2b3..d17b57e6 100644 --- a/scripts/loot/lootItems/exceptionallootchest/legendary_power_hammer.py +++ b/scripts/loot/lootItems/exceptionallootchest/legendary_power_hammer.py @@ -1,7 +1,7 @@ def itemTemplate(): - return ['object/weapon/melee/2h_sword/shared_quest_2h_sword_battleaxe.iff'] + return ['object/weapon/melee/2h_sword/shared_2h_sword_maul_legendary.iff'] def customItemName(): 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/corellia/afarathu_brute.py b/scripts/mobiles/corellia/afarathu_brute.py index c668fd78..5141219f 100644 --- a/scripts/mobiles/corellia/afarathu_brute.py +++ b/scripts/mobiles/corellia/afarathu_brute.py @@ -19,7 +19,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("afarathu") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_selonian_m_01.iff') diff --git a/scripts/mobiles/corellia/afarathu_cult_bodyguard.py b/scripts/mobiles/corellia/afarathu_cult_bodyguard.py index 7c671aa8..78842013 100644 --- a/scripts/mobiles/corellia/afarathu_cult_bodyguard.py +++ b/scripts/mobiles/corellia/afarathu_cult_bodyguard.py @@ -19,7 +19,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("afarathu") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_selonian_m_01.iff') diff --git a/scripts/mobiles/corellia/afarathu_cult_leader.py b/scripts/mobiles/corellia/afarathu_cult_leader.py index 5ca1a412..e7accdb3 100644 --- a/scripts/mobiles/corellia/afarathu_cult_leader.py +++ b/scripts/mobiles/corellia/afarathu_cult_leader.py @@ -19,7 +19,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("afarathu") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_selonian_m_01.iff') diff --git a/scripts/mobiles/corellia/afarathu_cult_zealot.py b/scripts/mobiles/corellia/afarathu_cult_zealot.py index 1a5e4df3..2fd6f8e6 100644 --- a/scripts/mobiles/corellia/afarathu_cult_zealot.py +++ b/scripts/mobiles/corellia/afarathu_cult_zealot.py @@ -19,7 +19,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("afarathu") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_selonian_m_01.iff') diff --git a/scripts/mobiles/corellia/afarathu_hellion.py b/scripts/mobiles/corellia/afarathu_hellion.py index a141bc5d..1084a9f5 100644 --- a/scripts/mobiles/corellia/afarathu_hellion.py +++ b/scripts/mobiles/corellia/afarathu_hellion.py @@ -19,7 +19,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("afarathu") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_selonian_m_01.iff') diff --git a/scripts/mobiles/corellia/afarathu_ruffian.py b/scripts/mobiles/corellia/afarathu_ruffian.py index 040e53e2..32e8facd 100644 --- a/scripts/mobiles/corellia/afarathu_ruffian.py +++ b/scripts/mobiles/corellia/afarathu_ruffian.py @@ -19,7 +19,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("afarathu") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_selonian_m_01.iff') diff --git a/scripts/mobiles/corellia/afarathu_savage.py b/scripts/mobiles/corellia/afarathu_savage.py index 689ba807..de0e000c 100644 --- a/scripts/mobiles/corellia/afarathu_savage.py +++ b/scripts/mobiles/corellia/afarathu_savage.py @@ -19,7 +19,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("afarathu") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_selonian_m_01.iff') diff --git a/scripts/mobiles/corellia/beldonnas_league_enforcer.py b/scripts/mobiles/corellia/beldonnas_league_enforcer.py index 4282aca9..942df782 100644 --- a/scripts/mobiles/corellia/beldonnas_league_enforcer.py +++ b/scripts/mobiles/corellia/beldonnas_league_enforcer.py @@ -19,7 +19,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("beldonnas league") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_mercenary_elite_hum_f_01.iff') diff --git a/scripts/mobiles/corellia/beldonnas_league_marshal.py b/scripts/mobiles/corellia/beldonnas_league_marshal.py index 798460e6..897fdd62 100644 --- a/scripts/mobiles/corellia/beldonnas_league_marshal.py +++ b/scripts/mobiles/corellia/beldonnas_league_marshal.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("beldonnas league") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_mercenary_elite_hum_f_01.iff') diff --git a/scripts/mobiles/corellia/beldonnas_league_scout.py b/scripts/mobiles/corellia/beldonnas_league_scout.py index b0a57209..4079bb85 100644 --- a/scripts/mobiles/corellia/beldonnas_league_scout.py +++ b/scripts/mobiles/corellia/beldonnas_league_scout.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("beldonnas league") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_mercenary_elite_hum_f_01.iff') diff --git a/scripts/mobiles/corellia/beldonnas_league_soldier.py b/scripts/mobiles/corellia/beldonnas_league_soldier.py index c0898755..ef900735 100644 --- a/scripts/mobiles/corellia/beldonnas_league_soldier.py +++ b/scripts/mobiles/corellia/beldonnas_league_soldier.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("self") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_mercenary_elite_hum_f_01.iff') diff --git a/scripts/mobiles/corellia/blood_stained_prowler.py b/scripts/mobiles/corellia/blood_stained_prowler.py index 8d5b037d..9c730d86 100644 --- a/scripts/mobiles/corellia/blood_stained_prowler.py +++ b/scripts/mobiles/corellia/blood_stained_prowler.py @@ -26,7 +26,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("wrix") mobileTemplate.setAssistRange(10) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_wrix.iff') diff --git a/scripts/mobiles/corellia/blood_thirsty_monarch.py b/scripts/mobiles/corellia/blood_thirsty_monarch.py index c01c7b99..e5419503 100644 --- a/scripts/mobiles/corellia/blood_thirsty_monarch.py +++ b/scripts/mobiles/corellia/blood_thirsty_monarch.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("corellian butterfly") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_corellian_butterfly.iff') diff --git a/scripts/mobiles/corellia/canoid_hunter.py b/scripts/mobiles/corellia/canoid_hunter.py index acc6a34b..f01d51ba 100644 --- a/scripts/mobiles/corellia/canoid_hunter.py +++ b/scripts/mobiles/corellia/canoid_hunter.py @@ -27,7 +27,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("canoid") mobileTemplate.setAssistRange(0) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_canoid.iff') diff --git a/scripts/mobiles/corellia/canoid_pack_leader.py b/scripts/mobiles/corellia/canoid_pack_leader.py index 05c90c58..37c1dbec 100644 --- a/scripts/mobiles/corellia/canoid_pack_leader.py +++ b/scripts/mobiles/corellia/canoid_pack_leader.py @@ -27,7 +27,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("canoid") mobileTemplate.setAssistRange(0) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_canoid.iff') diff --git a/scripts/mobiles/corellia/carrion_spat_corpsereaver.py b/scripts/mobiles/corellia/carrion_spat_corpsereaver.py index de6dfe5d..b7b1d8c5 100644 --- a/scripts/mobiles/corellia/carrion_spat_corpsereaver.py +++ b/scripts/mobiles/corellia/carrion_spat_corpsereaver.py @@ -24,7 +24,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("carrion spat") mobileTemplate.setAssistRange(0) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_carrion_spat.iff') diff --git a/scripts/mobiles/corellia/corellian_butterfly.py b/scripts/mobiles/corellia/corellian_butterfly.py index cfe55109..b192a1ec 100644 --- a/scripts/mobiles/corellia/corellian_butterfly.py +++ b/scripts/mobiles/corellia/corellian_butterfly.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("corellian butterfly") mobileTemplate.setAssistRange(0) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_corellian_butterfly.iff') diff --git a/scripts/mobiles/corellia/corellian_butterfly_defender.py b/scripts/mobiles/corellia/corellian_butterfly_defender.py index 424cbe1d..918707a0 100644 --- a/scripts/mobiles/corellia/corellian_butterfly_defender.py +++ b/scripts/mobiles/corellia/corellian_butterfly_defender.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("corellian butterfly") mobileTemplate.setAssistRange(0) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_corellian_butterfly.iff') diff --git a/scripts/mobiles/corellia/corellian_butterfly_drone.py b/scripts/mobiles/corellia/corellian_butterfly_drone.py index e01bcdec..2553b2f2 100644 --- a/scripts/mobiles/corellia/corellian_butterfly_drone.py +++ b/scripts/mobiles/corellia/corellian_butterfly_drone.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("corellian butterfly") mobileTemplate.setAssistRange(0) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_corellian_butterfly.iff') diff --git a/scripts/mobiles/corellia/corellian_butterfly_monarch.py b/scripts/mobiles/corellia/corellian_butterfly_monarch.py index 5287af67..982da124 100644 --- a/scripts/mobiles/corellia/corellian_butterfly_monarch.py +++ b/scripts/mobiles/corellia/corellian_butterfly_monarch.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("corellian butterfly") mobileTemplate.setAssistRange(0) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_corellian_butterfly.iff') diff --git a/scripts/mobiles/corellia/corellian_butterfly_warrior.py b/scripts/mobiles/corellia/corellian_butterfly_warrior.py index 6f38bdb1..0e324c05 100644 --- a/scripts/mobiles/corellia/corellian_butterfly_warrior.py +++ b/scripts/mobiles/corellia/corellian_butterfly_warrior.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("corellian butterfly") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_corellian_butterfly.iff') diff --git a/scripts/mobiles/corellia/corellian_butterfly_worker.py b/scripts/mobiles/corellia/corellian_butterfly_worker.py index 53152eb7..055e82e0 100644 --- a/scripts/mobiles/corellia/corellian_butterfly_worker.py +++ b/scripts/mobiles/corellia/corellian_butterfly_worker.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("corellian butterfly") mobileTemplate.setAssistRange(0) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_corellian_butterfly.iff') diff --git a/scripts/mobiles/corellia/corsec_deserter.py b/scripts/mobiles/corellia/corsec_deserter.py index b9200f61..b2eaa226 100644 --- a/scripts/mobiles/corellia/corsec_deserter.py +++ b/scripts/mobiles/corellia/corsec_deserter.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("corsec rogue") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_corsec_captain_human_female_01.iff') diff --git a/scripts/mobiles/corellia/corsec_security_specialist.py b/scripts/mobiles/corellia/corsec_security_specialist.py index 185d8ae4..36e09348 100644 --- a/scripts/mobiles/corellia/corsec_security_specialist.py +++ b/scripts/mobiles/corellia/corsec_security_specialist.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("aggro corsec") mobileTemplate.setAssistRange(10) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_corsec_captain_human_female_01.iff') diff --git a/scripts/mobiles/corellia/corsec_special_agent.py b/scripts/mobiles/corellia/corsec_special_agent.py index bae3f85a..7569a8e1 100644 --- a/scripts/mobiles/corellia/corsec_special_agent.py +++ b/scripts/mobiles/corellia/corsec_special_agent.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("aggro corsec") mobileTemplate.setAssistRange(10) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_corsec_captain_human_female_01.iff') diff --git a/scripts/mobiles/corellia/corsec_special_ops_captain.py b/scripts/mobiles/corellia/corsec_special_ops_captain.py index c536c28f..6e2a4386 100644 --- a/scripts/mobiles/corellia/corsec_special_ops_captain.py +++ b/scripts/mobiles/corellia/corsec_special_ops_captain.py @@ -20,7 +20,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("aggro corsec") mobileTemplate.setAssistRange(10) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_corsec_captain_human_female_01.iff') diff --git a/scripts/mobiles/corellia/corsec_special_ops_chief.py b/scripts/mobiles/corellia/corsec_special_ops_chief.py index 6478a8f6..dca571ea 100644 --- a/scripts/mobiles/corellia/corsec_special_ops_chief.py +++ b/scripts/mobiles/corellia/corsec_special_ops_chief.py @@ -20,7 +20,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("aggro corsec") mobileTemplate.setAssistRange(10) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_corsec_captain_human_female_01.iff') diff --git a/scripts/mobiles/corellia/corsec_special_ops_commissioner.py b/scripts/mobiles/corellia/corsec_special_ops_commissioner.py index acec072c..b7ec3575 100644 --- a/scripts/mobiles/corellia/corsec_special_ops_commissioner.py +++ b/scripts/mobiles/corellia/corsec_special_ops_commissioner.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("aggro corsec") mobileTemplate.setAssistRange(10) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_corsec_captain_human_female_01.iff') diff --git a/scripts/mobiles/corellia/corsec_special_ops_inspector.py b/scripts/mobiles/corellia/corsec_special_ops_inspector.py index 4f190b8c..fef03762 100644 --- a/scripts/mobiles/corellia/corsec_special_ops_inspector.py +++ b/scripts/mobiles/corellia/corsec_special_ops_inspector.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("aggro corsec") mobileTemplate.setAssistRange(10) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_corsec_captain_human_female_01.iff') diff --git a/scripts/mobiles/corellia/corsec_special_ops_lieutenant.py b/scripts/mobiles/corellia/corsec_special_ops_lieutenant.py index f0cc16ea..2f6df6e2 100644 --- a/scripts/mobiles/corellia/corsec_special_ops_lieutenant.py +++ b/scripts/mobiles/corellia/corsec_special_ops_lieutenant.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("aggro corsec") mobileTemplate.setAssistRange(10) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_corsec_captain_human_female_01.iff') diff --git a/scripts/mobiles/corellia/corsec_special_ops_major.py b/scripts/mobiles/corellia/corsec_special_ops_major.py index 3cd3150a..b5ae97a5 100644 --- a/scripts/mobiles/corellia/corsec_special_ops_major.py +++ b/scripts/mobiles/corellia/corsec_special_ops_major.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("aggro corsec") mobileTemplate.setAssistRange(10) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_corsec_captain_human_female_01.iff') diff --git a/scripts/mobiles/corellia/corsec_special_ops_master_sergeant.py b/scripts/mobiles/corellia/corsec_special_ops_master_sergeant.py index 21342267..4f0316ec 100644 --- a/scripts/mobiles/corellia/corsec_special_ops_master_sergeant.py +++ b/scripts/mobiles/corellia/corsec_special_ops_master_sergeant.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("aggro corsec") mobileTemplate.setAssistRange(10) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_corsec_captain_human_female_01.iff') diff --git a/scripts/mobiles/corellia/corsec_special_ops_sergeant.py b/scripts/mobiles/corellia/corsec_special_ops_sergeant.py index 5cd11b95..2c979544 100644 --- a/scripts/mobiles/corellia/corsec_special_ops_sergeant.py +++ b/scripts/mobiles/corellia/corsec_special_ops_sergeant.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("aggro corsec") mobileTemplate.setAssistRange(10) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_corsec_captain_human_female_01.iff') diff --git a/scripts/mobiles/corellia/corsec_special_ops_trainee.py b/scripts/mobiles/corellia/corsec_special_ops_trainee.py index c4b93cb3..261d8205 100644 --- a/scripts/mobiles/corellia/corsec_special_ops_trainee.py +++ b/scripts/mobiles/corellia/corsec_special_ops_trainee.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("aggro corsec") mobileTemplate.setAssistRange(10) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_corsec_captain_human_female_01.iff') diff --git a/scripts/mobiles/corellia/corsec_traitor.py b/scripts/mobiles/corellia/corsec_traitor.py index 0690720e..052f6386 100644 --- a/scripts/mobiles/corellia/corsec_traitor.py +++ b/scripts/mobiles/corellia/corsec_traitor.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("corsec rogue") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_corsec_captain_human_female_01.iff') diff --git a/scripts/mobiles/corellia/deranged_wrix.py b/scripts/mobiles/corellia/deranged_wrix.py index b28a89e3..3234d593 100644 --- a/scripts/mobiles/corellia/deranged_wrix.py +++ b/scripts/mobiles/corellia/deranged_wrix.py @@ -27,7 +27,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("wrix") mobileTemplate.setAssistRange(10) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_deranged_wrix.iff') diff --git a/scripts/mobiles/corellia/devil_gulginaw.py b/scripts/mobiles/corellia/devil_gulginaw.py index 10230919..6a56a32d 100644 --- a/scripts/mobiles/corellia/devil_gulginaw.py +++ b/scripts/mobiles/corellia/devil_gulginaw.py @@ -23,7 +23,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("gulginaw") mobileTemplate.setAssistRange(10) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_devil_gulginaw.iff') diff --git a/scripts/mobiles/corellia/drall_abbot.py b/scripts/mobiles/corellia/drall_abbot.py index 41771e43..fbcf3f32 100644 --- a/scripts/mobiles/corellia/drall_abbot.py +++ b/scripts/mobiles/corellia/drall_abbot.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("drall") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_drall_female.iff') diff --git a/scripts/mobiles/corellia/drall_chieftain.py b/scripts/mobiles/corellia/drall_chieftain.py index eddaae20..06900946 100644 --- a/scripts/mobiles/corellia/drall_chieftain.py +++ b/scripts/mobiles/corellia/drall_chieftain.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("drall") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_drall_female.iff') diff --git a/scripts/mobiles/corellia/drall_guard.py b/scripts/mobiles/corellia/drall_guard.py index e28f7699..0ce4282f 100644 --- a/scripts/mobiles/corellia/drall_guard.py +++ b/scripts/mobiles/corellia/drall_guard.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("drall") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_drall_female.iff') diff --git a/scripts/mobiles/corellia/drall_master.py b/scripts/mobiles/corellia/drall_master.py index 7376ee94..239e4bc8 100644 --- a/scripts/mobiles/corellia/drall_master.py +++ b/scripts/mobiles/corellia/drall_master.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("drall") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_drall_female.iff') diff --git a/scripts/mobiles/corellia/drall_monk.py b/scripts/mobiles/corellia/drall_monk.py index db880333..1780230a 100644 --- a/scripts/mobiles/corellia/drall_monk.py +++ b/scripts/mobiles/corellia/drall_monk.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("drall") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_drall_female.iff') diff --git a/scripts/mobiles/corellia/drall_patriot.py b/scripts/mobiles/corellia/drall_patriot.py index 3d013d94..3bc83ee7 100644 --- a/scripts/mobiles/corellia/drall_patriot.py +++ b/scripts/mobiles/corellia/drall_patriot.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("drall") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_drall_female.iff') diff --git a/scripts/mobiles/corellia/drall_patriot_conqueror.py b/scripts/mobiles/corellia/drall_patriot_conqueror.py index da39276e..b2a71910 100644 --- a/scripts/mobiles/corellia/drall_patriot_conqueror.py +++ b/scripts/mobiles/corellia/drall_patriot_conqueror.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("drall") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_drall_female.iff') diff --git a/scripts/mobiles/corellia/drall_patriot_footsoldier.py b/scripts/mobiles/corellia/drall_patriot_footsoldier.py index 7775cfed..dd77eb69 100644 --- a/scripts/mobiles/corellia/drall_patriot_footsoldier.py +++ b/scripts/mobiles/corellia/drall_patriot_footsoldier.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("drall") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_drall_female.iff') diff --git a/scripts/mobiles/corellia/drall_patriot_legionnaire.py b/scripts/mobiles/corellia/drall_patriot_legionnaire.py index 9b97cf1b..2a75c430 100644 --- a/scripts/mobiles/corellia/drall_patriot_legionnaire.py +++ b/scripts/mobiles/corellia/drall_patriot_legionnaire.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("drall") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_drall_female.iff') diff --git a/scripts/mobiles/corellia/drall_sentry.py b/scripts/mobiles/corellia/drall_sentry.py index cf870940..897fb881 100644 --- a/scripts/mobiles/corellia/drall_sentry.py +++ b/scripts/mobiles/corellia/drall_sentry.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("drall") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_drall_female.iff') diff --git a/scripts/mobiles/corellia/feral_selonian.py b/scripts/mobiles/corellia/feral_selonian.py index e6d854e6..3bb59055 100644 --- a/scripts/mobiles/corellia/feral_selonian.py +++ b/scripts/mobiles/corellia/feral_selonian.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("self") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_selonian_m_01.iff') diff --git a/scripts/mobiles/corellia/flail_boss.py b/scripts/mobiles/corellia/flail_boss.py index dffd565a..16650e2c 100644 --- a/scripts/mobiles/corellia/flail_boss.py +++ b/scripts/mobiles/corellia/flail_boss.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("flail") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_criminal_thug_human_female_01.iff') diff --git a/scripts/mobiles/corellia/flail_butcher.py b/scripts/mobiles/corellia/flail_butcher.py index 54950efa..b498b939 100644 --- a/scripts/mobiles/corellia/flail_butcher.py +++ b/scripts/mobiles/corellia/flail_butcher.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("flail") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_criminal_thug_human_female_01.iff') diff --git a/scripts/mobiles/corellia/flail_cutthroat.py b/scripts/mobiles/corellia/flail_cutthroat.py index 9ccb7ad9..5501bb17 100644 --- a/scripts/mobiles/corellia/flail_cutthroat.py +++ b/scripts/mobiles/corellia/flail_cutthroat.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("flail") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_criminal_thug_human_female_01.iff') diff --git a/scripts/mobiles/corellia/flail_enforcer.py b/scripts/mobiles/corellia/flail_enforcer.py index cf651c6f..9d826205 100644 --- a/scripts/mobiles/corellia/flail_enforcer.py +++ b/scripts/mobiles/corellia/flail_enforcer.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("flail") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_criminal_thug_human_female_01.iff') diff --git a/scripts/mobiles/corellia/flail_executioner.py b/scripts/mobiles/corellia/flail_executioner.py index 0e58e3f6..047e4a6b 100644 --- a/scripts/mobiles/corellia/flail_executioner.py +++ b/scripts/mobiles/corellia/flail_executioner.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("flail") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_criminal_thug_human_female_01.iff') diff --git a/scripts/mobiles/corellia/flail_killer.py b/scripts/mobiles/corellia/flail_killer.py index 1dbff0b7..fcea3ba1 100644 --- a/scripts/mobiles/corellia/flail_killer.py +++ b/scripts/mobiles/corellia/flail_killer.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("flail") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_criminal_thug_human_female_01.iff') diff --git a/scripts/mobiles/corellia/flail_slayer.py b/scripts/mobiles/corellia/flail_slayer.py index 59e6ffbd..c78a44f9 100644 --- a/scripts/mobiles/corellia/flail_slayer.py +++ b/scripts/mobiles/corellia/flail_slayer.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("flail") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_criminal_thug_human_female_01.iff') diff --git a/scripts/mobiles/corellia/grand_wrix.py b/scripts/mobiles/corellia/grand_wrix.py index a7e728a9..9bd018b2 100644 --- a/scripts/mobiles/corellia/grand_wrix.py +++ b/scripts/mobiles/corellia/grand_wrix.py @@ -27,7 +27,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("wrix") mobileTemplate.setAssistRange(10) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_grand_wrix.iff') diff --git a/scripts/mobiles/corellia/greater_gulginaw.py b/scripts/mobiles/corellia/greater_gulginaw.py index ac1f1984..0ace9d95 100644 --- a/scripts/mobiles/corellia/greater_gulginaw.py +++ b/scripts/mobiles/corellia/greater_gulginaw.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("gulginaw") mobileTemplate.setAssistRange(10) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_greater_gulginaw.iff') diff --git a/scripts/mobiles/corellia/gulginaw.py b/scripts/mobiles/corellia/gulginaw.py index 3aedc97e..37eda45f 100644 --- a/scripts/mobiles/corellia/gulginaw.py +++ b/scripts/mobiles/corellia/gulginaw.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("gulginaw") mobileTemplate.setAssistRange(10) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_gulginaw.iff') diff --git a/scripts/mobiles/corellia/hidden_daggers_activist.py b/scripts/mobiles/corellia/hidden_daggers_activist.py index 9acbc761..5e26207d 100644 --- a/scripts/mobiles/corellia/hidden_daggers_activist.py +++ b/scripts/mobiles/corellia/hidden_daggers_activist.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("hidden_daggers") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_hiddendaggers_pilot_f_01.iff') diff --git a/scripts/mobiles/corellia/hidden_daggers_dissident.py b/scripts/mobiles/corellia/hidden_daggers_dissident.py index 40fdba4d..726d4cb2 100644 --- a/scripts/mobiles/corellia/hidden_daggers_dissident.py +++ b/scripts/mobiles/corellia/hidden_daggers_dissident.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("hidden_daggers") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_hiddendaggers_pilot_f_01.iff') diff --git a/scripts/mobiles/corellia/hidden_daggers_extremist.py b/scripts/mobiles/corellia/hidden_daggers_extremist.py index ea694b6b..38e5d5ff 100644 --- a/scripts/mobiles/corellia/hidden_daggers_extremist.py +++ b/scripts/mobiles/corellia/hidden_daggers_extremist.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("hidden_daggers") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_hiddendaggers_pilot_f_01.iff') diff --git a/scripts/mobiles/corellia/hidden_daggers_leader.py b/scripts/mobiles/corellia/hidden_daggers_leader.py index 14ab2b76..4801f8e3 100644 --- a/scripts/mobiles/corellia/hidden_daggers_leader.py +++ b/scripts/mobiles/corellia/hidden_daggers_leader.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("hidden_daggers") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_hiddendaggers_pilot_f_01.iff') diff --git a/scripts/mobiles/corellia/hidden_daggers_lieutenant.py b/scripts/mobiles/corellia/hidden_daggers_lieutenant.py index e181d558..22d651f4 100644 --- a/scripts/mobiles/corellia/hidden_daggers_lieutenant.py +++ b/scripts/mobiles/corellia/hidden_daggers_lieutenant.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("hidden_daggers") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_hiddendaggers_pilot_f_01.iff') diff --git a/scripts/mobiles/corellia/lord_nyax.py b/scripts/mobiles/corellia/lord_nyax.py index 3bf3131b..3caa148a 100644 --- a/scripts/mobiles/corellia/lord_nyax.py +++ b/scripts/mobiles/corellia/lord_nyax.py @@ -20,7 +20,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("followers of lord nyax") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_lord_nyax.iff') diff --git a/scripts/mobiles/corellia/mottled_wrix.py b/scripts/mobiles/corellia/mottled_wrix.py index 63a2861d..c227b569 100644 --- a/scripts/mobiles/corellia/mottled_wrix.py +++ b/scripts/mobiles/corellia/mottled_wrix.py @@ -27,7 +27,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("wrix") mobileTemplate.setAssistRange(10) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_grand_wrix.iff') diff --git a/scripts/mobiles/corellia/ragtag_blackjack.py b/scripts/mobiles/corellia/ragtag_blackjack.py index e825a0fb..af60f1cd 100644 --- a/scripts/mobiles/corellia/ragtag_blackjack.py +++ b/scripts/mobiles/corellia/ragtag_blackjack.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("ragtag gang") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_criminal_thug_human_female_01.iff') diff --git a/scripts/mobiles/corellia/ragtag_kook.py b/scripts/mobiles/corellia/ragtag_kook.py index 6963f722..9f42bc75 100644 --- a/scripts/mobiles/corellia/ragtag_kook.py +++ b/scripts/mobiles/corellia/ragtag_kook.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("ragtag gang") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_criminal_thug_human_female_01.iff') diff --git a/scripts/mobiles/corellia/ragtag_loon.py b/scripts/mobiles/corellia/ragtag_loon.py index 3e984134..7a61bbbc 100644 --- a/scripts/mobiles/corellia/ragtag_loon.py +++ b/scripts/mobiles/corellia/ragtag_loon.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("ragtag gang") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_criminal_thug_human_female_01.iff') diff --git a/scripts/mobiles/corellia/ragtag_lunatic.py b/scripts/mobiles/corellia/ragtag_lunatic.py index d1722bc5..f77bd4b5 100644 --- a/scripts/mobiles/corellia/ragtag_lunatic.py +++ b/scripts/mobiles/corellia/ragtag_lunatic.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("ragtag gang") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_criminal_thug_human_female_01.iff') diff --git a/scripts/mobiles/corellia/ragtag_maniac.py b/scripts/mobiles/corellia/ragtag_maniac.py index 8203a597..d68bd55c 100644 --- a/scripts/mobiles/corellia/ragtag_maniac.py +++ b/scripts/mobiles/corellia/ragtag_maniac.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("ragtag gang") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_criminal_thug_human_female_01.iff') diff --git a/scripts/mobiles/corellia/ragtag_sentry.py b/scripts/mobiles/corellia/ragtag_sentry.py index 068e9256..bca1ecb3 100644 --- a/scripts/mobiles/corellia/ragtag_sentry.py +++ b/scripts/mobiles/corellia/ragtag_sentry.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("ragtag gang") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_criminal_thug_human_female_01.iff') diff --git a/scripts/mobiles/corellia/rogue_corsec_trooper18.py b/scripts/mobiles/corellia/rogue_corsec_trooper18.py index d73feb8d..52f95489 100644 --- a/scripts/mobiles/corellia/rogue_corsec_trooper18.py +++ b/scripts/mobiles/corellia/rogue_corsec_trooper18.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("corsec") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_corsec_captain_human_female_01.iff') diff --git a/scripts/mobiles/corellia/rogue_corsec_trooper33.py b/scripts/mobiles/corellia/rogue_corsec_trooper33.py index e5d3119d..7173fdf6 100644 --- a/scripts/mobiles/corellia/rogue_corsec_trooper33.py +++ b/scripts/mobiles/corellia/rogue_corsec_trooper33.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("corsec") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_corsec_captain_human_female_01.iff') diff --git a/scripts/mobiles/corellia/selonian_assassin.py b/scripts/mobiles/corellia/selonian_assassin.py index 83843203..ed36f4b3 100644 --- a/scripts/mobiles/corellia/selonian_assassin.py +++ b/scripts/mobiles/corellia/selonian_assassin.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("selonian") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_selonian_m_01.iff') diff --git a/scripts/mobiles/corellia/selonian_captain.py b/scripts/mobiles/corellia/selonian_captain.py index 04a84bd8..96c1bc8f 100644 --- a/scripts/mobiles/corellia/selonian_captain.py +++ b/scripts/mobiles/corellia/selonian_captain.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("selonian") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_selonian_m_01.iff') diff --git a/scripts/mobiles/corellia/selonian_champion.py b/scripts/mobiles/corellia/selonian_champion.py index 9ff20547..c95d0cce 100644 --- a/scripts/mobiles/corellia/selonian_champion.py +++ b/scripts/mobiles/corellia/selonian_champion.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("selonian") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_selonian_m_01.iff') diff --git a/scripts/mobiles/corellia/selonian_healer.py b/scripts/mobiles/corellia/selonian_healer.py index f9ea0103..a8b2cf1e 100644 --- a/scripts/mobiles/corellia/selonian_healer.py +++ b/scripts/mobiles/corellia/selonian_healer.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("selonian") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_selonian_m_01.iff') diff --git a/scripts/mobiles/corellia/selonian_hunter.py b/scripts/mobiles/corellia/selonian_hunter.py index 47a021bc..3767b42a 100644 --- a/scripts/mobiles/corellia/selonian_hunter.py +++ b/scripts/mobiles/corellia/selonian_hunter.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("selonian") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_selonian_m_01.iff') diff --git a/scripts/mobiles/corellia/selonian_raider.py b/scripts/mobiles/corellia/selonian_raider.py index a73eac5f..836d30db 100644 --- a/scripts/mobiles/corellia/selonian_raider.py +++ b/scripts/mobiles/corellia/selonian_raider.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("selonian") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_selonian_m_01.iff') diff --git a/scripts/mobiles/corellia/selonian_scout.py b/scripts/mobiles/corellia/selonian_scout.py index 205e3e05..8c490687 100644 --- a/scripts/mobiles/corellia/selonian_scout.py +++ b/scripts/mobiles/corellia/selonian_scout.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("selonian") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_selonian_m_01.iff') diff --git a/scripts/mobiles/corellia/selonian_sentinel.py b/scripts/mobiles/corellia/selonian_sentinel.py index 80717964..ab2cc26a 100644 --- a/scripts/mobiles/corellia/selonian_sentinel.py +++ b/scripts/mobiles/corellia/selonian_sentinel.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("selonian") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_selonian_m_01.iff') diff --git a/scripts/mobiles/corellia/selonian_separatist.py b/scripts/mobiles/corellia/selonian_separatist.py index f96339ee..c782379a 100644 --- a/scripts/mobiles/corellia/selonian_separatist.py +++ b/scripts/mobiles/corellia/selonian_separatist.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("selonian") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_selonian_m_01.iff') diff --git a/scripts/mobiles/corellia/selonian_separatist_captain.py b/scripts/mobiles/corellia/selonian_separatist_captain.py index 7ef80564..25b10759 100644 --- a/scripts/mobiles/corellia/selonian_separatist_captain.py +++ b/scripts/mobiles/corellia/selonian_separatist_captain.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("selonian") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_selonian_m_01.iff') diff --git a/scripts/mobiles/corellia/selonian_separatist_general.py b/scripts/mobiles/corellia/selonian_separatist_general.py index d90c0ca8..7721f842 100644 --- a/scripts/mobiles/corellia/selonian_separatist_general.py +++ b/scripts/mobiles/corellia/selonian_separatist_general.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("selonian") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_selonian_m_01.iff') diff --git a/scripts/mobiles/corellia/selonian_separatist_recruit.py b/scripts/mobiles/corellia/selonian_separatist_recruit.py index 27ca9330..d9af9cd9 100644 --- a/scripts/mobiles/corellia/selonian_separatist_recruit.py +++ b/scripts/mobiles/corellia/selonian_separatist_recruit.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("selonian") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_selonian_m_01.iff') diff --git a/scripts/mobiles/corellia/selonian_separatist_soldier.py b/scripts/mobiles/corellia/selonian_separatist_soldier.py index acc96786..5353e962 100644 --- a/scripts/mobiles/corellia/selonian_separatist_soldier.py +++ b/scripts/mobiles/corellia/selonian_separatist_soldier.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("selonian") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_selonian_m_01.iff') diff --git a/scripts/mobiles/corellia/selonian_thief.py b/scripts/mobiles/corellia/selonian_thief.py index 59b85e50..08e80b0b 100644 --- a/scripts/mobiles/corellia/selonian_thief.py +++ b/scripts/mobiles/corellia/selonian_thief.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("selonian") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_selonian_m_01.iff') diff --git a/scripts/mobiles/corellia/selonian_warlord.py b/scripts/mobiles/corellia/selonian_warlord.py index 5457beaf..8d02752e 100644 --- a/scripts/mobiles/corellia/selonian_warlord.py +++ b/scripts/mobiles/corellia/selonian_warlord.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("selonian") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_selonian_m_01.iff') diff --git a/scripts/mobiles/corellia/selonian_warrior.py b/scripts/mobiles/corellia/selonian_warrior.py index 27d37840..098f6a6d 100644 --- a/scripts/mobiles/corellia/selonian_warrior.py +++ b/scripts/mobiles/corellia/selonian_warrior.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("selonian") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_selonian_m_01.iff') diff --git a/scripts/mobiles/corellia/wrix.py b/scripts/mobiles/corellia/wrix.py index e0c6e596..e38efb5a 100644 --- a/scripts/mobiles/corellia/wrix.py +++ b/scripts/mobiles/corellia/wrix.py @@ -27,7 +27,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("wrix") mobileTemplate.setAssistRange(0) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_grand_wrix.iff') diff --git a/scripts/mobiles/dantooine/ancient_graul.py b/scripts/mobiles/dantooine/ancient_graul.py index 03f7e1f6..dafee3ee 100644 --- a/scripts/mobiles/dantooine/ancient_graul.py +++ b/scripts/mobiles/dantooine/ancient_graul.py @@ -26,7 +26,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("graul") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_slinking_voritor_hunter.iff') diff --git a/scripts/mobiles/dantooine/bile_drenched_quenker.py b/scripts/mobiles/dantooine/bile_drenched_quenker.py index 9ab334a0..5c988bef 100644 --- a/scripts/mobiles/dantooine/bile_drenched_quenker.py +++ b/scripts/mobiles/dantooine/bile_drenched_quenker.py @@ -26,7 +26,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("quenker") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_quenker_relic_reaper.iff') diff --git a/scripts/mobiles/dantooine/dark_adept.py b/scripts/mobiles/dantooine/dark_adept.py index 0f3abc11..4935b855 100644 --- a/scripts/mobiles/dantooine/dark_adept.py +++ b/scripts/mobiles/dantooine/dark_adept.py @@ -22,7 +22,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup('dark jedi') mobileTemplate.setAssistRange(12) mobileTemplate.setRespawnTime(300) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() diff --git a/scripts/mobiles/dantooine/dark_jedi_knight.py b/scripts/mobiles/dantooine/dark_jedi_knight.py index 21f46897..33d51e6e 100644 --- a/scripts/mobiles/dantooine/dark_jedi_knight.py +++ b/scripts/mobiles/dantooine/dark_jedi_knight.py @@ -22,7 +22,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup('dark jedi') mobileTemplate.setAssistRange(12) mobileTemplate.setRespawnTime(300) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_dark_jedi_male_human_01.iff') diff --git a/scripts/mobiles/dantooine/dark_jedi_master.py b/scripts/mobiles/dantooine/dark_jedi_master.py index 00b9c0f8..d2e68e52 100644 --- a/scripts/mobiles/dantooine/dark_jedi_master.py +++ b/scripts/mobiles/dantooine/dark_jedi_master.py @@ -20,7 +20,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup('dark jedi') mobileTemplate.setAssistRange(12) mobileTemplate.setRespawnTime(300) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_dark_jedi_master_female_twk_01.iff') @@ -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/dantooine/frenzied_graul.py b/scripts/mobiles/dantooine/frenzied_graul.py index 6bc6a47d..0a945bc5 100644 --- a/scripts/mobiles/dantooine/frenzied_graul.py +++ b/scripts/mobiles/dantooine/frenzied_graul.py @@ -26,7 +26,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("graul") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_slinking_voritor_hunter.iff') diff --git a/scripts/mobiles/dantooine/grassland_voritor_tracker.py b/scripts/mobiles/dantooine/grassland_voritor_tracker.py index f6815bb5..424ba0be 100644 --- a/scripts/mobiles/dantooine/grassland_voritor_tracker.py +++ b/scripts/mobiles/dantooine/grassland_voritor_tracker.py @@ -26,7 +26,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("voritor lizard") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_grassland_voritor_tracker.iff') diff --git a/scripts/mobiles/dantooine/graul.py b/scripts/mobiles/dantooine/graul.py index ef0bc70b..3d4c9f64 100644 --- a/scripts/mobiles/dantooine/graul.py +++ b/scripts/mobiles/dantooine/graul.py @@ -26,7 +26,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("graul") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_graul.iff') diff --git a/scripts/mobiles/dantooine/graul_mangler.py b/scripts/mobiles/dantooine/graul_mangler.py index 69b5af9d..27257e20 100644 --- a/scripts/mobiles/dantooine/graul_mangler.py +++ b/scripts/mobiles/dantooine/graul_mangler.py @@ -26,7 +26,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("graul") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_graul.iff') diff --git a/scripts/mobiles/dantooine/graul_marauder.py b/scripts/mobiles/dantooine/graul_marauder.py index 252fd91e..ebcb5e76 100644 --- a/scripts/mobiles/dantooine/graul_marauder.py +++ b/scripts/mobiles/dantooine/graul_marauder.py @@ -26,7 +26,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("graul") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_graul.iff') diff --git a/scripts/mobiles/dantooine/graul_mauler.py b/scripts/mobiles/dantooine/graul_mauler.py index 944a188d..4515ef49 100644 --- a/scripts/mobiles/dantooine/graul_mauler.py +++ b/scripts/mobiles/dantooine/graul_mauler.py @@ -26,7 +26,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("graul") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_graul.iff') diff --git a/scripts/mobiles/dantooine/horned_voritor_jungle_lizard.py b/scripts/mobiles/dantooine/horned_voritor_jungle_lizard.py index 9b6c283d..05f60351 100644 --- a/scripts/mobiles/dantooine/horned_voritor_jungle_lizard.py +++ b/scripts/mobiles/dantooine/horned_voritor_jungle_lizard.py @@ -26,7 +26,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("voritor lizard") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_voritor_lizard.iff') diff --git a/scripts/mobiles/dantooine/hostile_thune_mother.py b/scripts/mobiles/dantooine/hostile_thune_mother.py index 8cbd4939..e5a176e5 100644 --- a/scripts/mobiles/dantooine/hostile_thune_mother.py +++ b/scripts/mobiles/dantooine/hostile_thune_mother.py @@ -26,7 +26,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("thune") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_thune.iff') diff --git a/scripts/mobiles/dantooine/huurton.py b/scripts/mobiles/dantooine/huurton.py index a2a99c57..b71e1b6c 100644 --- a/scripts/mobiles/dantooine/huurton.py +++ b/scripts/mobiles/dantooine/huurton.py @@ -26,7 +26,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("huurton") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_huurton.iff') diff --git a/scripts/mobiles/dantooine/huurton_bloodhunter.py b/scripts/mobiles/dantooine/huurton_bloodhunter.py index f2580c17..7e28252c 100644 --- a/scripts/mobiles/dantooine/huurton_bloodhunter.py +++ b/scripts/mobiles/dantooine/huurton_bloodhunter.py @@ -26,7 +26,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("huurton") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_huurton.iff') diff --git a/scripts/mobiles/dantooine/huurton_howler.py b/scripts/mobiles/dantooine/huurton_howler.py index 1a27dc07..7060328c 100644 --- a/scripts/mobiles/dantooine/huurton_howler.py +++ b/scripts/mobiles/dantooine/huurton_howler.py @@ -26,7 +26,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("huurton") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_huurton.iff') diff --git a/scripts/mobiles/dantooine/huurton_huntress.py b/scripts/mobiles/dantooine/huurton_huntress.py index b99180dd..6e8c7c54 100644 --- a/scripts/mobiles/dantooine/huurton_huntress.py +++ b/scripts/mobiles/dantooine/huurton_huntress.py @@ -26,7 +26,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("huurton") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() diff --git a/scripts/mobiles/dantooine/huurton_matron.py b/scripts/mobiles/dantooine/huurton_matron.py index e466a2a4..cf52e5b9 100644 --- a/scripts/mobiles/dantooine/huurton_matron.py +++ b/scripts/mobiles/dantooine/huurton_matron.py @@ -26,7 +26,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("huurton") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_huurton.iff') diff --git a/scripts/mobiles/dantooine/huurton_pub.py b/scripts/mobiles/dantooine/huurton_pub.py index dfd78e9e..7643371f 100644 --- a/scripts/mobiles/dantooine/huurton_pub.py +++ b/scripts/mobiles/dantooine/huurton_pub.py @@ -26,7 +26,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("huurton") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_huurton_pup.iff') diff --git a/scripts/mobiles/dantooine/huurton_reaper.py b/scripts/mobiles/dantooine/huurton_reaper.py index 16c79940..6264d7cb 100644 --- a/scripts/mobiles/dantooine/huurton_reaper.py +++ b/scripts/mobiles/dantooine/huurton_reaper.py @@ -26,7 +26,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("huurton") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_huurton.iff') diff --git a/scripts/mobiles/dantooine/huurton_stalker.py b/scripts/mobiles/dantooine/huurton_stalker.py index a500dee8..fbd097ad 100644 --- a/scripts/mobiles/dantooine/huurton_stalker.py +++ b/scripts/mobiles/dantooine/huurton_stalker.py @@ -26,7 +26,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("huurton") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_huurton.iff') diff --git a/scripts/mobiles/dantooine/infant_graul.py b/scripts/mobiles/dantooine/infant_graul.py index bf35d1e1..8ce44302 100644 --- a/scripts/mobiles/dantooine/infant_graul.py +++ b/scripts/mobiles/dantooine/infant_graul.py @@ -26,7 +26,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("graul") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_infant_graul.iff') diff --git a/scripts/mobiles/dantooine/mammoth_thune.py b/scripts/mobiles/dantooine/mammoth_thune.py index e2857e26..023622ef 100644 --- a/scripts/mobiles/dantooine/mammoth_thune.py +++ b/scripts/mobiles/dantooine/mammoth_thune.py @@ -26,7 +26,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("thune") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_thune_hue.iff') diff --git a/scripts/mobiles/dantooine/quenker.py b/scripts/mobiles/dantooine/quenker.py index 9173cc06..8b1aec9f 100644 --- a/scripts/mobiles/dantooine/quenker.py +++ b/scripts/mobiles/dantooine/quenker.py @@ -26,7 +26,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("quenker") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_quenker.iff') diff --git a/scripts/mobiles/dantooine/quenker_ravager.py b/scripts/mobiles/dantooine/quenker_ravager.py index 63936e71..c11b8bde 100644 --- a/scripts/mobiles/dantooine/quenker_ravager.py +++ b/scripts/mobiles/dantooine/quenker_ravager.py @@ -26,7 +26,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("quenker") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_quenker_hue.iff') diff --git a/scripts/mobiles/dantooine/quenker_relic_reaper.py b/scripts/mobiles/dantooine/quenker_relic_reaper.py index 446d75dc..fe505145 100644 --- a/scripts/mobiles/dantooine/quenker_relic_reaper.py +++ b/scripts/mobiles/dantooine/quenker_relic_reaper.py @@ -26,7 +26,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("quenker") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_quenker_relic_reaper.iff') diff --git a/scripts/mobiles/dantooine/savage_quenker.py b/scripts/mobiles/dantooine/savage_quenker.py index 31cb177d..7be8c3be 100644 --- a/scripts/mobiles/dantooine/savage_quenker.py +++ b/scripts/mobiles/dantooine/savage_quenker.py @@ -26,7 +26,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("quenker") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_quenker_relic_reaper.iff') diff --git a/scripts/mobiles/dantooine/slinking_voritor_hunter.py b/scripts/mobiles/dantooine/slinking_voritor_hunter.py index 02268971..b323b79d 100644 --- a/scripts/mobiles/dantooine/slinking_voritor_hunter.py +++ b/scripts/mobiles/dantooine/slinking_voritor_hunter.py @@ -26,7 +26,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("voritor lizard") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_slinking_voritor_hunter.iff') diff --git a/scripts/mobiles/dantooine/spiked_slasher.py b/scripts/mobiles/dantooine/spiked_slasher.py index b8ce1859..3350d581 100644 --- a/scripts/mobiles/dantooine/spiked_slasher.py +++ b/scripts/mobiles/dantooine/spiked_slasher.py @@ -26,7 +26,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("voritor lizard") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_voritor_lizard_hue.iff') diff --git a/scripts/mobiles/dantooine/terrible_quenker.py b/scripts/mobiles/dantooine/terrible_quenker.py index 39638845..449a14f1 100644 --- a/scripts/mobiles/dantooine/terrible_quenker.py +++ b/scripts/mobiles/dantooine/terrible_quenker.py @@ -26,7 +26,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("quenker") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_quenker.iff') diff --git a/scripts/mobiles/dantooine/thune.py b/scripts/mobiles/dantooine/thune.py index d19dfba1..78b7895e 100644 --- a/scripts/mobiles/dantooine/thune.py +++ b/scripts/mobiles/dantooine/thune.py @@ -26,7 +26,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("thune") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_thune.iff') diff --git a/scripts/mobiles/dantooine/thune_grassland_guardian.py b/scripts/mobiles/dantooine/thune_grassland_guardian.py index f6cac1fe..00670912 100644 --- a/scripts/mobiles/dantooine/thune_grassland_guardian.py +++ b/scripts/mobiles/dantooine/thune_grassland_guardian.py @@ -26,7 +26,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("thune") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_thune_grassland_guardian.iff') diff --git a/scripts/mobiles/dantooine/thune_herd_leader.py b/scripts/mobiles/dantooine/thune_herd_leader.py index 5cddbb89..49c8a88c 100644 --- a/scripts/mobiles/dantooine/thune_herd_leader.py +++ b/scripts/mobiles/dantooine/thune_herd_leader.py @@ -26,7 +26,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("thune") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_thune_herd_leader.iff') diff --git a/scripts/mobiles/dantooine/vexed_voritor_lizard.py b/scripts/mobiles/dantooine/vexed_voritor_lizard.py index 2b5c630c..553d7979 100644 --- a/scripts/mobiles/dantooine/vexed_voritor_lizard.py +++ b/scripts/mobiles/dantooine/vexed_voritor_lizard.py @@ -26,7 +26,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("voritor lizard") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_vexed_voritor_lizard.iff') diff --git a/scripts/mobiles/dantooine/voritor_dasher.py b/scripts/mobiles/dantooine/voritor_dasher.py index f98cb201..abc864a2 100644 --- a/scripts/mobiles/dantooine/voritor_dasher.py +++ b/scripts/mobiles/dantooine/voritor_dasher.py @@ -26,7 +26,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("voritor lizard") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_voritor_dasher.iff') diff --git a/scripts/mobiles/dantooine/voritor_lizard.py b/scripts/mobiles/dantooine/voritor_lizard.py index 4c9c5e3f..40102aab 100644 --- a/scripts/mobiles/dantooine/voritor_lizard.py +++ b/scripts/mobiles/dantooine/voritor_lizard.py @@ -26,7 +26,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("voritor lizard") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_voritor_lizard.iff') diff --git a/scripts/mobiles/dathomir/ancient_bull_rancor.py b/scripts/mobiles/dathomir/ancient_bull_rancor.py index 1d22bd4e..83e464c9 100644 --- a/scripts/mobiles/dathomir/ancient_bull_rancor.py +++ b/scripts/mobiles/dathomir/ancient_bull_rancor.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("rancor") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_rancor.iff') diff --git a/scripts/mobiles/dathomir/bane_back_spider.py b/scripts/mobiles/dathomir/bane_back_spider.py index ede97a8b..71962cc7 100644 --- a/scripts/mobiles/dathomir/bane_back_spider.py +++ b/scripts/mobiles/dathomir/bane_back_spider.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("gaping") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_gaping_hue.iff') 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/bull_rancor.py b/scripts/mobiles/dathomir/bull_rancor.py index 2b84546c..3635937c 100644 --- a/scripts/mobiles/dathomir/bull_rancor.py +++ b/scripts/mobiles/dathomir/bull_rancor.py @@ -27,7 +27,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("rancor") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_rancor_hue.iff') diff --git a/scripts/mobiles/dathomir/cavern_spider.py b/scripts/mobiles/dathomir/cavern_spider.py index 797a3c2f..b6b8e76c 100644 --- a/scripts/mobiles/dathomir/cavern_spider.py +++ b/scripts/mobiles/dathomir/cavern_spider.py @@ -23,7 +23,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("spider nightsister") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_gaping_spider.iff') diff --git a/scripts/mobiles/dathomir/cavern_spider_broodling.py b/scripts/mobiles/dathomir/cavern_spider_broodling.py index a66658d8..926c6c7b 100644 --- a/scripts/mobiles/dathomir/cavern_spider_broodling.py +++ b/scripts/mobiles/dathomir/cavern_spider_broodling.py @@ -23,7 +23,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("spider nightsister") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_gaping_spider_broodling.iff') diff --git a/scripts/mobiles/dathomir/cavern_spider_hunter.py b/scripts/mobiles/dathomir/cavern_spider_hunter.py index 90a3617b..05eec0ee 100644 --- a/scripts/mobiles/dathomir/cavern_spider_hunter.py +++ b/scripts/mobiles/dathomir/cavern_spider_hunter.py @@ -23,7 +23,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("spider nightsister") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_gaping_spider.iff') diff --git a/scripts/mobiles/dathomir/cavern_spider_queen.py b/scripts/mobiles/dathomir/cavern_spider_queen.py index 7328deef..887db1b3 100644 --- a/scripts/mobiles/dathomir/cavern_spider_queen.py +++ b/scripts/mobiles/dathomir/cavern_spider_queen.py @@ -23,7 +23,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("spider nightsister") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_gaping_spider.iff') diff --git a/scripts/mobiles/dathomir/chasmal_spider.py b/scripts/mobiles/dathomir/chasmal_spider.py index 2a67a066..3b5e97a6 100644 --- a/scripts/mobiles/dathomir/chasmal_spider.py +++ b/scripts/mobiles/dathomir/chasmal_spider.py @@ -23,7 +23,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("gaping") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_gaping_spider.iff') 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/enraged_bull_rancor.py b/scripts/mobiles/dathomir/enraged_bull_rancor.py index 9cedb235..85c348b6 100644 --- a/scripts/mobiles/dathomir/enraged_bull_rancor.py +++ b/scripts/mobiles/dathomir/enraged_bull_rancor.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("rancor") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_rancor.iff') diff --git a/scripts/mobiles/dathomir/enraged_rancor.py b/scripts/mobiles/dathomir/enraged_rancor.py index 1d004154..a714373e 100644 --- a/scripts/mobiles/dathomir/enraged_rancor.py +++ b/scripts/mobiles/dathomir/enraged_rancor.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("rancor") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_rancor.iff') 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/female_kwi.py b/scripts/mobiles/dathomir/female_kwi.py index 145100ef..1a2914f7 100644 --- a/scripts/mobiles/dathomir/female_kwi.py +++ b/scripts/mobiles/dathomir/female_kwi.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("kwi") mobileTemplate.setAssistRange(0) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_kwi.iff') diff --git a/scripts/mobiles/dathomir/female_malkloc_plainswalker.py b/scripts/mobiles/dathomir/female_malkloc_plainswalker.py index c905dd7a..fc3d1184 100644 --- a/scripts/mobiles/dathomir/female_malkloc_plainswalker.py +++ b/scripts/mobiles/dathomir/female_malkloc_plainswalker.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("malkloc plainswalker") mobileTemplate.setAssistRange(0) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_malkloc.iff') diff --git a/scripts/mobiles/dathomir/foul_desecrator.py b/scripts/mobiles/dathomir/foul_desecrator.py index 76650bca..6640c084 100644 --- a/scripts/mobiles/dathomir/foul_desecrator.py +++ b/scripts/mobiles/dathomir/foul_desecrator.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("kamurith") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_vexed_voritor_lizard.iff') diff --git a/scripts/mobiles/dathomir/gaping_spider.py b/scripts/mobiles/dathomir/gaping_spider.py index c57ec913..4cbe78b6 100644 --- a/scripts/mobiles/dathomir/gaping_spider.py +++ b/scripts/mobiles/dathomir/gaping_spider.py @@ -23,7 +23,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("gaping") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_gaping_spider.iff') diff --git a/scripts/mobiles/dathomir/gaping_spider_broodling.py b/scripts/mobiles/dathomir/gaping_spider_broodling.py index a4c6cf72..c43fc4a8 100644 --- a/scripts/mobiles/dathomir/gaping_spider_broodling.py +++ b/scripts/mobiles/dathomir/gaping_spider_broodling.py @@ -23,7 +23,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("gaping") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_gaping_spider_broodling.iff') diff --git a/scripts/mobiles/dathomir/gaping_spider_hunter.py b/scripts/mobiles/dathomir/gaping_spider_hunter.py index 8a6e1053..3d0b096d 100644 --- a/scripts/mobiles/dathomir/gaping_spider_hunter.py +++ b/scripts/mobiles/dathomir/gaping_spider_hunter.py @@ -23,7 +23,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("gaping") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_gaping_spider.iff') diff --git a/scripts/mobiles/dathomir/gaping_spider_queen.py b/scripts/mobiles/dathomir/gaping_spider_queen.py index be522ebe..25f9cdb3 100644 --- a/scripts/mobiles/dathomir/gaping_spider_queen.py +++ b/scripts/mobiles/dathomir/gaping_spider_queen.py @@ -23,7 +23,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("gaping") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_gaping_spider_queen.iff') diff --git a/scripts/mobiles/dathomir/gaping_spider_recluse.py b/scripts/mobiles/dathomir/gaping_spider_recluse.py index a85a47c9..4708ae76 100644 --- a/scripts/mobiles/dathomir/gaping_spider_recluse.py +++ b/scripts/mobiles/dathomir/gaping_spider_recluse.py @@ -23,7 +23,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("gaping") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_gaping_spider_recluse.iff') diff --git a/scripts/mobiles/dathomir/gaping_spider_recluse_queen.py b/scripts/mobiles/dathomir/gaping_spider_recluse_queen.py index 3f18b926..d8a18f10 100644 --- a/scripts/mobiles/dathomir/gaping_spider_recluse_queen.py +++ b/scripts/mobiles/dathomir/gaping_spider_recluse_queen.py @@ -23,7 +23,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("gaping recluse") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_gaping_spider_recluse.iff') 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/giant_cavern_spider_recluse.py b/scripts/mobiles/dathomir/giant_cavern_spider_recluse.py index a4671c4c..52d2accb 100644 --- a/scripts/mobiles/dathomir/giant_cavern_spider_recluse.py +++ b/scripts/mobiles/dathomir/giant_cavern_spider_recluse.py @@ -23,7 +23,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("spider nightsister") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_gaping_spider_recluse.iff') diff --git a/scripts/mobiles/dathomir/giant_gaping_spider_recluse.py b/scripts/mobiles/dathomir/giant_gaping_spider_recluse.py index 00497d9f..eefbada5 100644 --- a/scripts/mobiles/dathomir/giant_gaping_spider_recluse.py +++ b/scripts/mobiles/dathomir/giant_gaping_spider_recluse.py @@ -23,7 +23,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("gaping") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_gaping_spider_recluse.iff') diff --git a/scripts/mobiles/dathomir/gnarled_rancor.py b/scripts/mobiles/dathomir/gnarled_rancor.py index ef9f2acc..b42a6bfc 100644 --- a/scripts/mobiles/dathomir/gnarled_rancor.py +++ b/scripts/mobiles/dathomir/gnarled_rancor.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("rancor") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_rancor.iff') diff --git a/scripts/mobiles/dathomir/grovo.py b/scripts/mobiles/dathomir/grovo.py index b3d1f5ec..4a5c8668 100644 --- a/scripts/mobiles/dathomir/grovo.py +++ b/scripts/mobiles/dathomir/grovo.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("nightsister") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_nsister_rancor_grovo.iff') diff --git a/scripts/mobiles/dathomir/injured_kwi.py b/scripts/mobiles/dathomir/injured_kwi.py index 90cbb1a6..d8233b13 100644 --- a/scripts/mobiles/dathomir/injured_kwi.py +++ b/scripts/mobiles/dathomir/injured_kwi.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("kwi") mobileTemplate.setAssistRange(0) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_kwi.iff') diff --git a/scripts/mobiles/dathomir/injured_purbole.py b/scripts/mobiles/dathomir/injured_purbole.py index 006abc24..d96f7c3f 100644 --- a/scripts/mobiles/dathomir/injured_purbole.py +++ b/scripts/mobiles/dathomir/injured_purbole.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("purbole") mobileTemplate.setAssistRange(0) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_purbole.iff') diff --git a/scripts/mobiles/dathomir/injured_verne.py b/scripts/mobiles/dathomir/injured_verne.py index 9182d79e..8a503d9a 100644 --- a/scripts/mobiles/dathomir/injured_verne.py +++ b/scripts/mobiles/dathomir/injured_verne.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("verne") mobileTemplate.setAssistRange(0) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_verne.iff') 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/kamurith_defiler.py b/scripts/mobiles/dathomir/kamurith_defiler.py index 7690b865..69c42ab5 100644 --- a/scripts/mobiles/dathomir/kamurith_defiler.py +++ b/scripts/mobiles/dathomir/kamurith_defiler.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("kamurith") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_vexed_voritor_lizard.iff') diff --git a/scripts/mobiles/dathomir/kamurith_snapper.py b/scripts/mobiles/dathomir/kamurith_snapper.py index cb7fc86c..72cf1acf 100644 --- a/scripts/mobiles/dathomir/kamurith_snapper.py +++ b/scripts/mobiles/dathomir/kamurith_snapper.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("kamurith") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_vexed_voritor_lizard.iff') diff --git a/scripts/mobiles/dathomir/kiin_dray.py b/scripts/mobiles/dathomir/kiin_dray.py index e6879b07..c0c6431e 100644 --- a/scripts/mobiles/dathomir/kiin_dray.py +++ b/scripts/mobiles/dathomir/kiin_dray.py @@ -23,7 +23,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("spider nightsister") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_gaping_spider_recluse_giant_kiin_dray.iff') diff --git a/scripts/mobiles/dathomir/kwi.py b/scripts/mobiles/dathomir/kwi.py index c59a206d..dd7a047f 100644 --- a/scripts/mobiles/dathomir/kwi.py +++ b/scripts/mobiles/dathomir/kwi.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("kwi") mobileTemplate.setAssistRange(0) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_kwi.iff') 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/malkloc.py b/scripts/mobiles/dathomir/malkloc.py index 77a3306a..91274d95 100644 --- a/scripts/mobiles/dathomir/malkloc.py +++ b/scripts/mobiles/dathomir/malkloc.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("malkloc") mobileTemplate.setAssistRange(0) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_malkloc.iff') diff --git a/scripts/mobiles/dathomir/malkloc_bull.py b/scripts/mobiles/dathomir/malkloc_bull.py index 86cba5b0..96a2461b 100644 --- a/scripts/mobiles/dathomir/malkloc_bull.py +++ b/scripts/mobiles/dathomir/malkloc_bull.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("malkloc") mobileTemplate.setAssistRange(0) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_malkloc_bull.iff') diff --git a/scripts/mobiles/dathomir/malkloc_plainswalker.py b/scripts/mobiles/dathomir/malkloc_plainswalker.py index 74c08ffd..119f4195 100644 --- a/scripts/mobiles/dathomir/malkloc_plainswalker.py +++ b/scripts/mobiles/dathomir/malkloc_plainswalker.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("malkloc plainswalker") mobileTemplate.setAssistRange(0) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_malkloc.iff') diff --git a/scripts/mobiles/dathomir/monstrous_brute.py b/scripts/mobiles/dathomir/monstrous_brute.py index 7a6dab31..f6a3578f 100644 --- a/scripts/mobiles/dathomir/monstrous_brute.py +++ b/scripts/mobiles/dathomir/monstrous_brute.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("rancor") mobileTemplate.setAssistRange(24) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_rancor.iff') diff --git a/scripts/mobiles/dathomir/mutant_rancor.py b/scripts/mobiles/dathomir/mutant_rancor.py index d5e1ab66..80a35333 100644 --- a/scripts/mobiles/dathomir/mutant_rancor.py +++ b/scripts/mobiles/dathomir/mutant_rancor.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("rancor") mobileTemplate.setAssistRange(24) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_mutant_rancor.iff') diff --git a/scripts/mobiles/dathomir/nightsister_bull_ rancor.py b/scripts/mobiles/dathomir/nightsister_bull_ rancor.py index 6ab48e01..35ed6e87 100644 --- a/scripts/mobiles/dathomir/nightsister_bull_ rancor.py +++ b/scripts/mobiles/dathomir/nightsister_bull_ rancor.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("nightsister") mobileTemplate.setAssistRange(24) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_bull_rancor.iff') diff --git a/scripts/mobiles/dathomir/nightsister_elder.py b/scripts/mobiles/dathomir/nightsister_elder.py index 47996fa4..64732805 100644 --- a/scripts/mobiles/dathomir/nightsister_elder.py +++ b/scripts/mobiles/dathomir/nightsister_elder.py @@ -20,7 +20,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup('nightsister') mobileTemplate.setAssistRange(12) mobileTemplate.setRespawnTime(300) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_dathomir_nightsister_elder.iff') diff --git a/scripts/mobiles/dathomir/nightsister_enraged_ rancor.py b/scripts/mobiles/dathomir/nightsister_enraged_ rancor.py index 69c24317..4c8f3dba 100644 --- a/scripts/mobiles/dathomir/nightsister_enraged_ rancor.py +++ b/scripts/mobiles/dathomir/nightsister_enraged_ rancor.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("nightsister") mobileTemplate.setAssistRange(24) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_rancor.iff') diff --git a/scripts/mobiles/dathomir/nightsister_enraged_bull_ rancor.py b/scripts/mobiles/dathomir/nightsister_enraged_bull_ rancor.py index 53a4ff47..ae9ba2ca 100644 --- a/scripts/mobiles/dathomir/nightsister_enraged_bull_ rancor.py +++ b/scripts/mobiles/dathomir/nightsister_enraged_bull_ rancor.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("nightsister") mobileTemplate.setAssistRange(24) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_bull_rancor.iff') diff --git a/scripts/mobiles/dathomir/nightsister_initiate.py b/scripts/mobiles/dathomir/nightsister_initiate.py index c2dbffb5..2762ead7 100644 --- a/scripts/mobiles/dathomir/nightsister_initiate.py +++ b/scripts/mobiles/dathomir/nightsister_initiate.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup('nightsister') mobileTemplate.setAssistRange(12) mobileTemplate.setRespawnTime(300) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_dathomir_nightsister_initiate.iff') diff --git a/scripts/mobiles/dathomir/nightsister_outcast.py b/scripts/mobiles/dathomir/nightsister_outcast.py index f2b3d718..c98122bd 100644 --- a/scripts/mobiles/dathomir/nightsister_outcast.py +++ b/scripts/mobiles/dathomir/nightsister_outcast.py @@ -20,7 +20,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup('nightsister') mobileTemplate.setAssistRange(12) mobileTemplate.setRespawnTime(300) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_dathomir_nightsister_outcast.iff') diff --git a/scripts/mobiles/dathomir/nightsister_protector.py b/scripts/mobiles/dathomir/nightsister_protector.py index 27c01c5e..212104d3 100644 --- a/scripts/mobiles/dathomir/nightsister_protector.py +++ b/scripts/mobiles/dathomir/nightsister_protector.py @@ -20,10 +20,10 @@ def addTemplate(core): mobileTemplate.setSocialGroup('nightsister') mobileTemplate.setAssistRange(12) mobileTemplate.setRespawnTime(300) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + 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/nightsister_rancor.py b/scripts/mobiles/dathomir/nightsister_rancor.py index db1c0ba0..9b5c015d 100644 --- a/scripts/mobiles/dathomir/nightsister_rancor.py +++ b/scripts/mobiles/dathomir/nightsister_rancor.py @@ -27,7 +27,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("nightsister") mobileTemplate.setAssistRange(24) mobileTemplate.setRespawnTime(300) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) mobileTemplate.setStalker(True) templates = Vector() diff --git a/scripts/mobiles/dathomir/nightsister_rancor_tamer.py b/scripts/mobiles/dathomir/nightsister_rancor_tamer.py index 08fcf1c4..e2f9e4c2 100644 --- a/scripts/mobiles/dathomir/nightsister_rancor_tamer.py +++ b/scripts/mobiles/dathomir/nightsister_rancor_tamer.py @@ -20,7 +20,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup('nightsister') mobileTemplate.setAssistRange(12) mobileTemplate.setRespawnTime(300) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_dathomir_nightsister_rancor_tamer.iff') diff --git a/scripts/mobiles/dathomir/nightsister_ranger.py b/scripts/mobiles/dathomir/nightsister_ranger.py index b65250e0..4f7f6bc1 100644 --- a/scripts/mobiles/dathomir/nightsister_ranger.py +++ b/scripts/mobiles/dathomir/nightsister_ranger.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup('nightsister') mobileTemplate.setAssistRange(12) mobileTemplate.setRespawnTime(300) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_dathomir_nightsister_ranger.iff') diff --git a/scripts/mobiles/dathomir/nightsister_sentinel.py b/scripts/mobiles/dathomir/nightsister_sentinel.py index e4ab8c09..72258110 100644 --- a/scripts/mobiles/dathomir/nightsister_sentinel.py +++ b/scripts/mobiles/dathomir/nightsister_sentinel.py @@ -20,10 +20,10 @@ def addTemplate(core): mobileTemplate.setSocialGroup('nightsister') mobileTemplate.setAssistRange(12) mobileTemplate.setRespawnTime(300) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() - templates.add('object/mobile/shared_dressed_dathomir_nightsister_sentinal.iff') + templates.add('object/mobile/shared_dressed_dathomir_spider_nightsister_sentinel.iff') mobileTemplate.setTemplates(templates) weaponTemplates = Vector() @@ -55,4 +55,4 @@ def addTemplate(core): lootGroupChance_5 = 3 mobileTemplate.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) - core.spawnService.addMobileTemplate('nightsister_sentinal', mobileTemplate) \ No newline at end of file + core.spawnService.addMobileTemplate('nightsister_sentinel', mobileTemplate) diff --git a/scripts/mobiles/dathomir/nightsister_sentry.py b/scripts/mobiles/dathomir/nightsister_sentry.py index 4ed74164..a611294b 100644 --- a/scripts/mobiles/dathomir/nightsister_sentry.py +++ b/scripts/mobiles/dathomir/nightsister_sentry.py @@ -20,7 +20,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup('nightsister') mobileTemplate.setAssistRange(12) mobileTemplate.setRespawnTime(300) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_dathomir_nightsister_stalker.iff') diff --git a/scripts/mobiles/dathomir/nightsister_slave.py b/scripts/mobiles/dathomir/nightsister_slave.py index af8d8b92..6ea4c314 100644 --- a/scripts/mobiles/dathomir/nightsister_slave.py +++ b/scripts/mobiles/dathomir/nightsister_slave.py @@ -20,7 +20,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("nightsister") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_dathomir_nightsister_slave.iff') diff --git a/scripts/mobiles/dathomir/nightsister_spell_weaver.py b/scripts/mobiles/dathomir/nightsister_spell_weaver.py index 5d2a9921..e46622e6 100644 --- a/scripts/mobiles/dathomir/nightsister_spell_weaver.py +++ b/scripts/mobiles/dathomir/nightsister_spell_weaver.py @@ -20,7 +20,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup('nightsister') mobileTemplate.setAssistRange(12) mobileTemplate.setRespawnTime(300) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_dathomir_nightsister_spellweaver.iff') diff --git a/scripts/mobiles/dathomir/nightsister_stalker.py b/scripts/mobiles/dathomir/nightsister_stalker.py index 0124f485..e1decd4f 100644 --- a/scripts/mobiles/dathomir/nightsister_stalker.py +++ b/scripts/mobiles/dathomir/nightsister_stalker.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup('nightsister') mobileTemplate.setAssistRange(12) mobileTemplate.setRespawnTime(300) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_dathomir_nightsister_stalker.iff') diff --git a/scripts/mobiles/dathomir/nocuous_kamurith.py b/scripts/mobiles/dathomir/nocuous_kamurith.py index 53039d5e..5673180e 100644 --- a/scripts/mobiles/dathomir/nocuous_kamurith.py +++ b/scripts/mobiles/dathomir/nocuous_kamurith.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("kamurith") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_vexed_voritor_lizard.iff') 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/purbole.py b/scripts/mobiles/dathomir/purbole.py index 277d16f7..56bcdca4 100644 --- a/scripts/mobiles/dathomir/purbole.py +++ b/scripts/mobiles/dathomir/purbole.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("purbole") mobileTemplate.setAssistRange(0) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_purbole.iff') diff --git a/scripts/mobiles/dathomir/purbole_elder.py b/scripts/mobiles/dathomir/purbole_elder.py index 9db17110..17f0999c 100644 --- a/scripts/mobiles/dathomir/purbole_elder.py +++ b/scripts/mobiles/dathomir/purbole_elder.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("purbole") mobileTemplate.setAssistRange(0) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_purbole_elder.iff') diff --git a/scripts/mobiles/dathomir/purbole_hunter.py b/scripts/mobiles/dathomir/purbole_hunter.py index e4ab532e..62fef2e0 100644 --- a/scripts/mobiles/dathomir/purbole_hunter.py +++ b/scripts/mobiles/dathomir/purbole_hunter.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("purbole") mobileTemplate.setAssistRange(0) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_purbole.iff') diff --git a/scripts/mobiles/dathomir/purbole_scout.py b/scripts/mobiles/dathomir/purbole_scout.py index 04778554..b195b159 100644 --- a/scripts/mobiles/dathomir/purbole_scout.py +++ b/scripts/mobiles/dathomir/purbole_scout.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("purbole") mobileTemplate.setAssistRange(0) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_purbole.iff') diff --git a/scripts/mobiles/dathomir/purbole_stalker.py b/scripts/mobiles/dathomir/purbole_stalker.py index b59495ce..6841cd3e 100644 --- a/scripts/mobiles/dathomir/purbole_stalker.py +++ b/scripts/mobiles/dathomir/purbole_stalker.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("purbole") mobileTemplate.setAssistRange(0) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_purbole.iff') diff --git a/scripts/mobiles/dathomir/purbole_youth.py b/scripts/mobiles/dathomir/purbole_youth.py index c853dc24..66e1a6b2 100644 --- a/scripts/mobiles/dathomir/purbole_youth.py +++ b/scripts/mobiles/dathomir/purbole_youth.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("purbole") mobileTemplate.setAssistRange(0) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_purbole_youth.iff') diff --git a/scripts/mobiles/dathomir/rancor.py b/scripts/mobiles/dathomir/rancor.py index 5aabc841..6b21979a 100644 --- a/scripts/mobiles/dathomir/rancor.py +++ b/scripts/mobiles/dathomir/rancor.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("rancor") mobileTemplate.setAssistRange(24) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_rancor.iff') diff --git a/scripts/mobiles/dathomir/rancor_pygmy.py b/scripts/mobiles/dathomir/rancor_pygmy.py index 7dabfc3f..f8677930 100644 --- a/scripts/mobiles/dathomir/rancor_pygmy.py +++ b/scripts/mobiles/dathomir/rancor_pygmy.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("rancor") mobileTemplate.setAssistRange(24) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_rancor.iff') diff --git a/scripts/mobiles/dathomir/rancor_youth.py b/scripts/mobiles/dathomir/rancor_youth.py index 2da26303..59012fab 100644 --- a/scripts/mobiles/dathomir/rancor_youth.py +++ b/scripts/mobiles/dathomir/rancor_youth.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("rancor") mobileTemplate.setAssistRange(24) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_rancor_youth.iff') diff --git a/scripts/mobiles/dathomir/reclusive_cavern_spider.py b/scripts/mobiles/dathomir/reclusive_cavern_spider.py index a76a62f7..e84d16b9 100644 --- a/scripts/mobiles/dathomir/reclusive_cavern_spider.py +++ b/scripts/mobiles/dathomir/reclusive_cavern_spider.py @@ -23,7 +23,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("spider nightsister") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_gaping_spider_broodling.iff') diff --git a/scripts/mobiles/dathomir/reclusive_cavern_spider_queen.py b/scripts/mobiles/dathomir/reclusive_cavern_spider_queen.py index 67d765f4..cd741273 100644 --- a/scripts/mobiles/dathomir/reclusive_cavern_spider_queen.py +++ b/scripts/mobiles/dathomir/reclusive_cavern_spider_queen.py @@ -23,7 +23,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("spider nightsister") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_gaping_spider_broodling.iff') diff --git a/scripts/mobiles/dathomir/rhoa_kwi.py b/scripts/mobiles/dathomir/rhoa_kwi.py index 6cb4de96..1726397f 100644 --- a/scripts/mobiles/dathomir/rhoa_kwi.py +++ b/scripts/mobiles/dathomir/rhoa_kwi.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("kwi rhoa") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_kwi.iff') diff --git a/scripts/mobiles/dathomir/rhoa_kwi_guardian.py b/scripts/mobiles/dathomir/rhoa_kwi_guardian.py index 86234978..3666f556 100644 --- a/scripts/mobiles/dathomir/rhoa_kwi_guardian.py +++ b/scripts/mobiles/dathomir/rhoa_kwi_guardian.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("kwi rhoa") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_kwi.iff') diff --git a/scripts/mobiles/dathomir/rhoa_kwi_hunter.py b/scripts/mobiles/dathomir/rhoa_kwi_hunter.py index 86234978..3666f556 100644 --- a/scripts/mobiles/dathomir/rhoa_kwi_hunter.py +++ b/scripts/mobiles/dathomir/rhoa_kwi_hunter.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("kwi rhoa") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_kwi.iff') diff --git a/scripts/mobiles/dathomir/rhoa_kwi_pack_leader.py b/scripts/mobiles/dathomir/rhoa_kwi_pack_leader.py index d830c88b..85c06509 100644 --- a/scripts/mobiles/dathomir/rhoa_kwi_pack_leader.py +++ b/scripts/mobiles/dathomir/rhoa_kwi_pack_leader.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("kwi rhoa") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_kwi.iff') 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_mountain_clan_rancor.py b/scripts/mobiles/dathomir/singing_mountain_clan_rancor.py index 6e844f67..55658a32 100644 --- a/scripts/mobiles/dathomir/singing_mountain_clan_rancor.py +++ b/scripts/mobiles/dathomir/singing_mountain_clan_rancor.py @@ -20,7 +20,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup('mountain clan') mobileTemplate.setAssistRange(12) mobileTemplate.setRespawnTime(300) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_rancor.iff') diff --git a/scripts/mobiles/dathomir/singing_mountain_clan_sentry.py b/scripts/mobiles/dathomir/singing_mountain_clan_sentry.py index 1b5bc2ac..4f9abedc 100644 --- a/scripts/mobiles/dathomir/singing_mountain_clan_sentry.py +++ b/scripts/mobiles/dathomir/singing_mountain_clan_sentry.py @@ -20,7 +20,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup('mountain clan') mobileTemplate.setAssistRange(12) mobileTemplate.setRespawnTime(300) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_dathomir_sing_mt_clan_sentry.iff') diff --git a/scripts/mobiles/dathomir/singing_mtn_clan_arch_witch.py b/scripts/mobiles/dathomir/singing_mtn_clan_arch_witch.py index 301b8062..8a8afc42 100644 --- a/scripts/mobiles/dathomir/singing_mtn_clan_arch_witch.py +++ b/scripts/mobiles/dathomir/singing_mtn_clan_arch_witch.py @@ -20,7 +20,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup('mountain clan') mobileTemplate.setAssistRange(12) mobileTemplate.setRespawnTime(300) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_dathomir_sing_mt_clan_arch_witch.iff') diff --git a/scripts/mobiles/dathomir/singing_mtn_clan_councilwoman.py b/scripts/mobiles/dathomir/singing_mtn_clan_councilwoman.py index 24e24fe8..7c8c477b 100644 --- a/scripts/mobiles/dathomir/singing_mtn_clan_councilwoman.py +++ b/scripts/mobiles/dathomir/singing_mtn_clan_councilwoman.py @@ -20,7 +20,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup('mountain clan') mobileTemplate.setAssistRange(12) mobileTemplate.setRespawnTime(300) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_dathomir_sing_mt_clan_councilwoman.iff') diff --git a/scripts/mobiles/dathomir/singing_mtn_clan_dragoon.py b/scripts/mobiles/dathomir/singing_mtn_clan_dragoon.py index abc32fe0..12e6b633 100644 --- a/scripts/mobiles/dathomir/singing_mtn_clan_dragoon.py +++ b/scripts/mobiles/dathomir/singing_mtn_clan_dragoon.py @@ -20,7 +20,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup('mountain clan') mobileTemplate.setAssistRange(12) mobileTemplate.setRespawnTime(300) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_dathomir_sing_mt_clan_dragoon.iff') diff --git a/scripts/mobiles/dathomir/singing_mtn_clan_guardian.py b/scripts/mobiles/dathomir/singing_mtn_clan_guardian.py index 1dff5fe9..9234d8b9 100644 --- a/scripts/mobiles/dathomir/singing_mtn_clan_guardian.py +++ b/scripts/mobiles/dathomir/singing_mtn_clan_guardian.py @@ -20,7 +20,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup('mountain clan') mobileTemplate.setAssistRange(12) mobileTemplate.setRespawnTime(300) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_dathomir_sing_mt_clan_guardian.iff') diff --git a/scripts/mobiles/dathomir/singing_mtn_clan_huntress.py b/scripts/mobiles/dathomir/singing_mtn_clan_huntress.py index 4e18cf33..520cceb3 100644 --- a/scripts/mobiles/dathomir/singing_mtn_clan_huntress.py +++ b/scripts/mobiles/dathomir/singing_mtn_clan_huntress.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup('mountain clan') mobileTemplate.setAssistRange(12) mobileTemplate.setRespawnTime(300) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_dathomir_sing_mt_clan_huntress.iff') diff --git a/scripts/mobiles/dathomir/singing_mtn_clan_initiate.py b/scripts/mobiles/dathomir/singing_mtn_clan_initiate.py index 2f744983..488ad014 100644 --- a/scripts/mobiles/dathomir/singing_mtn_clan_initiate.py +++ b/scripts/mobiles/dathomir/singing_mtn_clan_initiate.py @@ -20,7 +20,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup('mountain clan') mobileTemplate.setAssistRange(12) mobileTemplate.setRespawnTime(300) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_dathomir_sing_mt_clan_initiate.iff') diff --git a/scripts/mobiles/dathomir/singing_mtn_clan_outcast.py b/scripts/mobiles/dathomir/singing_mtn_clan_outcast.py index 3aa3158e..17dec8ef 100644 --- a/scripts/mobiles/dathomir/singing_mtn_clan_outcast.py +++ b/scripts/mobiles/dathomir/singing_mtn_clan_outcast.py @@ -20,7 +20,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup('mountain clan') mobileTemplate.setAssistRange(12) mobileTemplate.setRespawnTime(300) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_dathomir_sing_mt_clan_outcast.iff') @@ -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/singing_mtn_clan_rancor_tamer.py b/scripts/mobiles/dathomir/singing_mtn_clan_rancor_tamer.py index cff1fa9d..84f47cc7 100644 --- a/scripts/mobiles/dathomir/singing_mtn_clan_rancor_tamer.py +++ b/scripts/mobiles/dathomir/singing_mtn_clan_rancor_tamer.py @@ -20,7 +20,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup('mountain clan') mobileTemplate.setAssistRange(12) mobileTemplate.setRespawnTime(300) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_dathomir_sing_mt_clan_rancor_tamer.iff') diff --git a/scripts/mobiles/dathomir/singing_mtn_clan_scout.py b/scripts/mobiles/dathomir/singing_mtn_clan_scout.py index 45730759..9b8418cd 100644 --- a/scripts/mobiles/dathomir/singing_mtn_clan_scout.py +++ b/scripts/mobiles/dathomir/singing_mtn_clan_scout.py @@ -20,7 +20,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup('mountain clan') mobileTemplate.setAssistRange(12) mobileTemplate.setRespawnTime(300) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_dathomir_sing_mt_clan_scout.iff') diff --git a/scripts/mobiles/dathomir/singing_mtn_clan_slave.py b/scripts/mobiles/dathomir/singing_mtn_clan_slave.py index 5cff393f..bce6bf1c 100644 --- a/scripts/mobiles/dathomir/singing_mtn_clan_slave.py +++ b/scripts/mobiles/dathomir/singing_mtn_clan_slave.py @@ -20,7 +20,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup('mountain clan') mobileTemplate.setAssistRange(12) mobileTemplate.setRespawnTime(300) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_dathomir_sing_mt_clan_slave.iff') 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/dathomir/verne.py b/scripts/mobiles/dathomir/verne.py index e5aaa798..dd0b45af 100644 --- a/scripts/mobiles/dathomir/verne.py +++ b/scripts/mobiles/dathomir/verne.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("verne") mobileTemplate.setAssistRange(0) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_verne.iff') diff --git a/scripts/mobiles/dathomir/verne_bull.py b/scripts/mobiles/dathomir/verne_bull.py index 5beb933f..3457668c 100644 --- a/scripts/mobiles/dathomir/verne_bull.py +++ b/scripts/mobiles/dathomir/verne_bull.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("verne") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_verne_bull.iff') diff --git a/scripts/mobiles/dathomir/verne_calf.py b/scripts/mobiles/dathomir/verne_calf.py index 795753b6..e9d943fa 100644 --- a/scripts/mobiles/dathomir/verne_calf.py +++ b/scripts/mobiles/dathomir/verne_calf.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("verne") mobileTemplate.setAssistRange(0) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_verne_calf.iff') diff --git a/scripts/mobiles/dathomir/young_malkloc.py b/scripts/mobiles/dathomir/young_malkloc.py index 602ecb7b..9b9b8f7f 100644 --- a/scripts/mobiles/dathomir/young_malkloc.py +++ b/scripts/mobiles/dathomir/young_malkloc.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("malkloc") mobileTemplate.setAssistRange(0) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_young_malkloc.iff') diff --git a/scripts/mobiles/dathomir/young_malkloc_plainswalker.py b/scripts/mobiles/dathomir/young_malkloc_plainswalker.py index 2f14552e..a2233776 100644 --- a/scripts/mobiles/dathomir/young_malkloc_plainswalker.py +++ b/scripts/mobiles/dathomir/young_malkloc_plainswalker.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("malkloc plainswalker") mobileTemplate.setAssistRange(0) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_young_malkloc.iff') diff --git a/scripts/mobiles/endor/aged_lantern_bird.py b/scripts/mobiles/endor/aged_lantern_bird.py index a52c454f..9192494a 100644 --- a/scripts/mobiles/endor/aged_lantern_bird.py +++ b/scripts/mobiles/endor/aged_lantern_bird.py @@ -23,9 +23,9 @@ def addTemplate(core): mobileTemplate.setBoneType("Avian Bones") mobileTemplate.setBoneAmount(46) mobileTemplate.setSocialGroup("lantern") - mobileTemplate.setAssistRange(0) + mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setOptionsBitmask(Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_lantern.iff') @@ -37,6 +37,9 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_claw_4') + attacks.add('bm_slash_4') + attacks.add('bm_wing_buffet_4') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/arachne_drone.py b/scripts/mobiles/endor/arachne_drone.py new file mode 100644 index 00000000..04504e1b --- /dev/null +++ b/scripts/mobiles/endor/arachne_drone.py @@ -0,0 +1,45 @@ +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('arachne_drone') + mobileTemplate.setLevel(64) + mobileTemplate.setDifficulty(Difficulty.NORMAL) + + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(.5) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(1) + mobileTemplate.setSocialGroup("arachne") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) + + templates = Vector() + templates.add('object/mobile/shared_arachne_hatchling.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', WeaponType.UNARMED, 1.0, 6, 'energy') + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + attacks.add('bm_damage_poison_3') + attacks.add('bm_defensive_3') + attacks.add('bm_puncture_1') + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('arachne_drone', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/arachne_fleshripper.py b/scripts/mobiles/endor/arachne_fleshripper.py new file mode 100644 index 00000000..6b065527 --- /dev/null +++ b/scripts/mobiles/endor/arachne_fleshripper.py @@ -0,0 +1,45 @@ +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('arachne_fleshripper') + mobileTemplate.setLevel(64) + mobileTemplate.setDifficulty(Difficulty.NORMAL) + + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(.5) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(1) + mobileTemplate.setSocialGroup("arachne") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) + + templates = Vector() + templates.add('object/mobile/shared_arachne_hatchling.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', WeaponType.UNARMED, 1.0, 6, 'energy') + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + attacks.add('bm_damage_poison_3') + attacks.add('bm_defensive_3') + attacks.add('bm_puncture_1') + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('arachne_fleshripper', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/arachne_hatchling.py b/scripts/mobiles/endor/arachne_hatchling.py index 4116d7fc..1bf49d3d 100644 --- a/scripts/mobiles/endor/arachne_hatchling.py +++ b/scripts/mobiles/endor/arachne_hatchling.py @@ -21,20 +21,23 @@ def addTemplate(core): mobileTemplate.setMeatType("Insect Meat") mobileTemplate.setMeatAmount(1) mobileTemplate.setSocialGroup("arachne") - mobileTemplate.setAssistRange(0) + mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() - templates.add('object/mobile/shared_arachne.iff') + templates.add('object/mobile/shared_arachne_hatchling.iff') mobileTemplate.setTemplates(templates) weaponTemplates = Vector() - weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', WeaponType.UNARMED, 1.0, 6, 'kinetic') + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', WeaponType.UNARMED, 1.0, 6, 'energy') weaponTemplates.add(weapontemplate) mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_damage_poison_3') + attacks.add('bm_defensive_3') + attacks.add('bm_puncture_1') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/arachne_queen.py b/scripts/mobiles/endor/arachne_queen.py index dcaecffa..234a261a 100644 --- a/scripts/mobiles/endor/arachne_queen.py +++ b/scripts/mobiles/endor/arachne_queen.py @@ -21,12 +21,12 @@ def addTemplate(core): mobileTemplate.setMeatType("Insect Meat") mobileTemplate.setMeatAmount(60) mobileTemplate.setSocialGroup("arachne") - mobileTemplate.setAssistRange(0) + mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() - templates.add('object/mobile/shared_arachne.iff') + templates.add('object/mobile/shared_arachne_hatchling.iff') mobileTemplate.setTemplates(templates) weaponTemplates = Vector() @@ -35,6 +35,9 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_damage_poison_3') + attacks.add('bm_defensive_3') + attacks.add('bm_puncture_1') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/arachne_warrior.py b/scripts/mobiles/endor/arachne_warrior.py new file mode 100644 index 00000000..1fecb52e --- /dev/null +++ b/scripts/mobiles/endor/arachne_warrior.py @@ -0,0 +1,45 @@ +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('arachne_warrior') + mobileTemplate.setLevel(64) + mobileTemplate.setDifficulty(Difficulty.NORMAL) + + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(.5) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(1) + mobileTemplate.setSocialGroup("arachne") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) + + templates = Vector() + templates.add('object/mobile/shared_arachne_hatchling.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', WeaponType.UNARMED, 1.0, 6, 'energy') + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + attacks.add('bm_damage_poison_3') + attacks.add('bm_defensive_3') + attacks.add('bm_puncture_1') + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('arachne_warrior', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/arachne_webmaster.py b/scripts/mobiles/endor/arachne_webmaster.py index f2b4d1aa..f5089be6 100644 --- a/scripts/mobiles/endor/arachne_webmaster.py +++ b/scripts/mobiles/endor/arachne_webmaster.py @@ -23,18 +23,21 @@ def addTemplate(core): mobileTemplate.setSocialGroup("arachne") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() - templates.add('object/mobile/shared_arachne.iff') + templates.add('object/mobile/shared_arachne_hatchling.iff') mobileTemplate.setTemplates(templates) weaponTemplates = Vector() - weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', WeaponType.UNARMED, 1.0, 6, 'kinetic') + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', WeaponType.UNARMED, 1.0, 6, 'energy') weaponTemplates.add(weapontemplate) mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_damage_poison_3') + attacks.add('bm_defensive_3') + attacks.add('bm_puncture_1') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/arachne_widow.py b/scripts/mobiles/endor/arachne_widow.py index 8c04467a..590addab 100644 --- a/scripts/mobiles/endor/arachne_widow.py +++ b/scripts/mobiles/endor/arachne_widow.py @@ -23,11 +23,11 @@ def addTemplate(core): mobileTemplate.setSocialGroup("arachne") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() - templates.add('object/mobile/shared_arachne.iff') + templates.add('object/mobile/shared_arachne_hatchling.iff') mobileTemplate.setTemplates(templates) weaponTemplates = Vector() @@ -36,6 +36,9 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_damage_poison_3') + attacks.add('bm_defensive_3') + attacks.add('bm_puncture_1') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/archaic_gondula_ritualist.py b/scripts/mobiles/endor/archaic_gondula_ritualist.py index 0f8682e8..bc129453 100644 --- a/scripts/mobiles/endor/archaic_gondula_ritualist.py +++ b/scripts/mobiles/endor/archaic_gondula_ritualist.py @@ -20,7 +20,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup('gondula tribe') mobileTemplate.setAssistRange(1) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setOptionsBitmask(Options.ATTACKABLE) templates = Vector() diff --git a/scripts/mobiles/endor/archaic_jinda_ritualist.py b/scripts/mobiles/endor/archaic_jinda_ritualist.py index baf4a8c2..1709a963 100644 --- a/scripts/mobiles/endor/archaic_jinda_ritualist.py +++ b/scripts/mobiles/endor/archaic_jinda_ritualist.py @@ -20,7 +20,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup('jinda tribe') mobileTemplate.setAssistRange(1) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setOptionsBitmask(Options.ATTACKABLE) templates = Vector() diff --git a/scripts/mobiles/endor/archaic_panshee_ritualist.py b/scripts/mobiles/endor/archaic_panshee_ritualist.py index 64f1589a..7d7df1fc 100644 --- a/scripts/mobiles/endor/archaic_panshee_ritualist.py +++ b/scripts/mobiles/endor/archaic_panshee_ritualist.py @@ -20,7 +20,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup('panshee tribe') mobileTemplate.setAssistRange(1) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setOptionsBitmask(Options.ATTACKABLE) templates = Vector() diff --git a/scripts/mobiles/endor/bark_mite_burrower.py b/scripts/mobiles/endor/bark_mite_burrower.py index 0a935940..90cb123a 100644 --- a/scripts/mobiles/endor/bark_mite_burrower.py +++ b/scripts/mobiles/endor/bark_mite_burrower.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("bark mite") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setOptionsBitmask(Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_bark_mite.iff') @@ -33,6 +33,9 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_bite_4') + attacks.add('bm_bolster_armor_4') + attacks.add('bm_enfeeble_4') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/bark_mite_burrower_collector.py b/scripts/mobiles/endor/bark_mite_burrower_collector.py index 37a41132..bf6291f6 100644 --- a/scripts/mobiles/endor/bark_mite_burrower_collector.py +++ b/scripts/mobiles/endor/bark_mite_burrower_collector.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("bark mite") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setOptionsBitmask(Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_bark_mite.iff') @@ -33,6 +33,9 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_bite_4') + attacks.add('bm_bolster_armor_4') + attacks.add('bm_enfeeble_4') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/bark_mite_burrower_drone.py b/scripts/mobiles/endor/bark_mite_burrower_drone.py index e72b25d1..b6b4134f 100644 --- a/scripts/mobiles/endor/bark_mite_burrower_drone.py +++ b/scripts/mobiles/endor/bark_mite_burrower_drone.py @@ -19,9 +19,9 @@ def addTemplate(core): mobileTemplate.setDeathblow(False) mobileTemplate.setScale(1) mobileTemplate.setSocialGroup("bark mite") - mobileTemplate.setAssistRange(0) + mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setOptionsBitmask(Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_bark_mite.iff') @@ -33,6 +33,9 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_bite_4') + attacks.add('bm_bolster_armor_4') + attacks.add('bm_enfeeble_4') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/bark_mite_burrower_queen.py b/scripts/mobiles/endor/bark_mite_burrower_queen.py new file mode 100644 index 00000000..d9f78bbb --- /dev/null +++ b/scripts/mobiles/endor/bark_mite_burrower_queen.py @@ -0,0 +1,43 @@ +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('bark_mite_burrower_queen') + mobileTemplate.setLevel(63) + mobileTemplate.setDifficulty(Difficulty.NORMAL) + + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("bark mite") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) + + templates = Vector() + templates.add('object/mobile/shared_bark_mite_burrower_queen.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() + attacks.add('bm_bite_4') + attacks.add('bm_bolster_armor_4') + attacks.add('bm_enfeeble_4') + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('bark_mite_burrower_queen', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/bark_mite_burrower_swarmling.py b/scripts/mobiles/endor/bark_mite_burrower_swarmling.py index e9eff185..d31fafcd 100644 --- a/scripts/mobiles/endor/bark_mite_burrower_swarmling.py +++ b/scripts/mobiles/endor/bark_mite_burrower_swarmling.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("bark mite") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setOptionsBitmask(Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_bark_mite.iff') @@ -33,6 +33,9 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_bite_4') + attacks.add('bm_bolster_armor_4') + attacks.add('bm_enfeeble_4') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/bark_mite_burrower_worker.py b/scripts/mobiles/endor/bark_mite_burrower_worker.py index 24c6f547..67a5f331 100644 --- a/scripts/mobiles/endor/bark_mite_burrower_worker.py +++ b/scripts/mobiles/endor/bark_mite_burrower_worker.py @@ -19,9 +19,9 @@ def addTemplate(core): mobileTemplate.setDeathblow(False) mobileTemplate.setScale(1) mobileTemplate.setSocialGroup("bark mite") - mobileTemplate.setAssistRange(0) + mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setOptionsBitmask(Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_bark_mite.iff') @@ -33,6 +33,9 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_bite_4') + attacks.add('bm_bolster_armor_4') + attacks.add('bm_enfeeble_4') mobileTemplate.setDefaultAttack('creatureRangedAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/bedraggled_korga_laborer.py b/scripts/mobiles/endor/bedraggled_korga_laborer.py index e2a212f7..595f86b3 100644 --- a/scripts/mobiles/endor/bedraggled_korga_laborer.py +++ b/scripts/mobiles/endor/bedraggled_korga_laborer.py @@ -20,7 +20,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup('korga tribe') mobileTemplate.setAssistRange(1) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setOptionsBitmask(Options.ATTACKABLE) templates = Vector() diff --git a/scripts/mobiles/endor/bedraggled_pubam_laborer.py b/scripts/mobiles/endor/bedraggled_pubam_laborer.py index 0aad94de..292f050b 100644 --- a/scripts/mobiles/endor/bedraggled_pubam_laborer.py +++ b/scripts/mobiles/endor/bedraggled_pubam_laborer.py @@ -20,7 +20,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup('pubam tribe') mobileTemplate.setAssistRange(1) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setOptionsBitmask(Options.ATTACKABLE) templates = Vector() diff --git a/scripts/mobiles/endor/beguilding_korga_scout.py b/scripts/mobiles/endor/beguilding_korga_scout.py index fad9dd59..181c14d2 100644 --- a/scripts/mobiles/endor/beguilding_korga_scout.py +++ b/scripts/mobiles/endor/beguilding_korga_scout.py @@ -20,7 +20,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup('korga tribe') mobileTemplate.setAssistRange(1) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setOptionsBitmask(Options.ATTACKABLE) templates = Vector() diff --git a/scripts/mobiles/endor/beguiling_donkuwah_scout.py b/scripts/mobiles/endor/beguiling_donkuwah_scout.py index 5a8f07b0..87efaf11 100644 --- a/scripts/mobiles/endor/beguiling_donkuwah_scout.py +++ b/scripts/mobiles/endor/beguiling_donkuwah_scout.py @@ -20,7 +20,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup('donkuwah tribe') mobileTemplate.setAssistRange(1) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setOptionsBitmask(Options.ATTACKABLE) templates = Vector() diff --git a/scripts/mobiles/endor/beguiling_pubam_scout.py b/scripts/mobiles/endor/beguiling_pubam_scout.py index 188596a7..3df3e5f4 100644 --- a/scripts/mobiles/endor/beguiling_pubam_scout.py +++ b/scripts/mobiles/endor/beguiling_pubam_scout.py @@ -20,6 +20,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup('pubam tribe') mobileTemplate.setAssistRange(1) mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(Options.ATTACKABLE) templates = Vector() diff --git a/scripts/mobiles/endor/berserk_marauder.py b/scripts/mobiles/endor/berserk_marauder.py index b0c0117e..265949bd 100644 --- a/scripts/mobiles/endor/berserk_marauder.py +++ b/scripts/mobiles/endor/berserk_marauder.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("marauder") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_marauder_male_01.iff') diff --git a/scripts/mobiles/endor/bewitching_donkuwah_shaman.py b/scripts/mobiles/endor/bewitching_donkuwah_shaman.py index 8abd2b72..45c91a50 100644 --- a/scripts/mobiles/endor/bewitching_donkuwah_shaman.py +++ b/scripts/mobiles/endor/bewitching_donkuwah_shaman.py @@ -19,7 +19,7 @@ def addTemplate(core): mobileTemplate.setDeathblow(True) mobileTemplate.setSocialGroup('donkuwah tribe') mobileTemplate.setAssistRange(1) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) mobileTemplate.setStalker(True) diff --git a/scripts/mobiles/endor/bewitching_korga_dark_shaman.py b/scripts/mobiles/endor/bewitching_korga_dark_shaman.py index 1a42fc8b..e7e1a947 100644 --- a/scripts/mobiles/endor/bewitching_korga_dark_shaman.py +++ b/scripts/mobiles/endor/bewitching_korga_dark_shaman.py @@ -19,7 +19,7 @@ def addTemplate(core): mobileTemplate.setDeathblow(True) mobileTemplate.setSocialGroup('korga tribe') mobileTemplate.setAssistRange(1) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) mobileTemplate.setStalker(True) diff --git a/scripts/mobiles/endor/bewitching_pubam_dark_shaman.py b/scripts/mobiles/endor/bewitching_pubam_dark_shaman.py index 24991fba..60365a16 100644 --- a/scripts/mobiles/endor/bewitching_pubam_dark_shaman.py +++ b/scripts/mobiles/endor/bewitching_pubam_dark_shaman.py @@ -19,7 +19,7 @@ def addTemplate(core): mobileTemplate.setDeathblow(True) mobileTemplate.setSocialGroup('pubam tribe') mobileTemplate.setAssistRange(1) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) mobileTemplate.setStalker(True) diff --git a/scripts/mobiles/endor/black_sun_assassin.py b/scripts/mobiles/endor/black_sun_assassin.py index 2c74e8fd..90549bc7 100644 --- a/scripts/mobiles/endor/black_sun_assassin.py +++ b/scripts/mobiles/endor/black_sun_assassin.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("death watch") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_black_sun_assassin.iff') diff --git a/scripts/mobiles/endor/black_sun_guard.py b/scripts/mobiles/endor/black_sun_guard.py index 84bc5629..4b053d7f 100644 --- a/scripts/mobiles/endor/black_sun_guard.py +++ b/scripts/mobiles/endor/black_sun_guard.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("death watch") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_black_sun_guard.iff') diff --git a/scripts/mobiles/endor/black_sun_thug.py b/scripts/mobiles/endor/black_sun_thug.py index b61254da..bda6e1bd 100644 --- a/scripts/mobiles/endor/black_sun_thug.py +++ b/scripts/mobiles/endor/black_sun_thug.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("death watch") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_black_sun_thug.iff') diff --git a/scripts/mobiles/endor/blood_drenched_merek_king.py b/scripts/mobiles/endor/blood_drenched_merek_king.py index 6b950903..8884ce8f 100644 --- a/scripts/mobiles/endor/blood_drenched_merek_king.py +++ b/scripts/mobiles/endor/blood_drenched_merek_king.py @@ -23,10 +23,10 @@ def addTemplate(core): mobileTemplate.setSocialGroup("merek") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() - templates.add('object/mobile/shared_merek.iff') + templates.add('object/mobile/shared_blood_drenched_merek_king.iff') mobileTemplate.setTemplates(templates) weaponTemplates = Vector() diff --git a/scripts/mobiles/endor/blood_frenzied_boar_wolf.py b/scripts/mobiles/endor/blood_frenzied_boar_wolf.py index 726770ec..58479684 100644 --- a/scripts/mobiles/endor/blood_frenzied_boar_wolf.py +++ b/scripts/mobiles/endor/blood_frenzied_boar_wolf.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("boar wolf") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_boar_wolf.iff') @@ -33,6 +33,9 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_charge_4') + attacks.add('bm_dampen_pain_4') + attacks.add('bm_slash_4') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/blood_stained_merek.py b/scripts/mobiles/endor/blood_stained_merek.py index 335d42c4..510bb956 100644 --- a/scripts/mobiles/endor/blood_stained_merek.py +++ b/scripts/mobiles/endor/blood_stained_merek.py @@ -23,7 +23,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("merek") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_merek.iff') @@ -35,6 +35,10 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_claw_4') + attacks.add('bm_damage_poison_4') + attacks.add('bm_dampen_pain_4') + attacks.add('bm_slash_4') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/bloodseeker_mite.py b/scripts/mobiles/endor/bloodseeker_mite.py new file mode 100644 index 00000000..76407f52 --- /dev/null +++ b/scripts/mobiles/endor/bloodseeker_mite.py @@ -0,0 +1,43 @@ +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('bloodseeker_mite') + mobileTemplate.setLevel(64) + mobileTemplate.setDifficulty(Difficulty.NORMAL) + + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("bloodseeker") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(Options.ATTACKABLE) + + templates = Vector() + templates.add('object/mobile/shared_bloodseeker_mite.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', WeaponType.UNARMED, 1.0, 6, 'energy') + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + attacks.add('bm_bite_4') + attacks.add('bm_bolster_armor_4') + attacks.add('bm_enfeeble_4') + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('bloodseeker_mite', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/bloodseeker_mite_drone.py b/scripts/mobiles/endor/bloodseeker_mite_drone.py index 3602ccf6..6219ffeb 100644 --- a/scripts/mobiles/endor/bloodseeker_mite_drone.py +++ b/scripts/mobiles/endor/bloodseeker_mite_drone.py @@ -21,6 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("bloodseeker") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_bloodseeker.iff') @@ -32,6 +33,9 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_bite_4') + attacks.add('bm_bolster_armor_4') + attacks.add('bm_enfeeble_4') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/bloodseeker_mite_guardian.py b/scripts/mobiles/endor/bloodseeker_mite_guardian.py new file mode 100644 index 00000000..660c9ce6 --- /dev/null +++ b/scripts/mobiles/endor/bloodseeker_mite_guardian.py @@ -0,0 +1,43 @@ +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('bloodseeker_mite_guardian') + mobileTemplate.setLevel(64) + mobileTemplate.setDifficulty(Difficulty.NORMAL) + + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("bloodseeker") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) + + templates = Vector() + templates.add('object/mobile/shared_bloodseeker_mite.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', WeaponType.UNARMED, 1.0, 6, 'energy') + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + attacks.add('bm_bite_4') + attacks.add('bm_bolster_armor_4') + attacks.add('bm_enfeeble_4') + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('bloodseeker_mite_guardian', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/bloodseeker_mite_hunter.py b/scripts/mobiles/endor/bloodseeker_mite_hunter.py new file mode 100644 index 00000000..516672d9 --- /dev/null +++ b/scripts/mobiles/endor/bloodseeker_mite_hunter.py @@ -0,0 +1,43 @@ +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('bloodseeker_mite_drone') + mobileTemplate.setLevel(64) + mobileTemplate.setDifficulty(Difficulty.NORMAL) + + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("bloodseeker") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(Options.ATTACKABLE) + + templates = Vector() + templates.add('object/mobile/shared_bloodseeker.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() + attacks.add('bm_bite_4') + attacks.add('bm_bolster_armor_4') + attacks.add('bm_enfeeble_4') + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('bloodseeker_mite_drone', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/bloodseeker_mite_queen.py b/scripts/mobiles/endor/bloodseeker_mite_queen.py index ad565ef0..beb21a32 100644 --- a/scripts/mobiles/endor/bloodseeker_mite_queen.py +++ b/scripts/mobiles/endor/bloodseeker_mite_queen.py @@ -19,12 +19,12 @@ def addTemplate(core): mobileTemplate.setDeathblow(True) mobileTemplate.setScale(1.2) mobileTemplate.setSocialGroup("bloodseeker") - mobileTemplate.setAssistRange(0) + mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() - templates.add('object/mobile/shared_bloodseeker.iff') + templates.add('object/mobile/shared_bloodseeker_mite_queen.iff') mobileTemplate.setTemplates(templates) weaponTemplates = Vector() @@ -33,6 +33,9 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_bite_4') + attacks.add('bm_bolster_armor_4') + attacks.add('bm_enfeeble_4') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/blooming_jax.py b/scripts/mobiles/endor/blooming_jax.py index 6b873bd8..356eb3d6 100644 --- a/scripts/mobiles/endor/blooming_jax.py +++ b/scripts/mobiles/endor/blooming_jax.py @@ -23,12 +23,12 @@ def addTemplate(core): mobileTemplate.setBoneType("Animal Bones") mobileTemplate.setBoneAmount(25) mobileTemplate.setSocialGroup("jax") - mobileTemplate.setAssistRange(0) + mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() - templates.add('object/mobile/shared_jax.iff') + templates.add('object/mobile/shared_blooming_jax.iff') mobileTemplate.setTemplates(templates) weaponTemplates = Vector() @@ -37,6 +37,9 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_claw_4') + attacks.add('bm_flank_2') + attacks.add('bm_slash_4') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/blurrg.py b/scripts/mobiles/endor/blurrg.py index 5e081f5e..1ab820f8 100644 --- a/scripts/mobiles/endor/blurrg.py +++ b/scripts/mobiles/endor/blurrg.py @@ -19,9 +19,9 @@ def addTemplate(core): mobileTemplate.setDeathblow(False) mobileTemplate.setScale(1) mobileTemplate.setSocialGroup("blurrg") - mobileTemplate.setAssistRange(0) + mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setOptionsBitmask(Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_blurrg.iff') @@ -33,6 +33,8 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_bite_4') + attacks.add('bm_hamstring_4') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/blurrg_hunter.py b/scripts/mobiles/endor/blurrg_hunter.py index 790d3b8e..8de30eda 100644 --- a/scripts/mobiles/endor/blurrg_hunter.py +++ b/scripts/mobiles/endor/blurrg_hunter.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("blurrg") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_blurrg.iff') @@ -33,6 +33,8 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_bite_4') + attacks.add('bm_hamstring_4') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/blurrg_pup.py b/scripts/mobiles/endor/blurrg_pup.py index 6e3229df..54699b6d 100644 --- a/scripts/mobiles/endor/blurrg_pup.py +++ b/scripts/mobiles/endor/blurrg_pup.py @@ -19,12 +19,12 @@ def addTemplate(core): mobileTemplate.setDeathblow(False) mobileTemplate.setScale(.5) mobileTemplate.setSocialGroup("blurrg") - mobileTemplate.setAssistRange(0) + mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setOptionsBitmask(Options.ATTACKABLE) templates = Vector() - templates.add('object/mobile/shared_blurrg.iff') + templates.add('object/mobile/shared_blurrg_pup.iff') mobileTemplate.setTemplates(templates) weaponTemplates = Vector() @@ -33,6 +33,8 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_bite_4') + attacks.add('bm_hamstring_4') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/blurrg_raptor.py b/scripts/mobiles/endor/blurrg_raptor.py index b90eabcf..5bd55ce1 100644 --- a/scripts/mobiles/endor/blurrg_raptor.py +++ b/scripts/mobiles/endor/blurrg_raptor.py @@ -20,8 +20,7 @@ def addTemplate(core): mobileTemplate.setScale(1) mobileTemplate.setSocialGroup("blurrg") mobileTemplate.setAssistRange(12) - mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_blurrg.iff') @@ -33,6 +32,8 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_bite_4') + attacks.add('bm_hamstring_4') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/blurrg_sand_crawler.py b/scripts/mobiles/endor/blurrg_sand_crawler.py index aa48874f..6608d461 100644 --- a/scripts/mobiles/endor/blurrg_sand_crawler.py +++ b/scripts/mobiles/endor/blurrg_sand_crawler.py @@ -19,9 +19,9 @@ def addTemplate(core): mobileTemplate.setDeathblow(False) mobileTemplate.setScale(1) mobileTemplate.setSocialGroup("blurrg") - mobileTemplate.setAssistRange(0) + mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setOptionsBitmask(Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_blurrg.iff') @@ -33,6 +33,8 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_bite_4') + attacks.add('bm_hamstring_4') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/blurrg_tracker.py b/scripts/mobiles/endor/blurrg_tracker.py index aa75fd4a..a1017d26 100644 --- a/scripts/mobiles/endor/blurrg_tracker.py +++ b/scripts/mobiles/endor/blurrg_tracker.py @@ -19,9 +19,9 @@ def addTemplate(core): mobileTemplate.setDeathblow(False) mobileTemplate.setScale(1) mobileTemplate.setSocialGroup("blurrg") - mobileTemplate.setAssistRange(0) + mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setOptionsBitmask(Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_blurrg.iff') @@ -33,6 +33,8 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_bite_4') + attacks.add('bm_hamstring_4') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/blushing_jax.py b/scripts/mobiles/endor/blushing_jax.py index d89e7675..8cc8ead1 100644 --- a/scripts/mobiles/endor/blushing_jax.py +++ b/scripts/mobiles/endor/blushing_jax.py @@ -23,12 +23,12 @@ def addTemplate(core): mobileTemplate.setBoneType("Animal Bones") mobileTemplate.setBoneAmount(25) mobileTemplate.setSocialGroup("jax") - mobileTemplate.setAssistRange(0) + mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setOptionsBitmask(Options.ATTACKABLE) templates = Vector() - templates.add('object/mobile/shared_jax.iff') + templates.add('object/mobile/shared_blushing_jax.iff') mobileTemplate.setTemplates(templates) weaponTemplates = Vector() @@ -37,6 +37,9 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_claw_4') + attacks.add('bm_flank_4') + attacks.add('bm_slash_4') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/boar_wolf.py b/scripts/mobiles/endor/boar_wolf.py index bb44721f..ca5237ce 100644 --- a/scripts/mobiles/endor/boar_wolf.py +++ b/scripts/mobiles/endor/boar_wolf.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("boar wolf") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_boar_wolf.iff') @@ -33,6 +33,9 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_charge_4') + attacks.add('bm_dampen_pain_4') + attacks.add('bm_slash_4') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/boar_wolf_cub.py b/scripts/mobiles/endor/boar_wolf_cub.py index 1fc4d48e..8e710b9c 100644 --- a/scripts/mobiles/endor/boar_wolf_cub.py +++ b/scripts/mobiles/endor/boar_wolf_cub.py @@ -19,12 +19,12 @@ def addTemplate(core): mobileTemplate.setDeathblow(False) mobileTemplate.setScale(.5) mobileTemplate.setSocialGroup("boar wolf") - mobileTemplate.setAssistRange(0) + mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setOptionsBitmask(Options.ATTACKABLE) templates = Vector() - templates.add('object/mobile/shared_boar_wolf.iff') + templates.add('object/mobile/shared_boar_wolf_cub.iff') mobileTemplate.setTemplates(templates) weaponTemplates = Vector() @@ -33,6 +33,9 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_charge_4') + attacks.add('bm_dampen_pain_4') + attacks.add('bm_slash_4') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/boar_wolf_ravager.py b/scripts/mobiles/endor/boar_wolf_ravager.py index 2a142c8c..3f96b919 100644 --- a/scripts/mobiles/endor/boar_wolf_ravager.py +++ b/scripts/mobiles/endor/boar_wolf_ravager.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("boar wolf") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_boar_wolf.iff') @@ -33,6 +33,9 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_charge_4') + attacks.add('bm_dampen_pain_4') + attacks.add('bm_slash_4') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/bolle_bol_bark_biter.py b/scripts/mobiles/endor/bolle_bol_bark_biter.py index 5f8cd211..95629ae3 100644 --- a/scripts/mobiles/endor/bolle_bol_bark_biter.py +++ b/scripts/mobiles/endor/bolle_bol_bark_biter.py @@ -23,9 +23,9 @@ def addTemplate(core): mobileTemplate.setBoneType("Animal Bones") mobileTemplate.setBoneAmount(180) mobileTemplate.setSocialGroup("bolle bol") - mobileTemplate.setAssistRange(0) + mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setOptionsBitmask(Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_bolle_bol.iff') @@ -37,6 +37,11 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_bite_4') + attacks.add('bm_bolster_armor_5') + attacks.add('bm_charge_4') + attacks.add('bm_shaken_2') + attacks.add('bm_stomp_4') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/bolle_bol_calf.py b/scripts/mobiles/endor/bolle_bol_calf.py index 1aceda6a..5d0de760 100644 --- a/scripts/mobiles/endor/bolle_bol_calf.py +++ b/scripts/mobiles/endor/bolle_bol_calf.py @@ -23,12 +23,12 @@ def addTemplate(core): mobileTemplate.setBoneType("Animal Bones") mobileTemplate.setBoneAmount(180) mobileTemplate.setSocialGroup("bolle bol") - mobileTemplate.setAssistRange(0) + mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setOptionsBitmask(Options.ATTACKABLE) templates = Vector() - templates.add('object/mobile/shared_bolle_bol.iff') + templates.add('object/mobile/shared_bolle_bol_calf.iff') mobileTemplate.setTemplates(templates) weaponTemplates = Vector() @@ -37,6 +37,11 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_bite_4') + attacks.add('bm_bolster_armor_5') + attacks.add('bm_charge_4') + attacks.add('bm_shaken_2') + attacks.add('bm_stomp_4') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/bolle_bol_colt.py b/scripts/mobiles/endor/bolle_bol_colt.py index 7c1166e8..98c5388c 100644 --- a/scripts/mobiles/endor/bolle_bol_colt.py +++ b/scripts/mobiles/endor/bolle_bol_colt.py @@ -23,9 +23,9 @@ def addTemplate(core): mobileTemplate.setBoneType("Animal Bones") mobileTemplate.setBoneAmount(180) mobileTemplate.setSocialGroup("bolle bol") - mobileTemplate.setAssistRange(0) + mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setOptionsBitmask(Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_bolle_bol.iff') @@ -37,6 +37,11 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_bite_4') + attacks.add('bm_bolster_armor_5') + attacks.add('bm_charge_4') + attacks.add('bm_shaken_2') + attacks.add('bm_stomp_4') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/bolle_bol_female.py b/scripts/mobiles/endor/bolle_bol_female.py index 1454b84c..1e6df164 100644 --- a/scripts/mobiles/endor/bolle_bol_female.py +++ b/scripts/mobiles/endor/bolle_bol_female.py @@ -23,9 +23,9 @@ def addTemplate(core): mobileTemplate.setBoneType("Animal Bones") mobileTemplate.setBoneAmount(180) mobileTemplate.setSocialGroup("bolle bol") - mobileTemplate.setAssistRange(0) + mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setOptionsBitmask(Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_bolle_bol.iff') @@ -37,6 +37,11 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_bite_4') + attacks.add('bm_bolster_armor_5') + attacks.add('bm_charge_4') + attacks.add('bm_shaken_2') + attacks.add('bm_stomp_4') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/bolle_bol_herd_leader.py b/scripts/mobiles/endor/bolle_bol_herd_leader.py index 797fd923..3b128768 100644 --- a/scripts/mobiles/endor/bolle_bol_herd_leader.py +++ b/scripts/mobiles/endor/bolle_bol_herd_leader.py @@ -23,9 +23,9 @@ def addTemplate(core): mobileTemplate.setBoneType("Animal Bones") mobileTemplate.setBoneAmount(180) mobileTemplate.setSocialGroup("bolle bol") - mobileTemplate.setAssistRange(0) + mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setOptionsBitmask(Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_bolle_bol.iff') @@ -37,6 +37,11 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_bite_4') + attacks.add('bm_bolster_armor_5') + attacks.add('bm_charge_4') + attacks.add('bm_shaken_2') + attacks.add('bm_stomp_4') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/bolle_bol_male.py b/scripts/mobiles/endor/bolle_bol_male.py index 5078c0be..df5bf17c 100644 --- a/scripts/mobiles/endor/bolle_bol_male.py +++ b/scripts/mobiles/endor/bolle_bol_male.py @@ -23,9 +23,9 @@ def addTemplate(core): mobileTemplate.setBoneType("Animal Bones") mobileTemplate.setBoneAmount(180) mobileTemplate.setSocialGroup("bolle bol") - mobileTemplate.setAssistRange(0) + mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setOptionsBitmask(Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_bolle_bol.iff') @@ -37,6 +37,11 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_bite_4') + attacks.add('bm_bolster_armor_5') + attacks.add('bm_charge_4') + attacks.add('bm_shaken_2') + attacks.add('bm_stomp_4') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/bolle_bol_stomper.py b/scripts/mobiles/endor/bolle_bol_stomper.py index 6eee987b..e6738b97 100644 --- a/scripts/mobiles/endor/bolle_bol_stomper.py +++ b/scripts/mobiles/endor/bolle_bol_stomper.py @@ -23,9 +23,9 @@ def addTemplate(core): mobileTemplate.setBoneType("Animal Bones") mobileTemplate.setBoneAmount(180) mobileTemplate.setSocialGroup("bolle bol") - mobileTemplate.setAssistRange(0) + mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setOptionsBitmask(Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_bolle_bol.iff') @@ -37,6 +37,11 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_bite_4') + attacks.add('bm_bolster_armor_5') + attacks.add('bm_charge_4') + attacks.add('bm_shaken_2') + attacks.add('bm_stomp_4') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/bordok_ancient.py b/scripts/mobiles/endor/bordok_ancient.py index 2317611c..814543a7 100644 --- a/scripts/mobiles/endor/bordok_ancient.py +++ b/scripts/mobiles/endor/bordok_ancient.py @@ -19,9 +19,9 @@ def addTemplate(core): mobileTemplate.setDeathblow(False) mobileTemplate.setScale(1) mobileTemplate.setSocialGroup("bordok") - mobileTemplate.setAssistRange(0) + mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setOptionsBitmask(Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_bordok.iff') @@ -33,6 +33,9 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_bite_4') + attacks.add('bm_defensive_4') + attacks.add('bm_kick_4') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/bordok_foal.py b/scripts/mobiles/endor/bordok_foal.py index 649748a3..e45b598d 100644 --- a/scripts/mobiles/endor/bordok_foal.py +++ b/scripts/mobiles/endor/bordok_foal.py @@ -19,12 +19,12 @@ def addTemplate(core): mobileTemplate.setDeathblow(False) mobileTemplate.setScale(.5) mobileTemplate.setSocialGroup("bordok") - mobileTemplate.setAssistRange(0) + mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setOptionsBitmask(Options.ATTACKABLE) templates = Vector() - templates.add('object/mobile/shared_bordok.iff') + templates.add('object/mobile/shared_bordok_foal.iff') mobileTemplate.setTemplates(templates) weaponTemplates = Vector() @@ -33,6 +33,9 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_bite_4') + attacks.add('bm_defensive_4') + attacks.add('bm_kick_4') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/bordok_herd_master.py b/scripts/mobiles/endor/bordok_herd_master.py index 125195b7..4cf22beb 100644 --- a/scripts/mobiles/endor/bordok_herd_master.py +++ b/scripts/mobiles/endor/bordok_herd_master.py @@ -19,9 +19,9 @@ def addTemplate(core): mobileTemplate.setDeathblow(False) mobileTemplate.setScale(1.2) mobileTemplate.setSocialGroup("bordok") - mobileTemplate.setAssistRange(0) + mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setOptionsBitmask(Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_bordok.iff') @@ -33,6 +33,9 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_bite_4') + attacks.add('bm_defensive_4') + attacks.add('bm_kick_4') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/bordok_mare.py b/scripts/mobiles/endor/bordok_mare.py index b9a53d0a..17731980 100644 --- a/scripts/mobiles/endor/bordok_mare.py +++ b/scripts/mobiles/endor/bordok_mare.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("bordok") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_bordok.iff') @@ -33,6 +33,9 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_bite_4') + attacks.add('bm_defensive_4') + attacks.add('bm_kick_4') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/borgle_life_sapper.py b/scripts/mobiles/endor/borgle_life_sapper.py new file mode 100644 index 00000000..39da2656 --- /dev/null +++ b/scripts/mobiles/endor/borgle_life_sapper.py @@ -0,0 +1,47 @@ +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('borgle_life_sapper') + mobileTemplate.setLevel(63) + mobileTemplate.setDifficulty(Difficulty.NORMAL) + + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(5) + mobileTemplate.setBoneType("Avian Bones") + mobileTemplate.setBoneAmount(5) + mobileTemplate.setSocialGroup("borgle") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) + + templates = Vector() + templates.add('object/mobile/shared_borgle.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', WeaponType.UNARMED, 1.0, 6, 'energy') + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + attacks.add('bm_health_leech_2') + attacks.add('bm_puncture_2') + attacks.add('bm_wing_buffet_4') + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('borgle_life_sapper', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/bounding_jax.py b/scripts/mobiles/endor/bounding_jax.py index 852d8863..ff25f382 100644 --- a/scripts/mobiles/endor/bounding_jax.py +++ b/scripts/mobiles/endor/bounding_jax.py @@ -23,12 +23,12 @@ def addTemplate(core): mobileTemplate.setBoneType("Animal Bones") mobileTemplate.setBoneAmount(25) mobileTemplate.setSocialGroup("jax") - mobileTemplate.setAssistRange(0) + mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setOptionsBitmask(Options.ATTACKABLE) templates = Vector() - templates.add('object/mobile/shared_jax.iff') + templates.add('object/mobile/shared_bearded_jax.iff') mobileTemplate.setTemplates(templates) weaponTemplates = Vector() diff --git a/scripts/mobiles/endor/cowardly_gurreck.py b/scripts/mobiles/endor/cowardly_gurreck.py index 1a3470c1..5dd875f0 100644 --- a/scripts/mobiles/endor/cowardly_gurreck.py +++ b/scripts/mobiles/endor/cowardly_gurreck.py @@ -19,9 +19,9 @@ def addTemplate(core): mobileTemplate.setDeathblow(False) mobileTemplate.setScale(1) mobileTemplate.setSocialGroup("gurreck") - mobileTemplate.setAssistRange(0) + mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setOptionsBitmask(Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_gurreck.iff') @@ -33,6 +33,9 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_claw_4') + attacks.add('bm_flank_2') + attacks.add('bm_slash_4') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/crafty_donkuwah_scout.py b/scripts/mobiles/endor/crafty_donkuwah_scout.py index 9b7db9eb..d6b98a59 100644 --- a/scripts/mobiles/endor/crafty_donkuwah_scout.py +++ b/scripts/mobiles/endor/crafty_donkuwah_scout.py @@ -19,7 +19,7 @@ def addTemplate(core): mobileTemplate.setDeathblow(True) mobileTemplate.setSocialGroup('donkuwah tribe') mobileTemplate.setAssistRange(1) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) mobileTemplate.setStalker(True) templates = Vector() diff --git a/scripts/mobiles/endor/crafty_pubam_scout.py b/scripts/mobiles/endor/crafty_pubam_scout.py index c0f05086..69593840 100644 --- a/scripts/mobiles/endor/crafty_pubam_scout.py +++ b/scripts/mobiles/endor/crafty_pubam_scout.py @@ -19,7 +19,7 @@ def addTemplate(core): mobileTemplate.setDeathblow(True) mobileTemplate.setSocialGroup('pubam tribe') mobileTemplate.setAssistRange(1) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) mobileTemplate.setStalker(True) templates = Vector() diff --git a/scripts/mobiles/endor/crazed_gurreck.py b/scripts/mobiles/endor/crazed_gurreck.py index c31b2e75..2bf5a970 100644 --- a/scripts/mobiles/endor/crazed_gurreck.py +++ b/scripts/mobiles/endor/crazed_gurreck.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("gurreck") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_gurreck.iff') @@ -33,6 +33,9 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_claw_4') + attacks.add('bm_flank_2') + attacks.add('bm_slash_4') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/crimson_blurrg.py b/scripts/mobiles/endor/crimson_blurrg.py index df6ab6a6..c4bd2fa4 100644 --- a/scripts/mobiles/endor/crimson_blurrg.py +++ b/scripts/mobiles/endor/crimson_blurrg.py @@ -19,9 +19,9 @@ def addTemplate(core): mobileTemplate.setDeathblow(False) mobileTemplate.setScale(1) mobileTemplate.setSocialGroup("blurrg") - mobileTemplate.setAssistRange(0) + mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_blurrg.iff') @@ -33,6 +33,8 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_bite_4') + attacks.add('bm_hamstring_4') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/delirious_merek_avenger.py b/scripts/mobiles/endor/delirious_merek_avenger.py index 63ee5866..9311359c 100644 --- a/scripts/mobiles/endor/delirious_merek_avenger.py +++ b/scripts/mobiles/endor/delirious_merek_avenger.py @@ -21,20 +21,24 @@ def addTemplate(core): mobileTemplate.setHideType("Leathery Hide") mobileTemplate.setHideAmount(45) mobileTemplate.setSocialGroup("merek") - mobileTemplate.setAssistRange(0) + mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_merek.iff') mobileTemplate.setTemplates(templates) weaponTemplates = Vector() - weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', WeaponType.UNARMED, 1.0, 6, 'kinetic') + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', WeaponType.UNARMED, 1.0, 6, 'energy') weaponTemplates.add(weapontemplate) mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_claw_4') + attacks.add('bm_damage_poison_4') + attacks.add('bm_dampen_pain_4') + attacks.add('bm_slash_4') mobileTemplate.setDefaultAttack('creatureRangedAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/deranged_mantigrue.py b/scripts/mobiles/endor/deranged_mantigrue.py index e508877c..0f5142c3 100644 --- a/scripts/mobiles/endor/deranged_mantigrue.py +++ b/scripts/mobiles/endor/deranged_mantigrue.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("mantigrue") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_condor_dragon.iff') @@ -33,6 +33,10 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_claw_4') + attacks.add('bm_damage_poison_4') + attacks.add('bm_slash_4') + attacks.add('bm_wing_buffet_4') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/deranged_ravisher.py b/scripts/mobiles/endor/deranged_ravisher.py index d9f175ff..f0842dce 100644 --- a/scripts/mobiles/endor/deranged_ravisher.py +++ b/scripts/mobiles/endor/deranged_ravisher.py @@ -11,7 +11,7 @@ def addTemplate(core): mobileTemplate = MobileTemplate() mobileTemplate.setCreatureName('squill_deranged_ravisher') - mobileTemplate.setLevel(33) + mobileTemplate.setLevel(35) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("squill") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_squill.iff') diff --git a/scripts/mobiles/endor/desert_gurreck_charger.py b/scripts/mobiles/endor/desert_gurreck_charger.py index cfd8ed1b..310c295c 100644 --- a/scripts/mobiles/endor/desert_gurreck_charger.py +++ b/scripts/mobiles/endor/desert_gurreck_charger.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("gurreck") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_gurreck.iff') @@ -33,6 +33,9 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_claw_4') + attacks.add('bm_flank_2') + attacks.add('bm_slash_4') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/desert_scavenger.py b/scripts/mobiles/endor/desert_scavenger.py index c0fde176..cefaebfc 100644 --- a/scripts/mobiles/endor/desert_scavenger.py +++ b/scripts/mobiles/endor/desert_scavenger.py @@ -25,10 +25,10 @@ def addTemplate(core): mobileTemplate.setSocialGroup("borgle") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() - templates.add('object/mobile/shared_borgle.iff') + templates.add('object/mobile/shared_gackle_bat.iff') mobileTemplate.setTemplates(templates) weaponTemplates = Vector() diff --git a/scripts/mobiles/endor/diminutive_bounding_jax.py b/scripts/mobiles/endor/diminutive_bounding_jax.py index c4330b60..2b061b55 100644 --- a/scripts/mobiles/endor/diminutive_bounding_jax.py +++ b/scripts/mobiles/endor/diminutive_bounding_jax.py @@ -9,7 +9,7 @@ from java.util import Vector def addTemplate(core): mobileTemplate = MobileTemplate() - + mobileTemplate.setCreatureName('jax_bounding_dwarf') mobileTemplate.setLevel(25) mobileTemplate.setDifficulty(Difficulty.NORMAL) @@ -23,22 +23,22 @@ def addTemplate(core): mobileTemplate.setBoneType("Animal Bones") mobileTemplate.setBoneAmount(25) mobileTemplate.setSocialGroup("jax") - mobileTemplate.setAssistRange(0) + mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(128) - + mobileTemplate.setOptionsBitmask(Options.ATTACKABLE) + templates = Vector() - templates.add('object/mobile/shared_jax.iff') + templates.add('object/mobile/shared_bearded_jax.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('diminutive_bounding_jax', mobileTemplate) return \ No newline at end of file diff --git a/scripts/mobiles/endor/diseased_blurrg.py b/scripts/mobiles/endor/diseased_blurrg.py index 450ea03d..cab12a5d 100644 --- a/scripts/mobiles/endor/diseased_blurrg.py +++ b/scripts/mobiles/endor/diseased_blurrg.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("self") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_blurrg.iff') @@ -33,6 +33,8 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_bite_4') + attacks.add('bm_hamstring_4') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/domesticated_blurrg.py b/scripts/mobiles/endor/domesticated_blurrg.py index 949de25b..5411146d 100644 --- a/scripts/mobiles/endor/domesticated_blurrg.py +++ b/scripts/mobiles/endor/domesticated_blurrg.py @@ -19,9 +19,9 @@ def addTemplate(core): mobileTemplate.setDeathblow(False) mobileTemplate.setScale(.8) mobileTemplate.setSocialGroup("self") - mobileTemplate.setAssistRange(0) + mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setOptionsBitmask(Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_blurrg.iff') @@ -33,6 +33,8 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_bite_4') + attacks.add('bm_hamstring_4') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/domesticated_merek.py b/scripts/mobiles/endor/domesticated_merek.py index 9e96e60a..9624f7fd 100644 --- a/scripts/mobiles/endor/domesticated_merek.py +++ b/scripts/mobiles/endor/domesticated_merek.py @@ -21,9 +21,9 @@ def addTemplate(core): mobileTemplate.setHideType("Leathery Hide") mobileTemplate.setHideAmount(45) mobileTemplate.setSocialGroup("self") - mobileTemplate.setAssistRange(0) + mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setOptionsBitmask(Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_merek.iff') @@ -35,6 +35,10 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_claw_4') + attacks.add('bm_damage_poison_4') + attacks.add('bm_dampen_pain_4') + attacks.add('bm_slash_4') mobileTemplate.setDefaultAttack('creatureRangedAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/donkuwah_battlelord.py b/scripts/mobiles/endor/donkuwah_battlelord.py index f4225baf..784e1dc7 100644 --- a/scripts/mobiles/endor/donkuwah_battlelord.py +++ b/scripts/mobiles/endor/donkuwah_battlelord.py @@ -19,7 +19,7 @@ def addTemplate(core): mobileTemplate.setDeathblow(True) mobileTemplate.setSocialGroup('donkuwah tribe') mobileTemplate.setAssistRange(1) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) mobileTemplate.setStalker(True) diff --git a/scripts/mobiles/endor/donkuwah_chieftan.py b/scripts/mobiles/endor/donkuwah_chieftan.py index c57f468d..d2568e4e 100644 --- a/scripts/mobiles/endor/donkuwah_chieftan.py +++ b/scripts/mobiles/endor/donkuwah_chieftan.py @@ -19,7 +19,7 @@ def addTemplate(core): mobileTemplate.setDeathblow(True) mobileTemplate.setSocialGroup('donkuwah tribe') mobileTemplate.setAssistRange(1) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) mobileTemplate.setStalker(True) diff --git a/scripts/mobiles/endor/donkuwah_cub.py b/scripts/mobiles/endor/donkuwah_cub.py index a9af9ed4..5bfbed0b 100644 --- a/scripts/mobiles/endor/donkuwah_cub.py +++ b/scripts/mobiles/endor/donkuwah_cub.py @@ -20,7 +20,7 @@ def addTemplate(core): mobileTemplate.setScale(.5) mobileTemplate.setSocialGroup('donkuwah tribe') mobileTemplate.setAssistRange(12) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) mobileTemplate.setStalker(True) diff --git a/scripts/mobiles/endor/donkuwah_laborer.py b/scripts/mobiles/endor/donkuwah_laborer.py index cefe19f3..1d106e59 100644 --- a/scripts/mobiles/endor/donkuwah_laborer.py +++ b/scripts/mobiles/endor/donkuwah_laborer.py @@ -18,7 +18,7 @@ def addTemplate(core): mobileTemplate.setMaxSpawnDistance(5) mobileTemplate.setDeathblow(False) mobileTemplate.setSocialGroup('donkuwah tribe') - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) mobileTemplate.setStalker(True) diff --git a/scripts/mobiles/endor/donkuwah_scout.py b/scripts/mobiles/endor/donkuwah_scout.py index da933f95..54e9fe75 100644 --- a/scripts/mobiles/endor/donkuwah_scout.py +++ b/scripts/mobiles/endor/donkuwah_scout.py @@ -19,7 +19,7 @@ def addTemplate(core): mobileTemplate.setDeathblow(False) mobileTemplate.setSocialGroup('donkuwah tribe') mobileTemplate.setAssistRange(12) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) mobileTemplate.setStalker(True) templates = Vector() diff --git a/scripts/mobiles/endor/donkuwah_shaman.py b/scripts/mobiles/endor/donkuwah_shaman.py index 57d81000..47bf922e 100644 --- a/scripts/mobiles/endor/donkuwah_shaman.py +++ b/scripts/mobiles/endor/donkuwah_shaman.py @@ -19,7 +19,7 @@ def addTemplate(core): mobileTemplate.setDeathblow(True) mobileTemplate.setSocialGroup('donkuwah tribe') mobileTemplate.setAssistRange(12) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) mobileTemplate.setStalker(True) templates = Vector() diff --git a/scripts/mobiles/endor/donkuwah_spiritmaster.py b/scripts/mobiles/endor/donkuwah_spiritmaster.py index 7f718aba..7ddf0cf5 100644 --- a/scripts/mobiles/endor/donkuwah_spiritmaster.py +++ b/scripts/mobiles/endor/donkuwah_spiritmaster.py @@ -19,7 +19,7 @@ def addTemplate(core): mobileTemplate.setDeathblow(True) mobileTemplate.setSocialGroup('donkuwah tribe') mobileTemplate.setAssistRange(12) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) mobileTemplate.setStalker(True) diff --git a/scripts/mobiles/endor/donkuwah_tribesman.py b/scripts/mobiles/endor/donkuwah_tribesman.py index 69a3082d..d801b46a 100644 --- a/scripts/mobiles/endor/donkuwah_tribesman.py +++ b/scripts/mobiles/endor/donkuwah_tribesman.py @@ -19,7 +19,7 @@ def addTemplate(core): mobileTemplate.setDeathblow(False) mobileTemplate.setSocialGroup('donkuwah tribe') mobileTemplate.setAssistRange(12) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) mobileTemplate.setStalker(True) diff --git a/scripts/mobiles/endor/dulok_outcast.py b/scripts/mobiles/endor/dulok_outcast.py index 38725e92..5717ba0f 100644 --- a/scripts/mobiles/endor/dulok_outcast.py +++ b/scripts/mobiles/endor/dulok_outcast.py @@ -19,7 +19,7 @@ def addTemplate(core): mobileTemplate.setDeathblow(True) mobileTemplate.setSocialGroup('dulok outpost') mobileTemplate.setAssistRange(1) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) mobileTemplate.setStalker(True) diff --git a/scripts/mobiles/endor/dulok_outcast_raider.py b/scripts/mobiles/endor/dulok_outcast_raider.py index 45bde8b1..1ecb2865 100644 --- a/scripts/mobiles/endor/dulok_outcast_raider.py +++ b/scripts/mobiles/endor/dulok_outcast_raider.py @@ -19,7 +19,7 @@ def addTemplate(core): mobileTemplate.setDeathblow(True) mobileTemplate.setSocialGroup('dulok outpost') mobileTemplate.setAssistRange(1) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) mobileTemplate.setStalker(True) diff --git a/scripts/mobiles/endor/eerie_korga_spiritmaster.py b/scripts/mobiles/endor/eerie_korga_spiritmaster.py index 1c5b1754..d3a60485 100644 --- a/scripts/mobiles/endor/eerie_korga_spiritmaster.py +++ b/scripts/mobiles/endor/eerie_korga_spiritmaster.py @@ -19,7 +19,7 @@ def addTemplate(core): mobileTemplate.setDeathblow(True) mobileTemplate.setSocialGroup('korga tribe') mobileTemplate.setAssistRange(1) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) mobileTemplate.setStalker(True) diff --git a/scripts/mobiles/endor/eerie_pubam_spiritmaster.py b/scripts/mobiles/endor/eerie_pubam_spiritmaster.py index 772cbede..c7721836 100644 --- a/scripts/mobiles/endor/eerie_pubam_spiritmaster.py +++ b/scripts/mobiles/endor/eerie_pubam_spiritmaster.py @@ -19,7 +19,7 @@ def addTemplate(core): mobileTemplate.setDeathblow(True) mobileTemplate.setSocialGroup('pubam tribe') mobileTemplate.setAssistRange(1) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) mobileTemplate.setStalker(True) diff --git a/scripts/mobiles/endor/elder_hanadak_matriarch.py b/scripts/mobiles/endor/elder_hanadak_matriarch.py index 13678dd2..172f5b0f 100644 --- a/scripts/mobiles/endor/elder_hanadak_matriarch.py +++ b/scripts/mobiles/endor/elder_hanadak_matriarch.py @@ -26,12 +26,12 @@ def addTemplate(core): mobileTemplate.setBoneAmount(35) mobileTemplate.setSocialGroup("hanadak") mobileTemplate.setAssistRange(12) - mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) mobileTemplate.setStalker(True) templates = Vector() - templates.add('object/mobile/shared_hanadak.iff') + templates.add('object/mobile/shared_elder_hanadak_matriarch.iff') mobileTemplate.setTemplates(templates) weaponTemplates = Vector() @@ -40,6 +40,9 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_dampen_pain_4') + attacks.add('bm_shaken_2') + attacks.add('bm_stomp_4') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/elder_squall.py b/scripts/mobiles/endor/elder_squall.py index 11816f22..301dfd88 100644 --- a/scripts/mobiles/endor/elder_squall.py +++ b/scripts/mobiles/endor/elder_squall.py @@ -23,8 +23,8 @@ def addTemplate(core): mobileTemplate.setBoneType("Animal Bones") mobileTemplate.setBoneAmount(8) mobileTemplate.setSocialGroup("squall") - mobileTemplate.setAssistRange(0) - mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setAssistRange(12) + mobileTemplate.setOptionsBitmask(Options.ATTACKABLE) mobileTemplate.setStalker(True) templates = Vector() @@ -37,6 +37,7 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_bite_4') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/enraged_donkuwah.py b/scripts/mobiles/endor/enraged_donkuwah.py index a0b0a879..5c08695e 100644 --- a/scripts/mobiles/endor/enraged_donkuwah.py +++ b/scripts/mobiles/endor/enraged_donkuwah.py @@ -19,7 +19,7 @@ def addTemplate(core): mobileTemplate.setDeathblow(True) mobileTemplate.setSocialGroup('donkuwah tribe') mobileTemplate.setAssistRange(1) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) mobileTemplate.setStalker(True) diff --git a/scripts/mobiles/endor/enraged_korga.py b/scripts/mobiles/endor/enraged_korga.py index bc48d038..d26f7b51 100644 --- a/scripts/mobiles/endor/enraged_korga.py +++ b/scripts/mobiles/endor/enraged_korga.py @@ -19,7 +19,7 @@ def addTemplate(core): mobileTemplate.setDeathblow(True) mobileTemplate.setSocialGroup('korga tribe') mobileTemplate.setAssistRange(1) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) mobileTemplate.setStalker(True) diff --git a/scripts/mobiles/endor/enraged_pubam.py b/scripts/mobiles/endor/enraged_pubam.py index 06f24cf6..a1035a4c 100644 --- a/scripts/mobiles/endor/enraged_pubam.py +++ b/scripts/mobiles/endor/enraged_pubam.py @@ -19,7 +19,7 @@ def addTemplate(core): mobileTemplate.setDeathblow(True) mobileTemplate.setSocialGroup('pubam tribe') mobileTemplate.setAssistRange(1) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) mobileTemplate.setStalker(True) diff --git a/scripts/mobiles/endor/erratic_swirl_prong.py b/scripts/mobiles/endor/erratic_swirl_prong.py index 227f73c7..1645c0c2 100644 --- a/scripts/mobiles/endor/erratic_swirl_prong.py +++ b/scripts/mobiles/endor/erratic_swirl_prong.py @@ -19,8 +19,8 @@ def addTemplate(core): mobileTemplate.setDeathblow(False) mobileTemplate.setScale(1) mobileTemplate.setSocialGroup("swirl prong") - mobileTemplate.setAssistRange(0) - mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setAssistRange(12) + mobileTemplate.setOptionsBitmask(Options.ATTACKABLE) mobileTemplate.setStalker(True) templates = Vector() @@ -33,6 +33,9 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_charge_2') + attacks.add('bm_defensive_2') + attacks.add('bm_slash_2') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/feral_marauder.py b/scripts/mobiles/endor/feral_marauder.py index f46d3b1f..d80e614d 100644 --- a/scripts/mobiles/endor/feral_marauder.py +++ b/scripts/mobiles/endor/feral_marauder.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("marauder") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_marauder_male_01.iff') diff --git a/scripts/mobiles/endor/festering_squill.py b/scripts/mobiles/endor/festering_squill.py index 4214f4c7..8f20eb6d 100644 --- a/scripts/mobiles/endor/festering_squill.py +++ b/scripts/mobiles/endor/festering_squill.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("squill") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_squill.iff') @@ -33,6 +33,9 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_bite_4') + attacks.add('bm_defensive_4') + attacks.add('bm_disease_4') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/fierce_borgle.py b/scripts/mobiles/endor/fierce_borgle.py index f04716fa..4a4b95d3 100644 --- a/scripts/mobiles/endor/fierce_borgle.py +++ b/scripts/mobiles/endor/fierce_borgle.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("borgle") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_borgle.iff') @@ -37,6 +37,8 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_puncture_2') + attacks.add('bm_wing_buffet_4') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/frenzied_donkuwah.py b/scripts/mobiles/endor/frenzied_donkuwah.py index eebd4c12..794dd187 100644 --- a/scripts/mobiles/endor/frenzied_donkuwah.py +++ b/scripts/mobiles/endor/frenzied_donkuwah.py @@ -19,7 +19,7 @@ def addTemplate(core): mobileTemplate.setDeathblow(True) mobileTemplate.setSocialGroup('donkuwah tribe') mobileTemplate.setAssistRange(1) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) mobileTemplate.setStalker(True) diff --git a/scripts/mobiles/endor/frenzied_korga.py b/scripts/mobiles/endor/frenzied_korga.py index c2346117..697f27b0 100644 --- a/scripts/mobiles/endor/frenzied_korga.py +++ b/scripts/mobiles/endor/frenzied_korga.py @@ -19,7 +19,7 @@ def addTemplate(core): mobileTemplate.setDeathblow(True) mobileTemplate.setSocialGroup('korga tribe') mobileTemplate.setAssistRange(1) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) mobileTemplate.setStalker(True) diff --git a/scripts/mobiles/endor/frenzied_marauder.py b/scripts/mobiles/endor/frenzied_marauder.py index 84d0f674..b876264e 100644 --- a/scripts/mobiles/endor/frenzied_marauder.py +++ b/scripts/mobiles/endor/frenzied_marauder.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("marauder") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_marauder_male_01.iff') diff --git a/scripts/mobiles/endor/frenzied_pubam.py b/scripts/mobiles/endor/frenzied_pubam.py index 916b08aa..6dbbd6ef 100644 --- a/scripts/mobiles/endor/frenzied_pubam.py +++ b/scripts/mobiles/endor/frenzied_pubam.py @@ -19,7 +19,7 @@ def addTemplate(core): mobileTemplate.setDeathblow(True) mobileTemplate.setSocialGroup('pubam tribe') mobileTemplate.setAssistRange(1) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) mobileTemplate.setStalker(True) diff --git a/scripts/mobiles/endor/gleaming_lantern_bird.py b/scripts/mobiles/endor/gleaming_lantern_bird.py index 0b75bae6..f3891a16 100644 --- a/scripts/mobiles/endor/gleaming_lantern_bird.py +++ b/scripts/mobiles/endor/gleaming_lantern_bird.py @@ -23,9 +23,9 @@ def addTemplate(core): mobileTemplate.setBoneType("Avian Bones") mobileTemplate.setBoneAmount(46) mobileTemplate.setSocialGroup("lantern") - mobileTemplate.setAssistRange(0) + mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setOptionsBitmask(Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_lantern_bird.iff') @@ -37,6 +37,9 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_claw_4') + attacks.add('bm_slash_4') + attacks.add('bm_wing_buffet_4') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/gnarled_donkuwah_spiritmaster.py b/scripts/mobiles/endor/gnarled_donkuwah_spiritmaster.py index 429865a3..d6b56f72 100644 --- a/scripts/mobiles/endor/gnarled_donkuwah_spiritmaster.py +++ b/scripts/mobiles/endor/gnarled_donkuwah_spiritmaster.py @@ -19,7 +19,7 @@ def addTemplate(core): mobileTemplate.setDeathblow(True) mobileTemplate.setSocialGroup('donkuwah tribe') mobileTemplate.setAssistRange(12) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) mobileTemplate.setStalker(True) diff --git a/scripts/mobiles/endor/gnarled_korga_spiritmaster.py b/scripts/mobiles/endor/gnarled_korga_spiritmaster.py index 179b7d52..211f5543 100644 --- a/scripts/mobiles/endor/gnarled_korga_spiritmaster.py +++ b/scripts/mobiles/endor/gnarled_korga_spiritmaster.py @@ -19,7 +19,7 @@ def addTemplate(core): mobileTemplate.setDeathblow(True) mobileTemplate.setSocialGroup('korga tribe') mobileTemplate.setAssistRange(1) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) mobileTemplate.setStalker(True) diff --git a/scripts/mobiles/endor/gnarled_pubam_spiritmaster.py b/scripts/mobiles/endor/gnarled_pubam_spiritmaster.py index a3926bc7..41c60725 100644 --- a/scripts/mobiles/endor/gnarled_pubam_spiritmaster.py +++ b/scripts/mobiles/endor/gnarled_pubam_spiritmaster.py @@ -19,7 +19,7 @@ def addTemplate(core): mobileTemplate.setDeathblow(True) mobileTemplate.setSocialGroup('pubam tribe') mobileTemplate.setAssistRange(1) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) mobileTemplate.setStalker(True) diff --git a/scripts/mobiles/endor/gorax.py b/scripts/mobiles/endor/gorax.py new file mode 100644 index 00000000..7816a227 --- /dev/null +++ b/scripts/mobiles/endor/gorax.py @@ -0,0 +1,40 @@ +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('gorax') + mobileTemplate.setLevel(83) + mobileTemplate.setDifficulty(Difficulty.BOSS) + + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("gorax") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) + + templates = Vector() + templates.add('object/mobile/shared_gorax.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('gorax', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/grassland_blood_marauder.py b/scripts/mobiles/endor/grassland_blood_marauder.py index e9bfbb2f..2b72ebf9 100644 --- a/scripts/mobiles/endor/grassland_blood_marauder.py +++ b/scripts/mobiles/endor/grassland_blood_marauder.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("marauder") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_marauder_male_01.iff') diff --git a/scripts/mobiles/endor/grassland_raider.py b/scripts/mobiles/endor/grassland_raider.py index 3496474f..19f24cad 100644 --- a/scripts/mobiles/endor/grassland_raider.py +++ b/scripts/mobiles/endor/grassland_raider.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("marauder") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_marauder_male_01.iff') diff --git a/scripts/mobiles/endor/gurreck.py b/scripts/mobiles/endor/gurreck.py index b0df49b1..7a747b8f 100644 --- a/scripts/mobiles/endor/gurreck.py +++ b/scripts/mobiles/endor/gurreck.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("gurreck") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_gurreck.iff') @@ -33,6 +33,9 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_claw_4') + attacks.add('bm_flank_2') + attacks.add('bm_slash_4') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/gurreck_forest_stalker.py b/scripts/mobiles/endor/gurreck_forest_stalker.py index 952ab950..7459af4f 100644 --- a/scripts/mobiles/endor/gurreck_forest_stalker.py +++ b/scripts/mobiles/endor/gurreck_forest_stalker.py @@ -10,7 +10,7 @@ from java.util import Vector def addTemplate(core): mobileTemplate = MobileTemplate() - mobileTemplate.setCreatureName('woodland_gurreck') + mobileTemplate.setCreatureName('woodland_gurreck') mobileTemplate.setLevel(64) mobileTemplate.setDifficulty(Difficulty.NORMAL) @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("gurreck") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_gurreck.iff') @@ -33,6 +33,9 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_claw_4') + attacks.add('bm_flank_2') + attacks.add('bm_slash_4') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/haggard_donkuwah_battlelord.py b/scripts/mobiles/endor/haggard_donkuwah_battlelord.py index 862154da..4606801a 100644 --- a/scripts/mobiles/endor/haggard_donkuwah_battlelord.py +++ b/scripts/mobiles/endor/haggard_donkuwah_battlelord.py @@ -19,7 +19,7 @@ def addTemplate(core): mobileTemplate.setDeathblow(True) mobileTemplate.setSocialGroup('donkuwah tribe') mobileTemplate.setAssistRange(1) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) mobileTemplate.setStalker(True) diff --git a/scripts/mobiles/endor/haggard_pubam_battlelord.py b/scripts/mobiles/endor/haggard_pubam_battlelord.py index 4863a8d5..7499072e 100644 --- a/scripts/mobiles/endor/haggard_pubam_battlelord.py +++ b/scripts/mobiles/endor/haggard_pubam_battlelord.py @@ -19,7 +19,7 @@ def addTemplate(core): mobileTemplate.setDeathblow(True) mobileTemplate.setSocialGroup('pubam tribe') mobileTemplate.setAssistRange(1) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) mobileTemplate.setStalker(True) diff --git a/scripts/mobiles/endor/hanadak_ancient.py b/scripts/mobiles/endor/hanadak_ancient.py index ba2f4875..4aa287dc 100644 --- a/scripts/mobiles/endor/hanadak_ancient.py +++ b/scripts/mobiles/endor/hanadak_ancient.py @@ -16,7 +16,7 @@ def addTemplate(core): mobileTemplate.setMinSpawnDistance(4) mobileTemplate.setMaxSpawnDistance(8) - mobileTemplate.setDeathblow(False) + mobileTemplate.setDeathblow(True) mobileTemplate.setScale(1.2) mobileTemplate.setMeatType("Carnivore Meat") mobileTemplate.setMeatAmount(40) @@ -27,7 +27,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("hanadak") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_hanadak.iff') @@ -39,6 +39,9 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_dampen_pain_4') + attacks.add('bm_shaken_2') + attacks.add('bm_stomp_4') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/hanadak_drifter.py b/scripts/mobiles/endor/hanadak_drifter.py index 8654485a..06d1668f 100644 --- a/scripts/mobiles/endor/hanadak_drifter.py +++ b/scripts/mobiles/endor/hanadak_drifter.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("bageraset") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_hanadak.iff') @@ -37,6 +37,9 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_dampen_pain_4') + attacks.add('bm_shaken_2') + attacks.add('bm_stomp_4') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/highland_remmer.py b/scripts/mobiles/endor/highland_remmer.py index 4090db3b..7230c46d 100644 --- a/scripts/mobiles/endor/highland_remmer.py +++ b/scripts/mobiles/endor/highland_remmer.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("remmer") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_remmer.iff') @@ -33,6 +33,9 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_bite_4') + attacks.add('bm_bolster_armor_4') + attacks.add('bm_enfeeble_4') mobileTemplate.setDefaultAttack('creatureSpitAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/hilltop_gurreck_hunter.py b/scripts/mobiles/endor/hilltop_gurreck_hunter.py index c9e9c017..01c1c34e 100644 --- a/scripts/mobiles/endor/hilltop_gurreck_hunter.py +++ b/scripts/mobiles/endor/hilltop_gurreck_hunter.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("gurreck") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_gurreck.iff') @@ -33,6 +33,9 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_claw_4') + attacks.add('bm_flank_2') + attacks.add('bm_slash_4') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/infuriated_roba_protector.py b/scripts/mobiles/endor/infuriated_roba_protector.py index 96dc73eb..f1be4788 100644 --- a/scripts/mobiles/endor/infuriated_roba_protector.py +++ b/scripts/mobiles/endor/infuriated_roba_protector.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("roba") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_roba.iff') diff --git a/scripts/mobiles/endor/insane_mantigrue_berserker.py b/scripts/mobiles/endor/insane_mantigrue_berserker.py index 79d984d8..1a4aa6a6 100644 --- a/scripts/mobiles/endor/insane_mantigrue_berserker.py +++ b/scripts/mobiles/endor/insane_mantigrue_berserker.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("mantigrue") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_condor_dragon.iff') @@ -33,6 +33,10 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_claw_3') + attacks.add('bm_damage_poison_3') + attacks.add('bm_slash_3') + attacks.add('bm_wing_buffet_3') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/king_merek_harvester.py b/scripts/mobiles/endor/king_merek_harvester.py index 8432ab31..b63c81ab 100644 --- a/scripts/mobiles/endor/king_merek_harvester.py +++ b/scripts/mobiles/endor/king_merek_harvester.py @@ -23,10 +23,10 @@ def addTemplate(core): mobileTemplate.setSocialGroup("merek") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() - templates.add('object/mobile/shared_merek.iff') + templates.add('object/mobile/shared_king_merek_harvester.iff') mobileTemplate.setTemplates(templates) weaponTemplates = Vector() @@ -35,6 +35,10 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_claw_4') + attacks.add('bm_damage_poison_4') + attacks.add('bm_dampen_pain_4') + attacks.add('bm_slash_4') mobileTemplate.setDefaultAttack('creatureRangedAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/korga_adept.py b/scripts/mobiles/endor/korga_adept.py index cc96631e..4766006a 100644 --- a/scripts/mobiles/endor/korga_adept.py +++ b/scripts/mobiles/endor/korga_adept.py @@ -19,7 +19,7 @@ def addTemplate(core): mobileTemplate.setDeathblow(True) mobileTemplate.setSocialGroup('korga tribe') mobileTemplate.setAssistRange(12) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) mobileTemplate.setStalker(True) diff --git a/scripts/mobiles/endor/korga_ancient.py b/scripts/mobiles/endor/korga_ancient.py index 8c62f18c..00df578b 100644 --- a/scripts/mobiles/endor/korga_ancient.py +++ b/scripts/mobiles/endor/korga_ancient.py @@ -19,7 +19,7 @@ def addTemplate(core): mobileTemplate.setDeathblow(True) mobileTemplate.setSocialGroup('korga tribe') mobileTemplate.setAssistRange(12) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) mobileTemplate.setStalker(True) diff --git a/scripts/mobiles/endor/korga_battlelord.py b/scripts/mobiles/endor/korga_battlelord.py index d9c16274..3fb0c01e 100644 --- a/scripts/mobiles/endor/korga_battlelord.py +++ b/scripts/mobiles/endor/korga_battlelord.py @@ -19,7 +19,7 @@ def addTemplate(core): mobileTemplate.setDeathblow(True) mobileTemplate.setSocialGroup('korga tribe') mobileTemplate.setAssistRange(12) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) mobileTemplate.setStalker(True) diff --git a/scripts/mobiles/endor/korga_chieftan.py b/scripts/mobiles/endor/korga_chieftan.py index c484501f..bc9a4800 100644 --- a/scripts/mobiles/endor/korga_chieftan.py +++ b/scripts/mobiles/endor/korga_chieftan.py @@ -19,7 +19,7 @@ def addTemplate(core): mobileTemplate.setDeathblow(True) mobileTemplate.setSocialGroup('korga tribe') mobileTemplate.setAssistRange(12) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) mobileTemplate.setStalker(True) diff --git a/scripts/mobiles/endor/korga_dark_shaman.py b/scripts/mobiles/endor/korga_dark_shaman.py index a4ca1121..8b9ac253 100644 --- a/scripts/mobiles/endor/korga_dark_shaman.py +++ b/scripts/mobiles/endor/korga_dark_shaman.py @@ -19,7 +19,7 @@ def addTemplate(core): mobileTemplate.setDeathblow(True) mobileTemplate.setSocialGroup('korga tribe') mobileTemplate.setAssistRange(12) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) mobileTemplate.setStalker(True) diff --git a/scripts/mobiles/endor/korga_elder.py b/scripts/mobiles/endor/korga_elder.py index a87392da..ae43885f 100644 --- a/scripts/mobiles/endor/korga_elder.py +++ b/scripts/mobiles/endor/korga_elder.py @@ -19,7 +19,7 @@ def addTemplate(core): mobileTemplate.setDeathblow(True) mobileTemplate.setSocialGroup('korga tribe') mobileTemplate.setAssistRange(12) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) mobileTemplate.setStalker(True) diff --git a/scripts/mobiles/endor/korga_laborer.py b/scripts/mobiles/endor/korga_laborer.py index 481c1f62..fb1bb827 100644 --- a/scripts/mobiles/endor/korga_laborer.py +++ b/scripts/mobiles/endor/korga_laborer.py @@ -19,7 +19,7 @@ def addTemplate(core): mobileTemplate.setDeathblow(True) mobileTemplate.setSocialGroup('korga tribe') mobileTemplate.setAssistRange(12) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) mobileTemplate.setStalker(True) diff --git a/scripts/mobiles/endor/korga_scout.py b/scripts/mobiles/endor/korga_scout.py index 62c5a332..e9b1b691 100644 --- a/scripts/mobiles/endor/korga_scout.py +++ b/scripts/mobiles/endor/korga_scout.py @@ -19,7 +19,7 @@ def addTemplate(core): mobileTemplate.setDeathblow(True) mobileTemplate.setSocialGroup('korga tribe') mobileTemplate.setAssistRange(12) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) mobileTemplate.setStalker(True) diff --git a/scripts/mobiles/endor/korga_spiritmaster.py b/scripts/mobiles/endor/korga_spiritmaster.py index f84acf19..eeb7f671 100644 --- a/scripts/mobiles/endor/korga_spiritmaster.py +++ b/scripts/mobiles/endor/korga_spiritmaster.py @@ -19,7 +19,7 @@ def addTemplate(core): mobileTemplate.setDeathblow(True) mobileTemplate.setSocialGroup('korga tribe') mobileTemplate.setAssistRange(12) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) mobileTemplate.setStalker(True) diff --git a/scripts/mobiles/endor/lantern_bird.py b/scripts/mobiles/endor/lantern_bird.py index 8f98087a..3b685c2b 100644 --- a/scripts/mobiles/endor/lantern_bird.py +++ b/scripts/mobiles/endor/lantern_bird.py @@ -23,9 +23,9 @@ def addTemplate(core): mobileTemplate.setBoneType("Avian Bones") mobileTemplate.setBoneAmount(46) mobileTemplate.setSocialGroup("lantern") - mobileTemplate.setAssistRange(0) + mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_lantern_bird.iff') @@ -37,6 +37,9 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_claw_4') + attacks.add('bm_slash_4') + attacks.add('bm_wing_buffet_4') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/lice_ridden_remmer_queen.py b/scripts/mobiles/endor/lice_ridden_remmer_queen.py index d54a1730..468ded5a 100644 --- a/scripts/mobiles/endor/lice_ridden_remmer_queen.py +++ b/scripts/mobiles/endor/lice_ridden_remmer_queen.py @@ -21,19 +21,22 @@ def addTemplate(core): mobileTemplate.setSocialGroup("remmer") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() - templates.add('object/mobile/shared_remmer.iff') + templates.add('object/mobile/shared_lice_ridden_remmer_queen.iff') mobileTemplate.setTemplates(templates) weaponTemplates = Vector() - weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', WeaponType.UNARMED, 1.0, 6, 'kinetic') + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', WeaponType.UNARMED, 1.0, 6, 'energy') weaponTemplates.add(weapontemplate) mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() - mobileTemplate.setDefaultAttack('creatureSpitAttack') + attacks.add('bm_bite_4') + attacks.add('bm_bolster_armor_4') + attacks.add('bm_enfeeble_4') + mobileTemplate.setDefaultAttack('creatureRangedAttack') mobileTemplate.setAttacks(attacks) core.spawnService.addMobileTemplate('lice_ridden_remmer_queen', mobileTemplate) diff --git a/scripts/mobiles/endor/mantigrue_hunter.py b/scripts/mobiles/endor/mantigrue_hunter.py index 30133859..762662c4 100644 --- a/scripts/mobiles/endor/mantigrue_hunter.py +++ b/scripts/mobiles/endor/mantigrue_hunter.py @@ -21,18 +21,22 @@ def addTemplate(core): mobileTemplate.setSocialGroup("mantigrue") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_condor_dragon.iff') mobileTemplate.setTemplates(templates) weaponTemplates = Vector() - weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', WeaponType.UNARMED, 1.0, 6, 'kinetic') + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', WeaponType.UNARMED, 1.0, 6, 'energy') weaponTemplates.add(weapontemplate) mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_claw_4') + attacks.add('bm_damage_poison_4') + attacks.add('bm_slash_4') + attacks.add('bm_wing_buffet_4') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/mantigrue_night_stalker.py b/scripts/mobiles/endor/mantigrue_night_stalker.py index 7c988696..e4fbbf6f 100644 --- a/scripts/mobiles/endor/mantigrue_night_stalker.py +++ b/scripts/mobiles/endor/mantigrue_night_stalker.py @@ -21,18 +21,22 @@ def addTemplate(core): mobileTemplate.setSocialGroup("mantigrue") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() - templates.add('object/mobile/shared_condor_dragon.iff') + templates.add('object/mobile/shared_mantigrue_night_stalker.iff') mobileTemplate.setTemplates(templates) weaponTemplates = Vector() - weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', WeaponType.UNARMED, 1.0, 6, 'kinetic') + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', WeaponType.UNARMED, 1.0, 6, 'energy') weaponTemplates.add(weapontemplate) mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_claw_4') + attacks.add('bm_damage_poison_4') + attacks.add('bm_slash_4') + attacks.add('bm_wing_buffet_4') mobileTemplate.setDefaultAttack('creatureRangedAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/mantigrue_reaper.py b/scripts/mobiles/endor/mantigrue_reaper.py index eb4c4274..4bf505f7 100644 --- a/scripts/mobiles/endor/mantigrue_reaper.py +++ b/scripts/mobiles/endor/mantigrue_reaper.py @@ -21,18 +21,22 @@ def addTemplate(core): mobileTemplate.setSocialGroup("mantigrue") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_condor_dragon.iff') mobileTemplate.setTemplates(templates) weaponTemplates = Vector() - weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', WeaponType.UNARMED, 1.0, 6, 'kinetic') + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', WeaponType.UNARMED, 1.0, 6, 'energy') weaponTemplates.add(weapontemplate) mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_claw_4') + attacks.add('bm_damage_poison_4') + attacks.add('bm_slash_4') + attacks.add('bm_wing_buffet_4') mobileTemplate.setDefaultAttack('creatureRangedAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/mantigrue_screecher.py b/scripts/mobiles/endor/mantigrue_screecher.py index 3cc9cf58..c54b02ad 100644 --- a/scripts/mobiles/endor/mantigrue_screecher.py +++ b/scripts/mobiles/endor/mantigrue_screecher.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("mantigrue") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_condor_dragon.iff') @@ -33,6 +33,10 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_claw_4') + attacks.add('bm_damage_poison_4') + attacks.add('bm_slash_4') + attacks.add('bm_wing_buffet_4') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/marauder.py b/scripts/mobiles/endor/marauder.py index d5bdca1e..1b919bec 100644 --- a/scripts/mobiles/endor/marauder.py +++ b/scripts/mobiles/endor/marauder.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("marauder") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_marauder_male_01.iff') diff --git a/scripts/mobiles/endor/mature_hanadak.py b/scripts/mobiles/endor/mature_hanadak.py index 366de3ef..4f5ae369 100644 --- a/scripts/mobiles/endor/mature_hanadak.py +++ b/scripts/mobiles/endor/mature_hanadak.py @@ -27,7 +27,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("hanadak") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_hanadak.iff') @@ -39,6 +39,9 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_dampen_pain_4') + attacks.add('bm_shaken_2') + attacks.add('bm_stomp_4') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/mature_hanadak_rock_smasher.py b/scripts/mobiles/endor/mature_hanadak_rock_smasher.py index 246c5f1b..f2b1a690 100644 --- a/scripts/mobiles/endor/mature_hanadak_rock_smasher.py +++ b/scripts/mobiles/endor/mature_hanadak_rock_smasher.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("hanadak") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_hanadak.iff') @@ -37,6 +37,9 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_dampen_pain_4') + attacks.add('bm_shaken_2') + attacks.add('bm_stomp_4') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/merek_assassin.py b/scripts/mobiles/endor/merek_assassin.py index 5e020e9d..984af9c9 100644 --- a/scripts/mobiles/endor/merek_assassin.py +++ b/scripts/mobiles/endor/merek_assassin.py @@ -23,7 +23,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("merek") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_merek.iff') @@ -35,6 +35,10 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_claw_4') + attacks.add('bm_damage_poison_4') + attacks.add('bm_dampen_poison_4') + attacks.add('bm_slash_4') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/merek_cavern_creeper.py b/scripts/mobiles/endor/merek_cavern_creeper.py index 90e1bfe3..588ae4a4 100644 --- a/scripts/mobiles/endor/merek_cavern_creeper.py +++ b/scripts/mobiles/endor/merek_cavern_creeper.py @@ -23,18 +23,22 @@ def addTemplate(core): mobileTemplate.setSocialGroup("merek") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_merek.iff') mobileTemplate.setTemplates(templates) weaponTemplates = Vector() - weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', WeaponType.UNARMED, 1.0, 6, 'kinetic') + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', WeaponType.UNARMED, 1.0, 6, 'energy') weaponTemplates.add(weapontemplate) mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_claw_4') + attacks.add('bm_damage_poison_4') + attacks.add('bm_dampen_pain_4') + attacks.add('bm_slash_4') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/merek_deaths_head.py b/scripts/mobiles/endor/merek_deaths_head.py index e052b362..5dd567ed 100644 --- a/scripts/mobiles/endor/merek_deaths_head.py +++ b/scripts/mobiles/endor/merek_deaths_head.py @@ -23,18 +23,22 @@ def addTemplate(core): mobileTemplate.setSocialGroup("merek") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_merek.iff') mobileTemplate.setTemplates(templates) weaponTemplates = Vector() - weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', WeaponType.UNARMED, 1.0, 6, 'kinetic') + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', WeaponType.UNARMED, 1.0, 6, 'energy') weaponTemplates.add(weapontemplate) mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_claw_4') + attacks.add('bm_damage_poison_4') + attacks.add('bm_damage_pain_4') + attacks.add('bm_slash_4') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/merek_harvester.py b/scripts/mobiles/endor/merek_harvester.py index cb016b81..d614c698 100644 --- a/scripts/mobiles/endor/merek_harvester.py +++ b/scripts/mobiles/endor/merek_harvester.py @@ -23,7 +23,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("merek") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setOptionsBitmask(Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_merek.iff') @@ -35,6 +35,10 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_claw_4') + attacks.add('bm_damage_poison_4') + attacks.add('bm_damage_pain_4') + attacks.add('bm_slash_4') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/mine_rat.py b/scripts/mobiles/endor/mine_rat.py index 2c900cbd..e700aa28 100644 --- a/scripts/mobiles/endor/mine_rat.py +++ b/scripts/mobiles/endor/mine_rat.py @@ -12,16 +12,16 @@ def addTemplate(core): mobileTemplate.setCreatureName('death_watch_quenker') mobileTemplate.setLevel(83) - mobileTemplate.setDifficulty(Difficulty.NORMAL) + mobileTemplate.setDifficulty(Difficulty.ELITE) mobileTemplate.setMinSpawnDistance(4) mobileTemplate.setMaxSpawnDistance(8) mobileTemplate.setDeathblow(True) mobileTemplate.setScale(.6) mobileTemplate.setSocialGroup("death watch") - mobileTemplate.setAssistRange(12) + mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_barbed_quenker.iff') @@ -33,6 +33,9 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_bite_5') + attacks.add('bm_bolster_armor_5') + attacks.add('bm_enfeeble_5') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/minor_gorax.py b/scripts/mobiles/endor/minor_gorax.py index d0244d5c..faceb768 100644 --- a/scripts/mobiles/endor/minor_gorax.py +++ b/scripts/mobiles/endor/minor_gorax.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("gorax") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_gorax.iff') diff --git a/scripts/mobiles/endor/noxious_squill.py b/scripts/mobiles/endor/noxious_squill.py index 2579fd9c..12c95aac 100644 --- a/scripts/mobiles/endor/noxious_squill.py +++ b/scripts/mobiles/endor/noxious_squill.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("squill") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_squill.iff') @@ -33,6 +33,9 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_bite_4') + attacks.add('bm_defensive_4') + attacks.add('bm_disease_4') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/pouncing_jax.py b/scripts/mobiles/endor/pouncing_jax.py new file mode 100644 index 00000000..d9097279 --- /dev/null +++ b/scripts/mobiles/endor/pouncing_jax.py @@ -0,0 +1,47 @@ +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('pouncing_jax') + mobileTemplate.setLevel(60) + mobileTemplate.setDifficulty(Difficulty.NORMAL) + + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setHideType("Bristley Hide") + mobileTemplate.setHideAmount(35) + mobileTemplate.setBoneType("Animal Bones") + mobileTemplate.setBoneAmount(25) + mobileTemplate.setSocialGroup("jax") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(Options.ATTACKABLE) + + templates = Vector() + templates.add('object/mobile/shared_bearded_jax.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() + attacks.add('bm_claw_4') + attacks.add('bm_flank_2') + attacks.add('bm_slash_4') + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('pouncing_jax', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/prowling_gurreck.py b/scripts/mobiles/endor/prowling_gurreck.py index aeed5f7e..4afde7fe 100644 --- a/scripts/mobiles/endor/prowling_gurreck.py +++ b/scripts/mobiles/endor/prowling_gurreck.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("gurreck") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_gurreck.iff') @@ -33,6 +33,9 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_claw_4') + attacks.add('bm_flank_2') + attacks.add('bm_slash_4') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/pubam_battlelord.py b/scripts/mobiles/endor/pubam_battlelord.py index 9765cfc7..bfca1a08 100644 --- a/scripts/mobiles/endor/pubam_battlelord.py +++ b/scripts/mobiles/endor/pubam_battlelord.py @@ -19,7 +19,7 @@ def addTemplate(core): mobileTemplate.setDeathblow(True) mobileTemplate.setSocialGroup('pubam tribe') mobileTemplate.setAssistRange(1) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) mobileTemplate.setStalker(True) diff --git a/scripts/mobiles/endor/pubam_chieftan.py b/scripts/mobiles/endor/pubam_chieftan.py index 5a9134ed..b7d20c2a 100644 --- a/scripts/mobiles/endor/pubam_chieftan.py +++ b/scripts/mobiles/endor/pubam_chieftan.py @@ -19,7 +19,7 @@ def addTemplate(core): mobileTemplate.setDeathblow(True) mobileTemplate.setSocialGroup('pubam tribe') mobileTemplate.setAssistRange(1) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) mobileTemplate.setStalker(True) diff --git a/scripts/mobiles/endor/pubam_dark_shaman.py b/scripts/mobiles/endor/pubam_dark_shaman.py index 44bef75b..2fbd35f6 100644 --- a/scripts/mobiles/endor/pubam_dark_shaman.py +++ b/scripts/mobiles/endor/pubam_dark_shaman.py @@ -19,7 +19,7 @@ def addTemplate(core): mobileTemplate.setDeathblow(True) mobileTemplate.setSocialGroup('pubam tribe') mobileTemplate.setAssistRange(12) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) mobileTemplate.setStalker(True) diff --git a/scripts/mobiles/endor/pubam_scout.py b/scripts/mobiles/endor/pubam_scout.py index 66f7c454..8311a85a 100644 --- a/scripts/mobiles/endor/pubam_scout.py +++ b/scripts/mobiles/endor/pubam_scout.py @@ -19,7 +19,7 @@ def addTemplate(core): mobileTemplate.setDeathblow(True) mobileTemplate.setSocialGroup('pubam tribe') mobileTemplate.setAssistRange(12) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) mobileTemplate.setStalker(True) diff --git a/scripts/mobiles/endor/pubam_spiritmaster.py b/scripts/mobiles/endor/pubam_spiritmaster.py index 367fa893..cca4c07e 100644 --- a/scripts/mobiles/endor/pubam_spiritmaster.py +++ b/scripts/mobiles/endor/pubam_spiritmaster.py @@ -19,7 +19,7 @@ def addTemplate(core): mobileTemplate.setDeathblow(True) mobileTemplate.setSocialGroup('pubam tribe') mobileTemplate.setAssistRange(12) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) mobileTemplate.setStalker(True) diff --git a/scripts/mobiles/endor/pubam_tribesman.py b/scripts/mobiles/endor/pubam_tribesman.py index daf11508..d791a213 100644 --- a/scripts/mobiles/endor/pubam_tribesman.py +++ b/scripts/mobiles/endor/pubam_tribesman.py @@ -19,7 +19,7 @@ def addTemplate(core): mobileTemplate.setDeathblow(True) mobileTemplate.setSocialGroup('pubam tribe') mobileTemplate.setAssistRange(12) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) mobileTemplate.setStalker(True) diff --git a/scripts/mobiles/endor/putrid_borgle.py b/scripts/mobiles/endor/putrid_borgle.py index a6b86352..ade80dfc 100644 --- a/scripts/mobiles/endor/putrid_borgle.py +++ b/scripts/mobiles/endor/putrid_borgle.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("borgle") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setOptionsBitmask(Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_borgle.iff') @@ -37,6 +37,8 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_puncture_4') + attacks.add('bm_wing_buffet_4') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/queen_merek_harvester.py b/scripts/mobiles/endor/queen_merek_harvester.py index cd45a764..6e937f81 100644 --- a/scripts/mobiles/endor/queen_merek_harvester.py +++ b/scripts/mobiles/endor/queen_merek_harvester.py @@ -23,10 +23,10 @@ def addTemplate(core): mobileTemplate.setSocialGroup("merek") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() - templates.add('object/mobile/shared_merek.iff') + templates.add('object/mobile/shared_queen_merek_harvester.iff') mobileTemplate.setTemplates(templates) weaponTemplates = Vector() @@ -35,6 +35,10 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_claw_4') + attacks.add('bm_damage_poison_4') + attacks.add('bm_damage_pain_4') + attacks.add('bm_slash_4') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/rabid_squall.py b/scripts/mobiles/endor/rabid_squall.py index af9a0dae..a1564a51 100644 --- a/scripts/mobiles/endor/rabid_squall.py +++ b/scripts/mobiles/endor/rabid_squall.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("squall") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_squall.iff') @@ -37,6 +37,7 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_bite_4') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/radiant_lantern_bird.py b/scripts/mobiles/endor/radiant_lantern_bird.py index 417d4f66..e91b9ec1 100644 --- a/scripts/mobiles/endor/radiant_lantern_bird.py +++ b/scripts/mobiles/endor/radiant_lantern_bird.py @@ -23,9 +23,9 @@ def addTemplate(core): mobileTemplate.setBoneType("Avian Bones") mobileTemplate.setBoneAmount(46) mobileTemplate.setSocialGroup("lantern") - mobileTemplate.setAssistRange(0) + mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setOptionsBitmask(Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_lantern_bird.iff') @@ -37,6 +37,9 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_claw_4') + attacks.add('bm_slash_4') + attacks.add('bm_wing_buffet_4') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/rancid_remmer_warrior.py b/scripts/mobiles/endor/rancid_remmer_warrior.py index b6958932..af02b6ad 100644 --- a/scripts/mobiles/endor/rancid_remmer_warrior.py +++ b/scripts/mobiles/endor/rancid_remmer_warrior.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("remmer") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_remmer.iff') @@ -33,7 +33,10 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() - mobileTemplate.setDefaultAttack('creatureSpitAttack') + attacks.add('bm_bite_4') + attacks.add('bm_bolster_armor_4') + attacks.add('bm_enfeeble_4') + mobileTemplate.setDefaultAttack('creatureRangedAttack') mobileTemplate.setAttacks(attacks) core.spawnService.addMobileTemplate('rancid_remmer_warrior', mobileTemplate) diff --git a/scripts/mobiles/endor/ravenous_roba_stalker.py b/scripts/mobiles/endor/ravenous_roba_stalker.py index c167b8c6..91b75b49 100644 --- a/scripts/mobiles/endor/ravenous_roba_stalker.py +++ b/scripts/mobiles/endor/ravenous_roba_stalker.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("roba") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_roba.iff') @@ -33,6 +33,9 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_charge_4') + attacks.add('bm_dampen_pain_4') + attacks.add('bm_slash_4') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/reclusive_roba.py b/scripts/mobiles/endor/reclusive_roba.py index e935c7b9..4c6c9a0d 100644 --- a/scripts/mobiles/endor/reclusive_roba.py +++ b/scripts/mobiles/endor/reclusive_roba.py @@ -19,9 +19,9 @@ def addTemplate(core): mobileTemplate.setDeathblow(False) mobileTemplate.setScale(1) mobileTemplate.setSocialGroup("roba") - mobileTemplate.setAssistRange(0) + mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setOptionsBitmask(Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_roba.iff') @@ -33,6 +33,9 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_charge_4') + attacks.add('bm_dampen_pain_4') + attacks.add('bm_slash_4') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/remmer_carrion_keeper.py b/scripts/mobiles/endor/remmer_carrion_keeper.py index d6a64afd..b668d2cd 100644 --- a/scripts/mobiles/endor/remmer_carrion_keeper.py +++ b/scripts/mobiles/endor/remmer_carrion_keeper.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("remmer") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_remmer.iff') @@ -33,6 +33,9 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_bite_4') + attacks.add('bm_bolster_armor_4') + attacks.add('bm_enfeeble_4') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/remmer_dune_scavenger.py b/scripts/mobiles/endor/remmer_dune_scavenger.py index 81e07444..4b4d3de4 100644 --- a/scripts/mobiles/endor/remmer_dune_scavenger.py +++ b/scripts/mobiles/endor/remmer_dune_scavenger.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("remmer") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_remmer.iff') @@ -33,7 +33,10 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() - mobileTemplate.setDefaultAttack('creatureSpitAttack') + attacks.add('bm_bite_4') + attacks.add('bm_bolster_armor_4') + attacks.add('bm_enfeeble_4') + mobileTemplate.setDefaultAttack('creatureRangedAttack') mobileTemplate.setAttacks(attacks) core.spawnService.addMobileTemplate('remmer_dune_scavenger', mobileTemplate) diff --git a/scripts/mobiles/endor/roaming_bordok_stud.py b/scripts/mobiles/endor/roaming_bordok_stud.py index 16a44651..eb950c53 100644 --- a/scripts/mobiles/endor/roaming_bordok_stud.py +++ b/scripts/mobiles/endor/roaming_bordok_stud.py @@ -20,7 +20,7 @@ def addTemplate(core): mobileTemplate.setScale(1) mobileTemplate.setSocialGroup("bordok") mobileTemplate.setAssistRange(0) - mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setOptionsBitmask(Options.ATTACKABLE) mobileTemplate.setStalker(False) templates = Vector() @@ -33,6 +33,9 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_bite_4') + attacks.add('bm_defensive_4') + attacks.add('bm_kick_4') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/roaming_desert_borgle.py b/scripts/mobiles/endor/roaming_desert_borgle.py index 0ec6e1b4..19e33ba3 100644 --- a/scripts/mobiles/endor/roaming_desert_borgle.py +++ b/scripts/mobiles/endor/roaming_desert_borgle.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("borgle") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_borgle.iff') @@ -37,6 +37,8 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_puncture_2') + attacks.add('bm_wing_buffet_4') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/roba.py b/scripts/mobiles/endor/roba.py index d2a36993..a4f8c64c 100644 --- a/scripts/mobiles/endor/roba.py +++ b/scripts/mobiles/endor/roba.py @@ -19,8 +19,8 @@ def addTemplate(core): mobileTemplate.setDeathblow(False) mobileTemplate.setScale(1) mobileTemplate.setSocialGroup("roba") - mobileTemplate.setAssistRange(0) - mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setAssistRange(12) + mobileTemplate.setOptionsBitmask(Options.ATTACKABLE) mobileTemplate.setStalker(False) templates = Vector() @@ -33,6 +33,9 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_charge_4') + attacks.add('bm_dampen_pain_4') + attacks.add('bm_slash_4') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/roba_boar.py b/scripts/mobiles/endor/roba_boar.py index 9f9f3ab3..97c376b3 100644 --- a/scripts/mobiles/endor/roba_boar.py +++ b/scripts/mobiles/endor/roba_boar.py @@ -19,9 +19,9 @@ def addTemplate(core): mobileTemplate.setDeathblow(False) mobileTemplate.setScale(1.1) mobileTemplate.setSocialGroup("roba") - mobileTemplate.setAssistRange(0) + mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_roba.iff') @@ -33,6 +33,9 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_charge_4') + attacks.add('bm_dampen_pain_4') + attacks.add('bm_slash_4') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/roba_pack_leader.py b/scripts/mobiles/endor/roba_pack_leader.py index e7df9c2f..07e1535c 100644 --- a/scripts/mobiles/endor/roba_pack_leader.py +++ b/scripts/mobiles/endor/roba_pack_leader.py @@ -18,9 +18,9 @@ def addTemplate(core): mobileTemplate.setMaxSpawnDistance(8) mobileTemplate.setDeathblow(False) mobileTemplate.setScale(1) - mobileTemplate.setSocialGroup("bageraset") - mobileTemplate.setAssistRange(0) - mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setSocialGroup("roba") + mobileTemplate.setAssistRange(12) + mobileTemplate.setOptionsBitmask(Options.ATTACKABLE) mobileTemplate.setStalker(True) templates = Vector() @@ -33,6 +33,9 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_charge_4') + attacks.add('bm_dampen_pain_4') + attacks.add('bm_slash_4') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/roba_runt.py b/scripts/mobiles/endor/roba_runt.py index 430ea8ae..9eb0c07a 100644 --- a/scripts/mobiles/endor/roba_runt.py +++ b/scripts/mobiles/endor/roba_runt.py @@ -19,8 +19,8 @@ def addTemplate(core): mobileTemplate.setDeathblow(False) mobileTemplate.setScale(.5) mobileTemplate.setSocialGroup("roba") - mobileTemplate.setAssistRange(0) - mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setAssistRange(12) + mobileTemplate.setOptionsBitmask(Options.ATTACKABLE) mobileTemplate.setStalker(False) templates = Vector() @@ -33,6 +33,9 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_charge_4') + attacks.add('bm_dampen_pain_4') + attacks.add('bm_slash_4') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/rotten_gut_remmer_king.py b/scripts/mobiles/endor/rotten_gut_remmer_king.py index 78b11abd..fffeef2a 100644 --- a/scripts/mobiles/endor/rotten_gut_remmer_king.py +++ b/scripts/mobiles/endor/rotten_gut_remmer_king.py @@ -21,10 +21,10 @@ def addTemplate(core): mobileTemplate.setSocialGroup("remmer") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() - templates.add('object/mobile/shared_remmer.iff') + templates.add('object/mobile/shared_rotten_gut_remmer_king.iff') mobileTemplate.setTemplates(templates) weaponTemplates = Vector() @@ -33,6 +33,9 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_bite_4') + attacks.add('bm_bolster_armor_4') + attacks.add('bm_enfeeble_4') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/sanguin_bloodseeker_hierarch.py b/scripts/mobiles/endor/sanguin_bloodseeker_hierarch.py index cf498f80..3ead65b5 100644 --- a/scripts/mobiles/endor/sanguin_bloodseeker_hierarch.py +++ b/scripts/mobiles/endor/sanguin_bloodseeker_hierarch.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("bloodseeker") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_bloodseeker.iff') @@ -33,6 +33,9 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_bite_4') + attacks.add('bm_bolster_armor_4') + attacks.add('bm_enfeeble_4') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/shaggy_donkuwah_youth.py b/scripts/mobiles/endor/shaggy_donkuwah_youth.py index cfcc0790..38fb7bad 100644 --- a/scripts/mobiles/endor/shaggy_donkuwah_youth.py +++ b/scripts/mobiles/endor/shaggy_donkuwah_youth.py @@ -19,7 +19,7 @@ def addTemplate(core): mobileTemplate.setDeathblow(False) mobileTemplate.setSocialGroup('donkuwah tribe') mobileTemplate.setAssistRange(12) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) mobileTemplate.setStalker(True) diff --git a/scripts/mobiles/endor/shaggy_korga_youth.py b/scripts/mobiles/endor/shaggy_korga_youth.py index 44ae7a0f..3f19c4bc 100644 --- a/scripts/mobiles/endor/shaggy_korga_youth.py +++ b/scripts/mobiles/endor/shaggy_korga_youth.py @@ -19,7 +19,7 @@ def addTemplate(core): mobileTemplate.setDeathblow(True) mobileTemplate.setSocialGroup('korga tribe') mobileTemplate.setAssistRange(12) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) mobileTemplate.setStalker(True) diff --git a/scripts/mobiles/endor/shaggy_pubam_youth.py b/scripts/mobiles/endor/shaggy_pubam_youth.py index f3c83eca..c77052df 100644 --- a/scripts/mobiles/endor/shaggy_pubam_youth.py +++ b/scripts/mobiles/endor/shaggy_pubam_youth.py @@ -19,7 +19,7 @@ def addTemplate(core): mobileTemplate.setDeathblow(True) mobileTemplate.setSocialGroup('pubam tribe') mobileTemplate.setAssistRange(12) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) mobileTemplate.setStalker(True) diff --git a/scripts/mobiles/endor/shimmering_lantern_bird.py b/scripts/mobiles/endor/shimmering_lantern_bird.py index 659a153d..ba088a7a 100644 --- a/scripts/mobiles/endor/shimmering_lantern_bird.py +++ b/scripts/mobiles/endor/shimmering_lantern_bird.py @@ -23,8 +23,8 @@ def addTemplate(core): mobileTemplate.setBoneType("Avian Bones") mobileTemplate.setBoneAmount(46) mobileTemplate.setSocialGroup("lantern") - mobileTemplate.setAssistRange(0) - mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setAssistRange(12) + mobileTemplate.setOptionsBitmask(Options.ATTACKABLE) mobileTemplate.setStalker(False) templates = Vector() @@ -37,6 +37,9 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_claw_4') + attacks.add('bm_slash_4') + attacks.add('bm_wing_buffet_4') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/spiketail_blurrg.py b/scripts/mobiles/endor/spiketail_blurrg.py new file mode 100644 index 00000000..0bddb7fe --- /dev/null +++ b/scripts/mobiles/endor/spiketail_blurrg.py @@ -0,0 +1,42 @@ +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('spiketail_blurrg') + mobileTemplate.setLevel(62) + mobileTemplate.setDifficulty(Difficulty.NORMAL) + + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("blurrg") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) + + templates = Vector() + templates.add('object/mobile/shared_spiketail_blurrg.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() + attacks.add('bm_bite_4') + attacks.add('bm_damage_poison_1') + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('spiketail_blurrg', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/spooky_donkuwah_spiritmaster.py b/scripts/mobiles/endor/spooky_donkuwah_spiritmaster.py index f0feff0b..d5f2dd49 100644 --- a/scripts/mobiles/endor/spooky_donkuwah_spiritmaster.py +++ b/scripts/mobiles/endor/spooky_donkuwah_spiritmaster.py @@ -19,7 +19,7 @@ def addTemplate(core): mobileTemplate.setDeathblow(True) mobileTemplate.setSocialGroup('donkuwah tribe') mobileTemplate.setAssistRange(12) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) mobileTemplate.setStalker(True) diff --git a/scripts/mobiles/endor/spooky_korga_spiritmaster.py b/scripts/mobiles/endor/spooky_korga_spiritmaster.py index a0f14679..8ebf66e0 100644 --- a/scripts/mobiles/endor/spooky_korga_spiritmaster.py +++ b/scripts/mobiles/endor/spooky_korga_spiritmaster.py @@ -19,7 +19,7 @@ def addTemplate(core): mobileTemplate.setDeathblow(True) mobileTemplate.setSocialGroup('korga tribe') mobileTemplate.setAssistRange(12) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) mobileTemplate.setStalker(True) diff --git a/scripts/mobiles/endor/spooky_pubam_spiritmaster.py b/scripts/mobiles/endor/spooky_pubam_spiritmaster.py index 819de13d..bceda03e 100644 --- a/scripts/mobiles/endor/spooky_pubam_spiritmaster.py +++ b/scripts/mobiles/endor/spooky_pubam_spiritmaster.py @@ -19,7 +19,7 @@ def addTemplate(core): mobileTemplate.setDeathblow(True) mobileTemplate.setSocialGroup('pubam tribe') mobileTemplate.setAssistRange(12) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) mobileTemplate.setStalker(True) diff --git a/scripts/mobiles/endor/squall.py b/scripts/mobiles/endor/squall.py index af10c574..83ac8fb0 100644 --- a/scripts/mobiles/endor/squall.py +++ b/scripts/mobiles/endor/squall.py @@ -23,8 +23,8 @@ def addTemplate(core): mobileTemplate.setBoneType("Animal Bones") mobileTemplate.setBoneAmount(8) mobileTemplate.setSocialGroup("squall") - mobileTemplate.setAssistRange(0) - mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setAssistRange(12) + mobileTemplate.setOptionsBitmask(Options.ATTACKABLE) mobileTemplate.setStalker(False) templates = Vector() @@ -37,6 +37,7 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_bite_4') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/stoneskin_hanadak.py b/scripts/mobiles/endor/stoneskin_hanadak.py index 5be9e97b..2780f29a 100644 --- a/scripts/mobiles/endor/stoneskin_hanadak.py +++ b/scripts/mobiles/endor/stoneskin_hanadak.py @@ -27,7 +27,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("hanadak") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_hanadak.iff') @@ -39,6 +39,9 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_dampen_pain_4') + attacks.add('bm_shaken_2') + attacks.add('bm_stomp_4') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/swirl_prong.py b/scripts/mobiles/endor/swirl_prong.py index c9d4990a..3de10b4b 100644 --- a/scripts/mobiles/endor/swirl_prong.py +++ b/scripts/mobiles/endor/swirl_prong.py @@ -19,8 +19,8 @@ def addTemplate(core): mobileTemplate.setDeathblow(False) mobileTemplate.setScale(1) mobileTemplate.setSocialGroup("swirl prong") - mobileTemplate.setAssistRange(0) - mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setAssistRange(12) + mobileTemplate.setOptionsBitmask(Options.ATTACKABLE) mobileTemplate.setStalker(False) templates = Vector() @@ -33,6 +33,9 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_charge_4') + attacks.add('bm_defensive_4') + attacks.add('bm_slash_4') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/swirl_prong_impaler.py b/scripts/mobiles/endor/swirl_prong_impaler.py index 7a8e8f87..958d2820 100644 --- a/scripts/mobiles/endor/swirl_prong_impaler.py +++ b/scripts/mobiles/endor/swirl_prong_impaler.py @@ -19,8 +19,8 @@ def addTemplate(core): mobileTemplate.setDeathblow(False) mobileTemplate.setScale(1) mobileTemplate.setSocialGroup("swirl prong") - mobileTemplate.setAssistRange(0) - mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setAssistRange(12) + mobileTemplate.setOptionsBitmask(Options.ATTACKABLE) mobileTemplate.setStalker(False) templates = Vector() @@ -33,6 +33,9 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_charge_4') + attacks.add('bm_defensive_4') + attacks.add('bm_slash_4') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/swirl_prong_pack_leader.py b/scripts/mobiles/endor/swirl_prong_pack_leader.py index 792fe4b5..5dd39deb 100644 --- a/scripts/mobiles/endor/swirl_prong_pack_leader.py +++ b/scripts/mobiles/endor/swirl_prong_pack_leader.py @@ -19,8 +19,8 @@ def addTemplate(core): mobileTemplate.setDeathblow(False) mobileTemplate.setScale(1) mobileTemplate.setSocialGroup("swirl prong") - mobileTemplate.setAssistRange(0) - mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setAssistRange(12) + mobileTemplate.setOptionsBitmask(Options.ATTACKABLE) mobileTemplate.setStalker(False) templates = Vector() @@ -33,6 +33,9 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_charge_4') + attacks.add('bm_defensive_4') + attacks.add('bm_slash_4') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/tainted_donkuwah_dark_shaman.py b/scripts/mobiles/endor/tainted_donkuwah_dark_shaman.py index 6e2f63ca..17565797 100644 --- a/scripts/mobiles/endor/tainted_donkuwah_dark_shaman.py +++ b/scripts/mobiles/endor/tainted_donkuwah_dark_shaman.py @@ -19,7 +19,7 @@ def addTemplate(core): mobileTemplate.setDeathblow(True) mobileTemplate.setSocialGroup('donkuwah tribe') mobileTemplate.setAssistRange(12) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) mobileTemplate.setStalker(True) diff --git a/scripts/mobiles/endor/tainted_korga_dark_shaman.py b/scripts/mobiles/endor/tainted_korga_dark_shaman.py index 6cc6bed6..8c886a8f 100644 --- a/scripts/mobiles/endor/tainted_korga_dark_shaman.py +++ b/scripts/mobiles/endor/tainted_korga_dark_shaman.py @@ -19,7 +19,7 @@ def addTemplate(core): mobileTemplate.setDeathblow(True) mobileTemplate.setSocialGroup('korga tribe') mobileTemplate.setAssistRange(12) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) mobileTemplate.setStalker(True) diff --git a/scripts/mobiles/endor/tainted_pubam_dark_shaman.py b/scripts/mobiles/endor/tainted_pubam_dark_shaman.py index 8e27c534..c9e05692 100644 --- a/scripts/mobiles/endor/tainted_pubam_dark_shaman.py +++ b/scripts/mobiles/endor/tainted_pubam_dark_shaman.py @@ -19,7 +19,7 @@ def addTemplate(core): mobileTemplate.setDeathblow(True) mobileTemplate.setSocialGroup('pubam tribe') mobileTemplate.setAssistRange(12) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) mobileTemplate.setStalker(True) diff --git a/scripts/mobiles/endor/toxic_merek_battlelord.py b/scripts/mobiles/endor/toxic_merek_battlelord.py index 25394307..336ad0c9 100644 --- a/scripts/mobiles/endor/toxic_merek_battlelord.py +++ b/scripts/mobiles/endor/toxic_merek_battlelord.py @@ -23,7 +23,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("merek") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_merek.iff') @@ -35,6 +35,10 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() + attacks.add('bm_claw_4') + attacks.add('bm_damage_poison_4') + attacks.add('bm_damage_pain_4') + attacks.add('bm_slash_4') mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/mobiles/endor/tricky_donkuwah_scout.py b/scripts/mobiles/endor/tricky_donkuwah_scout.py index 4911de06..5598b002 100644 --- a/scripts/mobiles/endor/tricky_donkuwah_scout.py +++ b/scripts/mobiles/endor/tricky_donkuwah_scout.py @@ -19,7 +19,7 @@ def addTemplate(core): mobileTemplate.setDeathblow(False) mobileTemplate.setSocialGroup('donkuwah tribe') mobileTemplate.setAssistRange(12) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) mobileTemplate.setStalker(True) diff --git a/scripts/mobiles/endor/tricky_korga_scout.py b/scripts/mobiles/endor/tricky_korga_scout.py index 7531d799..80a583c1 100644 --- a/scripts/mobiles/endor/tricky_korga_scout.py +++ b/scripts/mobiles/endor/tricky_korga_scout.py @@ -19,7 +19,7 @@ def addTemplate(core): mobileTemplate.setDeathblow(True) mobileTemplate.setSocialGroup('korga tribe') mobileTemplate.setAssistRange(12) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) mobileTemplate.setStalker(True) diff --git a/scripts/mobiles/endor/tricky_pubam_scout.py b/scripts/mobiles/endor/tricky_pubam_scout.py index ceb259b3..88066f74 100644 --- a/scripts/mobiles/endor/tricky_pubam_scout.py +++ b/scripts/mobiles/endor/tricky_pubam_scout.py @@ -19,7 +19,7 @@ def addTemplate(core): mobileTemplate.setDeathblow(True) mobileTemplate.setSocialGroup('pubam tribe') mobileTemplate.setAssistRange(12) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) mobileTemplate.setStalker(True) templates = Vector() diff --git a/scripts/mobiles/endor/venom_filled_arachne.py b/scripts/mobiles/endor/venom_filled_arachne.py index 263c1b24..4fd77f38 100644 --- a/scripts/mobiles/endor/venom_filled_arachne.py +++ b/scripts/mobiles/endor/venom_filled_arachne.py @@ -21,19 +21,22 @@ def addTemplate(core): mobileTemplate.setSocialGroup("arachne") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_angler.iff') mobileTemplate.setTemplates(templates) weaponTemplates = Vector() - weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', WeaponType.UNARMED, 1.0, 6, 'kinetic') + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', WeaponType.UNARMED, 1.0, 6, 'energy') weaponTemplates.add(weapontemplate) mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() - mobileTemplate.setDefaultAttack('creatureRangedAttack') + attacks.add('bm_damage_poison_3') + attacks.add('bm_defensive_3') + attacks.add('bm_puncture_1') + mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) core.spawnService.addMobileTemplate('venom_filled_arachne', mobileTemplate) diff --git a/scripts/mobiles/endor/vicious_donkuwah_battlelord.py b/scripts/mobiles/endor/vicious_donkuwah_battlelord.py index 12e52a1b..5c32be77 100644 --- a/scripts/mobiles/endor/vicious_donkuwah_battlelord.py +++ b/scripts/mobiles/endor/vicious_donkuwah_battlelord.py @@ -19,7 +19,7 @@ def addTemplate(core): mobileTemplate.setDeathblow(True) mobileTemplate.setSocialGroup('donkuwah tribe') mobileTemplate.setAssistRange(12) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) mobileTemplate.setStalker(True) diff --git a/scripts/mobiles/endor/vicious_korga_battlelord.py b/scripts/mobiles/endor/vicious_korga_battlelord.py index 538e7c29..8dfc1fd8 100644 --- a/scripts/mobiles/endor/vicious_korga_battlelord.py +++ b/scripts/mobiles/endor/vicious_korga_battlelord.py @@ -19,7 +19,7 @@ def addTemplate(core): mobileTemplate.setDeathblow(True) mobileTemplate.setSocialGroup('korga tribe') mobileTemplate.setAssistRange(12) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) mobileTemplate.setStalker(True) diff --git a/scripts/mobiles/endor/vicious_pubam_battlelord.py b/scripts/mobiles/endor/vicious_pubam_battlelord.py index 15e0c117..cf5d8f35 100644 --- a/scripts/mobiles/endor/vicious_pubam_battlelord.py +++ b/scripts/mobiles/endor/vicious_pubam_battlelord.py @@ -19,7 +19,7 @@ def addTemplate(core): mobileTemplate.setDeathblow(True) mobileTemplate.setSocialGroup('pubam tribe') mobileTemplate.setAssistRange(1) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) mobileTemplate.setStalker(True) diff --git a/scripts/mobiles/endor/vile_donkuwah_battlelord.py b/scripts/mobiles/endor/vile_donkuwah_battlelord.py index fe8187f3..d6fb1087 100644 --- a/scripts/mobiles/endor/vile_donkuwah_battlelord.py +++ b/scripts/mobiles/endor/vile_donkuwah_battlelord.py @@ -19,7 +19,7 @@ def addTemplate(core): mobileTemplate.setDeathblow(True) mobileTemplate.setSocialGroup('donkuwah tribe') mobileTemplate.setAssistRange(12) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) mobileTemplate.setStalker(True) diff --git a/scripts/mobiles/endor/vile_korga_battlelord.py b/scripts/mobiles/endor/vile_korga_battlelord.py index 9f089f46..9a313c96 100644 --- a/scripts/mobiles/endor/vile_korga_battlelord.py +++ b/scripts/mobiles/endor/vile_korga_battlelord.py @@ -19,7 +19,7 @@ def addTemplate(core): mobileTemplate.setDeathblow(True) mobileTemplate.setSocialGroup('korga tribe') mobileTemplate.setAssistRange(12) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) mobileTemplate.setStalker(True) diff --git a/scripts/mobiles/endor/wandering_desert_marauder.py b/scripts/mobiles/endor/wandering_desert_marauder.py index 6e7229c5..a68e7117 100644 --- a/scripts/mobiles/endor/wandering_desert_marauder.py +++ b/scripts/mobiles/endor/wandering_desert_marauder.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("marauder") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_marauder_male_01.iff') diff --git a/scripts/mobiles/endor/young_hanadak_rock_crusher.py b/scripts/mobiles/endor/young_hanadak_rock_crusher.py new file mode 100644 index 00000000..affa6ece --- /dev/null +++ b/scripts/mobiles/endor/young_hanadak_rock_crusher.py @@ -0,0 +1,47 @@ +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('young_hanadak_rock_crusher') + mobileTemplate.setLevel(60) + mobileTemplate.setDifficulty(Difficulty.NORMAL) + + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setHideType("Bristley Hide") + mobileTemplate.setHideAmount(35) + mobileTemplate.setBoneType("Animal Bones") + mobileTemplate.setBoneAmount(35) + mobileTemplate.setSocialGroup("bageraset") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) + + templates = Vector() + templates.add('object/mobile/shared_young_hanadak_rock_crusher.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() + attacks.add('bm_dampen_pain_4') + attacks.add('bm_shaken_2') + attacks.add('bm_stomp_4') + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('young_hanadak_rock_crusher', mobileTemplate) + return \ 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/instances/tuskenking/prequest/tusken_relic_fanatic.py b/scripts/mobiles/instances/tuskenking/prequest/tusken_relic_fanatic.py index b8b4bb55..5aafb6f3 100644 --- a/scripts/mobiles/instances/tuskenking/prequest/tusken_relic_fanatic.py +++ b/scripts/mobiles/instances/tuskenking/prequest/tusken_relic_fanatic.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("heroic tusken") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_tusken_raider.iff') diff --git a/scripts/mobiles/instances/tuskenking/prequest/tusken_relic_guard.py b/scripts/mobiles/instances/tuskenking/prequest/tusken_relic_guard.py index 664e7c4d..64a09f93 100644 --- a/scripts/mobiles/instances/tuskenking/prequest/tusken_relic_guard.py +++ b/scripts/mobiles/instances/tuskenking/prequest/tusken_relic_guard.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("heroic tusken") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_tusken_raider.iff') diff --git a/scripts/mobiles/instances/tuskenking/prequest/tusken_relic_worshiper.py b/scripts/mobiles/instances/tuskenking/prequest/tusken_relic_worshiper.py index 01d34da4..72bc3bf1 100644 --- a/scripts/mobiles/instances/tuskenking/prequest/tusken_relic_worshiper.py +++ b/scripts/mobiles/instances/tuskenking/prequest/tusken_relic_worshiper.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("heroic tusken") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_tusken_raider.iff') diff --git a/scripts/mobiles/instances/tuskenking/tusken/tusken_bantha.py b/scripts/mobiles/instances/tuskenking/tusken/tusken_bantha.py index 6285899c..f2107932 100644 --- a/scripts/mobiles/instances/tuskenking/tusken/tusken_bantha.py +++ b/scripts/mobiles/instances/tuskenking/tusken/tusken_bantha.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("heroic tusken") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_bantha_hue.iff') diff --git a/scripts/mobiles/instances/tuskenking/tusken/tusken_berserker.py b/scripts/mobiles/instances/tuskenking/tusken/tusken_berserker.py index ef1fa217..6c6e6b72 100644 --- a/scripts/mobiles/instances/tuskenking/tusken/tusken_berserker.py +++ b/scripts/mobiles/instances/tuskenking/tusken/tusken_berserker.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("heroic tusken") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_tusken_raider.iff') diff --git a/scripts/mobiles/instances/tuskenking/tusken/tusken_champion.py b/scripts/mobiles/instances/tuskenking/tusken/tusken_champion.py index 459763d5..e82dfa11 100644 --- a/scripts/mobiles/instances/tuskenking/tusken/tusken_champion.py +++ b/scripts/mobiles/instances/tuskenking/tusken/tusken_champion.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("heroic tusken") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_tusken_raider.iff') diff --git a/scripts/mobiles/instances/tuskenking/tusken/tusken_flesh_hunter.py b/scripts/mobiles/instances/tuskenking/tusken/tusken_flesh_hunter.py index 5379b2c0..d4937325 100644 --- a/scripts/mobiles/instances/tuskenking/tusken/tusken_flesh_hunter.py +++ b/scripts/mobiles/instances/tuskenking/tusken/tusken_flesh_hunter.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("heroic tusken") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_tusken_raider.iff') diff --git a/scripts/mobiles/instances/tuskenking/tusken/tusken_honor_guard.py b/scripts/mobiles/instances/tuskenking/tusken/tusken_honor_guard.py index b7a0c0a7..447af5fa 100644 --- a/scripts/mobiles/instances/tuskenking/tusken/tusken_honor_guard.py +++ b/scripts/mobiles/instances/tuskenking/tusken/tusken_honor_guard.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("heroic tusken") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_tusken_raider.iff') diff --git a/scripts/mobiles/instances/tuskenking/tusken/tusken_king.py b/scripts/mobiles/instances/tuskenking/tusken/tusken_king.py index e91f0a02..574e4b4d 100644 --- a/scripts/mobiles/instances/tuskenking/tusken/tusken_king.py +++ b/scripts/mobiles/instances/tuskenking/tusken/tusken_king.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("heroic tusken") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_tusken_king.iff') diff --git a/scripts/mobiles/instances/tuskenking/tusken/tusken_massiff.py b/scripts/mobiles/instances/tuskenking/tusken/tusken_massiff.py index 0ef970df..aea23dcd 100644 --- a/scripts/mobiles/instances/tuskenking/tusken/tusken_massiff.py +++ b/scripts/mobiles/instances/tuskenking/tusken/tusken_massiff.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("heroic tusken") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_tusken_massif.iff') diff --git a/scripts/mobiles/instances/tuskenking/tusken/tusken_pack_master.py b/scripts/mobiles/instances/tuskenking/tusken/tusken_pack_master.py index f129c290..17a5c506 100644 --- a/scripts/mobiles/instances/tuskenking/tusken/tusken_pack_master.py +++ b/scripts/mobiles/instances/tuskenking/tusken/tusken_pack_master.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("heroic tusken") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_tusken_raider.iff') diff --git a/scripts/mobiles/instances/tuskenking/tusken/tusken_raid_leader.py b/scripts/mobiles/instances/tuskenking/tusken/tusken_raid_leader.py index fabc8f4e..a53e333e 100644 --- a/scripts/mobiles/instances/tuskenking/tusken/tusken_raid_leader.py +++ b/scripts/mobiles/instances/tuskenking/tusken/tusken_raid_leader.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("heroic tusken") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_tusken_raider.iff') diff --git a/scripts/mobiles/instances/tuskenking/tusken/tusken_raider.py b/scripts/mobiles/instances/tuskenking/tusken/tusken_raider.py index 476b8d1f..e64b9eda 100644 --- a/scripts/mobiles/instances/tuskenking/tusken/tusken_raider.py +++ b/scripts/mobiles/instances/tuskenking/tusken/tusken_raider.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("heroic tusken") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_tusken_raider.iff') diff --git a/scripts/mobiles/instances/tuskenking/tusken/tusken_savage.py b/scripts/mobiles/instances/tuskenking/tusken/tusken_savage.py index 373709f1..404957a2 100644 --- a/scripts/mobiles/instances/tuskenking/tusken/tusken_savage.py +++ b/scripts/mobiles/instances/tuskenking/tusken/tusken_savage.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("heroic tusken") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_tusken_raider.iff') diff --git a/scripts/mobiles/instances/tuskenking/tusken/tusken_sniper.py b/scripts/mobiles/instances/tuskenking/tusken/tusken_sniper.py index e297c3fc..bbfa4280 100644 --- a/scripts/mobiles/instances/tuskenking/tusken/tusken_sniper.py +++ b/scripts/mobiles/instances/tuskenking/tusken/tusken_sniper.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("heroic tusken") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_tusken_raider.iff') diff --git a/scripts/mobiles/instances/tuskenking/tusken/tusken_warlord.py b/scripts/mobiles/instances/tuskenking/tusken/tusken_warlord.py index 650f554e..6ae7b894 100644 --- a/scripts/mobiles/instances/tuskenking/tusken/tusken_warlord.py +++ b/scripts/mobiles/instances/tuskenking/tusken/tusken_warlord.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("heroic tusken") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_tusken_raider.iff') diff --git a/scripts/mobiles/instances/tuskenking/tusken/tusken_warmaster.py b/scripts/mobiles/instances/tuskenking/tusken/tusken_warmaster.py index 00c33707..4d84200c 100644 --- a/scripts/mobiles/instances/tuskenking/tusken/tusken_warmaster.py +++ b/scripts/mobiles/instances/tuskenking/tusken/tusken_warmaster.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("heroic tusken") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_tusken_raider.iff') diff --git a/scripts/mobiles/instances/tuskenking/tusken/tusken_warrior.py b/scripts/mobiles/instances/tuskenking/tusken/tusken_warrior.py index 4f17321a..575587ce 100644 --- a/scripts/mobiles/instances/tuskenking/tusken/tusken_warrior.py +++ b/scripts/mobiles/instances/tuskenking/tusken/tusken_warrior.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("heroic tusken") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_tusken_raider.iff') diff --git a/scripts/mobiles/lok/aged_kimogila.py b/scripts/mobiles/lok/aged_kimogila.py index 6925d131..9ef90f74 100644 --- a/scripts/mobiles/lok/aged_kimogila.py +++ b/scripts/mobiles/lok/aged_kimogila.py @@ -27,7 +27,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("kimogila") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_kimogila_hue.iff') diff --git a/scripts/mobiles/mustafar/Blistmok_Shrieker.py b/scripts/mobiles/mustafar/Blistmok_Shrieker.py index dbdbee0a..dde07f2e 100644 --- a/scripts/mobiles/mustafar/Blistmok_Shrieker.py +++ b/scripts/mobiles/mustafar/Blistmok_Shrieker.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("blistmok") mobileTemplate.setAssistRange(24) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_blistmok.iff') diff --git a/scripts/mobiles/mustafar/Blistmok_Trampler.py b/scripts/mobiles/mustafar/Blistmok_Trampler.py index d6b438cf..3fc3b399 100644 --- a/scripts/mobiles/mustafar/Blistmok_Trampler.py +++ b/scripts/mobiles/mustafar/Blistmok_Trampler.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("blistmok") mobileTemplate.setAssistRange(24) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_blistmok.iff') diff --git a/scripts/mobiles/mustafar/ancient_jundak.py b/scripts/mobiles/mustafar/ancient_jundak.py index 8bd37d21..32f8640d 100644 --- a/scripts/mobiles/mustafar/ancient_jundak.py +++ b/scripts/mobiles/mustafar/ancient_jundak.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("jundak") mobileTemplate.setAssistRange(24) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_jundak.iff') diff --git a/scripts/mobiles/mustafar/ancient_tulrus.py b/scripts/mobiles/mustafar/ancient_tulrus.py index 92a5ec0e..ffe27e1a 100644 --- a/scripts/mobiles/mustafar/ancient_tulrus.py +++ b/scripts/mobiles/mustafar/ancient_tulrus.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("tulrus") mobileTemplate.setAssistRange(24) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_tulrus.iff') diff --git a/scripts/mobiles/mustafar/blistmok_crystal_stalker.py b/scripts/mobiles/mustafar/blistmok_crystal_stalker.py index f50cd57a..25ac74d2 100644 --- a/scripts/mobiles/mustafar/blistmok_crystal_stalker.py +++ b/scripts/mobiles/mustafar/blistmok_crystal_stalker.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("blistmok") mobileTemplate.setAssistRange(24) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_blistmok.iff') diff --git a/scripts/mobiles/mustafar/bloated_jundak.py b/scripts/mobiles/mustafar/bloated_jundak.py index 17b6ca6a..b0985824 100644 --- a/scripts/mobiles/mustafar/bloated_jundak.py +++ b/scripts/mobiles/mustafar/bloated_jundak.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("jundak") mobileTemplate.setAssistRange(24) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_jundak.iff') diff --git a/scripts/mobiles/naboo/aggrivated_kaadu_trampler.py b/scripts/mobiles/naboo/aggrivated_kaadu_trampler.py index e04f8a89..1b4fd330 100644 --- a/scripts/mobiles/naboo/aggrivated_kaadu_trampler.py +++ b/scripts/mobiles/naboo/aggrivated_kaadu_trampler.py @@ -27,7 +27,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("kaadu") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_kaadu.iff') diff --git a/scripts/mobiles/naboo/hermit_spider.py b/scripts/mobiles/naboo/hermit_spider.py index 2c0cd75f..6a31e976 100644 --- a/scripts/mobiles/naboo/hermit_spider.py +++ b/scripts/mobiles/naboo/hermit_spider.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("hermit spider") mobileTemplate.setAssistRange(0) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_hermit_spider.iff') 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..12d8213e --- /dev/null +++ b/scripts/mobiles/pets/pet_gurreck.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('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) + + mobileTemplate.setPCDTemplate('object/intangible/pet/shared_gurreck_hue.iff') + core.spawnService.addMobileTemplate('pet_gurreck', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/pets/pet_merek.py b/scripts/mobiles/pets/pet_merek.py new file mode 100644 index 00000000..6b0bfe58 --- /dev/null +++ b/scripts/mobiles/pets/pet_merek.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_merek') + 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_merek.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_merek', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/rori/blood_thirsty_borgle.py b/scripts/mobiles/rori/blood_thirsty_borgle.py index d04b18b6..6b2dcc31 100644 --- a/scripts/mobiles/rori/blood_thirsty_borgle.py +++ b/scripts/mobiles/rori/blood_thirsty_borgle.py @@ -29,7 +29,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("borgle") mobileTemplate.setAssistRange(0) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_borgle.iff') diff --git a/scripts/mobiles/rori/borgle_matriarch.py b/scripts/mobiles/rori/borgle_matriarch.py index 22c36ba5..8102d756 100644 --- a/scripts/mobiles/rori/borgle_matriarch.py +++ b/scripts/mobiles/rori/borgle_matriarch.py @@ -29,7 +29,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("borgle") mobileTemplate.setAssistRange(0) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_borgle.iff') diff --git a/scripts/mobiles/rori/emperors_hand.py b/scripts/mobiles/rori/emperors_hand.py index b032e89b..a3946f51 100644 --- a/scripts/mobiles/rori/emperors_hand.py +++ b/scripts/mobiles/rori/emperors_hand.py @@ -20,7 +20,7 @@ def addTemplate(core): mobileTemplate.setScale(1) mobileTemplate.setAssistRange(0) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() diff --git a/scripts/mobiles/spawnareas/dantooine_mining_mixed.py b/scripts/mobiles/spawnareas/dantooine_mining_mixed.py index 7fd81cad..1d0849db 100644 --- a/scripts/mobiles/spawnareas/dantooine_mining_mixed.py +++ b/scripts/mobiles/spawnareas/dantooine_mining_mixed.py @@ -6,6 +6,5 @@ def addSpawnArea(core): mixedGroups = Vector() mixedGroups.add('piket_plains_walker_group') mixedGroups.add('mixed_lair_group_1') - mixedGroups.add('naboo_starter') core.spawnService.addMixedSpawnArea(mixedGroups, 0, 2355, 1024, 'dantooine') return diff --git a/scripts/mobiles/talus/aakuan_champion.py b/scripts/mobiles/talus/aakuan_champion.py index 48200653..e95ef076 100644 --- a/scripts/mobiles/talus/aakuan_champion.py +++ b/scripts/mobiles/talus/aakuan_champion.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("aakuans") mobileTemplate.setAssistRange(0) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_aakuan_champion_zabrak_male_01.iff') diff --git a/scripts/mobiles/talus/aakuan_defender.py b/scripts/mobiles/talus/aakuan_defender.py index b3816955..c2edcf0c 100644 --- a/scripts/mobiles/talus/aakuan_defender.py +++ b/scripts/mobiles/talus/aakuan_defender.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("aakuans") mobileTemplate.setAssistRange(0) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_aakuan_defender_human_male_01.iff') diff --git a/scripts/mobiles/talus/aakuan_guardian.py b/scripts/mobiles/talus/aakuan_guardian.py index 2ae4b6d6..061b5db9 100644 --- a/scripts/mobiles/talus/aakuan_guardian.py +++ b/scripts/mobiles/talus/aakuan_guardian.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("aakuans") mobileTemplate.setAssistRange(0) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_aakuan_guardian_trandoshan_male_01.iff') diff --git a/scripts/mobiles/talus/aakuan_keeper.py b/scripts/mobiles/talus/aakuan_keeper.py index a3d2fe84..edeeaf63 100644 --- a/scripts/mobiles/talus/aakuan_keeper.py +++ b/scripts/mobiles/talus/aakuan_keeper.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("aakuans") mobileTemplate.setAssistRange(0) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_aakuan_keeper_zabrak_male_01.iff') diff --git a/scripts/mobiles/talus/aakuan_sentinal.py b/scripts/mobiles/talus/aakuan_sentinal.py index 193d4781..b079d768 100644 --- a/scripts/mobiles/talus/aakuan_sentinal.py +++ b/scripts/mobiles/talus/aakuan_sentinal.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("aakuans") mobileTemplate.setAssistRange(0) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_aakuan_sentinal_rodian_male_01.iff') diff --git a/scripts/mobiles/talus/aakuan_steward.py b/scripts/mobiles/talus/aakuan_steward.py index d71c56f8..3d0762a2 100644 --- a/scripts/mobiles/talus/aakuan_steward.py +++ b/scripts/mobiles/talus/aakuan_steward.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("aakuans") mobileTemplate.setAssistRange(0) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_aakuan_steward_human_male_01.iff') diff --git a/scripts/mobiles/talus/aakuan_warder.py b/scripts/mobiles/talus/aakuan_warder.py index f9374eee..bdf8a19f 100644 --- a/scripts/mobiles/talus/aakuan_warder.py +++ b/scripts/mobiles/talus/aakuan_warder.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("aakuans") mobileTemplate.setAssistRange(0) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_aakuan_warder_zabrak_male_01.iff') diff --git a/scripts/mobiles/talus/binayre_chief.py b/scripts/mobiles/talus/binayre_chief.py index dcf1d117..4f301664 100644 --- a/scripts/mobiles/talus/binayre_chief.py +++ b/scripts/mobiles/talus/binayre_chief.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("binayre") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_binayre_chief_human_male_01.iff') diff --git a/scripts/mobiles/talus/binayre_hooligan.py b/scripts/mobiles/talus/binayre_hooligan.py index 0868c182..96424761 100644 --- a/scripts/mobiles/talus/binayre_hooligan.py +++ b/scripts/mobiles/talus/binayre_hooligan.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("binayre") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_binayre_hooligan_zabrak_male_01.iff') diff --git a/scripts/mobiles/talus/binayre_pirate.py b/scripts/mobiles/talus/binayre_pirate.py index 8b56a00b..d0d199f1 100644 --- a/scripts/mobiles/talus/binayre_pirate.py +++ b/scripts/mobiles/talus/binayre_pirate.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("binayre") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_binayre_pirate_zabrak_male_01.iff') diff --git a/scripts/mobiles/talus/binayre_ruffian.py b/scripts/mobiles/talus/binayre_ruffian.py index d936af83..9861fc2c 100644 --- a/scripts/mobiles/talus/binayre_ruffian.py +++ b/scripts/mobiles/talus/binayre_ruffian.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("binayre") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_binayre_ruffian_trandoshan_male_01.iff') diff --git a/scripts/mobiles/talus/binayre_scalawag.py b/scripts/mobiles/talus/binayre_scalawag.py index b728e021..9556b412 100644 --- a/scripts/mobiles/talus/binayre_scalawag.py +++ b/scripts/mobiles/talus/binayre_scalawag.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("binayre") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_binayre_scalawag_twk_male_01.iff') diff --git a/scripts/mobiles/talus/binayre_smuggler.py b/scripts/mobiles/talus/binayre_smuggler.py index 06eae273..393859d1 100644 --- a/scripts/mobiles/talus/binayre_smuggler.py +++ b/scripts/mobiles/talus/binayre_smuggler.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("binayre") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_binayre_smuggler_trandoshan_male_01.iff') diff --git a/scripts/mobiles/talus/brood_i_arachne.py b/scripts/mobiles/talus/brood_i_arachne.py index a8148107..3067bffb 100644 --- a/scripts/mobiles/talus/brood_i_arachne.py +++ b/scripts/mobiles/talus/brood_i_arachne.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("brood arachne") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_angler.iff') diff --git a/scripts/mobiles/talus/brood_i_aurek_arachne.py b/scripts/mobiles/talus/brood_i_aurek_arachne.py index f92bf600..831bb324 100644 --- a/scripts/mobiles/talus/brood_i_aurek_arachne.py +++ b/scripts/mobiles/talus/brood_i_aurek_arachne.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("brood arachne") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_gaping_spider.iff') diff --git a/scripts/mobiles/talus/brood_ii_arachne.py b/scripts/mobiles/talus/brood_ii_arachne.py index bc827721..f025ba23 100644 --- a/scripts/mobiles/talus/brood_ii_arachne.py +++ b/scripts/mobiles/talus/brood_ii_arachne.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("brood arachne") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_angler.iff') diff --git a/scripts/mobiles/talus/brood_ii_aurek_arachne.py b/scripts/mobiles/talus/brood_ii_aurek_arachne.py index cc82f344..a00e67fd 100644 --- a/scripts/mobiles/talus/brood_ii_aurek_arachne.py +++ b/scripts/mobiles/talus/brood_ii_aurek_arachne.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("brood arachne") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_gaping_spider.iff') diff --git a/scripts/mobiles/talus/brood_v_arachne.py b/scripts/mobiles/talus/brood_v_arachne.py index c43e090d..36bf709e 100644 --- a/scripts/mobiles/talus/brood_v_arachne.py +++ b/scripts/mobiles/talus/brood_v_arachne.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("brood arachne") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_razor_angler_hue.iff') diff --git a/scripts/mobiles/talus/brood_v_aurek_arachne.py b/scripts/mobiles/talus/brood_v_aurek_arachne.py index 54bc8427..bb484558 100644 --- a/scripts/mobiles/talus/brood_v_aurek_arachne.py +++ b/scripts/mobiles/talus/brood_v_aurek_arachne.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("brood arachne") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_bane_back_spider.iff') diff --git a/scripts/mobiles/talus/brood_x_arachne.py b/scripts/mobiles/talus/brood_x_arachne.py index b4f84f2b..e999af9e 100644 --- a/scripts/mobiles/talus/brood_x_arachne.py +++ b/scripts/mobiles/talus/brood_x_arachne.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("brood arachne") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_razor_angler_hue.iff') diff --git a/scripts/mobiles/talus/brood_x_aurek_arachne.py b/scripts/mobiles/talus/brood_x_aurek_arachne.py index 736f77bd..5723a03d 100644 --- a/scripts/mobiles/talus/brood_x_aurek_arachne.py +++ b/scripts/mobiles/talus/brood_x_aurek_arachne.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("brood arachne") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_bane_back_spider_hue.iff') diff --git a/scripts/mobiles/talus/claw_bodyguard.py b/scripts/mobiles/talus/claw_bodyguard.py index 99a44343..9ac66d03 100644 --- a/scripts/mobiles/talus/claw_bodyguard.py +++ b/scripts/mobiles/talus/claw_bodyguard.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("clone relics claw") mobileTemplate.setAssistRange(0) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_ep3_clone_relics_claw_bodyguard_02.iff') diff --git a/scripts/mobiles/talus/claw_bodyguard_01.py b/scripts/mobiles/talus/claw_bodyguard_01.py index d1f175fe..b07c505d 100644 --- a/scripts/mobiles/talus/claw_bodyguard_01.py +++ b/scripts/mobiles/talus/claw_bodyguard_01.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("clone relics claw") mobileTemplate.setAssistRange(0) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_ep3_clone_relics_claw_bodyguard_02.iff') diff --git a/scripts/mobiles/talus/crazed_roba.py b/scripts/mobiles/talus/crazed_roba.py index 38b7b7a8..5e7dac41 100644 --- a/scripts/mobiles/talus/crazed_roba.py +++ b/scripts/mobiles/talus/crazed_roba.py @@ -26,7 +26,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("self") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_roba.iff') diff --git a/scripts/mobiles/talus/doak_sif.py b/scripts/mobiles/talus/doak_sif.py index b943bbef..608ffc52 100644 --- a/scripts/mobiles/talus/doak_sif.py +++ b/scripts/mobiles/talus/doak_sif.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("sif") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_doak_sif.iff') diff --git a/scripts/mobiles/talus/erran_sif.py b/scripts/mobiles/talus/erran_sif.py index d9cc450c..3995651b 100644 --- a/scripts/mobiles/talus/erran_sif.py +++ b/scripts/mobiles/talus/erran_sif.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("sif") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_erran_sif.iff') diff --git a/scripts/mobiles/talus/ferine_razorfang.py b/scripts/mobiles/talus/ferine_razorfang.py index b273475a..958515da 100644 --- a/scripts/mobiles/talus/ferine_razorfang.py +++ b/scripts/mobiles/talus/ferine_razorfang.py @@ -27,7 +27,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("kima") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_kima.iff') diff --git a/scripts/mobiles/talus/festering_dung_mite_queen.py b/scripts/mobiles/talus/festering_dung_mite_queen.py index 9e6f1e4a..c1e9fd9c 100644 --- a/scripts/mobiles/talus/festering_dung_mite_queen.py +++ b/scripts/mobiles/talus/festering_dung_mite_queen.py @@ -22,7 +22,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("decay mite") mobileTemplate.setAssistRange(4) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_bark_mite_hue.iff') diff --git a/scripts/mobiles/talus/foaming_vynock.py b/scripts/mobiles/talus/foaming_vynock.py index e1a50098..ebd3e036 100644 --- a/scripts/mobiles/talus/foaming_vynock.py +++ b/scripts/mobiles/talus/foaming_vynock.py @@ -26,7 +26,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("self") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_vynock.iff') diff --git a/scripts/mobiles/talus/genetically_enhanced_kahmurra.py b/scripts/mobiles/talus/genetically_enhanced_kahmurra.py index daa5679f..aa76a919 100644 --- a/scripts/mobiles/talus/genetically_enhanced_kahmurra.py +++ b/scripts/mobiles/talus/genetically_enhanced_kahmurra.py @@ -27,7 +27,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("kahmurra") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_kahmurra.iff') diff --git a/scripts/mobiles/talus/giant_decay_mite_queen.py b/scripts/mobiles/talus/giant_decay_mite_queen.py index f6245362..ad64cdf0 100644 --- a/scripts/mobiles/talus/giant_decay_mite_queen.py +++ b/scripts/mobiles/talus/giant_decay_mite_queen.py @@ -23,7 +23,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("decay mite") mobileTemplate.setAssistRange(4) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_bark_mite_hue.iff') diff --git a/scripts/mobiles/talus/giant_decay_mite_sentry.py b/scripts/mobiles/talus/giant_decay_mite_sentry.py index 50b6ddb5..6f5c9c55 100644 --- a/scripts/mobiles/talus/giant_decay_mite_sentry.py +++ b/scripts/mobiles/talus/giant_decay_mite_sentry.py @@ -23,7 +23,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("decay mite") mobileTemplate.setAssistRange(4) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_bark_mite_hue.iff') diff --git a/scripts/mobiles/talus/giant_decay_mite_soldier.py b/scripts/mobiles/talus/giant_decay_mite_soldier.py index 8e9b9210..f5ea3b12 100644 --- a/scripts/mobiles/talus/giant_decay_mite_soldier.py +++ b/scripts/mobiles/talus/giant_decay_mite_soldier.py @@ -23,7 +23,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("decay mite") mobileTemplate.setAssistRange(4) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_bark_mite_hue.iff') diff --git a/scripts/mobiles/talus/giant_fynock.py b/scripts/mobiles/talus/giant_fynock.py index ef054ce6..6f39dba1 100644 --- a/scripts/mobiles/talus/giant_fynock.py +++ b/scripts/mobiles/talus/giant_fynock.py @@ -27,7 +27,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("fynock") mobileTemplate.setAssistRange(0) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_fynock_hue.iff') diff --git a/scripts/mobiles/talus/glutted_fynock_queen.py b/scripts/mobiles/talus/glutted_fynock_queen.py index 688616a4..2568d7e8 100644 --- a/scripts/mobiles/talus/glutted_fynock_queen.py +++ b/scripts/mobiles/talus/glutted_fynock_queen.py @@ -27,7 +27,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("fynock") mobileTemplate.setAssistRange(4) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_fynock_hue.iff') diff --git a/scripts/mobiles/talus/greater_sludge_panther.py b/scripts/mobiles/talus/greater_sludge_panther.py index 2377e035..5bceea49 100644 --- a/scripts/mobiles/talus/greater_sludge_panther.py +++ b/scripts/mobiles/talus/greater_sludge_panther.py @@ -26,7 +26,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("sludge panther") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_sludge_panther.iff') diff --git a/scripts/mobiles/talus/guf_drolg.py b/scripts/mobiles/talus/guf_drolg.py index 201de206..bb281bf4 100644 --- a/scripts/mobiles/talus/guf_drolg.py +++ b/scripts/mobiles/talus/guf_drolg.py @@ -29,7 +29,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("guf drolg") mobileTemplate.setAssistRange(0) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_guf_drolg.iff') diff --git a/scripts/mobiles/talus/hirsch_sif.py b/scripts/mobiles/talus/hirsch_sif.py index f035badf..083f1523 100644 --- a/scripts/mobiles/talus/hirsch_sif.py +++ b/scripts/mobiles/talus/hirsch_sif.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("sif") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) mobileTemplate.setOptionsBitmask(128) templates = Vector() diff --git a/scripts/mobiles/talus/huf_dun_bull.py b/scripts/mobiles/talus/huf_dun_bull.py index f91c9e1f..a18b48cf 100644 --- a/scripts/mobiles/talus/huf_dun_bull.py +++ b/scripts/mobiles/talus/huf_dun_bull.py @@ -27,7 +27,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("huf dun") mobileTemplate.setAssistRange(0) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_huf_dun.iff') diff --git a/scripts/mobiles/talus/hunter_talus.py b/scripts/mobiles/talus/hunter_talus.py index 33170621..e8518a51 100644 --- a/scripts/mobiles/talus/hunter_talus.py +++ b/scripts/mobiles/talus/hunter_talus.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("talus poachers") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_forest_hunter.iff') diff --git a/scripts/mobiles/talus/jungle_fynock.py b/scripts/mobiles/talus/jungle_fynock.py index ad46a96d..1bb0c15b 100644 --- a/scripts/mobiles/talus/jungle_fynock.py +++ b/scripts/mobiles/talus/jungle_fynock.py @@ -27,7 +27,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("fynock") mobileTemplate.setAssistRange(0) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_fynock.iff') diff --git a/scripts/mobiles/talus/kahmurra_blanca.py b/scripts/mobiles/talus/kahmurra_blanca.py index 4079bc1d..c3159bd2 100644 --- a/scripts/mobiles/talus/kahmurra_blanca.py +++ b/scripts/mobiles/talus/kahmurra_blanca.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("kahmurra") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_kahmurra.iff') diff --git a/scripts/mobiles/talus/lost_aqualish_bomber.py b/scripts/mobiles/talus/lost_aqualish_bomber.py index b329d0e4..00582237 100644 --- a/scripts/mobiles/talus/lost_aqualish_bomber.py +++ b/scripts/mobiles/talus/lost_aqualish_bomber.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("lost aqualish") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_lost_aqualish_bomber_male_01.iff') diff --git a/scripts/mobiles/talus/lost_aqualish_captain.py b/scripts/mobiles/talus/lost_aqualish_captain.py index 30a90b6b..3b1249b7 100644 --- a/scripts/mobiles/talus/lost_aqualish_captain.py +++ b/scripts/mobiles/talus/lost_aqualish_captain.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("lost aqualish") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_lost_aqualish_captain_male_01.iff') diff --git a/scripts/mobiles/talus/lost_aqualish_commando.py b/scripts/mobiles/talus/lost_aqualish_commando.py index 94dceaf1..f7f1723e 100644 --- a/scripts/mobiles/talus/lost_aqualish_commando.py +++ b/scripts/mobiles/talus/lost_aqualish_commando.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("lost aqualish") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_lost_aqualish_commando_male_01.iff') diff --git a/scripts/mobiles/talus/lost_aqualish_infiltrator.py b/scripts/mobiles/talus/lost_aqualish_infiltrator.py index 40238c0a..2a55f70c 100644 --- a/scripts/mobiles/talus/lost_aqualish_infiltrator.py +++ b/scripts/mobiles/talus/lost_aqualish_infiltrator.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("lost aqualish") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_lost_aqualish_infiltrator_male_01.iff') diff --git a/scripts/mobiles/talus/lost_aqualish_lookout.py b/scripts/mobiles/talus/lost_aqualish_lookout.py index 27cd769b..b68eb2af 100644 --- a/scripts/mobiles/talus/lost_aqualish_lookout.py +++ b/scripts/mobiles/talus/lost_aqualish_lookout.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("lost aqualish") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_lost_aqualish_lookout_male_01.iff') diff --git a/scripts/mobiles/talus/lost_aqualish_marksman.py b/scripts/mobiles/talus/lost_aqualish_marksman.py index 8acf8895..c3b26d84 100644 --- a/scripts/mobiles/talus/lost_aqualish_marksman.py +++ b/scripts/mobiles/talus/lost_aqualish_marksman.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("lost aqualish") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_lost_aqualish_marksman_male_01.iff') diff --git a/scripts/mobiles/talus/lost_aqualish_marshal.py b/scripts/mobiles/talus/lost_aqualish_marshal.py index 244764c5..f8e01543 100644 --- a/scripts/mobiles/talus/lost_aqualish_marshal.py +++ b/scripts/mobiles/talus/lost_aqualish_marshal.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("lost aqualish") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_lost_aqualish_marshal_male_01.iff') diff --git a/scripts/mobiles/talus/lost_aqualish_outrider.py b/scripts/mobiles/talus/lost_aqualish_outrider.py index eb35b1d1..8638ec9a 100644 --- a/scripts/mobiles/talus/lost_aqualish_outrider.py +++ b/scripts/mobiles/talus/lost_aqualish_outrider.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("lost aqualish") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_lost_aqualish_outrider_male_01.iff') diff --git a/scripts/mobiles/talus/lost_aqualish_scout.py b/scripts/mobiles/talus/lost_aqualish_scout.py index a4189d9f..0c681c05 100644 --- a/scripts/mobiles/talus/lost_aqualish_scout.py +++ b/scripts/mobiles/talus/lost_aqualish_scout.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("lost aqualish") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_lost_aqualish_scout_male_01.iff') diff --git a/scripts/mobiles/talus/lost_aqualish_soldier.py b/scripts/mobiles/talus/lost_aqualish_soldier.py index e23f1a7c..87699877 100644 --- a/scripts/mobiles/talus/lost_aqualish_soldier.py +++ b/scripts/mobiles/talus/lost_aqualish_soldier.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("lost aqualish") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_lost_aqualish_soldier_male_01.iff') diff --git a/scripts/mobiles/talus/lost_aqualish_warchief.py b/scripts/mobiles/talus/lost_aqualish_warchief.py index b8d03103..8b036bb1 100644 --- a/scripts/mobiles/talus/lost_aqualish_warchief.py +++ b/scripts/mobiles/talus/lost_aqualish_warchief.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("lost aqualish") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_lost_aqualish_warchief_male_01.iff') diff --git a/scripts/mobiles/talus/lost_aqualish_warrior.py b/scripts/mobiles/talus/lost_aqualish_warrior.py index efb21dc0..1cf2b5c4 100644 --- a/scripts/mobiles/talus/lost_aqualish_warrior.py +++ b/scripts/mobiles/talus/lost_aqualish_warrior.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("lost aqualish") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_lost_aqualish_warrior_male_01.iff') diff --git a/scripts/mobiles/talus/minor_sludge_panther.py b/scripts/mobiles/talus/minor_sludge_panther.py index c890b117..8cce84f8 100644 --- a/scripts/mobiles/talus/minor_sludge_panther.py +++ b/scripts/mobiles/talus/minor_sludge_panther.py @@ -27,7 +27,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("sludge panther") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_sludge_panther.iff') diff --git a/scripts/mobiles/talus/mire_marauder.py b/scripts/mobiles/talus/mire_marauder.py index e304c40a..7c0fd7b1 100644 --- a/scripts/mobiles/talus/mire_marauder.py +++ b/scripts/mobiles/talus/mire_marauder.py @@ -27,7 +27,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("sludge panther") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_sludge_panther_hue.iff') diff --git a/scripts/mobiles/talus/mutated_kahmurra.py b/scripts/mobiles/talus/mutated_kahmurra.py index c29d8531..ebf8b18e 100644 --- a/scripts/mobiles/talus/mutated_kahmurra.py +++ b/scripts/mobiles/talus/mutated_kahmurra.py @@ -27,7 +27,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("kahmurra") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_kahmurra.iff') diff --git a/scripts/mobiles/talus/oozing_dung_mite_guardian.py b/scripts/mobiles/talus/oozing_dung_mite_guardian.py index d14a4345..73dd92cd 100644 --- a/scripts/mobiles/talus/oozing_dung_mite_guardian.py +++ b/scripts/mobiles/talus/oozing_dung_mite_guardian.py @@ -23,7 +23,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("decay mite") mobileTemplate.setAssistRange(4) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_bark_mite_hue.iff') diff --git a/scripts/mobiles/talus/painted_spat.py b/scripts/mobiles/talus/painted_spat.py index af22b631..dd6ded80 100644 --- a/scripts/mobiles/talus/painted_spat.py +++ b/scripts/mobiles/talus/painted_spat.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("carrion spat") mobileTemplate.setAssistRange(0) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_carrion_spat_hue.iff') diff --git a/scripts/mobiles/talus/poacher_talus.py b/scripts/mobiles/talus/poacher_talus.py index e0610672..6d1d2b68 100644 --- a/scripts/mobiles/talus/poacher_talus.py +++ b/scripts/mobiles/talus/poacher_talus.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("talus poachers") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_forest_hunter.iff') diff --git a/scripts/mobiles/talus/rabid_mutant_kahmurra.py b/scripts/mobiles/talus/rabid_mutant_kahmurra.py index f52b1256..90ffde74 100644 --- a/scripts/mobiles/talus/rabid_mutant_kahmurra.py +++ b/scripts/mobiles/talus/rabid_mutant_kahmurra.py @@ -27,7 +27,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("kahmurra") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_kahmurra.iff') diff --git a/scripts/mobiles/talus/ravenous_rasp.py b/scripts/mobiles/talus/ravenous_rasp.py index 3e72d181..20d49e92 100644 --- a/scripts/mobiles/talus/ravenous_rasp.py +++ b/scripts/mobiles/talus/ravenous_rasp.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("voracious rasp") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_horned_rasp_hue.iff') diff --git a/scripts/mobiles/talus/savage_guf_drolg.py b/scripts/mobiles/talus/savage_guf_drolg.py index 96e1a060..c122704d 100644 --- a/scripts/mobiles/talus/savage_guf_drolg.py +++ b/scripts/mobiles/talus/savage_guf_drolg.py @@ -27,7 +27,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("guf drolg") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_guf_drolg.iff') diff --git a/scripts/mobiles/talus/sludge_panther.py b/scripts/mobiles/talus/sludge_panther.py index b846deab..2383a78c 100644 --- a/scripts/mobiles/talus/sludge_panther.py +++ b/scripts/mobiles/talus/sludge_panther.py @@ -26,7 +26,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("sludge panther") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_sludge_panther.iff') diff --git a/scripts/mobiles/talus/vicious_huf_dun.py b/scripts/mobiles/talus/vicious_huf_dun.py index 6e8ac39b..701ff06b 100644 --- a/scripts/mobiles/talus/vicious_huf_dun.py +++ b/scripts/mobiles/talus/vicious_huf_dun.py @@ -27,7 +27,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("huf dun") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_huf_dun.iff') diff --git a/scripts/mobiles/talus/voracious_rasp.py b/scripts/mobiles/talus/voracious_rasp.py index 57a62f81..48df7b2a 100644 --- a/scripts/mobiles/talus/voracious_rasp.py +++ b/scripts/mobiles/talus/voracious_rasp.py @@ -24,7 +24,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("voracious rasp") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_horned_rasp_hue.iff') diff --git a/scripts/mobiles/talus/wolf_kima.py b/scripts/mobiles/talus/wolf_kima.py index d436c84f..7ef67e9c 100644 --- a/scripts/mobiles/talus/wolf_kima.py +++ b/scripts/mobiles/talus/wolf_kima.py @@ -27,7 +27,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("kima") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_kima.iff') diff --git a/scripts/mobiles/tatooine/adolescent_krayt_dragon.py b/scripts/mobiles/tatooine/adolescent_krayt_dragon.py index 15b18f2c..33996719 100644 --- a/scripts/mobiles/tatooine/adolescent_krayt_dragon.py +++ b/scripts/mobiles/tatooine/adolescent_krayt_dragon.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('krayt_dragon_adolescent') mobileTemplate.setLevel(84) - mobileTemplate.setMinLevel(80) - mobileTemplate.setMaxLevel(84) mobileTemplate.setDifficulty(Difficulty.BOSS) mobileTemplate.setMinSpawnDistance(4) @@ -29,7 +27,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("krayt dragon") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() diff --git a/scripts/mobiles/tatooine/alkhara_bandit.py b/scripts/mobiles/tatooine/alkhara_bandit.py index bf9b76b9..914326b8 100644 --- a/scripts/mobiles/tatooine/alkhara_bandit.py +++ b/scripts/mobiles/tatooine/alkhara_bandit.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('alkhara_bandit') mobileTemplate.setLevel(15) - mobileTemplate.setMinLevel(14) - mobileTemplate.setMaxLevel(16) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) @@ -23,6 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("alkhara") mobileTemplate.setAssistRange(4) mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() diff --git a/scripts/mobiles/tatooine/armodragon.py b/scripts/mobiles/tatooine/armodragon.py index d143a628..d3063adf 100644 --- a/scripts/mobiles/tatooine/armodragon.py +++ b/scripts/mobiles/tatooine/armodragon.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('dragonet_armodragon') mobileTemplate.setLevel(25) - mobileTemplate.setMinLevel(25) - mobileTemplate.setMaxLevel(27) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/bantha.py b/scripts/mobiles/tatooine/bantha.py index 6ea6ba97..2b0dd9f0 100644 --- a/scripts/mobiles/tatooine/bantha.py +++ b/scripts/mobiles/tatooine/bantha.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('bantha') mobileTemplate.setLevel(14) - mobileTemplate.setMinLevel(14) - mobileTemplate.setMaxLevel(15) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/bantha_low.py b/scripts/mobiles/tatooine/bantha_low.py index c23fe3a4..f62fb1b2 100644 --- a/scripts/mobiles/tatooine/bantha_low.py +++ b/scripts/mobiles/tatooine/bantha_low.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('bantha') mobileTemplate.setLevel(8) - mobileTemplate.setMinLevel(8) - mobileTemplate.setMaxLevel(10) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/bantha_matriarch.py b/scripts/mobiles/tatooine/bantha_matriarch.py index 2fc7aacd..41cf643c 100644 --- a/scripts/mobiles/tatooine/bantha_matriarch.py +++ b/scripts/mobiles/tatooine/bantha_matriarch.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('matriarch_bantha') mobileTemplate.setLevel(15) - mobileTemplate.setMinLevel(15) - mobileTemplate.setMaxLevel(17) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/blight_boar.py b/scripts/mobiles/tatooine/blight_boar.py index 3e24ff37..e76eaff7 100644 --- a/scripts/mobiles/tatooine/blight_boar.py +++ b/scripts/mobiles/tatooine/blight_boar.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('zucca_boar_blight') mobileTemplate.setLevel(9) - mobileTemplate.setMinLevel(9) - mobileTemplate.setMaxLevel(10) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/bocatt.py b/scripts/mobiles/tatooine/bocatt.py index 160b4daf..c54dfc39 100644 --- a/scripts/mobiles/tatooine/bocatt.py +++ b/scripts/mobiles/tatooine/bocatt.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('bocatt') mobileTemplate.setLevel(17) - mobileTemplate.setMinLevel(17) - mobileTemplate.setMaxLevel(18) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) @@ -29,7 +27,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("bocatt") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_bocatt.iff') diff --git a/scripts/mobiles/tatooine/bonecracker_bantha.py b/scripts/mobiles/tatooine/bonecracker_bantha.py index df12423c..df78a383 100644 --- a/scripts/mobiles/tatooine/bonecracker_bantha.py +++ b/scripts/mobiles/tatooine/bonecracker_bantha.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('bantha_bonecracker') mobileTemplate.setLevel(21) - mobileTemplate.setMinLevel(21) - mobileTemplate.setMaxLevel(22) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/brok_ziamzun.py b/scripts/mobiles/tatooine/brok_ziamzun.py index 99b6b6fb..0b0def52 100644 --- a/scripts/mobiles/tatooine/brok_ziamzun.py +++ b/scripts/mobiles/tatooine/brok_ziamzun.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("whitethranta") mobileTemplate.setAssistRange(3) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() diff --git a/scripts/mobiles/tatooine/bull_bantha.py b/scripts/mobiles/tatooine/bull_bantha.py index 8659f273..fa028dc4 100644 --- a/scripts/mobiles/tatooine/bull_bantha.py +++ b/scripts/mobiles/tatooine/bull_bantha.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('bull_bantha') mobileTemplate.setLevel(15) - mobileTemplate.setMinLevel(15) - mobileTemplate.setMaxLevel(17) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/bull_ronto.py b/scripts/mobiles/tatooine/bull_ronto.py index 2985b458..20c65f67 100644 --- a/scripts/mobiles/tatooine/bull_ronto.py +++ b/scripts/mobiles/tatooine/bull_ronto.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('ronto_male') mobileTemplate.setLevel(18) - mobileTemplate.setMinLevel(18) - mobileTemplate.setMaxLevel(19) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) @@ -29,7 +27,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("ronto") mobileTemplate.setAssistRange(0) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_ronto.iff') diff --git a/scripts/mobiles/tatooine/cannibal_dewback.py b/scripts/mobiles/tatooine/cannibal_dewback.py index 0ff41d6d..122fb026 100644 --- a/scripts/mobiles/tatooine/cannibal_dewback.py +++ b/scripts/mobiles/tatooine/cannibal_dewback.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('dewback_cannibal') mobileTemplate.setLevel(13) - mobileTemplate.setMinLevel(13) - mobileTemplate.setMaxLevel(14) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) @@ -29,7 +27,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("dewback cannibal") mobileTemplate.setAssistRange(10) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dewback.iff') diff --git a/scripts/mobiles/tatooine/canyon_krayt_dragon.py b/scripts/mobiles/tatooine/canyon_krayt_dragon.py index 57a09c4e..b307e4cc 100644 --- a/scripts/mobiles/tatooine/canyon_krayt_dragon.py +++ b/scripts/mobiles/tatooine/canyon_krayt_dragon.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('canyon_krayt_dragon') mobileTemplate.setLevel(85) - mobileTemplate.setMinLevel(80) - mobileTemplate.setMaxLevel(86) mobileTemplate.setDifficulty(Difficulty.BOSS) mobileTemplate.setMinSpawnDistance(4) @@ -29,7 +27,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("krayt dragon") mobileTemplate.setAssistRange(36) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_canyon_krayt_dragon.iff') diff --git a/scripts/mobiles/tatooine/carion_kreetle.py b/scripts/mobiles/tatooine/carion_kreetle.py index fc0049db..1529623d 100644 --- a/scripts/mobiles/tatooine/carion_kreetle.py +++ b/scripts/mobiles/tatooine/carion_kreetle.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('fragile_kreetle') mobileTemplate.setLevel(2) - mobileTemplate.setMinLevel(2) - mobileTemplate.setMaxLevel(7) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/cave_beetle.py b/scripts/mobiles/tatooine/cave_beetle.py index 4d6f3cae..aa1e9047 100644 --- a/scripts/mobiles/tatooine/cave_beetle.py +++ b/scripts/mobiles/tatooine/cave_beetle.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('cave_beetle') mobileTemplate.setLevel(20) - mobileTemplate.setMinLevel(20) - mobileTemplate.setMaxLevel(21) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/cave_beetle2.py b/scripts/mobiles/tatooine/cave_beetle2.py index cb369419..abdd2c4b 100644 --- a/scripts/mobiles/tatooine/cave_beetle2.py +++ b/scripts/mobiles/tatooine/cave_beetle2.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('cave_beetle') mobileTemplate.setLevel(20) - mobileTemplate.setMinLevel(20) - mobileTemplate.setMaxLevel(22) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/city_rockmite.py b/scripts/mobiles/tatooine/city_rockmite.py index bbbe5af7..dee920a5 100644 --- a/scripts/mobiles/tatooine/city_rockmite.py +++ b/scripts/mobiles/tatooine/city_rockmite.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('city_rockmite') mobileTemplate.setLevel(5) - mobileTemplate.setMinLevel(5) - mobileTemplate.setMaxLevel(7) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/city_sewer_swamprat.py b/scripts/mobiles/tatooine/city_sewer_swamprat.py index 0a9d5d2c..ead488c8 100644 --- a/scripts/mobiles/tatooine/city_sewer_swamprat.py +++ b/scripts/mobiles/tatooine/city_sewer_swamprat.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('city_sewer_swamprat') mobileTemplate.setLevel(3) - mobileTemplate.setMinLevel(3) - mobileTemplate.setMaxLevel(5) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/cupa.py b/scripts/mobiles/tatooine/cupa.py index eedcea77..ea30bd64 100644 --- a/scripts/mobiles/tatooine/cupa.py +++ b/scripts/mobiles/tatooine/cupa.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('cu_pa') mobileTemplate.setLevel(10) - mobileTemplate.setMinLevel(10) - mobileTemplate.setMaxLevel(11) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/death_kreetle.py b/scripts/mobiles/tatooine/death_kreetle.py index 1accd9cc..96d31cfb 100644 --- a/scripts/mobiles/tatooine/death_kreetle.py +++ b/scripts/mobiles/tatooine/death_kreetle.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('kreetle_death') mobileTemplate.setLevel(7) - mobileTemplate.setMinLevel(7) - mobileTemplate.setMaxLevel(8) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) @@ -27,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("uber kreetle") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_kreetle.iff') diff --git a/scripts/mobiles/tatooine/desert_demon.py b/scripts/mobiles/tatooine/desert_demon.py index 578b7dbb..2e276722 100644 --- a/scripts/mobiles/tatooine/desert_demon.py +++ b/scripts/mobiles/tatooine/desert_demon.py @@ -22,7 +22,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("desert demon") mobileTemplate.setAssistRange(4) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() diff --git a/scripts/mobiles/tatooine/desert_demon_bodyguard.py b/scripts/mobiles/tatooine/desert_demon_bodyguard.py index e572b55f..47e6ddf4 100644 --- a/scripts/mobiles/tatooine/desert_demon_bodyguard.py +++ b/scripts/mobiles/tatooine/desert_demon_bodyguard.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("desert demon") mobileTemplate.setAssistRange(4) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() diff --git a/scripts/mobiles/tatooine/desert_demon_brawler.py b/scripts/mobiles/tatooine/desert_demon_brawler.py index f19a5dce..9fd9afff 100644 --- a/scripts/mobiles/tatooine/desert_demon_brawler.py +++ b/scripts/mobiles/tatooine/desert_demon_brawler.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("desert demon") mobileTemplate.setAssistRange(4) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() diff --git a/scripts/mobiles/tatooine/desert_demon_leader.py b/scripts/mobiles/tatooine/desert_demon_leader.py index 85b7711c..a4990c43 100644 --- a/scripts/mobiles/tatooine/desert_demon_leader.py +++ b/scripts/mobiles/tatooine/desert_demon_leader.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("desert demon") mobileTemplate.setAssistRange(4) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() diff --git a/scripts/mobiles/tatooine/desert_demon_marksman.py b/scripts/mobiles/tatooine/desert_demon_marksman.py index a02ab449..a9eb2298 100644 --- a/scripts/mobiles/tatooine/desert_demon_marksman.py +++ b/scripts/mobiles/tatooine/desert_demon_marksman.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("desert demon") mobileTemplate.setAssistRange(4) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() diff --git a/scripts/mobiles/tatooine/desert_eopie.py b/scripts/mobiles/tatooine/desert_eopie.py index 311c3d5c..bb6603ef 100644 --- a/scripts/mobiles/tatooine/desert_eopie.py +++ b/scripts/mobiles/tatooine/desert_eopie.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('desert_eopie') mobileTemplate.setLevel(16) - mobileTemplate.setMinLevel(16) - mobileTemplate.setMaxLevel(17) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/desert_kreetle.py b/scripts/mobiles/tatooine/desert_kreetle.py index 29fc2d12..6c2b1971 100644 --- a/scripts/mobiles/tatooine/desert_kreetle.py +++ b/scripts/mobiles/tatooine/desert_kreetle.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('orphan_kreetle') mobileTemplate.setLevel(3) - mobileTemplate.setMinLevel(3) - mobileTemplate.setMaxLevel(5) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/desert_razorback.py b/scripts/mobiles/tatooine/desert_razorback.py index e2818a15..ebab48cd 100644 --- a/scripts/mobiles/tatooine/desert_razorback.py +++ b/scripts/mobiles/tatooine/desert_razorback.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('desert_razorback') mobileTemplate.setLevel(23) - mobileTemplate.setMinLevel(23) - mobileTemplate.setMaxLevel(25) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/desert_squill.py b/scripts/mobiles/tatooine/desert_squill.py index 939087af..1bd10a8a 100644 --- a/scripts/mobiles/tatooine/desert_squill.py +++ b/scripts/mobiles/tatooine/desert_squill.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('desert_squill') mobileTemplate.setLevel(14) - mobileTemplate.setMinLevel(14) - mobileTemplate.setMaxLevel(15) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) @@ -29,7 +27,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("squill") mobileTemplate.setAssistRange(10) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_squill.iff') diff --git a/scripts/mobiles/tatooine/desert_swooper.py b/scripts/mobiles/tatooine/desert_swooper.py index 24fffef1..06ffe3ab 100644 --- a/scripts/mobiles/tatooine/desert_swooper.py +++ b/scripts/mobiles/tatooine/desert_swooper.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("swoop") mobileTemplate.setAssistRange(4) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_tatooine_desert_swooper.iff') diff --git a/scripts/mobiles/tatooine/desert_swooper_leader.py b/scripts/mobiles/tatooine/desert_swooper_leader.py index a2c5c341..4c7a3955 100644 --- a/scripts/mobiles/tatooine/desert_swooper_leader.py +++ b/scripts/mobiles/tatooine/desert_swooper_leader.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("swoop") mobileTemplate.setAssistRange(4) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_tatooine_desert_swooper_leader.iff') diff --git a/scripts/mobiles/tatooine/dewall_paez.py b/scripts/mobiles/tatooine/dewall_paez.py new file mode 100644 index 00000000..3d5ce97b --- /dev/null +++ b/scripts/mobiles/tatooine/dewall_paez.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 java.util import Vector + + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tatooine_wayfar_spy_leader') + mobileTemplate.setLevel(19) + mobileTemplate.setDifficulty(Difficulty.NORMAL) + + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("wayfar spy") + mobileTemplate.setAssistRange(3) + mobileTemplate.setStalker(False) + #mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) + + + templates = Vector() + templates.add('object/mobile/shared_tatooine_wayfar_spies_dewall_paez.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_cdef.iff', WeaponType.PISTOL, 1.0, 15, 'energy') + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotpistol') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('dewall_paez', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/dewback.py b/scripts/mobiles/tatooine/dewback.py index d286eb64..0d1bf28a 100644 --- a/scripts/mobiles/tatooine/dewback.py +++ b/scripts/mobiles/tatooine/dewback.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('dewback') mobileTemplate.setLevel(17) - mobileTemplate.setMinLevel(17) - mobileTemplate.setMaxLevel(18) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/dimu_bantha.py b/scripts/mobiles/tatooine/dimu_bantha.py index f0f940d5..f929196a 100644 --- a/scripts/mobiles/tatooine/dimu_bantha.py +++ b/scripts/mobiles/tatooine/dimu_bantha.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('dim_u_bantha') mobileTemplate.setLevel(3) - mobileTemplate.setMinLevel(3) - mobileTemplate.setMaxLevel(4) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/diseased_bocatt.py b/scripts/mobiles/tatooine/diseased_bocatt.py index 1ec933c5..e3697c05 100644 --- a/scripts/mobiles/tatooine/diseased_bocatt.py +++ b/scripts/mobiles/tatooine/diseased_bocatt.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('bocatt_diseased') mobileTemplate.setLevel(5) - mobileTemplate.setMinLevel(5) - mobileTemplate.setMaxLevel(6) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) @@ -29,7 +27,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("bocatt") mobileTemplate.setAssistRange(10) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_bocatt.iff') diff --git a/scripts/mobiles/tatooine/doane_watki.py b/scripts/mobiles/tatooine/doane_watki.py new file mode 100644 index 00000000..3d6f69f7 --- /dev/null +++ b/scripts/mobiles/tatooine/doane_watki.py @@ -0,0 +1,40 @@ +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('tatooine_valarian_doane_watki') + mobileTemplate.setLevel(20) + mobileTemplate.setDifficulty(Difficulty.NORMAL) + + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("valarian") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_valarian_swooper.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_cdef.iff', WeaponType.PISTOL, 1.0, 15, 'energy') + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotpistol') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('doane_watki', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/domestic_eopie.py b/scripts/mobiles/tatooine/domestic_eopie.py index 7991bb59..fd94bf67 100644 --- a/scripts/mobiles/tatooine/domestic_eopie.py +++ b/scripts/mobiles/tatooine/domestic_eopie.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('domestic_eopie') mobileTemplate.setLevel(1) - mobileTemplate.setMinLevel(1) - mobileTemplate.setMaxLevel(3) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/dragonet.py b/scripts/mobiles/tatooine/dragonet.py index f93ba3a6..bc5cf523 100644 --- a/scripts/mobiles/tatooine/dragonet.py +++ b/scripts/mobiles/tatooine/dragonet.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('dragonet') mobileTemplate.setLevel(24) - mobileTemplate.setMinLevel(24) - mobileTemplate.setMaxLevel(27) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) @@ -29,10 +27,10 @@ def addTemplate(core): mobileTemplate.setSocialGroup("dragonet") mobileTemplate.setAssistRange(10) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() - templates.add('object/mobile/shared_dune_lizard.iff') + templates.add('object/mobile/shared_dragonet.iff') mobileTemplate.setTemplates(templates) weaponTemplates = Vector() diff --git a/scripts/mobiles/tatooine/dragonet_runt.py b/scripts/mobiles/tatooine/dragonet_runt.py new file mode 100644 index 00000000..ddac6f7b --- /dev/null +++ b/scripts/mobiles/tatooine/dragonet_runt.py @@ -0,0 +1,46 @@ +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('dragonet_runt') + mobileTemplate.setLevel(19) + mobileTemplate.setDifficulty(Difficulty.NORMAL) + + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(125) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setBoneAmount(75) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(68) + mobileTemplate.setSocialGroup("dragonet") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) + + templates = Vector() + templates.add('object/mobile/shared_dragonet.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/creature/shared_creature_spit_small_toxicgreen.iff', WeaponType.UNARMED, 1.0, 6, 'kinetic') + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureRangedAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('dragonet_runt', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/drooling_nuna.py b/scripts/mobiles/tatooine/drooling_nuna.py index b2467732..e36a562e 100644 --- a/scripts/mobiles/tatooine/drooling_nuna.py +++ b/scripts/mobiles/tatooine/drooling_nuna.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('dwarf_nuna_drooling') mobileTemplate.setLevel(2) - mobileTemplate.setMinLevel(2) - mobileTemplate.setMaxLevel(3) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/dune_bantha.py b/scripts/mobiles/tatooine/dune_bantha.py index 1d9e7a0c..f48c5135 100644 --- a/scripts/mobiles/tatooine/dune_bantha.py +++ b/scripts/mobiles/tatooine/dune_bantha.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('dune_bantha') mobileTemplate.setLevel(20) - mobileTemplate.setMinLevel(20) - mobileTemplate.setMaxLevel(22) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/dune_beetle.py b/scripts/mobiles/tatooine/dune_beetle.py index f47f5f4b..cb40bc5e 100644 --- a/scripts/mobiles/tatooine/dune_beetle.py +++ b/scripts/mobiles/tatooine/dune_beetle.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('dune_beetle') mobileTemplate.setLevel(9) - mobileTemplate.setMinLevel(9) - mobileTemplate.setMaxLevel(10) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/dune_lizard.py b/scripts/mobiles/tatooine/dune_lizard.py index 8ef32592..62eb23c1 100644 --- a/scripts/mobiles/tatooine/dune_lizard.py +++ b/scripts/mobiles/tatooine/dune_lizard.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('dune_lizard') mobileTemplate.setLevel(18) - mobileTemplate.setMinLevel(18) - mobileTemplate.setMaxLevel(19) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) @@ -29,19 +27,19 @@ def addTemplate(core): mobileTemplate.setSocialGroup("dune lizard") mobileTemplate.setAssistRange(10) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dune_lizard.iff') mobileTemplate.setTemplates(templates) weaponTemplates = Vector() - weapontemplate = WeaponTemplate('object/weapon/ranged/creature/shared_creature_spit_small_toxicgreen.iff', WeaponType.UNARMED, 1.0, 6, 'kinetic') + weapontemplate = WeaponTemplate('object/weapon/ranged/creature/shared_creature_spit_small_toxicgreen.iff', WeaponType.UNARMED, 1.0, 24, 'kinetic') weaponTemplates.add(weapontemplate) mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() - mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setDefaultAttack('creatureRangedAttack') mobileTemplate.setAttacks(attacks) core.spawnService.addMobileTemplate('dune_lizard', mobileTemplate) diff --git a/scripts/mobiles/tatooine/dune_stalker_brawler.py b/scripts/mobiles/tatooine/dune_stalker_brawler.py index e5b0ed58..4eb31f85 100644 --- a/scripts/mobiles/tatooine/dune_stalker_brawler.py +++ b/scripts/mobiles/tatooine/dune_stalker_brawler.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("dune stalker") mobileTemplate.setAssistRange(4) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_tatooine_dune_stalker_brawler.iff') diff --git a/scripts/mobiles/tatooine/dune_stalker_enforcer.py b/scripts/mobiles/tatooine/dune_stalker_enforcer.py index fd686b36..bef19cdb 100644 --- a/scripts/mobiles/tatooine/dune_stalker_enforcer.py +++ b/scripts/mobiles/tatooine/dune_stalker_enforcer.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("dune stalker") mobileTemplate.setAssistRange(4) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() diff --git a/scripts/mobiles/tatooine/dune_stalker_leader.py b/scripts/mobiles/tatooine/dune_stalker_leader.py index 6a6cfacb..ad73d758 100644 --- a/scripts/mobiles/tatooine/dune_stalker_leader.py +++ b/scripts/mobiles/tatooine/dune_stalker_leader.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("dune stalker") mobileTemplate.setAssistRange(4) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() diff --git a/scripts/mobiles/tatooine/dune_stalker_marksman.py b/scripts/mobiles/tatooine/dune_stalker_marksman.py index 6ac3f1c6..3853d762 100644 --- a/scripts/mobiles/tatooine/dune_stalker_marksman.py +++ b/scripts/mobiles/tatooine/dune_stalker_marksman.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("dune stalker") mobileTemplate.setAssistRange(4) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() diff --git a/scripts/mobiles/tatooine/dune_stalker_scavenger.py b/scripts/mobiles/tatooine/dune_stalker_scavenger.py index be2e4bea..ce02dff1 100644 --- a/scripts/mobiles/tatooine/dune_stalker_scavenger.py +++ b/scripts/mobiles/tatooine/dune_stalker_scavenger.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("dune stalker") mobileTemplate.setAssistRange(4) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() diff --git a/scripts/mobiles/tatooine/durr_rodak.py b/scripts/mobiles/tatooine/durr_rodak.py index 74bc24df..5dd55bb5 100644 --- a/scripts/mobiles/tatooine/durr_rodak.py +++ b/scripts/mobiles/tatooine/durr_rodak.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("whitethranta") mobileTemplate.setAssistRange(3) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() diff --git a/scripts/mobiles/tatooine/dwarf_bantha.py b/scripts/mobiles/tatooine/dwarf_bantha.py index 14a7274d..998034c8 100644 --- a/scripts/mobiles/tatooine/dwarf_bantha.py +++ b/scripts/mobiles/tatooine/dwarf_bantha.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('dwarf_bantha') mobileTemplate.setLevel(10) - mobileTemplate.setMinLevel(10) - mobileTemplate.setMaxLevel(11) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/dwarf_eopie.py b/scripts/mobiles/tatooine/dwarf_eopie.py index 6f4c3a33..c6ec9210 100644 --- a/scripts/mobiles/tatooine/dwarf_eopie.py +++ b/scripts/mobiles/tatooine/dwarf_eopie.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('dwarf_eopie') mobileTemplate.setLevel(1) - mobileTemplate.setMinLevel(1) - mobileTemplate.setMaxLevel(3) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/dwarf_nuna.py b/scripts/mobiles/tatooine/dwarf_nuna.py index 0883822e..cf36c3f0 100644 --- a/scripts/mobiles/tatooine/dwarf_nuna.py +++ b/scripts/mobiles/tatooine/dwarf_nuna.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('dwarf_nuna') mobileTemplate.setLevel(1) - mobileTemplate.setMinLevel(1) - mobileTemplate.setMaxLevel(3) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/elder_zucca_boar.py b/scripts/mobiles/tatooine/elder_zucca_boar.py index d50d45c1..d0d0989d 100644 --- a/scripts/mobiles/tatooine/elder_zucca_boar.py +++ b/scripts/mobiles/tatooine/elder_zucca_boar.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('zucca_boar_elder') mobileTemplate.setLevel(8) - mobileTemplate.setMinLevel(8) - mobileTemplate.setMaxLevel(9) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/elite_dewback_cannibal.py b/scripts/mobiles/tatooine/elite_dewback_cannibal.py index d9337d98..59833596 100644 --- a/scripts/mobiles/tatooine/elite_dewback_cannibal.py +++ b/scripts/mobiles/tatooine/elite_dewback_cannibal.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('elite_dewback_canibal') mobileTemplate.setLevel(13) - mobileTemplate.setMinLevel(13) - mobileTemplate.setMaxLevel(15) mobileTemplate.setDifficulty(Difficulty.ELITE) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/elite_dragonet.py b/scripts/mobiles/tatooine/elite_dragonet.py index ab299be4..998d8d57 100644 --- a/scripts/mobiles/tatooine/elite_dragonet.py +++ b/scripts/mobiles/tatooine/elite_dragonet.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('elite_dragonet') mobileTemplate.setLevel(24) - mobileTemplate.setMinLevel(24) - mobileTemplate.setMaxLevel(26) mobileTemplate.setDifficulty(Difficulty.ELITE) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/elite_dune_lizard.py b/scripts/mobiles/tatooine/elite_dune_lizard.py index 4cdf1478..7fb4bfad 100644 --- a/scripts/mobiles/tatooine/elite_dune_lizard.py +++ b/scripts/mobiles/tatooine/elite_dune_lizard.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('elite_dune_lizard') mobileTemplate.setLevel(18) - mobileTemplate.setMinLevel(18) - mobileTemplate.setMaxLevel(19) mobileTemplate.setDifficulty(Difficulty.ELITE) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/elite_giant_sand_beetle.py b/scripts/mobiles/tatooine/elite_giant_sand_beetle.py index 1b1c5d34..b2b46f26 100644 --- a/scripts/mobiles/tatooine/elite_giant_sand_beetle.py +++ b/scripts/mobiles/tatooine/elite_giant_sand_beetle.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('elite_giant_sand_beetle') mobileTemplate.setLevel(25) - mobileTemplate.setMinLevel(25) - mobileTemplate.setMaxLevel(26) mobileTemplate.setDifficulty(Difficulty.ELITE) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/elite_mutant_womprat.py b/scripts/mobiles/tatooine/elite_mutant_womprat.py index d3029f5d..dbd81cd2 100644 --- a/scripts/mobiles/tatooine/elite_mutant_womprat.py +++ b/scripts/mobiles/tatooine/elite_mutant_womprat.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('elite_mutant_womprat') mobileTemplate.setLevel(12) - mobileTemplate.setMinLevel(12) - mobileTemplate.setMaxLevel(14) mobileTemplate.setDifficulty(Difficulty.ELITE) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/elite_ronto.py b/scripts/mobiles/tatooine/elite_ronto.py index ee2c9c85..f008f8a7 100644 --- a/scripts/mobiles/tatooine/elite_ronto.py +++ b/scripts/mobiles/tatooine/elite_ronto.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('elite_ronto_ronto') mobileTemplate.setLevel(17) - mobileTemplate.setMinLevel(17) - mobileTemplate.setMaxLevel(18) mobileTemplate.setDifficulty(Difficulty.ELITE) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/elite_scyk.py b/scripts/mobiles/tatooine/elite_scyk.py index 7108f0ba..07ffc9e3 100644 --- a/scripts/mobiles/tatooine/elite_scyk.py +++ b/scripts/mobiles/tatooine/elite_scyk.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('elite_scyk') mobileTemplate.setLevel(11) - mobileTemplate.setMinLevel(11) - mobileTemplate.setMaxLevel(13) mobileTemplate.setDifficulty(Difficulty.ELITE) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/elite_sevorrt.py b/scripts/mobiles/tatooine/elite_sevorrt.py index c8c5d222..a26f2486 100644 --- a/scripts/mobiles/tatooine/elite_sevorrt.py +++ b/scripts/mobiles/tatooine/elite_sevorrt.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('elite_sevorrt') mobileTemplate.setLevel(8) - mobileTemplate.setMinLevel(8) - mobileTemplate.setMaxLevel(9) mobileTemplate.setDifficulty(Difficulty.ELITE) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/enraged_mountain_dewback.py b/scripts/mobiles/tatooine/enraged_mountain_dewback.py index ddc0331a..77817e69 100644 --- a/scripts/mobiles/tatooine/enraged_mountain_dewback.py +++ b/scripts/mobiles/tatooine/enraged_mountain_dewback.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('elite_mountain_dewback') mobileTemplate.setLevel(22) - mobileTemplate.setMinLevel(22) - mobileTemplate.setMaxLevel(23) mobileTemplate.setDifficulty(Difficulty.ELITE) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/enraged_squill.py b/scripts/mobiles/tatooine/enraged_squill.py index cbebd009..100753f3 100644 --- a/scripts/mobiles/tatooine/enraged_squill.py +++ b/scripts/mobiles/tatooine/enraged_squill.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('elite_squill') mobileTemplate.setLevel(12) - mobileTemplate.setMinLevel(12) - mobileTemplate.setMaxLevel(14) mobileTemplate.setDifficulty(Difficulty.ELITE) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/eoni.py b/scripts/mobiles/tatooine/eoni.py index b2011903..f37f9c32 100644 --- a/scripts/mobiles/tatooine/eoni.py +++ b/scripts/mobiles/tatooine/eoni.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('elite_jundland_eopie') mobileTemplate.setLevel(21) - mobileTemplate.setMinLevel(21) - mobileTemplate.setMaxLevel(22) mobileTemplate.setDifficulty(Difficulty.ELITE) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/eopie.py b/scripts/mobiles/tatooine/eopie.py index 64f01e2c..eb46866b 100644 --- a/scripts/mobiles/tatooine/eopie.py +++ b/scripts/mobiles/tatooine/eopie.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('eopie') mobileTemplate.setLevel(4) - mobileTemplate.setMinLevel(4) - mobileTemplate.setMaxLevel(5) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/eopie_herdmaster.py b/scripts/mobiles/tatooine/eopie_herdmaster.py index 0097740e..50c118b1 100644 --- a/scripts/mobiles/tatooine/eopie_herdmaster.py +++ b/scripts/mobiles/tatooine/eopie_herdmaster.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('eopie_herdmaster') mobileTemplate.setLevel(5) - mobileTemplate.setMinLevel(5) - mobileTemplate.setMaxLevel(6) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/erib_kurrugh.py b/scripts/mobiles/tatooine/erib_kurrugh.py new file mode 100644 index 00000000..7aa517b3 --- /dev/null +++ b/scripts/mobiles/tatooine/erib_kurrugh.py @@ -0,0 +1,42 @@ +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('tatooine_sand_splitter_erib_kurrugh') + mobileTemplate.setLevel(21) + mobileTemplate.setDifficulty(Difficulty.NORMAL) + + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("sand splitter") + mobileTemplate.setAssistRange(5) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) + + templates = Vector() + templates.add('object/mobile/shared_tatooine_sand_splitter_erib_kurrugh.iff') + + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_d18.iff', WeaponType.PISTOL, 1.0, 24, 'energy') + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('erib_kurrugh', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/error_prone_battle_droids.py b/scripts/mobiles/tatooine/error_prone_battle_droids.py index 2a2bfba8..7dbf191b 100644 --- a/scripts/mobiles/tatooine/error_prone_battle_droids.py +++ b/scripts/mobiles/tatooine/error_prone_battle_droids.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('tatooine_error_prone_droid') mobileTemplate.setLevel(6) - mobileTemplate.setMinLevel(6) - mobileTemplate.setMaxLevel(7) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) @@ -23,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("error-prone battle droid") mobileTemplate.setAssistRange(4) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_battle_droid.iff') diff --git a/scripts/mobiles/tatooine/escaped_criminal.py b/scripts/mobiles/tatooine/escaped_criminal.py index 495b31c2..51e986fb 100644 --- a/scripts/mobiles/tatooine/escaped_criminal.py +++ b/scripts/mobiles/tatooine/escaped_criminal.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("desert demon") mobileTemplate.setAssistRange(4) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() diff --git a/scripts/mobiles/tatooine/female_mountain_squill.py b/scripts/mobiles/tatooine/female_mountain_squill.py index e890a788..5927dc48 100644 --- a/scripts/mobiles/tatooine/female_mountain_squill.py +++ b/scripts/mobiles/tatooine/female_mountain_squill.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('female_mountain_squill') mobileTemplate.setLevel(7) - mobileTemplate.setMinLevel(7) - mobileTemplate.setMaxLevel(9) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/feral_bantha.py b/scripts/mobiles/tatooine/feral_bantha.py index a8cc961d..bb1a10eb 100644 --- a/scripts/mobiles/tatooine/feral_bantha.py +++ b/scripts/mobiles/tatooine/feral_bantha.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('feral_bantha') mobileTemplate.setLevel(5) - mobileTemplate.setMinLevel(5) - mobileTemplate.setMaxLevel(6) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) @@ -29,7 +27,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("bantha") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_bantha_hue.iff') diff --git a/scripts/mobiles/tatooine/furios_ronto.py b/scripts/mobiles/tatooine/furios_ronto.py index 36cbf779..6990ed37 100644 --- a/scripts/mobiles/tatooine/furios_ronto.py +++ b/scripts/mobiles/tatooine/furios_ronto.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('ronto_furious') mobileTemplate.setLevel(18) - mobileTemplate.setMinLevel(18) - mobileTemplate.setMaxLevel(19) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/giant_canyon_krayt_dragon.py b/scripts/mobiles/tatooine/giant_canyon_krayt_dragon.py index c47868fe..1ec39852 100644 --- a/scripts/mobiles/tatooine/giant_canyon_krayt_dragon.py +++ b/scripts/mobiles/tatooine/giant_canyon_krayt_dragon.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('giant_canyon_krayt_dragon') mobileTemplate.setLevel(87) - mobileTemplate.setMinLevel(80) - mobileTemplate.setMaxLevel(89) mobileTemplate.setDifficulty(Difficulty.BOSS) mobileTemplate.setMinSpawnDistance(4) @@ -29,7 +27,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("krayt dragon") mobileTemplate.setAssistRange(34) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_canyon_krayt_dragon.iff') diff --git a/scripts/mobiles/tatooine/giant_sand_beetle.py b/scripts/mobiles/tatooine/giant_sand_beetle.py index b9fcefe6..e61b0ffc 100644 --- a/scripts/mobiles/tatooine/giant_sand_beetle.py +++ b/scripts/mobiles/tatooine/giant_sand_beetle.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('giant_sand_beetle') mobileTemplate.setLevel(25) - mobileTemplate.setMinLevel(25) - mobileTemplate.setMaxLevel(26) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) @@ -27,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("giant sand beetle") mobileTemplate.setAssistRange(10) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_giant_sand_beetle.iff') diff --git a/scripts/mobiles/tatooine/giant_worrt.py b/scripts/mobiles/tatooine/giant_worrt.py index 8303c093..9ca06dc1 100644 --- a/scripts/mobiles/tatooine/giant_worrt.py +++ b/scripts/mobiles/tatooine/giant_worrt.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('giant_worrt') mobileTemplate.setLevel(13) - mobileTemplate.setMinLevel(13) - mobileTemplate.setMaxLevel(15) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) @@ -29,7 +27,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("worrt") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_giant_worrt.iff') diff --git a/scripts/mobiles/tatooine/gorg.py b/scripts/mobiles/tatooine/gorg.py index 701d28b1..a4d4d17d 100644 --- a/scripts/mobiles/tatooine/gorg.py +++ b/scripts/mobiles/tatooine/gorg.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('gorg') mobileTemplate.setLevel(2) - mobileTemplate.setMinLevel(1) - mobileTemplate.setMaxLevel(3) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) @@ -29,7 +27,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("gorg") mobileTemplate.setAssistRange(10) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_gorg.iff') diff --git a/scripts/mobiles/tatooine/gorg_glutton.py b/scripts/mobiles/tatooine/gorg_glutton.py index 25c0a54d..c8d0cfd6 100644 --- a/scripts/mobiles/tatooine/gorg_glutton.py +++ b/scripts/mobiles/tatooine/gorg_glutton.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('gorg_glutton') mobileTemplate.setLevel(2) - mobileTemplate.setMinLevel(1) - mobileTemplate.setMaxLevel(3) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/grand_krayt_dragon.py b/scripts/mobiles/tatooine/grand_krayt_dragon.py index 573744d0..c5010229 100644 --- a/scripts/mobiles/tatooine/grand_krayt_dragon.py +++ b/scripts/mobiles/tatooine/grand_krayt_dragon.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('krayt_dragon_grand') mobileTemplate.setLevel(87) - mobileTemplate.setMinLevel(80) - mobileTemplate.setMaxLevel(89) mobileTemplate.setDifficulty(Difficulty.BOSS) mobileTemplate.setMinSpawnDistance(4) @@ -29,7 +27,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("krayt dragon") mobileTemplate.setAssistRange(24) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_canyon_krayt_dragon.iff') diff --git a/scripts/mobiles/tatooine/great_squill.py b/scripts/mobiles/tatooine/great_squill.py index b8aec65c..b395dd07 100644 --- a/scripts/mobiles/tatooine/great_squill.py +++ b/scripts/mobiles/tatooine/great_squill.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('squill_great') mobileTemplate.setLevel(13) - mobileTemplate.setMinLevel(13) - mobileTemplate.setMaxLevel(14) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/greater_desert_womprat.py b/scripts/mobiles/tatooine/greater_desert_womprat.py index 9207d86a..bd392a6d 100644 --- a/scripts/mobiles/tatooine/greater_desert_womprat.py +++ b/scripts/mobiles/tatooine/greater_desert_womprat.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('greater_desert_womprat') mobileTemplate.setLevel(12) - mobileTemplate.setMinLevel(11) - mobileTemplate.setMaxLevel(14) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) @@ -29,7 +27,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("womprat") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_greater_desert_womp_rat.iff') diff --git a/scripts/mobiles/tatooine/grizzled_dewback.py b/scripts/mobiles/tatooine/grizzled_dewback.py index 49274316..4d370737 100644 --- a/scripts/mobiles/tatooine/grizzled_dewback.py +++ b/scripts/mobiles/tatooine/grizzled_dewback.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('grizzled_dewback') mobileTemplate.setLevel(18) - mobileTemplate.setMinLevel(17) - mobileTemplate.setMaxLevel(19) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) @@ -29,7 +27,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("dewback") mobileTemplate.setAssistRange(10) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dewback.iff') diff --git a/scripts/mobiles/tatooine/gunrunner.py b/scripts/mobiles/tatooine/gunrunner.py index a0dd5d22..2414fbb5 100644 --- a/scripts/mobiles/tatooine/gunrunner.py +++ b/scripts/mobiles/tatooine/gunrunner.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("gunrunner") mobileTemplate.setAssistRange(4) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_tatooine_gunrunner.iff') diff --git a/scripts/mobiles/tatooine/gunrunner1.py b/scripts/mobiles/tatooine/gunrunner1.py index 94ec84fb..5abc1196 100644 --- a/scripts/mobiles/tatooine/gunrunner1.py +++ b/scripts/mobiles/tatooine/gunrunner1.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("mercenary") mobileTemplate.setAssistRange(0) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_tatooine_gunrunner.iff') diff --git a/scripts/mobiles/tatooine/gunrunner_sentry.py b/scripts/mobiles/tatooine/gunrunner_sentry.py index 973d46b4..5f65d3aa 100644 --- a/scripts/mobiles/tatooine/gunrunner_sentry.py +++ b/scripts/mobiles/tatooine/gunrunner_sentry.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("gunrunner") mobileTemplate.setAssistRange(4) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_tatooine_gunrunner.iff') diff --git a/scripts/mobiles/tatooine/harmony_worrt.py b/scripts/mobiles/tatooine/harmony_worrt.py index b77546a5..a09ea080 100644 --- a/scripts/mobiles/tatooine/harmony_worrt.py +++ b/scripts/mobiles/tatooine/harmony_worrt.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('harmony_worrt') mobileTemplate.setLevel(18) - mobileTemplate.setMinLevel(17) - mobileTemplate.setMaxLevel(19) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/jundland_eopie.py b/scripts/mobiles/tatooine/jundland_eopie.py index 6fef1f32..e7e6ee82 100644 --- a/scripts/mobiles/tatooine/jundland_eopie.py +++ b/scripts/mobiles/tatooine/jundland_eopie.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('jundland_eopie') mobileTemplate.setLevel(21) - mobileTemplate.setMinLevel(19) - mobileTemplate.setMaxLevel(23) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/junk_battle_droid.py b/scripts/mobiles/tatooine/junk_battle_droid.py index 0b9ecf3c..42ee2cbc 100644 --- a/scripts/mobiles/tatooine/junk_battle_droid.py +++ b/scripts/mobiles/tatooine/junk_battle_droid.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('tatooine_lin_demolitionmech') mobileTemplate.setLevel(14) - mobileTemplate.setMinLevel(13) - mobileTemplate.setMaxLevel(15) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/juvenile_canyon_krayt_dragon.py b/scripts/mobiles/tatooine/juvenile_canyon_krayt_dragon.py index 632fd130..8d216c83 100644 --- a/scripts/mobiles/tatooine/juvenile_canyon_krayt_dragon.py +++ b/scripts/mobiles/tatooine/juvenile_canyon_krayt_dragon.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('juvenile_canyon_krayt') mobileTemplate.setLevel(82) - mobileTemplate.setMinLevel(78) - mobileTemplate.setMaxLevel(83) mobileTemplate.setDifficulty(Difficulty.BOSS) mobileTemplate.setMinSpawnDistance(4) @@ -29,7 +27,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("krayt dragon") mobileTemplate.setAssistRange(24) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_krayt_dragon.iff') diff --git a/scripts/mobiles/tatooine/krayt_dragon.py b/scripts/mobiles/tatooine/krayt_dragon.py index 8f410914..5c2bcc3c 100644 --- a/scripts/mobiles/tatooine/krayt_dragon.py +++ b/scripts/mobiles/tatooine/krayt_dragon.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('krayt_dragon') mobileTemplate.setLevel(82) - mobileTemplate.setMinLevel(78) - mobileTemplate.setMaxLevel(83) mobileTemplate.setDifficulty(Difficulty.BOSS) mobileTemplate.setMinSpawnDistance(4) @@ -29,7 +27,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("krayt dragon") mobileTemplate.setAssistRange(24) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_krayt_dragon.iff') diff --git a/scripts/mobiles/tatooine/krayt_dragon_ancient.py b/scripts/mobiles/tatooine/krayt_dragon_ancient.py index b0362487..6c428173 100644 --- a/scripts/mobiles/tatooine/krayt_dragon_ancient.py +++ b/scripts/mobiles/tatooine/krayt_dragon_ancient.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('krayt_dragon_ancient') mobileTemplate.setLevel(90) - mobileTemplate.setMinLevel(89) - mobileTemplate.setMaxLevel(90) mobileTemplate.setDifficulty(Difficulty.BOSS) mobileTemplate.setMinSpawnDistance(4) @@ -29,7 +27,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("krayt dragon") mobileTemplate.setAssistRange(36) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_krayt_dragon.iff') diff --git a/scripts/mobiles/tatooine/kreetle.py b/scripts/mobiles/tatooine/kreetle.py index 548e4da6..ed6bc6aa 100644 --- a/scripts/mobiles/tatooine/kreetle.py +++ b/scripts/mobiles/tatooine/kreetle.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('kreetle') mobileTemplate.setLevel(5) - mobileTemplate.setMinLevel(4) - mobileTemplate.setMaxLevel(6) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/kreetle_swarmling.py b/scripts/mobiles/tatooine/kreetle_swarmling.py index 4532284e..a4a55458 100644 --- a/scripts/mobiles/tatooine/kreetle_swarmling.py +++ b/scripts/mobiles/tatooine/kreetle_swarmling.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('kreetle_swarming') mobileTemplate.setLevel(1) - mobileTemplate.setMinLevel(1) - mobileTemplate.setMaxLevel(3) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/large_cave_beetle.py b/scripts/mobiles/tatooine/large_cave_beetle.py index 02167d4e..27e080e4 100644 --- a/scripts/mobiles/tatooine/large_cave_beetle.py +++ b/scripts/mobiles/tatooine/large_cave_beetle.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('large_cave_beetle') mobileTemplate.setLevel(21) - mobileTemplate.setMinLevel(21) - mobileTemplate.setMaxLevel(23) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/large_rock_beetle1.py b/scripts/mobiles/tatooine/large_rock_beetle1.py index 818eed47..759813b0 100644 --- a/scripts/mobiles/tatooine/large_rock_beetle1.py +++ b/scripts/mobiles/tatooine/large_rock_beetle1.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('large_rock_beetle') mobileTemplate.setLevel(18) - mobileTemplate.setMinLevel(17) - mobileTemplate.setMaxLevel(18) mobileTemplate.setDifficulty(Difficulty.ELITE) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/large_rock_beetle2.py b/scripts/mobiles/tatooine/large_rock_beetle2.py index 94b9e666..c75f348e 100644 --- a/scripts/mobiles/tatooine/large_rock_beetle2.py +++ b/scripts/mobiles/tatooine/large_rock_beetle2.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('large_rock_beetle') mobileTemplate.setLevel(19) - mobileTemplate.setMinLevel(18) - mobileTemplate.setMaxLevel(20) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/large_rock_beetle3.py b/scripts/mobiles/tatooine/large_rock_beetle3.py index d4aec4e8..7dc3d1b5 100644 --- a/scripts/mobiles/tatooine/large_rock_beetle3.py +++ b/scripts/mobiles/tatooine/large_rock_beetle3.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('large_rock_beetle') mobileTemplate.setLevel(19) - mobileTemplate.setMinLevel(18) - mobileTemplate.setMaxLevel(20) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/large_sand_beetle.py b/scripts/mobiles/tatooine/large_sand_beetle.py index 78ddb755..8cecb782 100644 --- a/scripts/mobiles/tatooine/large_sand_beetle.py +++ b/scripts/mobiles/tatooine/large_sand_beetle.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('large_sand_beetle') mobileTemplate.setLevel(24) - mobileTemplate.setMinLevel(22) - mobileTemplate.setMaxLevel(25) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/lesser_bocatt.py b/scripts/mobiles/tatooine/lesser_bocatt.py index f4fb3c9c..1a5a4a75 100644 --- a/scripts/mobiles/tatooine/lesser_bocatt.py +++ b/scripts/mobiles/tatooine/lesser_bocatt.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('lesser_bocatt') mobileTemplate.setLevel(14) - mobileTemplate.setMinLevel(13) - mobileTemplate.setMaxLevel(15) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/lesser_desert_womprat.py b/scripts/mobiles/tatooine/lesser_desert_womprat.py index bc893cc5..04b220fe 100644 --- a/scripts/mobiles/tatooine/lesser_desert_womprat.py +++ b/scripts/mobiles/tatooine/lesser_desert_womprat.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('lesser_desert_womprat') mobileTemplate.setLevel(4) - mobileTemplate.setMinLevel(3) - mobileTemplate.setMaxLevel(5) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/lesser_dewback.py b/scripts/mobiles/tatooine/lesser_dewback.py index 9a908d05..9ab38e1c 100644 --- a/scripts/mobiles/tatooine/lesser_dewback.py +++ b/scripts/mobiles/tatooine/lesser_dewback.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('lesser_dewback') mobileTemplate.setLevel(4) - mobileTemplate.setMinLevel(3) - mobileTemplate.setMaxLevel(5) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/malignant_squill.py b/scripts/mobiles/tatooine/malignant_squill.py index 8475b234..0ae7da00 100644 --- a/scripts/mobiles/tatooine/malignant_squill.py +++ b/scripts/mobiles/tatooine/malignant_squill.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('malignant_squill') mobileTemplate.setLevel(50) - mobileTemplate.setMinLevel(48) - mobileTemplate.setMaxLevel(52) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/minor_worrt.py b/scripts/mobiles/tatooine/minor_worrt.py index 04eab9e4..3572c732 100644 --- a/scripts/mobiles/tatooine/minor_worrt.py +++ b/scripts/mobiles/tatooine/minor_worrt.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('minor_worrt') mobileTemplate.setLevel(3) - mobileTemplate.setMinLevel(2) - mobileTemplate.setMaxLevel(4) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/modified_battle_droid.py b/scripts/mobiles/tatooine/modified_battle_droid.py index 1ae1b6a3..6cc66256 100644 --- a/scripts/mobiles/tatooine/modified_battle_droid.py +++ b/scripts/mobiles/tatooine/modified_battle_droid.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("modified battle droid") mobileTemplate.setAssistRange(4) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_battle_droid.iff') diff --git a/scripts/mobiles/tatooine/mound_mite.py b/scripts/mobiles/tatooine/mound_mite.py index b4ae2aff..01ac0d32 100644 --- a/scripts/mobiles/tatooine/mound_mite.py +++ b/scripts/mobiles/tatooine/mound_mite.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('mound_mite') mobileTemplate.setLevel(4) - mobileTemplate.setMinLevel(4) - mobileTemplate.setMaxLevel(7) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/mountain_dewback.py b/scripts/mobiles/tatooine/mountain_dewback.py index 478e841e..67dfbdef 100644 --- a/scripts/mobiles/tatooine/mountain_dewback.py +++ b/scripts/mobiles/tatooine/mountain_dewback.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('mountain_dewback') mobileTemplate.setLevel(22) - mobileTemplate.setMinLevel(21) - mobileTemplate.setMaxLevel(23) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/mountain_squill.py b/scripts/mobiles/tatooine/mountain_squill.py index ea413774..ce20af39 100644 --- a/scripts/mobiles/tatooine/mountain_squill.py +++ b/scripts/mobiles/tatooine/mountain_squill.py @@ -27,7 +27,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("squill") mobileTemplate.setAssistRange(10) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_mountain_squill.iff') diff --git a/scripts/mobiles/tatooine/mountain_squill_guardian.py b/scripts/mobiles/tatooine/mountain_squill_guardian.py index d41b1672..4a5e86aa 100644 --- a/scripts/mobiles/tatooine/mountain_squill_guardian.py +++ b/scripts/mobiles/tatooine/mountain_squill_guardian.py @@ -27,7 +27,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("squill") mobileTemplate.setAssistRange(10) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_mountain_squill.iff') diff --git a/scripts/mobiles/tatooine/mountain_squill_hunter.py b/scripts/mobiles/tatooine/mountain_squill_hunter.py index c9a2d87a..4fe728b7 100644 --- a/scripts/mobiles/tatooine/mountain_squill_hunter.py +++ b/scripts/mobiles/tatooine/mountain_squill_hunter.py @@ -27,7 +27,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("squill") mobileTemplate.setAssistRange(10) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_mountain_squill.iff') diff --git a/scripts/mobiles/tatooine/mountain_worrt.py b/scripts/mobiles/tatooine/mountain_worrt.py index 8bfd549b..ba9c6e84 100644 --- a/scripts/mobiles/tatooine/mountain_worrt.py +++ b/scripts/mobiles/tatooine/mountain_worrt.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('mountain_worrt') mobileTemplate.setLevel(19) - mobileTemplate.setMinLevel(18) - mobileTemplate.setMaxLevel(21) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) @@ -29,7 +27,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("mountain worrt") mobileTemplate.setAssistRange(0) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_worrt.iff') diff --git a/scripts/mobiles/tatooine/mutant_womprat.py b/scripts/mobiles/tatooine/mutant_womprat.py index 34bc4fb9..0b260590 100644 --- a/scripts/mobiles/tatooine/mutant_womprat.py +++ b/scripts/mobiles/tatooine/mutant_womprat.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('mutant_womprat') mobileTemplate.setLevel(12) - mobileTemplate.setMinLevel(11) - mobileTemplate.setMaxLevel(13) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) @@ -29,7 +27,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("womprat") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_womp_rat.iff') diff --git a/scripts/mobiles/tatooine/overkreetle.py b/scripts/mobiles/tatooine/overkreetle.py index c7889d55..4fae31dd 100644 --- a/scripts/mobiles/tatooine/overkreetle.py +++ b/scripts/mobiles/tatooine/overkreetle.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('kreetle_over') mobileTemplate.setLevel(11) - mobileTemplate.setMinLevel(10) - mobileTemplate.setMaxLevel(12) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) @@ -27,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("uber kreetle") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_kreetle.iff') diff --git a/scripts/mobiles/tatooine/parry_stormtrooper_dewback.py b/scripts/mobiles/tatooine/parry_stormtrooper_dewback.py index 9c09a3bb..5050524e 100644 --- a/scripts/mobiles/tatooine/parry_stormtrooper_dewback.py +++ b/scripts/mobiles/tatooine/parry_stormtrooper_dewback.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('parry_stormtrooper_dewback') mobileTemplate.setLevel(17) - mobileTemplate.setMinLevel(16) - mobileTemplate.setMaxLevel(18) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/plaque_rat.py b/scripts/mobiles/tatooine/plaque_rat.py index 43fc8b2d..7bfa9450 100644 --- a/scripts/mobiles/tatooine/plaque_rat.py +++ b/scripts/mobiles/tatooine/plaque_rat.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('womprat_plague') mobileTemplate.setLevel(11) - mobileTemplate.setMinLevel(10) - mobileTemplate.setMaxLevel(12) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/razorback_felspur.py b/scripts/mobiles/tatooine/razorback_felspur.py index ded7877a..723e6f0c 100644 --- a/scripts/mobiles/tatooine/razorback_felspur.py +++ b/scripts/mobiles/tatooine/razorback_felspur.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('desert_razorback_felspur') mobileTemplate.setLevel(24) - mobileTemplate.setMinLevel(23) - mobileTemplate.setMaxLevel(25) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/razorclaw.py b/scripts/mobiles/tatooine/razorclaw.py index 7fd5d1b5..7b25d2f5 100644 --- a/scripts/mobiles/tatooine/razorclaw.py +++ b/scripts/mobiles/tatooine/razorclaw.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('elite_desert_razorback') mobileTemplate.setLevel(24) - mobileTemplate.setMinLevel(23) - mobileTemplate.setMaxLevel(25) mobileTemplate.setDifficulty(Difficulty.ELITE) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/rill.py b/scripts/mobiles/tatooine/rill.py index ad2ab02e..ff66a715 100644 --- a/scripts/mobiles/tatooine/rill.py +++ b/scripts/mobiles/tatooine/rill.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('rill') mobileTemplate.setLevel(5) - mobileTemplate.setMinLevel(4) - mobileTemplate.setMaxLevel(6) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/rock_beetle.py b/scripts/mobiles/tatooine/rock_beetle.py index 80b5362d..395c887b 100644 --- a/scripts/mobiles/tatooine/rock_beetle.py +++ b/scripts/mobiles/tatooine/rock_beetle.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("rock beetle") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_rock_beetle.iff') diff --git a/scripts/mobiles/tatooine/rock_beetle1.py b/scripts/mobiles/tatooine/rock_beetle1.py index 97d33dda..e5fd5576 100644 --- a/scripts/mobiles/tatooine/rock_beetle1.py +++ b/scripts/mobiles/tatooine/rock_beetle1.py @@ -11,13 +11,13 @@ def addTemplate(core): mobileTemplate = MobileTemplate() mobileTemplate.setCreatureName('rock_beetle') - mobileTemplate.setLevel(19) + mobileTemplate.setLevel(18) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) mobileTemplate.setMaxSpawnDistance(8) mobileTemplate.setDeathblow(False) - mobileTemplate.setScale(1) + mobileTemplate.setScale(3) mobileTemplate.setMeatType("Insect Meat") mobileTemplate.setMeatAmount(6) mobileTemplate.setHideType("Scaley Hide") @@ -31,7 +31,7 @@ def addTemplate(core): mobileTemplate.setTemplates(templates) weaponTemplates = Vector() - weapontemplate = WeaponTemplate('object/weapon/ranged/creature/shared_creature_spit_small_toxicgreen.iff', WeaponType.UNARMED, 1.0, 6, 'kinetic') + weapontemplate = WeaponTemplate('object/weapon/ranged/creature/shared_creature_spit_small_toxicgreen.iff', WeaponType.UNARMED, 1.0, 24, 'kinetic') weaponTemplates.add(weapontemplate) mobileTemplate.setWeaponTemplateVector(weaponTemplates) diff --git a/scripts/mobiles/tatooine/rockmite.py b/scripts/mobiles/tatooine/rockmite.py index 868dacce..e2f93ab0 100644 --- a/scripts/mobiles/tatooine/rockmite.py +++ b/scripts/mobiles/tatooine/rockmite.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('rockmite') mobileTemplate.setLevel(8) - mobileTemplate.setMinLevel(7) - mobileTemplate.setMaxLevel(9) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/ronto.py b/scripts/mobiles/tatooine/ronto.py index 7b7aa601..940b1ef7 100644 --- a/scripts/mobiles/tatooine/ronto.py +++ b/scripts/mobiles/tatooine/ronto.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('ronto') mobileTemplate.setLevel(7) - mobileTemplate.setMinLevel(16) - mobileTemplate.setMaxLevel(18) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/runted_rill.py b/scripts/mobiles/tatooine/runted_rill.py index 52b55d3e..d54d4d21 100644 --- a/scripts/mobiles/tatooine/runted_rill.py +++ b/scripts/mobiles/tatooine/runted_rill.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('runted_rill') mobileTemplate.setLevel(1) - mobileTemplate.setMinLevel(1) - mobileTemplate.setMaxLevel(3) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/sand_beetle.py b/scripts/mobiles/tatooine/sand_beetle.py index 0a8d99c3..eb3ac748 100644 --- a/scripts/mobiles/tatooine/sand_beetle.py +++ b/scripts/mobiles/tatooine/sand_beetle.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('sand_beetle') mobileTemplate.setLevel(22) - mobileTemplate.setMinLevel(22) - mobileTemplate.setMaxLevel(24) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/sand_splitter_brute.py b/scripts/mobiles/tatooine/sand_splitter_brute.py new file mode 100644 index 00000000..e48a2380 --- /dev/null +++ b/scripts/mobiles/tatooine/sand_splitter_brute.py @@ -0,0 +1,53 @@ +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('tatooine_sand_splitter_brute') + mobileTemplate.setLevel(20) + mobileTemplate.setDifficulty(Difficulty.NORMAL) + + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("sand splitter") + mobileTemplate.setAssistRange(5) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) + + templates = Vector() + templates.add('object/mobile/shared_coa_aclo_elite_slicer_human_f.iff') + templates.add('object/mobile/shared_coa_aclo_saboteur_human_m.iff') + templates.add('object/mobile/shared_dressed_aakuan_defender_human_female_01.iff') + templates.add('object/mobile/shared_dressed_aakuan_defender_human_male_01.iff') + templates.add('object/mobile/shared_dressed_businessman_human_male_01.iff') + templates.add('object/mobile/shared_dressed_combatmedic_trainer_human_female_01.iff') + templates.add('object/mobile/shared_dressed_combatmedic_trainer_human_male_01.iff') + templates.add('object/mobile/shared_dressed_corsec_detective_human_female_01.iff') + templates.add('object/mobile/shared_dressed_corsec_detective_human_male_01.iff') + templates.add('object/mobile/shared_dressed_criminal_smuggler_human_female_01.iff') + templates.add('object/mobile/shared_dressed_criminal_smuggler_human_male_01.iff') + templates.add('object/mobile/shared_zabrak_female.iff') + templates.add('object/mobile/shared_zabrak_male.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_d18.iff', WeaponType.PISTOL, 1.0, 24, 'energy') + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('sand_splitter_brute', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/sand_splitter_knave.py b/scripts/mobiles/tatooine/sand_splitter_knave.py new file mode 100644 index 00000000..cd251f5f --- /dev/null +++ b/scripts/mobiles/tatooine/sand_splitter_knave.py @@ -0,0 +1,54 @@ +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('tatooine_sand_splitter_knave') + mobileTemplate.setLevel(19) + mobileTemplate.setDifficulty(Difficulty.NORMAL) + + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("sand splitter") + mobileTemplate.setAssistRange(5) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) + + + templates = Vector() + templates.add('object/mobile/shared_coa_aclo_elite_slicer_human_f.iff') + templates.add('object/mobile/shared_coa_aclo_saboteur_human_m.iff') + templates.add('object/mobile/shared_dressed_aakuan_defender_human_female_01.iff') + templates.add('object/mobile/shared_dressed_aakuan_defender_human_male_01.iff') + templates.add('object/mobile/shared_dressed_businessman_human_male_01.iff') + templates.add('object/mobile/shared_dressed_combatmedic_trainer_human_female_01.iff') + templates.add('object/mobile/shared_dressed_combatmedic_trainer_human_male_01.iff') + templates.add('object/mobile/shared_dressed_corsec_detective_human_female_01.iff') + templates.add('object/mobile/shared_dressed_corsec_detective_human_male_01.iff') + templates.add('object/mobile/shared_dressed_criminal_smuggler_human_female_01.iff') + templates.add('object/mobile/shared_dressed_criminal_smuggler_human_male_01.iff') + templates.add('object/mobile/shared_zabrak_female.iff') + templates.add('object/mobile/shared_zabrak_male.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_d18.iff', WeaponType.PISTOL, 1.0, 24, 'energy') + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('sand_splitter_knave', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/sand_splitter_ruffian.py b/scripts/mobiles/tatooine/sand_splitter_ruffian.py new file mode 100644 index 00000000..bb2f962f --- /dev/null +++ b/scripts/mobiles/tatooine/sand_splitter_ruffian.py @@ -0,0 +1,53 @@ +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('tatooine_sand_splitter_ruffian') + mobileTemplate.setLevel(20) + mobileTemplate.setDifficulty(Difficulty.NORMAL) + + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("sand splitter") + mobileTemplate.setAssistRange(5) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) + + templates = Vector() + templates.add('object/mobile/shared_coa_aclo_elite_slicer_human_f.iff') + templates.add('object/mobile/shared_coa_aclo_saboteur_human_m.iff') + templates.add('object/mobile/shared_dressed_aakuan_defender_human_female_01.iff') + templates.add('object/mobile/shared_dressed_aakuan_defender_human_male_01.iff') + templates.add('object/mobile/shared_dressed_businessman_human_male_01.iff') + templates.add('object/mobile/shared_dressed_combatmedic_trainer_human_female_01.iff') + templates.add('object/mobile/shared_dressed_combatmedic_trainer_human_male_01.iff') + templates.add('object/mobile/shared_dressed_corsec_detective_human_female_01.iff') + templates.add('object/mobile/shared_dressed_corsec_detective_human_male_01.iff') + templates.add('object/mobile/shared_dressed_criminal_smuggler_human_female_01.iff') + templates.add('object/mobile/shared_dressed_criminal_smuggler_human_male_01.iff') + templates.add('object/mobile/shared_zabrak_female.iff') + templates.add('object/mobile/shared_zabrak_male.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_d18.iff', WeaponType.PISTOL, 1.0, 24, 'energy') + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('sand_splitter_ruffian', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/sandreaver.py b/scripts/mobiles/tatooine/sandreaver.py index 7da69271..4405ce81 100644 --- a/scripts/mobiles/tatooine/sandreaver.py +++ b/scripts/mobiles/tatooine/sandreaver.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('dewback_sandreaver') mobileTemplate.setLevel(18) - mobileTemplate.setMinLevel(17) - mobileTemplate.setMaxLevel(19) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/saul_rouse.py b/scripts/mobiles/tatooine/saul_rouse.py new file mode 100644 index 00000000..cfbf0a99 --- /dev/null +++ b/scripts/mobiles/tatooine/saul_rouse.py @@ -0,0 +1,42 @@ +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('tatooine_sand_splitter_saul_rouse') + mobileTemplate.setLevel(20) + mobileTemplate.setDifficulty(Difficulty.NORMAL) + + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("sand splitter") + mobileTemplate.setAssistRange(5) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) + + templates = Vector() + templates.add('object/mobile/shared_tatooine_sand_splitter_saul_rouse.iff') + + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_d18.iff', WeaponType.PISTOL, 1.0, 24, 'energy') + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('saul_rouse', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/savage_zucca_boar.py b/scripts/mobiles/tatooine/savage_zucca_boar.py index d4868c4b..f7fe965f 100644 --- a/scripts/mobiles/tatooine/savage_zucca_boar.py +++ b/scripts/mobiles/tatooine/savage_zucca_boar.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('elite_zucca_boar') mobileTemplate.setLevel(8) - mobileTemplate.setMinLevel(8) - mobileTemplate.setMaxLevel(9) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/scavenger.py b/scripts/mobiles/tatooine/scavenger.py index 4d983f65..36de8509 100644 --- a/scripts/mobiles/tatooine/scavenger.py +++ b/scripts/mobiles/tatooine/scavenger.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("thug") mobileTemplate.setAssistRange(4) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() diff --git a/scripts/mobiles/tatooine/scyk.py b/scripts/mobiles/tatooine/scyk.py index 55030953..65313883 100644 --- a/scripts/mobiles/tatooine/scyk.py +++ b/scripts/mobiles/tatooine/scyk.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('scyk') mobileTemplate.setLevel(11) - mobileTemplate.setMinLevel(11) - mobileTemplate.setMaxLevel(13) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) @@ -29,7 +27,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("scyk") mobileTemplate.setAssistRange(10) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_scyk.iff') diff --git a/scripts/mobiles/tatooine/sennex_guard.py b/scripts/mobiles/tatooine/sennex_guard.py index 6a343ac4..edfde98b 100644 --- a/scripts/mobiles/tatooine/sennex_guard.py +++ b/scripts/mobiles/tatooine/sennex_guard.py @@ -21,6 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("sennex") mobileTemplate.setAssistRange(5) mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_sennex_pirate_01.iff') diff --git a/scripts/mobiles/tatooine/sennex_hunter.py b/scripts/mobiles/tatooine/sennex_hunter.py index 99c5eed7..cea9dba6 100644 --- a/scripts/mobiles/tatooine/sennex_hunter.py +++ b/scripts/mobiles/tatooine/sennex_hunter.py @@ -21,6 +21,8 @@ def addTemplate(core): mobileTemplate.setSocialGroup("sennex") mobileTemplate.setAssistRange(5) mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) + templates = Vector() templates.add('object/mobile/shared_dressed_sennex_pirate_01.iff') diff --git a/scripts/mobiles/tatooine/sennex_lookout.py b/scripts/mobiles/tatooine/sennex_lookout.py index 7a5b5f9e..e64a6b28 100644 --- a/scripts/mobiles/tatooine/sennex_lookout.py +++ b/scripts/mobiles/tatooine/sennex_lookout.py @@ -21,6 +21,8 @@ def addTemplate(core): mobileTemplate.setSocialGroup("sennex") mobileTemplate.setAssistRange(5) mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) + templates = Vector() templates.add('object/mobile/shared_dressed_sennex_pirate_01.iff') diff --git a/scripts/mobiles/tatooine/sennex_slavemaster.py b/scripts/mobiles/tatooine/sennex_slavemaster.py index a9fae212..24863c00 100644 --- a/scripts/mobiles/tatooine/sennex_slavemaster.py +++ b/scripts/mobiles/tatooine/sennex_slavemaster.py @@ -10,7 +10,7 @@ from java.util import Vector def addTemplate(core): mobileTemplate = MobileTemplate() - mobileTemplate.setCreatureName('sennex_slaver') + mobileTemplate.setCreatureName('sennex_slavemaster') mobileTemplate.setLevel(24) mobileTemplate.setDifficulty(Difficulty.NORMAL) @@ -21,6 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("sennex") mobileTemplate.setAssistRange(5) mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_sennex_pirate_01.iff') @@ -47,5 +48,5 @@ def addTemplate(core): mobileTemplate.setDefaultAttack('rangedShot') mobileTemplate.setAttacks(attacks) - core.spawnService.addMobileTemplate('sennex_slaver', mobileTemplate) + core.spawnService.addMobileTemplate('sennex_slavemaster', mobileTemplate) return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/sennex_slaver.py b/scripts/mobiles/tatooine/sennex_slaver.py index 44fb4789..4bfbefd0 100644 --- a/scripts/mobiles/tatooine/sennex_slaver.py +++ b/scripts/mobiles/tatooine/sennex_slaver.py @@ -10,7 +10,7 @@ from java.util import Vector def addTemplate(core): mobileTemplate = MobileTemplate() - mobileTemplate.setCreatureName('sennex_slavemaster') + mobileTemplate.setCreatureName('sennex_slaver') mobileTemplate.setLevel(22) mobileTemplate.setDifficulty(Difficulty.NORMAL) @@ -21,6 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("sennex") mobileTemplate.setAssistRange(5) mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_sennex_pirate_01.iff') @@ -47,5 +48,5 @@ def addTemplate(core): mobileTemplate.setDefaultAttack('rangedShot') mobileTemplate.setAttacks(attacks) - core.spawnService.addMobileTemplate('sennex_slavemaster', mobileTemplate) + core.spawnService.addMobileTemplate('sennex_slaver', mobileTemplate) return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/sevorrt.py b/scripts/mobiles/tatooine/sevorrt.py index 8728ed4f..9f87e760 100644 --- a/scripts/mobiles/tatooine/sevorrt.py +++ b/scripts/mobiles/tatooine/sevorrt.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('sevorrt') mobileTemplate.setLevel(5) - mobileTemplate.setMinLevel(4) - mobileTemplate.setMaxLevel(6) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/sewer_worrt.py b/scripts/mobiles/tatooine/sewer_worrt.py index cbc62441..72e7a950 100644 --- a/scripts/mobiles/tatooine/sewer_worrt.py +++ b/scripts/mobiles/tatooine/sewer_worrt.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('sewer_worrt') mobileTemplate.setLevel(5) - mobileTemplate.setMinLevel(4) - mobileTemplate.setMaxLevel(6) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/shinn_guard.py b/scripts/mobiles/tatooine/shinn_guard.py index 48950112..8448adea 100644 --- a/scripts/mobiles/tatooine/shinn_guard.py +++ b/scripts/mobiles/tatooine/shinn_guard.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("shinn mugger") mobileTemplate.setAssistRange(5) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_mugger.iff') diff --git a/scripts/mobiles/tatooine/shinn_mugger.py b/scripts/mobiles/tatooine/shinn_mugger.py index 73d7111b..bc860239 100644 --- a/scripts/mobiles/tatooine/shinn_mugger.py +++ b/scripts/mobiles/tatooine/shinn_mugger.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("shinn mugger") mobileTemplate.setAssistRange(5) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_mugger.iff') diff --git a/scripts/mobiles/tatooine/sickly_womprat.py b/scripts/mobiles/tatooine/sickly_womprat.py index b58d0a39..c083fc78 100644 --- a/scripts/mobiles/tatooine/sickly_womprat.py +++ b/scripts/mobiles/tatooine/sickly_womprat.py @@ -11,7 +11,6 @@ def addTemplate(core): mobileTemplate = MobileTemplate() mobileTemplate.setCreatureName('sickly_womprat') - mobileTemplate.setLevel(4) mobileTemplate.setMinLevel(4) mobileTemplate.setMaxLevel(13) mobileTemplate.setDifficulty(Difficulty.NORMAL) diff --git a/scripts/mobiles/tatooine/slum_rat.py b/scripts/mobiles/tatooine/slum_rat.py index b12310c6..ac8a0308 100644 --- a/scripts/mobiles/tatooine/slum_rat.py +++ b/scripts/mobiles/tatooine/slum_rat.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('womprat_city') mobileTemplate.setLevel(5) - mobileTemplate.setMinLevel(4) - mobileTemplate.setMaxLevel(6) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/slum_thief.py b/scripts/mobiles/tatooine/slum_thief.py index 08ee5384..b4b81696 100644 --- a/scripts/mobiles/tatooine/slum_thief.py +++ b/scripts/mobiles/tatooine/slum_thief.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("junk thieves") mobileTemplate.setAssistRange(0) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_human_female.iff') diff --git a/scripts/mobiles/tatooine/snarlfang.py b/scripts/mobiles/tatooine/snarlfang.py index 593b9f5a..0725b177 100644 --- a/scripts/mobiles/tatooine/snarlfang.py +++ b/scripts/mobiles/tatooine/snarlfang.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('elite_bocatt') mobileTemplate.setLevel(17) - mobileTemplate.setMinLevel(17) - mobileTemplate.setMaxLevel(18) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/squill.py b/scripts/mobiles/tatooine/squill.py index 5be20476..25bcb635 100644 --- a/scripts/mobiles/tatooine/squill.py +++ b/scripts/mobiles/tatooine/squill.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('squill') mobileTemplate.setLevel(12) - mobileTemplate.setMinLevel(11) - mobileTemplate.setMaxLevel(13) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/stormtrooper_dewback.py b/scripts/mobiles/tatooine/stormtrooper_dewback.py index 4bf68450..71f4cd78 100644 --- a/scripts/mobiles/tatooine/stormtrooper_dewback.py +++ b/scripts/mobiles/tatooine/stormtrooper_dewback.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('stormtrooper_dewback') mobileTemplate.setLevel(14) - mobileTemplate.setMinLevel(13) - mobileTemplate.setMaxLevel(15) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/sunstained_dunelizard.py b/scripts/mobiles/tatooine/sunstained_dunelizard.py index ddb0d957..a24fa1d1 100644 --- a/scripts/mobiles/tatooine/sunstained_dunelizard.py +++ b/scripts/mobiles/tatooine/sunstained_dunelizard.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('dune_lizard_sunstained') mobileTemplate.setLevel(19) - mobileTemplate.setMinLevel(18) - mobileTemplate.setMaxLevel(20) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/swarming_lesser_dewback.py b/scripts/mobiles/tatooine/swarming_lesser_dewback.py index b6fb3e6b..2fe5c191 100644 --- a/scripts/mobiles/tatooine/swarming_lesser_dewback.py +++ b/scripts/mobiles/tatooine/swarming_lesser_dewback.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('swarming_lesser_dewback') mobileTemplate.setLevel(13) - mobileTemplate.setMinLevel(12) - mobileTemplate.setMaxLevel(14) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) @@ -29,7 +27,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("dewback") mobileTemplate.setAssistRange(10) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_swarming_lesser_dewback.iff') diff --git a/scripts/mobiles/tatooine/swoop_gang_enforcer.py b/scripts/mobiles/tatooine/swoop_gang_enforcer.py index 5e4a86f1..6ad57c52 100644 --- a/scripts/mobiles/tatooine/swoop_gang_enforcer.py +++ b/scripts/mobiles/tatooine/swoop_gang_enforcer.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("niko thug") mobileTemplate.setAssistRange(4) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() diff --git a/scripts/mobiles/tatooine/swoop_gang_punk.py b/scripts/mobiles/tatooine/swoop_gang_punk.py index 811d4d03..ccb6b1c1 100644 --- a/scripts/mobiles/tatooine/swoop_gang_punk.py +++ b/scripts/mobiles/tatooine/swoop_gang_punk.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("niko thug") mobileTemplate.setAssistRange(4) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_criminal_swooper_human_female_01.iff') diff --git a/scripts/mobiles/tatooine/swoop_gang_rogue.py b/scripts/mobiles/tatooine/swoop_gang_rogue.py index 9eb3b426..6d9047f6 100644 --- a/scripts/mobiles/tatooine/swoop_gang_rogue.py +++ b/scripts/mobiles/tatooine/swoop_gang_rogue.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("niko thug") mobileTemplate.setAssistRange(4) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_criminal_swooper_human_female_01.iff') diff --git a/scripts/mobiles/tatooine/swoop_gang_thug.py b/scripts/mobiles/tatooine/swoop_gang_thug.py index 147445db..0f53a877 100644 --- a/scripts/mobiles/tatooine/swoop_gang_thug.py +++ b/scripts/mobiles/tatooine/swoop_gang_thug.py @@ -19,7 +19,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("niko thug") mobileTemplate.setAssistRange(4) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_criminal_swooper_human_female_01.iff') diff --git a/scripts/mobiles/tatooine/tame_rill.py b/scripts/mobiles/tatooine/tame_rill.py index f13f917f..9e22d89b 100644 --- a/scripts/mobiles/tatooine/tame_rill.py +++ b/scripts/mobiles/tatooine/tame_rill.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('tame_rill') mobileTemplate.setLevel(1) - mobileTemplate.setMinLevel(1) - mobileTemplate.setMaxLevel(3) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/tame_womprat.py b/scripts/mobiles/tatooine/tame_womprat.py index ed245a1d..e0196e02 100644 --- a/scripts/mobiles/tatooine/tame_womprat.py +++ b/scripts/mobiles/tatooine/tame_womprat.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('tame_womprat') mobileTemplate.setLevel(2) - mobileTemplate.setMinLevel(1) - mobileTemplate.setMaxLevel(4) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/tame_worrt.py b/scripts/mobiles/tatooine/tame_worrt.py index 51e4192b..df46f335 100644 --- a/scripts/mobiles/tatooine/tame_worrt.py +++ b/scripts/mobiles/tatooine/tame_worrt.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('tame_worrt') mobileTemplate.setLevel(5) - mobileTemplate.setMinLevel(4) - mobileTemplate.setMaxLevel(6) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/tatooine_mynock.py b/scripts/mobiles/tatooine/tatooine_mynock.py index 744cb4f1..b540e344 100644 --- a/scripts/mobiles/tatooine/tatooine_mynock.py +++ b/scripts/mobiles/tatooine/tatooine_mynock.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('tatooine_mynock') mobileTemplate.setLevel(2) - mobileTemplate.setMinLevel(1) - mobileTemplate.setMaxLevel(3) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/tempest_rill.py b/scripts/mobiles/tatooine/tempest_rill.py index cc82a42c..d3f01e31 100644 --- a/scripts/mobiles/tatooine/tempest_rill.py +++ b/scripts/mobiles/tatooine/tempest_rill.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('rill_tempest') mobileTemplate.setLevel(8) - mobileTemplate.setMinLevel(8) - mobileTemplate.setMaxLevel(10) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/tormented_bocatt.py b/scripts/mobiles/tatooine/tormented_bocatt.py index 6e7effd5..2c1230e2 100644 --- a/scripts/mobiles/tatooine/tormented_bocatt.py +++ b/scripts/mobiles/tatooine/tormented_bocatt.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('bocatt_tormented') mobileTemplate.setLevel(18) - mobileTemplate.setMinLevel(17) - mobileTemplate.setMaxLevel(19) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/trandoshan_slaver.py b/scripts/mobiles/tatooine/trandoshan_slaver.py index 9138aad0..3abd3449 100644 --- a/scripts/mobiles/tatooine/trandoshan_slaver.py +++ b/scripts/mobiles/tatooine/trandoshan_slaver.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('ep3_trandoshan_slaver') mobileTemplate.setLevel(4) - mobileTemplate.setMinLevel(1) - mobileTemplate.setMaxLevel(4) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/tusken_bantha.py b/scripts/mobiles/tatooine/tusken_bantha.py index a5e3ca82..5ff1295a 100644 --- a/scripts/mobiles/tatooine/tusken_bantha.py +++ b/scripts/mobiles/tatooine/tusken_bantha.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('feeder_tusken_bantha') mobileTemplate.setLevel(30) - mobileTemplate.setMinLevel(29) - mobileTemplate.setMaxLevel(31) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/tusken_follower.py b/scripts/mobiles/tatooine/tusken_follower.py index cb874a78..7423b710 100644 --- a/scripts/mobiles/tatooine/tusken_follower.py +++ b/scripts/mobiles/tatooine/tusken_follower.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("tusken raider") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() diff --git a/scripts/mobiles/tatooine/tusken_outrider.py b/scripts/mobiles/tatooine/tusken_outrider.py index e01ce81b..450c328f 100644 --- a/scripts/mobiles/tatooine/tusken_outrider.py +++ b/scripts/mobiles/tatooine/tusken_outrider.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("tusken raider") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_tusken_raider.iff') diff --git a/scripts/mobiles/tatooine/tusken_raider_soldier.py b/scripts/mobiles/tatooine/tusken_raider_soldier.py index bc60a686..c46931ee 100644 --- a/scripts/mobiles/tatooine/tusken_raider_soldier.py +++ b/scripts/mobiles/tatooine/tusken_raider_soldier.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('tusken_raider_soldier') mobileTemplate.setLevel(5) - mobileTemplate.setMinLevel(5) - mobileTemplate.setMaxLevel(6) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/tusken_raider_warrior.py b/scripts/mobiles/tatooine/tusken_raider_warrior.py index c2047619..9816ddaa 100644 --- a/scripts/mobiles/tatooine/tusken_raider_warrior.py +++ b/scripts/mobiles/tatooine/tusken_raider_warrior.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('tusken_raider_warrior') mobileTemplate.setLevel(6) - mobileTemplate.setMinLevel(6) - mobileTemplate.setMaxLevel(7) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/tusken_zealot.py b/scripts/mobiles/tatooine/tusken_zealot.py index f6b2d3fd..1127c2e4 100644 --- a/scripts/mobiles/tatooine/tusken_zealot.py +++ b/scripts/mobiles/tatooine/tusken_zealot.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('tusken_raider_zealot') mobileTemplate.setLevel(5) - mobileTemplate.setMinLevel(5) - mobileTemplate.setMaxLevel(6) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/twisted_dewback.py b/scripts/mobiles/tatooine/twisted_dewback.py index 24fd8022..0c7862c1 100644 --- a/scripts/mobiles/tatooine/twisted_dewback.py +++ b/scripts/mobiles/tatooine/twisted_dewback.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('twisted_dewback') mobileTemplate.setLevel(11) - mobileTemplate.setMinLevel(10) - mobileTemplate.setMaxLevel(12) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/twisted_rill.py b/scripts/mobiles/tatooine/twisted_rill.py index 84273b57..11815373 100644 --- a/scripts/mobiles/tatooine/twisted_rill.py +++ b/scripts/mobiles/tatooine/twisted_rill.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('twisted_rill') mobileTemplate.setLevel(11) - mobileTemplate.setMinLevel(10) - mobileTemplate.setMaxLevel(13) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/twisted_womprat.py b/scripts/mobiles/tatooine/twisted_womprat.py index 9d795994..e669a4b1 100644 --- a/scripts/mobiles/tatooine/twisted_womprat.py +++ b/scripts/mobiles/tatooine/twisted_womprat.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('twisted_womprat') mobileTemplate.setLevel(11) - mobileTemplate.setMinLevel(10) - mobileTemplate.setMaxLevel(12) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/vaigonn_shinn.py b/scripts/mobiles/tatooine/vaigonn_shinn.py index 37d57419..0e3b0afa 100644 --- a/scripts/mobiles/tatooine/vaigonn_shinn.py +++ b/scripts/mobiles/tatooine/vaigonn_shinn.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("shinn mugger") mobileTemplate.setAssistRange(4) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_commoner_tatooine_nikto_male_01.iff') diff --git a/scripts/mobiles/tatooine/valarian_bookie.py b/scripts/mobiles/tatooine/valarian_bookie.py new file mode 100644 index 00000000..6ec31d9f --- /dev/null +++ b/scripts/mobiles/tatooine/valarian_bookie.py @@ -0,0 +1,47 @@ +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('tatooine_valarian_bookie') + mobileTemplate.setLevel(18) + mobileTemplate.setDifficulty(Difficulty.NORMAL) + + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("valarian") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_valarian_thug_arcona.iff') # need to find correct template + templates.add('object/mobile/shared_dressed_valarian_thug_bith_female.iff') + templates.add('object/mobile/shared_dressed_valarian_thug_chiss_female.iff') + templates.add('object/mobile/shared_dressed_valarian_thug_gotal.iff') + templates.add('object/mobile/shared_dressed_valarian_thug_gran.iff') + templates.add('object/mobile/shared_dressed_valarian_thug_naut.iff') + templates.add('object/mobile/shared_dressed_valarian_thug_weequay.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_cdef.iff', WeaponType.PISTOL, 1.0, 15, 'energy') + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotpistol') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('valarian_bookie', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/valarian_crew_chief.py b/scripts/mobiles/tatooine/valarian_crew_chief.py index 72bfb349..4ab331a6 100644 --- a/scripts/mobiles/tatooine/valarian_crew_chief.py +++ b/scripts/mobiles/tatooine/valarian_crew_chief.py @@ -11,7 +11,7 @@ def addTemplate(core): mobileTemplate = MobileTemplate() mobileTemplate.setCreatureName('valarian_crew_chief') - mobileTemplate.setLevel(13) + mobileTemplate.setLevel(20) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) @@ -36,5 +36,5 @@ def addTemplate(core): mobileTemplate.setDefaultAttack('rangedShotpistol') mobileTemplate.setAttacks(attacks) - core.spawnService.addMobileTemplate('valarian_chief', mobileTemplate) + core.spawnService.addMobileTemplate('valarian_crew_chief', mobileTemplate) return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/valarian_depot_boss.py b/scripts/mobiles/tatooine/valarian_depot_boss.py index 0745dd3c..e10a19c3 100644 --- a/scripts/mobiles/tatooine/valarian_depot_boss.py +++ b/scripts/mobiles/tatooine/valarian_depot_boss.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("valarian") mobileTemplate.setAssistRange(4) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() diff --git a/scripts/mobiles/tatooine/valarian_depot_foreman.py b/scripts/mobiles/tatooine/valarian_depot_foreman.py index 49857e62..a6a9ad1a 100644 --- a/scripts/mobiles/tatooine/valarian_depot_foreman.py +++ b/scripts/mobiles/tatooine/valarian_depot_foreman.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("valarian") mobileTemplate.setAssistRange(4) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() diff --git a/scripts/mobiles/tatooine/valarian_depot_guard.py b/scripts/mobiles/tatooine/valarian_depot_guard.py index abcb1db4..21b4cfed 100644 --- a/scripts/mobiles/tatooine/valarian_depot_guard.py +++ b/scripts/mobiles/tatooine/valarian_depot_guard.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("valarian") mobileTemplate.setAssistRange(4) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() diff --git a/scripts/mobiles/tatooine/valarian_depot_scout.py b/scripts/mobiles/tatooine/valarian_depot_scout.py index d0ec9222..d54c7abd 100644 --- a/scripts/mobiles/tatooine/valarian_depot_scout.py +++ b/scripts/mobiles/tatooine/valarian_depot_scout.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("valarian") mobileTemplate.setAssistRange(4) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() diff --git a/scripts/mobiles/tatooine/valarian_depot_swooper.py b/scripts/mobiles/tatooine/valarian_depot_swooper.py index 4f7ef586..b40e7c32 100644 --- a/scripts/mobiles/tatooine/valarian_depot_swooper.py +++ b/scripts/mobiles/tatooine/valarian_depot_swooper.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("valarian") mobileTemplate.setAssistRange(4) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() diff --git a/scripts/mobiles/tatooine/valarian_depot_worker.py b/scripts/mobiles/tatooine/valarian_depot_worker.py index b910f1fd..4e4c0079 100644 --- a/scripts/mobiles/tatooine/valarian_depot_worker.py +++ b/scripts/mobiles/tatooine/valarian_depot_worker.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("valarian") mobileTemplate.setAssistRange(4) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() diff --git a/scripts/mobiles/tatooine/valarian_enforcer.py b/scripts/mobiles/tatooine/valarian_enforcer.py index 48e6bc23..bd27e0e7 100644 --- a/scripts/mobiles/tatooine/valarian_enforcer.py +++ b/scripts/mobiles/tatooine/valarian_enforcer.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("valarian") mobileTemplate.setAssistRange(4) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() diff --git a/scripts/mobiles/tatooine/valarian_henchman.py b/scripts/mobiles/tatooine/valarian_henchman.py index 9c7bda15..d89ba74b 100644 --- a/scripts/mobiles/tatooine/valarian_henchman.py +++ b/scripts/mobiles/tatooine/valarian_henchman.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("valarian") mobileTemplate.setAssistRange(4) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() diff --git a/scripts/mobiles/tatooine/valarian_mechanic.py b/scripts/mobiles/tatooine/valarian_mechanic.py index 0647a189..cffa628a 100644 --- a/scripts/mobiles/tatooine/valarian_mechanic.py +++ b/scripts/mobiles/tatooine/valarian_mechanic.py @@ -11,7 +11,7 @@ def addTemplate(core): mobileTemplate = MobileTemplate() mobileTemplate.setCreatureName('valarian_mechanic') - mobileTemplate.setLevel(13) + mobileTemplate.setLevel(18) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("valarian") mobileTemplate.setAssistRange(4) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() diff --git a/scripts/mobiles/tatooine/valarian_pod_racer.py b/scripts/mobiles/tatooine/valarian_pod_racer.py index 9cf03478..e2cfe1b8 100644 --- a/scripts/mobiles/tatooine/valarian_pod_racer.py +++ b/scripts/mobiles/tatooine/valarian_pod_racer.py @@ -11,7 +11,7 @@ def addTemplate(core): mobileTemplate = MobileTemplate() mobileTemplate.setCreatureName('valarian_pod_racer') - mobileTemplate.setLevel(13) + mobileTemplate.setLevel(18) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/valarian_scout.py b/scripts/mobiles/tatooine/valarian_scout.py index 0e7dcc0d..dce1a372 100644 --- a/scripts/mobiles/tatooine/valarian_scout.py +++ b/scripts/mobiles/tatooine/valarian_scout.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("valarian") mobileTemplate.setAssistRange(4) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() diff --git a/scripts/mobiles/tatooine/valarian_shuttle_guard.py b/scripts/mobiles/tatooine/valarian_shuttle_guard.py index 07af7c3c..858e2ae2 100644 --- a/scripts/mobiles/tatooine/valarian_shuttle_guard.py +++ b/scripts/mobiles/tatooine/valarian_shuttle_guard.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('valarian_swooper_shuttle') mobileTemplate.setLevel(18) - mobileTemplate.setMinLevel(17) - mobileTemplate.setMaxLevel(22) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) @@ -23,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("valarian") mobileTemplate.setAssistRange(4) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() diff --git a/scripts/mobiles/tatooine/valarian_soldier.py b/scripts/mobiles/tatooine/valarian_soldier.py new file mode 100644 index 00000000..6d448733 --- /dev/null +++ b/scripts/mobiles/tatooine/valarian_soldier.py @@ -0,0 +1,46 @@ +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('tatooine_valarian_soldier') + mobileTemplate.setLevel(18) + mobileTemplate.setDifficulty(Difficulty.NORMAL) + + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("valarian") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_valarian_thug.iff') + templates.add('object/mobile/shared_dressed_tatooine_valarian_scout.iff') + templates.add('object/mobile/shared_dressed_tatooine_valarian_swooper.iff') + templates.add('object/mobile/shared_dressed_tatooine_valarian_henchman.iff') + templates.add('object/mobile/shared_dressed_tatooine_valarian_enforcer.iff') + templates.add('object/mobile/shared_dressed_tatooine_valarian_compound_guard.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_cdef.iff', WeaponType.PISTOL, 1.0, 15, 'energy') + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotpistol') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('valarian_soldier', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/valarian_swooper.py b/scripts/mobiles/tatooine/valarian_swooper.py index e98762a9..39a51d3e 100644 --- a/scripts/mobiles/tatooine/valarian_swooper.py +++ b/scripts/mobiles/tatooine/valarian_swooper.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("valarian") mobileTemplate.setAssistRange(4) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() diff --git a/scripts/mobiles/tatooine/valarian_thief.py b/scripts/mobiles/tatooine/valarian_thief.py index 32da20f0..55fb1d8e 100644 --- a/scripts/mobiles/tatooine/valarian_thief.py +++ b/scripts/mobiles/tatooine/valarian_thief.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("valarian") mobileTemplate.setAssistRange(4) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() diff --git a/scripts/mobiles/tatooine/valarian_thug.py b/scripts/mobiles/tatooine/valarian_thug.py index 83011c5e..b6cd226a 100644 --- a/scripts/mobiles/tatooine/valarian_thug.py +++ b/scripts/mobiles/tatooine/valarian_thug.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("valarian") mobileTemplate.setAssistRange(4) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() diff --git a/scripts/mobiles/tatooine/variegated_womprat.py b/scripts/mobiles/tatooine/variegated_womprat.py index 5a0c9dd0..3a3e5fbe 100644 --- a/scripts/mobiles/tatooine/variegated_womprat.py +++ b/scripts/mobiles/tatooine/variegated_womprat.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('variegated_womprat') mobileTemplate.setLevel(12) - mobileTemplate.setMinLevel(11) - mobileTemplate.setMaxLevel(14) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) @@ -29,7 +27,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("variegated womprat") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_variegated_womp_rat.iff') diff --git a/scripts/mobiles/tatooine/vicious_rill.py b/scripts/mobiles/tatooine/vicious_rill.py index c87c30e2..526634e8 100644 --- a/scripts/mobiles/tatooine/vicious_rill.py +++ b/scripts/mobiles/tatooine/vicious_rill.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('vicious_rill') mobileTemplate.setLevel(3) - mobileTemplate.setMinLevel(2) - mobileTemplate.setMaxLevel(4) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/volatile_scyk.py b/scripts/mobiles/tatooine/volatile_scyk.py index cb905448..82e0c614 100644 --- a/scripts/mobiles/tatooine/volatile_scyk.py +++ b/scripts/mobiles/tatooine/volatile_scyk.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('scyk_volatile') mobileTemplate.setLevel(12) - mobileTemplate.setMinLevel(11) - mobileTemplate.setMaxLevel(13) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/wasteland_cupa.py b/scripts/mobiles/tatooine/wasteland_cupa.py index 75ee7f84..09c58791 100644 --- a/scripts/mobiles/tatooine/wasteland_cupa.py +++ b/scripts/mobiles/tatooine/wasteland_cupa.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('wasteland_cu_pa') mobileTemplate.setLevel(20) - mobileTemplate.setMinLevel(19) - mobileTemplate.setMaxLevel(21) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/water_thief.py b/scripts/mobiles/tatooine/water_thief.py index 216e072b..b7b264c4 100644 --- a/scripts/mobiles/tatooine/water_thief.py +++ b/scripts/mobiles/tatooine/water_thief.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("thug") mobileTemplate.setAssistRange(4) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_tatooine_moisture_thief.iff') diff --git a/scripts/mobiles/tatooine/wayfar_spy.py b/scripts/mobiles/tatooine/wayfar_spy.py new file mode 100644 index 00000000..1d980f3f --- /dev/null +++ b/scripts/mobiles/tatooine/wayfar_spy.py @@ -0,0 +1,50 @@ +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('tatooine_wayfar_spy') + mobileTemplate.setLevel(19) + mobileTemplate.setDifficulty(Difficulty.NORMAL) + + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("wayfar spy") + mobileTemplate.setAssistRange(3) + mobileTemplate.setStalker(False) + #mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) + + + templates = Vector() + templates.add('object/mobile/shared_moncal_male.iff') + templates.add('object/mobile/shared_moncal_female.iff') + templates.add('object/mobile/shared_rodian_male.iff') + templates.add('object/mobile/shared_rofian_female.iff') + templates.add('object/mobile/shared_zabrak_male.iff') + templates.add('object/mobile/shared_zabrak_female.iff') + templates.add('object/mobile/shared_human_male.iff') + templates.add('object/mobile/shared_human_female.iff') + templates.add('object/mobile/shared_sullustan_male.iff') + templates.add('object/mobile/shared_sullustan_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_cdef.iff', WeaponType.PISTOL, 1.0, 15, 'energy') + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotpistol') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('wayfar_spy', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/white_thranta_manager.py b/scripts/mobiles/tatooine/white_thranta_manager.py index aa3897a5..78bf8bfc 100644 --- a/scripts/mobiles/tatooine/white_thranta_manager.py +++ b/scripts/mobiles/tatooine/white_thranta_manager.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("whitethranta") mobileTemplate.setAssistRange(3) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() diff --git a/scripts/mobiles/tatooine/white_thranta_security_captain.py b/scripts/mobiles/tatooine/white_thranta_security_captain.py index 0e1f6943..5e3520ec 100644 --- a/scripts/mobiles/tatooine/white_thranta_security_captain.py +++ b/scripts/mobiles/tatooine/white_thranta_security_captain.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("whitethranta") mobileTemplate.setAssistRange(5) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_tatooine_opening_wh_guard.iff') diff --git a/scripts/mobiles/tatooine/white_thranta_security_elite.py b/scripts/mobiles/tatooine/white_thranta_security_elite.py index 76fe94f2..8933eab0 100644 --- a/scripts/mobiles/tatooine/white_thranta_security_elite.py +++ b/scripts/mobiles/tatooine/white_thranta_security_elite.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("whitethranta") mobileTemplate.setAssistRange(5) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_tatooine_opening_wh_guard.iff') diff --git a/scripts/mobiles/tatooine/white_thranta_security_officer.py b/scripts/mobiles/tatooine/white_thranta_security_officer.py index af779f78..0117642f 100644 --- a/scripts/mobiles/tatooine/white_thranta_security_officer.py +++ b/scripts/mobiles/tatooine/white_thranta_security_officer.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("whitethranta") mobileTemplate.setAssistRange(0) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_tatooine_opening_wh_guard.iff') diff --git a/scripts/mobiles/tatooine/white_thranta_specialist.py b/scripts/mobiles/tatooine/white_thranta_specialist.py index 8567b2f2..6b6c773c 100644 --- a/scripts/mobiles/tatooine/white_thranta_specialist.py +++ b/scripts/mobiles/tatooine/white_thranta_specialist.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("whitethranta") mobileTemplate.setAssistRange(3) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_tatooine_opening_wh_guard.iff') diff --git a/scripts/mobiles/tatooine/white_thranta_technican.py b/scripts/mobiles/tatooine/white_thranta_technican.py index df3be1de..f53b4182 100644 --- a/scripts/mobiles/tatooine/white_thranta_technican.py +++ b/scripts/mobiles/tatooine/white_thranta_technican.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("whitethranta") mobileTemplate.setAssistRange(0) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_warren_scientist_s01.iff') diff --git a/scripts/mobiles/tatooine/wild_bladeback_boar.py b/scripts/mobiles/tatooine/wild_bladeback_boar.py index 5b278ab8..71440f3e 100644 --- a/scripts/mobiles/tatooine/wild_bladeback_boar.py +++ b/scripts/mobiles/tatooine/wild_bladeback_boar.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('quest_hero_of_tatooine_ferocious_beast') mobileTemplate.setLevel(40) - mobileTemplate.setMinLevel(39) - mobileTemplate.setMaxLevel(41) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/wild_dune_boar.py b/scripts/mobiles/tatooine/wild_dune_boar.py index 718dec0a..cb516041 100644 --- a/scripts/mobiles/tatooine/wild_dune_boar.py +++ b/scripts/mobiles/tatooine/wild_dune_boar.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('wild_dune_boar') mobileTemplate.setLevel(50) - mobileTemplate.setMinLevel(49) - mobileTemplate.setMaxLevel(51) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/wild_zucca_boar.py b/scripts/mobiles/tatooine/wild_zucca_boar.py new file mode 100644 index 00000000..d48d7a1e --- /dev/null +++ b/scripts/mobiles/tatooine/wild_zucca_boar.py @@ -0,0 +1,46 @@ +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('zucca_boar_porcellus') + mobileTemplate.setLevel(19) + mobileTemplate.setDifficulty(Difficulty.NORMAL) + + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(65) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(40) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(25) + mobileTemplate.setSocialGroup("zucca boar") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) + + templates = Vector() + templates.add('object/mobile/shared_zucca_boar.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('wild_zucca_boar', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/womprat.py b/scripts/mobiles/tatooine/womprat.py index 5517dd86..aa52b641 100644 --- a/scripts/mobiles/tatooine/womprat.py +++ b/scripts/mobiles/tatooine/womprat.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('womprat') mobileTemplate.setLevel(4) - mobileTemplate.setMinLevel(3) - mobileTemplate.setMaxLevel(6) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/wonderous_cupa.py b/scripts/mobiles/tatooine/wonderous_cupa.py index 9606da33..ee747842 100644 --- a/scripts/mobiles/tatooine/wonderous_cupa.py +++ b/scripts/mobiles/tatooine/wonderous_cupa.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('cu_pa_wonderous') mobileTemplate.setLevel(12) - mobileTemplate.setMinLevel(11) - mobileTemplate.setMaxLevel(13) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/worrt.py b/scripts/mobiles/tatooine/worrt.py index f4b4e06b..d8c52b70 100644 --- a/scripts/mobiles/tatooine/worrt.py +++ b/scripts/mobiles/tatooine/worrt.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('worrt') mobileTemplate.setLevel(5) - mobileTemplate.setMinLevel(4) - mobileTemplate.setMaxLevel(6) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/worrt_gutbuster.py b/scripts/mobiles/tatooine/worrt_gutbuster.py index b3e58711..b9d02a3c 100644 --- a/scripts/mobiles/tatooine/worrt_gutbuster.py +++ b/scripts/mobiles/tatooine/worrt_gutbuster.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('worrt_gutbuster') mobileTemplate.setLevel(13) - mobileTemplate.setMinLevel(12) - mobileTemplate.setMaxLevel(14) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/tatooine/young_mountain_squill.py b/scripts/mobiles/tatooine/young_mountain_squill.py index 4eea3f77..99cfff82 100644 --- a/scripts/mobiles/tatooine/young_mountain_squill.py +++ b/scripts/mobiles/tatooine/young_mountain_squill.py @@ -27,7 +27,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("squill") mobileTemplate.setAssistRange(0) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() diff --git a/scripts/mobiles/tatooine/zucca_boar.py b/scripts/mobiles/tatooine/zucca_boar.py index 9cf3cbaa..ff4c3f95 100644 --- a/scripts/mobiles/tatooine/zucca_boar.py +++ b/scripts/mobiles/tatooine/zucca_boar.py @@ -12,8 +12,6 @@ def addTemplate(core): mobileTemplate.setCreatureName('zucca_boar') mobileTemplate.setLevel(8) - mobileTemplate.setMinLevel(7) - mobileTemplate.setMaxLevel(9) mobileTemplate.setDifficulty(Difficulty.NORMAL) mobileTemplate.setMinSpawnDistance(4) diff --git a/scripts/mobiles/yavin4/angler.py b/scripts/mobiles/yavin4/angler.py index 992b9ded..1712de7c 100644 --- a/scripts/mobiles/yavin4/angler.py +++ b/scripts/mobiles/yavin4/angler.py @@ -23,7 +23,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("angler") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_angler.iff') diff --git a/scripts/mobiles/yavin4/angler_recluse.py b/scripts/mobiles/yavin4/angler_recluse.py index 8979c70b..e32f1ad0 100644 --- a/scripts/mobiles/yavin4/angler_recluse.py +++ b/scripts/mobiles/yavin4/angler_recluse.py @@ -23,7 +23,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("angler") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_angler.iff') diff --git a/scripts/mobiles/yavin4/blood_fanged_gackle_bat.py b/scripts/mobiles/yavin4/blood_fanged_gackle_bat.py index 4084681d..3e6d4b12 100644 --- a/scripts/mobiles/yavin4/blood_fanged_gackle_bat.py +++ b/scripts/mobiles/yavin4/blood_fanged_gackle_bat.py @@ -27,7 +27,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("gacklebat") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_gackle.iff') diff --git a/scripts/mobiles/yavin4/choku_hunter.py b/scripts/mobiles/yavin4/choku_hunter.py index 0483d436..3de50602 100644 --- a/scripts/mobiles/yavin4/choku_hunter.py +++ b/scripts/mobiles/yavin4/choku_hunter.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("choku") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_choku.iff') diff --git a/scripts/mobiles/yavin4/choku_male.py b/scripts/mobiles/yavin4/choku_male.py index 7d485dc5..0d03cf1a 100644 --- a/scripts/mobiles/yavin4/choku_male.py +++ b/scripts/mobiles/yavin4/choku_male.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("choku") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_choku.iff') diff --git a/scripts/mobiles/yavin4/feral_mutant_gackle_stalker.py b/scripts/mobiles/yavin4/feral_mutant_gackle_stalker.py index d0ad75b9..b2e93bdc 100644 --- a/scripts/mobiles/yavin4/feral_mutant_gackle_stalker.py +++ b/scripts/mobiles/yavin4/feral_mutant_gackle_stalker.py @@ -27,7 +27,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("gacklebat") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_gackle_bat_hue.iff') diff --git a/scripts/mobiles/yavin4/frenzied_choku.py b/scripts/mobiles/yavin4/frenzied_choku.py index 9e939e84..0b31a2a9 100644 --- a/scripts/mobiles/yavin4/frenzied_choku.py +++ b/scripts/mobiles/yavin4/frenzied_choku.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("choku") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_choku.iff') diff --git a/scripts/mobiles/yavin4/gackle_bat.py b/scripts/mobiles/yavin4/gackle_bat.py index d32e7b97..35b0c642 100644 --- a/scripts/mobiles/yavin4/gackle_bat.py +++ b/scripts/mobiles/yavin4/gackle_bat.py @@ -27,7 +27,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("gacklebat") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_gackle_bat.iff') diff --git a/scripts/mobiles/yavin4/gackle_bat_hunter.py b/scripts/mobiles/yavin4/gackle_bat_hunter.py index a658a998..86e83159 100644 --- a/scripts/mobiles/yavin4/gackle_bat_hunter.py +++ b/scripts/mobiles/yavin4/gackle_bat_hunter.py @@ -27,7 +27,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("gacklebat") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_gackle_bat.iff') diff --git a/scripts/mobiles/yavin4/gackle_bat_mymidon_lord.py b/scripts/mobiles/yavin4/gackle_bat_mymidon_lord.py index b57312d7..0cc511e9 100644 --- a/scripts/mobiles/yavin4/gackle_bat_mymidon_lord.py +++ b/scripts/mobiles/yavin4/gackle_bat_mymidon_lord.py @@ -27,7 +27,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("gacklebat") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_giant_gackle_bat.iff') diff --git a/scripts/mobiles/yavin4/geonosian_bunker/enhanced_gaping_spider.py b/scripts/mobiles/yavin4/geonosian_bunker/enhanced_gaping_spider.py index a2099726..86e86413 100644 --- a/scripts/mobiles/yavin4/geonosian_bunker/enhanced_gaping_spider.py +++ b/scripts/mobiles/yavin4/geonosian_bunker/enhanced_gaping_spider.py @@ -23,7 +23,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("geonosian bunker") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_gaping_spider_hue.iff') diff --git a/scripts/mobiles/yavin4/geonosian_bunker/enhanced_kliknik.py b/scripts/mobiles/yavin4/geonosian_bunker/enhanced_kliknik.py index eafdf77c..93191482 100644 --- a/scripts/mobiles/yavin4/geonosian_bunker/enhanced_kliknik.py +++ b/scripts/mobiles/yavin4/geonosian_bunker/enhanced_kliknik.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("geonosian bunker") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_kliknik_hue.iff') diff --git a/scripts/mobiles/yavin4/geonosian_bunker/enhanced_kwi.py b/scripts/mobiles/yavin4/geonosian_bunker/enhanced_kwi.py index a8dcafb7..bcecc93e 100644 --- a/scripts/mobiles/yavin4/geonosian_bunker/enhanced_kwi.py +++ b/scripts/mobiles/yavin4/geonosian_bunker/enhanced_kwi.py @@ -27,7 +27,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("geonosian bunker") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_kwi_hue.iff') diff --git a/scripts/mobiles/yavin4/geonosian_bunker/geonosian_acklay_bunker_boss.py b/scripts/mobiles/yavin4/geonosian_bunker/geonosian_acklay_bunker_boss.py index d144bdf9..7ab22275 100644 --- a/scripts/mobiles/yavin4/geonosian_bunker/geonosian_acklay_bunker_boss.py +++ b/scripts/mobiles/yavin4/geonosian_bunker/geonosian_acklay_bunker_boss.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("geonosian bunker") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_acklay.iff') diff --git a/scripts/mobiles/yavin4/geonosian_bunker/geonosian_crazed_guard.py b/scripts/mobiles/yavin4/geonosian_bunker/geonosian_crazed_guard.py index 34517cf9..3099c81b 100644 --- a/scripts/mobiles/yavin4/geonosian_bunker/geonosian_crazed_guard.py +++ b/scripts/mobiles/yavin4/geonosian_bunker/geonosian_crazed_guard.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("geonosian bunker") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_geonosian_warrior_01.iff') diff --git a/scripts/mobiles/yavin4/geonosian_bunker/geonosian_droideka_crazed.py b/scripts/mobiles/yavin4/geonosian_bunker/geonosian_droideka_crazed.py index 4e4cb935..e9f4bbb6 100644 --- a/scripts/mobiles/yavin4/geonosian_bunker/geonosian_droideka_crazed.py +++ b/scripts/mobiles/yavin4/geonosian_bunker/geonosian_droideka_crazed.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("geonosian bunker") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_droideka.iff') diff --git a/scripts/mobiles/yavin4/geonosian_bunker/geonosian_scientist.py b/scripts/mobiles/yavin4/geonosian_bunker/geonosian_scientist.py index db281ffd..47a012c4 100644 --- a/scripts/mobiles/yavin4/geonosian_bunker/geonosian_scientist.py +++ b/scripts/mobiles/yavin4/geonosian_bunker/geonosian_scientist.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("geonosian bunker") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_geonosian_scientist_01.iff') diff --git a/scripts/mobiles/yavin4/geonosian_bunker/geonosian_technical_assistant.py b/scripts/mobiles/yavin4/geonosian_bunker/geonosian_technical_assistant.py index 0d8a38d8..0fbaac71 100644 --- a/scripts/mobiles/yavin4/geonosian_bunker/geonosian_technical_assistant.py +++ b/scripts/mobiles/yavin4/geonosian_bunker/geonosian_technical_assistant.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("geonosian bunker") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_geonosian_warrior_01.iff') diff --git a/scripts/mobiles/yavin4/geonosian_bunker/geonosian_worker.py b/scripts/mobiles/yavin4/geonosian_bunker/geonosian_worker.py index b96a43e8..7b91c620 100644 --- a/scripts/mobiles/yavin4/geonosian_bunker/geonosian_worker.py +++ b/scripts/mobiles/yavin4/geonosian_bunker/geonosian_worker.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("geonosian bunker") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_geonosian_commoner_01.iff') diff --git a/scripts/mobiles/yavin4/geonosian_bunker/imperial_observer.py b/scripts/mobiles/yavin4/geonosian_bunker/imperial_observer.py index 65193e9c..dbdda89d 100644 --- a/scripts/mobiles/yavin4/geonosian_bunker/imperial_observer.py +++ b/scripts/mobiles/yavin4/geonosian_bunker/imperial_observer.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("geonosian bunker") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_imperial_officer_m.iff') diff --git a/scripts/mobiles/yavin4/geonosian_bunker/mercenary_sentry.py b/scripts/mobiles/yavin4/geonosian_bunker/mercenary_sentry.py index da7faed4..0463ee7a 100644 --- a/scripts/mobiles/yavin4/geonosian_bunker/mercenary_sentry.py +++ b/scripts/mobiles/yavin4/geonosian_bunker/mercenary_sentry.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("geonosian bunker") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_mercenary_elite_hum_f.iff') diff --git a/scripts/mobiles/yavin4/giant_angler.py b/scripts/mobiles/yavin4/giant_angler.py index 9a14108b..04c9130c 100644 --- a/scripts/mobiles/yavin4/giant_angler.py +++ b/scripts/mobiles/yavin4/giant_angler.py @@ -23,7 +23,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("angler") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_giant_angler.iff') diff --git a/scripts/mobiles/yavin4/giant_crystal_snake.py b/scripts/mobiles/yavin4/giant_crystal_snake.py index db4f2468..7e40019c 100644 --- a/scripts/mobiles/yavin4/giant_crystal_snake.py +++ b/scripts/mobiles/yavin4/giant_crystal_snake.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("crystal snake") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_giant_crystal_snake.iff') diff --git a/scripts/mobiles/yavin4/giant_gackle_bat.py b/scripts/mobiles/yavin4/giant_gackle_bat.py index bab98658..4fd3f100 100644 --- a/scripts/mobiles/yavin4/giant_gackle_bat.py +++ b/scripts/mobiles/yavin4/giant_gackle_bat.py @@ -27,7 +27,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("gacklebat") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_giant_gackle_bat.iff') diff --git a/scripts/mobiles/yavin4/hutt_expeditionary_force_leader.py b/scripts/mobiles/yavin4/hutt_expeditionary_force_leader.py index f82ccd6c..2e8b9201 100644 --- a/scripts/mobiles/yavin4/hutt_expeditionary_force_leader.py +++ b/scripts/mobiles/yavin4/hutt_expeditionary_force_leader.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("hutt") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_hutt_expedition_force_leader.iff') diff --git a/scripts/mobiles/yavin4/hutt_expeditionary_force_member.py b/scripts/mobiles/yavin4/hutt_expeditionary_force_member.py index 71d6126c..6bf9cd68 100644 --- a/scripts/mobiles/yavin4/hutt_expeditionary_force_member.py +++ b/scripts/mobiles/yavin4/hutt_expeditionary_force_member.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("hutt") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_hutt_expedition_force_member.iff') diff --git a/scripts/mobiles/yavin4/hutt_expeditionary_force_surveyor.py b/scripts/mobiles/yavin4/hutt_expeditionary_force_surveyor.py index 57dc8533..23142fe2 100644 --- a/scripts/mobiles/yavin4/hutt_expeditionary_force_surveyor.py +++ b/scripts/mobiles/yavin4/hutt_expeditionary_force_surveyor.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("hutt") mobileTemplate.setAssistRange(6) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_hutt_medic1_zabrak_female_01..iff') diff --git a/scripts/mobiles/yavin4/kai_tok_bloodreaver.py b/scripts/mobiles/yavin4/kai_tok_bloodreaver.py index 1f77e738..3f796999 100644 --- a/scripts/mobiles/yavin4/kai_tok_bloodreaver.py +++ b/scripts/mobiles/yavin4/kai_tok_bloodreaver.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("kai tok") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_kai_tok.iff') diff --git a/scripts/mobiles/yavin4/kai_tok_prowler.py b/scripts/mobiles/yavin4/kai_tok_prowler.py index 9451219b..68f9390d 100644 --- a/scripts/mobiles/yavin4/kai_tok_prowler.py +++ b/scripts/mobiles/yavin4/kai_tok_prowler.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("kai tok") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_kai_tok.iff') diff --git a/scripts/mobiles/yavin4/kai_tok_scavenger.py b/scripts/mobiles/yavin4/kai_tok_scavenger.py index ec9f9b0f..18732e46 100644 --- a/scripts/mobiles/yavin4/kai_tok_scavenger.py +++ b/scripts/mobiles/yavin4/kai_tok_scavenger.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("kai tok") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_kai_tok.iff') diff --git a/scripts/mobiles/yavin4/kai_tok_slayer.py b/scripts/mobiles/yavin4/kai_tok_slayer.py index ab14793e..9f7ac5bf 100644 --- a/scripts/mobiles/yavin4/kai_tok_slayer.py +++ b/scripts/mobiles/yavin4/kai_tok_slayer.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("kai tok") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_kai_tok.iff') diff --git a/scripts/mobiles/yavin4/kliknik.py b/scripts/mobiles/yavin4/kliknik.py index 6fffb8a8..91af4402 100644 --- a/scripts/mobiles/yavin4/kliknik.py +++ b/scripts/mobiles/yavin4/kliknik.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("kliknik") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_kliknik.iff') diff --git a/scripts/mobiles/yavin4/kliknik_dark_defender.py b/scripts/mobiles/yavin4/kliknik_dark_defender.py index 2967cb42..5b3075c6 100644 --- a/scripts/mobiles/yavin4/kliknik_dark_defender.py +++ b/scripts/mobiles/yavin4/kliknik_dark_defender.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("kliknik") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_kliknik.iff') diff --git a/scripts/mobiles/yavin4/kliknik_dark_hunter.py b/scripts/mobiles/yavin4/kliknik_dark_hunter.py index 5b1a0c9f..a046d667 100644 --- a/scripts/mobiles/yavin4/kliknik_dark_hunter.py +++ b/scripts/mobiles/yavin4/kliknik_dark_hunter.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("kliknik") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_kliknik.iff') diff --git a/scripts/mobiles/yavin4/kliknik_dark_queen.py b/scripts/mobiles/yavin4/kliknik_dark_queen.py index 15547e3b..00734688 100644 --- a/scripts/mobiles/yavin4/kliknik_dark_queen.py +++ b/scripts/mobiles/yavin4/kliknik_dark_queen.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("kliknik") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_kliknik_queen.iff') diff --git a/scripts/mobiles/yavin4/kliknik_dark_warrior.py b/scripts/mobiles/yavin4/kliknik_dark_warrior.py index 5fc29dec..1e2b029c 100644 --- a/scripts/mobiles/yavin4/kliknik_dark_warrior.py +++ b/scripts/mobiles/yavin4/kliknik_dark_warrior.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("kliknik") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_kliknik.iff') diff --git a/scripts/mobiles/yavin4/kliknik_hunter.py b/scripts/mobiles/yavin4/kliknik_hunter.py index 81284896..a9bbad2f 100644 --- a/scripts/mobiles/yavin4/kliknik_hunter.py +++ b/scripts/mobiles/yavin4/kliknik_hunter.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("kliknik") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_kliknik.iff') diff --git a/scripts/mobiles/yavin4/kliknik_mantis.py b/scripts/mobiles/yavin4/kliknik_mantis.py index 6bcefb42..b35f0e65 100644 --- a/scripts/mobiles/yavin4/kliknik_mantis.py +++ b/scripts/mobiles/yavin4/kliknik_mantis.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("kliknik") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_kliknik.iff') diff --git a/scripts/mobiles/yavin4/kliknik_queen.py b/scripts/mobiles/yavin4/kliknik_queen.py index 07024a81..07fb2c7c 100644 --- a/scripts/mobiles/yavin4/kliknik_queen.py +++ b/scripts/mobiles/yavin4/kliknik_queen.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("kliknik") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_kliknik_queen.iff') diff --git a/scripts/mobiles/yavin4/kliknik_queen_harvester.py b/scripts/mobiles/yavin4/kliknik_queen_harvester.py index 710a16d8..78bd8c32 100644 --- a/scripts/mobiles/yavin4/kliknik_queen_harvester.py +++ b/scripts/mobiles/yavin4/kliknik_queen_harvester.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("kliknik") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_kliknik.iff') diff --git a/scripts/mobiles/yavin4/kliknik_scout.py b/scripts/mobiles/yavin4/kliknik_scout.py index 0a81fff2..61ccc6c3 100644 --- a/scripts/mobiles/yavin4/kliknik_scout.py +++ b/scripts/mobiles/yavin4/kliknik_scout.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("kliknik") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_kliknik_hue.iff') diff --git a/scripts/mobiles/yavin4/kliknik_shredder_guardian.py b/scripts/mobiles/yavin4/kliknik_shredder_guardian.py index a71123d9..005d9986 100644 --- a/scripts/mobiles/yavin4/kliknik_shredder_guardian.py +++ b/scripts/mobiles/yavin4/kliknik_shredder_guardian.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("kliknik") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_kliknik_hue.iff') diff --git a/scripts/mobiles/yavin4/kliknik_warrior.py b/scripts/mobiles/yavin4/kliknik_warrior.py index 93964e46..a60f5de5 100644 --- a/scripts/mobiles/yavin4/kliknik_warrior.py +++ b/scripts/mobiles/yavin4/kliknik_warrior.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("kliknik") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_kliknik.iff') diff --git a/scripts/mobiles/yavin4/kliknik_worker.py b/scripts/mobiles/yavin4/kliknik_worker.py index f8a67a12..88a98252 100644 --- a/scripts/mobiles/yavin4/kliknik_worker.py +++ b/scripts/mobiles/yavin4/kliknik_worker.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("kliknik") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_kliknik_hue.iff') diff --git a/scripts/mobiles/yavin4/lurking_angler.py b/scripts/mobiles/yavin4/lurking_angler.py index 2d5c921c..7e25a24f 100644 --- a/scripts/mobiles/yavin4/lurking_angler.py +++ b/scripts/mobiles/yavin4/lurking_angler.py @@ -23,7 +23,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("angler") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_angler_hue.iff') diff --git a/scripts/mobiles/yavin4/mad_angler.py b/scripts/mobiles/yavin4/mad_angler.py index 066e1da5..a6cdb0e9 100644 --- a/scripts/mobiles/yavin4/mad_angler.py +++ b/scripts/mobiles/yavin4/mad_angler.py @@ -23,7 +23,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("angler") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_angler_hue.iff') diff --git a/scripts/mobiles/yavin4/puny_gackle_bat.py b/scripts/mobiles/yavin4/puny_gackle_bat.py index 6bfd7529..1d483b24 100644 --- a/scripts/mobiles/yavin4/puny_gackle_bat.py +++ b/scripts/mobiles/yavin4/puny_gackle_bat.py @@ -27,7 +27,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("gacklebat") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_puny_gackle_bat.iff') diff --git a/scripts/mobiles/yavin4/ravaging_gackle_bat.py b/scripts/mobiles/yavin4/ravaging_gackle_bat.py index b4282450..fd6aa38e 100644 --- a/scripts/mobiles/yavin4/ravaging_gackle_bat.py +++ b/scripts/mobiles/yavin4/ravaging_gackle_bat.py @@ -27,7 +27,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("gacklebat") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_gackle_bat.iff') diff --git a/scripts/mobiles/yavin4/skreeg_adolescent.py b/scripts/mobiles/yavin4/skreeg_adolescent.py index a268aefa..66bc8571 100644 --- a/scripts/mobiles/yavin4/skreeg_adolescent.py +++ b/scripts/mobiles/yavin4/skreeg_adolescent.py @@ -27,7 +27,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("skreeg") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_skreeg_adolescent.iff') diff --git a/scripts/mobiles/yavin4/skreeg_female.py b/scripts/mobiles/yavin4/skreeg_female.py index 36b2767a..6da08cc7 100644 --- a/scripts/mobiles/yavin4/skreeg_female.py +++ b/scripts/mobiles/yavin4/skreeg_female.py @@ -27,7 +27,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("skreeg") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_skreeg.iff') diff --git a/scripts/mobiles/yavin4/skreeg_hunter.py b/scripts/mobiles/yavin4/skreeg_hunter.py index 75e89b9c..9fa654d1 100644 --- a/scripts/mobiles/yavin4/skreeg_hunter.py +++ b/scripts/mobiles/yavin4/skreeg_hunter.py @@ -27,7 +27,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("skreeg") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_skreeg.iff') diff --git a/scripts/mobiles/yavin4/skreeg_male.py b/scripts/mobiles/yavin4/skreeg_male.py index ad37c48c..f4ae4b00 100644 --- a/scripts/mobiles/yavin4/skreeg_male.py +++ b/scripts/mobiles/yavin4/skreeg_male.py @@ -27,7 +27,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("skreeg") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_skreeg.iff') diff --git a/scripts/mobiles/yavin4/skreeg_scout.py b/scripts/mobiles/yavin4/skreeg_scout.py index 4862dc43..b77ddf2a 100644 --- a/scripts/mobiles/yavin4/skreeg_scout.py +++ b/scripts/mobiles/yavin4/skreeg_scout.py @@ -27,7 +27,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("skreeg") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_skreeg.iff') diff --git a/scripts/mobiles/yavin4/skreeg_warrior.py b/scripts/mobiles/yavin4/skreeg_warrior.py index 19dd183c..9db7e6a2 100644 --- a/scripts/mobiles/yavin4/skreeg_warrior.py +++ b/scripts/mobiles/yavin4/skreeg_warrior.py @@ -27,7 +27,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("skreeg") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_skreeg_hue.iff') diff --git a/scripts/mobiles/yavin4/stintaril_fleshripper.py b/scripts/mobiles/yavin4/stintaril_fleshripper.py index ee2c6aa3..78df5d8c 100644 --- a/scripts/mobiles/yavin4/stintaril_fleshripper.py +++ b/scripts/mobiles/yavin4/stintaril_fleshripper.py @@ -27,7 +27,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("stintaril") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_stintaril.iff') diff --git a/scripts/mobiles/yavin4/stintaril_prowler.py b/scripts/mobiles/yavin4/stintaril_prowler.py index c35f422e..150beca1 100644 --- a/scripts/mobiles/yavin4/stintaril_prowler.py +++ b/scripts/mobiles/yavin4/stintaril_prowler.py @@ -27,7 +27,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("stintaril") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_stintaril_hue.iff') diff --git a/scripts/mobiles/yavin4/stunted_woolamander.py b/scripts/mobiles/yavin4/stunted_woolamander.py index cb04115f..037d2565 100644 --- a/scripts/mobiles/yavin4/stunted_woolamander.py +++ b/scripts/mobiles/yavin4/stunted_woolamander.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("woolamander") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_woolamander.iff') diff --git a/scripts/mobiles/yavin4/tanc_mite_warrior.py b/scripts/mobiles/yavin4/tanc_mite_warrior.py index 977a2838..058be91b 100644 --- a/scripts/mobiles/yavin4/tanc_mite_warrior.py +++ b/scripts/mobiles/yavin4/tanc_mite_warrior.py @@ -23,7 +23,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("tancmite") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_tanc_mite.iff') diff --git a/scripts/mobiles/yavin4/woolamander.py b/scripts/mobiles/yavin4/woolamander.py index 8b8640ef..52d7a958 100644 --- a/scripts/mobiles/yavin4/woolamander.py +++ b/scripts/mobiles/yavin4/woolamander.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("woolamander") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_woolamander.iff') diff --git a/scripts/mobiles/yavin4/woolamander_harrower.py b/scripts/mobiles/yavin4/woolamander_harrower.py index 6b5c773d..931da885 100644 --- a/scripts/mobiles/yavin4/woolamander_harrower.py +++ b/scripts/mobiles/yavin4/woolamander_harrower.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("woolamander") mobileTemplate.setAssistRange(40) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_woolamander_hue.iff') diff --git a/scripts/mobiles/yavin4/woolamander_harvester.py b/scripts/mobiles/yavin4/woolamander_harvester.py index a9e34915..4068f48c 100644 --- a/scripts/mobiles/yavin4/woolamander_harvester.py +++ b/scripts/mobiles/yavin4/woolamander_harvester.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("woolamander") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_woolamander.iff') diff --git a/scripts/mobiles/yavin4/woolamander_reaper.py b/scripts/mobiles/yavin4/woolamander_reaper.py index 07ae4d59..98a7e5a6 100644 --- a/scripts/mobiles/yavin4/woolamander_reaper.py +++ b/scripts/mobiles/yavin4/woolamander_reaper.py @@ -25,7 +25,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("woolamander") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(False) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_woolamander_hue.iff') diff --git a/scripts/mobiles/yavin4/yakasoba.py b/scripts/mobiles/yavin4/yakasoba.py index 5266bbe3..a6e1d98c 100644 --- a/scripts/mobiles/yavin4/yakasoba.py +++ b/scripts/mobiles/yavin4/yakasoba.py @@ -21,7 +21,7 @@ def addTemplate(core): mobileTemplate.setSocialGroup("gracerobber") mobileTemplate.setAssistRange(12) mobileTemplate.setStalker(True) - mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE + Options.ATTACKABLE) + mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() templates.add('object/mobile/shared_dressed_yavin_yakasoba.iff') 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..ec380e3c 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/pet_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/a1_deluxe_floater.py b/scripts/object/mobile/vehicle/a1_deluxe_floater.py index ccad8904..73ca0680 100644 --- a/scripts/object/mobile/vehicle/a1_deluxe_floater.py +++ b/scripts/object/mobile/vehicle/a1_deluxe_floater.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'creature/vehicle') return \ No newline at end of file diff --git a/scripts/object/mobile/vehicle/air2_swoop_speeder.py b/scripts/object/mobile/vehicle/air2_swoop_speeder.py index ccad8904..73ca0680 100644 --- a/scripts/object/mobile/vehicle/air2_swoop_speeder.py +++ b/scripts/object/mobile/vehicle/air2_swoop_speeder.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'creature/vehicle') return \ No newline at end of file diff --git a/scripts/object/mobile/vehicle/barc_speeder.py b/scripts/object/mobile/vehicle/barc_speeder.py index 4626c764..73ca0680 100644 --- a/scripts/object/mobile/vehicle/barc_speeder.py +++ b/scripts/object/mobile/vehicle/barc_speeder.py @@ -1,16 +1,5 @@ import sys def setup(core, object): - object.setAttachment('radial_filename', 'vehicle') - return - -def use(core, actor, object): - vehicle = actor.getContainer() - - if vehicle: - if vehicle.getObjectID() == object.getObjectID(): - vehicle.remove(actor) - else: - vehicle.add(actor) - + object.setAttachment('radial_filename', 'creature/vehicle') return \ No newline at end of file diff --git a/scripts/object/mobile/vehicle/barc_speeder_imperial.py b/scripts/object/mobile/vehicle/barc_speeder_imperial.py index 6093148c..4009cb0e 100644 --- a/scripts/object/mobile/vehicle/barc_speeder_imperial.py +++ b/scripts/object/mobile/vehicle/barc_speeder_imperial.py @@ -1,7 +1,8 @@ import sys - + def setup(core, object): core.buffService.addBuffToCreature(object, 'vehicle_pvp_barc_imperial', object) + object.setAttachment('radial_filename', 'creature/vehicle') return def use(core, actor, object): diff --git a/scripts/object/mobile/vehicle/barc_speeder_rebel.py b/scripts/object/mobile/vehicle/barc_speeder_rebel.py index 402fab24..aba22cb7 100644 --- a/scripts/object/mobile/vehicle/barc_speeder_rebel.py +++ b/scripts/object/mobile/vehicle/barc_speeder_rebel.py @@ -1,6 +1,8 @@ import sys - + def setup(core, object): + core.buffService.addBuffToCreature(object, 'vehicle_pvp_barc_rebel', object) + object.setAttachment('radial_filename', 'creature/vehicle') return def use(core, actor, object): diff --git a/scripts/object/mobile/vehicle/basilisk_war_droid.py b/scripts/object/mobile/vehicle/basilisk_war_droid.py index ccad8904..73ca0680 100644 --- a/scripts/object/mobile/vehicle/basilisk_war_droid.py +++ b/scripts/object/mobile/vehicle/basilisk_war_droid.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'creature/vehicle') return \ No newline at end of file diff --git a/scripts/object/mobile/vehicle/fg_8t8_podracer.py b/scripts/object/mobile/vehicle/fg_8t8_podracer.py index ccad8904..73ca0680 100644 --- a/scripts/object/mobile/vehicle/fg_8t8_podracer.py +++ b/scripts/object/mobile/vehicle/fg_8t8_podracer.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'creature/vehicle') return \ No newline at end of file diff --git a/scripts/object/mobile/vehicle/flare_s_swoop.py b/scripts/object/mobile/vehicle/flare_s_swoop.py index ccad8904..73ca0680 100644 --- a/scripts/object/mobile/vehicle/flare_s_swoop.py +++ b/scripts/object/mobile/vehicle/flare_s_swoop.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'creature/vehicle') return \ No newline at end of file diff --git a/scripts/object/mobile/vehicle/flare_s_swoop_crafted.py b/scripts/object/mobile/vehicle/flare_s_swoop_crafted.py index ccad8904..73ca0680 100644 --- a/scripts/object/mobile/vehicle/flare_s_swoop_crafted.py +++ b/scripts/object/mobile/vehicle/flare_s_swoop_crafted.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'creature/vehicle') return \ No newline at end of file diff --git a/scripts/object/mobile/vehicle/geonosian_speeder.py b/scripts/object/mobile/vehicle/geonosian_speeder.py index ccad8904..73ca0680 100644 --- a/scripts/object/mobile/vehicle/geonosian_speeder.py +++ b/scripts/object/mobile/vehicle/geonosian_speeder.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'creature/vehicle') return \ No newline at end of file diff --git a/scripts/object/mobile/vehicle/gift_stap_speeder.py b/scripts/object/mobile/vehicle/gift_stap_speeder.py index ccad8904..73ca0680 100644 --- a/scripts/object/mobile/vehicle/gift_stap_speeder.py +++ b/scripts/object/mobile/vehicle/gift_stap_speeder.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'creature/vehicle') return \ No newline at end of file diff --git a/scripts/object/mobile/vehicle/grievous_wheel_bike.py b/scripts/object/mobile/vehicle/grievous_wheel_bike.py index ccad8904..73ca0680 100644 --- a/scripts/object/mobile/vehicle/grievous_wheel_bike.py +++ b/scripts/object/mobile/vehicle/grievous_wheel_bike.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'creature/vehicle') return \ No newline at end of file diff --git a/scripts/object/mobile/vehicle/hoth_at_st.py b/scripts/object/mobile/vehicle/hoth_at_st.py index ccad8904..73ca0680 100644 --- a/scripts/object/mobile/vehicle/hoth_at_st.py +++ b/scripts/object/mobile/vehicle/hoth_at_st.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'creature/vehicle') return \ No newline at end of file diff --git a/scripts/object/mobile/vehicle/hover_chair.py b/scripts/object/mobile/vehicle/hover_chair.py index ccad8904..73ca0680 100644 --- a/scripts/object/mobile/vehicle/hover_chair.py +++ b/scripts/object/mobile/vehicle/hover_chair.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'creature/vehicle') return \ No newline at end of file diff --git a/scripts/object/mobile/vehicle/hoverlifter_speeder.py b/scripts/object/mobile/vehicle/hoverlifter_speeder.py index ccad8904..73ca0680 100644 --- a/scripts/object/mobile/vehicle/hoverlifter_speeder.py +++ b/scripts/object/mobile/vehicle/hoverlifter_speeder.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'creature/vehicle') return \ No newline at end of file diff --git a/scripts/object/mobile/vehicle/hoverlifter_speeder_crafted.py b/scripts/object/mobile/vehicle/hoverlifter_speeder_crafted.py index ccad8904..73ca0680 100644 --- a/scripts/object/mobile/vehicle/hoverlifter_speeder_crafted.py +++ b/scripts/object/mobile/vehicle/hoverlifter_speeder_crafted.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'creature/vehicle') 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..75ba8d12 100644 --- a/scripts/object/mobile/vehicle/jetpack.py +++ b/scripts/object/mobile/vehicle/jetpack.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + object.setCustomizationVariable('/private/index_hover_height', 40) + object.setAttachment('radial_filename', 'creature/vehicle') + return diff --git a/scripts/object/mobile/vehicle/koro2_speeder.py b/scripts/object/mobile/vehicle/koro2_speeder.py index ccad8904..73ca0680 100644 --- a/scripts/object/mobile/vehicle/koro2_speeder.py +++ b/scripts/object/mobile/vehicle/koro2_speeder.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'creature/vehicle') return \ No newline at end of file diff --git a/scripts/object/mobile/vehicle/landspeeder_ab1.py b/scripts/object/mobile/vehicle/landspeeder_ab1.py index ccad8904..73ca0680 100644 --- a/scripts/object/mobile/vehicle/landspeeder_ab1.py +++ b/scripts/object/mobile/vehicle/landspeeder_ab1.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'creature/vehicle') return \ No newline at end of file diff --git a/scripts/object/mobile/vehicle/landspeeder_base.py b/scripts/object/mobile/vehicle/landspeeder_base.py index ccad8904..73ca0680 100644 --- a/scripts/object/mobile/vehicle/landspeeder_base.py +++ b/scripts/object/mobile/vehicle/landspeeder_base.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'creature/vehicle') return \ No newline at end of file diff --git a/scripts/object/mobile/vehicle/landspeeder_desert_skiff.py b/scripts/object/mobile/vehicle/landspeeder_desert_skiff.py index ccad8904..73ca0680 100644 --- a/scripts/object/mobile/vehicle/landspeeder_desert_skiff.py +++ b/scripts/object/mobile/vehicle/landspeeder_desert_skiff.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'creature/vehicle') return \ No newline at end of file diff --git a/scripts/object/mobile/vehicle/landspeeder_lava_skiff.py b/scripts/object/mobile/vehicle/landspeeder_lava_skiff.py index ccad8904..73ca0680 100644 --- a/scripts/object/mobile/vehicle/landspeeder_lava_skiff.py +++ b/scripts/object/mobile/vehicle/landspeeder_lava_skiff.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'creature/vehicle') return \ No newline at end of file diff --git a/scripts/object/mobile/vehicle/landspeeder_organa.py b/scripts/object/mobile/vehicle/landspeeder_organa.py index ccad8904..73ca0680 100644 --- a/scripts/object/mobile/vehicle/landspeeder_organa.py +++ b/scripts/object/mobile/vehicle/landspeeder_organa.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'creature/vehicle') return \ No newline at end of file diff --git a/scripts/object/mobile/vehicle/landspeeder_tantive4.py b/scripts/object/mobile/vehicle/landspeeder_tantive4.py index 1e2994c6..73ca0680 100644 --- a/scripts/object/mobile/vehicle/landspeeder_tantive4.py +++ b/scripts/object/mobile/vehicle/landspeeder_tantive4.py @@ -1,20 +1,5 @@ import sys def setup(core, object): - object.setAttachment('radial_filename', 'vehicle') - return - -def use(core, actor, object): - vehicle = actor.getContainer() - - if vehicle: - if vehicle.getObjectID() == object.getObjectID(): - vehicle.remove(actor) - else: - vehicle.add(actor) - - return -import sys - -def setup(core, object): + object.setAttachment('radial_filename', 'creature/vehicle') return \ No newline at end of file diff --git a/scripts/object/mobile/vehicle/landspeeder_tantive4_adv.py b/scripts/object/mobile/vehicle/landspeeder_tantive4_adv.py index ccad8904..73ca0680 100644 --- a/scripts/object/mobile/vehicle/landspeeder_tantive4_adv.py +++ b/scripts/object/mobile/vehicle/landspeeder_tantive4_adv.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'creature/vehicle') return \ No newline at end of file diff --git a/scripts/object/mobile/vehicle/landspeeder_usv5.py b/scripts/object/mobile/vehicle/landspeeder_usv5.py index ccad8904..73ca0680 100644 --- a/scripts/object/mobile/vehicle/landspeeder_usv5.py +++ b/scripts/object/mobile/vehicle/landspeeder_usv5.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'creature/vehicle') return \ No newline at end of file diff --git a/scripts/object/mobile/vehicle/landspeeder_usv5_s02.py b/scripts/object/mobile/vehicle/landspeeder_usv5_s02.py index ccad8904..73ca0680 100644 --- a/scripts/object/mobile/vehicle/landspeeder_usv5_s02.py +++ b/scripts/object/mobile/vehicle/landspeeder_usv5_s02.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'creature/vehicle') return \ No newline at end of file diff --git a/scripts/object/mobile/vehicle/landspeeder_v35.py b/scripts/object/mobile/vehicle/landspeeder_v35.py index ccad8904..73ca0680 100644 --- a/scripts/object/mobile/vehicle/landspeeder_v35.py +++ b/scripts/object/mobile/vehicle/landspeeder_v35.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'creature/vehicle') return \ No newline at end of file diff --git a/scripts/object/mobile/vehicle/landspeeder_x31.py b/scripts/object/mobile/vehicle/landspeeder_x31.py index ccad8904..73ca0680 100644 --- a/scripts/object/mobile/vehicle/landspeeder_x31.py +++ b/scripts/object/mobile/vehicle/landspeeder_x31.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'creature/vehicle') return \ No newline at end of file diff --git a/scripts/object/mobile/vehicle/landspeeder_x34.py b/scripts/object/mobile/vehicle/landspeeder_x34.py index ccad8904..73ca0680 100644 --- a/scripts/object/mobile/vehicle/landspeeder_x34.py +++ b/scripts/object/mobile/vehicle/landspeeder_x34.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'creature/vehicle') return \ No newline at end of file diff --git a/scripts/object/mobile/vehicle/landspeeder_xp38.py b/scripts/object/mobile/vehicle/landspeeder_xp38.py index ccad8904..73ca0680 100644 --- a/scripts/object/mobile/vehicle/landspeeder_xp38.py +++ b/scripts/object/mobile/vehicle/landspeeder_xp38.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'creature/vehicle') return \ No newline at end of file diff --git a/scripts/object/mobile/vehicle/light_bending_barc.py b/scripts/object/mobile/vehicle/light_bending_barc.py index ccad8904..73ca0680 100644 --- a/scripts/object/mobile/vehicle/light_bending_barc.py +++ b/scripts/object/mobile/vehicle/light_bending_barc.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'creature/vehicle') return \ No newline at end of file diff --git a/scripts/object/mobile/vehicle/mechno_chair.py b/scripts/object/mobile/vehicle/mechno_chair.py index ccad8904..73ca0680 100644 --- a/scripts/object/mobile/vehicle/mechno_chair.py +++ b/scripts/object/mobile/vehicle/mechno_chair.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'creature/vehicle') return \ No newline at end of file diff --git a/scripts/object/mobile/vehicle/mustafar_panning_droid.py b/scripts/object/mobile/vehicle/mustafar_panning_droid.py index ccad8904..73ca0680 100644 --- a/scripts/object/mobile/vehicle/mustafar_panning_droid.py +++ b/scripts/object/mobile/vehicle/mustafar_panning_droid.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'creature/vehicle') return \ No newline at end of file diff --git a/scripts/object/mobile/vehicle/pod_racer_balta_podracer.py b/scripts/object/mobile/vehicle/pod_racer_balta_podracer.py index ccad8904..73ca0680 100644 --- a/scripts/object/mobile/vehicle/pod_racer_balta_podracer.py +++ b/scripts/object/mobile/vehicle/pod_racer_balta_podracer.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'creature/vehicle') return \ No newline at end of file diff --git a/scripts/object/mobile/vehicle/pod_racer_ipg_longtail.py b/scripts/object/mobile/vehicle/pod_racer_ipg_longtail.py index ccad8904..73ca0680 100644 --- a/scripts/object/mobile/vehicle/pod_racer_ipg_longtail.py +++ b/scripts/object/mobile/vehicle/pod_racer_ipg_longtail.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'creature/vehicle') return \ No newline at end of file diff --git a/scripts/object/mobile/vehicle/pod_racer_light_bending.py b/scripts/object/mobile/vehicle/pod_racer_light_bending.py index ccad8904..73ca0680 100644 --- a/scripts/object/mobile/vehicle/pod_racer_light_bending.py +++ b/scripts/object/mobile/vehicle/pod_racer_light_bending.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'creature/vehicle') return \ No newline at end of file diff --git a/scripts/object/mobile/vehicle/pod_racer_one.py b/scripts/object/mobile/vehicle/pod_racer_one.py index ccad8904..73ca0680 100644 --- a/scripts/object/mobile/vehicle/pod_racer_one.py +++ b/scripts/object/mobile/vehicle/pod_racer_one.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'creature/vehicle') return \ No newline at end of file diff --git a/scripts/object/mobile/vehicle/pod_racer_two.py b/scripts/object/mobile/vehicle/pod_racer_two.py index ccad8904..73ca0680 100644 --- a/scripts/object/mobile/vehicle/pod_racer_two.py +++ b/scripts/object/mobile/vehicle/pod_racer_two.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'creature/vehicle') return \ No newline at end of file diff --git a/scripts/object/mobile/vehicle/podracer_anakin.py b/scripts/object/mobile/vehicle/podracer_anakin.py index ccad8904..73ca0680 100644 --- a/scripts/object/mobile/vehicle/podracer_anakin.py +++ b/scripts/object/mobile/vehicle/podracer_anakin.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'creature/vehicle') return \ No newline at end of file diff --git a/scripts/object/mobile/vehicle/ric_920_speeder.py b/scripts/object/mobile/vehicle/ric_920_speeder.py index ccad8904..73ca0680 100644 --- a/scripts/object/mobile/vehicle/ric_920_speeder.py +++ b/scripts/object/mobile/vehicle/ric_920_speeder.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'creature/vehicle') return \ No newline at end of file diff --git a/scripts/object/mobile/vehicle/senate_pod.py b/scripts/object/mobile/vehicle/senate_pod.py index ccad8904..73ca0680 100644 --- a/scripts/object/mobile/vehicle/senate_pod.py +++ b/scripts/object/mobile/vehicle/senate_pod.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'creature/vehicle') return \ No newline at end of file diff --git a/scripts/object/mobile/vehicle/single_pod_airspeeder.py b/scripts/object/mobile/vehicle/single_pod_airspeeder.py index ccad8904..73ca0680 100644 --- a/scripts/object/mobile/vehicle/single_pod_airspeeder.py +++ b/scripts/object/mobile/vehicle/single_pod_airspeeder.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'creature/vehicle') return \ No newline at end of file diff --git a/scripts/object/mobile/vehicle/sith_speeder.py b/scripts/object/mobile/vehicle/sith_speeder.py index ccad8904..73ca0680 100644 --- a/scripts/object/mobile/vehicle/sith_speeder.py +++ b/scripts/object/mobile/vehicle/sith_speeder.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'creature/vehicle') return \ No newline at end of file diff --git a/scripts/object/mobile/vehicle/snowspeeder.py b/scripts/object/mobile/vehicle/snowspeeder.py index ccad8904..73ca0680 100644 --- a/scripts/object/mobile/vehicle/snowspeeder.py +++ b/scripts/object/mobile/vehicle/snowspeeder.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'creature/vehicle') return \ No newline at end of file diff --git a/scripts/object/mobile/vehicle/speeder_ric_920.py b/scripts/object/mobile/vehicle/speeder_ric_920.py index ccad8904..73ca0680 100644 --- a/scripts/object/mobile/vehicle/speeder_ric_920.py +++ b/scripts/object/mobile/vehicle/speeder_ric_920.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'creature/vehicle') return \ No newline at end of file diff --git a/scripts/object/mobile/vehicle/speederbike.py b/scripts/object/mobile/vehicle/speederbike.py index ccad8904..73ca0680 100644 --- a/scripts/object/mobile/vehicle/speederbike.py +++ b/scripts/object/mobile/vehicle/speederbike.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'creature/vehicle') return \ No newline at end of file diff --git a/scripts/object/mobile/vehicle/speederbike_base.py b/scripts/object/mobile/vehicle/speederbike_base.py index ccad8904..73ca0680 100644 --- a/scripts/object/mobile/vehicle/speederbike_base.py +++ b/scripts/object/mobile/vehicle/speederbike_base.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'creature/vehicle') return \ No newline at end of file diff --git a/scripts/object/mobile/vehicle/speederbike_flash.py b/scripts/object/mobile/vehicle/speederbike_flash.py index ccad8904..73ca0680 100644 --- a/scripts/object/mobile/vehicle/speederbike_flash.py +++ b/scripts/object/mobile/vehicle/speederbike_flash.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'creature/vehicle') return \ No newline at end of file diff --git a/scripts/object/mobile/vehicle/stap_speeder.py b/scripts/object/mobile/vehicle/stap_speeder.py index ccad8904..73ca0680 100644 --- a/scripts/object/mobile/vehicle/stap_speeder.py +++ b/scripts/object/mobile/vehicle/stap_speeder.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'creature/vehicle') return \ No newline at end of file diff --git a/scripts/object/mobile/vehicle/swamp_speeder.py b/scripts/object/mobile/vehicle/swamp_speeder.py index ccad8904..73ca0680 100644 --- a/scripts/object/mobile/vehicle/swamp_speeder.py +++ b/scripts/object/mobile/vehicle/swamp_speeder.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'creature/vehicle') return \ No newline at end of file diff --git a/scripts/object/mobile/vehicle/tcg_8_air_speeder.py b/scripts/object/mobile/vehicle/tcg_8_air_speeder.py index ccad8904..73ca0680 100644 --- a/scripts/object/mobile/vehicle/tcg_8_air_speeder.py +++ b/scripts/object/mobile/vehicle/tcg_8_air_speeder.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'creature/vehicle') return \ No newline at end of file diff --git a/scripts/object/mobile/vehicle/tcg_8_single_pod_airspeeder.py b/scripts/object/mobile/vehicle/tcg_8_single_pod_airspeeder.py index ccad8904..73ca0680 100644 --- a/scripts/object/mobile/vehicle/tcg_8_single_pod_airspeeder.py +++ b/scripts/object/mobile/vehicle/tcg_8_single_pod_airspeeder.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'creature/vehicle') return \ No newline at end of file diff --git a/scripts/object/mobile/vehicle/tcg_at_pt_walker.py b/scripts/object/mobile/vehicle/tcg_at_pt_walker.py index ccad8904..73ca0680 100644 --- a/scripts/object/mobile/vehicle/tcg_at_pt_walker.py +++ b/scripts/object/mobile/vehicle/tcg_at_pt_walker.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'creature/vehicle') 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..6f8eaeba 100644 --- a/scripts/object/mobile/vehicle/tcg_hk47_jetpack.py +++ b/scripts/object/mobile/vehicle/tcg_hk47_jetpack.py @@ -1,4 +1,6 @@ import sys def setup(core, object): + object.setCustomizationVariable('/private/index_hover_height', 40) + object.setAttachment('radial_filename', 'creature/vehicle') 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..6f8eaeba 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,6 @@ import sys def setup(core, object): + object.setCustomizationVariable('/private/index_hover_height', 40) + object.setAttachment('radial_filename', 'creature/vehicle') return \ No newline at end of file diff --git a/scripts/object/mobile/vehicle/tcg_military_transport.py b/scripts/object/mobile/vehicle/tcg_military_transport.py index ccad8904..73ca0680 100644 --- a/scripts/object/mobile/vehicle/tcg_military_transport.py +++ b/scripts/object/mobile/vehicle/tcg_military_transport.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'creature/vehicle') return \ No newline at end of file diff --git a/scripts/object/mobile/vehicle/tcg_republic_gunship.py b/scripts/object/mobile/vehicle/tcg_republic_gunship.py index ccad8904..73ca0680 100644 --- a/scripts/object/mobile/vehicle/tcg_republic_gunship.py +++ b/scripts/object/mobile/vehicle/tcg_republic_gunship.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'creature/vehicle') return \ No newline at end of file diff --git a/scripts/object/mobile/vehicle/temp_walker1.py b/scripts/object/mobile/vehicle/temp_walker1.py index ccad8904..73ca0680 100644 --- a/scripts/object/mobile/vehicle/temp_walker1.py +++ b/scripts/object/mobile/vehicle/temp_walker1.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'creature/vehicle') return \ No newline at end of file diff --git a/scripts/object/mobile/vehicle/vehicle_base.py b/scripts/object/mobile/vehicle/vehicle_base.py index ccad8904..73ca0680 100644 --- a/scripts/object/mobile/vehicle/vehicle_base.py +++ b/scripts/object/mobile/vehicle/vehicle_base.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'creature/vehicle') return \ No newline at end of file diff --git a/scripts/object/mobile/vehicle/walker_at_rt_camo.py b/scripts/object/mobile/vehicle/walker_at_rt_camo.py index 38038e73..bf6751e9 100644 --- a/scripts/object/mobile/vehicle/walker_at_rt_camo.py +++ b/scripts/object/mobile/vehicle/walker_at_rt_camo.py @@ -1,8 +1,6 @@ import sys def setup(core, object): - return - -def use(core, actor, object): + object.setAttachment('radial_filename', 'creature/vehicle') core.buffService.addBuffToCreature(object, 'vehicle_at_rt', object) return \ No newline at end of file diff --git a/scripts/object/mobile/vehicle/walker_at_rt_reg.py b/scripts/object/mobile/vehicle/walker_at_rt_reg.py index 38038e73..bf6751e9 100644 --- a/scripts/object/mobile/vehicle/walker_at_rt_reg.py +++ b/scripts/object/mobile/vehicle/walker_at_rt_reg.py @@ -1,8 +1,6 @@ import sys def setup(core, object): - return - -def use(core, actor, object): + object.setAttachment('radial_filename', 'creature/vehicle') core.buffService.addBuffToCreature(object, 'vehicle_at_rt', object) return \ No newline at end of file diff --git a/scripts/object/mobile/vehicle/walker_at_st.py b/scripts/object/mobile/vehicle/walker_at_st.py index ccad8904..73ca0680 100644 --- a/scripts/object/mobile/vehicle/walker_at_st.py +++ b/scripts/object/mobile/vehicle/walker_at_st.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'creature/vehicle') return \ No newline at end of file diff --git a/scripts/object/mobile/vehicle/walker_at_xt.py b/scripts/object/mobile/vehicle/walker_at_xt.py index ccad8904..73ca0680 100644 --- a/scripts/object/mobile/vehicle/walker_at_xt.py +++ b/scripts/object/mobile/vehicle/walker_at_xt.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'creature/vehicle') return \ No newline at end of file diff --git a/scripts/object/mobile/vehicle/walker_at_xt_player.py b/scripts/object/mobile/vehicle/walker_at_xt_player.py index ccad8904..73ca0680 100644 --- a/scripts/object/mobile/vehicle/walker_at_xt_player.py +++ b/scripts/object/mobile/vehicle/walker_at_xt_player.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'creature/vehicle') return \ No newline at end of file diff --git a/scripts/object/mobile/vehicle/xj6_air_speeder.py b/scripts/object/mobile/vehicle/xj6_air_speeder.py index ccad8904..73ca0680 100644 --- a/scripts/object/mobile/vehicle/xj6_air_speeder.py +++ b/scripts/object/mobile/vehicle/xj6_air_speeder.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'creature/vehicle') 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..74d5449e --- /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 + 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/pet_deed/merek_deed.py b/scripts/object/tangible/deed/pet_deed/merek_deed.py index ccad8904..0eec81fb 100644 --- a/scripts/object/tangible/deed/pet_deed/merek_deed.py +++ b/scripts/object/tangible/deed/pet_deed/merek_deed.py @@ -1,4 +1,10 @@ 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_merek', 'object/intangible/pet/shared_merek_hue.iff') + return + \ No newline at end of file diff --git a/scripts/object/tangible/deed/player_house_deed/naboo_house_large_deed.py b/scripts/object/tangible/deed/player_house_deed/naboo_house_large_deed.py index 5483eb6d..07ab9319 100644 --- a/scripts/object/tangible/deed/player_house_deed/naboo_house_large_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/naboo_house_large_deed.py @@ -2,4 +2,7 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'deeds/structureDeed') + return + +def use(core, actor, object): return \ No newline at end of file diff --git a/scripts/object/tangible/deed/player_house_deed/naboo_house_medium_style_02_deed.py b/scripts/object/tangible/deed/player_house_deed/naboo_house_medium_style_02_deed.py index ccad8904..07ab9319 100644 --- a/scripts/object/tangible/deed/player_house_deed/naboo_house_medium_style_02_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/naboo_house_medium_style_02_deed.py @@ -1,4 +1,8 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/structureDeed') + return + +def use(core, actor, object): return \ No newline at end of file diff --git a/scripts/object/tangible/deed/player_house_deed/player_house_tcg_8_yoda_house.py b/scripts/object/tangible/deed/player_house_deed/player_house_tcg_8_yoda_house.py index ccad8904..07ab9319 100644 --- a/scripts/object/tangible/deed/player_house_deed/player_house_tcg_8_yoda_house.py +++ b/scripts/object/tangible/deed/player_house_deed/player_house_tcg_8_yoda_house.py @@ -1,4 +1,8 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/structureDeed') + return + +def use(core, actor, object): return \ No newline at end of file diff --git a/scripts/object/tangible/deed/player_house_deed/tree_house_01_deed.py b/scripts/object/tangible/deed/player_house_deed/tree_house_01_deed.py index ccad8904..07ab9319 100644 --- a/scripts/object/tangible/deed/player_house_deed/tree_house_01_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/tree_house_01_deed.py @@ -1,4 +1,8 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/structureDeed') + return + +def use(core, actor, object): 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/basilisk_war_droid.py b/scripts/object/tangible/deed/vehicle_deed/basilisk_war_droid.py index ccad8904..c9052a57 100644 --- a/scripts/object/tangible/deed/vehicle_deed/basilisk_war_droid.py +++ b/scripts/object/tangible/deed/vehicle_deed/basilisk_war_droid.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_basilisk_war_droid.iff', 'object/intangible/vehicle/shared_basilisk_war_droid_pcd.iff') return \ No newline at end of file diff --git a/scripts/object/tangible/deed/vehicle_deed/flare_s_swoop.py b/scripts/object/tangible/deed/vehicle_deed/flare_s_swoop.py index ccad8904..8c9118b3 100644 --- a/scripts/object/tangible/deed/vehicle_deed/flare_s_swoop.py +++ b/scripts/object/tangible/deed/vehicle_deed/flare_s_swoop.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_flare_s_swoop.iff', 'object/intangible/vehicle/shared_flare_s_swoop_pcd.iff') return \ No newline at end of file diff --git a/scripts/object/tangible/deed/vehicle_deed/hoverlifter_speeder.py b/scripts/object/tangible/deed/vehicle_deed/hoverlifter_speeder.py index ccad8904..e3018edf 100644 --- a/scripts/object/tangible/deed/vehicle_deed/hoverlifter_speeder.py +++ b/scripts/object/tangible/deed/vehicle_deed/hoverlifter_speeder.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_hoverlifter_speeder.iff', 'object/intangible/vehicle/shared_hoverlifter_speeder.iff') return \ No newline at end of file diff --git a/scripts/object/tangible/deed/vehicle_deed/hoverlifter_speeder_crafted.py b/scripts/object/tangible/deed/vehicle_deed/hoverlifter_speeder_crafted.py index ccad8904..665fb2a8 100644 --- a/scripts/object/tangible/deed/vehicle_deed/hoverlifter_speeder_crafted.py +++ b/scripts/object/tangible/deed/vehicle_deed/hoverlifter_speeder_crafted.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_hoverlifter_speeder_crafted.iff', 'object/intangible/vehicle/shared_hoverlifter_speeder_crafted.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/landspeeder_ab1_deed.py b/scripts/object/tangible/deed/vehicle_deed/landspeeder_ab1_deed.py index ccad8904..e44e7625 100644 --- a/scripts/object/tangible/deed/vehicle_deed/landspeeder_ab1_deed.py +++ b/scripts/object/tangible/deed/vehicle_deed/landspeeder_ab1_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_landspeeder_ab1.iff', 'object/intangible/vehicle/shared_landspeeder_ab1.iff') return \ No newline at end of file diff --git a/scripts/object/tangible/deed/vehicle_deed/landspeeder_desert_skiff_deed.py b/scripts/object/tangible/deed/vehicle_deed/landspeeder_desert_skiff_deed.py index ccad8904..041315e4 100644 --- a/scripts/object/tangible/deed/vehicle_deed/landspeeder_desert_skiff_deed.py +++ b/scripts/object/tangible/deed/vehicle_deed/landspeeder_desert_skiff_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_landspeeder_desert_skiff.iff', 'object/intangible/vehicle/shared_landspeeder_desert_skiff_pcd.iff') return \ No newline at end of file diff --git a/scripts/object/tangible/deed/vehicle_deed/landspeeder_tantive4_adv_deed.py b/scripts/object/tangible/deed/vehicle_deed/landspeeder_tantive4_adv_deed.py index ccad8904..c75559fa 100644 --- a/scripts/object/tangible/deed/vehicle_deed/landspeeder_tantive4_adv_deed.py +++ b/scripts/object/tangible/deed/vehicle_deed/landspeeder_tantive4_adv_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_landspeeder_tantive4_adv.iff', 'object/intangible/vehicle/shared_landspeeder_tantive4_adv_pcd.iff') return \ No newline at end of file diff --git a/scripts/object/tangible/deed/vehicle_deed/landspeeder_tantive4_deed.py b/scripts/object/tangible/deed/vehicle_deed/landspeeder_tantive4_deed.py index f031d37f..6b93484b 100644 --- a/scripts/object/tangible/deed/vehicle_deed/landspeeder_tantive4_deed.py +++ b/scripts/object/tangible/deed/vehicle_deed/landspeeder_tantive4_deed.py @@ -5,20 +5,5 @@ def setup(core, object): return def use(core, actor, object): - datapad = actor.getSlottedObject('datapad') - pcd = core.objectService.createObject('object/intangible/vehicle/shared_landspeeder_tantive4_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_landspeeder_tantive4.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 + core.mountService.generateVehicle(actor, object, 'object/mobile/vehicle/shared_landspeeder_tantive4.iff', 'object/intangible/vehicle/shared_landspeeder_tantive4_pcd.iff') + return \ No newline at end of file diff --git a/scripts/object/tangible/deed/vehicle_deed/landspeeder_usv5_deed.py b/scripts/object/tangible/deed/vehicle_deed/landspeeder_usv5_deed.py index ccad8904..c6affd93 100644 --- a/scripts/object/tangible/deed/vehicle_deed/landspeeder_usv5_deed.py +++ b/scripts/object/tangible/deed/vehicle_deed/landspeeder_usv5_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_landspeeder_usv5.iff', 'object/intangible/vehicle/shared_landspeeder_usv5_pcd.iff') return \ No newline at end of file diff --git a/scripts/object/tangible/deed/vehicle_deed/landspeeder_v35_deed.py b/scripts/object/tangible/deed/vehicle_deed/landspeeder_v35_deed.py index ccad8904..606d1185 100644 --- a/scripts/object/tangible/deed/vehicle_deed/landspeeder_v35_deed.py +++ b/scripts/object/tangible/deed/vehicle_deed/landspeeder_v35_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_landspeeder_v35.iff', 'object/intangible/vehicle/shared_landspeeder_v35_pcd.iff') return \ No newline at end of file diff --git a/scripts/object/tangible/deed/vehicle_deed/landspeeder_x31_deed.py b/scripts/object/tangible/deed/vehicle_deed/landspeeder_x31_deed.py index ccad8904..e003bbad 100644 --- a/scripts/object/tangible/deed/vehicle_deed/landspeeder_x31_deed.py +++ b/scripts/object/tangible/deed/vehicle_deed/landspeeder_x31_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_landspeeder_x31.iff', 'object/intangible/vehicle/shared_landspeeder_x31_pcd.iff') return \ No newline at end of file diff --git a/scripts/object/tangible/deed/vehicle_deed/landspeeder_x34_deed.py b/scripts/object/tangible/deed/vehicle_deed/landspeeder_x34_deed.py index ccad8904..36ee05c7 100644 --- a/scripts/object/tangible/deed/vehicle_deed/landspeeder_x34_deed.py +++ b/scripts/object/tangible/deed/vehicle_deed/landspeeder_x34_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_landspeeder_x34.iff', 'object/intangible/vehicle/shared_landspeeder_x34_pcd.iff') return \ No newline at end of file diff --git a/scripts/object/tangible/deed/vehicle_deed/landspeeder_xp38_deed.py b/scripts/object/tangible/deed/vehicle_deed/landspeeder_xp38_deed.py index ccad8904..f43f4ec3 100644 --- a/scripts/object/tangible/deed/vehicle_deed/landspeeder_xp38_deed.py +++ b/scripts/object/tangible/deed/vehicle_deed/landspeeder_xp38_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_landspeeder_xp38.iff', 'object/intangible/vehicle/shared_landspeeder_xp38_pcd.iff') return \ No newline at end of file diff --git a/scripts/object/tangible/deed/vehicle_deed/mustafar_panning_droid.py b/scripts/object/tangible/deed/vehicle_deed/mustafar_panning_droid.py index ccad8904..08de9824 100644 --- a/scripts/object/tangible/deed/vehicle_deed/mustafar_panning_droid.py +++ b/scripts/object/tangible/deed/vehicle_deed/mustafar_panning_droid.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_mustafar_panning_droid.iff', 'object/intangible/vehicle/shared_mustafar_panning_droid_pcd.iff') return \ No newline at end of file diff --git a/scripts/object/tangible/deed/vehicle_deed/speederbike_deed.py b/scripts/object/tangible/deed/vehicle_deed/speederbike_deed.py index ccad8904..88e6c4c0 100644 --- a/scripts/object/tangible/deed/vehicle_deed/speederbike_deed.py +++ b/scripts/object/tangible/deed/vehicle_deed/speederbike_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_speederbike.iff', 'object/intangible/vehicle/shared_speederbike_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/series1/vehicle_deed_organa_speeder.py b/scripts/object/tangible/tcg/series1/vehicle_deed_organa_speeder.py index ccad8904..998c59dd 100644 --- a/scripts/object/tangible/tcg/series1/vehicle_deed_organa_speeder.py +++ b/scripts/object/tangible/tcg/series1/vehicle_deed_organa_speeder.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_landspeeder_organa.iff', 'object/intangible/vehicle/shared_landspeeder_organa_pcd.iff') return \ 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/tcg/series4/vehicle_deed_geonosian_speeder.py b/scripts/object/tangible/tcg/series4/vehicle_deed_geonosian_speeder.py index ccad8904..dbabab25 100644 --- a/scripts/object/tangible/tcg/series4/vehicle_deed_geonosian_speeder.py +++ b/scripts/object/tangible/tcg/series4/vehicle_deed_geonosian_speeder.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_geonosian_speeder.iff', 'object/intangible/vehicle/shared_geonosian_speeder_pcd.iff') return \ No newline at end of file diff --git a/scripts/object/tangible/tcg/series7/garage_display_vehicles/grievous_wheel_bike.py b/scripts/object/tangible/tcg/series7/garage_display_vehicles/grievous_wheel_bike.py index ccad8904..f7df0260 100644 --- a/scripts/object/tangible/tcg/series7/garage_display_vehicles/grievous_wheel_bike.py +++ b/scripts/object/tangible/tcg/series7/garage_display_vehicles/grievous_wheel_bike.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_grievous_wheel_bike.iff', 'object/intangible/vehicle/shared_grievous_wheel_bike.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/terminal/terminal_travel_instant.py b/scripts/object/tangible/terminal/terminal_travel_instant.py index ccad8904..cbeffc7a 100644 --- a/scripts/object/tangible/terminal/terminal_travel_instant.py +++ b/scripts/object/tangible/terminal/terminal_travel_instant.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'terminal/travel_terminal_itv') return \ No newline at end of file diff --git a/scripts/object/tangible/terminal/terminal_travel_instant_jalopy.py b/scripts/object/tangible/terminal/terminal_travel_instant_jalopy.py index ccad8904..cbeffc7a 100644 --- a/scripts/object/tangible/terminal/terminal_travel_instant_jalopy.py +++ b/scripts/object/tangible/terminal/terminal_travel_instant_jalopy.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'terminal/travel_terminal_itv') return \ No newline at end of file diff --git a/scripts/object/tangible/terminal/terminal_travel_instant_privateer.py b/scripts/object/tangible/terminal/terminal_travel_instant_privateer.py index ccad8904..cbeffc7a 100644 --- a/scripts/object/tangible/terminal/terminal_travel_instant_privateer.py +++ b/scripts/object/tangible/terminal/terminal_travel_instant_privateer.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'terminal/travel_terminal_itv') return \ No newline at end of file diff --git a/scripts/object/tangible/terminal/terminal_travel_instant_royal_ship.py b/scripts/object/tangible/terminal/terminal_travel_instant_royal_ship.py index ccad8904..cbeffc7a 100644 --- a/scripts/object/tangible/terminal/terminal_travel_instant_royal_ship.py +++ b/scripts/object/tangible/terminal/terminal_travel_instant_royal_ship.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'terminal/travel_terminal_itv') return \ No newline at end of file diff --git a/scripts/object/tangible/terminal/terminal_travel_instant_snowspeeder.py b/scripts/object/tangible/terminal/terminal_travel_instant_snowspeeder.py index ccad8904..cbeffc7a 100644 --- a/scripts/object/tangible/terminal/terminal_travel_instant_snowspeeder.py +++ b/scripts/object/tangible/terminal/terminal_travel_instant_snowspeeder.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'terminal/travel_terminal_itv') return \ No newline at end of file diff --git a/scripts/object/tangible/terminal/terminal_travel_instant_tcg_home.py b/scripts/object/tangible/terminal/terminal_travel_instant_tcg_home.py index ccad8904..cbeffc7a 100644 --- a/scripts/object/tangible/terminal/terminal_travel_instant_tcg_home.py +++ b/scripts/object/tangible/terminal/terminal_travel_instant_tcg_home.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'terminal/travel_terminal_itv') return \ No newline at end of file diff --git a/scripts/object/tangible/terminal/terminal_travel_instant_tcg_location.py b/scripts/object/tangible/terminal/terminal_travel_instant_tcg_location.py index ccad8904..cbeffc7a 100644 --- a/scripts/object/tangible/terminal/terminal_travel_instant_tcg_location.py +++ b/scripts/object/tangible/terminal/terminal_travel_instant_tcg_location.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'terminal/travel_terminal_itv') return \ No newline at end of file diff --git a/scripts/object/tangible/terminal/terminal_travel_instant_tcg_slave_1.py b/scripts/object/tangible/terminal/terminal_travel_instant_tcg_slave_1.py index ccad8904..cbeffc7a 100644 --- a/scripts/object/tangible/terminal/terminal_travel_instant_tcg_slave_1.py +++ b/scripts/object/tangible/terminal/terminal_travel_instant_tcg_slave_1.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'terminal/travel_terminal_itv') return \ No newline at end of file diff --git a/scripts/object/tangible/terminal/terminal_travel_instant_tie.py b/scripts/object/tangible/terminal/terminal_travel_instant_tie.py index ccad8904..cbeffc7a 100644 --- a/scripts/object/tangible/terminal/terminal_travel_instant_tie.py +++ b/scripts/object/tangible/terminal/terminal_travel_instant_tie.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'terminal/travel_terminal_itv') return \ No newline at end of file diff --git a/scripts/object/tangible/terminal/terminal_travel_instant_xwing.py b/scripts/object/tangible/terminal/terminal_travel_instant_xwing.py index ccad8904..cbeffc7a 100644 --- a/scripts/object/tangible/terminal/terminal_travel_instant_xwing.py +++ b/scripts/object/tangible/terminal/terminal_travel_instant_xwing.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'terminal/travel_terminal_itv') 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..1be134b6 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', 1) + 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..10409c89 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,19 @@ 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.setIntAttribute('no_trade', 1) + 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..650febfe 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,19 @@ 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.setIntAttribute('no_trade', 1) + 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..f7d17219 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,19 @@ 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.setIntAttribute('no_trade', 1) + 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..33dcbf3c 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,19 @@ 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.setIntAttribute('no_trade', 1) + 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..184723ac 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,19 @@ 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.setIntAttribute('no_trade', 1) + 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..8c28a413 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,19 @@ 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.setIntAttribute('no_trade', 1) + 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..2e0a2417 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,19 @@ 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.setIntAttribute('no_trade', 1) + 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..1c20649b 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,19 @@ 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.setIntAttribute('no_trade', 1) + 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..0a1d10f5 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,19 @@ 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.setIntAttribute('no_trade', 1) + 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..3c98941f --- /dev/null +++ b/scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_belt_05_01.py @@ -0,0 +1,20 @@ +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.setIntAttribute('no_trade', 1) + 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..179295b4 --- /dev/null +++ b/scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_bicep_l_05_01.py @@ -0,0 +1,20 @@ +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.setIntAttribute('no_trade', 1) + 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..72138305 --- /dev/null +++ b/scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_bicep_r_05_01.py @@ -0,0 +1,20 @@ +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.setIntAttribute('no_trade', 1) + 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..5e993cf8 --- /dev/null +++ b/scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_boots_05_01.py @@ -0,0 +1,20 @@ +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.setIntAttribute('no_trade', 1) + 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..f0d2c99e --- /dev/null +++ b/scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_bracer_l_05_01.py @@ -0,0 +1,20 @@ +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.setIntAttribute('no_trade', 1) + 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..e4e9b30e --- /dev/null +++ b/scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_bracer_r_05_01.py @@ -0,0 +1,20 @@ +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.setIntAttribute('no_trade', 1) + 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..bfcbba83 --- /dev/null +++ b/scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_gloves_05_01.py @@ -0,0 +1,20 @@ +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.setIntAttribute('no_trade', 1) + 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..c829419a --- /dev/null +++ b/scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_helmet_05_01.py @@ -0,0 +1,20 @@ +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.setIntAttribute('no_trade', 1) + 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..63a35e00 --- /dev/null +++ b/scripts/object/tangible/wearables/armor/stormtrooper/armor_pvp_spec_ops_imperial_black_leggings_05_01.py @@ -0,0 +1,20 @@ +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.setIntAttribute('no_trade', 1) + 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..5aaed187 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,19 @@ 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.setIntAttribute('no_trade', 1) + 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_jedi_utility_a_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_jedi_utility_a_01_01.py index 96000158..c4e637fd 100644 --- a/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_jedi_utility_a_01_01.py +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_jedi_utility_a_01_01.py @@ -11,8 +11,8 @@ def setup(core, object): object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_fs_ae_dm_cc', 2) object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_fs_cc_crit', 3) object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_fs_ae_dm_cc', 3) - object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_jedi_utility_a_1') - object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_jedi_utility_a_2') - object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_jedi_utility_a_3') - object.setAttachment('setBonus', 'set_jedi_utility_a') - return \ No newline at end of file + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_jedi_utility_a_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_jedi_utility_a_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_jedi_utility_a_3') + object.setAttachment('setBonus', 'set_bonus_jedi_utility_a') + return diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_jedi_utility_b_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_jedi_utility_b_01_01.py index 62f71073..35b7d900 100644 --- a/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_jedi_utility_b_01_01.py +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_jedi_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_glancing_blow_all', 1) object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_critical_hit_reduction', 1) - object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_jedi_utility_b_1') - object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_jedi_utility_b_2') - object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_jedi_utility_b_3') - object.setAttachment('setBonus', 'set_jedi_utility_b') - return \ No newline at end of file + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_jedi_utility_b_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_jedi_utility_b_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_jedi_utility_b_3') + object.setAttachment('setBonus', 'set_bonus_jedi_utility_b') + return 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_jedi_utility_a_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_jedi_utility_a_01_01.py index 9dda97ca..cac623c4 100644 --- a/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_jedi_utility_a_01_01.py +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_jedi_utility_a_01_01.py @@ -11,8 +11,8 @@ def setup(core, object): object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_fs_ae_dm_cc', 2) object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_fs_cc_crit', 3) object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_fs_ae_dm_cc', 3) - object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_jedi_utility_a_1') - object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_jedi_utility_a_2') - object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_jedi_utility_a_3') - object.setAttachment('setBonus', 'set_jedi_utility_a') - return \ No newline at end of file + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_jedi_utility_a_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_jedi_utility_a_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_jedi_utility_a_3') + object.setAttachment('setBonus', 'set_bonus_jedi_utility_a') + return diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_jedi_utility_b_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_jedi_utility_b_01_01.py index db66599a..3122303d 100644 --- a/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_jedi_utility_b_01_01.py +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_jedi_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_glancing_blow_all', 1) object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_critical_hit_reduction', 1) - object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_jedi_utility_b_1') - object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_jedi_utility_b_2') - object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_jedi_utility_b_3') - object.setAttachment('setBonus', 'set_jedi_utility_b') - return \ No newline at end of file + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_jedi_utility_b_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_jedi_utility_b_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_jedi_utility_b_3') + object.setAttachment('setBonus', 'set_bonus_jedi_utility_b') + 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_jedi_utility_a_01_01.py b/scripts/object/tangible/wearables/necklace/item_necklace_set_jedi_utility_a_01_01.py index 5f3dedba..8f14f8f6 100644 --- a/scripts/object/tangible/wearables/necklace/item_necklace_set_jedi_utility_a_01_01.py +++ b/scripts/object/tangible/wearables/necklace/item_necklace_set_jedi_utility_a_01_01.py @@ -11,8 +11,8 @@ def setup(core, object): object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_fs_ae_dm_cc', 2) object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_fs_cc_crit', 3) object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_fs_ae_dm_cc', 3) - object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_jedi_utility_a_1') - object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_jedi_utility_a_2') - object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_jedi_utility_a_3') - object.setAttachment('setBonus', 'set_jedi_utility_a') - return \ No newline at end of file + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_jedi_utility_a_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_jedi_utility_a_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_jedi_utility_a_3') + object.setAttachment('setBonus', 'set_bonus_jedi_utility_a') + return diff --git a/scripts/object/tangible/wearables/necklace/item_necklace_set_jedi_utility_b_01_01.py b/scripts/object/tangible/wearables/necklace/item_necklace_set_jedi_utility_b_01_01.py index 70b69a4a..59e83c1f 100644 --- a/scripts/object/tangible/wearables/necklace/item_necklace_set_jedi_utility_b_01_01.py +++ b/scripts/object/tangible/wearables/necklace/item_necklace_set_jedi_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_glancing_blow_all', 1) object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_critical_hit_reduction', 1) - object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_jedi_utility_b_1') - object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_jedi_utility_b_2') - object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_jedi_utility_b_3') - object.setAttachment('setBonus', 'set_jedi_utility_b') - return \ No newline at end of file + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_jedi_utility_b_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_jedi_utility_b_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_jedi_utility_b_3') + object.setAttachment('setBonus', 'set_bonus_jedi_utility_b') + 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_jedi_utility_a_01_01.py b/scripts/object/tangible/wearables/ring/item_band_set_jedi_utility_a_01_01.py index 295383ef..dc983d30 100644 --- a/scripts/object/tangible/wearables/ring/item_band_set_jedi_utility_a_01_01.py +++ b/scripts/object/tangible/wearables/ring/item_band_set_jedi_utility_a_01_01.py @@ -13,8 +13,8 @@ def setup(core, object): object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_fs_ae_dm_cc', 2) object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_fs_cc_crit', 3) object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_fs_ae_dm_cc', 3) - object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_jedi_utility_a_1') - object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_jedi_utility_a_2') - object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_jedi_utility_a_3') - object.setAttachment('setBonus', 'set_jedi_utility_a') - return \ No newline at end of file + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_jedi_utility_a_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_jedi_utility_a_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_jedi_utility_a_3') + object.setAttachment('setBonus', 'set_bonus_jedi_utility_a') + return diff --git a/scripts/object/tangible/wearables/ring/item_band_set_jedi_utility_b_01_01.py b/scripts/object/tangible/wearables/ring/item_band_set_jedi_utility_b_01_01.py index 9aae6cd1..13f08e64 100644 --- a/scripts/object/tangible/wearables/ring/item_band_set_jedi_utility_b_01_01.py +++ b/scripts/object/tangible/wearables/ring/item_band_set_jedi_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_glancing_blow_all', 1) object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_critical_hit_reduction', 1) - object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_jedi_utility_b_1') - object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_jedi_utility_b_2') - object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_jedi_utility_b_3') - object.setAttachment('setBonus', 'set_jedi_utility_b') - return \ No newline at end of file + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_jedi_utility_b_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_jedi_utility_b_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_jedi_utility_b_3') + object.setAttachment('setBonus', 'set_bonus_jedi_utility_b') + return 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_jedi_utility_a_01_01.py b/scripts/object/tangible/wearables/ring/item_ring_set_jedi_utility_a_01_01.py index 651141da..0bc7d014 100644 --- a/scripts/object/tangible/wearables/ring/item_ring_set_jedi_utility_a_01_01.py +++ b/scripts/object/tangible/wearables/ring/item_ring_set_jedi_utility_a_01_01.py @@ -13,8 +13,8 @@ def setup(core, object): object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_fs_ae_dm_cc', 2) object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_fs_cc_crit', 3) object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_fs_ae_dm_cc', 3) - object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_jedi_utility_a_1') - object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_jedi_utility_a_2') - object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_jedi_utility_a_3') - object.setAttachment('setBonus', 'set_jedi_utility_a') - return \ No newline at end of file + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_jedi_utility_a_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_jedi_utility_a_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_jedi_utility_a_3') + object.setAttachment('setBonus', 'set_bonus_jedi_utility_a') + return diff --git a/scripts/object/tangible/wearables/ring/item_ring_set_jedi_utility_b_01_01.py b/scripts/object/tangible/wearables/ring/item_ring_set_jedi_utility_b_01_01.py index a6b3d8ec..c0c8550e 100644 --- a/scripts/object/tangible/wearables/ring/item_ring_set_jedi_utility_b_01_01.py +++ b/scripts/object/tangible/wearables/ring/item_ring_set_jedi_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_glancing_blow_all', 1) object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_critical_hit_reduction', 1) - object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_jedi_utility_b_1') - object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_jedi_utility_b_2') - object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_jedi_utility_b_3') - object.setAttachment('setBonus', 'set_jedi_utility_b') - return \ No newline at end of file + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_jedi_utility_b_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_jedi_utility_b_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_jedi_utility_b_3') + object.setAttachment('setBonus', 'set_bonus_jedi_utility_b') + return 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..4775bebf --- /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.getSpawnedPetForPCD(target) is None: + radials.add(RadialOptions(0, 45, 1, '@pet/pet_menu:menu_call')) + else: + radials.add(RadialOptions(0, 45, 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 == 45 and target: + if core.petService.getSpawnedPetForPCD(target) is None: + core.petService.call(owner, None, target) + else: + core.petService.store(owner, core.petService.getSpawnedPetForPCD(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..6c16964f --- /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 tertiary 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/npc/bounty_seeker.py b/scripts/radial/npc/bounty_seeker.py index f619a5bb..bcd07349 100644 --- a/scripts/radial/npc/bounty_seeker.py +++ b/scripts/radial/npc/bounty_seeker.py @@ -33,8 +33,8 @@ def handleSelection(core, owner, target, option): pos = SpawnPoint.getRandomPosition(owner.getPosition(), 1, 3, owner.getPlanetId()) ori = owner.getOrientation() seeker = core.staticService.spawnObject('object/creature/npc/droid/crafted/shared_probe_droid_advanced.iff', owner.getPlanet().getName(), 0, pos.x, pos.y, pos.z, ori.y, ori.w) - time.sleep(3) owner.sendSystemMessage('@mission/mission_generic:seeker_droid_standby', 0) + time.sleep(3) seeker.setPosture(8) time.sleep(6.5) core.objectService.destroyObject(seeker) @@ -42,5 +42,31 @@ def handleSelection(core, owner, target, option): return if option == 137 and target: + id = owner.getPlayerObject().getBountyMissionId() + if id is None or id == 0: + owner.sendSystemMessage('@mission/mission_generic:bounty_no_mission', 0) + return + + mission = core.objectService.getObject(id) + if mission is None: + owner.sendSystemMessage('@mission/mission_generic:bounty_no_mission', 0) + return + + if mission.getObjective().isSeekerActive(): + owner.sendSystemMessage('@mission/mission_generic:bounty_already_tracking', 0) + return + if target.getUses() == 0: + core.objectService.destroyObject(target) + else: + target.setUses(target.getUses() - 1) + pos = SpawnPoint.getRandomPosition(owner.getPosition(), 1, 3, owner.getPlanetId()) + ori = owner.getOrientation() + seeker = core.staticService.spawnObject('object/creature/npc/droid/crafted/shared_probe_droid_advanced.iff', owner.getPlanet().getName(), 0, pos.x, pos.y, pos.z, ori.y, ori.w) + owner.sendSystemMessage('@mission/mission_generic:seeker_droid_standby', 0) + time.sleep(3) + seeker.setPosture(8) + time.sleep(6.5) + core.objectService.destroyObject(seeker) + mission.getObjective().beginIdentifyTarget(core, owner) return return \ No newline at end of file diff --git a/scripts/radial/npc/pet_radial.py b/scripts/radial/npc/pet_radial.py new file mode 100644 index 00000000..08dbc86b --- /dev/null +++ b/scripts/radial/npc/pet_radial.py @@ -0,0 +1,18 @@ +from resources.common import RadialOptions +import sys + +def createRadial(core, owner, target, radials): + + radials.add(RadialOptions(0, 45, 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 == 45 and target: + core.petService.store(owner, target) + elif option == 15 and target: + core.petService.destroy(owner, target) + + return + \ No newline at end of file diff --git a/scripts/radial/npc/untamable.py b/scripts/radial/npc/untamable.py new file mode 100644 index 00000000..420fb6d0 --- /dev/null +++ b/scripts/radial/npc/untamable.py @@ -0,0 +1,12 @@ +from resources.common import RadialOptions +import sys + +def createRadial(core, owner, target, radials): + radials.clear() + + return + +def handleSelection(core, owner, target, option): + + + \ No newline at end of file diff --git a/scripts/radial/npc/untamed.py b/scripts/radial/npc/untamed.py new file mode 100644 index 00000000..c54a242e --- /dev/null +++ b/scripts/radial/npc/untamed.py @@ -0,0 +1,18 @@ +from resources.common import RadialOptions +import sys + +def createRadial(core, owner, target, radials): + radials.clear() + # and check if owner is a beast master! + #owner.sendSystemMessage('UNTAMED', 1) + #if target.getAttachment('tamed'): + radials.add(RadialOptions(0, 159, 3, '@pet/pet_menu:menu_tame')) + + return + +def handleSelection(core, owner, target, option): + + if option == 159: + core.petService.tame(owner, 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 6aee6a2b..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) @@ -341,11 +408,12 @@ def handleSetCityName(core, owner, target, option): returnList = Vector() returnList.add('txtInput:LocalText') window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, setNameCallBack) - + core.suiService.openSUIWindow(window) return def setNameCallBack(owner, window, eventType, returnList): + core = main.NGECore.getInstance() if returnList.size()==0: return name = returnList.get(0) diff --git a/scripts/radial/terminal/travel_terminal_itv.py b/scripts/radial/terminal/travel_terminal_itv.py new file mode 100644 index 00000000..510d23f9 --- /dev/null +++ b/scripts/radial/terminal/travel_terminal_itv.py @@ -0,0 +1,31 @@ +from resources.common import RadialOptions +from protocol.swg import EnterTicketPurchaseModeMessage +import sys + +def createRadial(core, owner, target, radials): + return + +def handleSelection(core, owner, target, option): + + + if option == 21 and target: + + if owner is not None: + if owner.getCombatFlag() == 1: + owner.sendSystemMessage('You can\'t use that while in combat.', 0) + return + tpm = EnterTicketPurchaseModeMessage(owner.getPlanet().getName(), core.mapService.getClosestCityName(owner), owner) + owner.getClient().getSession().write(tpm.serialize()) + return + return + +def handleSUI(owner, window, eventType, returnList): + + return + +def use(core, actor, object): + if actor.getObjectID() != object.getOwnerId(): + actor.sendSystemMessage('@travel:not_your_ship', 0) + return + return + \ No newline at end of file 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/dathomir/ns_vs_smc_battle.py b/scripts/static_spawns/dathomir/ns_vs_smc_battle.py index 98c3f2cb..449363b1 100644 --- a/scripts/static_spawns/dathomir/ns_vs_smc_battle.py +++ b/scripts/static_spawns/dathomir/ns_vs_smc_battle.py @@ -13,9 +13,9 @@ def addPlanetSpawns(core, planet): Nightsister_RancorTamer_1 = stcSvc.spawnObject('nightsister_rancor_tamer', 'dathomir', long(0), float(-2495), float(122), float(1501), float(0.0007), float(0.999)) Nightsister_Outcast_1 = stcSvc.spawnObject('nightsister_outcast', 'dathomir', long(0), float(-2480), float(119), float(1519), float(0.0007), float(0.999)) Nightsister_Initiate_1 = stcSvc.spawnObject('nightsister_initiate', 'dathomir', long(0), float(-2494), float(124), float(1518), float(0.0007), float(0.999)) - Nightsister_Sentinel_1 = stcSvc.spawnObject('nightsister_sentinal', 'dathomir', long(0), float(-2516), float(124), float(1520), float(0.0007), float(0.999)) + Nightsister_Sentinel_1 = stcSvc.spawnObject('nightsister_sentinel', 'dathomir', long(0), float(-2516), float(124), float(1520), float(0.0007), float(0.999)) Nightsister_Stalker_1 = stcSvc.spawnObject('nightsister_stalker', 'dathomir', long(0), float(-2516), float(128), float(1503), float(0.0007), float(0.999)) - Nightsister_Sentinel_2 = stcSvc.spawnObject('nightsister_sentinal', 'dathomir', long(0), float(-2516), float(124), float(1520), float(0.0007), float(0.999)) + Nightsister_Sentinel_2 = stcSvc.spawnObject('nightsister_sentinel', 'dathomir', long(0), float(-2516), float(124), float(1520), float(0.0007), float(0.999)) Nightsister_Initiate_1 = stcSvc.spawnObject('nightsister_initiate', 'dathomir', long(0), float(-2540), float(125), float(1521), float(0.0007), float(0.999)) Nightsister_Outcast_2 = stcSvc.spawnObject('nightsister_outcast', 'dathomir', long(0), float(-2557), float(125), float(1522), float(0.0007), float(0.999)) Nightsister_Rancor_2 = stcSvc.spawnObject('nightsister_rancor', 'dathomir', long(0), float(-2556), float(125), float(1505), float(0.0007), float(0.999)) diff --git a/scripts/static_spawns/tatooine/jabba_tp_alkharan_camp.py b/scripts/static_spawns/tatooine/jabba_tp_alkharan_camp.py new file mode 100644 index 00000000..2b413ef5 --- /dev/null +++ b/scripts/static_spawns/tatooine/jabba_tp_alkharan_camp.py @@ -0,0 +1,32 @@ +import sys +# Project SWG: Jabba TP Alkharan Camp: Static Spawns +# (C)2014 ProjectSWG + + + +from resources.datatables import Options +from resources.datatables import State + +def addPlanetSpawns(core, planet): + + + stcSvc = core.staticService + objSvc = core.objectService + + # TODO Check all NPCs for personalized scripting, change format. + + stcSvc.spawnObject('alkhara_bandit', 'tatooine', long(0), float(-5454.6), float(38.9), float(-6122), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('alkhara_bandit', 'tatooine', long(0), float(-5436.6), float(39), float(-6122.9), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('alkhara_bandit', 'tatooine', long(0), float(-5431.7), float(37.8), float(-6104.6), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('alkhara_bandit', 'tatooine', long(0), float(-5439.2), float(39), float(-6100.1), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('alkhara_bandit', 'tatooine', long(0), float(-5459.8), float(38.4), float(-6109.3), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('alkhara_bandit', 'tatooine', long(0), float(-5412.5), float(36.5), float(-6105.3), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('alkhara_bandit', 'tatooine', long(0), float(-5449.5), float(38.7), float(-6103), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('alkhara_bandit', 'tatooine', long(0), float(-5440.4), float(37.5), float(-6112.7), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('alkhara_bandit', 'tatooine', long(0), float(-5425.2), float(37.4), float(-6120.6), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('alkhara_bandit', 'tatooine', long(0), float(-5419.6), float(37), float(-6112.2), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('alkhara_bandit', 'tatooine', long(0), float(-5416.9), float(39.2), float(-6122.7), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('alkhara_bandit', 'tatooine', long(0), float(-5452.6), float(40.1), float(-6127.5), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('alkhara_bandit', 'tatooine', long(0), float(-5445.4), float(39.4), float(-6124.9), float(0), float(0), float(0), float(0), 45) + return + diff --git a/scripts/static_spawns/tatooine/jabba_tp_dragonet.py b/scripts/static_spawns/tatooine/jabba_tp_dragonet.py new file mode 100644 index 00000000..d1c5e651 --- /dev/null +++ b/scripts/static_spawns/tatooine/jabba_tp_dragonet.py @@ -0,0 +1,50 @@ +import sys +# Project SWG: Jabba TP Dragonet: Static Spawns +# (C)2014 ProjectSWG + + + +from resources.datatables import Options +from resources.datatables import State + +def addPlanetSpawns(core, planet): + + + stcSvc = core.staticService + objSvc = core.objectService + + #TODO Check all NPCs for personalized scripting, change format. + + stcSvc.spawnObject('dragonet_runt', 'tatooine', long(0), float(-4643), float(35.2), float(-4727), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('dragonet_runt', 'tatooine', long(0), float(-4648.5), float(36.1), float(-4743.6), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('dragonet_runt', 'tatooine', long(0), float(-4661.9), float(35.6), float(-4751.6), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('dragonet_runt', 'tatooine', long(0), float(-4676), float(32.8), float(-4752.3), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('dragonet_runt', 'tatooine', long(0), float(-4693.6), float(27.8), float(-4735.4), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('dragonet_runt', 'tatooine', long(0), float(-4702.1), float(30.2), float(-4722.8), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('dragonet_runt', 'tatooine', long(0), float(-4679.9), float(33.3), float(-4711), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('dragonet_runt', 'tatooine', long(0), float(-4660.6), float(32.5), float(-4701.4), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('dragonet_runt', 'tatooine', long(0), float(-4635.9), float(35.7), float(-4701.6), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('dragonet_runt', 'tatooine', long(0), float(-4612.9), float(42.9), float(-4712.7), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('dragonet_runt', 'tatooine', long(0), float(-4580.9), float(51.3), float(-4737.4), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('dragonet_runt', 'tatooine', long(0), float(-4580.3), float(51.6), float(-4753), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('dragonet_runt', 'tatooine', long(0), float(-4604.5), float(50.7), float(-4765.2), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('dragonet_runt', 'tatooine', long(0), float(-4617.6), float(49.3), float(-4783.8), float(0), float(0), float(0), float(0), 45) + + stcSvc.spawnObject('dragonet_runt', 'tatooine', long(0), float(-4661.4), float(32), float(-4723.8), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('dragonet_runt', 'tatooine', long(0), float(-4676.4), float(29.8), float(-4736.3), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('dragonet_runt', 'tatooine', long(0), float(-4693.2), float(32.5), float(-4759.3), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('dragonet_runt', 'tatooine', long(0), float(-4696.7), float(36.8), float(-4769.5), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('dragonet_runt', 'tatooine', long(0), float(-4683.1), float(39.9), float(-4769.9), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('dragonet_runt', 'tatooine', long(0), float(-4668.8), float(41.4), float(-4773.5), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('dragonet_runt', 'tatooine', long(0), float(-4653.3), float(43.8), float(-4771.1), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('dragonet_runt', 'tatooine', long(0), float(-4634.8), float(46.5), float(-4764.9), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('dragonet_runt', 'tatooine', long(0), float(-4615.7), float(46.4), float(-4749.6), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('dragonet_runt', 'tatooine', long(0), float(-4621.1), float(41.3), float(-4736.6), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('dragonet_runt', 'tatooine', long(0), float(-4597.7), float(41.6), float(-4706), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('dragonet_runt', 'tatooine', long(0), float(-4613.2), float(33.2), float(-4689.8), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('dragonet_runt', 'tatooine', long(0), float(-4636.7), float(28.7), float(-4680.4), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('dragonet_runt', 'tatooine', long(0), float(-4677.5), float(28.4), float(-4691.4), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('dragonet_runt', 'tatooine', long(0), float(-4698.9), float(27.7), float(-4698.8), float(0), float(0), float(0), float(0), 45) + + return + diff --git a/scripts/static_spawns/tatooine/jabba_tp_dune_lizards.py b/scripts/static_spawns/tatooine/jabba_tp_dune_lizards.py new file mode 100644 index 00000000..d1a4ce3f --- /dev/null +++ b/scripts/static_spawns/tatooine/jabba_tp_dune_lizards.py @@ -0,0 +1,37 @@ +import sys +# Project SWG: Jabba TP Dune Lizards: Static Spawns +# (C)2014 ProjectSWG + + + +from resources.datatables import Options +from resources.datatables import State + +def addPlanetSpawns(core, planet): + + + stcSvc = core.staticService + objSvc = core.objectService + + # TODO Check all NPCs for personalized scripting, change format. + + stcSvc.spawnObject('dune_lizard', 'tatooine', long(0), float(-5884.1), float(49.9), float(-5956.4), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('dune_lizard', 'tatooine', long(0), float(-5903.1), float(49.4), float(-5938.7), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('dune_lizard', 'tatooine', long(0), float(-5885.3), float(49.5), float(-5929.1), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('dune_lizard', 'tatooine', long(0), float(-5857), float(54.4), float(-5942), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('dune_lizard', 'tatooine', long(0), float(-5846.1), float(55.1), float(-5928.5), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('dune_lizard', 'tatooine', long(0), float(-5899.2), float(51.3), float(-5983.5), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('dune_lizard', 'tatooine', long(0), float(-5907.9), float(52.3), float(-5964), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('dune_lizard', 'tatooine', long(0), float(-5892.8), float(50.6), float(-5941.7), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('dune_lizard', 'tatooine', long(0), float(-5871.8), float(52), float(-5934.4), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('dune_lizard', 'tatooine', long(0), float(-5855.2), float(52.2), float(-5915.1), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('dune_lizard', 'tatooine', long(0), float(-5864.4), float(49.1), float(-5903.6), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('dune_lizard', 'tatooine', long(0), float(-5882.5), float(49.1), float(-5907.7), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('dune_lizard', 'tatooine', long(0), float(-5899.4), float(48.1), float(-5916.4), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('dune_lizard', 'tatooine', long(0), float(-5874.3), float(50.9), float(-5949.9), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('dune_lizard', 'tatooine', long(0), float(-5869.3), float(48.9), float(-5962.2), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('dune_lizard', 'tatooine', long(0), float(-5868.7), float(45.8), float(-5975.4), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('dune_lizard', 'tatooine', long(0), float(-5882.9), float(47.6), float(-5975.7), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('dune_lizard', 'tatooine', long(0), float(-5876), float(45.1), float(-5989.7), float(0), float(0), float(0), float(0), 45) + return + diff --git a/scripts/static_spawns/tatooine/jabba_tp_mountain_squill.py b/scripts/static_spawns/tatooine/jabba_tp_mountain_squill.py new file mode 100644 index 00000000..ba6b1055 --- /dev/null +++ b/scripts/static_spawns/tatooine/jabba_tp_mountain_squill.py @@ -0,0 +1,48 @@ +import sys +# Project SWG: Jabba TP Mountain Squills: Static Spawns +# (C)2014 ProjectSWG + + + +from resources.datatables import Options +from resources.datatables import State + +def addPlanetSpawns(core, planet): + + + stcSvc = core.staticService + objSvc = core.objectService + + # TODO Check all NPCs for personalized scripting, change format. + + stcSvc.spawnObject('mountain_squill', 'tatooine', long(0), float(-3903.4), float(54.4), float(-4889), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('mountain_squill', 'tatooine', long(0), float(-3911.6), float(54.1), float(-4893.1), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('mountain_squill_guardian', 'tatooine', long(0), float(-3930.6), float(52.3), float(-4897.5), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('mountain_squill', 'tatooine', long(0), float(-3942.5), float(50.1), float(-4894.2), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('mountain_squill_hunter', 'tatooine', long(0), float(-3952.5), float(44.7), float(-4883.8), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('mountain_squill', 'tatooine', long(0), float(-3949), float(39.6), float(-4864.7), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('mountain_squill_guardian', 'tatooine', long(0), float(-3932), float(41.4), float(-4853.6), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('mountain_squill', 'tatooine', long(0), float(-3921.3), float(43.6), float(-4849.9), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('mountain_squill', 'tatooine', long(0), float(-3885.9), float(49.5), float(-4860), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('mountain_squill_hunter', 'tatooine', long(0), float(-3936.7), float(48.8), float(-4887.8), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('mountain_squill', 'tatooine', long(0), float(-3946), float(43.1), float(-4875.4), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('mountain_squill_guardian', 'tatooine', long(0), float(-3921.6), float(46.3), float(-4866.9), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('mountain_squill_guardian', 'tatooine', long(0), float(-3897.7), float(43.7), float(-4885.5), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('mountain_squill', 'tatooine', long(0), float(-3936.1), float(51.6), float(-4908.2), float(0), float(0), float(0), float(0), 45) + + stcSvc.spawnObject('mountain_squill', 'tatooine', long(0), float(-3897.7), float(51.4), float(-4869.3), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('mountain_squill_guardian', 'tatooine', long(0), float(-3903), float(44.7), float(-4845.2), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('mountain_squill', 'tatooine', long(0), float(-3894.5), float(43.8), float(-4835), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('mountain_squill_hunter', 'tatooine', long(0), float(-3881.9), float(45), float(-4840.4), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('mountain_squill', 'tatooine', long(0), float(-3917.9), float(54.1), float(-4900.8), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('mountain_squill_guardian', 'tatooine', long(0), float(-3952.9), float(49), float(-4901.8), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('mountain_squill', 'tatooine', long(0), float(-3964.7), float(47.2), float(-4896.4), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('mountain_squill_guardian', 'tatooine', long(0), float(-3969.1), float(42.9), float(-4883.5), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('mountain_squill_hunter', 'tatooine', long(0), float(-3969.5), float(37.7), float(-4867), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('mountain_squill', 'tatooine', long(0), float(-3960.8), float(35.3), float(-4846.8), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('mountain_squill_guardian', 'tatooine', long(0), float(-3941.4), float(38.3), float(-4842.6), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('mountain_squill', 'tatooine', long(0), float(-3931.7), float(39.6), float(-4835.6), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('mountain_squill', 'tatooine', long(0), float(-3916.2), float(41.4), float(-4831.1), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('mountain_squill_hunter', 'tatooine', long(0), float(-3905.5), float(47.8), float(-4858.1), float(0), float(0), float(0), float(0), 45) + return + diff --git a/scripts/static_spawns/tatooine/jabba_tp_pod_racer_bunker.py b/scripts/static_spawns/tatooine/jabba_tp_pod_racer_bunker.py new file mode 100644 index 00000000..9fba0576 --- /dev/null +++ b/scripts/static_spawns/tatooine/jabba_tp_pod_racer_bunker.py @@ -0,0 +1,58 @@ +import sys +# Project SWG: Jabba TP Pod Racer Bunker: Static Spawns +# (C)2014 ProjectSWG + + + +from resources.datatables import Options +from resources.datatables import State + +def addPlanetSpawns(core, planet): + + + stcSvc = core.staticService + objSvc = core.objectService + + # TODO Check all NPCs for personalized scripting, change format. + + stcSvc.spawnObject('valarian_pod_racer', 'tatooine', long(0), float(-714.5), float(11), float(-6281), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_pod_racer', 'tatooine', long(0), float(-708.6), float(11.9), float(-6268.9), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_pod_racer', 'tatooine', long(0), float(-691.2), float(12.2), float(-6269.3), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_pod_racer', 'tatooine', long(0), float(-673.8), float(12.9), float(-6271.2), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_pod_racer', 'tatooine', long(0), float(-673.5), float(11.9), float(-6297.2), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_pod_racer', 'tatooine', long(0), float(-653.3), float(14), float(-6307.1), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_pod_racer', 'tatooine', long(0), float(-650.5), float(14.8), float(-6318.5), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_pod_racer', 'tatooine', long(0), float(-659.3), float(14.1), float(-6321.3), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_pod_racer', 'tatooine', long(0), float(-684.3), float(11.8), float(-6309.4), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_pod_racer', 'tatooine', long(0), float(-697.4), float(11.4), float(-6305.6), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_pod_racer', 'tatooine', long(0), float(-706.8), float(11.6), float(-6311.7), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_pod_racer', 'tatooine', long(0), float(-727.2), float(12.1), float(-6312.2), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_pod_racer', 'tatooine', long(0), float(-728.5), float(9), float(-6337.4), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_pod_racer', 'tatooine', long(0), float(-733.6), float(14.1), float(-6347.7), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_pod_racer', 'tatooine', long(0), float(-724.7), float(10.7), float(-6294.8), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_pod_racer', 'tatooine', long(0), float(-728.2), float(10.6), float(-6280), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_pod_racer', 'tatooine', long(0), float(-734.1), float(10.9), float(-6270.7), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_pod_racer', 'tatooine', long(0), float(-728.1), float(11), float(-6255.1), float(0), float(0), float(0), float(0), 45) + + bunker = core.objectService.getObject(long(-466404037726719318)) + + stcSvc.spawnObject('valarian_mechanic', 'tatooine', bunker.getCellByCellNumber(2), float(-4.1), float(0.3), float(1.6), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_mechanic', 'tatooine', bunker.getCellByCellNumber(3), float(4.1), float(0.3), float(-3.5), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_mechanic', 'tatooine', bunker.getCellByCellNumber(4), float(3.2), float(-12), float(26.6), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_crew_chief', 'tatooine', bunker.getCellByCellNumber(4), float(14.1), float(-12), float(31.2), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_crew_chief', 'tatooine', bunker.getCellByCellNumber(5), float(29.4), float(-12), float(27.1), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_crew_chief', 'tatooine', bunker.getCellByCellNumber(5), float(29.5), float(-12), float(35.3), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_mechanic', 'tatooine', bunker.getCellByCellNumber(7), float(8.5), float(-14), float(59.3), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_crew_chief', 'tatooine', bunker.getCellByCellNumber(7), float(-3), float(-16), float(67.6), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_crew_chief', 'tatooine', bunker.getCellByCellNumber(7), float(0.6), float(-16), float(84), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_mechanic', 'tatooine', bunker.getCellByCellNumber(7), float(20.9), float(-16), float(78.6), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_mechanic', 'tatooine', bunker.getCellByCellNumber(7), float(28), float(-16), float(78.8), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_crew_chief', 'tatooine', bunker.getCellByCellNumber(9), float(-42.2), float(-14), float(74.7), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_mechanic', 'tatooine', bunker.getCellByCellNumber(9), float(-36.5), float(-14), float(84.8), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_mechanic', 'tatooine', bunker.getCellByCellNumber(8), float(54.8), float(-16), float(77.9), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('doane_watki', 'tatooine', bunker.getCellByCellNumber(8), float(80.6), float(-16), float(79.8), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_mechanic', 'tatooine', bunker.getCellByCellNumber(8), float(78.3), float(-16), float(62.3), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_mechanic', 'tatooine', bunker.getCellByCellNumber(8), float(61.2), float(-16), float(58), float(0), float(0), float(0), float(0), 45) + + return + diff --git a/scripts/static_spawns/tatooine/jabba_tp_rock_beetle.py b/scripts/static_spawns/tatooine/jabba_tp_rock_beetle.py new file mode 100644 index 00000000..5795c2f5 --- /dev/null +++ b/scripts/static_spawns/tatooine/jabba_tp_rock_beetle.py @@ -0,0 +1,47 @@ +import sys +# Project SWG: Jabba TP Rock Beetle: Static Spawns +# (C)2014 ProjectSWG + + + +from resources.datatables import Options +from resources.datatables import State + +def addPlanetSpawns(core, planet): + + + stcSvc = core.staticService + objSvc = core.objectService + + # TODO Check all NPCs for personalized scripting, change format. + + stcSvc.spawnObject('rock_beetle_1', 'tatooine', long(0), float(-4946), float(34.9), float(-6349), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('rock_beetle_1', 'tatooine', long(0), float(-4932), float(37.4), float(-6351.1), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('rock_beetle_1', 'tatooine', long(0), float(-4925.7), float(40.3), float(-6359.7), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('rock_beetle_1', 'tatooine', long(0), float(-4917.1), float(38.8), float(-6350.5), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('rock_beetle_1', 'tatooine', long(0), float(-4931.7), float(34.1), float(-6334.1), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('rock_beetle_1', 'tatooine', long(0), float(-4919.2), float(35), float(-6326), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('rock_beetle_1', 'tatooine', long(0), float(-4906.3), float(35.2), float(-6318.5), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('rock_beetle_1', 'tatooine', long(0), float(-4902.6), float(35.1), float(-6317.6), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('rock_beetle_1', 'tatooine', long(0), float(-4901.7), float(35.3), float(-6325), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('rock_beetle_1', 'tatooine', long(0), float(-4888.6), float(34), float(-6314.2), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('rock_beetle_1', 'tatooine', long(0), float(-4941), float(39.1), float(-6359.8), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('rock_beetle_1', 'tatooine', long(0), float(-4941.8), float(32.9), float(-6325), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('rock_beetle_1', 'tatooine', long(0), float(-4933.6), float(33.6), float(-6325), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('rock_beetle_1', 'tatooine', long(0), float(-4940.3), float(32.5), float(-6313.2), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('rock_beetle_1', 'tatooine', long(0), float(-4929.1), float(31), float(-6305.6), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('rock_beetle_1', 'tatooine', long(0), float(-4903.7), float(36.3), float(-6337.4), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('rock_beetle_1', 'tatooine', long(0), float(-4891.6), float(36.8), float(-6341.3), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('rock_beetle_1', 'tatooine', long(0), float(-4882.7), float(34.5), float(-6328.5), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('rock_beetle_1', 'tatooine', long(0), float(-4912.9), float(31.6), float(-6304.5), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('rock_beetle_1', 'tatooine', long(0), float(-4901.9), float(30.7), float(-6296.2), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('rock_beetle_1', 'tatooine', long(0), float(-4907.1), float(26.7), float(-6286.9), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('rock_beetle_1', 'tatooine', long(0), float(-4924.8), float(26.7), float(-6286.9), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('rock_beetle_1', 'tatooine', long(0), float(-4947.5), float(26.8), float(-6286.3), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('rock_beetle_1', 'tatooine', long(0), float(-4960.1), float(28.6), float(-6293.9), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('rock_beetle_1', 'tatooine', long(0), float(-4969.4), float(30.2), float(-6304.8), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('rock_beetle_1', 'tatooine', long(0), float(-4966.9), float(29.2), float(-6328.3), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('rock_beetle_1', 'tatooine', long(0), float(-4967.3), float(31.1), float(-6345.1), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('rock_beetle_1', 'tatooine', long(0), float(-4963.1), float(36), float(-6359.1), float(0), float(0), float(0), float(0), 45) + return + diff --git a/scripts/static_spawns/tatooine/jabba_tp_sand_splitter_cave.py b/scripts/static_spawns/tatooine/jabba_tp_sand_splitter_cave.py new file mode 100644 index 00000000..7e846511 --- /dev/null +++ b/scripts/static_spawns/tatooine/jabba_tp_sand_splitter_cave.py @@ -0,0 +1,50 @@ +import sys +# Project SWG: Jabba TP sand splitter cave: Static Spawns +# (C)2014 ProjectSWG + + + +from resources.datatables import Options +from resources.datatables import State + +def addPlanetSpawns(core, planet): + + + stcSvc = core.staticService + objSvc = core.objectService + + # TODO Check all NPCs for personalized scripting, change format. + cave = core.objectService.getObject(long(-466404038393479071)) + + stcSvc.spawnObject('sand_splitter_knave', 'tatooine', cave.getCellByCellNumber(1), float(42.6), float(-23.3), float(4.9), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('sand_splitter_knave', 'tatooine', cave.getCellByCellNumber(2), float(41.5), float(-34.4), float(-21.8), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('sand_splitter_ruffian', 'tatooine', cave.getCellByCellNumber(2), float(40), float(-37.9), float(-52.7), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('sand_splitter_knave', 'tatooine', cave.getCellByCellNumber(2), float(69.5), float(-43.9), float(-53.7), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('sand_splitter_brute', 'tatooine', cave.getCellByCellNumber(10), float(68), float(-47.5), float(-72.1), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('sand_splitter_brute', 'tatooine', cave.getCellByCellNumber(10), float(77.5), float(-43.7), float(-93.8), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('sand_splitter_knave', 'tatooine', cave.getCellByCellNumber(5), float(110.2), float(-42.3), float(-103.9), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('sand_splitter_ruffian', 'tatooine', cave.getCellByCellNumber(5), float(111.9), float(-41.4), float(-86.1), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('sand_splitter_knave', 'tatooine', cave.getCellByCellNumber(5), float(95.9), float(-42.3), float(-94.7), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('sand_splitter_ruffian', 'tatooine', cave.getCellByCellNumber(2), float(68.9), float(-44.7), float(-11.3), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('sand_splitter_knave', 'tatooine', cave.getCellByCellNumber(2), float(61.8), float(-42.8), float(5.7), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('sand_splitter_knave', 'tatooine', cave.getCellByCellNumber(2), float(74.7), float(-63.9), float(-22.8), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('sand_splitter_knave', 'tatooine', cave.getCellByCellNumber(3), float(94.5), float(-57.3), float(1), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('sand_splitter_ruffian', 'tatooine', cave.getCellByCellNumber(3), float(106), float(-61.2), float(-18.7), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('sand_splitter_brute', 'tatooine', cave.getCellByCellNumber(3), float(94.6), float(-66.9), float(-33.1), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('sand_splitter_knave', 'tatooine', cave.getCellByCellNumber(4), float(107.9), float(-72.4), float(-49.7), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('sand_splitter_knave', 'tatooine', cave.getCellByCellNumber(4), float(80.5), float(-72.4), float(-65.8), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('sand_splitter_ruffian', 'tatooine', cave.getCellByCellNumber(4), float(96.9), float(-72.5), float(-76.4), float(0), float(0), float(0), float(0), 45) + + stcSvc.spawnObject('sand_splitter_knave', 'tatooine', cave.getCellByCellNumber(6), float(71.8), float(-69.4), float(-94.9), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('sand_splitter_knave', 'tatooine', cave.getCellByCellNumber(6), float(83), float(-62.3), float(122.6), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('sand_splitter_brute', 'tatooine', cave.getCellByCellNumber(7), float(106.5), float(-62.8), float(-124.1), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('sand_splitter_knave', 'tatooine', cave.getCellByCellNumber(5), float(112.1), float(-62.2), float(-92.1), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('sand_splitter_brute', 'tatooine', cave.getCellByCellNumber(8), float(132.8), float(-62.6), float(-79.5), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('sand_splitter_ruffian', 'tatooine', cave.getCellByCellNumber(8), float(132.3), float(-62), float(-114.2), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('sand_splitter_knave', 'tatooine', cave.getCellByCellNumber(8), float(165.5), float(-62.8), float(-105.4), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('saul_rouse', 'tatooine', cave.getCellByCellNumber(8), float(156.2), float(-62.6), float(-73.6), float(0), float(0), float(0), float(0), 45)#saul + stcSvc.spawnObject('sand_splitter_ruffian', 'tatooine', cave.getCellByCellNumber(9), float(186.3), float(-62.1), float(-84.8), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('erib_kurrugh', 'tatooine', cave.getCellByCellNumber(9), float(205.6), float(-61.9), float(-87.4), float(0), float(0), float(0), float(0), 45) #erib + return + + diff --git a/scripts/static_spawns/tatooine/jabba_tp_sennex_bunker.py b/scripts/static_spawns/tatooine/jabba_tp_sennex_bunker.py new file mode 100644 index 00000000..119e74d1 --- /dev/null +++ b/scripts/static_spawns/tatooine/jabba_tp_sennex_bunker.py @@ -0,0 +1,85 @@ +import sys +# Project SWG: Jem Levar Place Spawn +# (C)2014 ProjectSWG + + + +from resources.datatables import Options +from resources.datatables import State + +def addPlanetSpawns(core, planet): + + + stcSvc = core.staticService + objSvc = core.objectService + + # TODO Check all NPCs for personalized scripting, change format. + + # TODO Check all NPCs for personalized scripting, change format. + bunker = core.objectService.getObject(long(-466404036409557025)) + + stcSvc.spawnObject('sennex_guard', 'tatooine', bunker.getCellByCellNumber(2), float(-4), float(0.3), float(-0.9), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('sennex_guard', 'tatooine', bunker.getCellByCellNumber(4), float(3.7), float(-4), float(9), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('sennex_guard', 'tatooine', bunker.getCellByCellNumber(5), float(8.3), float(-12), float(26.6), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('sennex_hunter', 'tatooine', bunker.getCellByCellNumber(5), float(-3.4), float(-12), float(30.6), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('sennex_guard', 'tatooine', bunker.getCellByCellNumber(5), float(-2.9), float(-12), float(47.4), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('sennex_hunter', 'tatooine', bunker.getCellByCellNumber(5), float(7.4), float(-12), float(51.7), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('sennex_guard', 'tatooine', bunker.getCellByCellNumber(6), float(17.3), float(-14), float(61.5), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('sennex_hunter', 'tatooine', bunker.getCellByCellNumber(7), float(17.5), float(-16), float(77), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('sennex_guard', 'tatooine', bunker.getCellByCellNumber(7), float(22.3), float(-16), float(71.2), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('sennex_lookout', 'tatooine', bunker.getCellByCellNumber(7), float(12.9), float(-16), float(82.4), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('sennex_guard', 'tatooine', bunker.getCellByCellNumber(18), float(-12.1), float(-12), float(93), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('sennex_lookout', 'tatooine', bunker.getCellByCellNumber(18), float(-17.2), float(-12), float(97.3), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('sennex_guard', 'tatooine', bunker.getCellByCellNumber(18), float(-7.6), float(-12), float(87.7), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('sennex_hunter', 'tatooine', bunker.getCellByCellNumber(20), float(-41.5), float(-12), float(89.3), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('sennex_hunter', 'tatooine', bunker.getCellByCellNumber(20), float(-40.5), float(-12), float(103.4), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('sennex_guard', 'tatooine', bunker.getCellByCellNumber(20), float(-31), float(-12), float(114.1), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('sennex_hunter', 'tatooine', bunker.getCellByCellNumber(21), float(-36.6), float(-12), float(136.3), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('sennex_guard', 'tatooine', bunker.getCellByCellNumber(8), float(18), float(-16), float(105.4), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('sennex_hunter', 'tatooine', bunker.getCellByCellNumber(10), float(-3.7), float(-16), float(105.6), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('sennex_lookout', 'tatooine', bunker.getCellByCellNumber(10), float(3.8), float(-16), float(114.7), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('sennex_guard', 'tatooine', bunker.getCellByCellNumber(10), float(20.2), float(-16), float(116.3), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('sennex_guard', 'tatooine', bunker.getCellByCellNumber(10), float(19.9), float(-16), float(126.2), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('sennex_guard', 'tatooine', bunker.getCellByCellNumber(10), float(10.4), float(-16), float(136.9), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('sennex_lookout', 'tatooine', bunker.getCellByCellNumber(10), float(-2.8), float(-16), float(136.5), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('sennex_guard', 'tatooine', bunker.getCellByCellNumber(10), float(-12.7), float(-16), float(125.5), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('sennex_guard', 'tatooine', bunker.getCellByCellNumber(10), float(-12.7), float(-16), float(116.5), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('sennex_guard', 'tatooine', bunker.getCellByCellNumber(11), float(-10.9), float(-13), float(151.3), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('sennex_lookout', 'tatooine', bunker.getCellByCellNumber(12), float(-26.2), float(-12), float(145.6), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('sennex_guard', 'tatooine', bunker.getCellByCellNumber(12), float(-22.3), float(-12), float(161.9), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('sennex_hunter', 'tatooine', bunker.getCellByCellNumber(12), float(-31.4), float(-12), float(161.9), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('sennex_guard', 'tatooine', bunker.getCellByCellNumber(12), float(-26.8), float(-12), float(174), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('sennex_hunter', 'tatooine', bunker.getCellByCellNumber(13), float(-45.4), float(-15.4), float(150.9), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('sennex_guard', 'tatooine', bunker.getCellByCellNumber(15), float(-67.1), float(-22.4), float(150.9), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('sennex_hunter', 'tatooine', bunker.getCellByCellNumber(16), float(-80.9), float(-25.9), float(137.1), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('sennex_guard', 'tatooine', bunker.getCellByCellNumber(17), float(-76.3), float(-28), float(122.2), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('sennex_guard', 'tatooine', bunker.getCellByCellNumber(17), float(-100.6), float(-28), float(120.6), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('sennex_hunter', 'tatooine', bunker.getCellByCellNumber(17), float(-102.7), float(-28), float(119.4), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('sennex_guard', 'tatooine', bunker.getCellByCellNumber(17), float(-102.3), float(-28), float(103.4), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('sennex_hunter', 'tatooine', bunker.getCellByCellNumber(17), float(-76), float(-28), float(99), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('sennex_hunter', 'tatooine', bunker.getCellByCellNumber(26), float(-76.6), float(-28), float(69.7), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('sennex_guard', 'tatooine', bunker.getCellByCellNumber(26), float(-76.1), float(-28), float(56.7), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('sennex_guard', 'tatooine', bunker.getCellByCellNumber(26), float(-85.5), float(-28), float(56.7), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('sennex_hunter', 'tatooine', bunker.getCellByCellNumber(33), float(-113.2), float(-36), float(77.3), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('sennex_guard', 'tatooine', bunker.getCellByCellNumber(22), float(-16.6), float(-16), float(63.1), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('sennex_guard', 'tatooine', bunker.getCellByCellNumber(23), float(-43.9), float(-24), float(62.9), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('sennex_hunter', 'tatooine', bunker.getCellByCellNumber(24), float(-64.1), float(-28), float(62.9), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('sennex_guard', 'tatooine', bunker.getCellByCellNumber(25), float(-65), float(-28), float(-78), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('sennex_hunter', 'tatooine', bunker.getCellByCellNumber(31), float(-94.4), float(-32.3), float(42.5), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('sennex_guard', 'tatooine', bunker.getCellByCellNumber(31), float(-95), float(-40.3), float(-18.4), float(0), float(0), float(0), float(0), 45) + + stcSvc.spawnObject('sennex_slavemaster', 'tatooine', bunker.getCellByCellNumber(32), float(-57.1), float(-44), float(-22.5), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('sennex_slavemaster', 'tatooine', bunker.getCellByCellNumber(32), float(-57.6), float(-44), float(4.8), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('sennex_slaver', 'tatooine', bunker.getCellByCellNumber(32), float(-80.2), float(-44), float(-8.6), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('sennex_slavemaster', 'tatooine', bunker.getCellByCellNumber(32), float(-100.2), float(-44), float(-20.8), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('sennex_slaver', 'tatooine', bunker.getCellByCellNumber(32), float(-100.2), float(-44), float(4.4), float(0), float(0), float(0), float(0), 45) + + stcSvc.spawnObject('sennex_slavemaster', 'tatooine', bunker.getCellByCellNumber(29), float(-146.1), float(-44), float(76.3), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('sennex_slaver', 'tatooine', bunker.getCellByCellNumber(29), float(-146.3), float(-44), float(81), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('sennex_slavemaster', 'tatooine', bunker.getCellByCellNumber(29), float(-141.1), float(-44), float(96.9), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('sennex_slavemaster', 'tatooine', bunker.getCellByCellNumber(29), float(-153.1), float(-44), float(97.5), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('sennex_slavemaster', 'tatooine', bunker.getCellByCellNumber(29), float(-164.6), float(-44), float(74.5), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('sennex_slavemaster', 'tatooine', bunker.getCellByCellNumber(29), float(-165.9), float(-44), float(92.4), float(0), float(0), float(0), float(0), 45) + + return + diff --git a/scripts/static_spawns/tatooine/jabba_tp_valarian_camp.py b/scripts/static_spawns/tatooine/jabba_tp_valarian_camp.py new file mode 100644 index 00000000..9c753976 --- /dev/null +++ b/scripts/static_spawns/tatooine/jabba_tp_valarian_camp.py @@ -0,0 +1,34 @@ +import sys +# Project SWG: Jabba TP Valarian Camp: Static Spawns +# (C)2014 ProjectSWG + + + +from resources.datatables import Options +from resources.datatables import State + +def addPlanetSpawns(core, planet): + + + stcSvc = core.staticService + objSvc = core.objectService + + # TODO Check all NPCs for personalized scripting, change format. + + stcSvc.spawnObject('valarian_soldier', 'tatooine', long(0), float(-6229), float(37.8), float(-5947), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_soldier', 'tatooine', long(0), float(-6238.7), float(37.3), float(-5915.2), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_soldier', 'tatooine', long(0), float(-6251.7), float(36.4), float(-5956.1), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_soldier', 'tatooine', long(0), float(-6266.4), float(35.5), float(-5955.4), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_soldier', 'tatooine', long(0), float(-6273.8), float(34.9), float(-5945), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_soldier', 'tatooine', long(0), float(-6272.7), float(35.4), float(-5930.8), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_soldier', 'tatooine', long(0), float(-6276.1), float(38.3), float(-5919.7), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_soldier', 'tatooine', long(0), float(-6268.5), float(40.6), float(-5908.7), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_soldier', 'tatooine', long(0), float(-6255.9), float(40.6), float(-5907.1), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_soldier', 'tatooine', long(0), float(-6242.6), float(39.9), float(-5912.2), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_soldier', 'tatooine', long(0), float(-6233.6), float(37.3), float(-5925.8), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_soldier', 'tatooine', long(0), float(-6230.9), float(38), float(-5949.3), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_soldier', 'tatooine', long(0), float(-6235.2), float(40.2), float(-5964.1), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_soldier', 'tatooine', long(0), float(-6250.1), float(38.1), float(-5969), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_soldier', 'tatooine', long(0), float(-6271.6), float(36.1), float(-5960.2), float(0), float(0), float(0), float(0), 45) + return + diff --git a/scripts/static_spawns/tatooine/jabba_tp_valarian_camp_2.py b/scripts/static_spawns/tatooine/jabba_tp_valarian_camp_2.py new file mode 100644 index 00000000..58f720fa --- /dev/null +++ b/scripts/static_spawns/tatooine/jabba_tp_valarian_camp_2.py @@ -0,0 +1,56 @@ +import sys +# Project SWG: Jabba TP Valarian Camp 2: Static Spawns +# (C)2014 ProjectSWG + + + +from resources.datatables import Options +from resources.datatables import State + +def addPlanetSpawns(core, planet): + + + stcSvc = core.staticService + objSvc = core.objectService + + # TODO Check all NPCs for personalized scripting, change format. + + stcSvc.spawnObject('valarian_soldier', 'tatooine', long(0), float(-3906.3), float(30.8), float(-4364), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_depot_swooper', 'tatooine', long(0), float(-3913.1), float(30.8), float(-4360.4), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_depot_scout', 'tatooine', long(0), float(-3918.5), float(31), float(-4355.1), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_soldier', 'tatooine', long(0), float(-3927.8), float(27.7), float(-4346), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_enforcer', 'tatooine', long(0), float(-3932.2), float(22.6), float(-4331.5), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_soldier', 'tatooine', long(0), float(-3924.2), float(21), float(-4324.7), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_assassin', 'tatooine', long(0), float(-3911.9), float(21.8), float(-4322.8), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_henchman', 'tatooine', long(0), float(-3897.1), float(23.9), float(-4322.3), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_soldier', 'tatooine', long(0), float(-3881.1), float(25.9), float(-4322.9), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_soldier', 'tatooine', long(0), float(-3871.6), float(23.2), float(-4302.9), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_depot_swooper', 'tatooine', long(0), float(-3860.4), float(19.4), float(-4294.7), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_soldier', 'tatooine', long(0), float(-3873.2), float(20.4), float(-4288.1), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_depot_scout', 'tatooine', long(0), float(-3882.1), float(22.6), float(-4287.9), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_soldier', 'tatooine', long(0), float(-3888.6), float(22.9), float(-4279.9), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_enforcer', 'tatooine', long(0), float(-3889.3), float(20), float(-4259.7), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_depot_worker', 'tatooine', long(0), float(-3888.7), float(19.4), float(-4221.7), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_assassin', 'tatooine', long(0), float(-3903.4), float(18.8), float(-4227.4), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_depot_scout', 'tatooine', long(0), float(-3915.2), float(16.6), float(-4245), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_soldier', 'tatooine', long(0), float(-3913.9), float(16.8), float(-4255.9), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_soldier', 'tatooine', long(0), float(-3907), float(19.2), float(-4266.1), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_depot_scout', 'tatooine', long(0), float(-3898.3), float(21.4), float(-4278.8), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_soldier', 'tatooine', long(0), float(-3893.9), float(22.5), float(-4287.8), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_enforcer', 'tatooine', long(0), float(-3878.3), float(19.8), float(-4250.4), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_soldier', 'tatooine', long(0), float(-3876.4), float(19.6), float(-4237), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_assassin', 'tatooine', long(0), float(-3898), float(30.1), float(-4347.8), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_soldier', 'tatooine', long(0), float(-3902.9), float(27.3), float(-4338.2), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_depot_swooper', 'tatooine', long(0), float(-3919.5), float(19.8), float(-4307.9), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_henchman', 'tatooine', long(0), float(-3917.6), float(20.1), float(-4293.2), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_depot_worker', 'tatooine', long(0), float(-3913.1), float(20.2), float(-4280.7), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_soldier', 'tatooine', long(0), float(-3928.4), float(17.7), float(-4265), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_depot_scout', 'tatooine', long(0), float(-3927.5), float(16.4), float(-4240.5), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_soldier', 'tatooine', long(0), float(-3947.4), float(18.5), float(-4256.9), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_henchman', 'tatooine', long(0), float(-3949), float(20.7), float(-4270.5), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_depot_worker', 'tatooine', long(0), float(-3947.1), float(22.3), float(-4291.6), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_assassin', 'tatooine', long(0), float(-3951.7), float(22.4), float(-4311.4), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_soldier', 'tatooine', long(0), float(-3890.2), float(29.2), float(-4342.9), float(0), float(0), float(0), float(0), 45) + + return + diff --git a/scripts/static_spawns/tatooine/jabba_tp_valarian_camp_bunker.py b/scripts/static_spawns/tatooine/jabba_tp_valarian_camp_bunker.py new file mode 100644 index 00000000..11550217 --- /dev/null +++ b/scripts/static_spawns/tatooine/jabba_tp_valarian_camp_bunker.py @@ -0,0 +1,36 @@ +import sys +# Project SWG: Jabba TP Valarian Camp: Static Spawns +# (C)2014 ProjectSWG + + + +from resources.datatables import Options +from resources.datatables import State + +def addPlanetSpawns(core, planet): + + + stcSvc = core.staticService + objSvc = core.objectService + + # TODO Check all NPCs for personalized scripting, change format. + bunker = core.objectService.getObject(long(-466404038502638198)) + + stcSvc.spawnObject('valarian_bookie', 'tatooine', bunker.getCellByCellNumber(3), float(-3.7), float(0.3), float(-4), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_bookie', 'tatooine', bunker.getCellByCellNumber(4), float(-3.2), float(-3.3), float(5), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_bookie', 'tatooine', bunker.getCellByCellNumber(5), float(3.4), float(-6.8), float(-2.1), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_bookie', 'tatooine', bunker.getCellByCellNumber(5), float(6.7), float(-6.8), float(-4.8), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_bookie', 'tatooine', bunker.getCellByCellNumber(5), float(3.7), float(-6.8), float(-8.3), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_bookie', 'tatooine', bunker.getCellByCellNumber(6), float(4.4), float(-10.3), float(-18.7), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_bookie', 'tatooine', bunker.getCellByCellNumber(6), float(-4), float(-13.8), float(-18.4), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_bookie', 'tatooine', bunker.getCellByCellNumber(7), float(-3.3), float(-13.7), float(-10.7), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_bookie', 'tatooine', bunker.getCellByCellNumber(7), float(-3.4), float(-13.7), float(-2.3), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_bookie', 'tatooine', bunker.getCellByCellNumber(7), float(-3.5), float(-13.7), float(-4.5), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_bookie', 'tatooine', bunker.getCellByCellNumber(8), float(-8.6), float(-13.8), float(12.2), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_bookie', 'tatooine', bunker.getCellByCellNumber(8), float(7.7), float(-13.8), float(12.2), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_bookie', 'tatooine', bunker.getCellByCellNumber(9), float(15.4), float(-13.8), float(14.4), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_bookie', 'tatooine', bunker.getCellByCellNumber(9), float(16), float(-13.8), float(6.7), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_bookie', 'tatooine', bunker.getCellByCellNumber(10), float(15.8), float(-13.8), float(-9.8), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('valarian_bookie', 'tatooine', bunker.getCellByCellNumber(10), float(11.9), float(-11.5), float(-21), float(0), float(0), float(0), float(0), 45) + return + diff --git a/scripts/static_spawns/tatooine/jabba_tp_wayfar_camp.py b/scripts/static_spawns/tatooine/jabba_tp_wayfar_camp.py new file mode 100644 index 00000000..6c8873a7 --- /dev/null +++ b/scripts/static_spawns/tatooine/jabba_tp_wayfar_camp.py @@ -0,0 +1,25 @@ +import sys +# Project SWG: Jabba TP Alkharan Camp: Static Spawns +# (C)2014 ProjectSWG + +#pael dewall_paez + +#spy wayfar_spy + +from resources.datatables import Options +from resources.datatables import State + +def addPlanetSpawns(core, planet): + + + stcSvc = core.staticService + objSvc = core.objectService + + #temp until buildouts are fixed + stcSvc.spawnObject('object/static/item/shared_lair_wooden_tent.iff', 'tatooine', long(0), float(-5525.815), float(39.7917), float(-6625.21), float(0.983671), float(0.0816295), float(0.153112), float(0.0478033)) + stcSvc.spawnObject('object/static/item/shared_lair_wooden_tent.iff', 'tatooine', long(0), float(-5517.64), float(43.2684), float(-6635.27), float(0.731855), float(0.157236), float(0.658869), float(0.0745461)) + stcSvc.spawnObject('object/static/item/shared_lair_wooden_tent_destroyed.iff', 'tatooine', long(0), float(-5516.212), float(42.2543), float(-6604.4), float(0.832558), float(0.150685), float(0.532377), float(0.0267597)) + stcSvc.spawnObject('object/static/item/shared_lair_wooden_tent.iff', 'tatooine', long(0), float(-5491.42), float(45.0825), float(-6608.95), float(0.499163), float(-0.143837), float(0.853988), float(-0.0291871)) + + + return diff --git a/scripts/static_spawns/tatooine/jabba_tp_zucca_boars.py b/scripts/static_spawns/tatooine/jabba_tp_zucca_boars.py new file mode 100644 index 00000000..84b59d49 --- /dev/null +++ b/scripts/static_spawns/tatooine/jabba_tp_zucca_boars.py @@ -0,0 +1,28 @@ +import sys +# Project SWG: Jabba TP Alkharan Camp: Static Spawns +# (C)2014 ProjectSWG + + + +from resources.datatables import Options +from resources.datatables import State + +def addPlanetSpawns(core, planet): + + + stcSvc = core.staticService + objSvc = core.objectService + + # TODO Check all NPCs for personalized scripting, change format. + + stcSvc.spawnObject('wild_zucca_boar', 'tatooine', long(0), float(-4502), float(45.3), float(-4023), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('wild_zucca_boar', 'tatooine', long(0), float(-4489), float(45.6), float(-4020.7), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('wild_zucca_boar', 'tatooine', long(0), float(-4476.6), float(44.6), float(-4038.8), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('wild_zucca_boar', 'tatooine', long(0), float(-4479.8), float(43.1), float(-4048.4), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('wild_zucca_boar', 'tatooine', long(0), float(-4443.6), float(43.6), float(-4024.5), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('wild_zucca_boar', 'tatooine', long(0), float(-4445.1), float(42.1), float(-4044.9), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('wild_zucca_boar', 'tatooine', long(0), float(-4465.9), float(41.6), float(-4064.4), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('wild_zucca_boar', 'tatooine', long(0), float(-4480.5), float(41.3), float(-4069.5), float(0), float(0), float(0), float(0), 45) + stcSvc.spawnObject('wild_zucca_boar', 'tatooine', long(0), float(-4501.2), float(43.6), float(-4040.9), float(0), float(0), float(0), float(0), 45) + return + diff --git a/scripts/static_spawns/tatooine/jabbas_palace.py b/scripts/static_spawns/tatooine/jabbas_palace.py index bff5a8aa..8bee3e8b 100644 --- a/scripts/static_spawns/tatooine/jabbas_palace.py +++ b/scripts/static_spawns/tatooine/jabbas_palace.py @@ -72,5 +72,10 @@ def addPlanetSpawns(core, planet): # G5P0 stcSvc.spawnObject('object/mobile/shared_3po_protocol_droid_red.iff', 'tatooine', building.getCellByCellNumber(22), float(-14.3), float(2.0), float(47.4), float(0.71), float(0), float(0.70), float(0)) + #outside Palace + + smuggler = stcSvc.spawnObject('object/mobile/shared_dressed_binayre_hoodlum_zabrak_male_01.iff', 'tatooine', long(0), float(-5863), float(90), float(-6198.2), float(0.71), float(0), float(0.70), float(0)) #still need to find correct template + smuggler.setCustomName('Smuggler Pilot') + smuggler.setOptionsBitmask(256) return diff --git a/scripts/static_spawns/tatooine/mos_eisley.py b/scripts/static_spawns/tatooine/mos_eisley.py index 90c02333..7b0d9042 100644 --- a/scripts/static_spawns/tatooine/mos_eisley.py +++ b/scripts/static_spawns/tatooine/mos_eisley.py @@ -140,12 +140,13 @@ def addPlanetSpawns(core, planet): #City Hall Interior #Lucky Despot Interior TODO: Check Cell IDs for Spawned NPCS inside once Lucky Despot is spawning properly again. - 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)) + #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 @@ -162,9 +163,8 @@ def addPlanetSpawns(core, planet): noble2.setCustomName('a Noble') noble2.setOptionsBitmask(256) - commoner11 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_naboo_human_male_06.iff', 'tatooine', long(0), float(3529.1), float(5.0), float(-4900.4), float(0.42), float(0.91)) + commoner11 = stcSvc.spawnCommoner('object/mobile/shared_dressed_commoner_naboo_human_male_06.iff', 'tatooine', long(0), float(3529.1), float(5.0), float(-4900.4), float(0.42), float(0.91)) commoner11.setCustomName('a Commoner') - commoner11.setOptionsBitmask(256) businessman3 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_tatooine_trandoshan_male_02.iff', 'tatooine', long(0), float(3595.7), float(5.0), float(-4740.1), float(0), float(0)) businessman3.setCustomName('a Businessman') @@ -174,21 +174,17 @@ def addPlanetSpawns(core, planet): jawa1.setCustomName('a Jawa') jawa1.setOptionsBitmask(256) - commoner12 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_naboo_moncal_male_01.iff', 'tatooine', long(0), float(3490.3), float(5.0), float(-4799.4), float(0), float(0)) + commoner12 = stcSvc.spawnCommoner('object/mobile/shared_dressed_commoner_naboo_moncal_male_01.iff', 'tatooine', long(0), float(3490.3), float(5.0), float(-4799.4), float(0), float(0)) commoner12.setCustomName('a Scientist') - commoner12.setOptionsBitmask(256) - commoner13 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_naboo_zabrak_female_02.iff', 'tatooine', long(0), float(3559.7), float(5.0), float(-4725.9), float(0), float(0)) + commoner13 = stcSvc.spawnCommoner('object/mobile/shared_dressed_commoner_naboo_zabrak_female_02.iff', 'tatooine', long(0), float(3559.7), float(5.0), float(-4725.9), float(0), float(0)) commoner13.setCustomName('a Commoner') - commoner13.setOptionsBitmask(256) - commoner14 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_tatooine_devaronian_male_01.iff', 'tatooine', long(0), float(3527.7), float(5.0), float(-4721.1), float(0.71), float(0.71)) + commoner14 = stcSvc.spawnCommoner('object/mobile/shared_dressed_commoner_tatooine_devaronian_male_01.iff', 'tatooine', long(0), float(3527.7), float(5.0), float(-4721.1), float(0.71), float(0.71)) commoner14.setCustomName('a Commoner') - commoner14.setOptionsBitmask(256) - commoner15 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_tatooine_aqualish_female_01.iff', 'tatooine', long(0), float(3514.9), float(5.0), float(-4737.8), float(0), float(0)) + commoner15 = stcSvc.spawnCommoner('object/mobile/shared_dressed_commoner_tatooine_aqualish_female_01.iff', 'tatooine', long(0), float(3514.9), float(5.0), float(-4737.8), float(0), float(0)) commoner15.setCustomName('a Commoner') - commoner15.setOptionsBitmask(256) jawa2 = stcSvc.spawnObject('object/mobile/shared_jawa.iff', 'tatooine', long(0), float(3485.2), float(4.9), float(-4859.2), float(0), float(0)) jawa2.setCustomName('a Jawa') @@ -226,10 +222,9 @@ def addPlanetSpawns(core, planet): bib.setCustomName('Bib Fortuna') bib.setOptionsBitmask(256) - commoner16 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_naboo_human_male_06.iff', 'tatooine', long(0), float(3398.2), float(4.0), float(-4654.2), float(0.42), float(0.91)) + commoner16 = stcSvc.spawnCommoner('object/mobile/shared_dressed_commoner_naboo_human_male_06.iff', 'tatooine', long(0), float(3398.2), float(4.0), float(-4654.2), float(0.42), float(0.91)) commoner16.setCustomName('a Commoner') - commoner16.setOptionsBitmask(256) - + noble3 = stcSvc.spawnObject('object/mobile/shared_dressed_noble_human_female_01.iff', 'tatooine', long(0), float(3396.3), float(4.0), float(-4774.1), float(0.42), float(0.91)) noble3.setCustomName('a Noble') noble3.setOptionsBitmask(256) @@ -246,9 +241,8 @@ def addPlanetSpawns(core, planet): eg1.setCustomName('an EG-6 Power Droid') eg1.setOptionsBitmask(256) - commoner17 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_naboo_zabrak_female_02.iff', 'tatooine', long(0), float(3452.6), float(4.0), float(-4937.1), float(0), float(0)) + commoner17 = stcSvc.spawnCommoner('object/mobile/shared_dressed_commoner_naboo_zabrak_female_02.iff', 'tatooine', long(0), float(3452.6), float(4.0), float(-4937.1), float(0), float(0)) commoner17.setCustomName('a Commoner') - commoner17.setOptionsBitmask(256) lifter1 = stcSvc.spawnObject('object/mobile/shared_cll8_binary_load_lifter.iff', 'tatooine', long(0), float(3547), float(5.0), float(-4768.9), float(0), float(0)) lifter1.setCustomName('a CLL-8 Binary Load Lifter') diff --git a/src/main/NGECore.java b/src/main/NGECore.java index 757f4d39..91f182ae 100644 --- a/src/main/NGECore.java +++ b/src/main/NGECore.java @@ -52,6 +52,7 @@ import net.engio.mbassy.bus.config.BusConfiguration; import resources.common.BountyListItem; import resources.common.RadialOptions; import resources.common.ThreadMonitor; +import resources.datatables.GalaxyStatus; import resources.objects.creature.CreatureObject; import resources.objects.guild.GuildObject; import resources.objects.resource.GalacticResource; @@ -65,6 +66,7 @@ import services.DevService; import services.EntertainmentService; import services.GroupService; import services.housing.HousingService; +import services.BrowserService; import services.InstanceService; import services.LoginService; import services.LootService; @@ -99,6 +101,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; @@ -109,6 +112,9 @@ import services.spawn.SpawnService; import services.sui.SUIService; import services.trade.TradeService; import services.travel.TravelService; +import tools.CharonPacketLogger; +import tools.DevLogQueuer; +//import services.BattlefieldService; import engine.clientdata.ClientFileManager; import engine.clientdata.visitors.CrcStringTableVisitor; import engine.clientdata.visitors.DatatableVisitor; @@ -202,6 +208,9 @@ public class NGECore { public MountService mountService; public PlayerCityService playerCityService; public ReverseEngineeringService reverseEngineeringService; + public PetService petService; + public BrowserService browserService; + //public BattlefieldService battlefieldService; // Login Server public NetworkDispatch loginDispatch; @@ -296,7 +305,7 @@ public class NGECore { databaseConnection2.connect(config.getString("DB2.URL"), config.getString("DB2.NAME"), config.getString("DB2.USER"), config.getString("DB2.PASS"), "mysql"); } - setGalaxyStatus(1); + setGalaxyStatus(GalaxyStatus.Loading); swgObjectODB = new ObjectDatabase("swgobjects", true, true, true, SWGObject.class); mailODB = new ObjectDatabase("mails", true, true, true, Mail.class); guildODB = new ObjectDatabase("guild", true, true, true, GuildObject.class); @@ -345,6 +354,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"); @@ -367,19 +377,34 @@ public class NGECore { } // Ping Server - try { - PingServer pingServer = new PingServer(config.getInt("PING.PORT")); - pingServer.bind(); - } catch (IOException e) { - e.printStackTrace(); - } + + + if(config.keyExists("PING.PORT")) + if (config.getInt("PING.PORT") != 0) { + try { + PingServer pingServer = new PingServer(config.getInt("PING.PORT")); + pingServer.bind(); + } catch (IOException e) { + e.printStackTrace(); + } + } else + System.out.println("Warning: pingServer was not launched. Port equals 0."); + else + System.out.println("Warning: pingServer was not launched. Port not specified."); + // Login Server loginDispatch = new NetworkDispatch(this, false); loginDispatch.addService(loginService); - - loginServer = new MINAServer(loginDispatch, config.getInt("LOGIN.PORT")); - loginServer.start(); + + if(config.keyExists("LOGIN.PORT")) + if (config.getInt("LOGIN.PORT") != 0) { + loginServer = new MINAServer(loginDispatch, config.getInt("LOGIN.PORT")); + loginServer.start(); + } else + System.out.println("Warning: loginServer was not launched. Port equals 0."); + else + System.out.println("Warning: loginServer was not launched. Port not specified."); // Zone Server zoneDispatch = new NetworkDispatch(this, true); @@ -404,14 +429,21 @@ 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); zoneDispatch.addService(resourceService); } - - zoneServer = new MINAServer(zoneDispatch, config.getInt("ZONE.PORT")); - zoneServer.start(); + + if(config.keyExists("ZONE.PORT")) + if (config.getInt("ZONE.PORT") != 0) { + zoneServer = new MINAServer(zoneDispatch, config.getInt("ZONE.PORT")); + zoneServer.start(); + } else + System.out.println("Warning: zoneServer was not launched. Port equals 0."); + else + System.out.println("Warning: zoneServer was not launched. Port not specified."); //Start terrainList // Original Planets @@ -527,10 +559,19 @@ public class NGECore { playerCityService.loadCities(); retroService.run(); + browserService = new BrowserService(this); + //battlefieldService = new BattlefieldService(this); + + DevLogQueuer devLogQueuer = new DevLogQueuer(); + + CharonPacketLogger packetLogger; + if (PACKET_DEBUG) + packetLogger = new CharonPacketLogger(); + didServerCrash = false; System.out.println("Started Server."); cleanupCreatureODB(); - setGalaxyStatus(2); + setGalaxyStatus(GalaxyStatus.Online); } @@ -751,7 +792,7 @@ public class NGECore { chatService.broadcastGalaxy("The server will be shutting down soon. Please find a safe place to logout. (" + minutes + " minutes left)"); Thread.sleep(60000); } - setGalaxyStatus(3); + setGalaxyStatus(GalaxyStatus.Locked); chatService.broadcastGalaxy("The server will be shutting down soon. Please find a safe place to logout. (" + 1 + " minutes left)"); Thread.sleep(30000); chatService.broadcastGalaxy("You will be disconnected in 30 seconds so the server can perform a final save before shutting down. Please find a safe place to logout now."); diff --git a/src/protocol/swg/AttributeListMessage.java b/src/protocol/swg/AttributeListMessage.java index 55721a52..85713582 100644 --- a/src/protocol/swg/AttributeListMessage.java +++ b/src/protocol/swg/AttributeListMessage.java @@ -26,6 +26,7 @@ import java.nio.ByteOrder; import org.apache.mina.core.buffer.IoBuffer; import org.apache.mina.core.buffer.SimpleBufferAllocator; +import resources.common.Opcodes; import engine.resources.objects.SWGObject; public class AttributeListMessage extends SWGMessage { @@ -50,7 +51,7 @@ public class AttributeListMessage extends SWGMessage { result.setAutoExpand(true); result.putShort((short) 5); - result.putInt(0xF3F12F2A); + result.putInt(Opcodes.AttributeListMessage); result.putLong(target.getObjectID()); result.putShort((short) 0); diff --git a/src/protocol/swg/CmdStartScene.java b/src/protocol/swg/CmdStartScene.java index 52d1eb36..918b0f4f 100644 --- a/src/protocol/swg/CmdStartScene.java +++ b/src/protocol/swg/CmdStartScene.java @@ -25,6 +25,8 @@ import java.nio.ByteOrder; import org.apache.mina.core.buffer.IoBuffer; +import resources.common.Opcodes; + public class CmdStartScene extends SWGMessage { private byte ignoreLayoutFiles; @@ -60,7 +62,7 @@ public class CmdStartScene extends SWGMessage { IoBuffer result = IoBuffer.allocate(47 + terrainFile.length() + sharedRaceTemplate.length()).order(ByteOrder.LITTLE_ENDIAN); result.putShort((short)9); - result.putInt(0x3AE6DFAE); + result.putInt(Opcodes.CmdStartScene); result.put((byte)ignoreLayoutFiles); result.putLong(characterId); result.put(getAsciiString(terrainFile)); diff --git a/src/protocol/swg/CommPlayerMessage.java b/src/protocol/swg/CommPlayerMessage.java index 9acde60c..3d0675f1 100644 --- a/src/protocol/swg/CommPlayerMessage.java +++ b/src/protocol/swg/CommPlayerMessage.java @@ -26,6 +26,7 @@ import java.nio.ByteOrder; import org.apache.mina.core.buffer.IoBuffer; import engine.resources.common.CRC; +import resources.common.Opcodes; import resources.common.OutOfBand; public class CommPlayerMessage extends SWGMessage { @@ -51,7 +52,7 @@ public class CommPlayerMessage extends SWGMessage { buffer.setAutoExpand(true); buffer.putShort((short) 2); - buffer.putInt(0x594AD258); + buffer.putInt(Opcodes.CommPlayerMessage); buffer.put((byte) 0); // aurebesh borders on comm, space version? Can cause crashes buffer.putLong(objectId); buffer.put(outOfBand.serialize().array()); diff --git a/src/protocol/swg/CreateCharacterSuccess.java b/src/protocol/swg/CreateCharacterSuccess.java index 36490295..61be583f 100644 --- a/src/protocol/swg/CreateCharacterSuccess.java +++ b/src/protocol/swg/CreateCharacterSuccess.java @@ -25,6 +25,8 @@ import java.nio.ByteOrder; import org.apache.mina.core.buffer.IoBuffer; +import resources.common.Opcodes; + public class CreateCharacterSuccess extends SWGMessage { @@ -45,7 +47,7 @@ public class CreateCharacterSuccess extends SWGMessage { IoBuffer result = IoBuffer.allocate(14).order(ByteOrder.LITTLE_ENDIAN); result.putShort((short) 2); - result.putInt(0x1DB575CC); + result.putInt(Opcodes.CreateCharacterSuccess); result.putLong(charId); result.flip(); return result; diff --git a/src/protocol/swg/EnterTicketPurchaseModeMessage.java b/src/protocol/swg/EnterTicketPurchaseModeMessage.java index d160f215..8ba42533 100644 --- a/src/protocol/swg/EnterTicketPurchaseModeMessage.java +++ b/src/protocol/swg/EnterTicketPurchaseModeMessage.java @@ -54,12 +54,14 @@ public class EnterTicketPurchaseModeMessage extends SWGMessage { TravelPoint nearestPoint = core.travelService.getNearestTravelPoint(player); IoBuffer result = IoBuffer.allocate(11 + planetName.length() + nearestPoint.getName().length()).order(ByteOrder.LITTLE_ENDIAN); + result.putShort((short) 3); result.putInt(0x904DAE1A); result.put(getAsciiString(planetName)); result.put(getAsciiString(nearestPoint.getName())); + result.put((byte) 0); return result.flip(); diff --git a/src/protocol/swg/ErrorMessage.java b/src/protocol/swg/ErrorMessage.java index 652e1b6f..507561b9 100644 --- a/src/protocol/swg/ErrorMessage.java +++ b/src/protocol/swg/ErrorMessage.java @@ -23,6 +23,8 @@ package protocol.swg; import org.apache.mina.core.buffer.IoBuffer; +import resources.common.Opcodes; + public class ErrorMessage extends SWGMessage { @@ -42,7 +44,7 @@ public class ErrorMessage extends SWGMessage { IoBuffer result = IoBuffer.allocate(11 + errorType.length() + errorMessage.length()); result.putShort((short)3); - result.putInt(0xB5ABF91A); + result.putInt(Opcodes.ErrorMessage); result.put(getAsciiString(errorType)); result.put(getAsciiString(errorMessage)); result.put((byte)0); diff --git a/src/protocol/swg/GalaxyLoopTimesResponse.java b/src/protocol/swg/GalaxyLoopTimesResponse.java index 70367c62..3648c113 100644 --- a/src/protocol/swg/GalaxyLoopTimesResponse.java +++ b/src/protocol/swg/GalaxyLoopTimesResponse.java @@ -42,7 +42,7 @@ public class GalaxyLoopTimesResponse extends SWGMessage { @Override public IoBuffer serialize() { - IoBuffer result = IoBuffer.allocate(22).order(ByteOrder.LITTLE_ENDIAN); + IoBuffer result = IoBuffer.allocate(14).order(ByteOrder.LITTLE_ENDIAN); result.putShort((short) 3); result.putInt(0x4E428088); diff --git a/src/protocol/swg/GuildResponseMessage.java b/src/protocol/swg/GuildResponseMessage.java index f98e6713..7b718121 100644 --- a/src/protocol/swg/GuildResponseMessage.java +++ b/src/protocol/swg/GuildResponseMessage.java @@ -22,8 +22,8 @@ package protocol.swg; import java.nio.ByteOrder; - import org.apache.mina.core.buffer.IoBuffer; +import resources.common.Opcodes; public class GuildResponseMessage extends SWGMessage { @@ -46,7 +46,7 @@ public class GuildResponseMessage extends SWGMessage { IoBuffer buffer = IoBuffer.allocate(18 + guildName.length()).order(ByteOrder.LITTLE_ENDIAN); buffer.putShort((short) 4); - buffer.putInt(0x32263F20); + buffer.putInt(Opcodes.GuildResponseMessage); buffer.putLong(player); buffer.put(getAsciiString(guildName)); diff --git a/src/protocol/swg/LaunchBrowserMessage.java b/src/protocol/swg/LaunchBrowserMessage.java new file mode 100644 index 00000000..67266674 --- /dev/null +++ b/src/protocol/swg/LaunchBrowserMessage.java @@ -0,0 +1,55 @@ +/******************************************************************************* + * 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 protocol.swg; + +import java.nio.ByteOrder; +import org.apache.mina.core.buffer.IoBuffer; +import resources.common.Opcodes; + +public class LaunchBrowserMessage extends SWGMessage{ + private String URL; + + public LaunchBrowserMessage(String URL) { + this.URL = URL; + } + + public void deserialize(IoBuffer data) { + + } + + public IoBuffer serialize() { + + IoBuffer result = IoBuffer.allocate(100).order(ByteOrder.LITTLE_ENDIAN); + result.setAutoExpand(true); + + result.putShort((short) 2); + result.putInt(Opcodes.LaunchBrowserMessage); + + result.put(getAsciiString(URL)); + + int size = result.position(); + result = IoBuffer.allocate(size).put(result.array(), 0, size); + + return result.flip(); + } + +} diff --git a/src/protocol/swg/LoginServerId.java b/src/protocol/swg/LoginServerId.java index ca01ae90..3203ba37 100644 --- a/src/protocol/swg/LoginServerId.java +++ b/src/protocol/swg/LoginServerId.java @@ -25,6 +25,8 @@ import java.nio.ByteOrder; import org.apache.mina.core.buffer.IoBuffer; +import resources.common.Opcodes; + public class LoginServerId extends SWGMessage { @@ -42,7 +44,7 @@ public class LoginServerId extends SWGMessage { IoBuffer buffer = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN); buffer.putShort((short)2); - buffer.putInt(0x58C07F21); + buffer.putInt(Opcodes.LoginServerId); buffer.putInt(loginServerID); buffer.flip(); diff --git a/src/protocol/swg/LogoutMessage.java b/src/protocol/swg/LogoutMessage.java index 3f835aa6..23803097 100644 --- a/src/protocol/swg/LogoutMessage.java +++ b/src/protocol/swg/LogoutMessage.java @@ -25,6 +25,8 @@ import java.nio.ByteOrder; import org.apache.mina.core.buffer.IoBuffer; +import resources.common.Opcodes; + public class LogoutMessage extends SWGMessage{ @@ -36,7 +38,7 @@ public class LogoutMessage extends SWGMessage{ IoBuffer result = IoBuffer.allocate(6).order(ByteOrder.LITTLE_ENDIAN); result.putShort((short) 2); - result.putInt(0x42FD19DD); + result.putInt(Opcodes.LogoutMessage); return result; } diff --git a/src/protocol/swg/ObjControllerMessage.java b/src/protocol/swg/ObjControllerMessage.java index cb1ff04b..ff025def 100644 --- a/src/protocol/swg/ObjControllerMessage.java +++ b/src/protocol/swg/ObjControllerMessage.java @@ -27,11 +27,13 @@ import org.apache.mina.core.buffer.IoBuffer; + import protocol.swg.objectControllerObjects.CommandEnqueue; import protocol.swg.objectControllerObjects.DataTransform; import protocol.swg.objectControllerObjects.DataTransformWithParent; import protocol.swg.objectControllerObjects.ObjControllerObject; import protocol.swg.objectControllerObjects.UnknownObjController; +import resources.common.Opcodes; public class ObjControllerMessage extends SWGMessage { @@ -97,7 +99,7 @@ public class ObjControllerMessage extends SWGMessage { IoBuffer buffer = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN); buffer.setAutoExpand(true); buffer.putShort((short)5); - buffer.putInt(0x80CE5E46); + buffer.putInt(Opcodes.ObjControllerMessage); buffer.putInt(update); buffer.put(objControllerObject.serialize()); //System.out.println("OBJMSG: " + StringUtilities.bytesToHex(buffer.flip().array())); diff --git a/src/protocol/swg/PlayerMoneyResponse.java b/src/protocol/swg/PlayerMoneyResponse.java index 0438dd02..be302d9f 100644 --- a/src/protocol/swg/PlayerMoneyResponse.java +++ b/src/protocol/swg/PlayerMoneyResponse.java @@ -25,6 +25,8 @@ import java.nio.ByteOrder; import org.apache.mina.core.buffer.IoBuffer; +import resources.common.Opcodes; + public class PlayerMoneyResponse extends SWGMessage { int cash; @@ -45,7 +47,7 @@ public class PlayerMoneyResponse extends SWGMessage { IoBuffer buffer = IoBuffer.allocate(14).order(ByteOrder.LITTLE_ENDIAN); buffer.putShort((short) 3); - buffer.putInt(0x367E737E); + buffer.putInt(Opcodes.PlayerMoneyResponse); buffer.putInt(bank); buffer.putInt(cash); diff --git a/src/protocol/swg/objectControllerObjects/ObjController_02AB.java b/src/protocol/swg/objectControllerObjects/ObjController_02AB.java new file mode 100644 index 00000000..0a25266c --- /dev/null +++ b/src/protocol/swg/objectControllerObjects/ObjController_02AB.java @@ -0,0 +1,62 @@ +/******************************************************************************* + * 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 protocol.swg.objectControllerObjects; + +import java.nio.ByteOrder; + +import org.apache.mina.core.buffer.IoBuffer; + +import protocol.swg.ObjControllerMessage; +import resources.datatables.HitType; + +@SuppressWarnings("unused") +public class ObjController_02AB extends ObjControllerObject{ + + private long creatureId; + + public ObjController_02AB(long creatureId) { + this.creatureId = creatureId; + } + + public void deserialize(IoBuffer data) { + + } + + public IoBuffer serialize() { + + IoBuffer result = IoBuffer.allocate(100).order(ByteOrder.LITTLE_ENDIAN); + result.setAutoExpand(true); + + result.putInt(0x02AB); + result.putLong(creatureId); + result.putInt(0); + result.putInt(0x3DCCCCCD); + result.putInt(0x2F2B6FAA); + + int packetSize = result.position(); + result = IoBuffer.allocate(packetSize).put(result.array(), 0, packetSize); + + return result.flip(); + + } + +} diff --git a/src/protocol/swg/objectControllerObjects/ObjController_02AC.java b/src/protocol/swg/objectControllerObjects/ObjController_02AC.java new file mode 100644 index 00000000..b050bee9 --- /dev/null +++ b/src/protocol/swg/objectControllerObjects/ObjController_02AC.java @@ -0,0 +1,61 @@ +/******************************************************************************* + * 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 protocol.swg.objectControllerObjects; + +import java.nio.ByteOrder; + +import org.apache.mina.core.buffer.IoBuffer; + +import protocol.swg.ObjControllerMessage; +import resources.datatables.HitType; + +@SuppressWarnings("unused") +public class ObjController_02AC extends ObjControllerObject{ + + private long creatureId; + + public ObjController_02AC(long creatureId) { + this.creatureId = creatureId; + } + + public void deserialize(IoBuffer data) { + + } + + public IoBuffer serialize() { + + IoBuffer result = IoBuffer.allocate(100).order(ByteOrder.LITTLE_ENDIAN); + result.setAutoExpand(true); + + result.putInt(0x02AB); + result.putLong(creatureId); + result.putInt(0); + result.putInt(0x2F2B6FAA); + + int packetSize = result.position(); + result = IoBuffer.allocate(packetSize).put(result.array(), 0, packetSize); + + return result.flip(); + + } + +} diff --git a/src/protocol/swg/objectControllerObjects/ObjController_448.java b/src/protocol/swg/objectControllerObjects/ObjController_448.java new file mode 100644 index 00000000..f6324a5e --- /dev/null +++ b/src/protocol/swg/objectControllerObjects/ObjController_448.java @@ -0,0 +1,64 @@ +/******************************************************************************* + * 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 protocol.swg.objectControllerObjects; + +import java.nio.ByteOrder; + +import org.apache.mina.core.buffer.IoBuffer; + +import protocol.swg.ObjControllerMessage; + +public class ObjController_448 extends ObjControllerObject { + + private long objectId; + private int commandCRC; + + public ObjController_448(long objectId, int commandCRC) { + this.objectId = objectId; + this.commandCRC = commandCRC; + } + + @Override + public void deserialize(IoBuffer data) { + // TODO Auto-generated method stub + + } + + @Override + public IoBuffer serialize() { + + IoBuffer result = IoBuffer.allocate(45).order(ByteOrder.LITTLE_ENDIAN); + + result.putInt(ObjControllerMessage.START_TASK); + result.putLong(objectId); + result.putInt(0); + result.put((byte) 0); // 0 for no cooldown + result.putInt(0); + result.putInt(0); + result.putInt(0); + result.putInt(commandCRC); + + return result.flip(); + + } + +} diff --git a/src/protocol/swg/objectControllerObjects/ObjectMenuDirty.java b/src/protocol/swg/objectControllerObjects/ObjectMenuDirty.java new file mode 100644 index 00000000..79a0c9c4 --- /dev/null +++ b/src/protocol/swg/objectControllerObjects/ObjectMenuDirty.java @@ -0,0 +1,63 @@ +/******************************************************************************* + * 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 protocol.swg.objectControllerObjects; + +import java.nio.ByteOrder; + +import org.apache.mina.core.buffer.IoBuffer; + +import protocol.swg.ObjControllerMessage; + + + +public class ObjectMenuDirty extends ObjControllerObject { + + private long characterId; + + public ObjectMenuDirty(long characterId){ + this.characterId = characterId; + } + + + + @Override + public void deserialize(IoBuffer buffer) { + + } + + @Override + public IoBuffer serialize() { + IoBuffer result = IoBuffer.allocate(45).order(ByteOrder.LITTLE_ENDIAN); + + result.putInt(0x22B); + result.putLong(characterId); + result.putInt(0); + + return result.flip(); + } + +// 0000: 05 00 46 5E CE 80 1B 00 00 00 2B 02 00 00 7C 0E ..F^......+...|. +// 0010: 31 D6 41 00 00 00 00 00 00 00 1.A....... + + + +} diff --git a/src/resources/common/Forager.java b/src/resources/common/Forager.java index 71874a78..bbeb532d 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; @@ -36,6 +37,8 @@ import resources.objects.creature.CreatureObject; import resources.objects.group.GroupObject; import resources.objects.tangible.TangibleObject; import services.ai.AIActor; +import services.ai.states.FollowState; +import tools.DevLog; /** * @author Charon @@ -50,6 +53,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 +145,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 +195,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); @@ -392,12 +470,31 @@ public class Forager { treasureContainer.setAttachment("radial_filename", "object/treasureContainer"); treasureContainer.setAttachment("TreasureExtractorID", owner.getObjectID()); treasureContainer.setAttachment("TreasureGuards",guardList); - treasureContainer.setAttachment("ChestLevel",new Integer(spawnLevel)); +// treasureContainer.setAttachment("ChestLevel",new Integer(spawnLevel)); configureTreasureLoot(treasureContainer,owner,spawnLevel); NGECore.getInstance().lootService.DropLoot(owner, treasureContainer); owner.sendSystemMessage("@treasure_map/treasure_map:sys_time_limit",(byte)0); + Thread guardsThread = new Thread() { + public void run() { + try { + while (countAliveGuards(treasureContainer)>0){ + Thread.sleep(1000); + if (owner.getPosture()==14) + Thread.currentThread().interrupt(); + } + treasureContainer.setAttachment("radial_filename", "object/treasureContainer"); + owner.sendSystemMessage("@treasure_map/treasure_map:unlock_chest",(byte)0); + Thread.currentThread().interrupt(); + + } catch(InterruptedException va) { + System.out.println(va); + Thread.currentThread().interrupt(); // very important + } + } + }; + guardsThread.start(); // all down: owner.sendSystemMessage("@treasure_map/treasure_map:unlock_chest",(byte)0); } diff --git a/src/resources/common/Opcodes.java b/src/resources/common/Opcodes.java index c7bced7c..245aa8a6 100644 --- a/src/resources/common/Opcodes.java +++ b/src/resources/common/Opcodes.java @@ -41,12 +41,14 @@ public class Opcodes { public static final int CommoditiesResourceTypeListRequest = 0xCB1AE82D; public static final int NewbieTutorialResponse = 0xCA88FBAD; public static final int CmdSceneReady = 0x43FD1C22; + public static final int CommPlayerMessage = 0x594AD258; public static final int ConnectPlayerMessage = 0x2E365218; public static final int ClientCreateCharacter = 0xB97F3074; public static final int ClientIdMsg = 0xD5899226; public static final int ClientRandomNameRequest = 0xD6D1B6D1; public static final int ClientVerifyAndLockNameRequest = 0x9eb04b9f; public static final int DeleteCharacterMessage = 0xE87AD031; + public static final int ErrorMessage = 0xB5ABF91A; public static final int GetMapLocationsMessage = 0x1A7AB839; public static final int IsVendorOwnerMessage = CRC.StringtoCRC("IsVendorOwnerMessage"); public static final int LagRequest = 0x31805EE0; @@ -90,5 +92,13 @@ public class Opcodes { public static final int CancelLiveAuctionMessage = CRC.StringtoCRC("CancelLiveAuctionMessage"); public static final int BidAuctionMessage = CRC.StringtoCRC("BidAuctionMessage"); public static final int RetrieveAuctionItemMessage = CRC.StringtoCRC("RetrieveAuctionItemMessage"); + public static final int LaunchBrowserMessage = CRC.StringtoCRC("LaunchBrowserMessage"); + public static final int LoginServerId = 0x58C07F21; + public static final int LogoutMessage = 0x42FD19DD; + public static final int AttributeListMessage = 0xF3F12F2A; + public static final int GuildResponseMessage = 0x32263F20; + public static final int CreateCharacterSuccess = 0x1DB575CC; + public static final int PlayerMoneyResponse = 0x367E737E; + public static final int CmdStartScene = 0x3AE6DFAE; } diff --git a/src/resources/common/collidables/CollidableBox.java b/src/resources/common/collidables/CollidableBox.java index 4fd64080..c721b8d6 100644 --- a/src/resources/common/collidables/CollidableBox.java +++ b/src/resources/common/collidables/CollidableBox.java @@ -21,7 +21,112 @@ ******************************************************************************/ package resources.common.collidables; -public class CollidableBox { +import java.util.Random; + +import engine.resources.objects.SWGObject; +import engine.resources.scene.Planet; +import engine.resources.scene.Point3D; + +public class CollidableBox extends AbstractCollidable { + + private Point3D center; + private float width; + private float height; + private float widthHalf; + private float heightHalf; + + public CollidableBox(Point3D center, float width, float height, Planet planet) { + this.setCenter(center); + this.setWidth(width); + this.setHeight(height); + this.setPlanet(planet); + } + + public Point3D getCenter() { + return center; + } + + public void setCenter(Point3D center) { + this.center = center; + } + + public float getWidth() { + return width; + } + + public void setWidth(float width) { + this.width = width; + this.widthHalf=.5F*width; + } + + public float getHeight() { + return height; + } + + public void setHeight(float height) { + this.height = height; + this.heightHalf=.5F*height; + } + + @Override + public boolean doesCollide(SWGObject obj) { + Point3D objectPos = obj.getWorldPosition(); + return (objectPos.x>center.x-widthHalf) && + (objectPos.xcenter.z-heightHalf) && + (objectPos.zcenter.x-widthHalf) && + (position.xcenter.z-heightHalf) && + (position.zwidthHalf) + randomX = widthHalf - 5; + if (randomZ>heightHalf) + randomZ = heightHalf - 5; + if (new Random().nextFloat()<.5) + coordX = center.x + randomX; + else + coordX = center.x - randomX; + if (new Random().nextFloat()<.5) + coordZ = center.z + randomZ; + else + coordZ = center.z - randomZ; + + return new Point3D((float) coordX, 0, (float) coordZ); + } + + @Override + public Point3D getRandomPosition() { + Random random = new Random(); + float coordX; + float coordZ; + float randomX = random.nextInt((int) widthHalf); + float randomZ = random.nextInt((int) heightHalf); + if (new Random().nextFloat()<.5) + coordX = center.x + randomX; + else + coordX = center.x - randomX; + if (new Random().nextFloat()<.5) + coordZ = center.z + randomZ; + else + coordZ = center.z - randomZ; + + return new Point3D((float) coordX, 0, (float) coordZ); + } 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/datatables/GalaxyStatus.java b/src/resources/datatables/GalaxyStatus.java new file mode 100644 index 00000000..86669e89 --- /dev/null +++ b/src/resources/datatables/GalaxyStatus.java @@ -0,0 +1,31 @@ +/******************************************************************************* + * 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 resources.datatables; + +public class GalaxyStatus { + + public static final int Offline = 0; + public static final int Loading = 1; + public static final int Online = 2; + public static final int Locked = 3; + +} diff --git a/src/resources/datatables/PetPCDMapping.java b/src/resources/datatables/PetPCDMapping.java new file mode 100644 index 00000000..8bc75d1b --- /dev/null +++ b/src/resources/datatables/PetPCDMapping.java @@ -0,0 +1,213 @@ +package resources.datatables; + +import java.util.HashMap; +import java.util.Map; + +public class PetPCDMapping { + public static Map petMap = new HashMap(); + static{ + petMap.put("1", "object/intangible/pet/shared_21b_surgical_droid"); + petMap.put("2", "object/intangible/pet/shared_3po_protocol_droid"); + petMap.put("3", "object/intangible/pet/shared_3po_protocol_droid_crafted"); + petMap.put("4", "object/intangible/pet/shared_3po_protocol_droid_red"); + petMap.put("5", "object/intangible/pet/shared_3po_protocol_droid_silver"); + petMap.put("6", "object/intangible/pet/shared_8d8"); + petMap.put("7", "object/intangible/pet/shared_angler_hue"); + petMap.put("8", "object/intangible/pet/shared_asn_121"); + petMap.put("9", "object/intangible/pet/shared_astromech_waiter"); + petMap.put("10", "object/intangible/pet/shared_bageraset_hue"); + petMap.put("11", "object/intangible/pet/shared_bantha_armored"); + petMap.put("12", "object/intangible/pet/shared_bantha_hue"); + petMap.put("13", "object/intangible/pet/shared_bark_mite_hue"); + petMap.put("14", "object/intangible/pet/shared_battle_droid"); + petMap.put("15", "object/intangible/pet/shared_bearded_jax_hue"); + petMap.put("16", "object/intangible/pet/shared_blistmok"); + petMap.put("17", "object/intangible/pet/shared_blurrg_hue"); + petMap.put("18", "object/intangible/pet/shared_boar_wolf_hue"); + petMap.put("19", "object/intangible/pet/shared_bocatt_hue"); + petMap.put("20", "object/intangible/pet/shared_bolle_bol_hue"); + petMap.put("21", "object/intangible/pet/shared_bolma_hue"); + petMap.put("22", "object/intangible/pet/shared_bolotaur"); + petMap.put("23", "object/intangible/pet/shared_bol_hue"); + petMap.put("24", "object/intangible/pet/shared_bomarr_monk_spider_droid"); + petMap.put("25", "object/intangible/pet/shared_bordok_hue"); + petMap.put("26", "object/intangible/pet/shared_borgle_hue"); + petMap.put("27", "object/intangible/pet/shared_brackaset_hue"); + petMap.put("28", "object/intangible/pet/shared_capper_spineflap_hue"); + petMap.put("29", "object/intangible/pet/shared_carrion_spat_hue"); + petMap.put("30", "object/intangible/pet/shared_choku_hue"); + petMap.put("31", "object/intangible/pet/shared_chuba_hue"); + petMap.put("32", "object/intangible/pet/shared_cll8_binary_load_lifter"); + petMap.put("33", "object/intangible/pet/shared_condor_dragon_hue"); + petMap.put("34", "object/intangible/pet/shared_corellian_butterfly_hue"); + petMap.put("35", "object/intangible/pet/shared_corellian_sand_panther_hue"); + petMap.put("36", "object/intangible/pet/shared_corellian_slice_hound_hue"); + petMap.put("37", "object/intangible/pet/shared_crystal_snake"); + petMap.put("38", "object/intangible/pet/shared_cu_pa_hue"); + petMap.put("39", "object/intangible/pet/shared_cww8_droid_crafted"); + petMap.put("40", "object/intangible/pet/shared_dalyrake_hue"); + petMap.put("41", "object/intangible/pet/shared_darth_maul_probe_droid"); + petMap.put("42", "object/intangible/pet/shared_dewback_hue"); + petMap.put("43", "object/intangible/pet/shared_droideka"); + petMap.put("44", "object/intangible/pet/shared_droid_pet"); + petMap.put("45", "object/intangible/pet/shared_dune_lizard_hue"); + petMap.put("46", "object/intangible/pet/shared_durni_hue"); + petMap.put("47", "object/intangible/pet/shared_dwarf_nuna_hue"); + petMap.put("48", "object/intangible/pet/shared_dwarf_spider_droid"); + petMap.put("49", "object/intangible/pet/shared_dz70_fugitive_tracker_droid"); + petMap.put("50", "object/intangible/pet/shared_eg6_power_droid"); + petMap.put("51", "object/intangible/pet/shared_eg6_power_droid_crafted"); + petMap.put("52", "object/intangible/pet/shared_eopie_hue"); + petMap.put("53", "object/intangible/pet/shared_ev_9d9"); + petMap.put("54", "object/intangible/pet/shared_falumpaset_hue"); + petMap.put("55", "object/intangible/pet/shared_fambaa_hue"); + petMap.put("56", "object/intangible/pet/shared_fanned_rawl_hue"); + petMap.put("57", "object/intangible/pet/shared_flewt_hue"); + petMap.put("58", "object/intangible/pet/shared_flit_hue"); + petMap.put("59", "object/intangible/pet/shared_fynock_hue"); + petMap.put("60", "object/intangible/pet/shared_gackle_bat_hue"); + petMap.put("61", "object/intangible/pet/shared_gaping_spider_hue"); + petMap.put("62", "object/intangible/pet/shared_gcw_atst_familiar_pcd"); + petMap.put("63", "object/intangible/pet/shared_gcw_atxt_familiar_pcd"); + petMap.put("64", "object/intangible/pet/shared_gnort_hue"); + petMap.put("65", "object/intangible/pet/shared_graul_hue"); + petMap.put("66", "object/intangible/pet/shared_gronda_hue"); + petMap.put("67", "object/intangible/pet/shared_gualaar_pcd"); + petMap.put("68", "object/intangible/pet/shared_gualama_hue"); + petMap.put("69", "object/intangible/pet/shared_guardian_mark_ii_crafted"); + petMap.put("70", "object/intangible/pet/shared_gubbur_hue"); + petMap.put("71", "object/intangible/pet/shared_guf_drolg_hue"); + petMap.put("72", "object/intangible/pet/shared_gulginaw_hue"); + petMap.put("73", "object/intangible/pet/shared_gurk_hue"); + petMap.put("74", "object/intangible/pet/shared_gurnaset_hue"); + petMap.put("75", "object/intangible/pet/shared_gurreck_hue"); + petMap.put("76", "object/intangible/pet/shared_hanadak_hue"); + petMap.put("77", "object/intangible/pet/shared_hermit_spider_hue"); + petMap.put("78", "object/intangible/pet/shared_horned_krevol_hue"); + petMap.put("79", "object/intangible/pet/shared_horned_rasp_hue"); + petMap.put("80", "object/intangible/pet/shared_huf_dun_hue"); + petMap.put("81", "object/intangible/pet/shared_huurton_hue"); + petMap.put("82", "object/intangible/pet/shared_ig_assassin_droid"); + petMap.put("83", "object/intangible/pet/shared_ikopi_hue"); + petMap.put("84", "object/intangible/pet/shared_ins_444_crafted"); + petMap.put("85", "object/intangible/pet/shared_ito_interrogator"); + petMap.put("86", "object/intangible/pet/shared_jundak"); + petMap.put("87", "object/intangible/pet/shared_kaadu_hue"); + petMap.put("88", "object/intangible/pet/shared_kai_tok_hue"); + petMap.put("89", "object/intangible/pet/shared_kashyyyk_bantha"); + petMap.put("90", "object/intangible/pet/shared_kima_hue"); + petMap.put("91", "object/intangible/pet/shared_kimogila_hue"); + petMap.put("92", "object/intangible/pet/shared_kliknik_hue"); + petMap.put("93", "object/intangible/pet/shared_krahbu_hue"); + petMap.put("94", "object/intangible/pet/shared_kubaza_beetle"); + petMap.put("95", "object/intangible/pet/shared_kusak_hue"); + petMap.put("96", "object/intangible/pet/shared_kwi_hue"); + petMap.put("97", "object/intangible/pet/shared_langlatch_hue"); + petMap.put("98", "object/intangible/pet/shared_lantern_bird_hue"); + petMap.put("99", "object/intangible/pet/shared_lava_flea"); + petMap.put("100", "object/intangible/pet/shared_le_repair_droid"); + petMap.put("101", "object/intangible/pet/shared_lin_demolitionmech"); + petMap.put("102", "object/intangible/pet/shared_loveday_ewok_cupid"); + petMap.put("103", "object/intangible/pet/shared_loveday_romance_seeker"); + petMap.put("104", "object/intangible/pet/shared_magnaguard"); + petMap.put("105", "object/intangible/pet/shared_malkloc_hue"); + petMap.put("106", "object/intangible/pet/shared_mamien_hue"); + petMap.put("107", "object/intangible/pet/shared_mark_iv_sentry_droid_crafted"); + petMap.put("108", "object/intangible/pet/shared_mawgax_hue"); + petMap.put("109", "object/intangible/pet/shared_merek_hue"); + petMap.put("110", "object/intangible/pet/shared_mining_droid"); + petMap.put("111", "object/intangible/pet/shared_mott_hue"); + petMap.put("112", "object/intangible/pet/shared_mouse_droid"); + petMap.put("113", "object/intangible/pet/shared_mouse_droid_crafted"); + petMap.put("114", "object/intangible/pet/shared_murra_hue"); + petMap.put("115", "object/intangible/pet/shared_mynock_hue"); + petMap.put("116", "object/intangible/pet/shared_narglatch_hue"); + petMap.put("117", "object/intangible/pet/shared_nhelper_droid"); + petMap.put("118", "object/intangible/pet/shared_nuna_hue"); + petMap.put("119", "object/intangible/pet/shared_peko_peko_hue"); + petMap.put("120", "object/intangible/pet/shared_perlek_hue"); + petMap.put("121", "object/intangible/pet/shared_pet_control"); + petMap.put("122", "object/intangible/pet/shared_pet_deed"); + petMap.put("123", "object/intangible/pet/shared_piket_hue"); + petMap.put("124", "object/intangible/pet/shared_pit_droid"); + petMap.put("125", "object/intangible/pet/shared_plumed_rasp_hue"); + petMap.put("126", "object/intangible/pet/shared_probot"); + petMap.put("127", "object/intangible/pet/shared_pugoriss_hue"); + petMap.put("128", "object/intangible/pet/shared_purbole_hue"); + petMap.put("129", "object/intangible/pet/shared_quenker_hue"); + petMap.put("130", "object/intangible/pet/shared_r2"); + petMap.put("131", "object/intangible/pet/shared_r2d2"); + petMap.put("132", "object/intangible/pet/shared_r2_crafted"); + petMap.put("133", "object/intangible/pet/shared_r3"); + petMap.put("134", "object/intangible/pet/shared_r3_crafted"); + petMap.put("135", "object/intangible/pet/shared_r4"); + petMap.put("136", "object/intangible/pet/shared_r4_crafted"); + petMap.put("137", "object/intangible/pet/shared_r5"); + petMap.put("138", "object/intangible/pet/shared_r5_crafted"); + petMap.put("139", "object/intangible/pet/shared_ra7_bug_droid"); + petMap.put("140", "object/intangible/pet/shared_rancor_hue"); + petMap.put("141", "object/intangible/pet/shared_reptilian_flier_hue"); + petMap.put("142", "object/intangible/pet/shared_roba_hue"); + petMap.put("143", "object/intangible/pet/shared_robo_bartender"); + petMap.put("144", "object/intangible/pet/shared_rock_mite_hue"); + petMap.put("145", "object/intangible/pet/shared_ronto_hue"); + petMap.put("146", "object/intangible/pet/shared_salt_mynock_hue"); + petMap.put("147", "object/intangible/pet/shared_sharnaff_hue"); + petMap.put("148", "object/intangible/pet/shared_shaupaut_hue"); + petMap.put("149", "object/intangible/pet/shared_shear_mite_hue"); + petMap.put("150", "object/intangible/pet/shared_skreeg_hue"); + petMap.put("151", "object/intangible/pet/shared_snorbal_hue"); + petMap.put("152", "object/intangible/pet/shared_spined_puc_hue"); + petMap.put("153", "object/intangible/pet/shared_spined_snake_hue"); + petMap.put("154", "object/intangible/pet/shared_squall_hue"); + petMap.put("155", "object/intangible/pet/shared_squill_hue"); + petMap.put("156", "object/intangible/pet/shared_stintaril_hue"); + petMap.put("157", "object/intangible/pet/shared_super_battle_droid"); + petMap.put("158", "object/intangible/pet/shared_super_battle_droid_crafted"); + petMap.put("159", "object/intangible/pet/shared_swirl_prong_hue"); + petMap.put("160", "object/intangible/pet/shared_tanc_mite_hue"); + petMap.put("161", "object/intangible/pet/shared_tanray"); + petMap.put("162", "object/intangible/pet/shared_tauntaun_hue"); + petMap.put("163", "object/intangible/pet/shared_tcg_familiar_hutt_fighter_pcd"); + petMap.put("164", "object/intangible/pet/shared_tcg_familiar_snow_speeder_pcd"); + petMap.put("165", "object/intangible/pet/shared_tcg_familiar_tie_fighter_pcd"); + petMap.put("166", "object/intangible/pet/shared_tcg_familiar_xwing_fighter_pcd"); + petMap.put("167", "object/intangible/pet/shared_tcg_peko_peko_mount"); + petMap.put("168", "object/intangible/pet/shared_thune_hue"); + petMap.put("169", "object/intangible/pet/shared_tip_solicitor_droid"); + petMap.put("170", "object/intangible/pet/shared_torton_hue"); + petMap.put("171", "object/intangible/pet/shared_training_remote"); + petMap.put("172", "object/intangible/pet/shared_tt8l"); + petMap.put("173", "object/intangible/pet/shared_tt8l_y7"); + petMap.put("174", "object/intangible/pet/shared_tulrus"); + petMap.put("175", "object/intangible/pet/shared_tusk_cat_hue"); + petMap.put("176", "object/intangible/pet/shared_tybis_hue"); + petMap.put("177", "object/intangible/pet/shared_union_sentry_droid_crafted"); + petMap.put("178", "object/intangible/pet/shared_varactyl"); + petMap.put("179", "object/intangible/pet/shared_veermok_hue"); + petMap.put("180", "object/intangible/pet/shared_vehicular_prototype"); + petMap.put("181", "object/intangible/pet/shared_vehicular_prototype_bike"); + petMap.put("182", "object/intangible/pet/shared_verne_hue"); + petMap.put("183", "object/intangible/pet/shared_vesp_hue"); + petMap.put("184", "object/intangible/pet/shared_vir_vur_hue"); + petMap.put("185", "object/intangible/pet/shared_voritor_lizard_hue"); + petMap.put("186", "object/intangible/pet/shared_vr_bearded_jax"); + petMap.put("187", "object/intangible/pet/shared_vr_gacklebat"); + petMap.put("188", "object/intangible/pet/shared_vr_mouse_droid"); + petMap.put("189", "object/intangible/pet/shared_vr_mynock"); + petMap.put("190", "object/intangible/pet/shared_vr_nightspider"); + petMap.put("191", "object/intangible/pet/shared_vynock_hue"); + petMap.put("192", "object/intangible/pet/shared_wed_treadwell"); + petMap.put("193", "object/intangible/pet/shared_womp_rat_hue"); + petMap.put("194", "object/intangible/pet/shared_woolamander_hue"); + petMap.put("195", "object/intangible/pet/shared_worrt_hue"); + petMap.put("196", "object/intangible/pet/shared_xandank"); + petMap.put("197", "object/intangible/pet/shared_zucca_boar_hue"); + } + + public PetPCDMapping(){} + + public static String getPCDTemplate(String petTemplate){ + return petMap.get(petTemplate); + } +} 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/objectives/BountyMissionObjective.java b/src/resources/objectives/BountyMissionObjective.java index 35eb4837..5ed1b0c0 100644 --- a/src/resources/objectives/BountyMissionObjective.java +++ b/src/resources/objectives/BountyMissionObjective.java @@ -304,18 +304,18 @@ public class BountyMissionObjective extends MissionObjective { WaypointObject missionWp = mission.getWaypoint(); - if (missionWp.getPlanetCRC() != CRC.StringtoCRC(target.getPlanet().name)) { + if (missionWp == null || missionWp.getPlanetCRC() != CRC.StringtoCRC(target.getPlanet().name)) { WaypointObject waypoint = (WaypointObject) getMissionObject().getWaypoint(); waypoint.setActive(true); waypoint.setColor(WaypointObject.ORANGE); waypoint.setName(getMissionObject().getTargetName()); waypoint.setPlanetCRC(CRC.StringtoCRC(target.getPlanet().getName())); waypoint.setStringAttribute("", ""); - getMissionObject().setWaypoint(waypoint); + waypoint.setPosition(target.getWorldPosition()); + mission.setWaypoint(waypoint); } else { missionWp.setPosition(target.getWorldPosition()); mission.setWaypoint(missionWp); - getMissionObject().setWaypoint(missionWp); } actor.sendSystemMessage("@mission/mission_generic:target_location_updated_ground", DisplayType.Broadcast); actor.sendSystemMessage("@mission/mission_generic:target_continue_tracking", DisplayType.Broadcast); @@ -331,6 +331,46 @@ public class BountyMissionObjective extends MissionObjective { } } + public void beginIdentifyTarget(NGECore core, CreatureObject actor) { + if (seekerActive) + return; + + setSeekerActive(true); + setSeekerPlanet(actor.getPlanet().name); + + Executors.newSingleThreadScheduledExecutor().schedule(() -> { + MissionObject mission = getMissionObject(); + SWGObject target = core.objectService.getObject(markObjId); + + if (target == null) { + actor.sendSystemMessage("@mission/mission_generic:player_target_inactive", DisplayType.Broadcast); + return; + } else if (target.getPlanet().getName() != getSeekerPlanet()) { + actor.sendSystemMessage("@mission/mission_generic:target_not_on_planet", DisplayType.Broadcast); + return; + } + + WaypointObject missionWp = mission.getWaypoint(); + + if (missionWp == null || missionWp.getPlanetCRC() != CRC.StringtoCRC(target.getPlanet().name)) { + WaypointObject waypoint = (WaypointObject) getMissionObject().getWaypoint(); + waypoint.setActive(true); + waypoint.setColor(WaypointObject.ORANGE); + waypoint.setName(getMissionObject().getTargetName()); + waypoint.setPlanetCRC(CRC.StringtoCRC(target.getPlanet().getName())); + waypoint.setStringAttribute("", ""); + waypoint.setPosition(target.getWorldPosition()); + mission.setWaypoint(waypoint); + } else { + missionWp.setPosition(target.getWorldPosition()); + mission.setWaypoint(missionWp); + } + + actor.sendSystemMessage("Your target was identified as " + target.getCustomName() + ".", DisplayType.Broadcast); // Can't find this in the string files + actor.sendSystemMessage("@mission/mission_generic:target_location_updated_ground", DisplayType.Broadcast); + }, 60, TimeUnit.SECONDS); + } + public void beginArakydUpdate(final CreatureObject actor) { arakydActive = true; Executors.newScheduledThreadPool(1).schedule(() -> { @@ -350,8 +390,7 @@ public class BountyMissionObjective extends MissionObjective { waypoint.setName(getMissionObject().getTargetName()); waypoint.setPlanetCRC(CRC.StringtoCRC(target.getPlanet().getName())); waypoint.setStringAttribute("", ""); - - actor.getClient().getSession().write(getMissionObject().getBaseline3().set("waypoint", waypoint)); + getMissionObject().setWaypoint(waypoint); actor.sendSystemMessage("@mission/mission_generic:target_location_updated_ground", DisplayType.Broadcast); actor.sendSystemMessage("@mission/mission_generic:target_located_" + target.getPlanet().getName(), DisplayType.Broadcast); diff --git a/src/resources/objectives/DeliveryMissionObjective.java b/src/resources/objectives/DeliveryMissionObjective.java index b2ae62a6..c4eef253 100644 --- a/src/resources/objectives/DeliveryMissionObjective.java +++ b/src/resources/objectives/DeliveryMissionObjective.java @@ -22,7 +22,6 @@ package resources.objectives; import engine.resources.common.CRC; -import engine.resources.scene.Point3D; import main.NGECore; import resources.common.OutOfBand; import resources.datatables.DisplayType; @@ -36,9 +35,9 @@ public class DeliveryMissionObjective extends MissionObjective { private static final long serialVersionUID = 1L; - private TangibleObject deliveryObject; - private CreatureObject missionGiver; - private CreatureObject dropOffNpc; + private long deliveryObjectId; + private long missionGiverId; + private long dropOffNpcId; public DeliveryMissionObjective(MissionObject parent) { super(parent); @@ -50,47 +49,22 @@ public class DeliveryMissionObjective extends MissionObjective { if (isActivated()) return; - String template = "object/mobile/shared_dressed_commoner_tatooine_sullustan_male_06.iff"; - - Point3D startLoc = parent.getStartLocation().getLocation(); - Point3D destination = parent.getDestinationLocation().getLocation(); - - // TODO: Randomize this process. - CreatureObject missionGiver = (CreatureObject) core.staticService.spawnObject(template, parent.getPlanet().name, 0, startLoc.x, startLoc.y, startLoc.z, 0, 1); - if (missionGiver == null) - return; - - missionGiver.setCustomName("a commoner"); - missionGiver.setAttachment("conversationFile", "missions/deliver"); - missionGiver.setAttachment("radial_filename", "object/conversation"); - missionGiver.setAttachment("assignedMission", getMissionObject().getObjectId()); - missionGiver.setOptionsBitmask(264); - setMissionGiver(missionGiver); - - CreatureObject dropOffNpc = (CreatureObject) core.staticService.spawnObject(template, parent.getPlanet().name, 0, destination.x, destination.y, destination.z, 0, 1); - if (dropOffNpc == null) - return; - - dropOffNpc.setCustomName("a commoner"); - dropOffNpc.setAttachment("conversationFile", "missions/deliver"); - dropOffNpc.setAttachment("radial_filename", "object/conversation"); - dropOffNpc.setAttachment("assignedMission", getMissionObject().getObjectId()); - dropOffNpc.setOptionsBitmask(264); - setDropOffNpc(dropOffNpc); + this.missionGiverId = parent.getStartLocation().getObjectId(); + this.dropOffNpcId = parent.getDestinationLocation().getObjectId(); if (getObjectivePhase() == 0) { WaypointObject waypoint = getMissionObject().getWaypoint(); - //waypoint.setPlanet(missionGiver.getPlanet()); - waypoint.setPlanetCRC(CRC.StringtoCRC(missionGiver.getPlanet().name)); - waypoint.setPosition(startLoc); + waypoint.setPlanetCRC(CRC.StringtoCRC(player.getPlanet().name)); + waypoint.setPosition(parent.getStartLocation().getLocation()); waypoint.setName("@" + parent.getTitle().getStfFilename() + ":" + "m" + parent.getMissionId() + "t"); waypoint.setColor(WaypointObject.ORANGE); waypoint.setActive(true); getMissionObject().setWaypoint(waypoint); + } else if (getObjectivePhase() == 1) { WaypointObject waypoint = getMissionObject().getWaypoint(); - waypoint.setPlanetCRC(CRC.StringtoCRC(dropOffNpc.getPlanet().name)); - waypoint.setPosition(destination); + waypoint.setPlanetCRC(CRC.StringtoCRC(player.getPlanet().name)); + waypoint.setPosition(parent.getDestinationLocation().getLocation()); waypoint.setName("@" + parent.getTitle().getStfFilename() + ":" + "m" + parent.getMissionId() + "t"); waypoint.setColor(WaypointObject.ORANGE); waypoint.setActive(true); @@ -108,22 +82,13 @@ public class DeliveryMissionObjective extends MissionObjective { player.addBankCredits(reward); player.sendSystemMessage(OutOfBand.ProsePackage("@mission/mission_generic:success_w_amount", reward), DisplayType.Broadcast); - - abort(core, player); - - core.objectService.destroyObject(getMissionObject()); } @Override public void abort(NGECore core, CreatureObject player) { + TangibleObject deliveryObject = (TangibleObject) core.objectService.getObject(deliveryObjectId); if (deliveryObject != null) - core.objectService.destroyObject(deliveryObject.getObjectId()); - - if (missionGiver != null) - core.objectService.destroyObject(missionGiver, 360); - - if (dropOffNpc != null) - core.objectService.destroyObject(dropOffNpc, 360); + core.objectService.destroyObject(deliveryObject); } @Override @@ -138,6 +103,7 @@ public class DeliveryMissionObjective extends MissionObjective { waypoint.setName("@" + parent.getTitle().getStfFilename() + ":" + "m" + parent.getMissionId() + "t"); waypoint.setColor(WaypointObject.ORANGE); waypoint.setActive(true); + waypoint.setPlanetCRC(CRC.StringtoCRC(player.getPlanet().name)); getMissionObject().setTargetName("Dropoff Location"); getMissionObject().setWaypoint(waypoint); break; @@ -147,6 +113,7 @@ public class DeliveryMissionObjective extends MissionObjective { returnWp.setName("@" + parent.getTitle().getStfFilename() + ":" + "m" + parent.getMissionId() + "t"); returnWp.setColor(WaypointObject.ORANGE); returnWp.setActive(true); + returnWp.setPlanetCRC(CRC.StringtoCRC(player.getPlanet().name)); getMissionObject().setTargetName("Return"); getMissionObject().setWaypoint(returnWp); break; @@ -166,23 +133,23 @@ public class DeliveryMissionObjective extends MissionObjective { TangibleObject deliveryObject = (TangibleObject) core.objectService.createObject("object/tangible/mission/shared_mission_datadisk.iff", player.getPlanet()); if (deliveryObject != null && inventory.add(deliveryObject)) { - setDeliveryObject(deliveryObject); + setDeliveryObject(deliveryObject.getObjectID()); return true; } else return false; } - public TangibleObject getDeliveryObject() { return deliveryObject; } + public long getDeliveryObject() { return deliveryObjectId; } - public void setDeliveryObject(TangibleObject object) { this.deliveryObject = object; } + public void setDeliveryObject(long object) { this.deliveryObjectId = object; } - public CreatureObject getMissionGiver() { return missionGiver; } + public long getMissionGiver() { return missionGiverId; } - public void setMissionGiver(CreatureObject missionGiver) { this.missionGiver = missionGiver; } + public void setMissionGiver(long missionGiver) { this.missionGiverId = missionGiver; } - public CreatureObject getDropOffNpc() { return dropOffNpc; } + public long getDropOffNpc() { return dropOffNpcId; } - public void setDropOffNpc(CreatureObject dropOffNpc) { this.dropOffNpc = dropOffNpc; } + public void setDropOffNpc(long dropOffNpc) { this.dropOffNpcId = dropOffNpc; } } diff --git a/src/resources/objects/SWGList.java b/src/resources/objects/SWGList.java index 781a676d..ffa34897 100644 --- a/src/resources/objects/SWGList.java +++ b/src/resources/objects/SWGList.java @@ -23,6 +23,7 @@ package resources.objects; import java.io.Serializable; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; import java.util.Comparator; import java.util.Iterator; @@ -38,6 +39,7 @@ import java.util.stream.Stream; import org.apache.mina.core.buffer.IoBuffer; import org.python.google.common.collect.Lists; +import engine.resources.common.StringUtilities; import engine.resources.objects.Baseline; import engine.resources.objects.Delta; import engine.resources.objects.IDelta; @@ -305,7 +307,6 @@ public class SWGList implements List, Serializable { synchronized(objectMutex) { if (valid(element)) { E previousElement = list.set(index, element); - queue(item(2, index, Baseline.toBytes(element), true, true)); return previousElement; @@ -317,7 +318,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 +332,17 @@ 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(); + //StringUtilities.printBytes(newListData); + //tools.CharonPacketUtils.printAnalysis(buffer,"SWGList set"); queue(newListData); return true; diff --git a/src/resources/objects/building/BuildingObject.java b/src/resources/objects/building/BuildingObject.java index 3f163e45..102dc5ff 100644 --- a/src/resources/objects/building/BuildingObject.java +++ b/src/resources/objects/building/BuildingObject.java @@ -53,6 +53,7 @@ public class BuildingObject extends TangibleObject implements IPersistent, Seria private Vector entryList = new Vector(); private Vector banList = new Vector(); private Vector adminList = new Vector(); + private int destructionFee = 0; public static final byte PRIVATE = (byte) 0; public static final byte PUBLIC = (byte) 1; @@ -418,5 +419,13 @@ public class BuildingObject extends TangibleObject implements IPersistent, Seria return adminList.contains(creature.getObjectID()); } + public int getDestructionFee() { + return destructionFee; + } + + public void setDestructionFee(int destructionFee) { + this.destructionFee = destructionFee; + } + } diff --git a/src/resources/objects/creature/Copy of CreatureObject.java b/src/resources/objects/creature/Copy of CreatureObject.java new file mode 100644 index 00000000..7dafed26 --- /dev/null +++ b/src/resources/objects/creature/Copy of CreatureObject.java @@ -0,0 +1,1345 @@ +/******************************************************************************* + * 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 resources.objects.creature; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Iterator; +import java.util.List; +import java.util.Map.Entry; +import java.util.concurrent.ScheduledFuture; + +import main.NGECore; + +import org.apache.mina.core.buffer.IoBuffer; + +import protocol.swg.chat.ChatSystemMessage; +import protocol.swg.ObjControllerMessage; +import protocol.swg.PlayMusicMessage; +import protocol.swg.UpdatePVPStatusMessage; +import protocol.swg.UpdatePostureMessage; +import protocol.swg.objectControllerObjects.Animation; +import protocol.swg.objectControllerObjects.Posture; + +import com.sleepycat.je.Environment; +import com.sleepycat.je.Transaction; +import com.sleepycat.persist.model.Entity; +import com.sleepycat.persist.model.NotPersistent; + +import engine.clients.Client; +import engine.resources.objects.Baseline; +import resources.objects.SWGList; +import resources.objects.SWGMap; +import resources.objects.SWGSet; +import resources.objects.player.PlayerObject; +import resources.objects.tangible.TangibleObject; +import resources.skills.SkillMod; +import resources.buffs.Buff; +import resources.buffs.BuffList; +import resources.buffs.DamageOverTime; +import resources.datatables.Difficulty; +import resources.equipment.Equipment; +import resources.group.GroupInviteInfo; +import engine.resources.common.CRC; +import engine.resources.objects.IPersistent; +import engine.resources.objects.SWGObject; +import engine.resources.scene.Planet; +import engine.resources.scene.Point3D; +import engine.resources.scene.Quaternion; + +public class CreatureObject extends TangibleObject implements IPersistent { + + private static final long serialVersionUID = 1L; + + private transient CreatureMessageBuilder messageBuilder; + + private transient List duelList = Collections.synchronizedList(new ArrayList()); + private transient ScheduledFuture incapTask; + private transient ScheduledFuture entertainerExperience; + private transient ScheduledFuture inspirationTick; + private transient CreatureObject performanceWatchee; + private transient CreatureObject performanceListenee; + private transient List performanceAudience = new ArrayList(); + private transient int flourishCount = 0; + + public CreatureObject(long objectID, Planet planet, Point3D position, Quaternion orientation, String Template) { + super(objectID, planet, position, orientation, Template); + setMaximumCondition(1000); + setStaticObject(true); + getHamList().add(1000); + getHamList().add(0); + getHamList().add(300); + getHamList().add(0); + getHamList().add(300); + getHamList().add(0); + getMaxHamList().add(1000); + getMaxHamList().add(0); + getMaxHamList().add(300); + getMaxHamList().add(0); + getMaxHamList().add(300); + getMaxHamList().add(0); + //getBuffList().put(0, new Buff("", getObjectID())); // Initial Default Buff + + loadTemplateData(); + } + + public CreatureObject() { + super(); + } + + @Override + public Baseline getOtherVariables() { + Baseline baseline = super.getOtherVariables(); + baseline.put("dotList", new ArrayList()); + return baseline; + } + + @Override + public Baseline getBaseline1() { + Baseline baseline = super.getBaseline1(); + baseline.put("bankCredits", 0); + baseline.put("cashCredits", 0); + baseline.put("baseAttributes", new SWGList(this, 1, 2, false)); + baseline.put("skills", new SWGSet(this, 1, 3, false)); + return baseline; + } + + @Override + public Baseline getBaseline3() { + Baseline baseline = super.getBaseline3(); + baseline.put("posture", (byte) 0); + baseline.put("factionRank", (byte) 0); + baseline.put("ownerId", (long) 0); + baseline.put("height", (float) 1); + baseline.put("battleFatigue", 0); + baseline.put("stateBitmask", (long) 0); + return baseline; + } + + @Override + public Baseline getBaseline4() { + Baseline baseline = super.getBaseline4(); + baseline.put("accelerationMultiplierBase", (float) 1); + baseline.put("accelerationMultiplierMod", (float) 1); + baseline.put("hamEncumberanceList", new SWGList(this, 4, 2, false)); + baseline.put("skillMods", new SWGMap(this, 4, 3, true)); + baseline.put("speedMultiplierBase", (float) 1); + baseline.put("speedMultiplierMod", (float) 1); + baseline.put("listenToId", (long) 0); + baseline.put("runSpeed", (float) 7.3); + baseline.put("slopeModAngle", (float) 1); + baseline.put("slopeModPercent", (float) 1); + baseline.put("turnRadius", (float) 1); + baseline.put("walkSpeed", (float) 1.549); + baseline.put("waterModPercent", (float) 0.75); + baseline.put("missionCriticalObjects", new SWGMap(this, 4, 13, false)); + baseline.put("abilities", new SWGMap(this, 4, 14, true)); + baseline.put("displayXp", 0); + return baseline; + } + + @Override + public Baseline getBaseline6() { + Baseline baseline = super.getBaseline6(); + baseline.put("level", (short) -1); + baseline.put("grantedHealth", 0); + baseline.put("currentAnimation", ""); + baseline.put("moodAnimation", "neutral"); + baseline.put("weaponId", (long) 0); + baseline.put("groupId", (long) 0); + baseline.put("groupInviteInfo", new GroupInviteInfo((long) 0, "")); + baseline.put("guildId", 0); + baseline.put("lookAtTarget", (long) 0); + baseline.put("intendedTarget", (long) 0); + baseline.put("moodId", (byte) 0); + baseline.put("performanceCounter", 0); + baseline.put("performanceId", 0); + baseline.put("attributes", new SWGList(this, 6, 21, false)); + baseline.put("maxAttributes", new SWGList(this, 6, 22, false)); + baseline.put("equipmentList", new SWGList(this, 6, 23, false)); + baseline.put("appearance", ""); + baseline.put("visible", true); + baseline.put("buffList", new BuffList(new SWGMap(this, 6, 26, false))); + baseline.put("performing", false); + baseline.put("difficulty", Difficulty.NORMAL); + baseline.put("hologramColor", -1); + baseline.put("visibleOnRadar", true); + baseline.put("31", (byte) 0); + baseline.put("32", (byte) 0); + baseline.put("appearanceEquipmentList", new SWGList(this, 6, 31, false)); + baseline.put("34", (long) 0); + return baseline; + } + + @Override + public Baseline getBaseline8() { + Baseline baseline = super.getBaseline8(); + return baseline; + } + + @Override + public Baseline getBaseline9() { + Baseline baseline = super.getBaseline9(); + return baseline; + } + + private void loadTemplateData() { + + /*if(getTemplateData().getAttribute("scale") != null) + setHeight((float) getTemplateData().getAttribute("scale")); + if(getTemplateData().getAttribute("speed") != null) { + //System.out.println(getTemplateData().getAttribute("speed")); + setRunSpeed((float) getTemplateData().getAttribute("speed")); + } + if(getTemplateData().getAttribute("turnRate") != null) + setTurnRadius((float) getTemplateData().getAttribute("turnRate"));*/ + + } + + public boolean isPlayer() { + synchronized(objectMutex) { + return (getSlottedObject("ghost") != null); + } + } + + public int getBankCredits() { + return (int) getBaseline(1).get("bankCredits"); + } + + public void setBankCredits(int bankCredits) { + if (getClient() != null && getClient().getSession() != null) { + getClient().getSession().write(getBaseline(1).set("bankCredits", bankCredits)); + } + } + + public void addBankCredits(int bankCredits) { + synchronized(objectMutex) { + setBankCredits(getBankCredits() + bankCredits); + } + } + + public void deductBankCredits(int bankCredits) { + synchronized(objectMutex) { + setBankCredits(getBankCredits() - bankCredits); + } + } + + public int getCashCredits() { + return (int) getBaseline(1).get("cashCredits"); + } + + public void setCashCredits(int cashCredits) { + if (getClient() != null && getClient().getSession() != null) { + getClient().getSession().write(getBaseline(1).set("cashCredits", cashCredits)); + } + } + + public void addCashCredits(int cashCredits) { + synchronized(objectMutex) { + setCashCredits(getCashCredits() + cashCredits); + } + } + + public void deductCashCredits(int cashCredits) { + synchronized(objectMutex) { + setCashCredits(getCashCredits() - cashCredits); + } + } + + @SuppressWarnings("unchecked") + public SWGList getBaseAttributes() { + return (SWGList) getBaseline(1).get("baseAttributes"); + } + + @SuppressWarnings("unchecked") + public SWGSet getSkills() { + return (SWGSet) getBaseline(1).get("skills"); + } + + public boolean hasSkill(String name) { + return getSkills().contains(name); + } + + public void addSkill(String skill) { + if (!getSkills().contains(skill)) { + getSkills().add(skill); + } + } + + public void removeSkill(String skill) { + if (getSkills().contains(skill)) { + getSkills().remove(skill); + } + } + + public int getIncapacityTimer() { + return (int) getBaseline(3).get("uses"); + } + + public void setIncapacityTimer(int incapacityTimer) { + notifyClients(getBaseline(3).set("uses", incapacityTimer), true); + } + + public byte getPosture() { + return (byte) getBaseline(3).get("posture"); + } + + public void setPosture(byte posture) { + synchronized(objectMutex) { + switch (getPosture()) { + case resources.datatables.Posture.Invalid: + setLocomotion(-1); + break; + case resources.datatables.Posture.Upright: + setLocomotion(0); + break; + case resources.datatables.Posture.Crouched: + setLocomotion(4); + break; + case resources.datatables.Posture.Prone: + setLocomotion(7); + break; + case resources.datatables.Posture.Sneaking: + setLocomotion(1); + break; + case resources.datatables.Posture.Blocking: + setLocomotion(21); + break; + case resources.datatables.Posture.Climbing: + setLocomotion(9); + break; + case resources.datatables.Posture.Flying: + setLocomotion(12); + break; + case resources.datatables.Posture.LyingDown: + setLocomotion(13); + break; + case resources.datatables.Posture.Sitting: + setLocomotion(14); + break; + case resources.datatables.Posture.SkillAnimating: + setLocomotion(15); + break; + case resources.datatables.Posture.DrivingVehicle: + setLocomotion(16); + break; + case resources.datatables.Posture.RidingCreature: + setLocomotion(17); + break; + case resources.datatables.Posture.KnockedDown: + setLocomotion(18); + break; + case resources.datatables.Posture.Incapacitated: + setLocomotion(19); + break; + case resources.datatables.Posture.Dead: + setLocomotion(20); + break; + } + } + + if (getPosture() == resources.datatables.Posture.SkillAnimating) { + stopPerformance(); + } + + if (getPosture() == posture) { + return; + } + + notifyObservers(getBaseline(3).set("posture", posture), true); + notifyObservers(new ObjControllerMessage(0x1B, new Posture(getObjectID(), posture)), true); + } + + public byte getLocomotion() { + return (byte) otherVariables.get("locomotion"); + } + + public void setLocomotion(byte locomotion) { + otherVariables.set("locomotion", locomotion); + } + + public byte getFactionRank() { + return (byte) getBaseline(3).get("factionRank"); + } + + public void setFactionRank(byte factionRank) { + notifyObservers(getBaseline(3).set("factionRank", factionRank), true); + } + + public long getOwnerId() { + return (long) getBaseline(3).get("ownerId"); + } + + public void setOwnerId(long ownerId) { + notifyObservers(getBaseline(3).set("ownerId", ownerId), true); + } + + public float getHeight() { + return (float) getBaseline(3).get("height"); + } + + public void setHeight(float height) { + height = (((height < 0.7) || (height > 1.5)) ? 1 : height); + notifyObservers(getBaseline(3).set("height", height), true); + } + + public int getBattleFatigue() { + return (int) getBaseline(3).get("battleFatigue"); + } + + public void setBattleFatigue(int battleFatigue) { + notifyObservers(getBaseline(3).set("battleFatigue", battleFatigue), true); + } + + public long getStateBitmask() { + return (long) getBaseline(3).get("stateBitmask"); + } + + public void setStateBitmask(long stateBitmask) { + notifyObservers(getBaseline(3).set("stateBitmask", stateBitmask), true); + } + + public float getAccelerationMultiplierBase() { + return (float) getBaseline(4).get("accelerationMultiplierBase"); + } + + public void setAccelerationMultiplierBase(float accelerationMultiplierBase) { + notifyObservers(getBaseline(4).set("accelerationMultiplierBase", accelerationMultiplierBase), true); + } + + public float getAccelerationMultiplierMod() { + return (float) getBaseline(4).get("accelerationMultiplierMod"); + } + + public void setAccelerationMultiplierMod(float accelerationMultiplierMod) { + notifyObservers(getBaseline(4).set("accelerationMultiplierMod", accelerationMultiplierMod);, true); + } + + @SuppressWarnings("unchecked") + public SWGList getHamEncumberanceList() { + return (SWGList) getBaseline(4).get("hamEncumberanceList"); + } + + @SuppressWarnings("unchecked") + public SWGMap getSkillMods() { + return (SWGMap) getBaseline(4).get("skillMods"); + } + + public SkillMod getSkillMod(String name) { + synchronized(objectMutex) { + if (getSkillMods().containsKey(name) && getSkillMods().get(name) != null) { + return getSkillMods().get(name); + } + + return null; + } + } + + public int getSkillModBase(String name) { + SkillMod skillMod = getSkillMod(name); + return ((skillMod == null) ? 0 : skillMod.getBase()); + } + + public void addSkillMod(String name, int base) { + if (!getSkillMods().containsKey(name)) { + getSkillMods().put(name, new SkillMod(base, 0)); + } else { + SkillMod mod = getSkillMods().get(name); + getSkillMods().put(name, new SkillMod(mod.getBase() + base, mod.getModifier())); + } + } + + public void deductSkillMod(String name, int base) { + if (getSkillMods().containsKey(name)) { + SkillMod mod = getSkillMods().get(name); + mod = new SkillMod(mod.getBase() - base, mod.getModifier()); + + if (mod.getBase() - base <= 0) { + removeSkillMod(name); + } else { + getSkillMods().put(name, mod); + } + } + } + + public void removeSkillMod(String name) { + getSkillMods().remove(name); + } + + public int getLuck() { + return (getSkillModBase("luck") + getSkillModBase("luck_modified")); + } + + public int getPrecision() { + return (getSkillModBase("precision") + getSkillModBase("precision_modified")); + } + + public int getStrength() { + return (getSkillModBase("strength") + getSkillModBase("strength_modified")); + } + + public int getConstitution() { + return (getSkillModBase("constitution") + getSkillModBase("constitution_modified")); + } + + public int getStamina() { + return (getSkillModBase("stamina") + getSkillModBase("stamina_modified")); + } + + public int getAgility() { + return (getSkillModBase("agility") + getSkillModBase("agility_modified")); + } + + public float getSpeedMultiplierBase() { + return (float) getBaseline(4).get("speedMultiplierBase"); + } + + public void setSpeedMultiplierBase(float speedMultiplierBase) { + notifyObservers(getBaseline(4).set("speedMultiplierBase", speedMultiplierBase);, true); + } + + public float getSpeedMultiplierMod() { + return (float) getBaseline(4).get("speedMultiplierMod"); + } + + public void setSpeedMultiplierMod(float speedMultiplierMod) { + notifyObservers(getBaseline(4).set("speedMultiplierMod", speedMultiplierMod);, true); + } + + public long getListenToId() { + return (long) getBaseline(4).get("listenToId"); + } + + public void setListenToId(long listenToId) { + notifyObservers(getBaseline(4).set("listenToId", listenToId);, true); + } + + public float getRunSpeed() { + return (float) getBaseline(4).get("runSpeed"); + } + + public void setRunSpeed(float runSpeed) { + notifyObservers(getBaseline(4).set("runSpeed", runSpeed);, true); + } + + public float getSlopeModAngle() { + return (float) getBaseline(4).get("slopeModAngle"); + } + + public void setSlopeModAngle(float slopeModAngle) { + notifyObservers(getBaseline(4).set("slopeModAngle", slopeModAngle), true); + } + + public float getSlopeModPercent() { + return (float) getBaseline(4).get("slopeModPercent"); + } + + public void setSlopeModPercent(float slopeModPercent) { + notifyObservers(getBaseline(4).set("slopeModPercent", slopeModPercent);, true); + } + + public float getTurnRadius() { + return (float) getBaseline(4).get("turnRadius"); + } + + public void setTurnRadius(float turnRadius) { + notifyObservers(getBaseline(4).set("turnRadius", turnRadius), true); + } + + public float getWalkSpeed() { + return (float) getBaseline(4).get("walkSpeed"); + } + + public void setWalkSpeed(float walkSpeed) { + notifyObservers(getBaseline(4).set("walkSpeed", walkSpeed), true); + } + + public float getWaterModPercent() { + return (float) getBaseline(4).get("waterModPercent"); + } + + public void setWaterModPercent(float waterModPercent) { + notifyObservers(getBaseline(4).set("waterModPercent", waterModPercent), true); + } + + @SuppressWarnings("unchecked") + public SWGMap getMissionCriticalObjects() { + return (SWGMap) getBaseline(4).get("missionCriticalObjects"); + } + + @SuppressWarnings("unchecked") + public SWGMap getAbilities() { + return (SWGMap) getBaseline(4).get("abilities"); + } + + public boolean hasAbility(String name) { + for (String ability : getAbilities().keySet()) { + if (ability.equals(name)) { + return true; + } + } + + return false; + } + + public void addAbility(String abilityName) { + if (!getAbilities().containsKey(abilityName)) { + getAbilities().put(abilityName, 1); + } + } + + public void removeAbility(String abilityName) { + if (getAbilities().containsKey(abilityName)) { + getAbilities().remove(abilityName); + } + } + + public short getLevel() { + return (short) getBaseline(6).get("level"); + } + + public void setLevel(short level) { + notifyObservers(getBaseline(6).set("level", level), true); + } + + public int getGrantedHealth() { + return (int) getBaseline(6).get("grantedHealth"); + } + + public void setGrantedHealth(int grantedHealth) { + notifyObservers(getBaseline(6).set("grantedHealth", grantedHealth), true); + } + + public String getCurrentAnimation() { + return (String) getBaseline(6).get("currentAnimation"); + } + + public void setCurrentAnimation(String currentAnimation) { + notifyObservers(new ObjControllerMessage(0x1B, new Animation(getObjectId(), currentAnimation)), true); + notifyObservers(getBaseline(6).set("currentAnimation", currentAnimation), true); + } + + public void doSkillAnimation(String skillAnimation) { + notifyObservers(new ObjControllerMessage(0x1B, new Animation(getObjectId(), skillAnimation)), true); + } + + public String getMoodAnimation() { + return (String) getBaseline(6).get("moodAnimation"); + } + + public void setMoodAnimation(String moodAnimation) { + notifyObservers(getBaseline(6).set("moodAnimation", moodAnimation), true); + } + + public long getWeaponId() { + return (long) getBaseline(6).get("weaponId"); + } + + public void setWeaponId(long weaponId) { + notifyObservers(getBaseline(6).set("weaponId", weaponId), true); + } + + public long getGroupId() { + return (long) getBaseline(6).get("groupId"); + } + + public void setGroupId(long groupId) { + notifyObservers(getBaseline(6).set("groupId", groupId), true); + } + + public GroupInviteInfo getGroupInviteInfo() { + return (GroupInviteInfo) getBaseline(6).get("groupInviteInfo"); + } + + public long getInviteSenderId() { + return getGroupInviteInfo().getSenderId(); + } + + public void setInviteSenderId(long inviteSenderId) { + getGroupInviteInfo().setSender(inviteSenderId, getInviteSenderName()); + } + + public String getInviteSenderName() { + return getGroupInviteInfo().getSenderName(); + } + + public void setInviteSenderName(String inviteSenderName) { + getGroupInviteInfo().setSender(getInviteSenderId(), inviteSenderName); + } + + public long getInviteCounter() { + return 0; + } + + public void setInviteCounter(long inviteCounter) { + + } + + public void updateGroupInviteInfo() { + if (getClient() != null && getClient().getSession() != null) { + getClient().getSession().write(getBaseline(6).set("groupInviteInfo", getGroupInviteInfo())); + } + } + + public int getGuildId() { + return (int) getBaseline(.)get("guildId"); + } + + public void setGuildId(int guildId) { + notifyObservers(getBaseline(6).set("guildId", guildId), true); + } + + public long getTargetId() { + return (long) getBaseline(6).get("targetId"); + } + + public void setTargetId(long targetId) { + notifyObservers(getBaseline(6).set("targetId", targetId), true); + } + + public byte getMoodId() { + return (byte) getBaseline(6).get("moodId"); + } + + public void setMoodId(byte moodId) { + notifyObservers(getBaseline(6).set("moodId", moodId), true); + } + + public int getPerformanceCounter() { + return (int) getBaseline(6).get("performanceCounter"); + } + + public void setPerformanceCounter(int performanceCounter) { + notifyObservers(getBaseline(6).set("performanceCounter", performanceCounter), true); + } + + public int getPerformanceId() { + return (int) getBaseline(6).get("performanceId"); + } + + public void setPerformanceId(int performanceId) { + notifyObservers(getBaseline(6).set("performanceId", performanceId), true); + } + + @Deprecated + public void setPerformanceId(int performanceId, boolean isDance) { + setPerformanceId(isDance ? 0 : performanceId); + } + + @Deprecated + public boolean getAcceptBandflourishes() { + return ((getGroupId() == 0) ? false : true); + } + + @Deprecated + public void setAcceptBandflourishes(boolean acceptBandflourishes) { + + } + + public boolean getGroupDance() { + return ((getGroupId() == 0) ? false : true); + } + + @Deprecated + public void setGroupDance(boolean groupDance) { + + } + + @Deprecated + public boolean toggleGroupDance() { + return ((getGroupId() == 0) ? false : true); + } + + @SuppressWarnings("unchecked") + public SWGList getAttribs() { + return (SWGList) getBaseline(6).get("attribs"); + } + + public void resetAttribs() { + // TODO: Fix this, if it's really needed + } + + @Deprecated + public void updateAttribs() { + + } + + public int getHealth() { + synchronized(objectMutex) { + return getAttribs().get(0); + } + } + + public void setHealth(int health) { + if (health > getMaxHealth()) { + health = getMaxHealth(); + } + + if (getPosture() == 13) { + synchronized(objectMutex) { + stopIncapTask(); + setIncapTask(null); + getAttribs().set(0, health); + } + + setPosture((byte) 0); + setTurnRadius(1); + setSpeedMultiplierBase(1); + } else { + synchronized(objectMutex) { + getAttribs().set(0, health); + } + } + } + + public int getAction() { + synchronized(objectMutex) { + return getAttribs().get(2); + } + } + + public void setAction(int action) { + if (action > getMaxAction()) { + action = getMaxAction(); + } + + synchronized(objectMutex) { + getAttribs().set(2, action); + } + } + + @SuppressWarnings("unchecked") + public SWGList getMaxAttribs() { + return (SWGList) getBaseline(6).get("maxAttribs"); + } + + public int getMaxHealth() { + synchronized(objectMutex) { + return getMaxAttribs().get(0); + } + } + + public void setMaxHealth(int maxHealth) { + if (maxHealth < getHealth()) { + setHealth(maxHealth); + } + + synchronized(objectMutex) { + getMaxAttribs().set(0, maxHealth); + } + } + + public int getMaxAction() { + synchronized(objectMutex) { + return getMaxAttribs().get(2); + } + } + + public void setMaxAction(int maxAction) { + if (maxAction < getAction()) { + setAction(maxAction); + } + + synchronized(objectMutex) { + getMaxAttribs().set(2, maxAction); + } + } + + @SuppressWarnings("unchecked") + public SWGList getEquipmentList() { + return (SWGList) getBaseline(6).get("equipmentList"); + } + + public void equipObject(SWGObject object) { + if (object instanceof TangibleObject) { + getEquipmentList().add(new Equipment(object)); + } + } + + public void addObjectToEquipList(SWGObject object) { + equipObject(object); + } + + public void unequipObject(SWGObject object) { + if (object instanceof TangibleObject) { + for (Equipment equipment : getEquipmentList()) { + if (equipment.getObjectId() == object.getObjectId()) { + getEquipmentList().remove(equipment); + } + } + } + } + + public void removeObjectFromEquipList(SWGObject object) { + unequipObject(object); + } + + public String getCostume() { + return (String) getBaseline(6).get("costume"); + } + + public void setCostume(String costume) { + notifyObservers(getBaseline(6).set("costume", costume), true); + } + + public boolean isVisible() { + return (boolean) getBaseline(6).get("visible"); + } + + public void setVisible(boolean visible) { + notifyObservers(getBaseline(6).set("visible", visible), true); + } + + public boolean isCloaked() { + return !isVisible(); + } + + public void setCloaked(boolean cloaked) { + setVisible(!cloaked); + } + + public SWGMap getBuffList() { + return ((BuffList) getBaseline(6).get("buffList")).getList(); + } + + public Buff getBuffByName(String buffName) { + for (Entry entry : getBuffList().entrySet()) { + if (entry.getKey().equals(CRC.StringtoCRC(buffName))) { + return entry.getValue(); + } + } + + return null; + } + + public void addBuff(Buff buff) { + synchronized(objectMutex) { + PlayerObject player = (PlayerObject) this.getSlottedObject("ghost"); + buff.setTotalPlayTime((int) (player.getTotalPlayTime() + (System.currentTimeMillis() - player.getLastPlayTimeUpdate()) / 1000)); + } + + getBuffList().put(CRC.StringtoCRC(buff.getBuffName()), buff); + + synchronized(objectMutex) { + buff.setStartTime(); + } + } + + public void removeBuff(Buff buff) { + getBuffList().remove(CRC.StringtoCRC(buff.getBuffName())); + } + + public void updateBuff(Buff buff) { + buff.updateRemovalTask(); + getBuffList().put(CRC.StringtoCRC(buff.getBuffName()), buff); + } + + public void updateAllBuffs() { + synchronized(objectMutex) { + for (Buff buff : getBuffList().values()) { + updateBuff(buff); + } + } + } + + public boolean hasBuff(String buffName) { + return getBuffByName(buffName) != null; + } + + public void setPerforming(boolean performing) { + notifyObservers(getBaseline(6).set("performing", performing), true); + } + + public boolean isPerforming() { + return (boolean) getBaseline(6).get("performing"); + } + + @Deprecated + public void startPerformance() { + if (!isPerforming()) { + setPerforming(true); + } + } + + @Deprecated + public void stopPerformance() { + setPerformanceId(0); + setPerformanceCounter(0); + setCurrentAnimation(""); + + synchronized(objectMutex) { + if (entertainerExperience != null) { + entertainerExperience.cancel(true); + entertainerExperience = null; + } + } + + sendSystemMessage("@performance:" + getPerformanceType() + "_stop_self", (byte)0); + stopAudience(); + + if (isPerforming()) { + setPerforming(false); + } + } + + @Deprecated + public void stopAudience() { + synchronized(objectMutex) { + if (performanceAudience == null) { + return; + } + + String performanceType = getPerformanceType(); + Iterator it = performanceAudience.iterator(); + + while (it.hasNext()) { + CreatureObject next = it.next(); + + if (((performanceType.equals("dance")) && (next.getPerformanceWatchee() != this)) + || ((performanceType.equals("music")) && (next.getPerformanceListenee() != this))) { + continue; + } + + if (performanceType.equals("dance")) { + next.setPerformanceWatchee(null); + } else if (performanceType.equals("musci")) { + next.setPerformanceListenee(null); + } + + //this may be a bit dodgy. + boolean isEntertained = next.getPerformanceListenee() != null && next.getPerformanceWatchee() != null; + + if (!isEntertained) { + next.setMoodAnimation(""); + } + + if (next == this) { + continue; + } + + next.sendSystemMessage("@performance:" + performanceType + "_stop_other", (byte)0); + } + + performanceAudience = new ArrayList(); + } + } + + public String getPerformanceType() { + return (((boolean) otherVariables.get("performanceType")) ? "dance" : "music"); + } + + public void setPerformanceType(String performanceType) { + otherVariables.set("performanceType", ((performanceType.equals("dance")) ? true : false)); + } + + public void setPerformanceType(boolean performanceType) { + otherVariables.set("performanceType", performanceType); + } + + public ScheduledFuture getEntertainerExperience() { + return entertainerExperience; + } + + public void setEntertainerExperience(ScheduledFuture entertainerExperience) { + this.entertainerExperience = entertainerExperience; + } + + public ScheduledFuture getInspirationTick() { + return inspirationTick; + } + + public void setInspirationTick(ScheduledFuture inspirationTick) { + this.inspirationTick = inspirationTick; + } + + public void addAudience(CreatureObject audienceMember) { + synchronized(objectMutex) { + if (performanceAudience == null) { + performanceAudience = new ArrayList(); + } + + performanceAudience.add(audienceMember); + } + } + + public void removeAudience(CreatureObject audienceMember) { + synchronized(objectMutex) { + if (performanceAudience == null) { + return; + } + + performanceAudience.remove(audienceMember); + } + } + + public CreatureObject getPerformanceWatchee() { + synchronized(objectMutex) { + return performanceWatchee; + } + } + + public void setPerformanceWatchee(CreatureObject performanceWatchee) { + synchronized(objectMutex) { + this.performanceWatchee = performanceWatchee; + } + + setListenToId(performanceWatchee.getObjectID()); + } + + public CreatureObject getPerformanceListenee() { + synchronized(objectMutex) { + return performanceListenee; + } + } + + public void setPerformanceListenee(CreatureObject performanceListenee) { + synchronized(objectMutex) { + this.performanceListenee = performanceListenee; + } + + setListenToId(performanceListenee.getObjectID()); + } + + public int getFlourishCount() { + synchronized(objectMutex) { + return this.flourishCount; + } + } + + public void setFlourishCount(int flourishCount) { + synchronized(objectMutex) { + this.flourishCount = flourishCount; + } + } + + public void incFlourishCount() { + synchronized(objectMutex) { + this.flourishCount++; + } + } + + public byte getDifficulty() { + return (byte) getBaseline(6).get("difficulty"); + } + + public void setDifficulty(byte difficulty) { + notifyObservers(getBaseline(6).set("difficulty", difficulty), true); + } + + public int getHologramColor() { + return (int) getBaseline(6).get("hologramColor"); + } + + public void setHologramColor(int hologramColor) { + getBaseline(6).set("hologramColor", hologramColor); + } + + public boolean isHologram() { + return !(getHologramColor() == -1); + } + + public void setHologram(boolean hologram) { + setHologramColor((hologram) ? 0 : -1); + } + + public boolean visibleOnRadar() { + return (boolean) getBaseline(6).get("visibleOnRadar"); + } + + public void setVisibleOnRadar(boolean visibleOnRadar) { + notifyObservers(getBaseline(6).set("visibleOnRadar", visibleOnRadar), true); + } + + @SuppressWarnings("unchecked") + public SWGList getAppearanceEquipmentList() { + return (SWGList) baseline6.get("appearanceEquipmentList"); + } + + public void equipAppearance(SWGObject object) { + if (object instanceof TangibleObject) { + getAppearanceEquipmentList().add(new Equipment(object)); + } + } + + public void addObjectToAppearanceEquipList(SWGObject object) { + equipAppearance(object); + } + + public void unequipAppearance(SWGObject object) { + if (object instanceof TangibleObject) { + for (Equipment equipment : getAppearanceEquipmentList()) { + if (equipment.getObjectId() == object.getObjectId()) { + getAppearanceEquipmentList().remove(equipment); + } + } + } + } + + public void removeObjectFromAppearanceEquipList(SWGObject object) { + unequipAppearance(object); + } + + public List getDuelList() { + return duelList; + } + + public boolean isInDuelList(long objectId) { + if (duelList.contains(objectId)) { + return true; + } + + return false; + } + + public boolean isInDuelList(SWGObject object) { + return isInDuelList(object.getObjectId()); + } + + @SuppressWarnings("unchecked") + public List getDotList() { + return ((List) otherVariables.get("dotList")); + } + + public DamageOverTime getDotByBuff(Buff buff) { + List dots = new ArrayList(getDotList()); + + for (DamageOverTime dot : dots) { + if (dot.getBuff() == buff) { + return dot; + } + } + + return null; + } + + public DamageOverTime getDotByName(String dotName) { + List dots = new ArrayList(getDotList()); + + for (DamageOverTime dot : dots) { + if (dot.getCommandName().equalsIgnoreCase(dotName)) { + return dot; + } + } + + return null; + } + + public void setDotList(List dotList) { + otherVariables.set("dotList", dotList); + } + + public void addDot(DamageOverTime dot) { + getDotList().add(dot); + } + + public void removeDot(DamageOverTime dot) { + getDotList().remove(dot); + } + + public ScheduledFuture getIncapTask() { + return incapTask; + } + + public void setIncapTask(ScheduledFuture incapTask) { + this.incapTask = incapTask; + } + + public void stopIncapTask() { + if (incapTask != null) { + incapTask.cancel(true); + } + } + + @Override + public void notifyClients(IoBuffer buffer, boolean notifySelf) { + notifyObservers(buffer, notifySelf); + } + + @Override + public CreatureMessageBuilder getMessageBuilder() { + synchronized(objectMutex) { + if (messageBuilder == null) { + messageBuilder = new CreatureMessageBuilder(this); + } + + return messageBuilder; + } + } + + @Override + public void sendBaselines(Client destination) { + if (destination != null && destination.getSession() != null) { + destination.getSession().write(getBaseline(3).getBaseline()); + destination.getSession().write(getBaseline(6).getBaseline()); + if (destination == getClient()) { + destination.getSession().write(getBaseline(1).getBaseline()); + destination.getSession().write(getBaseline(4).getBaseline()); + destination.getSession().write(getBaseline(8).getBaseline()); + destination.getSession().write(getBaseline(9).getBaseline()); + } + + if (destination.getParent() != this) { + UpdatePVPStatusMessage upvpm = new UpdatePVPStatusMessage(getObjectID()); + upvpm.setFaction(CRC.StringtoCRC(getFaction())); + upvpm.setStatus(NGECore.getInstance().factionService.calculatePvpStatus((CreatureObject) destination.getParent(), this)); + destination.getSession().write(upvpm.serialize()); + UpdatePostureMessage upm = new UpdatePostureMessage(getObjectID(), (byte) 0); + destination.getSession().write(upm.serialize()); + } + } + } + + public void playMusic(String sndFile) { + playMusic(sndFile, 0, 1, false); + } + + public void playMusic(String sndFile, long targetId) { + playMusic(sndFile, targetId, 1, false); + } + + public void playMusic(String sndFile, int repetitions) { + playMusic(sndFile, 0, repetitions, false); + } + + public void playMusic(String sndFile, long targetId, int repetitions) { + playMusic(sndFile, targetId, repetitions, false); + } + + public void playMusic(String sndFile, long targetId, int repetitions, boolean flag) { + getClient().getSession().write(new PlayMusicMessage(sndFile, targetId, 1, false)); + } + + public void sendSystemMessage(String message, byte displayType) { + if (getClient() != null && getClient().getSession() != null) { + ChatSystemMessage systemMsg = new ChatSystemMessage(message, displayType); + getClient().getSession().write(systemMsg.serialize()); + } + } + + public void sendSystemMessage(String stfFilename, String stfName, int stat, int displayType) { + if (getClient() != null && getClient().getSession() != null) { + ChatSystemMessage systemMsg = new ChatSystemMessage(stfFilename, stfName, stat, (byte) displayType); + getClient().getSession().write(systemMsg.serialize()); + } + } + +} diff --git a/src/resources/objects/creature/CreatureMessageBuilder.java b/src/resources/objects/creature/CreatureMessageBuilder.java index 8a4a1edb..33367160 100644 --- a/src/resources/objects/creature/CreatureMessageBuilder.java +++ b/src/resources/objects/creature/CreatureMessageBuilder.java @@ -113,6 +113,7 @@ public class CreatureMessageBuilder extends TangibleMessageBuilder { buffer.putInt(creature.getFactionStatus()); byte[] customizationData = creature.getCustomization(); + //byte[] customizationData = new byte[]{(byte)0x03,(byte)0xBF,(byte)0xC3,(byte)0x33,(byte)0x02,(byte)0x01,(byte)0x02}; if(customizationData == null || customizationData.length <= 0) // Shuttles have no customization data buffer.putShort((short) 0); @@ -148,6 +149,9 @@ public class CreatureMessageBuilder extends TangibleMessageBuilder { buffer.flip(); buffer = createBaseline("CREO", (byte) 3, buffer, size); + + tools.CharonPacketUtils.printAnalysis(buffer, "CREO 3"); + return buffer; } @@ -399,7 +403,7 @@ public class CreatureMessageBuilder extends TangibleMessageBuilder { buffer.putInt(0xFFFFFFFF); buffer.put((byte) (creature.isRadarVisible() ? 1 : 0)); - buffer.put((byte) 0); // occupyingVehicle (hoth speeder, atat) + buffer.put((byte) 1); // occupyingVehicle (hoth speeder, atat) buffer.put((byte) 0); // no effect for 1? diff --git a/src/resources/objects/creature/CreatureObject.java b/src/resources/objects/creature/CreatureObject.java index 9995b9ab..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; @@ -1129,7 +1131,7 @@ public class CreatureObject extends TangibleObject implements Serializable { public void sendBaselines(Client destination) { if(destination == null || destination.getSession() == null) { - System.out.println("NULL session"); + //System.out.println("NULL session"); return; } @@ -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/mission/MissionObject.java b/src/resources/objects/mission/MissionObject.java index 609057b4..cb1a855d 100644 --- a/src/resources/objects/mission/MissionObject.java +++ b/src/resources/objects/mission/MissionObject.java @@ -47,6 +47,8 @@ public class MissionObject extends IntangibleObject implements Serializable { private transient MissionMessageBuilder messageBuilder = new MissionMessageBuilder(this); + private MissionObjective objective; + public MissionObject() { super(); } @@ -58,7 +60,7 @@ public class MissionObject extends IntangibleObject implements Serializable { @Override public Baseline getOtherVariables() { Baseline baseline = super.getOtherVariables(); - baseline.put("objective", new DefaultMissionObjective(this)); + //baseline.put("objective", new DefaultMissionObjective(this)); baseline.put("bountyMarkId", (long) 0); baseline.put("missionId", 0); baseline.put("missionType", ""); @@ -118,9 +120,8 @@ public class MissionObject extends IntangibleObject implements Serializable { return (MissionLocation) getBaseline(3).get("startLocation"); } - public void setStartLocation(Point3D location, long objId, String planet) { + public void setStartLocation(MissionLocation startLocation) { if (getGrandparent() != null && getGrandparent().getClient() != null) { - MissionLocation startLocation = new MissionLocation(location.clone(), objId, planet); getGrandparent().getClient().getSession().write(getBaseline(3).set("startLocation", startLocation)); } } @@ -149,9 +150,8 @@ public class MissionObject extends IntangibleObject implements Serializable { return (MissionLocation) getBaseline(3).get("destinationLocation"); } - public void setDestinationLocation(Point3D location, long objId, String planet) { + public void setDestinationLocation(MissionLocation destinationLocation) { if (getGrandparent() != null && getGrandparent().getClient() != null) { - MissionLocation destinationLocation = new MissionLocation(location.clone(), objId, planet); getGrandparent().getClient().getSession().write(getBaseline(3).set("destinationLocation", destinationLocation)); } } @@ -241,15 +241,17 @@ public class MissionObject extends IntangibleObject implements Serializable { } public MissionObjective getObjective() { - if (otherVariables.get("objective") instanceof DefaultMissionObjective) { + /*if (otherVariables.get("objective") instanceof DefaultMissionObjective) { return null; } else { return (MissionObjective) otherVariables.get("objective"); - } + }*/ + return objective; } public void setObjective(MissionObjective objective) { - otherVariables.set("objective", objective); + //otherVariables.set("objective", objective); + this.objective = objective; } public long getBountyMarkId() { diff --git a/src/resources/objects/player/PlayerObject.java b/src/resources/objects/player/PlayerObject.java index 68080ea0..d2f45288 100644 --- a/src/resources/objects/player/PlayerObject.java +++ b/src/resources/objects/player/PlayerObject.java @@ -92,6 +92,7 @@ public class PlayerObject extends IntangibleObject implements Serializable { baseline.put("lotsRemaining", 10); baseline.put("holoEmote", ""); baseline.put("holoEmoteUses", 0); + baseline.put("activeMissions", new ArrayList()); // TODO: Look at MissionCriticalObject in CREO4, could use that instead of this return baseline; } @@ -142,7 +143,7 @@ public class PlayerObject extends IntangibleObject implements Serializable { baseline.put("12", (long) 0); // General? baseline.put("13", 0); // Guild Rank Title? baseline.put("14", (short) 0); // Citizen Rank Title? 6 bytes - baseline.put("speederElevation", 0); + baseline.put("speederElevation", 1); baseline.put("vehicleAttackCommand", ""); return baseline; } @@ -186,8 +187,8 @@ public class PlayerObject extends IntangibleObject implements Serializable { baseline.put("kills", 0); baseline.put("19", 0); baseline.put("pet", (long) 0); - baseline.put("petAbilities", new SWGSet(this, 9, 15, false)); - baseline.put("22", (long) 0); // Unknown type currently + baseline.put("petAbilities", new SWGList(this, 9, 21, false)); + baseline.put("activePetAbilities", new SWGList(this, 9, 22, false)); baseline.put("23", (byte) 0); // Seen as 1 or 2 sometimes // Gets set to 0x02 sometimes baseline.put("24", 0); // Seen as 4 baseline.put("25", (long) 0); // Bitmask starts with 0x20 ends with 0x40 @@ -782,10 +783,15 @@ public class PlayerObject extends IntangibleObject implements Serializable { } @SuppressWarnings("unchecked") - public SWGSet getPetAbilities() { - return (SWGSet) getBaseline(8).get("petAbilities"); + public SWGList getPetAbilities() { + return (SWGList) getBaseline(9).get("petAbilities"); } + @SuppressWarnings("unchecked") + public SWGList getActivePetAbilities() { + return (SWGList) getBaseline(9).get("activePetAbilities"); + } + public int getJediState() { return 0; } @@ -927,6 +933,19 @@ public class PlayerObject extends IntangibleObject implements Serializable { return false; } + public void addActiveMission(long missionObjId) { + getActiveMissions().add(missionObjId); + } + + public void removeActiveMission(long missionObjId) { + getActiveMissions().remove(missionObjId); + } + + @SuppressWarnings("unchecked") + public List getActiveMissions() { + return (List) otherVariables.get("activeMissions"); + } + public boolean isCallingCompanion() { synchronized(objectMutex) { return callingCompanion; diff --git a/src/resources/objects/tangible/TangibleObject.java b/src/resources/objects/tangible/TangibleObject.java index 70c5957e..7ee29c12 100644 --- a/src/resources/objects/tangible/TangibleObject.java +++ b/src/resources/objects/tangible/TangibleObject.java @@ -48,6 +48,7 @@ import resources.objects.ObjectMessageBuilder; import resources.objects.SWGList; import resources.objects.SWGSet; import resources.objects.creature.CreatureObject; +import tools.DevLog; import engine.clientdata.ClientFileManager; import engine.clientdata.visitors.IDManagerVisitor; import engine.clients.Client; @@ -328,8 +329,13 @@ public class TangibleObject extends SWGObject implements Serializable { } public void addDefender(TangibleObject defender) { + if (((CreatureObject)this).getOwnerId()>0){ + if (((CreatureObject)this).getOwnerId()==defender.getObjectID()){ + return; // fix for now until determined where the tamer is added from + } + } defendersList.add(defender); - + if (!isInCombat()) { setInCombat(true); } @@ -395,6 +401,16 @@ public class TangibleObject extends SWGObject implements Serializable { companion.updatePvpStatus(); } } + + + if (this instanceof CreatureObject){ + if (((CreatureObject)this).isPlayer()){ + // Here a specific CREO delta must be sent to update the faction info in character sheet and symbol in name + // If anyone knows which that would be, please replace it here! + sendBaselines(this.getClient()); + + } + } } public boolean isAttackableBy(CreatureObject attacker) { @@ -570,10 +586,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/BrowserService.java b/src/services/BrowserService.java new file mode 100644 index 00000000..1d649bde --- /dev/null +++ b/src/services/BrowserService.java @@ -0,0 +1,62 @@ +/******************************************************************************* + * 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; + +import java.util.Map; +import protocol.swg.LaunchBrowserMessage; +import resources.objects.creature.CreatureObject; +import main.NGECore; +import engine.resources.service.INetworkDispatch; +import engine.resources.service.INetworkRemoteEvent; + +public class BrowserService implements INetworkDispatch { + + private NGECore core; + + public BrowserService(NGECore core) { + this.core = core; + } + /* + * This method will minimise the game and open the default desktop browser of the CreatureObject with the given URL. + * This is not to be confused with the SWG in-game browser. + */ + public void sendBrowserWindow(CreatureObject creature, String URL) { + URL = URL.toLowerCase(); + + if( URL.contains("http://")) + URL.replace("http://", ""); + + LaunchBrowserMessage launchBrowserMessage = new LaunchBrowserMessage(URL); + creature.getClient().getSession().write(launchBrowserMessage.serialize()); + } + + @Override + public void insertOpcodes(Map arg0, Map arg1) { + + } + + @Override + public void shutdown() { + + } + +} diff --git a/src/services/BuffService.java b/src/services/BuffService.java index 819ebdd2..993c25bb 100644 --- a/src/services/BuffService.java +++ b/src/services/BuffService.java @@ -280,14 +280,17 @@ public class BuffService implements INetworkDispatch { // copy to array for thread safety for(final Buff buff : creature.getBuffList().get().toArray(new Buff[] { })) { - - if (buff.getGroup1().startsWith("setBonus") || buff.getRemovalTask() != null) { continue; } + + if (buff.getRemovalTask() != null) { continue; } if(buff.isGroupBuff() && buff.getGroupBufferId() != creature.getObjectID()) { removeBuffFromCreature(creature, buff); continue; } + if (buff.getDuration() == (float) -1) + continue; + if(buff.getRemainingDuration() > 0 && buff.getDuration() > 0) { ScheduledFuture task = scheduler.schedule(() -> { try { diff --git a/src/services/CharacterService.java b/src/services/CharacterService.java index 948a49b8..9755562a 100644 --- a/src/services/CharacterService.java +++ b/src/services/CharacterService.java @@ -268,6 +268,7 @@ public class CharacterService implements INetworkDispatch { object.setPosition(SpawnPoint.getRandomPosition(new Point3D(3528, 0, -4804), (float) 0.5, 3, core.terrainService.getPlanetByName("tatooine").getID())); object.setCashCredits(100); object.setBankCredits(1000); + object.setIncapTimer(10); object.setOptionsBitmask(Options.ATTACKABLE); //object.setPosition(new Point3D(0, 0, 0)); object.setOrientation(new Quaternion(1, 0, 0, 0)); diff --git a/src/services/ConnectionService.java b/src/services/ConnectionService.java index 9d4803f1..4e8ce362 100644 --- a/src/services/ConnectionService.java +++ b/src/services/ConnectionService.java @@ -25,6 +25,7 @@ import java.nio.ByteOrder; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; +import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; import java.util.Iterator; @@ -49,6 +50,7 @@ import protocol.swg.GameServerLagResponse; import protocol.swg.HeartBeatMessage; import engine.clients.Client; import engine.resources.database.DatabaseConnection; +import engine.resources.objects.SWGObject; import engine.resources.scene.Point3D; import engine.resources.service.INetworkDispatch; import engine.resources.service.INetworkRemoteEvent; @@ -164,7 +166,35 @@ public class ConnectionService implements INetworkDispatch { @Override public void handlePacket(IoSession session, IoBuffer data) throws Exception { - GalaxyLoopTimesResponse response = new GalaxyLoopTimesResponse(0); + /* 10 000 000 = extremely heavy + * 5 000 000 = very heavy + * 4 000 000 = heavy + * 2 500 000 = medium + * 2 000 000 = light + * < 2 000 000 = very light + */ + Client client = core.getClient(session); + if(client == null) { + System.out.println("NULL Client"); + return; + } + SWGObject object = client.getParent(); + if(object == null) + return; + int observers = object.getObservers().size(); + int areaActivity = 0; + if(observers > 32) + areaActivity = 2000000; + if(observers > 40) + areaActivity = 2500000; + if(observers > 50) + areaActivity = 4000000; + if(observers > 75) + areaActivity = 5000000; + if(observers > 100) + areaActivity = 10000000; + + GalaxyLoopTimesResponse response = new GalaxyLoopTimesResponse(areaActivity); session.write(response.serialize()); } @@ -205,6 +235,12 @@ public class ConnectionService implements INetworkDispatch { CreatureObject object = (CreatureObject) client.getParent(); try { + for (CreatureObject opponent : new ArrayList(object.getDuelList())) { + if (opponent != null) { + core.combatService.handleEndDuel(object, opponent, true); + } + } + core.combatService.endCombat((CreatureObject) object); object.setInviteCounter(0); object.setInviteSenderId(0); object.setInviteSenderName(""); diff --git a/src/services/DevService.java b/src/services/DevService.java index d3f37e10..e43ceb89 100644 --- a/src/services/DevService.java +++ b/src/services/DevService.java @@ -33,8 +33,10 @@ import org.apache.mina.core.session.IoSession; import resources.common.Console; import resources.common.FileUtilities; +import resources.common.Forager; import resources.common.Opcodes; import resources.common.SpawnPoint; +import resources.datatables.Posture; import resources.datatables.WeaponType; import resources.harvest.SurveyTool; import resources.objects.building.BuildingObject; @@ -50,6 +52,9 @@ import main.NGECore; import engine.clientdata.ClientFileManager; import engine.clientdata.visitors.DatatableVisitor; import engine.clients.Client; +import engine.resources.container.CreatureContainerPermissions; +import engine.resources.container.CreaturePermissions; +import engine.resources.container.NullPermissions; import engine.resources.objects.SWGObject; import engine.resources.scene.Planet; import engine.resources.scene.Point3D; @@ -75,6 +80,8 @@ public class DevService implements INetworkDispatch { suiOptions.put((long) 1, "Character"); suiOptions.put((long) 2, "Items"); suiOptions.put((long) 3, "Locations"); + if (System.getProperty("user.name").equals("Charon")) + suiOptions.put((long) 4, "Treasure chest test"); break; case 1: // Character suiOptions.put((long) 10, "Set combat level to 90"); @@ -91,9 +98,8 @@ public class DevService implements INetworkDispatch { if (creature.getClient().isGM()) { suiOptions.put((long) 120, "House Deeds"); suiOptions.put((long) 125, "Crafting Tools"); - } - suiOptions.put((long) 130, "Vehicle Deeds"); - if (creature.getClient().isGM()) { + 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"); @@ -152,6 +158,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"); } @@ -187,6 +194,26 @@ public class DevService implements INetworkDispatch { case 3: // Locations sendCharacterBuilderSUI(player, 11); return; + + case 4: // Test + TangibleObject treasureContainer = (TangibleObject) NGECore.getInstance().staticService.spawnObject("object/tangible/container/drum/shared_treasure_drum.iff", + owner.getPlanet().getName(), 0L, owner.getWorldPosition().x, owner.getWorldPosition().y, owner.getWorldPosition().z, 0.70F, 0.71F); + treasureContainer.setAttachment("radial_filename", "object/treasureContainer"); + + //treasureContainer.setContainerPermissions(CreatureContainerPermissions.CREATURE_CONTAINER_PERMISSIONS); + treasureContainer.setAttachment("TreasureExtractorID", owner.getObjectID()); + treasureContainer.add(core.objectService.createObject("object/tangible/inventory/shared_character_inventory.iff", treasureContainer.getPlanet())); + String template = "object/tangible/wearables/bracelet/shared_bracelet_s02_r.iff"; + TangibleObject droppedItem = (TangibleObject) core.objectService.createObject(template, planet); +// SWGObject lootedObjectInventory = treasureContainer.getSlottedObject("inventory"); +// lootedObjectInventory.add(droppedItem); +// + Forager forager = new Forager(); + forager.configureTreasureLoot(treasureContainer,(CreatureObject)owner,(short)90); + NGECore.getInstance().lootService.DropLoot((CreatureObject)owner, treasureContainer); + + //treasureContainer.add(droppedItem); + return; // Character case 10: // Set combat level to 90 @@ -1057,15 +1084,12 @@ 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; case 110: + SurveyTool mineralSurveyTool = (SurveyTool) core.objectService.createObject("object/tangible/survey_tool/shared_survey_tool_mineral.iff", planet); mineralSurveyTool.setCustomName("Mineral Survey Device"); inventory.add(mineralSurveyTool); @@ -1245,6 +1269,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: @@ -1278,6 +1306,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); @@ -1302,6 +1334,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 merekDeed = (TangibleObject) core.objectService.createObject("object/tangible/deed/pet_deed/shared_merek_deed.iff", planet); + inventory.add(merekDeed); + return; case 140: TangibleObject guildRegistry = (TangibleObject) core.objectService.createObject("object/tangible/furniture/technical/shared_guild_registry_initial.iff", planet); @@ -1319,6 +1358,7 @@ public class DevService implements INetworkDispatch { inventory.add(REingTool); core.lootService.prepInv2(player); return; + } } }); diff --git a/src/services/EntertainmentService.java b/src/services/EntertainmentService.java index c29a117d..03545e38 100644 --- a/src/services/EntertainmentService.java +++ b/src/services/EntertainmentService.java @@ -126,7 +126,6 @@ public class EntertainmentService implements INetworkDispatch { if (sentPacket.getTargetId() != sentPacket.getDesignerId()) { if (sentPacket.isCustomerAccepted() && sentPacket.isDesignerCommited()) { - System.out.print("Both Accepted!"); sentPacket.setEndMessage(true); 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 3197dfea..6811ee64 100644 --- a/src/services/LootService.java +++ b/src/services/LootService.java @@ -52,13 +52,17 @@ 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.resource.ResourceContainerObject; 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; import services.sui.SUIWindow.SUICallback; import services.sui.SUIWindow.Trigger; +import tools.DevLog; import main.NGECore; import engine.resources.container.CreatureContainerPermissions; import engine.resources.container.Traverser; @@ -79,7 +83,7 @@ public class LootService implements INetworkDispatch { private NGECore core; private static int prepInvCnt = 0; String testDropTemplate = null; - //String testDropTemplate = "kowakian_cage"; + //String testDropTemplate = "comlink"; public LootService(NGECore core) { this.core = core; @@ -97,12 +101,12 @@ public class LootService implements INetworkDispatch { } public void handleLootRequest(CreatureObject requester, TangibleObject lootedObject) { - System.out.println("handleLootRequest "); + //System.out.println("handleLootRequest "); // security check if (hasAccess(requester,lootedObject) && ! lootedObject.isLooted()){ LootRollSession lootRollSession = (LootRollSession )lootedObject.getAttachment("LootSession"); - if (lootRollSession.getDroppedItems().size()==0){ - System.err.println("lootRollSession.getDroppedItems().size()==0"); + if (lootRollSession.getDroppedItems().size()==0){ + DevLog.debugout("Charon", "Loot Service", "handleLootRequest lootRollSession.getDroppedItems().size()==0"); return; } SWGObject lootedObjectInventory = lootedObject.getSlottedObject("inventory"); @@ -114,7 +118,7 @@ public class LootService implements INetworkDispatch { private boolean hasAccess(CreatureObject requester, TangibleObject lootedObject){ LootRollSession lootRollSession = (LootRollSession )lootedObject.getAttachment("LootSession"); if (lootRollSession==null) - System.err.println("LootSession null: " + lootRollSession); + DevLog.debugout("Charon", "Loot Service", "hasAccess LootSession null: " + lootRollSession); if (lootRollSession!=null){ if (lootRollSession.getRequester()==requester){ return true; @@ -129,6 +133,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()); @@ -163,7 +170,6 @@ public class LootService implements INetworkDispatch { if (projectionCoefficientMatrixModulo!=0) lootGroupRoll=groupChance+1; if (lootGroupRoll <= groupChance){ - //System.out.println("this lootGroup will drop something"); handleLootGroup(lootGroup,lootRollSession); //this lootGroup will drop something e.g. {kraytpearl_range,krayt_tissue_rare} } } @@ -193,7 +199,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; @@ -224,12 +230,14 @@ public class LootService implements INetworkDispatch { // For autoloot //SWGObject requesterInventory = requester.getSlottedObject("inventory"); //System.out.println("lootRollSession.getDroppedItems() " + (lootRollSession.getDroppedItems())); + DevLog.debugout("Charon", "Loot Service", "lootRollSession.getDroppedItems().size() " + lootRollSession.getDroppedItems().size()); for (TangibleObject droppedItem : lootRollSession.getDroppedItems()){ - + DevLog.debugout("Charon", "Loot Service", "droppedItem " + droppedItem.getCustomName()); //droppedItem.setAttachment("radial_filename", "lootitem"); //if (! droppedItem.getTemplate().contains("shared_rare_loot_chest")) lootedObjectInventory.add(droppedItem); - + + // RLS chest effect if (droppedItem.getAttachment("LootItemName").toString().contains("Loot Chest")){ @@ -495,11 +503,11 @@ public class LootService implements INetworkDispatch { double[] lootPoolChances = lootGroup.getLootPoolChances(); String[] lootPoolNames = lootGroup.getLootPoolNames(); if (lootPoolChances==null || lootPoolNames==null){ - System.err.println("Lootpools are null!"); + DevLog.debugout("Charon", "Loot Service", "handleLootGroup Lootpools are null!"); return; } if (lootPoolChances.length==0 || lootPoolNames.length==0){ - System.err.println("No Lootpools in Lootgroup!"); + DevLog.debugout("Charon", "Loot Service", "handleLootGroup No Lootpools in Lootgroup!"); return; } @@ -522,7 +530,7 @@ public class LootService implements INetworkDispatch { } } if (!test) - System.err.println("SOMETHING WENT WRONG!"); + DevLog.debugout("Charon", "Loot Service", "handleLootGroup SOMETHING WENT WRONG!"); } private void handleLootPool(String poolName,LootRollSession lootRollSession){ @@ -564,7 +572,6 @@ public class LootService implements INetworkDispatch { { LootRollSession rollSession = new LootRollSession(); rollSession.setSessionPlanet(requester.getPlanet()); - handleLootPoolItems(template, rollSession); if(rollSession.getDroppedItems().get(0) != null) return rollSession.getDroppedItems().get(0); @@ -573,14 +580,14 @@ public class LootService implements INetworkDispatch { } private void handleLootPoolItems(String itemName,LootRollSession lootRollSession){ - + //System.out.println("itemName " + itemName); final Vector foundPath = new Vector(); Path p = Paths.get("scripts/loot/lootItems/"); FileVisitor fv = new SimpleFileVisitor() { @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { String actualFileName = file.getFileName().toString(); - actualFileName = actualFileName.substring(0, actualFileName.length()-3); + actualFileName = actualFileName.substring(0, actualFileName.length()-3).toLowerCase(); if (actualFileName.equals(itemName.toLowerCase())){ foundPath.add(file.toString()); } @@ -698,7 +705,7 @@ public class LootService implements INetworkDispatch { collectionItemName = (String)core.scriptService.fetchString(itemPath,"CollectionItemName"); - System.out.println("itemTemplate " + itemTemplate); + //System.out.println("itemTemplate " + itemTemplate); TangibleObject droppedItem = createDroppedItem(itemTemplate,lootRollSession.getSessionPlanet()); @@ -717,7 +724,7 @@ public class LootService implements INetworkDispatch { if (!customName.isEmpty()) handleCustomDropName(droppedItem, customName); - + //stackable = 1; if (stackable!=-1){ if(stackable==1) droppedItem.setStackable(true); @@ -754,12 +761,13 @@ 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"); - System.out.println("collection"); + droppedItem.setAttachment("AddToCollection", addToCollection); + droppedItem.setAttachment("radial_filename", "item/collection"); + //System.out.println("collection"); } if (collectionItemName!=null){ @@ -820,7 +828,7 @@ public class LootService implements INetworkDispatch { private TangibleObject createDroppedItem(String template,Planet planet){ TangibleObject droppedItem = (TangibleObject) core.objectService.createObject(template, planet); - System.out.println("droppedItem " + droppedItem); + //System.out.println("droppedItem " + droppedItem); return droppedItem; } @@ -984,11 +992,11 @@ public class LootService implements INetworkDispatch { double[] lootPoolChances = lootGroup.getLootPoolChances(); String[] lootPoolNames = lootGroup.getLootPoolNames(); if (lootPoolChances==null || lootPoolNames==null){ - System.err.println("Lootpools are null!"); + DevLog.debugout("Charon", "Loot Service", "fillChest2 Lootpools are null!"); return; } if (lootPoolChances.length==0 || lootPoolNames.length==0){ - System.err.println("No Lootpools in Lootgroup!"); + DevLog.debugout("Charon", "Loot Service", "fillChest2 No Lootpools in Lootgroup!"); return; } @@ -1004,18 +1012,18 @@ public class LootService implements INetworkDispatch { else remainder += span; if (randomItemFromGroup <= remainder){ - System.out.println("this loot pool will drop something"); // e.g. kraytpearl_range + //System.out.println("this loot pool will drop something"); // e.g. kraytpearl_range fillChest3(lootPoolNames[i], owner, chest); // This loot pool will drop something test = true; break; } } if (!test) - System.err.println("SOMETHING WENT WRONG!"); + DevLog.debugout("Charon", "Loot Service", "fillChest2 SOMETHING WENT WRONG!"); } private void fillChest3(String poolName, CreatureObject owner, TangibleObject chest){ - System.err.println("poolName.toLowerCase() " + poolName.toLowerCase()); + //System.err.println("poolName.toLowerCase() " + poolName.toLowerCase()); // Fetch the loot pool data from the poolName.py script String path = "scripts/loot/rarelootchestcontents/"+poolName.toLowerCase(); Vector itemNames = (Vector)core.scriptService.fetchStringVector(path,"itemNames"); @@ -1058,7 +1066,7 @@ public class LootService implements INetworkDispatch { @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { String actualFileName = file.getFileName().toString(); - actualFileName = actualFileName.substring(0, actualFileName.length()-3); + actualFileName = actualFileName.substring(0, actualFileName.length()-3).toLowerCase(); if (actualFileName.equals(itemName.toLowerCase())){ foundPath.add(file.toString()); } @@ -1170,7 +1178,7 @@ public class LootService implements INetworkDispatch { addToCollection = (String)core.scriptService.fetchString(itemPath,"AddToCollection"); - System.out.println("itemTemplate " + itemTemplate); + //System.out.println("itemTemplate " + itemTemplate); TangibleObject droppedItem = null; @@ -1224,7 +1232,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"); } @@ -1282,7 +1290,7 @@ public class LootService implements INetworkDispatch { // Example color crystal if (itemName.contains("colorcrystal")) { - System.out.println("colorcrystal"); + DevLog.debugout("Charon", "Loot Service", "setCustomization colorcrystal"); if (customizationAttributes==null){ int crystalColor = new Random().nextInt(11); @@ -1309,7 +1317,7 @@ public class LootService implements INetworkDispatch { // Example power crystal if (itemName.contains("powercrystal")) { - System.out.println("powercrystal"); + DevLog.debugout("Charon", "Loot Service", "setCustomization powercrystal"); droppedItem.setCustomizationVariable("/private/index_color_1", (byte) 0x21); // 0x1F } @@ -1317,7 +1325,7 @@ public class LootService implements INetworkDispatch { if (lootDescriptor==null) lootDescriptor=""; if (lootDescriptor.contains("rarecolorcrystal")) { - System.out.println("rarecolorcrystal"); + DevLog.debugout("Charon", "Loot Service", "setCustomization rarecrystal"); int saberColor = (Integer)droppedItem.getAttachment("customColor1"); if (saberColor==31) // Cunning of Tyranus, which is not in @jedi_spam @@ -1484,8 +1492,17 @@ public class LootService implements INetworkDispatch { public void handleCreditDrop(CreatureObject requester,TangibleObject lootedObject,LootRollSession lootRollSession){ int lootedCredits = 0; + if (lootedObject.getAttachment("AI")!=null){ + AIActor ai = (AIActor) lootedObject.getAttachment("AI"); + String resType = ai.getMobileTemplate().getMeatType(); + if (resType!=null) + return; + } + if (lootedObject.isCreditRelieved()) return; + if (lootedObject.getTemplate().contains("shared_treasure_drum")) + return; // Credit drop is depending on the CL of the looted CreatureObject // or if explicitely assigned in the .py script @@ -2307,8 +2324,8 @@ public class LootService implements INetworkDispatch { lootRollSession.setLootedObjectDifficulty(0); if (containerObject==null) - System.out.println("containerObject is NULL " ); - + DevLog.debugout("Charon", "Loot Service", "handleContainer containerObject is NULL"); + handleContainerDrops(containerObject, lootRollSession); } @@ -2334,11 +2351,11 @@ public class LootService implements INetworkDispatch { double[] lootPoolChances = lootGroup.getLootPoolChances(); String[] lootPoolNames = lootGroup.getLootPoolNames(); if (lootPoolChances==null || lootPoolNames==null){ - System.err.println("Lootpools are null!"); + DevLog.debugout("Charon", "Loot Service", "handleContainerLootGroup Lootpools are null!"); return; } if (lootPoolChances.length==0 || lootPoolNames.length==0){ - System.err.println("No Lootpools in Lootgroup!"); + DevLog.debugout("Charon", "Loot Service", "handleContainerLootGroup No Lootpools in Lootgroup!"); return; } @@ -2354,18 +2371,18 @@ public class LootService implements INetworkDispatch { else remainder += span; if (randomItemFromGroup <= remainder){ - System.out.println("this loot pool will drop something"); // e.g. kraytpearl_range + //System.out.println("this loot pool will drop something"); // e.g. kraytpearl_range handleContainerLootPool(lootPoolNames[i],lootRollSession, containerObject); // This loot pool will drop something test = true; break; } } if (!test) - System.err.println("SOMETHING WENT WRONG!"); + DevLog.debugout("Charon", "Loot Service", "handleContainerLootGroup SOMETHING WENT WRONG!"); } private void handleContainerLootPool(String poolName,LootRollSession lootRollSession , TangibleObject containerObject){ - System.err.println("poolName.toLowerCase() " + poolName.toLowerCase()); + DevLog.debugout("Charon", "Loot Service", "handleContainerLootPool poolName.toLowerCase() " + poolName.toLowerCase()); // Fetch the loot pool data from the poolName.py script String path = "scripts/loot/lootPools/"+poolName.toLowerCase(); Vector itemNames = (Vector)core.scriptService.fetchStringVector(path,"itemNames"); @@ -2399,7 +2416,7 @@ public class LootService implements INetworkDispatch { @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { String actualFileName = file.getFileName().toString(); - actualFileName = actualFileName.substring(0, actualFileName.length()-3); + actualFileName = actualFileName.substring(0, actualFileName.length()-3).toLowerCase(); if (actualFileName.equals(itemName.toLowerCase())){ foundPath.add(file.toString()); } @@ -2493,7 +2510,7 @@ public class LootService implements INetworkDispatch { junkType = (byte)core.scriptService.fetchInteger(itemPath,"junkType"); - System.out.println("itemTemplate " + itemTemplate); + DevLog.debugout("Charon", "Loot Service", "handleContainerLootPoolItems itemTemplate " + itemTemplate); TangibleObject droppedItem = createDroppedItem(itemTemplate,lootRollSession.getSessionPlanet()); @@ -2558,7 +2575,7 @@ public class LootService implements INetworkDispatch { //SWGObject containerObjectInventory = containerObject.getSlottedObject("inventory"); //placable_loot_crate_trashpile containerObject.add(droppedItem); //containerObjectInventory.add(droppedItem); - System.out.println("Added to container " + containerObject.getTemplate()); + DevLog.debugout("Charon", "Loot Service", "handleContainerLootPoolItems Added to container " + containerObject.getTemplate()); } @@ -2805,8 +2822,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"); @@ -2879,7 +2955,6 @@ public class LootService implements INetworkDispatch { sword1.setOptions(Options.USABLE, true); sword1.setWeaponType(WeaponType.ONEHANDEDMELEE); playerInventory.add(sword1); - System.err.println("MIX " + sword1.getObjectID()); String powerUpLabel = "item_reverse_engineering_powerup_weapon_02_01"; diff --git a/src/services/PlayerService.java b/src/services/PlayerService.java index 1072c854..8cb1d8ff 100644 --- a/src/services/PlayerService.java +++ b/src/services/PlayerService.java @@ -195,6 +195,17 @@ public class PlayerService implements INetworkDispatch { e.printStackTrace(); } }, 0, 1000, TimeUnit.MILLISECONDS)); + + scheduleList.add(scheduler.scheduleAtFixedRate(() -> { + long[] ids = creature.getAwareObjects().stream().mapToLong(SWGObject::getObjectID).toArray(); + for(int i = 0; i < ids.length; i++) { + for(int j = 0; j < ids.length; j++) { + if(ids[i] == ids[j] && i != j) + System.err.println("Detected duplicate ids, Template " + core.objectService.getObject(ids[i]).getTemplate()); + } + } + }, 0, 5000, TimeUnit.MILLISECONDS)); + schedulers.put(creature.getObjectID(), scheduleList); /*final PlayerObject ghost = (PlayerObject) creature.getSlottedObject("ghost"); @@ -663,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; } @@ -682,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 7a31f2e9..052e1b6c 100644 --- a/src/services/SimulationService.java +++ b/src/services/SimulationService.java @@ -267,6 +267,26 @@ public class SimulationService implements INetworkDispatch { } } + + public boolean checkForObject(int distance, SWGObject value ){ + AtomicBoolean checkObject = new AtomicBoolean(); + core.simulationService.get(value.getPlanet(), value.getWorldPosition().x, value.getWorldPosition().z, distance).stream().forEach((objecta) -> { + if (objecta instanceof BuildingObject) + checkObject.set(true); + } + ); + return checkObject.get(); + } + + public Vector getAllNearNPCs(int distance, SWGObject value ){ + Vector foundCreatures = new Vector(); + core.simulationService.get(value.getPlanet(), value.getWorldPosition().x, value.getWorldPosition().z, distance).stream().forEach((objecta) -> { + if (objecta instanceof CreatureObject) + foundCreatures.add((CreatureObject)objecta); + } + ); + return foundCreatures; + } public boolean move(SWGObject object, int oldX, int oldZ, int newX, int newZ) { if(quadTrees.get(object.getPlanet().getName()).remove(oldX, oldZ, object)) { @@ -282,7 +302,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; } @@ -890,17 +912,7 @@ public class SimulationService implements INetworkDispatch { if(!ghost.isSet(PlayerFlags.LD)) ghost.toggleFlag(PlayerFlags.LD); - - try { - for (CreatureObject opponent : new ArrayList(object.getDuelList())) { - if (opponent != null) { - core.combatService.handleEndDuel(object, opponent, true); - } - } - } catch (Exception e) { - e.printStackTrace(); - } - + try { if (core.mountService.isMounted(object)) { core.mountService.dismount(object, (CreatureObject) container); @@ -926,10 +938,6 @@ public class SimulationService implements INetworkDispatch { e.printStackTrace(); } - /* - object.createTransaction(core.getCreatureODB().getEnvironment()); - core.getCreatureODB().put(object, Long.class, CreatureObject.class, object.getTransaction()); - object.getTransaction().commitSync();*/ ScheduledFuture disconnectTask = scheduler.schedule(new Runnable() { @Override @@ -937,14 +945,7 @@ public class SimulationService implements INetworkDispatch { SWGObject object = core.objectService.getObject(objectId); if (object.getAttachment("disconnectTask") != null) { - try { - core.combatService.endCombat((CreatureObject) object); - } catch (Exception e) { - e.printStackTrace(); - } - - core.simulationService.remove(object, object.getPosition().x, object.getPosition().z, true); - + core.connectionService.disconnect(client); /* try { Thread.sleep(900000) @@ -990,7 +991,7 @@ public class SimulationService implements INetworkDispatch { Collection newAwareObjects = get(object.getPlanet(), pos.x, pos.z, 512); for(Iterator it = newAwareObjects.iterator(); it.hasNext();) { SWGObject obj = it.next(); - if(obj.getAttachment("bigSpawnRange") == null && obj.getWorldPosition().getDistance(pos) > 200) + if(obj.getAttachment("bigSpawnRange") == null && obj.getWorldPosition().getDistance2D(pos) > 200) continue; //System.out.println(obj.getTemplate()); object.makeAware(obj); @@ -1036,6 +1037,9 @@ public class SimulationService implements INetworkDispatch { public void transferToPlanet(SWGObject object, Planet planet, Point3D newPos, Quaternion newOrientation, SWGObject newParent) { + if (planet == null) + return; + Client client = object.getClient(); if(client == null) diff --git a/src/services/StaticService.java b/src/services/StaticService.java index d0c93c5a..e40a8619 100644 --- a/src/services/StaticService.java +++ b/src/services/StaticService.java @@ -36,6 +36,7 @@ import java.util.Map; import resources.common.FileUtilities; import resources.objects.building.BuildingObject; import resources.objects.cell.CellObject; +import resources.objects.creature.CreatureObject; import services.ai.AIActor; import services.spawn.MobileTemplate; import main.NGECore; @@ -137,8 +138,8 @@ public class StaticService implements INetworkDispatch { cellNumber = ((BuildingObject) cell.getContainer()).getCellNumberByObjectId(cellId); } - long objectId = core.objectService.getDOId(planetName, template, 0, buildingId, cellNumber, x, y, z); - + //long objectId = core.objectService.getDOId(planetName, template, 0, buildingId, cellNumber, x, y, z); + long objectId = 0; SWGObject object = null; MobileTemplate mobileTemplate = core.spawnService.getMobileTemplate(template); @@ -214,6 +215,27 @@ public class StaticService implements INetworkDispatch { return object; } + /** + * Used for spawning a commoner that can be used for a variety of mission types, like delivery and crafting missions. + */ + public CreatureObject spawnCommoner(String template, String planetName, long cellId, float x, float y, float z, float qW, float qX, float qY, float qZ) { + CreatureObject commoner = (CreatureObject) spawnObject(template, planetName, cellId, x, y, z, qW, qX, qY, qZ); + + if (commoner == null) + return null; + + commoner.setAttachment("conversationFile", "missions/deliver"); + commoner.setAttachment("radial_filename", "object/conversation"); + commoner.setOptionsBitmask(264); + + core.missionService.addCommoner(commoner); + return commoner; + } + + public CreatureObject spawnCommoner(String template, String planetName, long cellId, float x, float y, float z, float qY, float qW) { + return spawnCommoner(template, planetName, cellId, x, y, z, qW, 0, qY, 0); + } + public List getCloningFacilitiesByPlanet(Planet planet) { List objects = core.simulationService.get(planet, 0, 0, 8300); List cloners = new ArrayList(); 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..477dcd67 100644 --- a/src/services/ai/AIActor.java +++ b/src/services/ai/AIActor.java @@ -42,10 +42,15 @@ 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; +import tools.DevLog; +import resources.datatables.FactionStatus; import java.util.Random; @@ -63,20 +68,43 @@ public class AIActor { private long lastAttackTimestamp; private ScheduledFuture regenTask; private ScheduledFuture aggroCheckTask; + private ScheduledFuture factionCheckTask; 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; + private ScheduledFuture movementFuture; + private ScheduledFuture recoveryFuture; + private ScheduledFuture despawnFuture; 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) creature.setHealth(creature.getHealth() + (36 + creature.getLevel() * 4)); + if(creature.getAction() < creature.getMaxAction() && creature.getPosture() != 14) { + if(!creature.isInCombat()) + creature.setAction(creature.getAction() + (15 + creature.getLevel() * 5)); + else + creature.setAction(creature.getAction() + ((15 + creature.getLevel() * 5) / 2)); + } } catch (Exception e) { e.printStackTrace(); } @@ -84,16 +112,98 @@ public class AIActor { if(creature.getOption(Options.AGGRESSIVE)) { aggroCheckTask = scheduler.scheduleAtFixedRate(() -> { 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) { + if (creature.getAttachment("tamed")!=null){ + DevLog.debugout("Charon", "Pet AI", "aggroCheckTask tamed==1"); + return; + } + + if (creature.getCustomName().contains("baby")) + DevLog.debugout("Charon", "Pet AI", "baby aggroCheckTask should not be here " +creature.getAttachment("tamed")); + + 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 (creature.getAttachment("IsBeingTamed")!=null) + return; + + 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) { + e.printStackTrace(); + } + }, 0, 5000, TimeUnit.MILLISECONDS); + } + if(creature.getFaction().length()>0 || !creature.getOption(Options.AGGRESSIVE)) { + factionCheckTask = scheduler.scheduleAtFixedRate(() -> { + try { + + if(creature == null || creature.getFactionStatus()!=FactionStatus.Combatant || creature.getObservers().isEmpty() || creature.isInCombat()) + return; + + creature.getObservers().stream().map(Client::getParent).filter(obj -> obj.inRange(creature.getWorldPosition(), 15)).forEach((obj) -> { + if(new Random().nextFloat() <= 0.5 || creature.isInCombat()) { + DevLog.debugout("Charon", "CHECK faction creature ", "added " + creature.getFaction()); + DevLog.debugout("Charon", "CHECK faction obj", "added " + ((TangibleObject)obj).getFaction()); + DevLog.debugout("Charon", "CHECK factionCheckTask", "added " + obj.getCustomName()); + DevLog.debugout("Charon", "CHECK isFactionEnemy", "res " + NGECore.getInstance().factionService.isFactionEnemy((TangibleObject)creature, (TangibleObject)obj)); + if (obj instanceof CreatureObject && NGECore.getInstance().factionService.isFactionEnemy((TangibleObject)creature, (TangibleObject)obj)){ + 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); + DevLog.debugout("Charon", "faction creature ", "added " + creature.getFaction()); + DevLog.debugout("Charon", "faction obj", "added " + ((TangibleObject)obj).getFaction()); + DevLog.debugout("Charon", "factionCheckTask", "added " + obj.getCustomName()); + } + } + } + }); + + NGECore.getInstance().simulationService.getAllNearNPCs(15, creature).forEach((obj) -> { + if(new Random().nextFloat() <= 0.5 || creature.isInCombat()) { + DevLog.debugout("Charon", "CHECK faction creature ", "added " + creature.getFaction()); + DevLog.debugout("Charon", "CHECK faction obj", "added " + ((TangibleObject)obj).getFaction()); + DevLog.debugout("Charon", "CHECK factionCheckTask", "added " + obj.getCustomName()); + DevLog.debugout("Charon", "CHECK isFactionEnemy", "res " + NGECore.getInstance().factionService.isFactionEnemy((TangibleObject)creature, (TangibleObject)obj)); + if (obj instanceof CreatureObject && NGECore.getInstance().factionService.isFactionEnemy((TangibleObject)creature, (TangibleObject)obj)){ + 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); + DevLog.debugout("Charon", "faction creature ", "added " + creature.getFaction()); + DevLog.debugout("Charon", "faction obj", "added " + ((TangibleObject)obj).getFaction()); + DevLog.debugout("Charon", "factionCheckTask", "added " + obj.getCustomName()); + } + } } }); } catch (Exception e) { @@ -206,8 +316,12 @@ public class AIActor { } public void scheduleMovement() { - scheduler.schedule(() -> { + movementFuture = scheduler.schedule(() -> { try { + if (creature==null){ + destroyActor(); + return; + } doStateAction(currentState.move(AIActor.this)); } catch (Exception e) { e.printStackTrace(); @@ -216,7 +330,7 @@ public class AIActor { } public void scheduleRecovery() { - scheduler.schedule(() -> { + recoveryFuture = scheduler.schedule(() -> { try { doStateAction(currentState.recover(AIActor.this)); } catch (Exception e) { @@ -252,10 +366,10 @@ public class AIActor { public void faceObject(SWGObject object) { // Null checks due to a null error at: float direction = - if (object == null) System.out.println("object is null"); - if (creature == null) System.out.println("creature is null"); - if (object.getWorldPosition() == null) System.out.println("object's position is null"); - if (creature.getWorldPosition() == null) System.out.println("creature's position is null"); + if (object == null) DevLog.debugout("Charon", "AI Actor", "faceObject object is NULL"); + if (creature == null) DevLog.debugout("Charon", "AI Actor", "faceObject creature is NULL"); + if (object.getWorldPosition() == null) DevLog.debugout("Charon", "AI Actor", "faceObject object's position is NULL"); + if (creature.getWorldPosition() == null) DevLog.debugout("Charon", "AI Actor", "faceObject creature's position is NULL"); float direction = (float) Math.atan2(object.getWorldPosition().x - creature.getWorldPosition().x, object.getWorldPosition().z - creature.getWorldPosition().z); if(direction < 0) @@ -287,16 +401,33 @@ public class AIActor { } public void doStateAction(byte result) { - + + if (creature==null){ + destroyActor(); + return; + } + switch(result) { 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"); @@ -308,7 +439,10 @@ public class AIActor { // Sometimes these tasks are null? try { - aggroCheckTask.cancel(true); + if (aggroCheckTask!=null) + aggroCheckTask.cancel(true); + if (factionCheckTask!=null) + factionCheckTask.cancel(true); } catch(Exception e) { } @@ -319,7 +453,7 @@ public class AIActor { } - scheduler.schedule(new Runnable() { + despawnFuture = scheduler.schedule(new Runnable() { @Override public void run() { try { @@ -333,7 +467,37 @@ public class AIActor { } }, 2, TimeUnit.MINUTES); } - + + public void destroyActor(){ + creature.getEventBus().unsubscribe(this); + // Make sure to kill all AI helper threads + if (aggroCheckTask!=null) + aggroCheckTask.cancel(true); + if (factionCheckTask!=null) + factionCheckTask.cancel(true); + if (regenTask!=null) + regenTask.cancel(true); + if (movementFuture!=null){ + movementFuture.cancel(true); + movementFuture = null; + } + if (movementFuture!=null){ + recoveryFuture.cancel(true); + recoveryFuture = null; + } + if (despawnFuture!=null){ + despawnFuture.cancel(true); + despawnFuture = null; + } + } + + public void cancelAggro(){ + try { + aggroCheckTask.cancel(true); + } catch(Exception e) { + } + } + public ScheduledFuture getRegenTask() { return regenTask; } @@ -341,7 +505,7 @@ public class AIActor { public void setRegenTask(ScheduledFuture regenTask) { this.regenTask = regenTask; } - + public boolean isStalking() { return isStalking; } @@ -374,4 +538,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/LairActor.java b/src/services/ai/LairActor.java index 69016ef0..87e5940b 100644 --- a/src/services/ai/LairActor.java +++ b/src/services/ai/LairActor.java @@ -31,6 +31,7 @@ import resources.common.SpawnPoint; import resources.objects.creature.CreatureObject; import resources.objects.tangible.TangibleObject; import services.combat.CombatEvents.DamageTaken; +import tools.DevLog; public class LairActor { @@ -136,9 +137,16 @@ public class LairActor { Point3D position = SpawnPoint.getRandomPosition(lairObject.getPosition(), 5, 30, lairObject.getPlanetId()); if (creatureTemplates!=null) creatureTemplate = creatureTemplates.get(new Random().nextInt(creatureTemplates.size())); - CreatureObject creature = NGECore.getInstance().spawnService.spawnCreature(creatureTemplate, lairObject.getPlanet().getName(), 0, position.x, position.y, position.z, level); + float babyChance = new Random().nextFloat(); + CreatureObject creature = null; + if (babyChance>0.9){ + creature = NGECore.getInstance().spawnService.spawnCreature(creatureTemplate, lairObject.getPlanet().getName(), 0, position.x, position.y, position.z, level); + } else { + creature = NGECore.getInstance().spawnService.spawnCreatureBaby(creatureTemplate, lairObject.getPlanet().getName(), 0, position.x, position.y, position.z, level); + } + if(creature == null || !creature.isInQuadtree()) { - System.out.println("NULL Creature"); + DevLog.debugout("Charon", "Lair AI", "LairActor spawnNewCreatures() NULL creature!"); continue; } creatures.add((AIActor) creature.getAttachment("AI")); diff --git a/src/services/ai/states/AIState.java b/src/services/ai/states/AIState.java index 286b51b8..15d68dd5 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 Follow points + maxDistance = 3; + 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/AttackState.java b/src/services/ai/states/AttackState.java index e487a9f9..9bcccb22 100644 --- a/src/services/ai/states/AttackState.java +++ b/src/services/ai/states/AttackState.java @@ -25,15 +25,16 @@ import java.util.Random; import java.util.Vector; import main.NGECore; - import resources.objects.creature.CreatureObject; import resources.objects.weapon.WeaponObject; import services.ai.AIActor; +import tools.DevLog; public class AttackState extends AIState { @Override public byte onEnter(AIActor actor) { + DevLog.debugout("Charon", "AI Attack State", "onEnter"); CreatureObject creature = actor.getCreature(); if(creature.getPosture() == 14) return StateResult.DEAD; @@ -47,9 +48,11 @@ public class AttackState extends AIState { @Override public byte onExit(AIActor actor) { // TODO Auto-generated method stub + actor.getCreature().setLookAtTarget(0); actor.getCreature().setIntendedTarget(0); - + actor.setFollowObject(null); + DevLog.debugout("Charon", "AI Attack State", "onExit"); return StateResult.FINISHED; } @@ -75,13 +78,20 @@ public class AttackState extends AIState { if(weapon != null) maxDistance = weapon.getMaxRange() - 1; } - if(actor.getFollowObject().getWorldPosition().getDistance(creature.getWorldPosition()) > maxDistance) - actor.setNextPosition(actor.getFollowObject().getPosition()); - else { - //recover(actor); - actor.faceObject(actor.getFollowObject()); - actor.scheduleMovement(); - return StateResult.UNFINISHED; + try{ + if(actor.getFollowObject().getWorldPosition().getDistance(creature.getWorldPosition()) > maxDistance) + actor.setNextPosition(actor.getFollowObject().getPosition()); + else { + //recover(actor); + actor.faceObject(actor.getFollowObject()); + actor.scheduleMovement(); + return StateResult.UNFINISHED; + } + } catch (Exception e){ + DevLog.debugout("Charon", "AI Attack State Exception move method", "actor " + actor); + DevLog.debugout("Charon", "AI Attack State Exception move method", "actor.getFollowObject() " + actor.getFollowObject()); + DevLog.debugout("Charon", "AI Attack State Exception move method", "actor.getFollowObject().getWorldPosition() " + actor.getFollowObject().getWorldPosition()); + DevLog.debugout("Charon", "AI Attack State Exception move method", "creature.getWorldPosition() " + creature.getWorldPosition()); } } @@ -129,20 +139,25 @@ public class AttackState extends AIState { target = actor.getFollowObject(); } if(target == null) { - System.out.println("null target"); + DevLog.debugout("Charon", "AI Attack State", "null target"); actor.scheduleRecovery(); return StateResult.UNFINISHED; } if(target.getPosture() == 13 || target.getPosture() == 14 || target.isInStealth()) { - actor.removeDefender(target); - actor.setFollowObject(actor.getHighestDamageDealer()); + + actor.setFollowObject(actor.getHighestDamageDealer()); target = actor.getFollowObject(); if(target == null) { creature.setLookAtTarget(0); creature.setIntendedTarget(0); - return StateResult.FINISHED; + } + actor.setFollowObject(null); + actor.removeDefender(target); + + actor.setCurrentState(new RetreatState()); + return StateResult.FINISHED; } if(target.getWorldPosition().getDistance(creature.getWorldPosition()) > 128 || target.getPosture() == 13 || target.getPosture() == 14) { actor.removeDefender(target); @@ -157,6 +172,10 @@ public class AttackState extends AIState { Vector attacks = actor.getMobileTemplate().getAttacks(); + // Pet +// if (creature.getOwnerId()>0) +// attacks = creature.getSpecialAttacks(); + creature.setLookAtTarget(target.getObjectId()); creature.setIntendedTarget(target.getObjectId()); diff --git a/src/services/ai/states/DeathState.java b/src/services/ai/states/DeathState.java index 6ef981bd..ed38449f 100644 --- a/src/services/ai/states/DeathState.java +++ b/src/services/ai/states/DeathState.java @@ -21,6 +21,7 @@ ******************************************************************************/ package services.ai.states; +import engine.resources.container.CreatureContainerPermissions; import main.NGECore; import resources.objects.creature.CreatureObject; import resources.objects.tangible.TangibleObject; @@ -38,7 +39,11 @@ public class DeathState extends AIState { CreatureObject killer = (CreatureObject)actor.getCreature().getKiller(); if (killer==null) killer = actor.getHighestDamageDealer(); - NGECore.getInstance().lootService.DropLoot(killer,(TangibleObject)(actor.getCreature())); + actor.getCreature().setContainerPermissions(CreatureContainerPermissions.CREATURE_CONTAINER_PERMISSIONS); + NGECore.getInstance().lootService.DropLoot(killer,(TangibleObject)(actor.getCreature())); + + actor.destroyActor(); // to prevent standing up right after death + return 0; } 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..b94684fe 100644 --- a/src/services/ai/states/RetreatState.java +++ b/src/services/ai/states/RetreatState.java @@ -21,6 +21,9 @@ ******************************************************************************/ package services.ai.states; +import main.NGECore; +import engine.resources.scene.Point3D; +import resources.objects.creature.CreatureObject; import services.ai.AIActor; public class RetreatState extends AIState { @@ -32,7 +35,15 @@ public class RetreatState extends AIState { actor.removeDefender(defender); } }*/ - actor.setFollowObject(null); + NGECore.getInstance().aiService.logAI("RetreatState ENTER "); + + if (actor.getCreature().getOwnerId()>0){ + CreatureObject owner = (CreatureObject) NGECore.getInstance().objectService.getObject(actor.getCreature().getOwnerId()); + actor.setFollowObject(owner); + actor.setCurrentState(new FollowState()); + return StateResult.FINISHED; + } else + actor.setFollowObject(null); actor.scheduleMovement(); return StateResult.UNFINISHED; } @@ -40,17 +51,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..ae7d1615 100644 --- a/src/services/chat/ChatService.java +++ b/src/services/chat/ChatService.java @@ -50,6 +50,7 @@ import resources.common.*; import resources.datatables.DisplayType; import resources.guild.Guild; import resources.objects.creature.CreatureObject; +import resources.objects.group.GroupObject; import resources.objects.player.PlayerObject; import protocol.swg.AddIgnoreMessage; import protocol.swg.ObjControllerMessage; @@ -222,7 +223,7 @@ public class ChatService implements INetworkDispatch { SWGObject recipient = getObjectByFirstName(firstName); - if (recipient == null) + if (recipient == null || !recipient.isInQuadtree()) return; PlayerObject recipientGhost = (PlayerObject) recipient.getSlottedObject("ghost"); @@ -266,31 +267,39 @@ public class ChatService implements INetworkDispatch { if(sender == null) return; - // TODO: Recipient handling for values: citizens, group, guild ranks (ace, boot, admiral, etc.) - - if (packet.getRecipient().equals("guild")) { - Guild guild = core.guildService.getGuildById(((CreatureObject) sender).getGuildId()); - if (guild == null || !guild.getMembers().containsKey(sender.getObjectID())) { - ChatOnSendPersistentMessage response = new ChatOnSendPersistentMessage(4, packet.getCounter()); - session.write(response.serialize()); - return; - } - - if (!guild.getMember(sender.getObjectID()).hasMailPermission()) { - ((CreatureObject) sender).sendSystemMessage("@guild:generic_fail_no_permission", (byte) 0); - ChatOnSendPersistentMessage response = new ChatOnSendPersistentMessage(4, packet.getCounter()); - session.write(response.serialize()); - return; - } - guild.sendGuildMail(sender.getCustomName(), packet.getSubject(), packet.getMessage()); - - ChatOnSendPersistentMessage response = new ChatOnSendPersistentMessage(0, packet.getCounter()); - session.write(response.serialize()); - return; - } - - SWGObject recipient = getObjectByFirstName(packet.getRecipient()); + switch (packet.getRecipient()) { + case "citizens": break; + case "guild": + Guild guild = core.guildService.getGuildById(((CreatureObject) sender).getGuildId()); + if (guild == null || !guild.getMembers().containsKey(sender.getObjectID())) { + ChatOnSendPersistentMessage response = new ChatOnSendPersistentMessage(4, packet.getCounter()); + session.write(response.serialize()); + return; + } + + if (!guild.getMember(sender.getObjectID()).hasMailPermission()) { + ((CreatureObject) sender).sendSystemMessage("@guild:generic_fail_no_permission", (byte) 0); + ChatOnSendPersistentMessage response = new ChatOnSendPersistentMessage(4, packet.getCounter()); + session.write(response.serialize()); + return; + } + guild.sendGuildMail(sender.getCustomName(), packet.getSubject(), packet.getMessage()); + + ChatOnSendPersistentMessage response = new ChatOnSendPersistentMessage(0, packet.getCounter()); + session.write(response.serialize()); + return; + case "group": break; + + default: break; + // TODO: Guild ranks + } + + SWGObject recipient = core.objectService.getObjectByFirstName(packet.getRecipient()); + + if (recipient == null) + return; + PlayerObject recipientGhost = (PlayerObject) recipient.getSlottedObject("ghost"); if (recipientGhost.getIgnoreList().contains(sender.getCustomName().toLowerCase())) @@ -747,25 +756,6 @@ public class ChatService implements INetworkDispatch { } - public SWGObject getObjectByFirstName(String name) { - ConcurrentHashMap clients = core.getActiveConnectionsMap(); - - if(name.contains(" ")) - name = name.split(" ")[0]; - - for(Client client : clients.values()) { - if(client.getParent() == null) - continue; - - String fullName = client.getParent().getCustomName(); - String firstName = fullName.split(" ")[0]; - - if(firstName.equalsIgnoreCase(name)) - return client.getParent(); - } - return null; - } - public int generateMailId() { Random rand = new Random(); @@ -1074,4 +1064,10 @@ public class ChatService implements INetworkDispatch { return message; } + @Deprecated + public SWGObject getObjectByFirstName(String name) { + return core.objectService.getObjectByFirstName(name); + } + + } 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..21eec82c 100644 --- a/src/services/combat/CombatService.java +++ b/src/services/combat/CombatService.java @@ -66,7 +66,9 @@ import services.sui.SUIService.MessageBoxType; import services.sui.SUIWindow; import services.sui.SUIWindow.SUICallback; import services.sui.SUIWindow.Trigger; +import tools.DevLog; import main.NGECore; +import engine.clients.Client; import engine.resources.common.CRC; import engine.resources.objects.SWGObject; import engine.resources.scene.Point3D; @@ -312,17 +314,29 @@ public class CombatService implements INetworkDispatch { } private void applyDamage(CreatureObject attacker, TangibleObject target, int damage) { + target.setConditionDamage(target.getConditionDamage() + damage); if (target.getOption(Options.MOUNT)) { 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); + DevLog.debugout("Charon", "Pet AI", "applyDamage addDefender"); + } + } + } DamageTaken event = events.new DamageTaken(); event.attacker = attacker; event.damage = damage; target.getEventBus().publish(event); - + System.out.println("APPLY DAMAGE2"); attacker.setTefTime(300000); } @@ -611,7 +625,7 @@ public class CombatService implements INetworkDispatch { } private float calculateDamage(CreatureObject attacker, CreatureObject target, WeaponObject weapon, CombatCommand command) { - + if(target.getBuffByName("me_stasis_self_1") != null || target.getBuffByName("me_stasis_1") != null) return 0; @@ -660,14 +674,18 @@ public class CombatService implements INetworkDispatch { if(target.getSkillMod("combat_divide_damage_dealt") != null) { rawDamage *= (1 - (target.getSkillMod("combat_divide_damage_dealt").getBase() / 100)); } - + + + //Hook in here to agitate called pet + + return rawDamage; } private float calculateDamage(CreatureObject attacker, TangibleObject target, WeaponObject weapon, CombatCommand command) { - + float rawDamage = command.getAddedDamage(); if(command.getPercentFromWeapon() > 0 && weapon != attacker.getSlottedObject("default_weapon")) { @@ -824,10 +842,25 @@ public class CombatService implements INetworkDispatch { if(target.getHealth() - damage <= 0 && target.getSlottedObject("ghost") != null) { if(target.hasBuff("incapWeaken")) { - deathblowPlayer(attacker, target); + if (!attacker.isPlayer()){ + AIActor aiActor = (AIActor)attacker.getAttachment("AI"); + if (aiActor.getMobileTemplate().isDeathblow()) + deathblowPlayer(attacker, target); + } else + { + deathblowPlayer(attacker, target); + } return; } + if (!attacker.isPlayer()){ + AIActor aiActor = (AIActor)attacker.getAttachment("AI"); + if (aiActor.getMobileTemplate().isDeathblow()){ + deathblowPlayer(attacker, target); + return; + } + } + synchronized(target.getMutex()) { if (core.mountService.isMounted(target)) { core.mountService.dismount(target, (CreatureObject) target.getContainer()); @@ -836,8 +869,10 @@ public class CombatService implements INetworkDispatch { target.setHealth(1); target.setPosture(Posture.Incapacitated); target.setTurnRadius(0); - target.setSpeedMultiplierBase(0); + target.setSpeedMultiplierBase(0); + } + ScheduledFuture incapTask = scheduler.schedule(() -> { synchronized(target.getMutex()) { @@ -873,10 +908,26 @@ public class CombatService implements INetworkDispatch { synchronized(target.getMutex()) { target.setHealth(target.getHealth() - damage); } - DamageTaken event = events.new DamageTaken(); - event.attacker = attacker; - event.damage = damage; - target.getEventBus().publish(event); + + + 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); + DevLog.debugout("Charon", "Pet AI", "applyDamage addDefender"); + } + } + } + + + if (target.getPosture()!=13){ + DamageTaken event = events.new DamageTaken(); + event.attacker = attacker; + event.damage = damage; + target.getEventBus().publish(event); + } } public void doDrainHeal(CreatureObject receiver, int drainAmount) { @@ -1329,7 +1380,20 @@ public class CombatService implements INetworkDispatch { if(!applySpecialCost(creature, weapon, command)) success = false; - if(!success && creature.getClient() != null) { + // Quick Hotfix for AI NPCs buffing themselves + Client client = null; + if(creature.getClient() == null) { + if (creature.getAttachment("AI")!=null){ + AIActor aiActor = (AIActor) creature.getAttachment("AI"); + CreatureObject target = aiActor.getFollowObject(); + if (target.getClient()!=null) + client = target.getClient(); // Use player's client reference that is in combat with that NPC + } + } else { + client = creature.getClient(); + } + + if(!success && client != null) { IoSession session = creature.getClient().getSession(); CommandEnqueueRemove commandRemove = new CommandEnqueueRemove(creature.getObjectId(), actionCounter); session.write(new ObjControllerMessage(0x0B, commandRemove).serialize()); @@ -1338,6 +1402,9 @@ public class CombatService implements INetworkDispatch { return; } + if (client == null) + return; + if (creature.hasBuff("co_position_secured")) core.buffService.removeBuffFromCreatureByName(creature, "co_position_secured"); else @@ -1345,11 +1412,11 @@ public class CombatService implements INetworkDispatch { StartTask startTask = new StartTask(actionCounter, creature.getObjectID(), command.getCommandCRC(), CRC.StringtoCRC(command.getCooldownGroup()), command.getCooldown()); ObjControllerMessage objController2 = new ObjControllerMessage(0x0B, startTask); - creature.getClient().getSession().write(objController2.serialize()); + client.getSession().write(objController2.serialize()); CommandEnqueueRemove commandRemove = new CommandEnqueueRemove(creature.getObjectID(), actionCounter); ObjControllerMessage objController3 = new ObjControllerMessage(0x0B, commandRemove); - creature.getClient().getSession().write(objController3.serialize()); + client.getSession().write(objController3.serialize()); } diff --git a/src/services/equipment/EquipmentService.java b/src/services/equipment/EquipmentService.java index ca2949ad..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(!actor.getEquipmentList().contains(item.getObjectId())) + 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); } @@ -180,8 +180,10 @@ public class EquipmentService implements INetworkDispatch { if(func != null) func.__call__(Py.java2py(core), Py.java2py(actor), Py.java2py(item)); - if(actor.getEquipmentList().contains(item.getObjectId())) + 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/HouseTemplate.java b/src/services/housing/HouseTemplate.java index b13b5a93..be700f4d 100644 --- a/src/services/housing/HouseTemplate.java +++ b/src/services/housing/HouseTemplate.java @@ -17,6 +17,7 @@ public class HouseTemplate { private Map buildingSigns; private boolean isCivicStructure; private int civicStructureType; + private int destructionFee = 0; public HouseTemplate(String deedTemplate, String buildingTemplate, int lotCost) { this.deedTemplate = deedTemplate; @@ -95,5 +96,13 @@ public class HouseTemplate { public void setCivicStructureType(int civicStructureType) { this.civicStructureType = civicStructureType; } + + public int getDestructionFee() { + return destructionFee; + } + + public void setDestructionFee(int destructionFee) { + this.destructionFee = destructionFee; + } } diff --git a/src/services/housing/HousingService.java b/src/services/housing/HousingService.java index 294efdba..85856af7 100644 --- a/src/services/housing/HousingService.java +++ b/src/services/housing/HousingService.java @@ -46,6 +46,7 @@ import resources.common.OutOfBand; import resources.datatables.Citizenship; import resources.datatables.DisplayType; import resources.objects.building.BuildingObject; +import resources.objects.cell.CellObject; import resources.objects.creature.CreatureObject; import resources.objects.harvester.HarvesterObject; import resources.objects.installation.InstallationObject; @@ -90,12 +91,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 +114,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 +128,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 +145,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 +178,11 @@ public class HousingService implements INetworkDispatch { building.addPlayerToAdminList(null, actor.getObjectID(), playerFirstName); building.setDeedTemplate(deed.getTemplate()); building.setMaintenanceAmount(houseTemplate.getBaseMaintenanceRate()); - building.setConditionDamage(100); // Ouch + building.setDestructionFee(houseTemplate.getDestructionFee()); + + if(city != null) { + city.addNewStructure(building.getObjectID()); + } /* // Check for city founders joining a new city @@ -180,6 +206,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")) @@ -274,19 +321,19 @@ public class HousingService implements INetworkDispatch { "\n \n @player_structure:confirm_destruction_d3a " + "\\#32CD32 @player_structure:confirm_destruction_d3b \\#FFFFFF " + "@player_structure:confirm_destruction_d4 "); - if (building.getConditionDamage()<20 && building.getMaintenanceAmount()<3000){ + if (building.getConditionDamage()<20 && building.getMaintenanceAmount()20){ window.addListBoxMenuItem("@player_structure:redeed_condition \\#BB0000 " + building.getConditionDamage() + " \\#FFFFFF ",1 ); noRedeed.add(-1); } else { window.addListBoxMenuItem("@player_structure:redeed_condition \\#32CD32 " + building.getConditionDamage() + " \\#FFFFFF ",1 ); } - if (building.getMaintenanceAmount()<0 || building.getMaintenanceAmount()<800){ + if (building.getMaintenanceAmount() returnList) { core.suiService.closeSUIWindow(owner, 0); - if (noRedeed.size()==0 && ((CreatureObject)owner).getBankCredits()>800) - createCodeWindow(owner, target); + if (noRedeed.size()==0){ + building.setAttachment("Can_Redeed", 1); + } else { + building.setAttachment("Can_Redeed", 0); + } + + createCodeWindow(owner, target); } }); window.addHandler(1, "", Trigger.TRIGGER_CANCEL, returnList, new SUICallback() { @@ -318,17 +370,27 @@ public class HousingService implements INetworkDispatch { public void createCodeWindow(SWGObject owner, TangibleObject target) { final BuildingObject building = (BuildingObject) target.getGrandparent(); + int canRedeed = (int) building.getAttachment("Can_Redeed"); //final BuildingObject building = (BuildingObject) target.getAttachment("housing_parentstruct"); //final BuildingObject building = (BuildingObject)target; Random rnd = new Random(); final int confirmCode = 100000 + rnd.nextInt(900000); final SUIWindow window = core.suiService.createInputBox(2,"@player_structure:structure_status","@player_structure:structure_name_prompt", owner, target, 0); window.setProperty("bg.caption.lblTitle:Text", "@player_structure:confirm_destruction_t"); - - window.setProperty("Prompt.lblPrompt:Text", "@player_structure:your_structure_prefix " + + + + + if (canRedeed==1){ + window.setProperty("Prompt.lblPrompt:Text", "@player_structure:your_structure_prefix " + "\\#32CD32 @player_structure:will_redeed_confirm \\#FFFFFF "+ "@player_structure:will_redeed_suffix " + "\n \n Code: " + confirmCode); + } else { + window.setProperty("Prompt.lblPrompt:Text", "@player_structure:your_structure_prefix " + + "\\#BB0000 @player_structure:will_not_redeed_confirm \\#FFFFFF "+ + "@player_structure:will_redeed_suffix " + + "\n \n Code: " + confirmCode); + } window.setProperty("btnOk:visible", "True"); window.setProperty("btnCancel:visible", "True"); @@ -347,36 +409,54 @@ public class HousingService implements INetworkDispatch { PlayerObject player = (PlayerObject) houseOwner.getSlottedObject("ghost"); HouseTemplate houseTemplate = housingTemplates.get(houseToDeed.get(building.getTemplate())); - TangibleObject deed = (TangibleObject) core.objectService.createObject(houseTemplate.getDeedTemplate(), owner.getPlanet()); - if (player.getLotsRemaining() + houseTemplate.getLotCost() > 10){ - // Something went wrong or hacking attempt - houseOwner.sendSystemMessage("Structure can't be redeeded. Maximum lot count exceeded.",(byte)1); - return; + + if (canRedeed==1){ + TangibleObject deed = (TangibleObject) core.objectService.createObject(houseTemplate.getDeedTemplate(), owner.getPlanet()); + + if (player.getLotsRemaining() + houseTemplate.getLotCost() > 10){ + // Something went wrong or hacking attempt + houseOwner.sendSystemMessage("Structure can't be redeeded. Maximum lot count exceeded.",(byte)1); + return; + } + + deed.setIntAttribute("@obj_attr_n:examine_maintenance_rate", houseTemplate.getBaseMaintenanceRate()); + deed.setIntAttribute("@obj_attr_n:examine_maintenance", (int) building.getMaintenanceAmount()); + + owner.getContainer().remove(owner); + + int costs = 800; + houseOwner.setBankCredits(houseOwner.getBankCredits()-costs); + + destroyStructure(building); + + + SWGObject ownerInventory = owner.getSlottedObject("inventory"); + ownerInventory.add(deed); + + if (player.getLotsRemaining() + houseTemplate.getLotCost() <= 10) { + player.setLotsRemaining(player.getLotsRemaining() + houseTemplate.getLotCost()); + } + + houseOwner.sendSystemMessage("@player_structure:processing_destruction",(byte)1); + houseOwner.sendSystemMessage("@player_structure:deed_reclaimed",(byte)1); + + } else { + + if (player.getLotsRemaining() + houseTemplate.getLotCost() > 10){ + // Something went wrong or hacking attempt + houseOwner.sendSystemMessage("Structure can't be destroyed. Maximum lot count exceeded.",(byte)1); + return; + } + owner.getContainer().remove(owner); + destroyStructure(building); + if (player.getLotsRemaining() + houseTemplate.getLotCost() <= 10) { + player.setLotsRemaining(player.getLotsRemaining() + houseTemplate.getLotCost()); + } + + houseOwner.sendSystemMessage("@player_structure:processing_destruction",(byte)1); } - deed.setIntAttribute("@obj_attr_n:examine_maintenance_rate", houseTemplate.getBaseMaintenanceRate()); - deed.setIntAttribute("@obj_attr_n:examine_maintenance", (int) building.getMaintenanceAmount()); - - owner.getContainer().remove(owner); - - int costs = 800; - houseOwner.setBankCredits(houseOwner.getBankCredits()-costs); - - destroyStructure(building); - - - SWGObject ownerInventory = owner.getSlottedObject("inventory"); - ownerInventory.add(deed); - - if (player.getLotsRemaining() + houseTemplate.getLotCost() <= 10) { - player.setLotsRemaining(player.getLotsRemaining() + houseTemplate.getLotCost()); - } - - houseOwner.sendSystemMessage("@player_structure:processing_destruction",(byte)1); - houseOwner.sendSystemMessage("@player_structure:deed_reclaimed",(byte)1); - - } else { houseOwner.sendSystemMessage("@player_structure:incorrect_destroy_code",(byte)1); } @@ -413,9 +493,6 @@ public class HousingService implements INetworkDispatch { city.removeStructure(building.getObjectID()); if(building.getResidency()) { city.removeCitizen(owner.getObjectID()); - owner.getPlayerObject().setHome(""); - owner.getPlayerObject().setCitizenship(Citizenship.Homeless); - owner.setAttachment("residentCity", null); } if(building.getTemplate().contains("cityhall")) { // destroy city @@ -578,14 +655,9 @@ public class HousingService implements INetworkDispatch { oldResidency.setResidency(false); ((CreatureObject) owner).sendSystemMessage("@player_structure:change_residence", (byte) 0); PlayerCity oldCity = core.playerCityService.getCityObjectIsIn(oldResidency); - if(oldCity != null) { - oldCity.removeStructure(oldResidency.getObjectID()); + if(oldCity != null && oldCity != cityActorIsIn) { oldCity.removeCitizen(owner.getObjectID()); - ((CreatureObject) owner).getPlayerObject().setHome(""); - ((CreatureObject) owner).getPlayerObject().setCitizenship(Citizenship.Homeless); - owner.setAttachment("residentCity", null); } - ((CreatureObject) owner).sendSystemMessage("@player_structure:change_residence", (byte) 0); } else { ((CreatureObject) owner).sendSystemMessage("@player_structure:declared_residency", (byte) 0); } @@ -594,12 +666,6 @@ public class HousingService implements INetworkDispatch { owner.setAttachment("residentBuilding", building.getObjectID()); if(cityActorIsIn != null) { cityActorIsIn.addCitizen(owner.getObjectID()); - owner.setAttachment("residentCity", cityActorIsIn.getCityID()); - ((CreatureObject) owner).getPlayerObject().setHome(cityActorIsIn.getCityName()); - if(cityActorIsIn.getMayorID() == owner.getObjectID()) - ((CreatureObject) owner).getPlayerObject().setCitizenship(Citizenship.Mayor); - else - ((CreatureObject) owner).getPlayerObject().setCitizenship(Citizenship.Citizen); } } diff --git a/src/services/mission/CommonerSpawn.java b/src/services/mission/CommonerSpawn.java new file mode 100644 index 00000000..f49999f8 --- /dev/null +++ b/src/services/mission/CommonerSpawn.java @@ -0,0 +1,51 @@ +/******************************************************************************* + * 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.mission; + +import engine.resources.scene.Point3D; + +public class CommonerSpawn { + private long objectId; + private Point3D position; + + public CommonerSpawn(long objectId, Point3D position) { + this.objectId = objectId; + this.position = position; + } + + public long getObjectId() { + return objectId; + } + + public void setObjectId(long objectId) { + this.objectId = objectId; + } + + public Point3D getLocation() { + return position; + } + + public void setLocation(Point3D position) { + this.position = position; + } + +} diff --git a/src/services/mission/MissionService.java b/src/services/mission/MissionService.java index 9db4b42a..f5fcfa09 100644 --- a/src/services/mission/MissionService.java +++ b/src/services/mission/MissionService.java @@ -46,6 +46,7 @@ import protocol.swg.objectControllerObjects.MissionListRequest; import resources.common.BountyListItem; import resources.common.SpawnPoint; import resources.common.ObjControllerOpcodes; +import services.mission.CommonerSpawn; import resources.objectives.BountyMissionObjective; import resources.objectives.DeliveryMissionObjective; import resources.objectives.DestroyMissionObjective; @@ -75,12 +76,12 @@ public class MissionService implements INetworkDispatch { // Use a HashMap for obtaining number of entries so we aren't using a visitor all the time. private Map entryCounts = new ConcurrentHashMap(); private Map bountyMap = new ConcurrentHashMap(); + private Map> commonerMap = new ConcurrentHashMap>(); private ObjectDatabase bountiesODB; private Random ran = new Random(); public MissionService(NGECore core) { this.core = core; - try { nameGenerator = new NameGen("names.txt"); } catch (IOException e) { e.printStackTrace(); } @@ -223,6 +224,9 @@ public class MissionService implements INetworkDispatch { * @param silent If true, called the MissionObjective.abort() method, otherwise it simply destroys the mission (false) */ public void handleMissionAbort(CreatureObject creature, MissionObject mission, boolean silent) { + + creature.getPlayerObject().removeActiveMission(mission.getObjectID()); + MissionObjective objective = mission.getObjective(); if (objective != null && !silent) @@ -307,7 +311,8 @@ public class MissionService implements INetworkDispatch { randomBountyMission(player, mission); else if (type == TerminalType.ARTISAN) - randomSurveyMission(player, mission); + return; + //randomSurveyMission(player, mission); else return; @@ -337,12 +342,17 @@ public class MissionService implements INetworkDispatch { } public void handleMissionComplete(CreatureObject creature, MissionObject mission) { + + creature.getPlayerObject().removeActiveMission(mission.getObjectID()); + MissionObjective objective = mission.getObjective(); if (objective == null) return; objective.complete(core, creature); + + core.objectService.destroyObject(mission.getObjectId()); } private boolean handleMissionAccept(CreatureObject creature, MissionObject mission) { @@ -388,6 +398,7 @@ public class MissionService implements INetworkDispatch { mission.setPlanetId(creature.getPlanetId()); } + creature.getPlayerObject().addActiveMission(mission.getObjectID()); missionBag.transferTo(creature, datapad, mission); createMissionObjective(creature, mission); return true; @@ -443,7 +454,7 @@ public class MissionService implements INetworkDispatch { return null; } } - private void randomSurveyMission(SWGObject player, MissionObject mission) { + /*private void randomSurveyMission(SWGObject player, MissionObject mission) { byte generalType = (byte) (ran.nextInt(3) == 0 ? 1 : 0); @@ -496,9 +507,38 @@ public class MissionService implements INetworkDispatch { mission.setTemplateObject(CRC.StringtoCRC(ResourceRoot.CONTAINER_TYPE_IFF_SIGNIFIER[family.getContainerType()])); // This should be the resource container obj mission.setTargetName(family.getResourceType() + family.getResourceClass()); - } + }*/ private void randomDeliveryMission(SWGObject player, MissionObject mission) { + if (!commonerMap.containsKey(player.getPlanet().name)) + return; + + Vector spawns = commonerMap.get(player.getPlanet().name); + Point3D playerLocation = player.getWorldPosition(); + MissionLocation startLocation = null; + MissionLocation destinationLocation = null; + + Random randomSpawn = new Random(10); + // TODO: There is probably a much better way of doing this. + for (CommonerSpawn spawn : spawns) { + if (randomSpawn.nextInt() >= 5) { + continue; + } + + float distance = playerLocation.getDistance2D(spawn.getLocation()); + if (distance <= 500 && startLocation == null) { + startLocation = new MissionLocation(spawn.getLocation(), spawn.getObjectId(), player.getPlanet().name); + } else if (distance <= 2500 && destinationLocation == null) { + destinationLocation = new MissionLocation(spawn.getLocation(), spawn.getObjectId(), player.getPlanet().name); + } + + if (destinationLocation != null && startLocation != null) + break; + } + + if (startLocation == null || destinationLocation == null) + return; + mission.setMissionType("deliver"); String[] difficulties = { "easy", "medium", "hard" }; @@ -513,14 +553,9 @@ public class MissionService implements INetworkDispatch { mission.setDifficultyLevel(5); - // TODO: Use pre-defined commoner locations - Point3D startLocation = SpawnPoint.getRandomPosition(player.getPosition(), (float) 50, (float) 300, player.getPlanetId()); - Point3D destination = SpawnPoint.getRandomPosition(startLocation, (float) 50, (float) 500, player.getPlanetId()); - - mission.setStartLocation(startLocation, 0, player.getPlanet().name); - mission.setDestinationLocation(destination, 0, player.getPlanet().name); - - mission.setCreditReward((int) (200 + ((startLocation.getDistance2D(destination) / 10)))); + mission.setStartLocation(startLocation); + mission.setDestinationLocation(destinationLocation); + mission.setCreditReward((int) (200 + ((startLocation.getLocation().getDistance2D(destinationLocation.getLocation()) / 10)))); mission.setTemplateObject(CRC.StringtoCRC("object/tangible/mission/shared_mission_datadisk.iff")); mission.setTargetName("Datadisk"); @@ -654,6 +689,17 @@ public class MissionService implements INetworkDispatch { return true; } + public void addCommoner(SWGObject commoner) { + CommonerSpawn commonerSpawn = new CommonerSpawn(commoner.getObjectId(), commoner.getPosition()); + if (commonerMap.containsKey(commoner.getPlanet().name)) + commonerMap.get(commoner.getPlanet().name).add(commonerSpawn); + else { + commonerMap.put(commoner.getPlanet().name, new Vector()); + commonerMap.get(commoner.getPlanet().name).add(commonerSpawn); + } + + } + public boolean removeBounty(long bountyTarget, boolean listRemove) { if (listRemove) bountyMap.remove(bountyTarget); diff --git a/src/services/object/ObjectService.java b/src/services/object/ObjectService.java index 0fe79908..a823a1ca 100644 --- a/src/services/object/ObjectService.java +++ b/src/services/object/ObjectService.java @@ -52,6 +52,7 @@ import resources.datatables.PlayerFlags; import resources.guild.Guild; import resources.harvest.SurveyTool; +import org.apache.commons.lang3.text.WordUtils; import org.apache.mina.core.buffer.IoBuffer; import org.apache.mina.core.session.IoSession; import org.python.core.Py; @@ -239,6 +240,15 @@ public class ObjectService implements INetworkDispatch { boolean isSnapshot = false; + if(objectID != 0 && objectList.containsKey(objectID)) { + System.err.println("Trying to create object with duplicate Id"); + try { + throw new Exception(); + } catch(Exception e) { + e.printStackTrace(); + } + } + if(objectID == 0) objectID = generateObjectID(); else @@ -282,6 +292,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); @@ -472,7 +488,7 @@ public class ObjectService implements INetworkDispatch { if (objectList.containsKey(objectID)) { System.err.println("getObject(): object is null but objectList contains objectID key"); } else { - System.err.println("getObject(): object is null"); + //System.err.println("getObject(): object is null"); } } @@ -591,7 +607,7 @@ public class ObjectService implements INetworkDispatch { for(SWGObject obj : objectList.values()) { if(obj.getCustomName() == null) continue; - if(obj.getCustomName().equals(customName)) + if(obj.getCustomName().equalsIgnoreCase(customName)) return obj; } @@ -606,7 +622,7 @@ public class ObjectService implements INetworkDispatch { continue; } - if (object.getCustomName() != null && customName.length() > 0 && object.getCustomName().equals(customName)) { + if (object.getCustomName() != null && customName.length() > 0 && object.getCustomName().equalsIgnoreCase(customName)) { return object; } } @@ -625,7 +641,7 @@ public class ObjectService implements INetworkDispatch { continue; if(obj.getCustomName() == null) continue; - if(obj.getCustomName().startsWith(customName)) + if(obj.getCustomName().startsWith(customName) || obj.getCustomName().toUpperCase().startsWith(WordUtils.capitalize(customName))) return obj; } @@ -640,7 +656,7 @@ public class ObjectService implements INetworkDispatch { continue; } - if (object.getCustomName() != null && customName.length() > 0 && object.getCustomName().startsWith(customName)) { + if (object.getCustomName() != null && customName.length() > 0 && (object.getCustomName().startsWith(customName) || object.getCustomName().toUpperCase().startsWith(WordUtils.capitalize(customName)))) { return object; } } @@ -715,10 +731,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; } @@ -804,7 +828,7 @@ public class ObjectService implements INetworkDispatch { //shirt.setIntAttribute(effectName, powerValue); shirt.setAttachment("PUPEffectName", effectName); shirt.setAttachment("PUPEffectValue", powerValue); - + } if (object.getTemplate().equals(powerUpTemplate3)){ // weapon @@ -891,22 +915,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"; @@ -967,6 +996,9 @@ public class ObjectService implements INetworkDispatch { } + if(creature.getAttachment("disconnectTask") != null) { + ((ScheduledFuture) creature.getAttachment("disconnectTask")).cancel(true); + } PlayerObject ghost = (PlayerObject) creature.getSlottedObject("ghost"); @@ -975,9 +1007,6 @@ public class ObjectService implements INetworkDispatch { ghost.clearFlagBitmask(PlayerFlags.LD); - if(creature.getAttachment("disconnectTask") != null) { - ((ScheduledFuture) creature.getAttachment("disconnectTask")).cancel(true); - } creature.getAwareObjects().removeAll(creature.getAwareObjects()); creature.setAttachment("disconnectTask", null); @@ -1430,8 +1459,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..082b6541 100644 --- a/src/services/pet/MountService.java +++ b/src/services/pet/MountService.java @@ -22,10 +22,13 @@ package services.pet; import java.util.ArrayList; +import java.util.Collection; import java.util.List; import java.util.Map; import java.util.concurrent.atomic.LongAdder; +import org.apache.commons.collections.CollectionUtils; + import protocol.swg.UpdateContainmentMessage; import main.NGECore; import resources.common.OutOfBand; @@ -36,10 +39,13 @@ import resources.datatables.State; import resources.objects.building.BuildingObject; import resources.objects.creature.CreatureObject; import resources.objects.player.PlayerObject; +import services.ai.AIActor; +import tools.DevLog; import engine.clientdata.ClientFileManager; import engine.clientdata.visitors.DatatableVisitor; import engine.resources.container.Traverser; import engine.resources.objects.SWGObject; +import engine.resources.scene.Planet; import engine.resources.service.INetworkDispatch; import engine.resources.service.INetworkRemoteEvent; @@ -215,8 +221,10 @@ public class MountService implements INetworkDispatch { return; } + core.petService.storeAll(actor); storeAll(actor); + player.setCallingCompanion(true); if (actor.getTefTime() > 0) { @@ -250,6 +258,7 @@ public class MountService implements INetworkDispatch { mount.setPosition(actor.getPosition().clone()); mount.setOrientation(actor.getOrientation().clone()); mount.setPlanet(actor.getPlanet()); + DevLog.debugout("Charon", "Mount Service", "PROCESS MOUNT " + mount.getTemplate()); core.simulationService.add(mount, actor.getWorldPosition().x, actor.getWorldPosition().z, false); } } @@ -259,6 +268,25 @@ public class MountService implements INetworkDispatch { }); player.setCallingCompanion(false); + + // Make the vehicle visible + + List newAwareObjects = core.simulationService.get(actor.getPlanet(), actor.getWorldPosition().x, actor.getWorldPosition().z, 512); + ArrayList oldAwareObjects = new ArrayList(actor.getAwareObjects()); + @SuppressWarnings("unchecked") Collection updateAwareObjects = CollectionUtils.intersection(oldAwareObjects, newAwareObjects); + + for(int i = 0; i < newAwareObjects.size(); i++) { + SWGObject obj = newAwareObjects.get(i); + //System.out.println(obj.getTemplate()); + if(!updateAwareObjects.contains(obj) && obj != actor && !actor.getAwareObjects().contains(obj) && obj.getContainer() != actor && obj.isInQuadtree()) { + if(obj.getAttachment("bigSpawnRange") == null && obj.getWorldPosition().getDistance2D(actor.getWorldPosition()) > 200) + continue; + actor.makeAware(obj); + if(obj.getClient() != null) + obj.makeAware(actor); + } + } + } private void callMount(CreatureObject actor, SWGObject pcd, PlayerObject player, CreatureObject mount) { @@ -786,5 +814,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..249be17f --- /dev/null +++ b/src/services/pet/PetService.java @@ -0,0 +1,1024 @@ +/******************************************************************************* + * 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.Random; +import java.util.concurrent.atomic.LongAdder; + +import protocol.swg.UpdateContainmentMessage; +import protocol.swg.objectControllerObjects.ObjController_02AB; +import protocol.swg.objectControllerObjects.ObjController_02AC; +import protocol.swg.objectControllerObjects.ObjController_448; +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.SWGList; +import resources.objects.SWGSet; +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 tools.DevLog; +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; + DevLog.enableMe(); + DevLog.enableFileLogging(); + } + + + + public void generateMount(CreatureObject actor, SWGObject deed, String vehicleTemplate, String pcdTemplate) { + return; // NOT IMPLEMENTED + } + + public void call(CreatureObject actor, CreatureObject pet, SWGObject pcd) { + + DevLog.debugout("Charon", "Pet AI", "Call called !"); + + if (actor == null) { + return; + } + + if (actor.getAttachment("companion_RefId") != null) { + return; // Pet already called + } + + storeAll(actor); // Store other pets + + if (pcd == null) { + DevLog.debugout("Charon", "Pet AI", "call method (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")); + + //pet = (CreatureObject) core.objectService.getObject((Long) pcd.getAttachment("companion_RefId")); + + String petTemplate = (String) pcd.getAttachment("companionTemplate"); + 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) { + DevLog.debugout("Charon", "Pet AI", "call method mount == null"); + // Somehow the vehicle object has got lost + actor.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:cant_call"), DisplayType.Broadcast); + return; + } + + pet.setOwnerId(actor.getObjectID()); + actor.setCalledPet(pet); + pcd.setAttachment("companion_RefId", pet.getObjectID()); + + +// 0000: 05 00 46 5E CE 80 1B 00 00 00 2B 02 00 00 7C 0E ..F^......+...|. +// 0010: 31 D6 41 00 00 00 00 00 00 00 1.A....... + + + + + + + + + + + + /* CREO3 + 0000: 05 00 53 21 86 12 0B E8 AC 35 52 00 00 00 4F 45 ..S!.....5R...OE + 0010: 52 43 03 16 00 00 00 02 00 0F 00 EC 98 D7 D0 4B RC.............K + 0020: 00 00 00 12 00 00 00 00 10 00 00 00 00 ............. + */ + + // Commandtimer 448 CRC: 90 FA 9D 84 + +// 0000: 05 00 46 5E CE 80 0B 00 00 00 48 04 00 00 EC 98 ..F^......H..... +// 0010: D7 D0 4B 00 00 00 00 00 00 00 00 00 00 00 00 00 ..K............. +// 0020: 00 00 00 00 00 00 00 90 FA 9D 84 ........... + + ObjController_448 objCtrl448 = new ObjController_448(actor.getObjectID(), 0x849DFA90); + actor.getClient().getSession().write(objCtrl448.serialize()); + tools.CharonPacketUtils.printAnalysis(objCtrl448.serialize()); + + + + ObjController_02AB objController = new ObjController_02AB(actor.getObjectID()); + actor.getClient().getSession().write(objController.serialize()); + tools.CharonPacketUtils.printAnalysis(objController.serialize()); + + ObjController_02AC objController2 = new ObjController_02AC(actor.getObjectID()); + actor.getClient().getSession().write(objController2.serialize()); + tools.CharonPacketUtils.printAnalysis(objController2.serialize()); + + + + core.mountService.storeAll(actor); // Store all called vehicles + + //pet.setAttachment("pcdAppearanceFilename", pcd.getTemplateData().getAttribute("appearanceFilename")); + + player.setPet(pet.getObjectID()); + //SWGList abilities = player.getPetAbilities(); + List abilities = new ArrayList(); + abilities.add("bm_pet_attack"); //abilities.add("hoth_speeder_up"); + abilities.add("bm_follow_1"); + abilities.add("bm_stay_1"); + abilities.add("empty"); + abilities.add("empty"); + abilities.add("empty"); + abilities.add("empty"); + abilities.add("toggleBeastDefensive"); + abilities.add("toggleBeastPassive"); + //player.setPetAbilities(abilities); //1441 fight hoth speeder + player.getPetAbilities().set(abilities); + //player.getPetAbilities().addAll(abilities); + + List activeAbilities = new ArrayList(); + activeAbilities.add(""); + activeAbilities.add(""); + activeAbilities.add(""); + activeAbilities.add(""); + activeAbilities.add("toggleBeastPassive"); + player.getActivePetAbilities().set(activeAbilities); + + // 02 01 02 33 C3 BF 03 + //byte[] customization = new byte[]{(byte)0x03,(byte)0xBF,(byte)0xC3,(byte)0x33,(byte)0x02,(byte)0x01,(byte)0x02}; + byte[] customization = new byte[]{(byte)0x02,(byte)0x01,(byte)0x02,(byte)0x33,(byte)0xC3,(byte)0xBF,(byte)0x03}; + pet.setCustomization(customization); + + pet.setFaction(actor.getFaction()); + pet.setFactionStatus(actor.getFactionStatus()); + pet.setOwnerId(actor.getObjectID()); + pet.setAttachment("radial_filename", "npc/pet_radial"); + 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 getSpawnedPetForPCD(SWGObject pcd) { + if (pcd == null) { + return null; + } + + if (pcd.getAttachment("companion_RefId") == null) { + return null; + } + + long petRefId = (long) pcd.getAttachment("companion_RefId"); + CreatureObject pet = (CreatureObject) core.objectService.getObject(petRefId); + + if (pet == null) { + return null; + } + +// if (pet.getContainer() != null) { +// return null; +// } + return pet; + } + + 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) { + DevLog.debugout("Charon", "Pet AI", "PetService: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("companion_RefId")!=null){ + if (mount.getObjectID() == ((Long) pcd.getAttachment("companion_RefId"))) { + AIActor aiActor = (AIActor) mount.getAttachment("AI"); + aiActor.destroyActor(); + player.setPet(0L); + owner.setCalledPet(null); + core.objectService.destroyObject((Long) pcd.getAttachment("companion_RefId")); + pcd.setAttachment("companion_RefId", null); + } + } + } + + }); + } + + public void storeAll(CreatureObject actor) { + if (actor == null) { + return; + } + + PlayerObject player = (PlayerObject) actor.getSlottedObject("ghost"); + SWGObject datapad = actor.getSlottedObject("datapad"); + + if (datapad == null) { + return; + } + + datapad.viewChildren(actor, false, false, new Traverser() { + + public void process(SWGObject pcd) { + if (pcd.getAttachment("companionType") != null) { + if (pcd.getAttachment("companionType").equals("PET") && pcd.getAttachment("companion_RefId")!=null) { + long petId = (long) pcd.getAttachment("companion_RefId"); + CreatureObject pet = (CreatureObject)core.objectService.getObject(petId); + + AIActor aiActor = (AIActor) pet.getAttachment("AI"); + aiActor.destroyActor(); + + actor.setCalledPet(null); + + core.objectService.destroyObject(petId); + pcd.setAttachment("companion_RefId",null); + player.setPet(0L); + } + } + } + }); + } + + 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; + } + + PlayerObject player = (PlayerObject) actor.getSlottedObject("ghost"); + if (player.getPet()!=0L) + 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 pet = (CreatureObject) core.objectService.createObject(petTemplate, actor.getPlanet()); + + + CreatureObject pet = null; + +// pet.setOptions(Options.MOUNT | Options.ATTACKABLE, true); +// + + +// + //pcd.setAttachment("companionId", pet.getObjectID()); + + pcd.setAttachment("companionType", "PET"); + pcd.setAttachment("companionTemplate", petTemplate); +// + //pcd.getSlottedObject("inventory").add(pet); // yields null pointer error, pcd has no inv slot +// + 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); + } + + public void tame(CreatureObject actor, CreatureObject target) { + DevLog.debugout("Charon", "Pet AI", "Tame called."); + + if (actor.getCalledPet()!=null){ + actor.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:too_many"), DisplayType.Broadcast); + return; + } + + Thread tameThread = new Thread() { + public void run() { + try { + boolean attacking = false; + AIActor aiActor = (AIActor) target.getAttachment("AI"); + target.setAttachment("IsBeingTamed",true); + //actor.sendSystemMessage("Don't be scared.", DisplayType.Broadcast); + OutOfBand oob = OutOfBand.ProsePackage("Don't be scared."); + NGECore.getInstance().chatService.spatialChat(actor, target, "Don't be scared.", (short)0x0, (short)0x0, 1, oob); + Thread.sleep(4000); + //actor.sendSystemMessage("Steady.", DisplayType.Broadcast); + OutOfBand oob2 = OutOfBand.ProsePackage("Steady."); + NGECore.getInstance().chatService.spatialChat(actor, target, "Steady.", (short)0x0, (short)0x0, 1, oob2); + Thread.sleep(5000); + + // Chance to attack + float attackChance = new Random().nextFloat(); + if (attackChance<0.25){ + attacking = true; + target.setAttachment("tamed",null); + target.setAttachment("radial_filename", "npc/untamable"); + aiActor.setFollowObject(actor); + aiActor.addDefender(actor); + target.setAttachment("IsBeingTamed",null); + if (target.getPosture()==14) + return; + } + //actor.sendSystemMessage("Don't bite me.", DisplayType.Broadcast); + OutOfBand oob3 = OutOfBand.ProsePackage("Don't bite me."); + NGECore.getInstance().chatService.spatialChat(actor, target, "Don't bite me.", (short)0x0, (short)0x0, 1, oob3); + Thread.sleep(3000); + // Chance to attack + attackChance = new Random().nextFloat(); + if (attackChance<0.45 || attacking){ + if (target.getPosture()==14) + return; + attacking = true; + target.setAttachment("tamed",null); + aiActor.setFollowObject(actor); + aiActor.addDefender(actor); + actor.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:too_hard"), DisplayType.Broadcast); + target.setAttachment("radial_filename", "npc/untamable"); + target.setAttachment("IsBeingTamed",null); + return; + } + // Result of taming + float tamingResult = new Random().nextFloat(); + DevLog.debugout("Charon", "Pet AI", "tamingResult " + tamingResult); + if (tamingResult<0.5){ + if (target.getPosture()==14) + return; + actor.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:device_added"), DisplayType.Broadcast); + String pcdTemplate = "object/intangible/pet/shared_pet_control.iff"; + SWGObject pcd = core.objectService.createObject(pcdTemplate, actor.getPlanet()); + if (pcd == null) { + return; + } + SWGObject datapad = actor.getSlottedObject("datapad"); + if (datapad == null) { + return; + } + pcd.setAttachment("companion_RefId", target.getObjectID()); + datapad.add(pcd); + + if (target.getOption(Options.AGGRESSIVE)) + target.removeOption(Options.AGGRESSIVE); + + target.setAttachment("tamed", 1); + + actor.setCalledPet(target); + target.setFaction(actor.getFaction()); + target.setFactionStatus(actor.getFactionStatus()); + target.setOwnerId(actor.getObjectID()); + target.setAttachment("radial_filename", "npc/pet_radial"); + target.setAttachment("radial_filename", "npc/pet_radial"); + + aiActor.cancelAggro(); + aiActor.removeDefender(actor); // Make sure tamer is no enemy anymore + aiActor.setFollowObject(actor); + aiActor.setCurrentState(new FollowState()); + target.setAttachment("IsBeingTamed",null); + } else { + actor.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:too_hard"), DisplayType.Broadcast); + } + + Thread.currentThread().interrupt(); + + } catch(InterruptedException v) { + System.out.println(v); + Thread.currentThread().interrupt(); // very important + } + } + }; + tameThread.start(); + + } + +} diff --git a/src/services/playercities/PlayerCity.java b/src/services/playercities/PlayerCity.java index 168ab0b5..7b64eb29 100644 --- a/src/services/playercities/PlayerCity.java +++ b/src/services/playercities/PlayerCity.java @@ -25,17 +25,22 @@ import java.io.Serializable; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; +import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.Vector; import java.util.concurrent.ConcurrentHashMap; +import org.apache.mina.util.ConcurrentHashSet; + import net.engio.mbassy.listener.Handler; import resources.common.OutOfBand; import resources.common.ProsePackage; import resources.common.collidables.CollidableCircle; import resources.common.collidables.AbstractCollidable.EnterEvent; import resources.common.collidables.AbstractCollidable.ExitEvent; +import resources.datatables.Citizenship; import resources.datatables.CivicStructures; import resources.objects.building.BuildingObject; import resources.objects.creature.CreatureObject; @@ -80,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; @@ -106,11 +112,10 @@ public class PlayerCity implements Serializable { private boolean shuttlePort = false; private boolean registered = false; private boolean zoningEnabled = false; - private boolean electionLocked = false; // election is locked in third and final week private transient CollidableCircle area; private long cityNameChangeCooldown; private long cityTreasuryWithdrawalCooldown; - + //public static final long cityUpdateSpan = 7*86400*1000; public static final long cityUpdateSpan = 100*1000; //public static final long cityUpdateSpan = 86400*1000; @@ -119,13 +124,14 @@ public class PlayerCity implements Serializable { //public static final long legislationPeriod = 21*86400*1000; public static final long legislationPeriod = 100*1000; - private Vector placedStructures = new Vector(); - private Vector citizens = new Vector(); + private Set placedStructures = new ConcurrentHashSet(); + private Set citizens = new ConcurrentHashSet(); private Map electionList = new ConcurrentHashMap(); private Map mayoralVotes = new ConcurrentHashMap(); // Key = voter id Value = candidate id - private Vector cityBanList = new Vector(); - private Vector militiaList = new Vector(); - private Vector foundersList = new Vector(); + 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() {} @@ -150,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). @@ -170,12 +176,153 @@ public class PlayerCity implements Serializable { } public void processElection() { - // ToDo: handle everything - long winnerID = mayorID; - mayorID = winnerID; - setNextElectionDate(System.currentTimeMillis()+legislationPeriod); + + if(getNextElectionDate() > System.currentTimeMillis()) + return; + + NGECore core = NGECore.getInstance(); + + int highestVoteAmount = 0; + long winnerId = getMayorID(); + long incumbentId = getMayorID(); + + for(long candidateId : electionList.keySet()) { + CreatureObject candidate = core.objectService.getObject(candidateId) == null ? core.objectService.getCreatureFromDB(candidateId) : (CreatureObject) core.objectService.getObject(candidateId); + if(candidate == null || !isCitizen(candidateId)) + continue; + if(electionList.get(candidateId) > highestVoteAmount) { + winnerId = candidateId; + highestVoteAmount = electionList.get(candidateId); + } + } + + setMayorID(winnerId); + electionList.clear(); + mayoralVotes.clear(); + setElectionTime(); + CreatureObject mayor = core.objectService.getObject(getMayorID()) == null ? core.objectService.getCreatureFromDB(getMayorID()) : (CreatureObject) core.objectService.getObject(getMayorID()); + if(mayor == null) + return; + boolean incumbentWin = winnerId == incumbentId; + if(incumbentWin) + sendIncumbentWinMail(mayor); + else { + sendNewMayorWinMail(mayor); + sendIncumbentLooseMail(incumbentId, mayor.getCustomName()); + } + sendElectionMail(incumbentWin, mayor.getCustomName()); + + if(!incumbentWin) + transferStructuresToNewMayor(incumbentId); } + private void transferStructuresToNewMayor(long oldMayorId) { + NGECore core = NGECore.getInstance(); + + for(long structureId : new HashSet(getPlacedStructures())) { + BuildingObject building = (BuildingObject) core.objectService.getObject(structureId); + if(building == null) + continue; + building.setAttachment("structureOwner", getMayorID()); + } + + BuildingObject cityHall = (BuildingObject) core.objectService.getObject(cityHallId); + CreatureObject incumbent = core.objectService.getObject(oldMayorId) == null ? core.objectService.getCreatureFromDB(oldMayorId) : (CreatureObject) core.objectService.getObject(oldMayorId); + CreatureObject mayor = core.objectService.getObject(getMayorID()) == null ? core.objectService.getCreatureFromDB(getMayorID()) : (CreatureObject) core.objectService.getObject(getMayorID()); + if(cityHall == null || mayor == null) + return; + if(incumbent != null) { + incumbent.setAttachment("residentBuilding", null); + if(core.objectService.getObject(oldMayorId) == null) + core.objectService.persistObject(oldMayorId, incumbent, core.getSWGObjectODB()); + } + cityHall.setResidency(false); + core.housingService.declareResidency(mayor, cityHall); + if(core.objectService.getObject(getMayorID()) == null) + core.objectService.persistObject(getMayorID(), mayor, core.getSWGObjectODB()); + + } + + private void sendElectionMail(boolean incumbentWin, String mayorName) { + Set citizenList = getCitizens(); + NGECore core = NGECore.getInstance(); + CreatureObject mayor = core.objectService.getObject(getMayorID()) == null ? core.objectService.getCreatureFromDB(getMayorID()) : (CreatureObject) core.objectService.getObject(getMayorID()); + if(mayor == null) + return; + for (long citizen : citizenList){ + CreatureObject citizenObject = core.objectService.getObject(citizen) == null ? core.objectService.getCreatureFromDB(citizen) : (CreatureObject) core.objectService.getObject(citizen); + if(citizenObject == null) + continue; + Mail actorMail = new Mail(); + actorMail.setMailId(NGECore.getInstance().chatService.generateMailId()); + actorMail.setRecieverId(citizen); + actorMail.setStatus(Mail.NEW); + actorMail.setTimeStamp((int) (new Date().getTime() / 1000)); + actorMail.setSubject("@city/city:public_election_subject"); + actorMail.setSenderName("@city/city:new_city_from"); + if(incumbentWin) + actorMail.addProseAttachment(new ProsePackage("@city/city:public_election_inc_body", "TT", getCityName())); + else + actorMail.addProseAttachment(new ProsePackage("@city/city:public_election_body", "TT", getCityName(), "TO", mayor.getCustomName())); + + NGECore.getInstance().chatService.storePersistentMessage(actorMail); + if (citizenObject.getClient() != null) + NGECore.getInstance().chatService.sendPersistentMessageHeader(citizenObject.getClient(), actorMail); + + } + } + + private void sendIncumbentLooseMail(long incumbentId, String mayorName) { + NGECore core = NGECore.getInstance(); + CreatureObject incumbent = core.objectService.getObject(incumbentId) == null ? core.objectService.getCreatureFromDB(incumbentId) : (CreatureObject) core.objectService.getObject(incumbentId); + if(incumbent == null) + return; + Mail actorMail = new Mail(); + actorMail.setMailId(NGECore.getInstance().chatService.generateMailId()); + actorMail.setRecieverId(incumbentId); + actorMail.setStatus(Mail.NEW); + actorMail.setTimeStamp((int) (new Date().getTime() / 1000)); + actorMail.setSubject("@city/city:election_incumbent_lost_subject"); + actorMail.setSenderName("@city/city:new_city_from"); + actorMail.addProseAttachment(new ProsePackage("@city/city:election_incumbent_lost_body", "TO", getCityName(), "TT", mayorName)); + + NGECore.getInstance().chatService.storePersistentMessage(actorMail); + if (incumbent.getClient() != null) + NGECore.getInstance().chatService.sendPersistentMessageHeader(incumbent.getClient(), actorMail); + + } + + private void sendNewMayorWinMail(CreatureObject mayor) { + Mail actorMail = new Mail(); + actorMail.setMailId(NGECore.getInstance().chatService.generateMailId()); + actorMail.setRecieverId(mayor.getObjectID()); + actorMail.setStatus(Mail.NEW); + actorMail.setTimeStamp((int) (new Date().getTime() / 1000)); + actorMail.setSubject("@city/city:election_new_mayor_subject"); + actorMail.setSenderName("@city/city:new_city_from"); + actorMail.addProseAttachment(new ProsePackage("@city/city:election_new_mayor_body", "TO", getCityName(), "TT", mayor.getCustomName())); + + NGECore.getInstance().chatService.storePersistentMessage(actorMail); + if (mayor.getClient() != null) + NGECore.getInstance().chatService.sendPersistentMessageHeader(mayor.getClient(), actorMail); + + } + + private void sendIncumbentWinMail(CreatureObject mayor) { + Mail actorMail = new Mail(); + actorMail.setMailId(NGECore.getInstance().chatService.generateMailId()); + actorMail.setRecieverId(mayor.getObjectID()); + actorMail.setStatus(Mail.NEW); + actorMail.setTimeStamp((int) (new Date().getTime() / 1000)); + actorMail.setSubject("@city/city:election_incumbent_win_subject"); + actorMail.setSenderName("@city/city:new_city_from"); + actorMail.addProseAttachment(new ProsePackage("@city/city:election_incumbent_win_body", "TO", getCityName(), "TT", mayor.getCustomName())); + + NGECore.getInstance().chatService.storePersistentMessage(actorMail); + if (mayor.getClient() != null) + NGECore.getInstance().chatService.sendPersistentMessageHeader(mayor.getClient(), actorMail); + } + public void processCityUpdate() { // has something changed? System.out.println("processCityUpdate for " + cityName); @@ -192,7 +339,7 @@ public class PlayerCity implements Serializable { if(getRank() != METROPOLIS && citizensPerRank[currentRank] <= censusResult) expandCity(); } - + processElection(); NGECore core = NGECore.getInstance(); // collect taxes if(core.objectService.getObject(cityHallId) == null) @@ -221,7 +368,6 @@ public class PlayerCity implements Serializable { demolishHighRankStructures(); calculateAndPayMaintenance(); core.playerCityService.schedulePlayerCityUpdate(this, cityUpdateSpan); - setNextCityUpdate(System.currentTimeMillis()+cityUpdateSpan); } public void contractCity() { @@ -392,8 +538,8 @@ public class PlayerCity implements Serializable { public boolean checkFoundationSuccess() { - Vector founders = getFoundersList(); - Vector citizenList = getCitizens(); + Set founders = getFoundersList(); + Set citizenList = getCitizens(); int founderCitizenCount = 0; NGECore core = NGECore.getInstance(); for (long founderId : founders){ @@ -430,7 +576,7 @@ public class PlayerCity implements Serializable { sendMaintenanceMail(maintAmount); } - private int getSpecializationMaintenance() { + public int getSpecializationMaintenance() { switch(specialization) { @@ -571,13 +717,13 @@ public class PlayerCity implements Serializable { GCW_Alignment = gCW_Alignment; } - public Vector getPlacedStructures() { + public Set getPlacedStructures() { synchronized(placedStructures){ return placedStructures; } } - public void setPlacedStructures(Vector placedStructures) { + public void setPlacedStructures(Set placedStructures) { synchronized(placedStructures){ this.placedStructures = placedStructures; } @@ -589,13 +735,13 @@ public class PlayerCity implements Serializable { } } - public Vector getCitizens() { + public Set getCitizens() { synchronized(citizens){ return citizens; } } - public void setCitizens(Vector citizens) { + public void setCitizens(Set citizens) { synchronized(citizens){ this.citizens = citizens; } @@ -615,6 +761,14 @@ public class PlayerCity implements Serializable { CreatureObject citizenObject = core.objectService.getObject(citizen) == null ? core.objectService.getCreatureFromDB(citizen) : (CreatureObject) core.objectService.getObject(citizen); if(citizenObject == null) return; + citizenObject.setAttachment("residentCity", getCityID()); + citizenObject.getPlayerObject().setHome(getCityName()); + if(getMayorID() == citizenObject.getObjectID()) + citizenObject.getPlayerObject().setCitizenship(Citizenship.Mayor); + else + citizenObject.getPlayerObject().setCitizenship(Citizenship.Citizen); + if(core.objectService.getObject(citizen) == null) + core.objectService.persistObject(citizen, citizenObject, core.getSWGObjectODB()); if(sendMail) { sendNewCitizenMailAll(citizenObject); sendNewCitizenMail(citizenObject); @@ -628,6 +782,12 @@ public class PlayerCity implements Serializable { CreatureObject citizenObject = core.objectService.getObject(citizen) == null ? core.objectService.getCreatureFromDB(citizen) : (CreatureObject) core.objectService.getObject(citizen); if(citizenObject == null) return; + citizenObject.getPlayerObject().setHome(""); + citizenObject.getPlayerObject().setCitizenship(Citizenship.Homeless); + citizenObject.setAttachment("residentCity", null); + if(core.objectService.getObject(citizen) == null) + core.objectService.persistObject(citizen, citizenObject, core.getSWGObjectODB()); + if(sendMail) { sendCitizenLeftMailAll(citizenObject); } @@ -657,11 +817,11 @@ public class PlayerCity implements Serializable { this.nextCityUpdate = nextCityUpdate; } - public Vector getCityBanList() { + public Set getCityBanList() { return cityBanList; } - public void setCityBanList(Vector cityBanList) { + public void setCityBanList(Set cityBanList) { this.cityBanList = cityBanList; } @@ -690,19 +850,19 @@ public class PlayerCity implements Serializable { area.setRadius(cityRadius); } - public Vector getMilitiaList() { + public Set getMilitiaList() { return militiaList; } - public void setMilitiaList(Vector militiaList) { + public void setMilitiaList(Set militiaList) { this.militiaList = militiaList; } - public Vector getFoundersList() { + public Set getFoundersList() { return foundersList; } - public void setFoundersList(Vector foundersList) { + public void setFoundersList(Set foundersList) { this.foundersList = foundersList; } @@ -805,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() { @@ -822,7 +979,7 @@ public class PlayerCity implements Serializable { public void sendSpecUpdateMail(int cityID) { // city_version_update_subject_4 // city_version_update_body_4 - Vector citizenList = getCitizens(); + Set citizenList = getCitizens(); NGECore core = NGECore.getInstance(); for (long citizen : citizenList){ CreatureObject citizenObject = core.objectService.getObject(citizen) == null ? core.objectService.getCreatureFromDB(citizen) : (CreatureObject) core.objectService.getObject(citizen); @@ -863,7 +1020,7 @@ public class PlayerCity implements Serializable { public void sendNewCitizenMailAll(CreatureObject newCitizen) { - Vector citizenList = getCitizens(); + Set citizenList = getCitizens(); NGECore core = NGECore.getInstance(); for (long citizen : citizenList){ CreatureObject citizenObject = core.objectService.getObject(citizen) == null ? core.objectService.getCreatureFromDB(citizen) : (CreatureObject) core.objectService.getObject(citizen); @@ -908,7 +1065,7 @@ public class PlayerCity implements Serializable { public void sendCitizenLeftMailAll(CreatureObject newCitizen) { - Vector citizenList = getCitizens(); + Set citizenList = getCitizens(); NGECore core = NGECore.getInstance(); for (long citizen : citizenList){ CreatureObject citizenObject = core.objectService.getObject(citizen) == null ? core.objectService.getCreatureFromDB(citizen) : (CreatureObject) core.objectService.getObject(citizen); @@ -1208,7 +1365,7 @@ public class PlayerCity implements Serializable { } public void sendTreasuryWithdrawalMail(CreatureObject mayor, int amount, String reason) { - Vector citizenList = getCitizens(); + Set citizenList = getCitizens(); NGECore core = NGECore.getInstance(); for (long citizen : citizenList){ CreatureObject citizenObject = core.objectService.getObject(citizen) == null ? core.objectService.getCreatureFromDB(citizen) : (CreatureObject) core.objectService.getObject(citizen); @@ -1268,15 +1425,11 @@ public class PlayerCity implements Serializable { } public boolean isElectionLocked() { - return electionLocked; - } - - public void setElectionLocked(boolean electionLocked) { - this.electionLocked = electionLocked; + return (nextElectionDate - System.currentTimeMillis()) < cityUpdateSpan; // last/third week = election locked } public void sendCandidateRegisteredMail(CreatureObject candidate) { - Vector citizenList = getCitizens(); + Set citizenList = getCitizens(); NGECore core = NGECore.getInstance(); for (long citizen : citizenList) { if(citizen == candidate.getObjectID()) @@ -1302,7 +1455,7 @@ public class PlayerCity implements Serializable { } public void sendCandidateUnregisteredMail(CreatureObject candidate) { - Vector citizenList = getCitizens(); + Set citizenList = getCitizens(); NGECore core = NGECore.getInstance(); for (long citizen : citizenList) { if(citizen == candidate.getObjectID()) @@ -1327,5 +1480,16 @@ 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 99be0694..298dc0d8 100644 --- a/src/services/playercities/PlayerCityService.java +++ b/src/services/playercities/PlayerCityService.java @@ -117,7 +117,7 @@ public class PlayerCityService implements INetworkDispatch { return id; } - private boolean doesCityNameExist(String name) { + public boolean doesCityNameExist(String name) { return playerCities.stream().map(PlayerCity::getCityName).filter(n -> n.equalsIgnoreCase(name)).findFirst().isPresent() || core.terrainService.getClientRegions().stream().map(ClientRegion::getName).filter(n -> n.equalsIgnoreCase(name)).findFirst().isPresent(); } @@ -166,6 +166,7 @@ public class PlayerCityService implements INetworkDispatch { PlayerCity playerCity = addNewPlayerCity(actor, cityHall); playerCity.setCityName(name); playerCity.addNewStructure(cityHall.getObjectID()); + playerCity.setElectionTime(); PlayerCityService.this.schedulePlayerCityUpdate(playerCity, PlayerCity.newCityGraceSpan); cityHall.setAttachment("structureCity", playerCity.getCityID()); actor.setAttachment("residentCity", playerCity.getCityID()); @@ -407,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(); @@ -571,8 +573,9 @@ public class PlayerCityService implements INetworkDispatch { actor.sendSystemMessage(OutOfBand.ProsePackage("@city/city:vote_placed", "TO", candidate.getCustomName()), (byte) 0); }); + core.suiService.openSUIWindow(window); } - + } diff --git a/src/services/resources/ResourceService.java b/src/services/resources/ResourceService.java index 79c1e38a..83e26f90 100644 --- a/src/services/resources/ResourceService.java +++ b/src/services/resources/ResourceService.java @@ -116,9 +116,9 @@ public class ResourceService implements INetworkDispatch { // } else { ODBCursor cursor = core.getResourceRootsODB().getCursor(); if(!cursor.hasNext()) { - createCollections(); - createCollections2(); - createCollections3(); + //createCollections(); + //createCollections2(); + //createCollections3(); } // } core.commandService.registerCommand("harvestcorpse"); @@ -221,6 +221,7 @@ public class ResourceService implements INetworkDispatch { return object; } + /* public void createCollections(){ // For testing purposes the Hashtable is being put together here @@ -4773,9 +4774,9 @@ public class ResourceService implements INetworkDispatch { resourceRootTable.put(294, resourceRoot); nabooPool4Roots.addElement(resourceRoot); - } + }*/ //checked until here - public void createCollections2(){ + /*public void createCollections2(){ ResourceRoot resourceRoot = new ResourceRoot(); resourceRoot.setResourceFileName("corn_wild_rori"); @@ -9046,9 +9047,9 @@ public class ResourceService implements INetworkDispatch { resourceRoot.setMaximalLifeTime(10080000L); resourceRootTable.put(578, resourceRoot); yavinPool4Roots.addElement(resourceRoot); - } + }*/ // checked - public void createCollections3(){ + /*public void createCollections3(){ ResourceRoot resourceRoot = new ResourceRoot(); resourceRoot.setResourceFileName("fiberplast_corellia"); resourceRoot.setResourceClass("Fiberplast"); @@ -10802,7 +10803,7 @@ public class ResourceService implements INetworkDispatch { } - } + }*/ // ToDo: Go through all of this again, Vegetable tubers are double 632 berry 635 double 645 and 647 double 671,672 // 683,84,85,86 all same diff --git a/src/services/spawn/DynamicSpawnArea.java b/src/services/spawn/DynamicSpawnArea.java index 81635232..6ff91997 100644 --- a/src/services/spawn/DynamicSpawnArea.java +++ b/src/services/spawn/DynamicSpawnArea.java @@ -35,6 +35,7 @@ import resources.common.collidables.AbstractCollidable.ExitEvent; import resources.objects.creature.CreatureObject; import services.TerrainService; import services.SimulationService.MoveEvent; +import tools.DevLog; import engine.resources.objects.SWGObject; import engine.resources.scene.Planet; import engine.resources.scene.Point3D; @@ -278,7 +279,7 @@ public class DynamicSpawnArea extends SpawnArea { String template = spawnGroup.getMobiles().get(spawnIndex); MobileTemplate mobileTemplate = NGECore.getInstance().spawnService.getMobileTemplate(template); if (mobileTemplate==null){ - System.out.println("mobileTemplate==null for template " + template); + DevLog.debugout("Charon", "Dynamic Spawn Area", "mobileTemplate==null for template " + template); return null; } diff --git a/src/services/spawn/MobileTemplate.java b/src/services/spawn/MobileTemplate.java index d0cc6c17..7060a877 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(); @@ -58,6 +60,8 @@ public class MobileTemplate implements Cloneable { private int meatAmount, milkAmount, boneAmount, hideAmount; private int respawnTime = 0; private List lootGroups = new ArrayList(); + private String PCDTemplate=""; + private String conversationFileName=""; public Vector getTemplates() { @@ -333,5 +337,37 @@ 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; + } + + public String getPCDTemplate() { + return PCDTemplate; + } + + public void setPCDTemplate(String pCDTemplate) { + PCDTemplate = pCDTemplate; + } + + public String getConversationFileName() { + return conversationFileName; + } + + public void setConversationFileName(String conversationFileName) { + this.conversationFileName = conversationFileName; + } } diff --git a/src/services/spawn/SpawnService.java b/src/services/spawn/SpawnService.java index 7de14991..b4b60c52 100644 --- a/src/services/spawn/SpawnService.java +++ b/src/services/spawn/SpawnService.java @@ -38,6 +38,7 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; +import resources.common.collidables.CollidableBox; import resources.common.collidables.CollidableCircle; import resources.datatables.Options; import resources.datatables.PvpStatus; @@ -48,6 +49,7 @@ import resources.objects.tangible.TangibleObject; import resources.objects.weapon.WeaponObject; import services.ai.AIActor; import services.ai.LairActor; +import engine.resources.common.Stf; import engine.resources.container.StaticContainerPermissions; import engine.resources.scene.Planet; import engine.resources.scene.Point3D; @@ -105,11 +107,20 @@ public class SpawnService { creature.setLootGroups(mobileTemplate.getLootGroups()); creature.setOptionsBitmask(mobileTemplate.getOptionsBitmask()); + if (mobileTemplate.getConversationFileName().length()>0) + creature.setAttachment("conversationFile",mobileTemplate.getConversationFileName()); + 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); @@ -185,7 +196,6 @@ public class SpawnService { creature.setMaxAction((int) (400 + level * 134)); creature.setAction((int) (400 + level * 134)); } else { - System.out.println("HERE"); creature.setMaxHealth(customHealth); creature.setHealth(customHealth); creature.setMaxAction((int) (level * 128)); @@ -206,6 +216,176 @@ public class SpawnService { + if(cell == null) { + core.simulationService.add(creature, x, z, true); + } else { + creature.getPosition().setCell(cell); + cell.add(creature); + } + return creature; + } + + public CreatureObject spawnCreatureBaby(String template, long objectId, String planetName, long cellId, float x, float y, float z, float qW, float qX, float qY, float qZ, short level) { + + Planet planet = core.terrainService.getPlanetByName(planetName); + MobileTemplate mobileTemplate = mobileTemplates.get(template); + if(planet == null || mobileTemplate == null) + return null; + + + + CellObject cell = null; + + if(cellId != 0) { + cell = (CellObject) core.objectService.getObject(cellId); + if(cell == null) + return null; + } + + CreatureObject creature = (CreatureObject) core.objectService.createObject(mobileTemplate.getTemplates().get(new Random().nextInt(mobileTemplate.getTemplates().size())), objectId, planet, new Point3D(x, y, z), new Quaternion(qW, qX, qY, qZ), null, (objectId > 0), true); + + if(creature == null) + return null; + + TangibleObject inventory = (TangibleObject) core.objectService.createObject("object/tangible/inventory/shared_character_inventory.iff", creature.getPlanet()); + inventory.setContainerPermissions(StaticContainerPermissions.STATIC_CONTAINER_PERMISSIONS); + + + /*if(mobileTemplate.getCustomWeapon() != null) { + creature.addObjectToEquipList(mobileTemplate.getCustomWeapon()); + creature.add(mobileTemplate.getCustomWeapon()); + creature.setWeaponId(mobileTemplate.getCustomWeapon().getObjectID()); + }*/ + + if(mobileTemplate.getLootGroups() != null && !mobileTemplate.getLootGroups().isEmpty()) + creature.setLootGroups(mobileTemplate.getLootGroups()); + + creature.setOptionsBitmask(mobileTemplate.getOptionsBitmask()); + creature.setFaction(mobileTemplate.getFaction()); + creature.setFactionStatus(mobileTemplate.getFactionStatus()); + creature.setPvpBitmask(mobileTemplate.getPvpBitmask()); + + if (mobileTemplate.getCustomName()==null){ +// //creature.setStfFilename("mob/creature_names"); // TODO: set other STFs for NPCs other than creatures -> DONE + if (mobileTemplate.getStfFilename()!=null){ +// System.out.println("S4"); +// Stf stf = new Stf(mobileTemplate.getStfFilename()); +// System.out.println("S5"); +// String stfValue = stf.getStfValue(); +// System.out.println("S6"); +// creature.setCustomName(stfValue+" (baby)"); +// + System.out.println("STFNAMECHANGE"); + } + if (mobileTemplate.getCreatureName()!=null){ + String creatureName = mobileTemplate.getCreatureName(); + Stf stf = new Stf("mob/creature_names", 0, creatureName); + String stfValue = stf.getStfValue(); + creature.setCustomName(stfValue+" (baby)"); + } + + } else { + creature.setCustomName(mobileTemplate.getCustomName()+" (baby)"); // For cases where no STF name can be found! + } + creature.setHeight(.25F*mobileTemplate.getScale()); + int difficulty = mobileTemplate.getDifficulty(); + creature.setDifficulty((byte) difficulty); + +// if(level != -1) +// creature.setLevel(level); +// else { +// if (mobileTemplate.getLevel()!=0){ +// level = mobileTemplate.getLevel(); +// creature.setLevel(level); +// } else { +// level = -1; +// } +// } + + creature.setLevel((short)1); + + if (mobileTemplate.getMinLevel()!=0 && mobileTemplate.getMaxLevel()!=0 && level == -1){ + level = (short) (mobileTemplate.getMinLevel() + (new Random().nextInt(mobileTemplate.getMaxLevel()-mobileTemplate.getMinLevel()))); + creature.setLevel(level); + } + + WeaponObject defaultWeapon = null; + Vector weaponTemplates = mobileTemplate.getWeaponTemplateVector(); + int rnd = 0; + + if (weaponTemplates.size() > 0 ) + rnd = new Random().nextInt(weaponTemplates.size()); + + if (weaponTemplates.size() == 0){ + defaultWeapon = (WeaponObject) core.objectService.createObject("object/weapon/creature/shared_creature_default_weapon.iff", creature.getPlanet()); + defaultWeapon.setAttackSpeed(1.0F); + defaultWeapon.setWeaponType(WeaponType.UNARMED); + defaultWeapon.setDamageType("kinetic"); + + defaultWeapon.setMaxRange(5); + } else { + defaultWeapon = (WeaponObject) core.objectService.createObject(weaponTemplates.get(rnd).getTemplate(), creature.getPlanet()); + defaultWeapon.setAttackSpeed(weaponTemplates.get(rnd).getAttackSpeed()); + defaultWeapon.setWeaponType(weaponTemplates.get(rnd).getWeaponType()); + defaultWeapon.setMaxRange(weaponTemplates.get(rnd).getMaxRange()); + defaultWeapon.setDamageType(weaponTemplates.get(rnd).getDamageType()); + } + + if (weaponTemplates.get(rnd).getMinDamage() != 0 && weaponTemplates.get(rnd).getMaxDamage() != 0) { + defaultWeapon.setMaxDamage(weaponTemplates.get(rnd).getMinDamage()); + defaultWeapon.setMinDamage(weaponTemplates.get(rnd).getMaxDamage()); + } else { + defaultWeapon.setMaxDamage(creature.getLevel() * 24); + defaultWeapon.setMinDamage(creature.getLevel() * 22); + } + + creature.addObjectToEquipList(defaultWeapon); + creature.add(defaultWeapon); + creature.setWeaponId(defaultWeapon.getObjectID()); + creature.addObjectToEquipList(inventory); + creature.add(inventory); + + int customHealth = mobileTemplate.getHealth(); + if(difficulty > 0 && customHealth == 0) { + if(difficulty == 1) { + creature.setMaxHealth((int) (400 + level * 134 * 2.5)); + creature.setHealth((int) (400 + level * 134 * 2.5)); + creature.setMaxAction((int) (400 + level * 134 * 2.5)); + creature.setAction((int) (400 + level * 134 * 2.5)); + } else if(difficulty == 2) { + creature.setMaxHealth((int) (400 + level * 134 * 10)); + creature.setHealth((int) (400 + level * 134 * 10)); + creature.setMaxAction((int) (400 + level * 134 * 10)); + creature.setAction((int) (400 + level * 134 * 10)); + } + } else if(difficulty <= 0 && customHealth == 0) { + creature.setMaxHealth((int) (400 + level * 134)); + creature.setHealth((int) (400 + level * 134)); + creature.setMaxAction((int) (400 + level * 134)); + creature.setAction((int) (400 + level * 134)); + } else { + creature.setMaxHealth(customHealth); + creature.setHealth(customHealth); + creature.setMaxAction((int) (level * 128)); + creature.setAction((int) (level * 128)); + } + + if(creature.getLevel() > 16) { + int armor = (creature.getLevel() - 16) * 87; + if(armor > 6000) + armor = 6000; + core.skillModService.addSkillMod(creature, "expertise_innate_protection_all", armor); + } + + // Baby AI + creature.setAttachment("tamed", 0); + AIActor actor = new AIActor(creature, creature.getPosition(), scheduler); + creature.setAttachment("AI", actor); + creature.setAttachment("radial_filename", "npc/untamed"); + actor.setMobileTemplate(mobileTemplate); + + + if(cell == null) { core.simulationService.add(creature, x, z, true); } else { @@ -241,6 +421,13 @@ public class SpawnService { return spawnCreature(mobileTemplate, planetName, cellId, x, core.terrainService.getHeight(planet.getID(), x, z), z, 1, 0, 0, 0, level); } + public CreatureObject spawnCreatureBaby(String mobileTemplate, String planetName, long cellId, float x, float y, float z, short level) { + return spawnCreatureBaby(mobileTemplate, planetName, cellId, x, y, z, 1, 0, 0, 0, level); + } + + public CreatureObject spawnCreatureBaby(String template, String planetName, long cellId, float x, float y, float z, float qW, float qX, float qY, float qZ, short level) { + return spawnCreatureBaby(template, 0L, planetName, cellId, x, y, z, qW, qX, qY, qZ, level); + } public LairActor spawnLair(String lairSpawnTemplate, Planet planet, Point3D position, short level) { @@ -373,6 +560,7 @@ public class SpawnService { } } + // Circular LairSpawnArea public void addLairSpawnArea(String lairGroup, float x, float z, float radius, String planetName) { LairGroupTemplate lairGroupTemplate = lairGroupTemplates.get(lairGroup); Planet planet = core.terrainService.getPlanetByName(planetName); @@ -384,6 +572,19 @@ public class SpawnService { core.simulationService.addCollidable(collidableCircle, x, z); } + // Rectangular LairSpawnArea + public void addLairSpawnArea(String lairGroup, float x, float z, float width, float height, String planetName) { + LairGroupTemplate lairGroupTemplate = lairGroupTemplates.get(lairGroup); + Planet planet = core.terrainService.getPlanetByName(planetName); + if(lairGroupTemplate == null || planet == null) + return; + CollidableBox collidableBox = new CollidableBox(new Point3D(x, 0, z), width, height, planet); + LairSpawnArea lairSpawnArea = new LairSpawnArea(planet, collidableBox, lairGroupTemplate); + spawnAreas.get(planet).add(lairSpawnArea); + core.simulationService.addCollidable(collidableBox, x, z); + } + + // Circular DynamicSpawnArea public void addDynamicSpawnArea(String dynamicGroup, float x, float z, float radius, String planetName) { DynamicSpawnGroup dynamicGroupTemplate = dynamicGroupTemplates.get(dynamicGroup); Planet planet = core.terrainService.getPlanetByName(planetName); @@ -395,6 +596,19 @@ public class SpawnService { core.simulationService.addCollidable(collidableCircle, x, z); } + // Rectangular DynamicSpawnArea + public void addDynamicSpawnArea(String dynamicGroup, float x, float z, float width, float height, String planetName) { + DynamicSpawnGroup dynamicGroupTemplate = dynamicGroupTemplates.get(dynamicGroup); + Planet planet = core.terrainService.getPlanetByName(planetName); + if(dynamicGroupTemplate == null || planet == null) + return; + CollidableBox collidableBox = new CollidableBox(new Point3D(x, 0, z), width, height, planet); + DynamicSpawnArea dynamicSpawnArea = new DynamicSpawnArea(planet, collidableBox, dynamicGroupTemplate); + spawnAreas.get(planet).add(dynamicSpawnArea); + core.simulationService.addCollidable(collidableBox, x, z); + } + + // Circular DynamicSpawnArea with Vector argument public void addDynamicSpawnArea(Vector dynamicGroups, float x, float z, float radius, String planetName) { Vector dynamicSpawnGroups = new Vector(); for (String template : dynamicGroups){ @@ -414,6 +628,27 @@ public class SpawnService { core.simulationService.addCollidable(collidableCircle, x, z); } + // Rectangular DynamicSpawnArea with Vector argument + public void addDynamicSpawnArea(Vector dynamicGroups, float x, float z, float width, float height, String planetName) { + Vector dynamicSpawnGroups = new Vector(); + for (String template : dynamicGroups){ + if (dynamicGroupTemplates.get(template)==null){ + System.err.println("Dynamic Group template " + template +" not found in spawnservice collection!"); + return; + } + dynamicSpawnGroups.add(dynamicGroupTemplates.get(template)); + } + + Planet planet = core.terrainService.getPlanetByName(planetName); + if(dynamicSpawnGroups == null || dynamicSpawnGroups.size() == 0 || planet == null) + return; + CollidableBox collidableBox = new CollidableBox(new Point3D(x, 0, z), width, height, planet); + DynamicSpawnArea dynamicSpawnArea = new DynamicSpawnArea(planet, collidableBox, dynamicSpawnGroups); + spawnAreas.get(planet).add(dynamicSpawnArea); + core.simulationService.addCollidable(collidableBox, x, z); + } + + // Circular MixedSpawnArea public void addMixedSpawnArea(Vector passedGroups, float x, float z, float radius, String planetName) { Vector mixedSpawnGroups = new Vector(); for (String template : passedGroups){ @@ -435,6 +670,29 @@ public class SpawnService { spawnAreas.get(planet).add(dynamicSpawnArea); core.simulationService.addCollidable(collidableCircle, x, z); } + + // Rectangular MixedSpawnArea + public void addMixedSpawnArea(Vector passedGroups, float x, float z, float width, float height, String planetName) { + Vector mixedSpawnGroups = new Vector(); + for (String template : passedGroups){ + if (dynamicGroupTemplates.get(template)!=null){ + mixedSpawnGroups.add(dynamicGroupTemplates.get(template)); + } + if (lairGroupTemplates.get(template)!=null){ + mixedSpawnGroups.add(lairGroupTemplates.get(template)); + } + if(dynamicGroupTemplates.get(template) == null && lairGroupTemplates.get(template)==null) + return; + } + + Planet planet = core.terrainService.getPlanetByName(planetName); + if(mixedSpawnGroups == null || mixedSpawnGroups.size() == 0 || planet == null) + return; + CollidableBox collidableBox = new CollidableBox(new Point3D(x, 0, z), width, height, planet); + MixedSpawnArea dynamicSpawnArea = new MixedSpawnArea(planet, collidableBox, mixedSpawnGroups); + spawnAreas.get(planet).add(dynamicSpawnArea); + core.simulationService.addCollidable(collidableBox, x, z); + } public Map getMobileTemplates() { return mobileTemplates; diff --git a/src/services/sui/SUIService.java b/src/services/sui/SUIService.java index 1fcee751..164f8ef9 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; @@ -84,6 +85,9 @@ public class SUIService implements INetworkDispatch { if(target == null || owner == null) return; +// if (getRadialFilename(target).equals("noradialoptions")) +// return; + if (target instanceof HarvesterObject){ HarvesterObject harvester = (HarvesterObject) target; Vector admins = harvester.getAdminList(); @@ -139,14 +143,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 +191,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()); @@ -199,7 +209,7 @@ public class SUIService implements INetworkDispatch { }); swgOpcodes.put(Opcodes.SuiEventNotification, new INetworkRemoteEvent() { - + @Override public void handlePacket(IoSession session, IoBuffer data) throws Exception { @@ -225,7 +235,7 @@ public class SUIService implements INetworkDispatch { return; PyObject func = window.getFunctionByEventId(suiEvent.getEventType()); - + if(func != null) func.__call__(Py.java2py(owner), Py.java2py(window), Py.java2py(suiEvent.getEventType()), Py.java2py(suiEvent.getReturnList())); @@ -377,6 +387,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 +444,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) diff --git a/src/services/travel/TravelService.java b/src/services/travel/TravelService.java index 74310bf3..a3339eef 100644 --- a/src/services/travel/TravelService.java +++ b/src/services/travel/TravelService.java @@ -27,6 +27,11 @@ import java.util.List; import java.util.Map; import java.util.Vector; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.TimeUnit; + import org.apache.commons.lang3.text.WordUtils; import org.apache.mina.core.buffer.IoBuffer; import org.apache.mina.core.session.IoSession; @@ -47,6 +52,7 @@ import main.NGECore; import resources.common.Console; import resources.common.Opcodes; import resources.common.SpawnPoint; +import resources.datatables.DisplayType; import resources.objects.creature.CreatureObject; import resources.objects.tangible.TangibleObject; import services.playercities.PlayerCity; @@ -61,7 +67,7 @@ public class TravelService implements INetworkDispatch { private NGECore core; private Map> travelMap = new ConcurrentHashMap>(); private Map> fareMap = new ConcurrentHashMap>(); - + public TravelService(NGECore core) { this.core = core; } @@ -375,6 +381,8 @@ public class TravelService implements INetworkDispatch { } + + private void populateTravelFares() { try { DatatableVisitor travelFares = ClientFileManager.loadFile("datatables/travel/travel.iff", DatatableVisitor.class); @@ -423,6 +431,29 @@ public class TravelService implements INetworkDispatch { public Map> getTravelMap() { return this.travelMap; } + + //ITV Despawn + public void checkForItvTimedDespawn(CreatureObject actor, SWGObject object){ + + Executors.newScheduledThreadPool(1).schedule(new Runnable() { + public void run() { + try { + + if (object != null){ + core.objectService.destroyObject(object); + actor.sendSystemMessage("@travel:pickup_timeout", DisplayType.Broadcast); + actor.setAttachment("itv", null); + } + }catch (Exception e) { + e.printStackTrace(); + } + } + }, 30, TimeUnit.SECONDS); + } + + + + @Override public void shutdown() { diff --git a/src/tools/CharonPacketLogger.java b/src/tools/CharonPacketLogger.java new file mode 100644 index 00000000..320676bf --- /dev/null +++ b/src/tools/CharonPacketLogger.java @@ -0,0 +1,63 @@ +package tools; + +import java.util.concurrent.ArrayBlockingQueue; +import java.util.concurrent.BlockingQueue; +import java.nio.file.*; + +public class CharonPacketLogger extends Thread { + private static CharonPacketLogger instance; + + private BlockingQueue itemsToLog = + new ArrayBlockingQueue(100); + + private static final String SHUTDOWN_REQ = "SHUTDOWN"; + private volatile boolean shuttingDown, loggerTerminated; + + public static CharonPacketLogger getLogger() { + return instance; + } + public CharonPacketLogger() { + if (instance!=null) + return; // Singleton + instance = this; + start(); + } + + public void run() { + try { + String item; + while ((item = itemsToLog.take()) != SHUTDOWN_REQ) { + System.out.println(item); + } + } catch (InterruptedException iex) { + } finally { + loggerTerminated = true; + } + } + + public void log(String str) { + if (shuttingDown || loggerTerminated) return; + try { + itemsToLog.put(str); + } catch (InterruptedException iex) { + Thread.currentThread().interrupt(); + throw new RuntimeException("Unexpected interruption"); + } + } + + public void log(String str,Path path) { + if (shuttingDown || loggerTerminated) return; + try { + itemsToLog.put(str); + CharonPacketUtils.appendToLog(str, path); + } catch (InterruptedException iex) { + Thread.currentThread().interrupt(); + throw new RuntimeException("Unexpected interruption"); + } + } + + public void shutDown() throws InterruptedException { + shuttingDown = true; + itemsToLog.put(SHUTDOWN_REQ); + } +} diff --git a/src/tools/CharonPacketUtils.java b/src/tools/CharonPacketUtils.java index 7c091133..08adea22 100644 --- a/src/tools/CharonPacketUtils.java +++ b/src/tools/CharonPacketUtils.java @@ -1,6 +1,17 @@ package tools; +import java.io.BufferedWriter; +import java.io.IOException; import java.io.UnsupportedEncodingException; +import java.nio.charset.Charset; +import java.nio.file.Files; +import java.nio.file.OpenOption; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.StandardOpenOption; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; import main.NGECore; @@ -12,61 +23,77 @@ import org.apache.mina.core.buffer.IoBuffer; public class CharonPacketUtils { - private final static char[] HEX = { - '0', '1', '2', '3', '4', '5', '6', '7', - '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' - }; + private static int loggingSessionID=0; + static Path newFile = Paths.get("src", "PSWG_DEVLOG.log"); + private static boolean writeToFile = false; + private CharonPacketLogger logger; - public static String fromLong(long value) { - char[] hexs; - int i; - int c; + + public static void createLog(){ + + try { + writeToFile = true; + Date date = new Date(); + Calendar cal1 = Calendar.getInstance(); + cal1.setTimeInMillis(System.currentTimeMillis()); + SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-hh-mm-ss"); + String sDate=dateFormat.format(cal1.getTime()); - hexs = new char[16]; - for (i = 0; i < 16; i++) { - c = (int)(value & 0xf); - hexs[16-i-1] = HEX[c]; - value = value >> 4; - } - return new String(hexs); - } - - final protected static char[] hexArray = "0123456789ABCDEF".toCharArray(); - public static String bytesToHex(byte[] bytes) { - char[] hexChars = new char[bytes.length * 2]; - int v; - for ( int j = 0; j < bytes.length; j++ ) { - v = bytes[j] & 0xFF; - hexChars[j * 2] = hexArray[v >>> 4]; - hexChars[j * 2 + 1] = hexArray[v & 0x0F]; - } - return new String(hexChars); + String fileName = "PSWG_PACKETLOG_"+sDate+".log"; + newFile = Paths.get("debuglogs", fileName); + Files.deleteIfExists(newFile); + newFile = Files.createFile(newFile); + createHeader(newFile); + } catch (IOException ex) { + System.out.println("Error creating file"); + } } - public static String byteToHex(byte bytes) { - char[] hexChars = new char[2]; - int v; - - v = bytes & 0xFF; - hexChars[2] = hexArray[v >>> 4]; - hexChars[2 + 1] = hexArray[v & 0x0F]; - - return new String(hexChars); + public static void appendToLog(String content, Path newFile){ + //Writing to file + try(BufferedWriter writer = Files.newBufferedWriter( + newFile, Charset.defaultCharset(),new OpenOption[] {StandardOpenOption.APPEND})){ + writer.append(content); + writer.append("\n"); + writer.flush(); + }catch(IOException exception){ + System.out.println("Error writing to file"); + } } public static void printAnalysis(IoBuffer pack){ + printAnalysis(pack, ""); + } + + public static void printAnalysis(IoBuffer pack, String packetName){ if (!NGECore.PACKET_DEBUG) return; + if (pack==null) + return; + + if (loggingSessionID>0){ + } else { + createLog(); + loggingSessionID++; + } + + + //appendToLog(packetName+" :"); + int hexLineNumber = 0; byte[] packArray = pack.array(); int lineCount = packArray.length/16; int actualIndex = 0; String buffString = ""; String asciiString = ""; + String logString = packetName+" :\n"; for (int lineIndex = 0; lineIndex <= lineCount; lineIndex++) { byte[] ASCIIArray = new byte[16]; + for (int x=0;x<16;x++) + ASCIIArray[x] = 32; + buffString = ""; asciiString = ""; // remaining bytes per line @@ -80,24 +107,78 @@ public class CharonPacketUtils { buffString += " "; else buffString += " "; - buffString += ((Integer.toString( ( packArray[actualIndex] & 0xff ) + 0x100, 16).substring( 1 )).toUpperCase() + ""); + String addString = ((Integer.toString( ( packArray[actualIndex] & 0xff ) + 0x100, 16).substring( 1 )).toUpperCase() + ""); + char character = addString.charAt(0); + if (character==0) + addString = " "; + buffString += addString; if (packArray[actualIndex] < 31 || packArray[actualIndex] == 13) - ASCIIArray[byteColumnIndex] = 32; + ASCIIArray[byteColumnIndex] = 46; else ASCIIArray[byteColumnIndex] = packArray[actualIndex]; + + + if (ASCIIArray[byteColumnIndex]==0) + ASCIIArray[byteColumnIndex]=32; actualIndex++; } try { - asciiString += new String(ASCIIArray, "US-ASCII"); + //asciiString += new String(ASCIIArray, "US-ASCII"); + asciiString += new String(ASCIIArray, "UTF-8"); + } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } - System.out.println(buffString + " " + asciiString); - - + asciiString.replaceAll(" ","."); + String number = Integer.toHexString(hexLineNumber); + if (number.length()<3) + number = "00" + number; + if (number.length()<4) + number = "0" + number; + + String lineNumberString = number + ": "; + hexLineNumber += 0x10; + //System.out.println(lineNumberString + buffString + " " + asciiString); + // if (writeToFile) + // appendToLog(lineNumberString + buffString + " " + asciiString); + + + logString += lineNumberString + buffString + " " + asciiString + "\n"; } - System.out.println("------------------------------------------------------------------------"); + + logString += "\n"; + + if (writeToFile){ + CharonPacketLogger logger = CharonPacketLogger.getLogger(); + logger.log(logString,newFile); + } + + //System.out.println("#########################################################################"); + System.out.println(""); + //if (writeToFile) + // appendToLog(""); + } + + public static void createHeader(Path newFile){ + //Writing to file + try(BufferedWriter writer = Files.newBufferedWriter( + newFile, Charset.defaultCharset(),new OpenOption[] {StandardOpenOption.APPEND})){ + Date date = new Date(); + Calendar cal1 = Calendar.getInstance(); + cal1.setTimeInMillis(System.currentTimeMillis()); + SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-hh:mm:ss"); + String sDate=dateFormat.format(cal1.getTime()); + String developer = System.getProperty("user.name"); + writer.append("*********************************************\n"); + writer.append("**** PROJECTSWG PACKET LOG " + sDate + " ***\n"); + writer.append("*********************************************\n"); + writer.append("DEV: "+developer + "\n"); + writer.append("\n"); + writer.flush(); + }catch(IOException exception){ + System.out.println("Error writing to file"); + } } } diff --git a/src/tools/DevLog.java b/src/tools/DevLog.java new file mode 100644 index 00000000..5a5c1a64 --- /dev/null +++ b/src/tools/DevLog.java @@ -0,0 +1,190 @@ +/******************************************************************************* + * 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 tools; + +import java.io.BufferedWriter; +import java.io.IOException; +import java.nio.charset.Charset; +import java.nio.file.Files; +import java.nio.file.OpenOption; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.StandardOpenOption; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +/** + * @author Charon + */ + +public class DevLog { + + private static int loggingSessionID=0; + private static Map debugEnable = new HashMap(); + static { + debugEnable.put("Charon",0); + debugEnable.put("YourNameHere",0); + } + + private static Map fileEnable = new HashMap(); + static { + fileEnable.put("Charon",0); + fileEnable.put("YourNameHere",0); + } + + + static Path newFile = Paths.get("src", "PSWG_DEVLOG.log"); + //static Path newFile = Paths.get("M:/PSWG/LOGS/PSWG_PacketLog.txt"); + private CharonPacketLogger logger; + + public DevLog(){ + + } + + public static void enableMe(){ + String OS_User = System.getProperty("user.name"); + if (debugEnable.keySet().contains(OS_User)){ + debugEnable.put(OS_User,1); + } + } + + public static void disableMe(){ + String OS_User = System.getProperty("user.name"); + if (debugEnable.keySet().contains(OS_User)){ + debugEnable.put(OS_User,0); + } + } + + public static void enableFileLogging(){ + String OS_User = System.getProperty("user.name"); + if (fileEnable.keySet().contains(OS_User)){ + fileEnable.put(OS_User,1); + } + } + + public static void disableFileLogging(){ + String OS_User = System.getProperty("user.name"); + if (fileEnable.keySet().contains(OS_User)){ + fileEnable.put(OS_User,0); + } + } + + public static boolean isFileLoggingEnabled(String developer){ + if (fileEnable.keySet().contains(developer)){ + if (fileEnable.get(developer)==1){ + return true; + } + } + return false; + } + + public static void debugout(String debugRequester, String testarea, String message){ + String developer = System.getProperty("user.name"); + String logMessage = ""; + if (!debugRequester.equals(developer)) + return; + if (debugEnable.keySet().contains(developer)){ + + if (debugEnable.get(developer)==1){ + logMessage = "Devlog->"+developer+"->"+testarea+"-> "+message; + DevLogQueuer logger = DevLogQueuer.getInstance(); + logger.log(logMessage); + } + } + + if (isFileLoggingEnabled(debugRequester)){ + if (loggingSessionID>0){ + DevLogQueuer logger = DevLogQueuer.getInstance(); + logger.log(logMessage,newFile); + + } else { + createLog(); + DevLogQueuer logger = DevLogQueuer.getInstance(); + logger.log(logMessage,newFile); + loggingSessionID++; + } + } + + } + + public static void createLog(){ + + try { + Date date = new Date(); + Calendar cal1 = Calendar.getInstance(); + cal1.setTimeInMillis(System.currentTimeMillis()); + SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-hh-mm-ss"); + String sDate=dateFormat.format(cal1.getTime()); + + String fileName = "PSWG_DEVLOG_"+sDate+".log"; + newFile = Paths.get("debuglogs", fileName); + Files.deleteIfExists(newFile); + newFile = Files.createFile(newFile); + createHeader(newFile); + } catch (IOException ex) { + System.out.println("Error creating file"); + } + } + + public static void appendToLog(String content, Path newFile){ + //Writing to file + try(BufferedWriter writer = Files.newBufferedWriter( + newFile, Charset.defaultCharset(),new OpenOption[] {StandardOpenOption.APPEND})){ + Date date = new Date(); + Calendar cal1 = Calendar.getInstance(); + cal1.setTimeInMillis(System.currentTimeMillis()); + SimpleDateFormat dateFormat = new SimpleDateFormat("hh:mm:ss"); + String sDate=dateFormat.format(cal1.getTime()); + writer.append(sDate + " "); + writer.append(content); + writer.append("\n"); + writer.flush(); + }catch(IOException exception){ + System.out.println("Error writing to file"); + } + } + + public static void createHeader(Path newFile){ + //Writing to file + try(BufferedWriter writer = Files.newBufferedWriter( + newFile, Charset.defaultCharset(),new OpenOption[] {StandardOpenOption.APPEND})){ + Date date = new Date(); + Calendar cal1 = Calendar.getInstance(); + cal1.setTimeInMillis(System.currentTimeMillis()); + SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-hh:mm:ss"); + String sDate=dateFormat.format(cal1.getTime()); + String developer = System.getProperty("user.name"); + writer.append("*********************************************\n"); + writer.append("**** PROJECTSWG DEBUG LOG " + sDate + " ****\n"); + writer.append("*********************************************\n"); + writer.append("DEV: "+developer + "\n"); + writer.append("\n"); + writer.flush(); + }catch(IOException exception){ + System.out.println("Error writing to file"); + } + } + +} diff --git a/src/tools/DevLogQueuer.java b/src/tools/DevLogQueuer.java new file mode 100644 index 00000000..205eb8cc --- /dev/null +++ b/src/tools/DevLogQueuer.java @@ -0,0 +1,95 @@ +/******************************************************************************* + * 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 tools; + +import java.util.concurrent.ArrayBlockingQueue; +import java.util.concurrent.BlockingQueue; +import java.nio.file.*; + +/** + * @author Charon + */ + +public class DevLogQueuer extends Thread { + private static DevLogQueuer instance; + + private BlockingQueue itemsToLog = + new ArrayBlockingQueue(100); + + private static final String SHUTDOWN_REQ = "SHUTDOWN"; + private volatile boolean shuttingDown, loggerTerminated; + + + + public DevLogQueuer() { + if (instance!=null) + return; // Singleton + instance = this; + start(); + } + + public static DevLogQueuer getInstance() { + return instance; + } + + public static DevLogQueuer getLogger() { + return instance; + } + + public void run() { + try { + String item; + while ((item = itemsToLog.take()) != SHUTDOWN_REQ) { + System.err.println(item); + } + } catch (InterruptedException iex) { + } finally { + loggerTerminated = true; + } + } + + public void log(String str) { + + if (shuttingDown || loggerTerminated) return; + try { + itemsToLog.put(str); + } catch (InterruptedException iex) { + Thread.currentThread().interrupt(); + throw new RuntimeException("Unexpected interruption"); + } + } + + public void log(String str,Path path) { + if (shuttingDown || loggerTerminated) return; + try { + DevLog.appendToLog(str, path); + } catch (Exception iex) { + Thread.currentThread().interrupt(); + throw new RuntimeException("Unexpected interruption"); + } + } + + public void shutDown() throws InterruptedException { + shuttingDown = true; + itemsToLog.put(SHUTDOWN_REQ); + } +}