diff --git a/options.cfg b/options.cfg index bf00d91a..5ea9e0ab 100644 --- a/options.cfg +++ b/options.cfg @@ -1,7 +1,7 @@ LOAD.SNAPSHOT_OBJECTS=1 LOAD.BUILDOUT_OBJECTS=1 #LOAD.BUILDOUT_ONLY_FOR="dathomir" -LOAD.RESOURCE.SYSTEM=1 +LOAD.RESOURCE.SYSTEM=0 # Misc -CLEAN.ODB.FOLDERS=0 \ No newline at end of file +CLEAN.ODB.FOLDERS=0 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/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/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/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 30f6e311..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) 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 5998b4df..f5089be6 100644 --- a/scripts/mobiles/endor/arachne_webmaster.py +++ b/scripts/mobiles/endor/arachne_webmaster.py @@ -26,15 +26,18 @@ def addTemplate(core): 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 f26da881..590addab 100644 --- a/scripts/mobiles/endor/arachne_widow.py +++ b/scripts/mobiles/endor/arachne_widow.py @@ -27,7 +27,7 @@ def addTemplate(core): 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/blood_drenched_merek_king.py b/scripts/mobiles/endor/blood_drenched_merek_king.py index 1b8c6392..8884ce8f 100644 --- a/scripts/mobiles/endor/blood_drenched_merek_king.py +++ b/scripts/mobiles/endor/blood_drenched_merek_king.py @@ -26,7 +26,7 @@ def addTemplate(core): 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 dd0e26cb..58479684 100644 --- a/scripts/mobiles/endor/blood_frenzied_boar_wolf.py +++ b/scripts/mobiles/endor/blood_frenzied_boar_wolf.py @@ -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 0adeb38e..510bb956 100644 --- a/scripts/mobiles/endor/blood_stained_merek.py +++ b/scripts/mobiles/endor/blood_stained_merek.py @@ -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 a2516e9a..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) 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 a1b0454d..5bd55ce1 100644 --- a/scripts/mobiles/endor/blurrg_raptor.py +++ b/scripts/mobiles/endor/blurrg_raptor.py @@ -20,7 +20,6 @@ def addTemplate(core): mobileTemplate.setScale(1) mobileTemplate.setSocialGroup("blurrg") mobileTemplate.setAssistRange(12) - mobileTemplate.setStalker(True) mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() @@ -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/crazed_gurreck.py b/scripts/mobiles/endor/crazed_gurreck.py index 1d4cf191..2bf5a970 100644 --- a/scripts/mobiles/endor/crazed_gurreck.py +++ b/scripts/mobiles/endor/crazed_gurreck.py @@ -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 edd0295c..c4bd2fa4 100644 --- a/scripts/mobiles/endor/crimson_blurrg.py +++ b/scripts/mobiles/endor/crimson_blurrg.py @@ -19,7 +19,7 @@ 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) @@ -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 da3b48de..9311359c 100644 --- a/scripts/mobiles/endor/delirious_merek_avenger.py +++ b/scripts/mobiles/endor/delirious_merek_avenger.py @@ -21,7 +21,7 @@ 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) @@ -30,11 +30,15 @@ def addTemplate(core): 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 7d31cc32..0f5142c3 100644 --- a/scripts/mobiles/endor/deranged_mantigrue.py +++ b/scripts/mobiles/endor/deranged_mantigrue.py @@ -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 a230b194..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) diff --git a/scripts/mobiles/endor/desert_gurreck_charger.py b/scripts/mobiles/endor/desert_gurreck_charger.py index e73fc34d..310c295c 100644 --- a/scripts/mobiles/endor/desert_gurreck_charger.py +++ b/scripts/mobiles/endor/desert_gurreck_charger.py @@ -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 eb661b09..cab12a5d 100644 --- a/scripts/mobiles/endor/diseased_blurrg.py +++ b/scripts/mobiles/endor/diseased_blurrg.py @@ -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/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/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/festering_squill.py b/scripts/mobiles/endor/festering_squill.py index f4cbebe2..8f20eb6d 100644 --- a/scripts/mobiles/endor/festering_squill.py +++ b/scripts/mobiles/endor/festering_squill.py @@ -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 f4f5c58c..4a4b95d3 100644 --- a/scripts/mobiles/endor/fierce_borgle.py +++ b/scripts/mobiles/endor/fierce_borgle.py @@ -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/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/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/gurreck.py b/scripts/mobiles/endor/gurreck.py index cc66f03d..7a747b8f 100644 --- a/scripts/mobiles/endor/gurreck.py +++ b/scripts/mobiles/endor/gurreck.py @@ -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 b5603bd1..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) @@ -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/hanadak_ancient.py b/scripts/mobiles/endor/hanadak_ancient.py index fca8a21c..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) @@ -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 bf19ce05..06d1668f 100644 --- a/scripts/mobiles/endor/hanadak_drifter.py +++ b/scripts/mobiles/endor/hanadak_drifter.py @@ -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 76186f2d..7230c46d 100644 --- a/scripts/mobiles/endor/highland_remmer.py +++ b/scripts/mobiles/endor/highland_remmer.py @@ -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 7adb0616..01c1c34e 100644 --- a/scripts/mobiles/endor/hilltop_gurreck_hunter.py +++ b/scripts/mobiles/endor/hilltop_gurreck_hunter.py @@ -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/insane_mantigrue_berserker.py b/scripts/mobiles/endor/insane_mantigrue_berserker.py index 50eb1ac6..1a4aa6a6 100644 --- a/scripts/mobiles/endor/insane_mantigrue_berserker.py +++ b/scripts/mobiles/endor/insane_mantigrue_berserker.py @@ -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 4de51691..b63c81ab 100644 --- a/scripts/mobiles/endor/king_merek_harvester.py +++ b/scripts/mobiles/endor/king_merek_harvester.py @@ -26,7 +26,7 @@ def addTemplate(core): 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/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 387c8e49..468ded5a 100644 --- a/scripts/mobiles/endor/lice_ridden_remmer_queen.py +++ b/scripts/mobiles/endor/lice_ridden_remmer_queen.py @@ -24,16 +24,19 @@ def addTemplate(core): 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 b64a4c4a..762662c4 100644 --- a/scripts/mobiles/endor/mantigrue_hunter.py +++ b/scripts/mobiles/endor/mantigrue_hunter.py @@ -28,11 +28,15 @@ def addTemplate(core): 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 0ccc1a31..e4fbbf6f 100644 --- a/scripts/mobiles/endor/mantigrue_night_stalker.py +++ b/scripts/mobiles/endor/mantigrue_night_stalker.py @@ -24,15 +24,19 @@ def addTemplate(core): 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 95397fab..4bf505f7 100644 --- a/scripts/mobiles/endor/mantigrue_reaper.py +++ b/scripts/mobiles/endor/mantigrue_reaper.py @@ -28,11 +28,15 @@ def addTemplate(core): 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 c0495411..c54b02ad 100644 --- a/scripts/mobiles/endor/mantigrue_screecher.py +++ b/scripts/mobiles/endor/mantigrue_screecher.py @@ -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/mature_hanadak.py b/scripts/mobiles/endor/mature_hanadak.py index 93732a13..4f5ae369 100644 --- a/scripts/mobiles/endor/mature_hanadak.py +++ b/scripts/mobiles/endor/mature_hanadak.py @@ -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 121fdb8b..f2b1a690 100644 --- a/scripts/mobiles/endor/mature_hanadak_rock_smasher.py +++ b/scripts/mobiles/endor/mature_hanadak_rock_smasher.py @@ -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 1af127e5..984af9c9 100644 --- a/scripts/mobiles/endor/merek_assassin.py +++ b/scripts/mobiles/endor/merek_assassin.py @@ -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 7049fd13..588ae4a4 100644 --- a/scripts/mobiles/endor/merek_cavern_creeper.py +++ b/scripts/mobiles/endor/merek_cavern_creeper.py @@ -30,11 +30,15 @@ def addTemplate(core): 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 e37e0156..5dd567ed 100644 --- a/scripts/mobiles/endor/merek_deaths_head.py +++ b/scripts/mobiles/endor/merek_deaths_head.py @@ -30,11 +30,15 @@ def addTemplate(core): 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/noxious_squill.py b/scripts/mobiles/endor/noxious_squill.py index bb0103f6..12c95aac 100644 --- a/scripts/mobiles/endor/noxious_squill.py +++ b/scripts/mobiles/endor/noxious_squill.py @@ -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 7abc97f8..4afde7fe 100644 --- a/scripts/mobiles/endor/prowling_gurreck.py +++ b/scripts/mobiles/endor/prowling_gurreck.py @@ -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/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 3dcecf9e..6e937f81 100644 --- a/scripts/mobiles/endor/queen_merek_harvester.py +++ b/scripts/mobiles/endor/queen_merek_harvester.py @@ -26,7 +26,7 @@ def addTemplate(core): 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 8d27e663..a1564a51 100644 --- a/scripts/mobiles/endor/rabid_squall.py +++ b/scripts/mobiles/endor/rabid_squall.py @@ -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 5531f750..af02b6ad 100644 --- a/scripts/mobiles/endor/rancid_remmer_warrior.py +++ b/scripts/mobiles/endor/rancid_remmer_warrior.py @@ -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 b637c620..91b75b49 100644 --- a/scripts/mobiles/endor/ravenous_roba_stalker.py +++ b/scripts/mobiles/endor/ravenous_roba_stalker.py @@ -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 e395fbf4..b668d2cd 100644 --- a/scripts/mobiles/endor/remmer_carrion_keeper.py +++ b/scripts/mobiles/endor/remmer_carrion_keeper.py @@ -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 afb382a2..19e33ba3 100644 --- a/scripts/mobiles/endor/roaming_desert_borgle.py +++ b/scripts/mobiles/endor/roaming_desert_borgle.py @@ -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 213c0a8d..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 b26e2b02..fffeef2a 100644 --- a/scripts/mobiles/endor/rotten_gut_remmer_king.py +++ b/scripts/mobiles/endor/rotten_gut_remmer_king.py @@ -24,7 +24,7 @@ def addTemplate(core): 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 931f2af0..3ead65b5 100644 --- a/scripts/mobiles/endor/sanguin_bloodseeker_hierarch.py +++ b/scripts/mobiles/endor/sanguin_bloodseeker_hierarch.py @@ -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/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/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 a30149bc..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/toxic_merek_battlelord.py b/scripts/mobiles/endor/toxic_merek_battlelord.py index fecb74cb..336ad0c9 100644 --- a/scripts/mobiles/endor/toxic_merek_battlelord.py +++ b/scripts/mobiles/endor/toxic_merek_battlelord.py @@ -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/venom_filled_arachne.py b/scripts/mobiles/endor/venom_filled_arachne.py index 129520d7..4fd77f38 100644 --- a/scripts/mobiles/endor/venom_filled_arachne.py +++ b/scripts/mobiles/endor/venom_filled_arachne.py @@ -28,12 +28,15 @@ def addTemplate(core): 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/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/src/main/NGECore.java b/src/main/NGECore.java index 2901fbeb..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; @@ -113,6 +114,7 @@ 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; @@ -208,6 +210,7 @@ public class NGECore { public ReverseEngineeringService reverseEngineeringService; public PetService petService; public BrowserService browserService; + //public BattlefieldService battlefieldService; // Login Server public NetworkDispatch loginDispatch; @@ -302,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); @@ -374,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); @@ -417,9 +435,15 @@ public class NGECore { 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 @@ -536,8 +560,8 @@ public class NGECore { retroService.run(); browserService = new BrowserService(this); + //battlefieldService = new BattlefieldService(this); - DevLogQueuer devLogQueuer = new DevLogQueuer(); CharonPacketLogger packetLogger; @@ -547,7 +571,7 @@ public class NGECore { didServerCrash = false; System.out.println("Started Server."); cleanupCreatureODB(); - setGalaxyStatus(2); + setGalaxyStatus(GalaxyStatus.Online); } @@ -768,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/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/objects/building/BuildingObject.java b/src/resources/objects/building/BuildingObject.java index 9ee735d1..11c11083 100644 --- a/src/resources/objects/building/BuildingObject.java +++ b/src/resources/objects/building/BuildingObject.java @@ -56,6 +56,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; @@ -427,5 +428,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/tangible/TangibleObject.java b/src/resources/objects/tangible/TangibleObject.java index 2a62ead1..7ee29c12 100644 --- a/src/resources/objects/tangible/TangibleObject.java +++ b/src/resources/objects/tangible/TangibleObject.java @@ -401,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) { diff --git a/src/services/CharacterService.java b/src/services/CharacterService.java index 3fa7a8df..9755562a 100644 --- a/src/services/CharacterService.java +++ b/src/services/CharacterService.java @@ -268,7 +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(60); + 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/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/SimulationService.java b/src/services/SimulationService.java index 8b7822f3..052e1b6c 100644 --- a/src/services/SimulationService.java +++ b/src/services/SimulationService.java @@ -277,6 +277,16 @@ public class SimulationService implements INetworkDispatch { ); 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)) { diff --git a/src/services/ai/AIActor.java b/src/services/ai/AIActor.java index 5d6c7673..477dcd67 100644 --- a/src/services/ai/AIActor.java +++ b/src/services/ai/AIActor.java @@ -50,6 +50,7 @@ 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; @@ -67,6 +68,7 @@ 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; @@ -97,6 +99,12 @@ public class AIActor { 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(); } @@ -143,6 +151,65 @@ public class AIActor { 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) { + e.printStackTrace(); + } + }, 0, 5000, TimeUnit.MILLISECONDS); } } @@ -372,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) { } @@ -403,6 +473,8 @@ public class AIActor { // 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){ diff --git a/src/services/ai/states/AttackState.java b/src/services/ai/states/AttackState.java index 90233e6b..9bcccb22 100644 --- a/src/services/ai/states/AttackState.java +++ b/src/services/ai/states/AttackState.java @@ -78,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()); } } diff --git a/src/services/chat/ChatService.java b/src/services/chat/ChatService.java index 15f9c1dd..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,29 +267,34 @@ 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()); + + 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; - 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; + default: break; + // TODO: Guild ranks } - + SWGObject recipient = core.objectService.getObjectByFirstName(packet.getRecipient()); if (recipient == null) @@ -750,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(); @@ -1077,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/combat/CombatService.java b/src/services/combat/CombatService.java index 8ab9adcb..21eec82c 100644 --- a/src/services/combat/CombatService.java +++ b/src/services/combat/CombatService.java @@ -68,6 +68,7 @@ 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; @@ -852,6 +853,14 @@ public class CombatService implements INetworkDispatch { 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()); @@ -1371,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()); @@ -1380,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 @@ -1387,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/command/CommandService.java b/src/services/command/CommandService.java index 95d6586f..547b4ee1 100644 --- a/src/services/command/CommandService.java +++ b/src/services/command/CommandService.java @@ -453,7 +453,7 @@ public class CommandService implements INetworkDispatch { public void processCombatCommand(CreatureObject attacker, SWGObject target, CombatCommand command, int actionCounter, String commandArgs) { if (target == null) { System.err.println("ProcessCombatCommand: Target is null"); - return; + //return; } if (FileUtilities.doesFileExist("scripts/commands/combat/" + command.getCommandName() + ".py")) { 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 bb9e31d5..85856af7 100644 --- a/src/services/housing/HousingService.java +++ b/src/services/housing/HousingService.java @@ -178,6 +178,7 @@ public class HousingService implements INetworkDispatch { building.addPlayerToAdminList(null, actor.getObjectID(), playerFirstName); building.setDeedTemplate(deed.getTemplate()); building.setMaintenanceAmount(houseTemplate.getBaseMaintenanceRate()); + building.setDestructionFee(houseTemplate.getDestructionFee()); if(city != null) { city.addNewStructure(building.getObjectID()); @@ -320,7 +321,7 @@ 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() 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() { @@ -364,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"); @@ -393,35 +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); } diff --git a/src/services/object/ObjectService.java b/src/services/object/ObjectService.java index d1849ab9..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; @@ -606,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; } @@ -621,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; } } @@ -640,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; } @@ -655,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; } } diff --git a/src/services/spawn/MobileTemplate.java b/src/services/spawn/MobileTemplate.java index a0ab8683..7060a877 100644 --- a/src/services/spawn/MobileTemplate.java +++ b/src/services/spawn/MobileTemplate.java @@ -61,6 +61,7 @@ public class MobileTemplate implements Cloneable { private int respawnTime = 0; private List lootGroups = new ArrayList(); private String PCDTemplate=""; + private String conversationFileName=""; public Vector getTemplates() { @@ -360,5 +361,13 @@ public class MobileTemplate implements Cloneable { 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 af6ba774..b4b60c52 100644 --- a/src/services/spawn/SpawnService.java +++ b/src/services/spawn/SpawnService.java @@ -107,6 +107,9 @@ 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());