diff --git a/.gitignore b/.gitignore index 63147709..f80b1387 100644 --- a/.gitignore +++ b/.gitignore @@ -60,7 +60,13 @@ odb/chatRooms/je.info.* odb/resourcehistory/je.info.* odb/resourceroots/je.info.* odb/resources/je.info.* +<<<<<<< HEAD odb/auction/je.info.* +odb/swgobjects/je.info.* +======= +odb/auction/je.info.* +odb/bounties/je.info.* +>>>>>>> 12ca3ae66170fcfe09d848a7eea529041b9af5ad # External tool builders .externalToolBuilders/ diff --git a/ngengine_public.jar b/ngengine_public.jar index a78a6cba..418f084c 100644 Binary files a/ngengine_public.jar and b/ngengine_public.jar differ diff --git a/odb/WipeAllOdbFolders_ONLY_EXECUTE_IN_ODB_FOLDER.bat b/odb/WipeAllOdbFolders_ONLY_EXECUTE_IN_ODB_FOLDER.bat index ebbd9e09..6fa1c55b 100644 --- a/odb/WipeAllOdbFolders_ONLY_EXECUTE_IN_ODB_FOLDER.bat +++ b/odb/WipeAllOdbFolders_ONLY_EXECUTE_IN_ODB_FOLDER.bat @@ -7,6 +7,23 @@ cls setlocal EnableDelayedExpansion +for %%* in (.) do set CurrDirName=%%~n* + +if "%CurrDirName%" == "eclipse" ( + echo You are running this script from inside Eclipse ^^! + echo You must execute it via windows in the odb folder ONLY ^^! + echo Terminating for your own data safety. + pause + EXIT +) + +if NOT "%CurrDirName%" == "odb" ( + echo You are not executing this file from the odb folder^^! + echo Terminating for your own data safety. + pause + EXIT +) + set /a count=0 for /d %%d in (*) do ( @@ -15,5 +32,4 @@ for /d %%d in (*) do ( del "%%d\*.*" /s/q echo. 2>%%d\placeholder.txt ) -setlocal DisableDelayedExpansion - +setlocal DisableDelayedExpansion \ No newline at end of file diff --git a/odb/bounties/placeholder.txt b/odb/bounties/placeholder.txt new file mode 100644 index 00000000..e69de29b diff --git a/odb/swgobjects/placeholder.txt b/odb/swgobjects/placeholder.txt new file mode 100644 index 00000000..e69de29b diff --git a/options.cfg b/options.cfg index 5a3a7f8e..ac85b4ef 100644 --- a/options.cfg +++ b/options.cfg @@ -1,3 +1,6 @@ LOAD.SNAPSHOT_OBJECTS=1 LOAD.BUILDOUT_OBJECTS=1 -LOAD.RESOURCE.SYSTEM=1 \ No newline at end of file +LOAD.RESOURCE.SYSTEM=1 + +# Misc +CLEAN.ODB.FOLDERS=0 \ No newline at end of file diff --git a/scripts/buffs/bh_cover_1.py b/scripts/buffs/bh_cover_1.py index b68de518..0b7e2859 100644 --- a/scripts/buffs/bh_cover_1.py +++ b/scripts/buffs/bh_cover_1.py @@ -6,12 +6,12 @@ def setup(core, actor, buff): def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_damage_all', 10) core.skillModService.addSkillMod(actor, 'expertise_glancing_blow_ranged', 40) - core.skillModService.addSkillMod(actor, 'invis', 1) + actor.setRadarVisible(False) return def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_damage_all', 10) core.skillModService.deductSkillMod(actor, 'expertise_glancing_blow_ranged', 40) - core.skillModService.deductSkillMod(actor, 'invis', 1) + actor.setRadarVisible(True) return \ No newline at end of file diff --git a/scripts/buffs/fs_force_run.py b/scripts/buffs/fs_force_run.py index 714e8198..52fa68f4 100644 --- a/scripts/buffs/fs_force_run.py +++ b/scripts/buffs/fs_force_run.py @@ -5,8 +5,7 @@ def setup(core, actor, buff): return def add(core, actor, buff): - actor.playEffectObject('clienteffect/pl_force_run.cef', 'fs_force_run') - actor.playEffectObject('appearance/pt_force_speed.prt', 'fs_force_run') + actor.playEffectObject('clienteffect/pl_force_run.cef', '') actor.setSpeedMultiplierBase(actor.getSpeedMultiplierBase() + 2.5 + (2.5 * (actor.getSkillModBase('expertise_movement_buff_fs_force_run')) / 100)) core.skillModService.addSkillMod(actor, 'slope_move', 5) core.skillModService.addSkillMod(actor, 'movement_resist_snare', 100) diff --git a/scripts/buffs/invis_fs_buff_invis_1.py b/scripts/buffs/invis_fs_buff_invis_1.py index c60417a0..84ef0058 100644 --- a/scripts/buffs/invis_fs_buff_invis_1.py +++ b/scripts/buffs/invis_fs_buff_invis_1.py @@ -4,8 +4,12 @@ def setup(core, actor, buff): return def add(core, actor, buff): + actor.setInStealth(True) + actor.setRadarVisible(False) return def remove(core, actor, buff): + actor.setInStealth(False) + actor.setRadarVisible(True) return - \ No newline at end of file + diff --git a/scripts/buffs/invis_sp_buff_invis_1.py b/scripts/buffs/invis_sp_buff_invis_1.py new file mode 100644 index 00000000..9192dba7 --- /dev/null +++ b/scripts/buffs/invis_sp_buff_invis_1.py @@ -0,0 +1,26 @@ +import sys + +def setup(core, actor, buff): + return + +def add(core, actor, buff): + actor.playEffectObject('clienteffect/npe_smoke_bomb.cef', '') + actor.setInStealth(True) + actor.setRadarVisible(False) + + core.combatService.endCombat(actor) + + if actor.getSkillMod('expertise_sp_without_a_trace_1'): + core.buffService.addBuffToCreature(actor, 'invis_sp_buff_invis_notrace_1') + + return + +def remove(core, actor, buff): + actor.setInStealth(False) + actor.setRadarVisible(True) + + if actor.getSkillMod('expertise_sp_without_a_trace_1'): + core.buffService.removeBuffFromCreature(actor, 'invis_sp_buff_invis_notrace_1') + + return + diff --git a/scripts/buffs/invis_sp_buff_invis_notrace_1.py b/scripts/buffs/invis_sp_buff_invis_notrace_1.py new file mode 100644 index 00000000..11b5dbd0 --- /dev/null +++ b/scripts/buffs/invis_sp_buff_invis_notrace_1.py @@ -0,0 +1,22 @@ +import sys + +def setup(core, actor, buff): + return + +def add(core, actor, buff): + actor.setInStealth(True) + actor.setRadarVisible(False) + + if actor.getSkillMod('expertise_sp_covert_mastery_1'): + core.skillModService.addSkillMod(actor, 'sp_covert_mastery') + + return + +def remove(core, actor, buff): + actor.setInStealth(False) + actor.setRadarVisible(True) + + if actor.getSkillMod('expertise_sp_covert_mastery_1'): + core.skillModService.deductSkillMod(actor, 'sp_covert_mastery') + + return diff --git a/scripts/buffs/invis_sp_buff_stealth_1.py b/scripts/buffs/invis_sp_buff_stealth_1.py new file mode 100644 index 00000000..1b30ee83 --- /dev/null +++ b/scripts/buffs/invis_sp_buff_stealth_1.py @@ -0,0 +1,14 @@ +import sys + +def setup(core, actor, buff): + return + +def add(core, actor, buff): + actor.setInStealth(True) + actor.setRadarVisible(False) + return + +def remove(core, actor, buff): + actor.setInStealth(False) + actor.setRadarVisible(True) + return diff --git a/scripts/buffs/of_stimulator_1.py b/scripts/buffs/of_stimulator_1.py index 4e120b7f..492e64d7 100644 --- a/scripts/buffs/of_stimulator_1.py +++ b/scripts/buffs/of_stimulator_1.py @@ -9,4 +9,5 @@ def add(core, actor, buff): def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'debuff_purge', 2) + return \ No newline at end of file diff --git a/scripts/commands/combat/forcethrow.py b/scripts/commands/combat/forcethrow.py index 276deb65..0e529b99 100644 --- a/scripts/commands/combat/forcethrow.py +++ b/scripts/commands/combat/forcethrow.py @@ -1,7 +1,7 @@ import sys def setup(core, actor, target, command): - core.buffService.addBuffToCreature(target, 'fs_force_throw') + core.buffService.addBuffToCreature(target, 'fs_force_throw', actor) return def preRun(core, actor, target, command): diff --git a/scripts/commands/createvendor.py b/scripts/commands/createvendor.py new file mode 100644 index 00000000..d2e4a1cc --- /dev/null +++ b/scripts/commands/createvendor.py @@ -0,0 +1,169 @@ +import sys +from java.util import HashMap +from java.util import Vector +from services.sui.SUIService import ListBoxType +from services.sui.SUIService import InputBoxType +from main import NGECore +from java.lang import Long +from services.sui.SUIWindow import Trigger + +def setup(): + return + +def run(core, actor, target, commandString): + + if actor.getCombatFlag() > 0: + return + + cell = actor.getContainer() + building = actor.getGrandparent() + ghost = actor.getSlottedObject('ghost') + + if not ghost or not cell or not building or not core.housingService.getPermissions(actor, cell): + return + + if ghost.getAmountOfVendors() >= actor.getSkillModBase('manage_vendor'): + actor.sendSystemMessage('@player_structure:full_vendors', 0) + return + + suiOptions = HashMap() + suiOptions.put(Long(1), '@player_structure:terminal') + suiOptions.put(Long(2), '@player_structure:droid') + # TODO add creatures + window = core.suiService.createListBox(ListBoxType.LIST_BOX_OK_CANCEL, '@player_structure:vendor_type_t', '@player_structure:vendor_type_d', suiOptions, actor, None, 5) + returnList = Vector() + returnList.add('List.lstList:SelectedRow') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, handleFirstWindow) + core.suiService.openSUIWindow(window) + return + +def handleFirstWindow(actor, window, eventType, returnList): + + core = NGECore.getInstance() + index = int(returnList.get(0)) + selected = window.getObjectIdByIndex(index) + hiring = actor.getSkillModBase('hiring') + if selected == 1: + suiOptions = HashMap() + if hiring >= 10: + suiOptions.put(Long(1), '@player_structure:terminal_bulky') + if hiring >= 30: + suiOptions.put(Long(2), '@player_structure:terminal_standard') + if hiring >= 50: + suiOptions.put(Long(3), '@player_structure:terminal_small') + if hiring >= 75: + suiOptions.put(Long(4), '@player_structure:terminal_fancy') + if hiring >= 90: + suiOptions.put(Long(5), '@player_structure:terminal_slim') + window = core.suiService.createListBox(ListBoxType.LIST_BOX_OK_CANCEL, '@player_structure:terminal_type_t', '@player_structure:terminal_type_d', suiOptions, actor, None, 5) + returnList = Vector() + returnList.add('List.lstList:SelectedRow') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, handleTerminalWindow) + core.suiService.openSUIWindow(window) + + if selected == 2: + suiOptions = HashMap() + if hiring >= 20: + suiOptions.put(Long(1), '@player_structure:droid_bartender') + if hiring >= 50: + suiOptions.put(Long(2), '@player_structure:droid_power') + if hiring >= 60: + suiOptions.put(Long(3), '@player_structure:droid_wed') + if hiring >= 90: + suiOptions.put(Long(4), '@player_structure:droid_surgical') + if hiring >= 100: + suiOptions.put(Long(5), '@player_structure:droid_protocol') + window = core.suiService.createListBox(ListBoxType.LIST_BOX_OK_CANCEL, '@player_structure:droid_type_t', '@player_structure:droid_type_d', suiOptions, actor, None, 5) + returnList = Vector() + returnList.add('List.lstList:SelectedRow') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, handleDroidWindow) + core.suiService.openSUIWindow(window) + + return + +def handleTerminalWindow(actor, window, eventType, returnList): + + core = NGECore.getInstance() + index = int(returnList.get(0)) + selected = window.getObjectIdByIndex(index) + + if selected == 1: + actor.setAttachment('selectedVendorTemplate', 'object/tangible/vendor/shared_vendor_terminal_bulky.iff') + elif selected == 2: + actor.setAttachment('selectedVendorTemplate', 'object/tangible/vendor/shared_vendor_terminal_standard.iff') + elif selected == 3: + actor.setAttachment('selectedVendorTemplate', 'object/tangible/vendor/shared_vendor_terminal_small.iff') + elif selected == 4: + actor.setAttachment('selectedVendorTemplate', 'object/tangible/vendor/shared_vendor_terminal_fancy.iff') + elif selected == 5: + actor.setAttachment('selectedVendorTemplate', 'object/tangible/vendor/shared_vendor_terminal_slim.iff') + + createNameVendorWindow(core, actor) + + return + +def handleDroidWindow(actor, window, eventType, returnList): + + core = NGECore.getInstance() + index = int(returnList.get(0)) + selected = window.getObjectIdByIndex(index) + + if selected == 1: + actor.setAttachment('selectedVendorTemplate', 'object/tangible/vendor/shared_vendor_droid_bartender.iff') + elif selected == 2: + actor.setAttachment('selectedVendorTemplate', 'object/tangible/vendor/shared_vendor_droid_power.iff') + elif selected == 3: + actor.setAttachment('selectedVendorTemplate', 'object/tangible/vendor/shared_vendor_droid_wed.iff') + elif selected == 4: + actor.setAttachment('selectedVendorTemplate', 'object/tangible/vendor/shared_vendor_droid_surgical.iff') + elif selected == 5: + actor.setAttachment('selectedVendorTemplate', 'object/tangible/vendor/shared_vendor_droid_protocol.iff') + + createNameVendorWindow(core, actor) + + return + +def createNameVendorWindow(core, actor): + + window = core.suiService.createInputBox(InputBoxType.INPUT_BOX_OK_CANCEL, '@player_structure:name_t', '@player_structure:name_d', actor, None, 5, handleVendorName) + core.suiService.openSUIWindow(window) + return + +def handleVendorName(actor, window, eventType, returnList): + + core = NGECore.getInstance() + name = returnList.get(0) + print name + inventory = actor.getSlottedObject('inventory') + ghost = actor.getSlottedObject('ghost') + + if not core.characterService.checkName(name, actor.getClient()): + actor.sendSystemMessage('@player_structure:obscene', 0) + createNameVendorWindow(core, actor) + return + + if not actor.getAttachment('selectedVendorTemplate') or not inventory or not ghost: + actor.sendSystemMessage('@player_structure:create_failed', 0) + return + + if actor.getInventoryItemCount() >= 80: + actor.sendSystemMessage('@player_structure:inventory_full_generic', 0) + return + + vendor = core.objectService.createObject(actor.getAttachment('selectedVendorTemplate'), actor.getPlanet()) + + if not vendor: + actor.sendSystemMessage('@player_structure:create_failed', 0) + return + + actor.setAttachment('selectedVendorTemplate', None) + vendor.setAttachment('isVendor', True) + vendor.setAttachment('vendorOwner', actor.getObjectID()) + vendor.setAttachment('initialized', False) + vendor.setAttachment('vendorSearchEnabled', False) + vendor.setCustomName('Vendor: ' + name) + ghost.addVendor(vendor.getObjectID()) + inventory.add(vendor) + actor.sendSystemMessage('@player_structure:create_success', 0) + return + \ No newline at end of file diff --git a/scripts/commands/en_sprint_1.py b/scripts/commands/en_sprint_1.py index 1393d38e..a24ef49d 100644 --- a/scripts/commands/en_sprint_1.py +++ b/scripts/commands/en_sprint_1.py @@ -4,5 +4,5 @@ def setup(): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'en_sprint') + core.buffService.addBuffToCreature(actor, 'en_sprint', actor) return \ No newline at end of file diff --git a/scripts/commands/forcerun.py b/scripts/commands/forcerun.py index df72153b..69a25ad8 100644 --- a/scripts/commands/forcerun.py +++ b/scripts/commands/forcerun.py @@ -4,6 +4,6 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'fs_force_run') + core.buffService.addBuffToCreature(target, 'fs_force_run', actor) return \ No newline at end of file diff --git a/scripts/commands/fs_buff_ca_1.py b/scripts/commands/fs_buff_ca_1.py index 141b3158..2d12673e 100644 --- a/scripts/commands/fs_buff_ca_1.py +++ b/scripts/commands/fs_buff_ca_1.py @@ -4,6 +4,6 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'fs_buff_ca_1') + core.buffService.addBuffToCreature(actor, 'fs_buff_ca_1', actor) return \ No newline at end of file diff --git a/scripts/commands/fs_buff_def_1_1.py b/scripts/commands/fs_buff_def_1_1.py index cd9637f1..0125c187 100644 --- a/scripts/commands/fs_buff_def_1_1.py +++ b/scripts/commands/fs_buff_def_1_1.py @@ -4,6 +4,6 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'fs_buff_def_1_1') + core.buffService.addBuffToCreature(actor, 'fs_buff_def_1_1', actor) return \ No newline at end of file diff --git a/scripts/commands/fs_buff_invis_1.py b/scripts/commands/fs_buff_invis_1.py index 57ed4a59..965d034c 100644 --- a/scripts/commands/fs_buff_invis_1.py +++ b/scripts/commands/fs_buff_invis_1.py @@ -4,6 +4,6 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'invis_fs_buff_invis_1') + core.buffService.addBuffToCreature(actor, 'invis_fs_buff_invis_1', actor) return \ No newline at end of file diff --git a/scripts/commands/fs_saber_reflect_buff.py b/scripts/commands/fs_saber_reflect_buff.py index 898e2530..29f49243 100644 --- a/scripts/commands/fs_saber_reflect_buff.py +++ b/scripts/commands/fs_saber_reflect_buff.py @@ -4,6 +4,6 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'fs_saber_reflect') + core.buffService.addBuffToCreature(actor, 'fs_saber_reflect', actor) return \ No newline at end of file diff --git a/scripts/commands/grantzoningrights.py b/scripts/commands/grantzoningrights.py new file mode 100644 index 00000000..21cbbb8d --- /dev/null +++ b/scripts/commands/grantzoningrights.py @@ -0,0 +1,40 @@ +import sys +from java.lang import System +from resources.common import OutOfBand +from resources.common import ProsePackage +import main.NGECore + +def setup(): + return + +def run(core, actor, target, commandString): + + if target == None: + return + + #if !actor.hasSkill('Politician'): + #You must be a Politician to enable city zoning. + #actor.sendSystemMessage('@city/city:zoning_skill', 0) + #return + + thisCity = main.NGECore.getInstance().playerCityService.getCityObjectIsIn(actor) + + if thisCity == None: + #not_in_city_limits + actor.sendSystemMessage('@city/city:not_in_city_limits', 0) + return + + if thisCity.getMayorID()!=actor.getObjectID() and not thisCity.isMilitiaMember(actor.getObjectID()): + #You must be the mayor of the city or a member of the city militia to grant zoning rights. + actor.sendSystemMessage('@city/city:grant_rights_fail', 0) + actor.sendSystemMessage('thisCity.getMayorID() %s' % thisCity.getMayorID(), 0) + actor.sendSystemMessage('actor.getObjectID() %s' % actor.getObjectID(), 0) + return + + #You have granted %TO zoning rights for 24 hours. + actor.sendSystemMessage(OutOfBand.ProsePackage("@city/city:rights_granted_self", "TO", target.getCustomName()), 0) + target.setAttachment('Has24HZoningFor',thisCity.getCityID()) + target.setAttachment('Has24HZoningUntil',System.currentTimeMillis()+60*60*24) + target.sendSystemMessage(OutOfBand.ProsePackage("@city/city:rights_granted", "TO", thisCity.getCityName()), 0) + + return \ No newline at end of file diff --git a/scripts/commands/harvesteractivate.py b/scripts/commands/harvesteractivate.py index 5411445a..f05ede73 100644 --- a/scripts/commands/harvesteractivate.py +++ b/scripts/commands/harvesteractivate.py @@ -2,7 +2,7 @@ import sys def setup(): return - + def run(core, actor, target, commandString): core.harvesterService.handleHarvesterActivateCommand(actor, target, commandString) return diff --git a/scripts/commands/harvesterdeactivate.py b/scripts/commands/harvesterdeactivate.py index 3a225b3f..7989148f 100644 --- a/scripts/commands/harvesterdeactivate.py +++ b/scripts/commands/harvesterdeactivate.py @@ -2,9 +2,7 @@ import sys def setup(): return - + def run(core, actor, target, commandString): core.harvesterService.handleHarvesterDeactivateCommand(actor, target, commandString) return - - \ No newline at end of file diff --git a/scripts/commands/harvesterdiscardhopper.py b/scripts/commands/harvesterdiscardhopper.py index 3a52f754..6ae345b9 100644 --- a/scripts/commands/harvesterdiscardhopper.py +++ b/scripts/commands/harvesterdiscardhopper.py @@ -2,10 +2,8 @@ import sys def setup(): return - + def run(core, actor, target, commandString): actor.sendSystemMessage('handleEmptyHarvester', 0) core.harvesterService.handleEmptyHarvester(actor, target, commandString) return - - \ No newline at end of file diff --git a/scripts/commands/harvesterselectresource.py b/scripts/commands/harvesterselectresource.py index 69c8c725..cc1c18aa 100644 --- a/scripts/commands/harvesterselectresource.py +++ b/scripts/commands/harvesterselectresource.py @@ -2,9 +2,7 @@ import sys def setup(): return - + def run(core, actor, target, commandString): core.harvesterService.handleHarvesterSelectResourceCommand(actor, target, commandString) return - - \ No newline at end of file diff --git a/scripts/commands/loot.py b/scripts/commands/loot.py new file mode 100644 index 00000000..19ae81f3 --- /dev/null +++ b/scripts/commands/loot.py @@ -0,0 +1,14 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + + if not target: + return + + #actor.sendSystemMessage('LOOT SCRIPT COMMAND', 0) + core.lootService.handleLootRequest(actor,target) + return + \ No newline at end of file diff --git a/scripts/commands/me_cure_affliction_1.py b/scripts/commands/me_cure_affliction_1.py index 1e9189f1..c03b5879 100644 --- a/scripts/commands/me_cure_affliction_1.py +++ b/scripts/commands/me_cure_affliction_1.py @@ -4,5 +4,5 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'me_cure_affliction_1') + core.buffService.addBuffToCreature(actor, 'me_cure_affliction_1', target) return \ No newline at end of file diff --git a/scripts/commands/me_evasion_1.py b/scripts/commands/me_evasion_1.py index 52391238..6fb5001a 100644 --- a/scripts/commands/me_evasion_1.py +++ b/scripts/commands/me_evasion_1.py @@ -4,5 +4,5 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'me_evasion_1') + core.buffService.addBuffToCreature(actor, 'me_evasion_1', actor) return \ No newline at end of file diff --git a/scripts/commands/me_stasis_self_1.py b/scripts/commands/me_stasis_self_1.py index fc808c70..192637a1 100644 --- a/scripts/commands/me_stasis_self_1.py +++ b/scripts/commands/me_stasis_self_1.py @@ -18,7 +18,7 @@ def run(core, actor, target, commandString): if not combatSvc.applySpecialCost(actor, weapon, CombatCommand('me_stasis_self_1')): return - core.buffService.addBuffToCreature(actor, 'me_stasis_self_1') + core.buffService.addBuffToCreature(actor, 'me_stasis_self_1', actor) return \ No newline at end of file diff --git a/scripts/commands/movefurniture.py b/scripts/commands/movefurniture.py index 1f4a7148..46295121 100644 --- a/scripts/commands/movefurniture.py +++ b/scripts/commands/movefurniture.py @@ -3,12 +3,15 @@ from engine.resources.scene import Point3D def setup(): return - + def run(core, actor, target, commandString): tarObj = core.objectService.getObject(actor.getTargetId()) container = actor.getContainer() parsedMsg = commandString.split(' ', 2) + if tarObj.getAttachment('initialized') is not None and target.getAttachment('initialized') == True: + return + if core.housingService.getPermissions(actor, container): # i should probably relook into my permissions system... it kinda sucks if parsedMsg[0] == "up": core.simulationService.transform(tarObj, Point3D(0, float(parsedMsg[1]) * 0.01, 0)) @@ -28,10 +31,8 @@ def run(core, actor, target, commandString): elif parsedMsg[0] == "left": core.simulationService.transform(tarObj, Point3D(float(parsedMsg[1]) * -0.01, 0, 0)) return - elif container.getTemplate() == "object/cell/shared_cell.iff": actor.sendSystemMessage("You do not have permission to access that container!", 0) return - + return - \ No newline at end of file diff --git a/scripts/commands/of_emergency_shield.py b/scripts/commands/of_emergency_shield.py index 0a9cb543..73586f60 100644 --- a/scripts/commands/of_emergency_shield.py +++ b/scripts/commands/of_emergency_shield.py @@ -4,6 +4,6 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'of_emergency_shield') + core.buffService.addBuffToCreature(actor, 'of_emergency_shield', actor) return \ No newline at end of file diff --git a/scripts/commands/of_firepower_1.py b/scripts/commands/of_firepower_1.py index 50eba86a..442a5d45 100644 --- a/scripts/commands/of_firepower_1.py +++ b/scripts/commands/of_firepower_1.py @@ -4,6 +4,6 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'of_firepower') + core.buffService.addBuffToCreature(actor, 'of_firepower', actor) return \ No newline at end of file diff --git a/scripts/commands/of_inspiration_1.py b/scripts/commands/of_inspiration_1.py index 9f0c3a20..fc017af7 100644 --- a/scripts/commands/of_inspiration_1.py +++ b/scripts/commands/of_inspiration_1.py @@ -4,6 +4,6 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addGroupBuff(actor, 'of_inspiration_1') + core.buffService.addGroupBuff(actor, 'of_inspiration_1', actor) return \ No newline at end of file diff --git a/scripts/commands/of_inspiration_2.py b/scripts/commands/of_inspiration_2.py index c7ffcb5e..44ae030d 100644 --- a/scripts/commands/of_inspiration_2.py +++ b/scripts/commands/of_inspiration_2.py @@ -4,6 +4,6 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addGroupBuff(actor, 'of_inspiration_2') + core.buffService.addGroupBuff(actor, 'of_inspiration_2', actor) return \ No newline at end of file diff --git a/scripts/commands/of_inspiration_3.py b/scripts/commands/of_inspiration_3.py index fd2e8b80..52711f2a 100644 --- a/scripts/commands/of_inspiration_3.py +++ b/scripts/commands/of_inspiration_3.py @@ -4,6 +4,6 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addGroupBuff(actor, 'of_inspiration_3') + core.buffService.addGroupBuff(actor, 'of_inspiration_3', actor) return \ No newline at end of file diff --git a/scripts/commands/of_inspiration_4.py b/scripts/commands/of_inspiration_4.py index 35bae1ab..853d793d 100644 --- a/scripts/commands/of_inspiration_4.py +++ b/scripts/commands/of_inspiration_4.py @@ -4,6 +4,6 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addGroupBuff(actor, 'of_inspiration_4') + core.buffService.addGroupBuff(actor, 'of_inspiration_4', actor) return \ No newline at end of file diff --git a/scripts/commands/of_inspiration_5.py b/scripts/commands/of_inspiration_5.py index f9c9ba48..8723fc61 100644 --- a/scripts/commands/of_inspiration_5.py +++ b/scripts/commands/of_inspiration_5.py @@ -4,6 +4,6 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addGroupBuff(actor, 'of_inspiration_5') + core.buffService.addGroupBuff(actor, 'of_inspiration_5', actor) return \ No newline at end of file diff --git a/scripts/commands/of_inspiration_6.py b/scripts/commands/of_inspiration_6.py index ca05422d..5459e9ec 100644 --- a/scripts/commands/of_inspiration_6.py +++ b/scripts/commands/of_inspiration_6.py @@ -4,6 +4,6 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addGroupBuff(actor, 'of_inspiration_6') + core.buffService.addGroupBuff(actor, 'of_inspiration_6', actor) return \ No newline at end of file diff --git a/scripts/commands/of_purge_1.py b/scripts/commands/of_purge_1.py index 7a6edae9..1d1f6bae 100644 --- a/scripts/commands/of_purge_1.py +++ b/scripts/commands/of_purge_1.py @@ -4,6 +4,6 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'of_purge_1') + core.buffService.addBuffToCreature(actor, 'of_purge_1', actor) return \ No newline at end of file diff --git a/scripts/commands/of_scatter_1.py b/scripts/commands/of_scatter_1.py index 3984ca10..855c1841 100644 --- a/scripts/commands/of_scatter_1.py +++ b/scripts/commands/of_scatter_1.py @@ -4,6 +4,6 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'of_scatter_1', actor) + core.buffService.addGroupBuff(actor, 'of_scatter_1', actor) return \ No newline at end of file diff --git a/scripts/commands/of_stimulator_1.py b/scripts/commands/of_stimulator_1.py index c9b5a1c1..25efda68 100644 --- a/scripts/commands/of_stimulator_1.py +++ b/scripts/commands/of_stimulator_1.py @@ -4,6 +4,6 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'of_stimulator_1') + core.buffService.addBuffToCreature(actor, 'of_stimulator_1', actor) return \ No newline at end of file diff --git a/scripts/commands/permissionlistmodify.py b/scripts/commands/permissionlistmodify.py index 8c0108ba..5d75a1e2 100644 --- a/scripts/commands/permissionlistmodify.py +++ b/scripts/commands/permissionlistmodify.py @@ -2,7 +2,7 @@ import sys def setup(): return - + def run(core, actor, target, commandString): permissionType = 'Undetermined' commandArgs = commandString.split(' ') diff --git a/scripts/commands/placestructure.py b/scripts/commands/placestructure.py index f6f5c122..fa7bc65a 100644 --- a/scripts/commands/placestructure.py +++ b/scripts/commands/placestructure.py @@ -1,32 +1,25 @@ import sys -import resources.objects.deed.Harvester_Deed def setup(): return - + def run(core, actor, target, commandString): cmdArgs = commandString.split(" ") deedId = long(cmdArgs[0]) deed = core.objectService.getObject(deedId) - - if (actor.getAttachment('UsingHarvesterDeed') == '1'): - actor.setAttachment('UsingHarvesterDeed', '0'); + + if deed == actor: + deed = actor.getUseTarget() + + if deed.getTemplate().startswith('object/tangible/deed/harvester_deed') is True or deed.getTemplate().startswith('object/tangible/deed/generator_deed') is True: core.harvesterService.handlePlaceStructureCommand(actor, target, commandString) return - + positionX = float(cmdArgs[1]) positionZ = float(cmdArgs[2]) - #positionY = core.terrainService.getHeight(actor.getPlanetId(), positionX, positionZ) + 2 - rotation = float(cmdArgs[3]) - - #structureTemplate = deed.getAttachment("structureTemplate") - core.housingService.placeStructure(actor, deed, positionX, positionZ, rotation) - #building = core.objectService.createObject(structureTemplate, actor.getPlanet(), positionX, positionZ, positionY); - #core.simulationService.add(building, building.getPosition().x, building.getPosition().z); - - return \ No newline at end of file + return diff --git a/scripts/commands/pvp.py b/scripts/commands/pvp.py index 8fbdc155..c313fbc4 100644 --- a/scripts/commands/pvp.py +++ b/scripts/commands/pvp.py @@ -17,7 +17,8 @@ def run(core, actor, target, commandString): if commandString != '' and commandString != faction: if commandString == 'rebel' or commandString == 'imperial' or commandString == 'neutral': - actor.sendSystemMessage('@faction_recruiter:sui_resig_complete_in_5', 0) + if faction != 'neutral': + actor.sendSystemMessage('@faction_recruiter:sui_resig_complete_in_5', 0) if actor.getFactionStatus() == FactionStatus.SpecialForces: actor.setPvpStatus(PvpStatus.GoingCovert, True) @@ -47,30 +48,30 @@ def run(core, actor, target, commandString): if factionStatus == FactionStatus.OnLeave: actor.sendSystemMessage('@faction_recruiter:on_leave_to_covert', 0) - #actor.setPvpStatus(PvpStatus.GoingCovert, True) + actor.setPvpStatus(PvpStatus.GoingCovert, True) time.sleep(1) actor.setFactionStatus(FactionStatus.Combatant) - #actor.setPvpStatus(PvpStatus.GoingCovert, False) + actor.setPvpStatus(PvpStatus.GoingCovert, False) actor.sendSystemMessage('@faction_recruiter:covert_complete', 0) actor.updatePvpStatus() return if factionStatus == FactionStatus.Combatant: actor.sendSystemMessage('@faction_recruiter:covert_to_overt', 0) - #actor.setPvpStatus(PvpStatus.GoingOvert, True) + actor.setPvpStatus(PvpStatus.GoingOvert, True) time.sleep(30) actor.setFactionStatus(FactionStatus.SpecialForces) - #actor.setPvpStatus(PvpStatus.GoingOvert, False) + actor.setPvpStatus(PvpStatus.GoingOvert, False) actor.sendSystemMessage('@faction_recruiter:overt_complete', 0) actor.updatePvpStatus() return if factionStatus == FactionStatus.SpecialForces: actor.sendSystemMessage('@faction_recruiter:overt_to_covert', 0) - #actor.setPvpStatus(PvpStatus.GoingCovert, True) + actor.setPvpStatus(PvpStatus.GoingCovert, True) time.sleep(300) actor.setFactionStatus(FactionStatus.Combatant) - #actor.setPvpStatus(PvpStatus.GoingCovert, False) + actor.setPvpStatus(PvpStatus.GoingCovert, False) actor.sendSystemMessage('@faction_recruiter:covert_complete', 0) actor.updatePvpStatus() return diff --git a/scripts/commands/resourceemptyhopper.py b/scripts/commands/resourceemptyhopper.py index 3a225b3f..7989148f 100644 --- a/scripts/commands/resourceemptyhopper.py +++ b/scripts/commands/resourceemptyhopper.py @@ -2,9 +2,7 @@ import sys def setup(): return - + def run(core, actor, target, commandString): core.harvesterService.handleHarvesterDeactivateCommand(actor, target, commandString) return - - \ No newline at end of file diff --git a/scripts/commands/rotatefurniture.py b/scripts/commands/rotatefurniture.py index 9d019d0c..66b1dc27 100644 --- a/scripts/commands/rotatefurniture.py +++ b/scripts/commands/rotatefurniture.py @@ -3,13 +3,16 @@ from engine.resources.scene import Point3D def setup(): return - + def run(core, actor, target, commandString): tarObj = core.objectService.getObject(actor.getTargetId()) container = actor.getContainer() parsedMsg = commandString.split(' ', 2) + if tarObj.getAttachment('initialized') is not None and target.getAttachment('initialized') == True: + return + if core.housingService.getPermissions(actor, container): # i should probably relook into my permissions system... it kinda sucks if parsedMsg[0] == "pitch": core.simulationService.transform(tarObj, float(parsedMsg[1]), Point3D(1, 0, 0)) # this is messed up ??? @@ -20,10 +23,8 @@ def run(core, actor, target, commandString): elif parsedMsg[0] == "roll": core.simulationService.transform(tarObj, float(parsedMsg[1]), Point3D(0, 0, 1)) # this is messed up ??? return - elif container.getTemplate() == "object/cell/shared_cell.iff": actor.sendSystemMessage("You do not have permission to access that container!", 0) return - + return - \ No newline at end of file diff --git a/scripts/commands/saberblock.py b/scripts/commands/saberblock.py index 55e12c59..4a69c0ff 100644 --- a/scripts/commands/saberblock.py +++ b/scripts/commands/saberblock.py @@ -4,6 +4,6 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'saberblock') + core.buffService.addBuffToCreature(actor, 'saberblock', actor) return \ No newline at end of file diff --git a/scripts/commands/setgodmode.py b/scripts/commands/setgodmode.py index e66d7982..680ba082 100644 --- a/scripts/commands/setgodmode.py +++ b/scripts/commands/setgodmode.py @@ -99,11 +99,9 @@ def run(core, actor, target, commandString): if (actor.isInStealth()): actor.setInStealth(False) actor.setRadarVisible(True) - actor.sendSystemMessage('You are now visible to other players.', 0) else: actor.setInStealth(True) actor.setRadarVisible(False) - actor.sendSystemMessage('You are now hidden from players. "Stealth Effect" is not implemented, however players still won\'t be able to see you. Type /setgodmode stealth again to be visible.', 0) elif command == 'holoEmote' and arg1: playerObject.setHoloEmote('holoemote_' + arg1) @@ -114,5 +112,17 @@ def run(core, actor, target, commandString): if playerObject.getGodLevel > 0: actor.removeAbility("admin") playerObject.setGodLevel(0) - + + elif command == 'setBounty': + core.playerService.sendSetBountyWindow(actor, actor) + return + + elif command == 'genloot': + object = core.lootService.generateLootItem(actor, arg1) + + inventory = actor.getSlottedObject('inventory') + + if inventory: + inventory.add(object) + return diff --git a/scripts/commands/setwaypointactivestatus.py b/scripts/commands/setwaypointactivestatus.py index 70d5b50c..24199d36 100644 --- a/scripts/commands/setwaypointactivestatus.py +++ b/scripts/commands/setwaypointactivestatus.py @@ -9,6 +9,10 @@ def run(core, actor, target, commandString): return waypointTarget = core.objectService.getObject(target.getObjectID()) wp = playerObject.getWaypointFromList(target) + + if wp is None: + return + if wp.isActive() == True: wp.setActive(False) playerObject.waypointUpdate(wp) diff --git a/scripts/commands/transferitemarmor.py b/scripts/commands/transferitemarmor.py index 2edbec74..8e166cbc 100644 --- a/scripts/commands/transferitemarmor.py +++ b/scripts/commands/transferitemarmor.py @@ -4,15 +4,18 @@ def setup(): return def run(core, actor, target, commandString): - if core.equipmentService.canEquip(actor, target) is False: - actor.sendSystemMessage('@error_message:insufficient_skill', 0) - return - parsedMsg = commandString.split(' ', 3) objService = core.objectService containerID = long(parsedMsg[1]) container = objService.getObject(containerID) + + canEquip = core.equipmentService.canEquip(actor, target) + + if canEquip[0] is False and container == actor: + actor.sendSystemMessage(canEquip[1], 0) + return + if target and container and target.getContainer(): oldContainer = target.getContainer() if container == oldContainer: diff --git a/scripts/commands/transferitemmisc.py b/scripts/commands/transferitemmisc.py index e30072ba..2bc32e5e 100644 --- a/scripts/commands/transferitemmisc.py +++ b/scripts/commands/transferitemmisc.py @@ -12,6 +12,14 @@ def run(core, actor, target, commandString): actorContainer = actor.getContainer() if container == None: return + + if(container.isFull()): + actor.sendSystemMessage('@container_error_message:container03', 0) + return + + if container.getTemplate().startswith("object/tangible/inventory/shared_lightsaber_inventory") or target.getContainer().getTemplate().startswith("object/tangible/inventory/shared_lightsaber_inventory"): + core.equipmentService.calculateLightsaberAttributes(actor, target, container) + return; if target.getTemplate() == 'object/tangible/item/shared_loot_cash.iff': core.lootService.handleCreditPickUp(actor,target) @@ -20,11 +28,7 @@ def run(core, actor, target, commandString): if target.isLootItem(): target.setLootItem(0) - name=target.getCustomName() - if target.getCustomName() == None: - name='@' + target.getStfFilename() + ':' + target.getStfName() - - actor.sendSystemMessage('You looted ' + name + ' from corpse.', 0) + actor.sendSystemMessage('You looted ' + target.getTrueName() + ' from corpse.', 0) if actorContainer != None and (container.getTemplate() == "object/cell/shared_cell.iff") & core.housingService.getPermissions(actor, actorContainer): target.getContainer().transferTo(actor, container, target) @@ -39,8 +43,10 @@ def run(core, actor, target, commandString): actor.sendSystemMessage("You do not have permission to access that container!", 0) return - if core.equipmentService.canEquip(actor, target) is False: - actor.sendSystemMessage('@error_message:insufficient_skill', 0) + canEquip = core.equipmentService.canEquip(actor, target) + + if canEquip[0] is False and container == actor: + actor.sendSystemMessage(canEquip[1], 0) return @@ -64,11 +70,13 @@ def run(core, actor, target, commandString): oldContainer.transferTo(actor, container, target) + for object in replacedObjects: + core.equipmentService.unequip(actor, object) + if actor == container: if target.getTemplate().find('/wearables/') or target.getTemplate().find('/weapon/'): core.equipmentService.equip(actor, target) - for object in replacedObjects: - core.equipmentService.unequip(actor, object) + #path = 'scripts/' + target.getTemplate().rpartition('/')[0] + '/' #module = target.getTemplate().rpartition('/')[2].replace('shared_', '').replace('.iff', '') #core.scriptService.callScript(path, 'equip', module, core, actor, target) diff --git a/scripts/commands/transferitemweapon.py b/scripts/commands/transferitemweapon.py index 6e356571..b07c4e03 100644 --- a/scripts/commands/transferitemweapon.py +++ b/scripts/commands/transferitemweapon.py @@ -4,9 +4,7 @@ def setup(): return def run(core, actor, target, commandString): - if core.equipmentService.canEquip(actor, target) is False: - actor.sendSystemMessage('@error_message:insufficient_skill', 0) - return + parsedMsg = commandString.split(' ', 3) @@ -19,6 +17,12 @@ def run(core, actor, target, commandString): print 'Error: New container is same as old container.' return; + canEquip = core.equipmentService.canEquip(actor, target) + + if canEquip[0] is False and container == actor: + actor.sendSystemMessage(canEquip[1], 0) + return + replacedObject = None slotName = None replacedObjects = [] diff --git a/scripts/conversation/byxle.py b/scripts/conversation/byxle.py new file mode 100644 index 00000000..71c08205 --- /dev/null +++ b/scripts/conversation/byxle.py @@ -0,0 +1,15 @@ +from resources.common import ConversationOption +from resources.common import OutOfBand +from resources.common import ProsePackage +from java.util import Vector +import sys + +def startConversation(core, actor, npc): + convSvc = core.conversationService + + core.conversationService.sendStopConversation(actor, npc, 'conversation/tatooine_eisley_byxle', 's_48') + return + +def endConversation(core, actor, npc): + core.conversationService.sendStopConversation(actor, npc, 'conversation/tatooine_eisley_byxle', 's_48') + return \ No newline at end of file diff --git a/scripts/conversation/dunir.py b/scripts/conversation/dunir.py new file mode 100644 index 00000000..189e1748 --- /dev/null +++ b/scripts/conversation/dunir.py @@ -0,0 +1,15 @@ +from resources.common import ConversationOption +from resources.common import OutOfBand +from resources.common import ProsePackage +from java.util import Vector +import sys + +def startConversation(core, actor, npc): + convSvc = core.conversationService + + core.conversationService.sendStopConversation(actor, npc, 'conversation/tatooine_eisley_dunir', 's_37') + return + +def endConversation(core, actor, npc): + core.conversationService.sendStopConversation(actor, npc, 'conversation/tatooine_eisley_dunir', 's_37') + return \ No newline at end of file diff --git a/scripts/conversation/gendra.py b/scripts/conversation/gendra.py new file mode 100644 index 00000000..25277b59 --- /dev/null +++ b/scripts/conversation/gendra.py @@ -0,0 +1,15 @@ +from resources.common import ConversationOption +from resources.common import OutOfBand +from resources.common import ProsePackage +from java.util import Vector +import sys + +def startConversation(core, actor, npc): + convSvc = core.conversationService + + core.conversationService.sendStopConversation(actor, npc, 'conversation/tatooine_eisley_gendra', 's_99') + return + +def endConversation(core, actor, npc): + core.conversationService.sendStopConversation(actor, npc, 'conversation/tatooine_eisley_gendra', 's_99') + return \ No newline at end of file diff --git a/scripts/conversation/imp_recruiter.py b/scripts/conversation/imp_recruiter.py index 399294b1..7659eb4b 100644 --- a/scripts/conversation/imp_recruiter.py +++ b/scripts/conversation/imp_recruiter.py @@ -546,7 +546,7 @@ def handleSecondScreen(core, actor, npc, selection): def handleThirdScreen(core, actor, npc, selection): if selection == 0: core.conversationService.sendStopConversation(actor, npc, 'conversation/faction_recruiter_imperial', 's_94') - actor.setFaction('neutral') + actor.setFaction('') return if selection == 1: diff --git a/scripts/conversation/junk_dealer.py b/scripts/conversation/junk_dealer.py index 7c146b0f..5e5c435b 100644 --- a/scripts/conversation/junk_dealer.py +++ b/scripts/conversation/junk_dealer.py @@ -279,7 +279,7 @@ def noSellWindowCallBack(owner, window, eventType, returnList): #cancel if eventType == 1: - owner.sendSystemMessage('Cancle', 0) + owner.sendSystemMessage('Cancel', 0) sellItem = returnList.get(0) startConversation(coreRef,owner,junkDealerRef) return diff --git a/scripts/conversation/mayor_mikdanyel_guhrantt.py b/scripts/conversation/mayor_mikdanyel_guhrantt.py new file mode 100644 index 00000000..32d86b84 --- /dev/null +++ b/scripts/conversation/mayor_mikdanyel_guhrantt.py @@ -0,0 +1,15 @@ +from resources.common import ConversationOption +from resources.common import OutOfBand +from resources.common import ProsePackage +from java.util import Vector +import sys + +def startConversation(core, actor, npc): + convSvc = core.conversationService + + core.conversationService.sendStopConversation(actor, npc, 'conversation/mos_eisley_mayor', 's_117') + return + +def endConversation(core, actor, npc): + core.conversationService.sendStopConversation(actor, npc, 'conversation/mos_eisley_mayor', 's_117') + return \ No newline at end of file diff --git a/scripts/conversation/medical_cloning_droid.py b/scripts/conversation/medical_cloning_droid.py index 78bac164..8089c5f5 100644 --- a/scripts/conversation/medical_cloning_droid.py +++ b/scripts/conversation/medical_cloning_droid.py @@ -20,16 +20,23 @@ def startConversation(core, actor, npc): if actor.getBuffByName('cloning_sickness'): - prose = ProsePackage('conversation/clone_droid', 's_6') - outOfBand = OutOfBand() - outOfBand.addProsePackage(prose) - convSvc.sendConversationMessage(actor, npc, outOfBand) - prose2 = ProsePackage('conversation/clone_droid', 's_8') + + level = int(actor.getLevel()) + + if level <= 10: + cloningFee = 100 + elif level >= 11: + cloningFee = (((actor.getLevel() + 17) * actor.getLevel())/2) + elif level == 90: + cloningFee = 5000 + + convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage("@conversation/clone_droid:s_6", int(cloningFee))) + prose1 = ProsePackage('conversation/clone_droid', 's_8') outOfBand2 = OutOfBand() - outOfBand2.addProsePackage(prose2) - prose3 = ProsePackage('conversation/clone_droid', 's_12') + outOfBand2.addProsePackage(prose1) + prose2 = ProsePackage('conversation/clone_droid', 's_12') outOfBand3 = OutOfBand() - outOfBand3.addProsePackage(prose3) + outOfBand3.addProsePackage(prose2) option1 = ConversationOption(outOfBand2, 0) option2 = ConversationOption(outOfBand3, 1) @@ -41,7 +48,7 @@ def startConversation(core, actor, npc): convSvc.sendConversationOptions(actor, npc, options, handleFirstScreen) return else: - core.conversationService.sendStopConversation(actor, npc, 'conversation/clone_droid', 's_4') + core.conversationService.sendStopConversation(actor, npc, 'conversation/clone_droid', 's_14') return return @@ -68,24 +75,48 @@ def handleFirstScreen(core, actor, npc, selection): if selection == 1: - core.buffService.removeBuffFromCreature(actor, actor.getBuffByName("cloning_sickness")); - core.conversationService.sendStopConversation(actor, npc, 'conversation/clone_droid', 's_14') - return - return + if actor.getLevel() <= 10: + cloningFee = 100 + elif actor.getLevel() >= 11: + cloningFee = (((actor.getLevel() + 17) * actor.getLevel())/2) + elif actor.getLevel() == 90: + cloningFee = 5000 + + + if actor.getCashCredits() >= cloningFee: + core.buffService.removeBuffFromCreature(actor, actor.getBuffByName("cloning_sickness")); + core.conversationService.sendStopConversation(actor, npc, 'conversation/clone_droid', 's_14') + actor.setCashCredits(actor.getCashCredits() - int(cloningFee)) + return + elif actor.getCashCredits() <= cloningFee: + core.conversationService.sendStopConversation(actor, npc, 'conversation/clone_droid', 's_16') + return + return def handleSecondScreen(core, actor, npc, selection): convSvc = core.conversationService - + if actor.getLevel() <= 10: + cloningFee = 100 + elif actor.getLevel() >= 11: + cloningFee = (((actor.getLevel() + 17) * actor.getLevel())/2) + elif actor.getLevel() == 90: + cloningFee = 5000 if selection == 0: - core.buffService.removeBuffFromCreature(actor, actor.getBuffByName("cloning_sickness")); - core.conversationService.sendStopConversation(actor, npc, 'conversation/clone_droid', 's_14') + if actor.getCashCredits() >= cloningFee: + core.buffService.removeBuffFromCreature(actor, actor.getBuffByName("cloning_sickness")); + core.conversationService.sendStopConversation(actor, npc, 'conversation/clone_droid', 's_14') + actor.setCashCredits(actor.getCashCredits() - int(cloningFee)) + return + elif actor.getCashCredits() <= cloningFee: + core.conversationService.sendStopConversation(actor, npc, 'conversation/clone_droid', 's_16') + return return - return def endConversation(core, actor, npc): core.conversationService.sendStopConversation(actor, npc, 'conversation/clone_droid', 's_4') return - + + \ No newline at end of file diff --git a/scripts/conversation/missions/bounty_droid_probot.py b/scripts/conversation/missions/bounty_droid_probot.py new file mode 100644 index 00000000..ea327232 --- /dev/null +++ b/scripts/conversation/missions/bounty_droid_probot.py @@ -0,0 +1,70 @@ +from resources.common import ConversationOption +from resources.common import OutOfBand +from resources.common import ProsePackage +from java.util import Vector +import time +import sys + +def startConversation(core, actor, npc): + convSvc = core.conversationService + + probotRequester = core.objectService.getObject(long(npc.getAttachment('probotRequester'))) + + if probotRequester is None: + core.objectService.destroyObject(npc) + return + + if probotRequester.getObjectId() != actor.getObjectId(): + prose = ProsePackage('conversation/bounty_probot', 's_6') + outOfBand = OutOfBand() + outOfBand.addProsePackage(prose) + convSvc.sendConversationMessage(actor, npc, outOfBand) + return + + mission = core.objectService.getObject(long(npc.getAttachment('attachedMission'))) + + if mission is None: + prose = ProsePackage('conversation/bounty_probot', 's_4') + outOfBand = OutOfBand() + outOfBand.addProsePackage(prose) + convSvc.sendConversationMessage(actor, npc, prose) + return + + objective = mission.getObjective() + + if objective is None: + prose = ProsePackage('conversation/bounty_probot', 's_4') + outOfBand = OutOfBand() + outOfBand.addProsePackage(prose) + convSvc.sendConversationMessage(actor, npc, prose) + return + + prose = ProsePackage('conversation/bounty_probot', 's_5') + outOfBand = OutOfBand() + outOfBand.addProsePackage(prose) + convSvc.sendConversationMessage(actor, npc, outOfBand) + + options = Vector() + optionProse = ProsePackage('conversation/bounty_probot', 's_8') + optionOOB = OutOfBand() + optionOOB.addProsePackage(optionProse) + options.add(ConversationOption(optionOOB, 0)) + convSvc.sendConversationOptions(actor, npc, options, handleBioTransmit) + + return + +def handleBioTransmit(core, actor, npc, selection): + core.conversationService.handleEndConversation(actor, npc) + actor.sendSystemMessage('@mission/mission_generic:probe_droid_takeoff', 0) + + npc.setPosture(8) + + time.sleep(7) + objective = core.objectService.getObject(long(npc.getAttachment('attachedMission'))).getObjective() + objective.beginArakydUpdate(actor) + core.objectService.destroyObject(npc) + return + +def endConversation(core, actor, npc): + core.conversationService.sendStopConversation(actor, npc, '', '') + return diff --git a/scripts/conversation/missions/deliver.py b/scripts/conversation/missions/deliver.py index 5caef3fa..774e3e01 100644 --- a/scripts/conversation/missions/deliver.py +++ b/scripts/conversation/missions/deliver.py @@ -44,8 +44,8 @@ def handlePickupStage(core, actor, npc, objective, mission): return core.conversationService.sendStopConversation(actor, npc, mission.getMissionDescription(), 'm' + str(mission.getMissionId()) + 'p') - objective.createDeliveryItem() - objective.update() + objective.createDeliveryItem(core, actor) + objective.update(core, actor) return def handleDeliveryStage(core, actor, npc, objective, mission): @@ -56,7 +56,7 @@ def handleDeliveryStage(core, actor, npc, objective, mission): core.conversationService.sendStopConversation(actor, npc, mission.getMissionDescription(), 'm' + str(mission.getMissionId()) + 'r') core.objectService.destroyObject(objective.getDeliveryObject()) - objective.update() + objective.update(core, actor) return def handleCompletionStage(core, actor, npc, objective, mission): @@ -66,5 +66,5 @@ def handleCompletionStage(core, actor, npc, objective, mission): return core.conversationService.sendStopConversation(actor, npc, mission.getMissionDescription(), 'm' + str(mission.getMissionId()) + 's') - objective.complete() + core.missionService.handleMissionComplete(actor, mission) return \ No newline at end of file diff --git a/scripts/conversation/niko.py b/scripts/conversation/niko.py new file mode 100644 index 00000000..87e9d576 --- /dev/null +++ b/scripts/conversation/niko.py @@ -0,0 +1,15 @@ +from resources.common import ConversationOption +from resources.common import OutOfBand +from resources.common import ProsePackage +from java.util import Vector +import sys + +def startConversation(core, actor, npc): + convSvc = core.conversationService + + core.conversationService.sendStopConversation(actor, npc, 'conversation/tatooine_eisley_niko', 's_71') + return + +def endConversation(core, actor, npc): + core.conversationService.sendStopConversation(actor, npc, 'conversation/tatooine_eisley_niko', 's_71') + return \ No newline at end of file diff --git a/scripts/conversation/reb_recruiter.py b/scripts/conversation/reb_recruiter.py index 9c8b803d..e111b1c3 100644 --- a/scripts/conversation/reb_recruiter.py +++ b/scripts/conversation/reb_recruiter.py @@ -14,7 +14,6 @@ import sys impRecruiterRef = 0 - def startConversation(core, actor, npc): global coreRef global impRecruiterRef @@ -28,99 +27,41 @@ def startConversation(core, actor, npc): core.conversationService.sendStopConversation(actor, npc, 'conversation/faction_recruiter_rebel', 's_364') return elif actor.getFaction() != 'rebel' and actor.getFaction() != 'imperial': - prose = ProsePackage('conversation/faction_recruiter_rebel', 's_334') - outOfBand = OutOfBand() - outOfBand.addProsePackage(prose) - convSvc.sendConversationMessage(actor, npc, outOfBand) - prose2 = ProsePackage('conversation/faction_recruiter_rebel', 's_348') - outOfBand2 = OutOfBand() - outOfBand2.addProsePackage(prose2) - prose3 = ProsePackage('conversation/faction_recruiter_rebel', 's_83') - outOfBand3 = OutOfBand() - outOfBand3.addProsePackage(prose3) - option1 = ConversationOption(outOfBand2, 0) - option2 = ConversationOption(outOfBand3, 1) - + convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_334')) options = Vector() - options.add(option1) - options.add(option2) - + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_348'), 0)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_83'), 1)) convSvc.sendConversationOptions(actor, npc, options, handleFirstScreen) + return elif actor.getFaction() == 'rebel' and actor.getFactionStatus() == FactionStatus.OnLeave: - prose = ProsePackage('conversation/faction_recruiter_rebel', 's_216') - outOfBand = OutOfBand() - outOfBand.addProsePackage(prose) - convSvc.sendConversationMessage(actor, npc, outOfBand) - prose2 = ProsePackage('conversation/faction_recruiter_rebel', 's_49') - outOfBand2 = OutOfBand() - outOfBand2.addProsePackage(prose2) - prose3 = ProsePackage('conversation/faction_recruiter_rebel', 's_330') - outOfBand3 = OutOfBand() - outOfBand3.addProsePackage(prose3) - prose4 = ProsePackage('conversation/faction_recruiter_rebel', 's_248') - outOfBand4 = OutOfBand() - outOfBand4.addProsePackage(prose4) - option1 = ConversationOption(outOfBand2, 0) - option2 = ConversationOption(outOfBand3, 1) - option3 = ConversationOption(outOfBand4, 1) - + convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_216')) options = Vector() - options.add(option1) - options.add(option2) - options.add(option3) - - convSvc.sendConversationOptions(actor, npc, options, handleFirstScreen) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_49'), 0)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_330'), 1)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_248'), 2)) + convSvc.sendConversationOptions(actor, npc, options, handleFirstScreen) + return elif actor.getFaction() == 'rebel' and actor.getFactionStatus() == FactionStatus.Combatant: - prose = ProsePackage('conversation/faction_recruiter_rebel', 's_216') - outOfBand = OutOfBand() - outOfBand.addProsePackage(prose) - convSvc.sendConversationMessage(actor, npc, outOfBand) - prose2 = ProsePackage('conversation/faction_recruiter_rebel', 's_49') - outOfBand2 = OutOfBand() - outOfBand2.addProsePackage(prose2) - prose4 = ProsePackage('conversation/faction_recruiter_rebel', 's_330') - outOfBand4 = OutOfBand() - outOfBand4.addProsePackage(prose4) - prose5 = ProsePackage('conversation/faction_recruiter_rebel', 's_248') - outOfBand5 = OutOfBand() - outOfBand5.addProsePackage(prose5) - option1 = ConversationOption(outOfBand2, 0) - option2 = ConversationOption(outOfBand4, 1) - option4 = ConversationOption(outOfBand5, 1) + convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_216')) options = Vector() - options.add(option1) - options.add(option2) - options.add(option4) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_49'), 0)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_330'), 1)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_248'), 2)) convSvc.sendConversationOptions(actor, npc, options, handleFirstScreen) return elif actor.getFactionStatus() == FactionStatus.SpecialForces: - prose = ProsePackage('conversation/faction_recruiter_rebel', 's_216') - outOfBand = OutOfBand() - outOfBand.addProsePackage(prose) - convSvc.sendConversationMessage(actor, npc, outOfBand) - prose2 = ProsePackage('conversation/faction_recruiter_rebel', 's_49') - outOfBand2 = OutOfBand() - outOfBand2.addProsePackage(prose2) - prose4 = ProsePackage('conversation/faction_recruiter_rebel', 's_330') - outOfBand4 = OutOfBand() - outOfBand4.addProsePackage(prose4) - prose5 = ProsePackage('conversation/faction_recruiter_rebel', 's_248') - outOfBand5 = OutOfBand() - outOfBand5.addProsePackage(prose5) - option1 = ConversationOption(outOfBand2, 0) - option2 = ConversationOption(outOfBand4, 1) - option4 = ConversationOption(outOfBand5, 1) + convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_216')) options = Vector() - options.add(option1) - options.add(option2) - options.add(option4) + options.add(ConversationOption(OutOfBand.ProsePackage('conversation/faction_recruiter_rebel', 's_49'), 0)) + options.add(ConversationOption(OutOfBand.ProsePackage('conversation/faction_recruiter_rebel', 's_330'), 1)) + options.add(ConversationOption(OutOfBand.ProsePackage('conversation/faction_recruiter_rebel', 's_248'), 2)) convSvc.sendConversationOptions(actor, npc, options, handleFirstScreen) return @@ -131,183 +72,88 @@ def startConversation(core, actor, npc): return def handleFirstScreen(core, actor, npc, selection): - convSvc = core.conversationService + if actor.getFaction() != 'rebel' and actor.getFaction() != 'imperial': if selection == 0: - prose = ProsePackage('conversation/faction_recruiter_rebel', 's_352') - outOfBand = OutOfBand() - outOfBand.addProsePackage(prose) - convSvc.sendConversationMessage(actor, npc, outOfBand) - prose2 = ProsePackage('conversation/faction_recruiter_rebel', 's_354') - outOfBand2 = OutOfBand() - outOfBand2.addProsePackage(prose2) - prose3 = ProsePackage('conversation/faction_recruiter_rebel', 's_360') - outOfBand3 = OutOfBand() - outOfBand3.addProsePackage(prose3) - option1 = ConversationOption(outOfBand2, 0) - option2 = ConversationOption(outOfBand3, 1) - + convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_352')) options = Vector() - options.add(option1) - options.add(option2) - + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_354'), 0)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_360'), 1)) convSvc.sendConversationOptions(actor, npc, options, handleSecondScreen) - return - + return if selection == 1: return - if selection == 2: core.conversationService.sendStopConversation(actor, npc, 'conversation/faction_recruiter_rebel', 's_362') return return elif actor.getFaction() == 'rebel' and actor.getFactionStatus() == FactionStatus.OnLeave: if selection == 0: - prose = ProsePackage('conversation/faction_recruiter_rebel', 's_50') - outOfBand = OutOfBand() - outOfBand.addProsePackage(prose) - convSvc.sendConversationMessage(actor, npc, outOfBand) - prose2 = ProsePackage('conversation/faction_recruiter_rebel', 's_95') - outOfBand2 = OutOfBand() - outOfBand2.addProsePackage(prose2) - prose3 = ProsePackage('conversation/faction_recruiter_rebel', 's_93') - outOfBand3 = OutOfBand() - outOfBand3.addProsePackage(prose3) - prose4 = ProsePackage('conversation/faction_recruiter_rebel', 's_74') - outOfBand4 = OutOfBand() - outOfBand4.addProsePackage(prose4) - prose5 = ProsePackage('conversation/faction_recruiter_rebel', 's_360') - outOfBand5 = OutOfBand() - outOfBand5.addProsePackage(prose5) - option1 = ConversationOption(outOfBand2, 0) - option2 = ConversationOption(outOfBand3, 1) - option3 = ConversationOption(outOfBand4, 1) - option4 = ConversationOption(outOfBand5, 1) - + convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_50')) options = Vector() - options.add(option1) - options.add(option2) - options.add(option3) - options.add(option4) - + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_95'), 0)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_93'), 1)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_74'), 2)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_360'), 3)) convSvc.sendConversationOptions(actor, npc, options, handleSecondScreen) - return + return if selection == 1: percent = core.guildService.getGuildObject().getCurrentServerGCWTotalPercentMap().get(actor.getPlanet().getName()).getPercent().intValue() - convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage("@conversation/faction_recruiter_imperial:s_332", percent, "TO", str(100 - percent))) + convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage("@conversation/faction_recruiter_rebel:s_332", percent, "TO", str(100 - percent))) return - if selection == 2: return return elif actor.getFaction() == 'rebel' and actor.getFactionStatus() == FactionStatus.Combatant: if selection == 0: - prose = ProsePackage('conversation/faction_recruiter_rebel', 's_50') - outOfBand = OutOfBand() - outOfBand.addProsePackage(prose) - convSvc.sendConversationMessage(actor, npc, outOfBand) - prose2 = ProsePackage('conversation/faction_recruiter_rebel', 's_86') - outOfBand2 = OutOfBand() - outOfBand2.addProsePackage(prose2) - prose3 = ProsePackage('conversation/faction_recruiter_rebel', 's_93') - outOfBand3 = OutOfBand() - outOfBand3.addProsePackage(prose3) - prose4 = ProsePackage('conversation/faction_recruiter_rebel', 's_74') - outOfBand4 = OutOfBand() - outOfBand4.addProsePackage(prose4) - prose5 = ProsePackage('conversation/faction_recruiter_rebel', 's_360') - outOfBand5 = OutOfBand() - outOfBand5.addProsePackage(prose5) - option1 = ConversationOption(outOfBand2, 0) - option2 = ConversationOption(outOfBand3, 1) - option3 = ConversationOption(outOfBand4, 1) - option4 = ConversationOption(outOfBand5, 1) - + convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage('conversation/faction_recruiter_rebel', 's_50')) options = Vector() - options.add(option1) - options.add(option2) - options.add(option3) - options.add(option4) - + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_86'), 0)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_93'), 1)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_74'), 2)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_360'), 3)) convSvc.sendConversationOptions(actor, npc, options, handleSecondScreen) + return - if selection == 1: percent = core.guildService.getGuildObject().getCurrentServerGCWTotalPercentMap().get(actor.getPlanet().getName()).getPercent().intValue() convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage("@conversation/faction_recruiter_rebel:s_332", percent, "TO", str(100 - percent))) return - if selection == 2: - prose = ProsePackage('conversation/faction_recruiter_rebel', 's_76') - outOfBand = OutOfBand() - outOfBand.addProsePackage(prose) - convSvc.sendConversationMessage(actor, npc, outOfBand) - prose2 = ProsePackage('conversation/faction_recruiter_rebel', 's_78') - outOfBand2 = OutOfBand() - outOfBand2.addProsePackage(prose2) - prose3 = ProsePackage('conversation/faction_recruiter_rebel', 's_360') - outOfBand3 = OutOfBand() - outOfBand3.addProsePackage(prose3) - option1 = ConversationOption(outOfBand2, 0) - option2 = ConversationOption(outOfBand3, 1) - + convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_76')) options = Vector() - options.add(option1) - options.add(option2) - + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_78'), 0)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_360'), 1)) convSvc.sendConversationOptions(actor, npc, options, handleSecondScreen) + return return elif actor.getFaction() == 'rebel' and actor.getFactionStatus() == FactionStatus.SpecialForces: if selection == 0: - prose = ProsePackage('conversation/faction_recruiter_rebel', 's_50') - outOfBand = OutOfBand() - outOfBand.addProsePackage(prose) - convSvc.sendConversationMessage(actor, npc, outOfBand) - prose2 = ProsePackage('conversation/faction_recruiter_rebel', 's_90') - outOfBand2 = OutOfBand() - outOfBand2.addProsePackage(prose2) - prose3 = ProsePackage('conversation/faction_recruiter_rebel', 's_95') - outOfBand3 = OutOfBand() - outOfBand3.addProsePackage(prose3) - prose4 = ProsePackage('conversation/faction_recruiter_rebel', 's_78') - outOfBand4 = OutOfBand() - outOfBand4.addProsePackage(prose4) - prose5 = ProsePackage('conversation/faction_recruiter_rebel', 's_360') - outOfBand5 = OutOfBand() - outOfBand5.addProsePackage(prose5) - option1 = ConversationOption(outOfBand2, 0) - option2 = ConversationOption(outOfBand3, 1) - option3 = ConversationOption(outOfBand4, 1) - option4 = ConversationOption(outOfBand5, 1) - + convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_50')) options = Vector() - options.add(option1) - options.add(option2) - options.add(option3) - options.add(option4) - + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_90'), 0)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_95'), 1)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_78'), 2)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_360'), 3)) convSvc.sendConversationOptions(actor, npc, options, handleSecondScreen) + return - if selection == 1: percent = core.guildService.getGuildObject().getCurrentServerGCWTotalPercentMap().get(actor.getPlanet().getName()).getPercent().intValue() convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage("@conversation/faction_recruiter_rebel:s_332", percent, "TO", str(100 - percent))) return - if selection == 2: - return return - def handleSecondScreen(core, actor, npc, selection): convSvc = core.conversationService @@ -315,80 +161,43 @@ def handleSecondScreen(core, actor, npc, selection): if actor.getFaction() != 'rebel' and actor.getFaction() != 'imperial': if selection == 0: - actor.setFaction('imperial') + actor.setFaction('rebel') actor.setFactionStatus(FactionStatus.OnLeave) - - prose = ProsePackage('conversation/faction_recruiter_rebel', 's_99') - outOfBand = OutOfBand() - outOfBand.addProsePackage(prose) - convSvc.sendConversationMessage(actor, npc, outOfBand) - prose2 = ProsePackage('conversation/faction_recruiter_rebel', 's_358') - outOfBand2 = OutOfBand() - outOfBand2.addProsePackage(prose2) - option1 = ConversationOption(outOfBand2, 0) - + actor.updatePvpStatus() + + convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_99')) options = Vector() - options.add(option1) - - - core.conversationService.sendStopConversation(actor, npc, 'conversation/faction_recruiter_rebel', 's_356') + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_358'), 0)) + core.conversationService.sendStopConversation(actor, npc, 'conversation/faction_recruiter_rebel', 's_356') + return - if selection ==1: + if selection == 1: core.conversationService.sendStopConversation(actor, npc, 'conversation/faction_recruiter_rebel', 's_362') return return elif actor.getFaction() == 'rebel' and actor.getFactionStatus() == FactionStatus.OnLeave: if selection == 0: - actor.setFactionStatus(FactionStatus.Combatant) + core.factionService.changeFactionStatus(actor, FactionStatus.Combatant) core.conversationService.sendStopConversation(actor, npc, 'conversation/faction_recruiter_rebel', 's_224') return - if selection == 1: - prose = ProsePackage('conversation/faction_recruiter_rebel', 's_64') - outOfBand = OutOfBand() - outOfBand.addProsePackage(prose) - convSvc.sendConversationMessage(actor, npc, outOfBand) - prose2 = ProsePackage('conversation/faction_recruiter_rebel', 's_66') - outOfBand2 = OutOfBand() - outOfBand2.addProsePackage(prose2) - prose3 = ProsePackage('conversation/faction_recruiter_rebel', 's_226') - outOfBand3 = OutOfBand() - outOfBand3.addProsePackage(prose3) - option1 = ConversationOption(outOfBand2, 0) - option2 = ConversationOption(outOfBand3, 1) - - + convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_64')) options = Vector() - options.add(option1) - options.add(option2) - - + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_66'), 0)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_226'), 1)) convSvc.sendConversationOptions(actor, npc, options, handleFourthScreen) + return if selection == 2: - prose = ProsePackage('conversation/faction_recruiter_rebel', 's_76') - outOfBand = OutOfBand() - outOfBand.addProsePackage(prose) - convSvc.sendConversationMessage(actor, npc, outOfBand) - prose2 = ProsePackage('conversation/faction_recruiter_rebel', 's_78') - outOfBand2 = OutOfBand() - outOfBand2.addProsePackage(prose2) - prose3 = ProsePackage('conversation/faction_recruiter_rebel', 's_360') - outOfBand3 = OutOfBand() - outOfBand3.addProsePackage(prose3) - option1 = ConversationOption(outOfBand2, 0) - option2 = ConversationOption(outOfBand3, 1) - - + convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_76')) options = Vector() - options.add(option1) - options.add(option2) - - + options.add(ConversationOption(outOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_78'), 0)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_360'), 1)) convSvc.sendConversationOptions(actor, npc, options, handleThirdScreen) + return if selection == 3: core.conversationService.sendStopConversation(actor, npc, 'conversation/faction_recruiter_rebel', 's_97') @@ -396,167 +205,80 @@ def handleSecondScreen(core, actor, npc, selection): return elif actor.getFaction() == 'rebel' and actor.getFactionStatus() == FactionStatus.Combatant: if selection == 0: - prose = ProsePackage('conversation/faction_recruiter_rebel', 's_88') - outOfBand = OutOfBand() - outOfBand.addProsePackage(prose) - convSvc.sendConversationMessage(actor, npc, outOfBand) - prose2 = ProsePackage('conversation/faction_recruiter_rebel', 's_90') - outOfBand2 = OutOfBand() - outOfBand2.addProsePackage(prose2) - prose3 = ProsePackage('conversation/faction_recruiter_rebel', 's_94') - outOfBand3 = OutOfBand() - outOfBand3.addProsePackage(prose3) - option1 = ConversationOption(outOfBand2, 0) - option2 = ConversationOption(outOfBand3, 1) - - + convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_88')) options = Vector() - options.add(option1) - options.add(option2) - - + options.add(ConversationOption(outOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_90'), 0)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_94'), 1)) convSvc.sendConversationOptions(actor, npc, options, handleFithScreen) + return - if selection == 1: - prose = ProsePackage('conversation/faction_recruiter_rebel', 's_64') - outOfBand = OutOfBand() - outOfBand.addProsePackage(prose) - convSvc.sendConversationMessage(actor, npc, outOfBand) - prose2 = ProsePackage('conversation/faction_recruiter_rebel', 's_66') - outOfBand2 = OutOfBand() - outOfBand2.addProsePackage(prose2) - prose3 = ProsePackage('conversation/faction_recruiter_rebel', 's_226') - outOfBand3 = OutOfBand() - outOfBand3.addProsePackage(prose3) - option1 = ConversationOption(outOfBand2, 0) - option2 = ConversationOption(outOfBand3, 1) - - + convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_64')) options = Vector() - options.add(option1) - options.add(option2) - - + options.add(ConversationOption(outOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_66'), 0)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_226'), 1)) convSvc.sendConversationOptions(actor, npc, options, handleFourthScreen) + return if selection == 2: - prose = ProsePackage('conversation/faction_recruiter_rebel', 's_76') - outOfBand = OutOfBand() - outOfBand.addProsePackage(prose) - convSvc.sendConversationMessage(actor, npc, outOfBand) - prose2 = ProsePackage('conversation/faction_recruiter_rebel', 's_78') - outOfBand2 = OutOfBand() - outOfBand2.addProsePackage(prose2) - prose3 = ProsePackage('conversation/faction_recruiter_rebel', 's_360') - outOfBand3 = OutOfBand() - outOfBand3.addProsePackage(prose3) - option1 = ConversationOption(outOfBand2, 0) - option2 = ConversationOption(outOfBand3, 1) - - + convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_76')) options = Vector() - options.add(option1) - options.add(option2) - - + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_78'), 0)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_360'), 1)) convSvc.sendConversationOptions(actor, npc, options, handleThirdScreen) + return if selection == 3: return return elif actor.getFaction() == 'rebel' and actor.getFactionStatus() == FactionStatus.SpecialForces: if selection == 0: - prose = ProsePackage('conversation/faction_recruiter_rebel', 's_88') - outOfBand = OutOfBand() - outOfBand.addProsePackage(prose) - convSvc.sendConversationMessage(actor, npc, outOfBand) - prose2 = ProsePackage('conversation/faction_recruiter_rebel', 's_90') - outOfBand2 = OutOfBand() - outOfBand2.addProsePackage(prose2) - prose3 = ProsePackage('conversation/faction_recruiter_rebel', 's_94') - outOfBand3 = OutOfBand() - outOfBand3.addProsePackage(prose3) - option1 = ConversationOption(outOfBand2, 0) - option2 = ConversationOption(outOfBand3, 1) - - + convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage('conversation/faction_recruiter_rebel:s_88')) options = Vector() - options.add(option1) - options.add(option2) - - + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_90'), 0)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_94'), 1)) convSvc.sendConversationOptions(actor, npc, options, handleFithScreen) + return - if selection == 1: - prose = ProsePackage('conversation/faction_recruiter_rebel', 's_54') - outOfBand = OutOfBand() - outOfBand.addProsePackage(prose) - convSvc.sendConversationMessage(actor, npc, outOfBand) - prose2 = ProsePackage('conversation/faction_recruiter_rebel', 's_56') - outOfBand2 = OutOfBand() - outOfBand2.addProsePackage(prose2) - prose3 = ProsePackage('conversation/faction_recruiter_rebel', 's_360') - outOfBand3 = OutOfBand() - outOfBand3.addProsePackage(prose3) - option1 = ConversationOption(outOfBand2, 0) - option2 = ConversationOption(outOfBand3, 1) - - + convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_54')) options = Vector() - options.add(option1) - options.add(option2) - - + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_56'), 0)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_360'), 1)) convSvc.sendConversationOptions(actor, npc, options, handleSixthScreen) + return if selection == 2: - prose = ProsePackage('conversation/faction_recruiter_rebel', 's_76') - outOfBand = OutOfBand() - outOfBand.addProsePackage(prose) - convSvc.sendConversationMessage(actor, npc, outOfBand) - prose2 = ProsePackage('conversation/faction_recruiter_rebel', 's_74') - outOfBand2 = OutOfBand() - outOfBand2.addProsePackage(prose2) - prose3 = ProsePackage('conversation/faction_recruiter_rebel', 's_360') - outOfBand3 = OutOfBand() - outOfBand3.addProsePackage(prose3) - option1 = ConversationOption(outOfBand2, 0) - option2 = ConversationOption(outOfBand3, 1) - - - + convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_76')) + options = Vector() - options.add(option1) - options.add(option2) - - + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_74'), 0)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_360'), 1)) convSvc.sendConversationOptions(actor, npc, options, handleThirdScreen) + return if selection == 3: return return - + def handleThirdScreen(core, actor, npc, selection): if selection == 0: core.conversationService.sendStopConversation(actor, npc, 'conversation/faction_recruiter_rebel', 's_58') - actor.setFaction('neutral') + core.factionService.resign(actor) return - if selection == 1: core.conversationService.sendStopConversation(actor, npc, 'conversation/faction_recruiter_rebel', 's_80') return return - + def handleFourthScreen(core, actor, npc, selection): if selection == 0: - actor.setFactionStatus(FactionStatus.SpecialForces) + core.factionService.changeFactionStatus(actor, FactionStatus.SpecialForces) core.conversationService.sendStopConversation(actor, npc, 'conversation/faction_recruiter_rebel', 's_224') return if selection == 1: @@ -566,20 +288,20 @@ def handleFourthScreen(core, actor, npc, selection): def handleFithScreen(core, actor, npc, selection): if selection == 0: - actor.setFactionStatus(FactionStatus.OnLeave); + core.factionService.changeFactionStatus(actor, FactionStatus.OnLeave) core.conversationService.sendStopConversation(actor, npc, 'conversation/faction_recruiter_rebel', 's_58') return - + def handleSixthScreen(core, actor, npc, selection): if selection == 0: - actor.setFactionStatus(FactionStatus.Combatant) + core.factionService.changeFactionStatus(actor, FactionStatus.Combatant) core.conversationService.sendStopConversation(actor, npc, 'conversation/faction_recruiter_rebel', 's_92') return if selection == 1: core.conversationService.sendStopConversation(actor, npc, 'conversation/faction_recruiter_rebel', 's_57') return return - + def endConversation(core, actor, npc): core.conversationService.sendStopConversation(actor, npc, 'conversation/faction_recruiter_imperial', 's_304') return \ No newline at end of file diff --git a/scripts/conversation/reimos.py b/scripts/conversation/reimos.py new file mode 100644 index 00000000..dcc7a6e1 --- /dev/null +++ b/scripts/conversation/reimos.py @@ -0,0 +1,15 @@ +from resources.common import ConversationOption +from resources.common import OutOfBand +from resources.common import ProsePackage +from java.util import Vector +import sys + +def startConversation(core, actor, npc): + convSvc = core.conversationService + + core.conversationService.sendStopConversation(actor, npc, 'conversation/tatooine_eisley_reimos_v2', 's_36') + return + +def endConversation(core, actor, npc): + core.conversationService.sendStopConversation(actor, npc, 'conversation/tatooine_eisley_reimos_v2', 's_36') + return \ No newline at end of file diff --git a/scripts/conversation/respec.py b/scripts/conversation/respec.py index f929002e..1c54294c 100644 --- a/scripts/conversation/respec.py +++ b/scripts/conversation/respec.py @@ -6,91 +6,55 @@ import sys def startConversation(core, actor, npc): convSvc = core.conversationService - prose = ProsePackage('conversation/respecseller', 's_31') - outOfBand = OutOfBand() - outOfBand.addProsePackage(prose) - convSvc.sendConversationMessage(actor, npc, outOfBand) - prose2 = ProsePackage('conversation/respecseller', 's_32') - outOfBand2 = OutOfBand() - outOfBand2.addProsePackage(prose2) - prose3 = ProsePackage('conversation/respecseller', 's_33') - outOfBand3 = OutOfBand() - outOfBand3.addProsePackage(prose3) - option1 = ConversationOption(outOfBand2, 0) - option2 = ConversationOption(outOfBand3, 1) + + convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage('@conversation/respecseller:s_31')) + options = Vector() - options.add(option1) - options.add(option2) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/respecseller:s_32'), 0)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/respecseller:s_33'), 1)) convSvc.sendConversationOptions(actor, npc, options, handleFirstScreen) - return + return + def handleFirstScreen(core, actor, npc, selection): - - if selection == 0: - # respec - # TODO: check for prices - convSvc = core.conversationService - prose = ProsePackage('conversation/respecseller', 's_58') - outOfBand = OutOfBand() - outOfBand.addProsePackage(prose) - convSvc.sendConversationMessage(actor, npc, outOfBand) - prose2 = ProsePackage('conversation/respecseller', 's_60') - outOfBand2 = OutOfBand() - outOfBand2.addProsePackage(prose2) - prose3 = ProsePackage('conversation/respecseller', 's_64') - outOfBand3 = OutOfBand() - outOfBand3.addProsePackage(prose3) - option1 = ConversationOption(outOfBand2, 0) - option2 = ConversationOption(outOfBand3, 1) - options = Vector() - options.add(option1) - options.add(option2) - convSvc.sendConversationOptions(actor, npc, options, handleRespecScreen) - return - if selection == 1: - # expertise reset - # TODO: check for prices - convSvc = core.conversationService - prose = ProsePackage('conversation/respecseller', 's_35') - outOfBand = OutOfBand() - outOfBand.addProsePackage(prose) - convSvc.sendConversationMessage(actor, npc, outOfBand) - prose2 = ProsePackage('conversation/respecseller', 's_71') - outOfBand2 = OutOfBand() - outOfBand2.addProsePackage(prose2) - prose3 = ProsePackage('conversation/respecseller', 's_72') - outOfBand3 = OutOfBand() - outOfBand3.addProsePackage(prose3) - option1 = ConversationOption(outOfBand2, 0) - option2 = ConversationOption(outOfBand3, 1) - options = Vector() - options.add(option1) - options.add(option2) - convSvc.sendConversationOptions(actor, npc, options, handleResetScreen) - - - return + convSvc = core.conversationService -def handleRespecScreen(core, actor, npc, selection): + # TODO: check for prices + + if selection == 0: # respec + convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage('@conversation/respecseller:s_58')) + + options = Vector() + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/respecseller:s_60'), 0)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/respecseller:s_64'), 1)) + convSvc.sendConversationOptions(actor, npc, options, handleRespecScreen) + + if selection == 1: # expertise reset + convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage('@conversation/respecseller:s_35')) + + options = Vector() + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/respecseller:s_71'), 0)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/respecseller:s_72'), 1)) + convSvc.sendConversationOptions(actor, npc, options, handleResetScreen) + + return +def handleRespecScreen(core, actor, npc, selection): if selection == 0: core.skillService.sendRespecWindow(actor) - + core.conversationService.handleEndConversation(actor, npc) - + return - def handleResetScreen(core, actor, npc, selection): - if selection == 0: core.skillService.resetExpertise(actor) - - core.conversationService.handleEndConversation(actor, npc) - - return + core.conversationService.handleEndConversation(actor, npc) + + return + def endConversation(core, actor, npc): core.conversationService.sendStopConversation(actor, npc, 'conversation/respecseller', 's_38') return - \ No newline at end of file diff --git a/scripts/conversation/toggi.py b/scripts/conversation/toggi.py new file mode 100644 index 00000000..0654f9c3 --- /dev/null +++ b/scripts/conversation/toggi.py @@ -0,0 +1,15 @@ +from resources.common import ConversationOption +from resources.common import OutOfBand +from resources.common import ProsePackage +from java.util import Vector +import sys + +def startConversation(core, actor, npc): + convSvc = core.conversationService + + core.conversationService.sendStopConversation(actor, npc, 'conversation/tatooine_eisley_toggi', 's_4') + return + +def endConversation(core, actor, npc): + core.conversationService.sendStopConversation(actor, npc, 'conversation/tatooine_eisley_toggi', 's_4') + return \ No newline at end of file diff --git a/scripts/expertise/expertise_of_medical_sup_1.py b/scripts/expertise/expertise_of_medical_sup_1.py index fe15a79d..3b3e1915 100644 --- a/scripts/expertise/expertise_of_medical_sup_1.py +++ b/scripts/expertise/expertise_of_medical_sup_1.py @@ -1,17 +1,17 @@ import sys def addAbilities(core, actor, player): - if actor.getLevel() >= 10: + if actor.getLevel() >= 18: actor.addAbility("of_medical_sup_1") - if actor.getLevel() >= 34: + if actor.getLevel() >= 30: actor.addAbility("of_medical_sup_2") - if actor.getLevel() >= 48: + if actor.getLevel() >= 44: actor.addAbility("of_medical_sup_3") - if actor.getLevel() >= 62: + if actor.getLevel() >= 58: actor.addAbility("of_medical_sup_4") - if actor.getLevel() >= 76: + if actor.getLevel() >= 72: actor.addAbility("of_medical_sup_5") - if actor.getLevel() >= 90: + if actor.getLevel() >= 86: actor.addAbility("of_medical_sup_6") return diff --git a/scripts/expertise/expertise_sm_general_bad_odds_1.py b/scripts/expertise/expertise_sm_general_bad_odds_1.py index fa70a2fc..5435e2e9 100644 --- a/scripts/expertise/expertise_sm_general_bad_odds_1.py +++ b/scripts/expertise/expertise_sm_general_bad_odds_1.py @@ -1,15 +1,15 @@ import sys def addAbilities(core, actor, player): - if actor.getLevel() >= 26: - actor.addAbility("sm_bad_odds_1") if actor.getLevel() >= 34: + actor.addAbility("sm_bad_odds_1") + if actor.getLevel() >= 46: actor.addAbility("sm_bad_odds_2") - if actor.getLevel() >= 48: + if actor.getLevel() >= 58: actor.addAbility("sm_bad_odds_3") - if actor.getLevel() >= 62: + if actor.getLevel() >= 74: actor.addAbility("sm_bad_odds_4") - if actor.getLevel() >= 76: + if actor.getLevel() >= 84: actor.addAbility("sm_bad_odds_5") return diff --git a/scripts/expertise/expertise_sm_path_shoot_first_1.py b/scripts/expertise/expertise_sm_path_shoot_first_1.py index 3cfcce30..3dbc049f 100644 --- a/scripts/expertise/expertise_sm_path_shoot_first_1.py +++ b/scripts/expertise/expertise_sm_path_shoot_first_1.py @@ -1,15 +1,15 @@ import sys def addAbilities(core, actor, player): - if actor.getLevel() >= 26: - actor.addAbility("sm_shoot_first_1") if actor.getLevel() >= 34: + actor.addAbility("sm_shoot_first_1") + if actor.getLevel() >= 46: actor.addAbility("sm_shoot_first_2") - if actor.getLevel() >= 48: - actor.addAbility("sm_shoot_first_3") if actor.getLevel() >= 62: + actor.addAbility("sm_shoot_first_3") + if actor.getLevel() >= 74: actor.addAbility("sm_shoot_first_4") - if actor.getLevel() >= 76: + if actor.getLevel() >= 90: actor.addAbility("sm_shoot_first_5") return diff --git a/scripts/houses/player_cityhall_corellia_style_01.py b/scripts/houses/player_cityhall_corellia_style_01.py index 7b9e070b..ff396cb0 100644 --- a/scripts/houses/player_cityhall_corellia_style_01.py +++ b/scripts/houses/player_cityhall_corellia_style_01.py @@ -2,13 +2,15 @@ import sys from services.housing import HouseTemplate from engine.resources.scene import Point3D -def setup(core): +def setup(housingTemplates): houseTemplate = HouseTemplate("object/tangible/deed/city_deed/shared_cityhall_corellia_deed.iff", "object/building/player/city/shared_cityhall_corellia.iff", 0) houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(1, 2, 3)) houseTemplate.addPlaceablePlanet("corellia") houseTemplate.addPlaceablePlanet("talus") houseTemplate.setDefaultItemLimit(400) + houseTemplate.setBaseMaintenanceRate(308) + + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) - core.housingService.addHousingTemplate(houseTemplate) return \ No newline at end of file diff --git a/scripts/houses/player_cityhall_naboo_style_01.py b/scripts/houses/player_cityhall_naboo_style_01.py index 0e9a8335..8bb52c69 100644 --- a/scripts/houses/player_cityhall_naboo_style_01.py +++ b/scripts/houses/player_cityhall_naboo_style_01.py @@ -2,7 +2,7 @@ import sys from services.housing import HouseTemplate from engine.resources.scene import Point3D -def setup(core): +def setup(housingTemplates): houseTemplate = HouseTemplate("object/tangible/deed/city_deed/shared_cityhall_naboo_deed.iff", "object/building/player/city/shared_cityhall_naboo.iff", 0) houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(1, 2, 3)) @@ -10,6 +10,7 @@ def setup(core): houseTemplate.addPlaceablePlanet("rori") houseTemplate.addPlaceablePlanet("dantooine") houseTemplate.setDefaultItemLimit(400) + houseTemplate.setBaseMaintenanceRate(308) - core.housingService.addHousingTemplate(houseTemplate) + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) return \ No newline at end of file diff --git a/scripts/houses/player_cityhall_tatooine_style_01.py b/scripts/houses/player_cityhall_tatooine_style_01.py index da337900..766ed7cf 100644 --- a/scripts/houses/player_cityhall_tatooine_style_01.py +++ b/scripts/houses/player_cityhall_tatooine_style_01.py @@ -2,7 +2,7 @@ import sys from services.housing import HouseTemplate from engine.resources.scene import Point3D -def setup(core): +def setup(housingTemplates): houseTemplate = HouseTemplate("object/tangible/deed/city_deed/shared_cityhall_tatooine_deed.iff", "object/building/player/city/shared_cityhall_tatooine.iff", 0) houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(1, 2, 3)) @@ -10,6 +10,7 @@ def setup(core): houseTemplate.addPlaceablePlanet("dantooine") houseTemplate.addPlaceablePlanet("lok") houseTemplate.setDefaultItemLimit(400) + houseTemplate.setBaseMaintenanceRate(308) - core.housingService.addHousingTemplate(houseTemplate) + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) return \ No newline at end of file diff --git a/scripts/houses/player_garden_tatooine_sml_01.py b/scripts/houses/player_garden_tatooine_sml_01.py new file mode 100644 index 00000000..ed3b2981 --- /dev/null +++ b/scripts/houses/player_garden_tatooine_sml_01.py @@ -0,0 +1,15 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(housingTemplates): + houseTemplate = HouseTemplate("object/tangible/deed/city_deed/shared_garden_tatooine_sml_01_deed.iff", "object/building/player/city/shared_garden_tatooine_sml_01.iff", 0) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(1, 2, 3)) + houseTemplate.addPlaceablePlanet("tatooine") + houseTemplate.addPlaceablePlanet("dantooine") + houseTemplate.addPlaceablePlanet("lok") + houseTemplate.setDefaultItemLimit(0) + + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_guildhall_corellia_style_01.py b/scripts/houses/player_guildhall_corellia_style_01.py index d48d14e0..31cb89f8 100644 --- a/scripts/houses/player_guildhall_corellia_style_01.py +++ b/scripts/houses/player_guildhall_corellia_style_01.py @@ -2,13 +2,14 @@ import sys from services.housing import HouseTemplate from engine.resources.scene import Point3D -def setup(core): +def setup(housingTemplates): houseTemplate = HouseTemplate("object/tangible/deed/guild_deed/shared_corellia_guild_deed.iff", "object/building/player/shared_player_guildhall_corellia_style_01.iff", 5) houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(6), float(3), float(18.4))) houseTemplate.addPlaceablePlanet("corellia") houseTemplate.addPlaceablePlanet("talus") houseTemplate.setDefaultItemLimit(400) + houseTemplate.setBaseMaintenanceRate(100) - core.housingService.addHousingTemplate(houseTemplate) + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) return \ No newline at end of file diff --git a/scripts/houses/player_guildhall_generic_style_01.py b/scripts/houses/player_guildhall_generic_style_01.py index a52507ea..a60c94d6 100644 --- a/scripts/houses/player_guildhall_generic_style_01.py +++ b/scripts/houses/player_guildhall_generic_style_01.py @@ -2,8 +2,8 @@ import sys from services.housing import HouseTemplate from engine.resources.scene import Point3D -def setup(core): - houseTemplate = HouseTemplate("object/tangible/deed/guild_deed/shared_generic_guild_deed.iff", "object/building/player/shared_player_guildhall_generic_style_01.iff", 2) +def setup(housingTemplates): + houseTemplate = HouseTemplate("object/tangible/deed/guild_deed/shared_generic_guild_deed.iff", "object/building/player/shared_player_guildhall_generic_style_01.iff", 5) houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(6), float(3), float(18.4))) houseTemplate.addPlaceablePlanet("tatooine") @@ -14,6 +14,7 @@ def setup(core): houseTemplate.addPlaceablePlanet("dantooine") houseTemplate.addPlaceablePlanet("lok") houseTemplate.setDefaultItemLimit(400) + houseTemplate.setBaseMaintenanceRate(100) - core.housingService.addHousingTemplate(houseTemplate) + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) return \ No newline at end of file diff --git a/scripts/houses/player_guildhall_naboo_style_01.py b/scripts/houses/player_guildhall_naboo_style_01.py index 61304374..c9a2777e 100644 --- a/scripts/houses/player_guildhall_naboo_style_01.py +++ b/scripts/houses/player_guildhall_naboo_style_01.py @@ -2,7 +2,7 @@ import sys from services.housing import HouseTemplate from engine.resources.scene import Point3D -def setup(core): +def setup(housingTemplates): houseTemplate = HouseTemplate("object/tangible/deed/guild_deed/shared_naboo_guild_deed.iff", "object/building/player/shared_player_guildhall_naboo_style_01.iff", 5) houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(6), float(3), float(18.4))) @@ -10,6 +10,7 @@ def setup(core): houseTemplate.addPlaceablePlanet("rori") houseTemplate.addPlaceablePlanet("dantooine") houseTemplate.setDefaultItemLimit(400) + houseTemplate.setBaseMaintenanceRate(100) - core.housingService.addHousingTemplate(houseTemplate) + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) return \ No newline at end of file diff --git a/scripts/houses/player_guildhall_tatooine_style_01.py b/scripts/houses/player_guildhall_tatooine_style_01.py index edae69a7..05a70c0c 100644 --- a/scripts/houses/player_guildhall_tatooine_style_01.py +++ b/scripts/houses/player_guildhall_tatooine_style_01.py @@ -2,7 +2,7 @@ import sys from services.housing import HouseTemplate from engine.resources.scene import Point3D -def setup(core): +def setup(housingTemplates): houseTemplate = HouseTemplate("object/tangible/deed/guild_deed/shared_tatooine_guild_deed.iff", "object/building/player/shared_player_guildhall_tatooine_style_01.iff", 5) houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(6), float(3), float(18.4))) @@ -10,6 +10,7 @@ def setup(core): houseTemplate.addPlaceablePlanet("dantooine") houseTemplate.addPlaceablePlanet("lok") houseTemplate.setDefaultItemLimit(400) + houseTemplate.setBaseMaintenanceRate(100) - core.housingService.addHousingTemplate(houseTemplate) + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) return \ No newline at end of file diff --git a/scripts/houses/player_guildhall_tatooine_style_02.py b/scripts/houses/player_guildhall_tatooine_style_02.py index 395b56d6..451bb05a 100644 --- a/scripts/houses/player_guildhall_tatooine_style_02.py +++ b/scripts/houses/player_guildhall_tatooine_style_02.py @@ -2,7 +2,7 @@ import sys from services.housing import HouseTemplate from engine.resources.scene import Point3D -def setup(core): +def setup(housingTemplates): houseTemplate = HouseTemplate("object/tangible/deed/guild_deed/shared_tatooine_guild_style_02_deed.iff", "object/building/player/shared_player_guildhall_tatooine_style_02.iff", 5) houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(5.5), float(4), float(12.7))) @@ -10,6 +10,7 @@ def setup(core): houseTemplate.addPlaceablePlanet("dantooine") houseTemplate.addPlaceablePlanet("lok") houseTemplate.setDefaultItemLimit(400) + houseTemplate.setBaseMaintenanceRate(100) - core.housingService.addHousingTemplate(houseTemplate) + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) return \ No newline at end of file diff --git a/scripts/houses/player_house_atat.py b/scripts/houses/player_house_atat.py index 3d0b04d2..1ff4e466 100644 --- a/scripts/houses/player_house_atat.py +++ b/scripts/houses/player_house_atat.py @@ -2,7 +2,7 @@ import sys from services.housing import HouseTemplate from engine.resources.scene import Point3D -def setup(core): +def setup(housingTemplates): houseTemplate = HouseTemplate("object/tangible/tcg/series5/shared_structure_deed_player_house_atat.iff", "object/building/player/shared_player_house_atat.iff", 3) houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(-3.8), float(5.86), float(15.1))) @@ -14,6 +14,7 @@ def setup(core): houseTemplate.addPlaceablePlanet("dantooine") houseTemplate.addPlaceablePlanet("lok") houseTemplate.setDefaultItemLimit(350) + houseTemplate.setBaseMaintenanceRate(8) - core.housingService.addHousingTemplate(houseTemplate) + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) return \ No newline at end of file diff --git a/scripts/houses/player_house_corellia_large_style_01.py b/scripts/houses/player_house_corellia_large_style_01.py index 44d9fd81..9c1382ce 100644 --- a/scripts/houses/player_house_corellia_large_style_01.py +++ b/scripts/houses/player_house_corellia_large_style_01.py @@ -2,13 +2,14 @@ import sys from services.housing import HouseTemplate from engine.resources.scene import Point3D -def setup(core): +def setup(housingTemplates): houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_corellia_house_large_deed.iff", "object/building/player/shared_player_house_corellia_large_style_01.iff", 5) houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(6), float(3), float(13.4))) houseTemplate.addPlaceablePlanet("corellia") houseTemplate.addPlaceablePlanet("talus") houseTemplate.setDefaultItemLimit(500) + houseTemplate.setBaseMaintenanceRate(26) - core.housingService.addHousingTemplate(houseTemplate) + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) return \ No newline at end of file diff --git a/scripts/houses/player_house_corellia_large_style_02.py b/scripts/houses/player_house_corellia_large_style_02.py index 7d35d0de..7bc5f2da 100644 --- a/scripts/houses/player_house_corellia_large_style_02.py +++ b/scripts/houses/player_house_corellia_large_style_02.py @@ -2,12 +2,14 @@ import sys from services.housing import HouseTemplate from engine.resources.scene import Point3D -def setup(core): +def setup(housingTemplates): houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_corellia_house_large_style_02_deed.iff", "object/building/player/shared_player_house_generic_large_style_02.iff", 5) houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(-13.4), float(3), float(9.1))) houseTemplate.addPlaceablePlanet("corellia") houseTemplate.addPlaceablePlanet("talus") - houseTemplate.setDefaultItemLimit(500) - core.housingService.addHousingTemplate(houseTemplate) + houseTemplate.setDefaultItemLimit(500) + houseTemplate.setBaseMaintenanceRate(26) + + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) return \ No newline at end of file diff --git a/scripts/houses/player_house_corellia_medium_style_01.py b/scripts/houses/player_house_corellia_medium_style_01.py index 27988156..48167fda 100644 --- a/scripts/houses/player_house_corellia_medium_style_01.py +++ b/scripts/houses/player_house_corellia_medium_style_01.py @@ -2,12 +2,14 @@ import sys from services.housing import HouseTemplate from engine.resources.scene import Point3D -def setup(core): +def setup(housingTemplates): houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_corellia_house_medium_deed.iff", "object/building/player/shared_player_house_corellia_medium_style_01.iff", 2) houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(5.3),float(2.26),float(7.7))) houseTemplate.addPlaceablePlanet("corellia") houseTemplate.addPlaceablePlanet("talus") houseTemplate.setDefaultItemLimit(200) - core.housingService.addHousingTemplate(houseTemplate) + houseTemplate.setBaseMaintenanceRate(18) + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_house_corellia_medium_style_02.py b/scripts/houses/player_house_corellia_medium_style_02.py index a0472e2e..41559ba0 100644 --- a/scripts/houses/player_house_corellia_medium_style_02.py +++ b/scripts/houses/player_house_corellia_medium_style_02.py @@ -2,12 +2,14 @@ import sys from services.housing import HouseTemplate from engine.resources.scene import Point3D -def setup(core): +def setup(housingTemplates): houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_corellia_house_medium_style_02_deed.iff", "object/building/player/shared_player_house_corellia_medium_style_02.iff", 2) houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(5.3), float(2.26), float(7.7))) houseTemplate.addPlaceablePlanet("corellia") houseTemplate.addPlaceablePlanet("talus") houseTemplate.setDefaultItemLimit(200) - core.housingService.addHousingTemplate(houseTemplate) + houseTemplate.setBaseMaintenanceRate(18) + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_house_corellia_small_style_01.py b/scripts/houses/player_house_corellia_small_style_01.py index acae7c15..96de8802 100644 --- a/scripts/houses/player_house_corellia_small_style_01.py +++ b/scripts/houses/player_house_corellia_small_style_01.py @@ -2,13 +2,14 @@ import sys from services.housing import HouseTemplate from engine.resources.scene import Point3D -def setup(core): +def setup(housingTemplates): houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_corellia_house_small_deed.iff", "object/building/player/shared_player_house_corellia_small_style_01.iff", 2) houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(-7.39), float(2.36), float(2))) houseTemplate.addPlaceablePlanet("corellia") houseTemplate.addPlaceablePlanet("talus") houseTemplate.setDefaultItemLimit(200) + houseTemplate.setBaseMaintenanceRate(8) - core.housingService.addHousingTemplate(houseTemplate) + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) return \ No newline at end of file diff --git a/scripts/houses/player_house_corellia_small_style_01_floorplan_02.py b/scripts/houses/player_house_corellia_small_style_01_floorplan_02.py index 5781e8eb..bf670367 100644 --- a/scripts/houses/player_house_corellia_small_style_01_floorplan_02.py +++ b/scripts/houses/player_house_corellia_small_style_01_floorplan_02.py @@ -2,13 +2,14 @@ import sys from services.housing import HouseTemplate from engine.resources.scene import Point3D -def setup(core): +def setup(housingTemplates): houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_corellia_house_small_floor_02_deed.iff", "object/building/player/shared_player_house_corellia_small_style_01_floorplan_02.iff", 2) houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(-7.39), float(2.36), float(2))) houseTemplate.addPlaceablePlanet("corellia") houseTemplate.addPlaceablePlanet("talus") houseTemplate.setDefaultItemLimit(200) + houseTemplate.setBaseMaintenanceRate(8) - core.housingService.addHousingTemplate(houseTemplate) + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) return \ No newline at end of file diff --git a/scripts/houses/player_house_corellia_small_style_02.py b/scripts/houses/player_house_corellia_small_style_02.py index 1e55a1ed..5baf48fd 100644 --- a/scripts/houses/player_house_corellia_small_style_02.py +++ b/scripts/houses/player_house_corellia_small_style_02.py @@ -2,13 +2,14 @@ import sys from services.housing import HouseTemplate from engine.resources.scene import Point3D -def setup(core): +def setup(housingTemplates): houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_corellia_house_small_style_02_deed.iff", "object/building/player/shared_player_house_corellia_small_style_02.iff", 2) houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(-1.9), float(2.86), float(8.35))) houseTemplate.addPlaceablePlanet("corellia") houseTemplate.addPlaceablePlanet("talus") houseTemplate.setDefaultItemLimit(200) + houseTemplate.setBaseMaintenanceRate(8) - core.housingService.addHousingTemplate(houseTemplate) + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) return \ No newline at end of file diff --git a/scripts/houses/player_house_corellia_small_style_02_floorplan_02.py b/scripts/houses/player_house_corellia_small_style_02_floorplan_02.py index 6e7feff8..914fa313 100644 --- a/scripts/houses/player_house_corellia_small_style_02_floorplan_02.py +++ b/scripts/houses/player_house_corellia_small_style_02_floorplan_02.py @@ -2,13 +2,14 @@ import sys from services.housing import HouseTemplate from engine.resources.scene import Point3D -def setup(core): +def setup(housingTemplates): houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_corellia_house_small_style_02_floor_02_deed.iff", "object/building/player/shared_player_house_corellia_small_style_02_floorplan_02.iff", 2) houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(-1.9), float(2.86), float(8.35))) houseTemplate.addPlaceablePlanet("corellia") houseTemplate.addPlaceablePlanet("talus") houseTemplate.setDefaultItemLimit(200) + houseTemplate.setBaseMaintenanceRate(8) - core.housingService.addHousingTemplate(houseTemplate) + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) return \ No newline at end of file diff --git a/scripts/houses/player_house_generic_large_style_01.py b/scripts/houses/player_house_generic_large_style_01.py index 645038ca..aa933d9d 100644 --- a/scripts/houses/player_house_generic_large_style_01.py +++ b/scripts/houses/player_house_generic_large_style_01.py @@ -2,8 +2,8 @@ import sys from services.housing import HouseTemplate from engine.resources.scene import Point3D -def setup(core): - houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_generic_house_large_style_02_deed.iff", "object/building/player/shared_player_house_generic_large_style_02.iff", 2) +def setup(housingTemplates): + houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_generic_house_large_style_02_deed.iff", "object/building/player/shared_player_house_generic_large_style_02.iff", 5) houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(6), float(3), float(13.4))) houseTemplate.addPlaceablePlanet("tatooine") @@ -14,6 +14,7 @@ def setup(core): houseTemplate.addPlaceablePlanet("dantooine") houseTemplate.addPlaceablePlanet("lok") houseTemplate.setDefaultItemLimit(500) + houseTemplate.setBaseMaintenanceRate(26) - core.housingService.addHousingTemplate(houseTemplate) + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) return \ No newline at end of file diff --git a/scripts/houses/player_house_generic_large_style_02.py b/scripts/houses/player_house_generic_large_style_02.py index 6ee98363..a64b27dc 100644 --- a/scripts/houses/player_house_generic_large_style_02.py +++ b/scripts/houses/player_house_generic_large_style_02.py @@ -2,7 +2,7 @@ import sys from services.housing import HouseTemplate from engine.resources.scene import Point3D -def setup(core): +def setup(housingTemplates): houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_generic_house_large_deed.iff", "object/building/player/shared_player_house_generic_large_style_01.iff", 2) houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(-13.4), float(3), float(9.1))) @@ -14,6 +14,7 @@ def setup(core): houseTemplate.addPlaceablePlanet("dantooine") houseTemplate.addPlaceablePlanet("lok") houseTemplate.setDefaultItemLimit(500) + houseTemplate.setBaseMaintenanceRate(26) - core.housingService.addHousingTemplate(houseTemplate) + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) return \ No newline at end of file diff --git a/scripts/houses/player_house_generic_large_window_s01.py b/scripts/houses/player_house_generic_large_window_s01.py index 66c1b69a..031f8296 100644 --- a/scripts/houses/player_house_generic_large_window_s01.py +++ b/scripts/houses/player_house_generic_large_window_s01.py @@ -2,7 +2,7 @@ import sys from services.housing import HouseTemplate from engine.resources.scene import Point3D -def setup(core): +def setup(housingTemplates): houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_generic_house_large_window_s01_deed.iff", "object/building/player/shared_player_house_generic_large_window_s01.iff", 2) houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(-13.7), float(3), float(9.1))) @@ -14,6 +14,7 @@ def setup(core): houseTemplate.addPlaceablePlanet("dantooine") houseTemplate.addPlaceablePlanet("lok") houseTemplate.setDefaultItemLimit(500) + houseTemplate.setBaseMaintenanceRate(26) - core.housingService.addHousingTemplate(houseTemplate) + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) return \ No newline at end of file diff --git a/scripts/houses/player_house_generic_large_window_s02.py b/scripts/houses/player_house_generic_large_window_s02.py index fba62f6c..d5919f4d 100644 --- a/scripts/houses/player_house_generic_large_window_s02.py +++ b/scripts/houses/player_house_generic_large_window_s02.py @@ -2,7 +2,7 @@ import sys from services.housing import HouseTemplate from engine.resources.scene import Point3D -def setup(core): +def setup(housingTemplates): houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_generic_house_large_window_s02_deed.iff", "object/building/player/shared_player_house_generic_large_window_s02.iff", 2) houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(10.4), float(3), float(-11))) @@ -14,6 +14,7 @@ def setup(core): houseTemplate.addPlaceablePlanet("dantooine") houseTemplate.addPlaceablePlanet("lok") houseTemplate.setDefaultItemLimit(500) + houseTemplate.setBaseMaintenanceRate(26) - core.housingService.addHousingTemplate(houseTemplate) + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) return \ No newline at end of file diff --git a/scripts/houses/player_house_generic_medium_style_01.py b/scripts/houses/player_house_generic_medium_style_01.py index e8473868..3d0beb4e 100644 --- a/scripts/houses/player_house_generic_medium_style_01.py +++ b/scripts/houses/player_house_generic_medium_style_01.py @@ -2,7 +2,7 @@ import sys from services.housing import HouseTemplate from engine.resources.scene import Point3D -def setup(core): +def setup(housingTemplates): houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_generic_house_medium_deed.iff", "object/building/player/shared_player_house_generic_medium_style_01.iff", 2) houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(5.3),float(2.26),float(7.7))) @@ -14,6 +14,7 @@ def setup(core): houseTemplate.addPlaceablePlanet("dantooine") houseTemplate.addPlaceablePlanet("lok") houseTemplate.setDefaultItemLimit(200) + houseTemplate.setBaseMaintenanceRate(18) - core.housingService.addHousingTemplate(houseTemplate) + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) return \ No newline at end of file diff --git a/scripts/houses/player_house_generic_medium_style_02.py b/scripts/houses/player_house_generic_medium_style_02.py index 7bd2db7b..b8aa1bf6 100644 --- a/scripts/houses/player_house_generic_medium_style_02.py +++ b/scripts/houses/player_house_generic_medium_style_02.py @@ -2,7 +2,7 @@ import sys from services.housing import HouseTemplate from engine.resources.scene import Point3D -def setup(core): +def setup(housingTemplates): houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_generic_house_medium_style_02_deed.iff", "object/building/player/shared_player_house_generic_medium_style_02.iff", 2) houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(5.3), float(2.26), float(7.7))) @@ -14,6 +14,7 @@ def setup(core): houseTemplate.addPlaceablePlanet("dantooine") houseTemplate.addPlaceablePlanet("lok") houseTemplate.setDefaultItemLimit(200) + houseTemplate.setBaseMaintenanceRate(18) - core.housingService.addHousingTemplate(houseTemplate) + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) return \ No newline at end of file diff --git a/scripts/houses/player_house_generic_medium_windowed.py b/scripts/houses/player_house_generic_medium_windowed.py index e10c4b17..9ddc528a 100644 --- a/scripts/houses/player_house_generic_medium_windowed.py +++ b/scripts/houses/player_house_generic_medium_windowed.py @@ -2,7 +2,7 @@ import sys from services.housing import HouseTemplate from engine.resources.scene import Point3D -def setup(core): +def setup(housingTemplates): houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_generic_house_medium_windowed_deed.iff", "object/building/player/shared_player_house_generic_medium_windowed.iff", 2) houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(5.5), float(2.26), float(7.8))) @@ -14,6 +14,7 @@ def setup(core): houseTemplate.addPlaceablePlanet("dantooine") houseTemplate.addPlaceablePlanet("lok") houseTemplate.setDefaultItemLimit(200) + houseTemplate.setBaseMaintenanceRate(18) - core.housingService.addHousingTemplate(houseTemplate) + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) return \ No newline at end of file diff --git a/scripts/houses/player_house_generic_medium_windowed_s02.py b/scripts/houses/player_house_generic_medium_windowed_s02.py index 9c69e156..692f620b 100644 --- a/scripts/houses/player_house_generic_medium_windowed_s02.py +++ b/scripts/houses/player_house_generic_medium_windowed_s02.py @@ -2,7 +2,7 @@ import sys from services.housing import HouseTemplate from engine.resources.scene import Point3D -def setup(core): +def setup(housingTemplates): houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_generic_house_medium_windowed_s02_deed.iff", "object/building/player/shared_player_house_generic_medium_windowed_s02.iff", 2) houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(5.5), float(2.26), float(7.8))) @@ -14,6 +14,7 @@ def setup(core): houseTemplate.addPlaceablePlanet("dantooine") houseTemplate.addPlaceablePlanet("lok") houseTemplate.setDefaultItemLimit(200) + houseTemplate.setBaseMaintenanceRate(18) - core.housingService.addHousingTemplate(houseTemplate) + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) 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 778d50da..3c225c31 100644 --- a/scripts/houses/player_house_generic_small_style_01.py +++ b/scripts/houses/player_house_generic_small_style_01.py @@ -2,7 +2,7 @@ import sys from services.housing import HouseTemplate from engine.resources.scene import Point3D -def setup(core): +def setup(housingTemplates): houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_generic_house_small_deed.iff", "object/building/player/shared_player_house_generic_small_style_01.iff", 2) houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(-7.39), float(2.36), float(2))) @@ -14,6 +14,7 @@ def setup(core): houseTemplate.addPlaceablePlanet("dantooine") houseTemplate.addPlaceablePlanet("lok") houseTemplate.setDefaultItemLimit(200) + houseTemplate.setBaseMaintenanceRate(8) - core.housingService.addHousingTemplate(houseTemplate) + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) return \ No newline at end of file diff --git a/scripts/houses/player_house_generic_small_style_01_floorplan_02.py b/scripts/houses/player_house_generic_small_style_01_floorplan_02.py index e20ec536..e06a6316 100644 --- a/scripts/houses/player_house_generic_small_style_01_floorplan_02.py +++ b/scripts/houses/player_house_generic_small_style_01_floorplan_02.py @@ -2,7 +2,7 @@ import sys from services.housing import HouseTemplate from engine.resources.scene import Point3D -def setup(core): +def setup(housingTemplates): houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_generic_house_small_floor_02_deed.iff", "object/building/player/shared_player_house_generic_small_style_01_floorplan_02.iff", 2) houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(-7.39), float(2.36), float(2))) @@ -14,6 +14,7 @@ def setup(core): houseTemplate.addPlaceablePlanet("dantooine") houseTemplate.addPlaceablePlanet("lok") houseTemplate.setDefaultItemLimit(200) + houseTemplate.setBaseMaintenanceRate(8) - core.housingService.addHousingTemplate(houseTemplate) + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) return \ No newline at end of file diff --git a/scripts/houses/player_house_generic_small_style_02.py b/scripts/houses/player_house_generic_small_style_02.py index 87121425..c32a0b84 100644 --- a/scripts/houses/player_house_generic_small_style_02.py +++ b/scripts/houses/player_house_generic_small_style_02.py @@ -2,7 +2,7 @@ import sys from services.housing import HouseTemplate from engine.resources.scene import Point3D -def setup(core): +def setup(housingTemplates): houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_generic_house_small_style_02_deed.iff", "object/building/player/shared_player_house_generic_small_style_02.iff", 2) houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(-1.9), float(2.86), float(8.35))) @@ -14,6 +14,7 @@ def setup(core): houseTemplate.addPlaceablePlanet("dantooine") houseTemplate.addPlaceablePlanet("lok") houseTemplate.setDefaultItemLimit(200) + houseTemplate.setBaseMaintenanceRate(8) - core.housingService.addHousingTemplate(houseTemplate) + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) return \ No newline at end of file diff --git a/scripts/houses/player_house_generic_small_style_02_floorplan_02.py b/scripts/houses/player_house_generic_small_style_02_floorplan_02.py index 72ef35ac..a2ffe757 100644 --- a/scripts/houses/player_house_generic_small_style_02_floorplan_02.py +++ b/scripts/houses/player_house_generic_small_style_02_floorplan_02.py @@ -2,7 +2,7 @@ import sys from services.housing import HouseTemplate from engine.resources.scene import Point3D -def setup(core): +def setup(housingTemplates): houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_generic_house_small_style_02_floor_02_deed.iff", "object/building/player/shared_player_house_generic_small_style_02_floorplan_02.iff", 2) houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(-1.9), float(2.86), float(8.35))) @@ -14,6 +14,7 @@ def setup(core): houseTemplate.addPlaceablePlanet("dantooine") houseTemplate.addPlaceablePlanet("lok") houseTemplate.setDefaultItemLimit(200) + houseTemplate.setBaseMaintenanceRate(8) - core.housingService.addHousingTemplate(houseTemplate) + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) return \ No newline at end of file diff --git a/scripts/houses/player_house_generic_small_window_style_03.py b/scripts/houses/player_house_generic_small_window_style_03.py index 260c2476..9adf8ff0 100644 --- a/scripts/houses/player_house_generic_small_window_style_03.py +++ b/scripts/houses/player_house_generic_small_window_style_03.py @@ -2,7 +2,7 @@ import sys from services.housing import HouseTemplate from engine.resources.scene import Point3D -def setup(core): +def setup(housingTemplates): houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_generic_house_small_window_style_03_deed.iff", "object/building/player/shared_player_house_generic_small_window_style_03.iff", 2) houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(-6.6), float(2.36), float(6.3))) @@ -14,6 +14,7 @@ def setup(core): houseTemplate.addPlaceablePlanet("dantooine") houseTemplate.addPlaceablePlanet("lok") houseTemplate.setDefaultItemLimit(200) + houseTemplate.setBaseMaintenanceRate(8) - core.housingService.addHousingTemplate(houseTemplate) + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) return \ No newline at end of file diff --git a/scripts/houses/player_house_generic_small_windowed.py b/scripts/houses/player_house_generic_small_windowed.py index 4f2293ab..71439b6a 100644 --- a/scripts/houses/player_house_generic_small_windowed.py +++ b/scripts/houses/player_house_generic_small_windowed.py @@ -2,7 +2,7 @@ import sys from services.housing import HouseTemplate from engine.resources.scene import Point3D -def setup(core): +def setup(housingTemplates): houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_generic_house_small_window_deed.iff", "object/building/player/shared_player_house_generic_small_windowed.iff", 2) houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(-7.39), float(2.36), float(2))) @@ -14,6 +14,7 @@ def setup(core): houseTemplate.addPlaceablePlanet("dantooine") houseTemplate.addPlaceablePlanet("lok") houseTemplate.setDefaultItemLimit(200) + houseTemplate.setBaseMaintenanceRate(8) - core.housingService.addHousingTemplate(houseTemplate) + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) return \ No newline at end of file diff --git a/scripts/houses/player_house_hangar.py b/scripts/houses/player_house_hangar.py index f3eab890..01373883 100644 --- a/scripts/houses/player_house_hangar.py +++ b/scripts/houses/player_house_hangar.py @@ -2,7 +2,7 @@ import sys from services.housing import HouseTemplate from engine.resources.scene import Point3D -def setup(core): +def setup(housingTemplates): houseTemplate = HouseTemplate("object/tangible/tcg/series5/shared_structure_deed_player_house_hangar.iff", "object/building/player/shared_player_house_hangar.iff", 3) houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(9.2), float(2.86), float(0.8))) @@ -14,6 +14,7 @@ def setup(core): houseTemplate.addPlaceablePlanet("dantooine") houseTemplate.addPlaceablePlanet("lok") houseTemplate.setDefaultItemLimit(350) + houseTemplate.setBaseMaintenanceRate(8) - core.housingService.addHousingTemplate(houseTemplate) + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) return \ No newline at end of file diff --git a/scripts/houses/player_house_jabbas_sail_barge.py b/scripts/houses/player_house_jabbas_sail_barge.py index abc84451..c39e9c25 100644 --- a/scripts/houses/player_house_jabbas_sail_barge.py +++ b/scripts/houses/player_house_jabbas_sail_barge.py @@ -2,7 +2,7 @@ import sys from services.housing import HouseTemplate from engine.resources.scene import Point3D -def setup(core): +def setup(housingTemplates): houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_jabbas_sail_barge_deed.iff", "object/building/player/shared_player_house_jabbas_sail_barge.iff", 3) houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(0), float(2.86), float(-3.5))) @@ -14,6 +14,7 @@ def setup(core): houseTemplate.addPlaceablePlanet("dantooine") houseTemplate.addPlaceablePlanet("lok") houseTemplate.setDefaultItemLimit(350) + houseTemplate.setBaseMaintenanceRate(8) - core.housingService.addHousingTemplate(houseTemplate) + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) return \ No newline at end of file diff --git a/scripts/houses/player_house_jedi_meditation_room.py b/scripts/houses/player_house_jedi_meditation_room.py index df257c29..6ed97065 100644 --- a/scripts/houses/player_house_jedi_meditation_room.py +++ b/scripts/houses/player_house_jedi_meditation_room.py @@ -2,7 +2,7 @@ import sys from services.housing import HouseTemplate from engine.resources.scene import Point3D -def setup(core): +def setup(housingTemplates): houseTemplate = HouseTemplate("object/tangible/tcg/series3/shared_structure_deed_jedi_meditation_room_deed.iff", "object/building/player/shared_player_house_jedi_meditation_room.iff", 3) houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(0), float(2.86), float(-3.5))) @@ -14,6 +14,7 @@ def setup(core): houseTemplate.addPlaceablePlanet("dantooine") houseTemplate.addPlaceablePlanet("lok") houseTemplate.setDefaultItemLimit(350) + houseTemplate.setBaseMaintenanceRate(8) - core.housingService.addHousingTemplate(houseTemplate) + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) return \ No newline at end of file diff --git a/scripts/houses/player_house_mustafar_lg.py b/scripts/houses/player_house_mustafar_lg.py index 8d04566e..891c9e09 100644 --- a/scripts/houses/player_house_mustafar_lg.py +++ b/scripts/houses/player_house_mustafar_lg.py @@ -2,7 +2,7 @@ import sys from services.housing import HouseTemplate from engine.resources.scene import Point3D -def setup(core): +def setup(housingTemplates): houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_mustafar_house_lg.iff", "object/building/player/shared_player_house_mustafar_lg.iff", 5) houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(1.5), float(2.86), float(13.7))) @@ -14,6 +14,7 @@ def setup(core): houseTemplate.addPlaceablePlanet("dantooine") houseTemplate.addPlaceablePlanet("lok") houseTemplate.setDefaultItemLimit(200) + houseTemplate.setBaseMaintenanceRate(8) - core.housingService.addHousingTemplate(houseTemplate) + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) return \ No newline at end of file diff --git a/scripts/houses/player_house_naboo_large_style_01.py b/scripts/houses/player_house_naboo_large_style_01.py index afaf05dd..a75ee9c9 100644 --- a/scripts/houses/player_house_naboo_large_style_01.py +++ b/scripts/houses/player_house_naboo_large_style_01.py @@ -2,7 +2,7 @@ import sys from services.housing import HouseTemplate from engine.resources.scene import Point3D -def setup(core): +def setup(housingTemplates): houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_naboo_house_large_deed.iff", "object/building/player/shared_player_house_naboo_large_style_01.iff", 5) houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(-7), float(3), float(-15.5))) @@ -10,6 +10,7 @@ def setup(core): houseTemplate.addPlaceablePlanet("rori") houseTemplate.addPlaceablePlanet("dantooine") houseTemplate.setDefaultItemLimit(500) + houseTemplate.setBaseMaintenanceRate(8) - core.housingService.addHousingTemplate(houseTemplate) + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) return \ No newline at end of file diff --git a/scripts/houses/player_house_naboo_medium_style_01.py b/scripts/houses/player_house_naboo_medium_style_01.py index fd16fd70..c5cf6211 100644 --- a/scripts/houses/player_house_naboo_medium_style_01.py +++ b/scripts/houses/player_house_naboo_medium_style_01.py @@ -2,7 +2,7 @@ import sys from services.housing import HouseTemplate from engine.resources.scene import Point3D -def setup(core): +def setup(housingTemplates): houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_naboo_house_medium_deed.iff", "object/building/player/shared_player_house_naboo_medium_style_01.iff", 2) houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(-2.2),float(3),float(-11.5))) @@ -10,5 +10,6 @@ def setup(core): houseTemplate.addPlaceablePlanet("rori") houseTemplate.addPlaceablePlanet("dantooine") houseTemplate.setDefaultItemLimit(200) - core.housingService.addHousingTemplate(houseTemplate) + houseTemplate.setBaseMaintenanceRate(18) + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) return \ No newline at end of file diff --git a/scripts/houses/player_house_naboo_small_style_01.py b/scripts/houses/player_house_naboo_small_style_01.py index eb092bce..7fdd3716 100644 --- a/scripts/houses/player_house_naboo_small_style_01.py +++ b/scripts/houses/player_house_naboo_small_style_01.py @@ -2,7 +2,7 @@ import sys from services.housing import HouseTemplate from engine.resources.scene import Point3D -def setup(core): +def setup(housingTemplates): houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_naboo_house_small_deed.iff", "object/building/player/shared_player_house_naboo_small_style_01.iff", 2) houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(-1.7),float(3),float(8.2))) @@ -10,5 +10,6 @@ def setup(core): houseTemplate.addPlaceablePlanet("rori") houseTemplate.addPlaceablePlanet("dantooine") houseTemplate.setDefaultItemLimit(200) - core.housingService.addHousingTemplate(houseTemplate) + houseTemplate.setBaseMaintenanceRate(18) + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) return \ No newline at end of file diff --git a/scripts/houses/player_house_naboo_small_style_02.py b/scripts/houses/player_house_naboo_small_style_02.py index f5f35f0f..05f46d81 100644 --- a/scripts/houses/player_house_naboo_small_style_02.py +++ b/scripts/houses/player_house_naboo_small_style_02.py @@ -2,7 +2,7 @@ import sys from services.housing import HouseTemplate from engine.resources.scene import Point3D -def setup(core): +def setup(housingTemplates): houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_naboo_house_small_style_02_deed.iff", "object/building/player/shared_player_house_naboo_small_style_02.iff", 1) houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(8.4),float(3),float(7.2))) @@ -10,5 +10,6 @@ def setup(core): houseTemplate.addPlaceablePlanet("rori") houseTemplate.addPlaceablePlanet("dantooine") houseTemplate.setDefaultItemLimit(100) - core.housingService.addHousingTemplate(houseTemplate) + houseTemplate.setBaseMaintenanceRate(18) + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) return \ No newline at end of file diff --git a/scripts/houses/player_house_naboo_small_window_style_01.py b/scripts/houses/player_house_naboo_small_window_style_01.py index 7ffa7dec..375af434 100644 --- a/scripts/houses/player_house_naboo_small_window_style_01.py +++ b/scripts/houses/player_house_naboo_small_window_style_01.py @@ -2,7 +2,7 @@ import sys from services.housing import HouseTemplate from engine.resources.scene import Point3D -def setup(core): +def setup(housingTemplates): houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_naboo_house_small_window_deed.iff", "object/building/player/shared_player_house_naboo_small_window_style_01.iff", 2) houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(-1.7),float(3),float(8.2))) @@ -10,5 +10,6 @@ def setup(core): houseTemplate.addPlaceablePlanet("rori") houseTemplate.addPlaceablePlanet("dantooine") houseTemplate.setDefaultItemLimit(200) - core.housingService.addHousingTemplate(houseTemplate) + houseTemplate.setBaseMaintenanceRate(18) + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) return \ No newline at end of file diff --git a/scripts/houses/player_house_sandcrawler.py b/scripts/houses/player_house_sandcrawler.py index c14d2b8c..3d33b10f 100644 --- a/scripts/houses/player_house_sandcrawler.py +++ b/scripts/houses/player_house_sandcrawler.py @@ -2,8 +2,8 @@ import sys from services.housing import HouseTemplate from engine.resources.scene import Point3D -def setup(core): - houseTemplate = HouseTemplate("object/tangible/saga_system/rewards/shared_structure_deed_player_house_sandcrawler.iff", "object/building/player/shared_player_house_sandcrawler.iff", 3) +def setup(housingTemplates): + houseTemplate = HouseTemplate("object/tangible/saga_system/rewards/shared_structure_deed_player_house_sandcrawler.iff", "object/building/player/shared_player_house_sandcrawler.iff", 5) houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(-8.75), float(3.86), float(1))) houseTemplate.addPlaceablePlanet("tatooine") @@ -14,6 +14,7 @@ def setup(core): houseTemplate.addPlaceablePlanet("dantooine") houseTemplate.addPlaceablePlanet("lok") houseTemplate.setDefaultItemLimit(350) + houseTemplate.setBaseMaintenanceRate(26) - core.housingService.addHousingTemplate(houseTemplate) + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) return \ No newline at end of file diff --git a/scripts/houses/player_house_sith_meditation_room.py b/scripts/houses/player_house_sith_meditation_room.py index 6e75e875..e1e6a892 100644 --- a/scripts/houses/player_house_sith_meditation_room.py +++ b/scripts/houses/player_house_sith_meditation_room.py @@ -2,7 +2,7 @@ import sys from services.housing import HouseTemplate from engine.resources.scene import Point3D -def setup(core): +def setup(housingTemplates): houseTemplate = HouseTemplate("object/tangible/tcg/series3/shared_structure_deed_sith_meditation_room_deed.iff", "object/building/player/shared_player_house_sith_meditation_room.iff", 3) houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(3), float(2.86), float(5.7))) @@ -14,6 +14,7 @@ def setup(core): houseTemplate.addPlaceablePlanet("dantooine") houseTemplate.addPlaceablePlanet("lok") houseTemplate.setDefaultItemLimit(350) + houseTemplate.setBaseMaintenanceRate(8) - core.housingService.addHousingTemplate(houseTemplate) + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) return \ No newline at end of file diff --git a/scripts/houses/player_house_tatooine_large_style_01.py b/scripts/houses/player_house_tatooine_large_style_01.py index 3085eb20..37a9b894 100644 --- a/scripts/houses/player_house_tatooine_large_style_01.py +++ b/scripts/houses/player_house_tatooine_large_style_01.py @@ -2,7 +2,7 @@ import sys from services.housing import HouseTemplate from engine.resources.scene import Point3D -def setup(core): +def setup(housingTemplates): houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_tatooine_house_large_deed.iff", "object/building/player/shared_player_house_tatooine_large_style_01.iff", 5) houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(-3), float(3), float(15.8))) @@ -10,6 +10,7 @@ def setup(core): houseTemplate.addPlaceablePlanet("lok") houseTemplate.addPlaceablePlanet("dantooine") houseTemplate.setDefaultItemLimit(500) + houseTemplate.setBaseMaintenanceRate(26) - core.housingService.addHousingTemplate(houseTemplate) + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) return \ No newline at end of file diff --git a/scripts/houses/player_house_tatooine_medium_style_01.py b/scripts/houses/player_house_tatooine_medium_style_01.py index d173048d..959cbb7e 100644 --- a/scripts/houses/player_house_tatooine_medium_style_01.py +++ b/scripts/houses/player_house_tatooine_medium_style_01.py @@ -2,7 +2,7 @@ import sys from services.housing import HouseTemplate from engine.resources.scene import Point3D -def setup(core): +def setup(housingTemplates): houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_tatooine_house_medium_deed.iff", "object/building/player/shared_player_house_tatooine_medium_style_01.iff", 2) houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(4.3),float(2.26),float(12.5))) @@ -10,5 +10,6 @@ def setup(core): houseTemplate.addPlaceablePlanet("lok") houseTemplate.addPlaceablePlanet("dantooine") houseTemplate.setDefaultItemLimit(200) - core.housingService.addHousingTemplate(houseTemplate) + houseTemplate.setBaseMaintenanceRate(18) + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) return \ No newline at end of file diff --git a/scripts/houses/player_house_tatooine_small_style_01.py b/scripts/houses/player_house_tatooine_small_style_01.py index eff8a21d..1e2579c2 100644 --- a/scripts/houses/player_house_tatooine_small_style_01.py +++ b/scripts/houses/player_house_tatooine_small_style_01.py @@ -2,7 +2,7 @@ import sys from services.housing import HouseTemplate from engine.resources.scene import Point3D -def setup(core): +def setup(housingTemplates): houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_tatooine_house_small_deed.iff", "object/building/player/shared_player_house_tatooine_small_style_01.iff", 2) houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(-1.7),float(3),float(7.9))) @@ -10,5 +10,6 @@ def setup(core): houseTemplate.addPlaceablePlanet("lok") houseTemplate.addPlaceablePlanet("dantooine") houseTemplate.setDefaultItemLimit(200) - core.housingService.addHousingTemplate(houseTemplate) + houseTemplate.setBaseMaintenanceRate(8) + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) return \ No newline at end of file diff --git a/scripts/houses/player_house_tatooine_small_style_02.py b/scripts/houses/player_house_tatooine_small_style_02.py index e5484c22..8c953386 100644 --- a/scripts/houses/player_house_tatooine_small_style_02.py +++ b/scripts/houses/player_house_tatooine_small_style_02.py @@ -2,7 +2,7 @@ import sys from services.housing import HouseTemplate from engine.resources.scene import Point3D -def setup(core): +def setup(housingTemplates): houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_tatooine_house_small_style_02_deed.iff", "object/building/player/shared_player_house_tatooine_small_style_02.iff", 2) houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(-1.7),float(3),float(8.2))) @@ -10,5 +10,6 @@ def setup(core): houseTemplate.addPlaceablePlanet("lok") houseTemplate.addPlaceablePlanet("dantooine") houseTemplate.setDefaultItemLimit(200) - core.housingService.addHousingTemplate(houseTemplate) + houseTemplate.setBaseMaintenanceRate(8) + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) return \ No newline at end of file diff --git a/scripts/houses/player_house_tatooine_small_window_style_01.py b/scripts/houses/player_house_tatooine_small_window_style_01.py index eff8a21d..1e2579c2 100644 --- a/scripts/houses/player_house_tatooine_small_window_style_01.py +++ b/scripts/houses/player_house_tatooine_small_window_style_01.py @@ -2,7 +2,7 @@ import sys from services.housing import HouseTemplate from engine.resources.scene import Point3D -def setup(core): +def setup(housingTemplates): houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_tatooine_house_small_deed.iff", "object/building/player/shared_player_house_tatooine_small_style_01.iff", 2) houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(-1.7),float(3),float(7.9))) @@ -10,5 +10,6 @@ def setup(core): houseTemplate.addPlaceablePlanet("lok") houseTemplate.addPlaceablePlanet("dantooine") houseTemplate.setDefaultItemLimit(200) - core.housingService.addHousingTemplate(houseTemplate) + houseTemplate.setBaseMaintenanceRate(8) + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) return \ No newline at end of file diff --git a/scripts/houses/player_house_tcg_8_bespin_house.py b/scripts/houses/player_house_tcg_8_bespin_house.py index c7ac7d0b..2f37c85a 100644 --- a/scripts/houses/player_house_tcg_8_bespin_house.py +++ b/scripts/houses/player_house_tcg_8_bespin_house.py @@ -2,7 +2,7 @@ import sys from services.housing import HouseTemplate from engine.resources.scene import Point3D -def setup(core): +def setup(housingTemplates): houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_player_house_tcg_8_bespin_house_deed.iff", "object/building/player/shared_player_house_tcg_8_bespin_house.iff", 3) houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(0), float(2.86), float(-3.5))) @@ -14,6 +14,7 @@ def setup(core): houseTemplate.addPlaceablePlanet("dantooine") houseTemplate.addPlaceablePlanet("lok") houseTemplate.setDefaultItemLimit(350) + houseTemplate.setBaseMaintenanceRate(8) - core.housingService.addHousingTemplate(houseTemplate) + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) return \ No newline at end of file diff --git a/scripts/houses/player_merchant_tent_style_01.py b/scripts/houses/player_merchant_tent_style_01.py index 3eef6c91..684cbcb6 100644 --- a/scripts/houses/player_merchant_tent_style_01.py +++ b/scripts/houses/player_merchant_tent_style_01.py @@ -2,7 +2,7 @@ import sys from services.housing import HouseTemplate from engine.resources.scene import Point3D -def setup(core): +def setup(housingTemplates): houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_merchant_tent_style_01_deed.iff", "object/building/player/shared_player_merchant_tent_style_01.iff", 1) houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(3.5),float(-0.3),float(3.5))) @@ -14,5 +14,6 @@ def setup(core): houseTemplate.addPlaceablePlanet("dantooine") houseTemplate.addPlaceablePlanet("lok") houseTemplate.setDefaultItemLimit(200) - core.housingService.addHousingTemplate(houseTemplate) + houseTemplate.setBaseMaintenanceRate(8) + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) return \ No newline at end of file diff --git a/scripts/houses/player_merchant_tent_style_02.py b/scripts/houses/player_merchant_tent_style_02.py index 811c5a5e..96668f8d 100644 --- a/scripts/houses/player_merchant_tent_style_02.py +++ b/scripts/houses/player_merchant_tent_style_02.py @@ -2,7 +2,7 @@ import sys from services.housing import HouseTemplate from engine.resources.scene import Point3D -def setup(core): +def setup(housingTemplates): houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_merchant_tent_style_02_deed.iff", "object/building/player/shared_player_merchant_tent_style_02.iff", 1) houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(3.5),float(-0.3),float(3.5))) @@ -14,5 +14,6 @@ def setup(core): houseTemplate.addPlaceablePlanet("dantooine") houseTemplate.addPlaceablePlanet("lok") houseTemplate.setDefaultItemLimit(200) - core.housingService.addHousingTemplate(houseTemplate) + houseTemplate.setBaseMaintenanceRate(8) + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) return \ No newline at end of file diff --git a/scripts/houses/player_merchant_tent_style_03.py b/scripts/houses/player_merchant_tent_style_03.py index d908b947..abfa4196 100644 --- a/scripts/houses/player_merchant_tent_style_03.py +++ b/scripts/houses/player_merchant_tent_style_03.py @@ -2,7 +2,7 @@ import sys from services.housing import HouseTemplate from engine.resources.scene import Point3D -def setup(core): +def setup(housingTemplates): houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_merchant_tent_style_03_deed.iff", "object/building/player/shared_player_merchant_tent_style_03.iff", 1) houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(3.5),float(-0.3),float(3.5))) @@ -14,5 +14,6 @@ def setup(core): houseTemplate.addPlaceablePlanet("dantooine") houseTemplate.addPlaceablePlanet("lok") houseTemplate.setDefaultItemLimit(200) - core.housingService.addHousingTemplate(houseTemplate) + houseTemplate.setBaseMaintenanceRate(8) + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) return \ No newline at end of file diff --git a/scripts/houses/player_shuttleport_tatooine.py b/scripts/houses/player_shuttleport_tatooine.py new file mode 100644 index 00000000..4d7e480f --- /dev/null +++ b/scripts/houses/player_shuttleport_tatooine.py @@ -0,0 +1,12 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(housingTemplates): + houseTemplate = HouseTemplate("object/tangible/deed/city_deed/shared_shuttleport_tatooine_deed.iff", "object/building/tatooine/shared_shuttleport_tatooine.iff", 1) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(3.5),float(-0.3),float(3.5))) + houseTemplate.addPlaceablePlanet("tatooine") + houseTemplate.setDefaultItemLimit(0) + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) + return \ No newline at end of file diff --git a/scripts/loot/lootItems/armor/bone/bone_armor_bicep_left.py b/scripts/loot/lootItems/armor/bone/bone_armor_bicep_left.py new file mode 100644 index 00000000..fe66e1ab --- /dev/null +++ b/scripts/loot/lootItems/armor/bone/bone_armor_bicep_left.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/bone/shared_armor_bone_s01_bicep_l.iff'] + +#def customItemName(): + +# return 'Bone Armor Bicep Left' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/bone/bone_armor_bicep_right.py b/scripts/loot/lootItems/armor/bone/bone_armor_bicep_right.py new file mode 100644 index 00000000..09b6ad68 --- /dev/null +++ b/scripts/loot/lootItems/armor/bone/bone_armor_bicep_right.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/bone/shared_armor_bone_s01_bicep_r.iff'] + +def customItemName(): + + return 'Bone Armor Bicep Right' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/bone/bone_armor_boots.py b/scripts/loot/lootItems/armor/bone/bone_armor_boots.py new file mode 100644 index 00000000..d2debb33 --- /dev/null +++ b/scripts/loot/lootItems/armor/bone/bone_armor_boots.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/bone/shared_armor_bone_s01_boots.iff'] + +def customItemName(): + + return 'Bone Armor Boots' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/bone/bone_armor_bracer_left.py b/scripts/loot/lootItems/armor/bone/bone_armor_bracer_left.py new file mode 100644 index 00000000..75e01372 --- /dev/null +++ b/scripts/loot/lootItems/armor/bone/bone_armor_bracer_left.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/bone/shared_armor_bone_s01_bracer_l.iff'] + +def customItemName(): + + return 'Bone Armor Bracer Left' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/bone/bone_armor_bracer_right.py b/scripts/loot/lootItems/armor/bone/bone_armor_bracer_right.py new file mode 100644 index 00000000..a7049c68 --- /dev/null +++ b/scripts/loot/lootItems/armor/bone/bone_armor_bracer_right.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/bone/shared_armor_bone_s01_bracer_r.iff'] + +def customItemName(): + + return 'Bone Armor Bracer Right' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/bone/bone_armor_chestplate.py b/scripts/loot/lootItems/armor/bone/bone_armor_chestplate.py new file mode 100644 index 00000000..dd41276b --- /dev/null +++ b/scripts/loot/lootItems/armor/bone/bone_armor_chestplate.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/bone/shared_armor_bone_s01_chest_plate.iff'] + +def customItemName(): + + return 'Bone Armor Chestplate' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/bone/bone_armor_gloves.py b/scripts/loot/lootItems/armor/bone/bone_armor_gloves.py new file mode 100644 index 00000000..c888e788 --- /dev/null +++ b/scripts/loot/lootItems/armor/bone/bone_armor_gloves.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/bone/shared_armor_bone_s01_gloves.iff'] + +def customItemName(): + + return 'Bone Armor Gloves' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/bone/bone_armor_helmet.py b/scripts/loot/lootItems/armor/bone/bone_armor_helmet.py new file mode 100644 index 00000000..88cab026 --- /dev/null +++ b/scripts/loot/lootItems/armor/bone/bone_armor_helmet.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/bone/shared_armor_bone_s01_helmet.iff'] + +def customItemName(): + + return 'Bone Armor Helmet' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/bone/bone_armor_leggings.py b/scripts/loot/lootItems/armor/bone/bone_armor_leggings.py new file mode 100644 index 00000000..2c3f2671 --- /dev/null +++ b/scripts/loot/lootItems/armor/bone/bone_armor_leggings.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/bone/shared_armor_bone_s01_leggings.iff'] + +def customItemName(): + + return 'Bone Armor Leggings' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/chitin/chitin_armor_bicep_left.py b/scripts/loot/lootItems/armor/chitin/chitin_armor_bicep_left.py new file mode 100644 index 00000000..d70540c8 --- /dev/null +++ b/scripts/loot/lootItems/armor/chitin/chitin_armor_bicep_left.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/chitin/shared_armor_chitin_s01_bicep_l.iff'] + +def customItemName(): + + return 'Chitin Armor Bicep Left' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/chitin/chitin_armor_bicep_right.py b/scripts/loot/lootItems/armor/chitin/chitin_armor_bicep_right.py new file mode 100644 index 00000000..76a9ff3d --- /dev/null +++ b/scripts/loot/lootItems/armor/chitin/chitin_armor_bicep_right.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/chitin/shared_armor_chitin_s01_bicep_r.iff'] + +def customItemName(): + + return 'Chitin Armor Bicep Right' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/chitin/chitin_armor_boots.py b/scripts/loot/lootItems/armor/chitin/chitin_armor_boots.py new file mode 100644 index 00000000..4163c447 --- /dev/null +++ b/scripts/loot/lootItems/armor/chitin/chitin_armor_boots.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/chitin/shared_armor_chitin_s01_boots.iff'] + +def customItemName(): + + return 'Chitin Armor Boots' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/chitin/chitin_armor_bracer_left.py b/scripts/loot/lootItems/armor/chitin/chitin_armor_bracer_left.py new file mode 100644 index 00000000..70f1135c --- /dev/null +++ b/scripts/loot/lootItems/armor/chitin/chitin_armor_bracer_left.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/chitin/shared_armor_chitin_s01_bracer_l.iff'] + +def customItemName(): + + return 'Chitin Armor Bracer Left' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/chitin/chitin_armor_bracer_right.py b/scripts/loot/lootItems/armor/chitin/chitin_armor_bracer_right.py new file mode 100644 index 00000000..5ae0a4f3 --- /dev/null +++ b/scripts/loot/lootItems/armor/chitin/chitin_armor_bracer_right.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/chitin/shared_armor_chitin_s01_bracer_r.iff'] + +def customItemName(): + + return 'Chitin Armor Bracer Right' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/chitin/chitin_armor_chestplate.py b/scripts/loot/lootItems/armor/chitin/chitin_armor_chestplate.py new file mode 100644 index 00000000..29450398 --- /dev/null +++ b/scripts/loot/lootItems/armor/chitin/chitin_armor_chestplate.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/chitin/shared_armor_chitin_s01_chest_plate.iff'] + +def customItemName(): + + return 'Chitin Armor Chestplate' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/chitin/chitin_armor_gloves.py b/scripts/loot/lootItems/armor/chitin/chitin_armor_gloves.py new file mode 100644 index 00000000..0fec0496 --- /dev/null +++ b/scripts/loot/lootItems/armor/chitin/chitin_armor_gloves.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/chitin/shared_armor_chitin_s01_gloves.iff'] + +def customItemName(): + + return 'Chitin Armor Gloves' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/chitin/chitin_armor_helmet.py b/scripts/loot/lootItems/armor/chitin/chitin_armor_helmet.py new file mode 100644 index 00000000..16fea8fd --- /dev/null +++ b/scripts/loot/lootItems/armor/chitin/chitin_armor_helmet.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/chitin/shared_armor_chitin_s01_helmet.iff'] + +def customItemName(): + + return 'Chitin Armor Helmet' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/chitin/chitin_armor_leggings.py b/scripts/loot/lootItems/armor/chitin/chitin_armor_leggings.py new file mode 100644 index 00000000..f98f26c2 --- /dev/null +++ b/scripts/loot/lootItems/armor/chitin/chitin_armor_leggings.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/chitin/shared_armor_chitin_s01_leggings.iff'] + +def customItemName(): + + return 'Chitin Armor Leggings' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/composite_armor_bicep_left.py b/scripts/loot/lootItems/armor/composite/composite_armor_bicep_left.py similarity index 100% rename from scripts/loot/lootItems/armor/composite_armor_bicep_left.py rename to scripts/loot/lootItems/armor/composite/composite_armor_bicep_left.py diff --git a/scripts/loot/lootItems/armor/composite_armor_bicep_right.py b/scripts/loot/lootItems/armor/composite/composite_armor_bicep_right.py similarity index 100% rename from scripts/loot/lootItems/armor/composite_armor_bicep_right.py rename to scripts/loot/lootItems/armor/composite/composite_armor_bicep_right.py diff --git a/scripts/loot/lootItems/armor/composite_armor_boots.py b/scripts/loot/lootItems/armor/composite/composite_armor_boots.py similarity index 100% rename from scripts/loot/lootItems/armor/composite_armor_boots.py rename to scripts/loot/lootItems/armor/composite/composite_armor_boots.py diff --git a/scripts/loot/lootItems/armor/composite_armor_bracer_left.py b/scripts/loot/lootItems/armor/composite/composite_armor_bracer_left.py similarity index 100% rename from scripts/loot/lootItems/armor/composite_armor_bracer_left.py rename to scripts/loot/lootItems/armor/composite/composite_armor_bracer_left.py diff --git a/scripts/loot/lootItems/armor/composite_armor_bracer_right.py b/scripts/loot/lootItems/armor/composite/composite_armor_bracer_right.py similarity index 100% rename from scripts/loot/lootItems/armor/composite_armor_bracer_right.py rename to scripts/loot/lootItems/armor/composite/composite_armor_bracer_right.py diff --git a/scripts/loot/lootItems/armor/composite_armor_chestplate.py b/scripts/loot/lootItems/armor/composite/composite_armor_chestplate.py similarity index 100% rename from scripts/loot/lootItems/armor/composite_armor_chestplate.py rename to scripts/loot/lootItems/armor/composite/composite_armor_chestplate.py diff --git a/scripts/loot/lootItems/armor/composite_armor_gloves.py b/scripts/loot/lootItems/armor/composite/composite_armor_gloves.py similarity index 100% rename from scripts/loot/lootItems/armor/composite_armor_gloves.py rename to scripts/loot/lootItems/armor/composite/composite_armor_gloves.py diff --git a/scripts/loot/lootItems/armor/composite_armor_helmet.py b/scripts/loot/lootItems/armor/composite/composite_armor_helmet.py similarity index 100% rename from scripts/loot/lootItems/armor/composite_armor_helmet.py rename to scripts/loot/lootItems/armor/composite/composite_armor_helmet.py diff --git a/scripts/loot/lootItems/armor/composite_armor_leggings.py b/scripts/loot/lootItems/armor/composite/composite_armor_leggings.py similarity index 100% rename from scripts/loot/lootItems/armor/composite_armor_leggings.py rename to scripts/loot/lootItems/armor/composite/composite_armor_leggings.py diff --git a/scripts/loot/lootItems/armor/ithorian_defender/ithorian_defender_armor_bicep_left.py b/scripts/loot/lootItems/armor/ithorian_defender/ithorian_defender_armor_bicep_left.py new file mode 100644 index 00000000..06abafbd --- /dev/null +++ b/scripts/loot/lootItems/armor/ithorian_defender/ithorian_defender_armor_bicep_left.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/ithorian_defender/shared_ith_armor_s01_bicep_l.iff'] + +def customItemName(): + + return 'Ithorian Defender Armor Bicep Left' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/ithorian_defender/ithorian_defender_armor_bicep_right.py b/scripts/loot/lootItems/armor/ithorian_defender/ithorian_defender_armor_bicep_right.py new file mode 100644 index 00000000..3a226c23 --- /dev/null +++ b/scripts/loot/lootItems/armor/ithorian_defender/ithorian_defender_armor_bicep_right.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/ithorian_defender/shared_ith_armor_s01_bicep_r.iff'] + +def customItemName(): + + return 'Ithorian Defender Armor Bicep Right' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/ithorian_defender/ithorian_defender_armor_boots.py b/scripts/loot/lootItems/armor/ithorian_defender/ithorian_defender_armor_boots.py new file mode 100644 index 00000000..6c6c1ca4 --- /dev/null +++ b/scripts/loot/lootItems/armor/ithorian_defender/ithorian_defender_armor_boots.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/ithorian_defender/shared_ith_armor_s01_boots.iff'] + +def customItemName(): + + return 'Ithorian Defender Armor Boots' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/ithorian_defender/ithorian_defender_armor_bracer_left.py b/scripts/loot/lootItems/armor/ithorian_defender/ithorian_defender_armor_bracer_left.py new file mode 100644 index 00000000..607baa7f --- /dev/null +++ b/scripts/loot/lootItems/armor/ithorian_defender/ithorian_defender_armor_bracer_left.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/ithorian_defender/shared_ith_armor_s01_bracer_l.iff'] + +def customItemName(): + + return 'Ithorian Defender Armor Bracer Left' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/ithorian_defender/ithorian_defender_armor_bracer_right.py b/scripts/loot/lootItems/armor/ithorian_defender/ithorian_defender_armor_bracer_right.py new file mode 100644 index 00000000..63cb0e4b --- /dev/null +++ b/scripts/loot/lootItems/armor/ithorian_defender/ithorian_defender_armor_bracer_right.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/ithorian_defender/shared_ith_armor_s01_bracer_r.iff'] + +def customItemName(): + + return 'Ithorian Defender Armor Bracer Right' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/ithorian_defender/ithorian_defender_armor_chestplate.py b/scripts/loot/lootItems/armor/ithorian_defender/ithorian_defender_armor_chestplate.py new file mode 100644 index 00000000..0c0d699b --- /dev/null +++ b/scripts/loot/lootItems/armor/ithorian_defender/ithorian_defender_armor_chestplate.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/ithorian_defender/shared_ith_armor_s01_chest_plate.iff'] + +def customItemName(): + + return 'Ithorian Defender Armor Chestplate' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/ithorian_defender/ithorian_defender_armor_gloves.py b/scripts/loot/lootItems/armor/ithorian_defender/ithorian_defender_armor_gloves.py new file mode 100644 index 00000000..5d1f4535 --- /dev/null +++ b/scripts/loot/lootItems/armor/ithorian_defender/ithorian_defender_armor_gloves.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/ithorian_defender/shared_ith_armor_s01_gloves.iff'] + +def customItemName(): + + return 'Ithorian Defender Armor Gloves' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/ithorian_defender/ithorian_defender_armor_helmet.py b/scripts/loot/lootItems/armor/ithorian_defender/ithorian_defender_armor_helmet.py new file mode 100644 index 00000000..7828a56b --- /dev/null +++ b/scripts/loot/lootItems/armor/ithorian_defender/ithorian_defender_armor_helmet.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/ithorian_defender/shared_ith_armor_s01_helmet.iff'] + +def customItemName(): + + return 'Ithorian Defender Armor Helmet' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/ithorian_defender/ithorian_defender_armor_leggings.py b/scripts/loot/lootItems/armor/ithorian_defender/ithorian_defender_armor_leggings.py new file mode 100644 index 00000000..f95cff3f --- /dev/null +++ b/scripts/loot/lootItems/armor/ithorian_defender/ithorian_defender_armor_leggings.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/ithorian_defender/shared_ith_armor_s01_leggings.iff'] + +def customItemName(): + + return 'Ithorian Defender Armor Leggings' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/ithorian_guardian/ithorian_guardian_armor_bicep_left.py b/scripts/loot/lootItems/armor/ithorian_guardian/ithorian_guardian_armor_bicep_left.py new file mode 100644 index 00000000..eedb6c9b --- /dev/null +++ b/scripts/loot/lootItems/armor/ithorian_guardian/ithorian_guardian_armor_bicep_left.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/ithorian_guardian/shared_ith_armor_s02_bicep_l.iff'] + +def customItemName(): + + return 'Ithorian Guardian Armor Bicep Left' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/ithorian_guardian/ithorian_guardian_armor_bicep_right.py b/scripts/loot/lootItems/armor/ithorian_guardian/ithorian_guardian_armor_bicep_right.py new file mode 100644 index 00000000..b0edd6d9 --- /dev/null +++ b/scripts/loot/lootItems/armor/ithorian_guardian/ithorian_guardian_armor_bicep_right.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/ithorian_guardian/shared_ith_armor_s02_bicep_r.iff'] + +def customItemName(): + + return 'Ithorian Guardian Armor Bicep Right' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/ithorian_guardian/ithorian_guardian_armor_boots.py b/scripts/loot/lootItems/armor/ithorian_guardian/ithorian_guardian_armor_boots.py new file mode 100644 index 00000000..3b27d829 --- /dev/null +++ b/scripts/loot/lootItems/armor/ithorian_guardian/ithorian_guardian_armor_boots.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/ithorian_guardian/shared_ith_armor_s02_boots.iff'] + +def customItemName(): + + return 'Ithorian Guardian Armor Boots' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/ithorian_guardian/ithorian_guardian_armor_bracer_left.py b/scripts/loot/lootItems/armor/ithorian_guardian/ithorian_guardian_armor_bracer_left.py new file mode 100644 index 00000000..3f72841a --- /dev/null +++ b/scripts/loot/lootItems/armor/ithorian_guardian/ithorian_guardian_armor_bracer_left.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/ithorian_guardian/shared_ith_armor_s02_bracer_l.iff'] + +def customItemName(): + + return 'Ithorian Guardian Armor Bracer Left' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/ithorian_guardian/ithorian_guardian_armor_bracer_right.py b/scripts/loot/lootItems/armor/ithorian_guardian/ithorian_guardian_armor_bracer_right.py new file mode 100644 index 00000000..9072b494 --- /dev/null +++ b/scripts/loot/lootItems/armor/ithorian_guardian/ithorian_guardian_armor_bracer_right.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/ithorian_guardian/shared_ith_armor_s02_bracer_r.iff'] + +def customItemName(): + + return 'Ithorian Guardian Armor Bracer Right' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/ithorian_guardian/ithorian_guardian_armor_chestplate.py b/scripts/loot/lootItems/armor/ithorian_guardian/ithorian_guardian_armor_chestplate.py new file mode 100644 index 00000000..6ec13a5e --- /dev/null +++ b/scripts/loot/lootItems/armor/ithorian_guardian/ithorian_guardian_armor_chestplate.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/ithorian_guardian/shared_ith_armor_s02_chest_plate.iff'] + +def customItemName(): + + return 'Ithorian Guardian Armor Chestplate' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/ithorian_guardian/ithorian_guardian_armor_gloves.py b/scripts/loot/lootItems/armor/ithorian_guardian/ithorian_guardian_armor_gloves.py new file mode 100644 index 00000000..002612cb --- /dev/null +++ b/scripts/loot/lootItems/armor/ithorian_guardian/ithorian_guardian_armor_gloves.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/ithorian_guardian/shared_ith_armor_s02_gloves.iff'] + +def customItemName(): + + return 'Ithorian Guardian Armor Gloves' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/ithorian_guardian/ithorian_guardian_armor_helmet.py b/scripts/loot/lootItems/armor/ithorian_guardian/ithorian_guardian_armor_helmet.py new file mode 100644 index 00000000..418501a6 --- /dev/null +++ b/scripts/loot/lootItems/armor/ithorian_guardian/ithorian_guardian_armor_helmet.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/ithorian_guardian/shared_ith_armor_s02_helmet.iff'] + +def customItemName(): + + return 'Ithorian Guardian Armor Helmet' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/ithorian_guardian/ithorian_guardian_armor_leggings.py b/scripts/loot/lootItems/armor/ithorian_guardian/ithorian_guardian_armor_leggings.py new file mode 100644 index 00000000..bcc43166 --- /dev/null +++ b/scripts/loot/lootItems/armor/ithorian_guardian/ithorian_guardian_armor_leggings.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/ithorian_guardian/shared_ith_armor_s02_leggings.iff'] + +def customItemName(): + + return 'Ithorian Guardian Armor Leggings' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/ithorian_sentinel/ithorian_sentinel_armor_bicep_left.py b/scripts/loot/lootItems/armor/ithorian_sentinel/ithorian_sentinel_armor_bicep_left.py new file mode 100644 index 00000000..0963cfc9 --- /dev/null +++ b/scripts/loot/lootItems/armor/ithorian_sentinel/ithorian_sentinel_armor_bicep_left.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_bicep_l.iff'] + +def customItemName(): + + return 'Ithorian Sentinel Armor Bicep Left' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/ithorian_sentinel/ithorian_sentinel_armor_bicep_right.py b/scripts/loot/lootItems/armor/ithorian_sentinel/ithorian_sentinel_armor_bicep_right.py new file mode 100644 index 00000000..acd5473f --- /dev/null +++ b/scripts/loot/lootItems/armor/ithorian_sentinel/ithorian_sentinel_armor_bicep_right.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_bicep_r.iff'] + +def customItemName(): + + return 'Ithorian Sentinel Armor Bicep Right' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/ithorian_sentinel/ithorian_sentinel_armor_boots.py b/scripts/loot/lootItems/armor/ithorian_sentinel/ithorian_sentinel_armor_boots.py new file mode 100644 index 00000000..e961438f --- /dev/null +++ b/scripts/loot/lootItems/armor/ithorian_sentinel/ithorian_sentinel_armor_boots.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_boots.iff'] + +def customItemName(): + + return 'Ithorian Sentinel Armor Boots' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/ithorian_sentinel/ithorian_sentinel_armor_bracer_left.py b/scripts/loot/lootItems/armor/ithorian_sentinel/ithorian_sentinel_armor_bracer_left.py new file mode 100644 index 00000000..fd73de77 --- /dev/null +++ b/scripts/loot/lootItems/armor/ithorian_sentinel/ithorian_sentinel_armor_bracer_left.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_bracer_l.iff'] + +def customItemName(): + + return 'Ithorian Sentinel Armor Bracer Left' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/ithorian_sentinel/ithorian_sentinel_armor_bracer_right.py b/scripts/loot/lootItems/armor/ithorian_sentinel/ithorian_sentinel_armor_bracer_right.py new file mode 100644 index 00000000..dba70a3c --- /dev/null +++ b/scripts/loot/lootItems/armor/ithorian_sentinel/ithorian_sentinel_armor_bracer_right.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_bracer_r.iff'] + +def customItemName(): + + return 'Ithorian Sentinel Armor Bracer Right' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/ithorian_sentinel/ithorian_sentinel_armor_chestplate.py b/scripts/loot/lootItems/armor/ithorian_sentinel/ithorian_sentinel_armor_chestplate.py new file mode 100644 index 00000000..2bde059c --- /dev/null +++ b/scripts/loot/lootItems/armor/ithorian_sentinel/ithorian_sentinel_armor_chestplate.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_chest_plate.iff'] + +def customItemName(): + + return 'Ithorian Sentinel Armor Chestplate' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/ithorian_sentinel/ithorian_sentinel_armor_gloves.py b/scripts/loot/lootItems/armor/ithorian_sentinel/ithorian_sentinel_armor_gloves.py new file mode 100644 index 00000000..439d857e --- /dev/null +++ b/scripts/loot/lootItems/armor/ithorian_sentinel/ithorian_sentinel_armor_gloves.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_gloves.iff'] + +def customItemName(): + + return 'Ithorian Sentinel Armor Gloves' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/ithorian_sentinel/ithorian_sentinel_armor_helmet.py b/scripts/loot/lootItems/armor/ithorian_sentinel/ithorian_sentinel_armor_helmet.py new file mode 100644 index 00000000..efc9a054 --- /dev/null +++ b/scripts/loot/lootItems/armor/ithorian_sentinel/ithorian_sentinel_armor_helmet.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_helmet.iff'] + +def customItemName(): + + return 'Ithorian Sentinel Armor Helmet' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/ithorian_sentinel/ithorian_sentinel_armor_leggings.py b/scripts/loot/lootItems/armor/ithorian_sentinel/ithorian_sentinel_armor_leggings.py new file mode 100644 index 00000000..b4f3eafc --- /dev/null +++ b/scripts/loot/lootItems/armor/ithorian_sentinel/ithorian_sentinel_armor_leggings.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_leggings.iff'] + +def customItemName(): + + return 'Ithorian Sentinel Armor Leggings' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/kashyyykian_black_mtn/kashyyykian_black_mtn_armor_bicep_left.py b/scripts/loot/lootItems/armor/kashyyykian_black_mtn/kashyyykian_black_mtn_armor_bicep_left.py new file mode 100644 index 00000000..2f6e2b95 --- /dev/null +++ b/scripts/loot/lootItems/armor/kashyyykian_black_mtn/kashyyykian_black_mtn_armor_bicep_left.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/kashyyykian_black_mtn/shared_armor_kashyyykian_black_mtn_bicep_l.iff'] + +def customItemName(): + + return 'Kashyyykian Black Mountain Bicep Left' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/kashyyykian_black_mtn/kashyyykian_black_mtn_armor_bicep_right.py b/scripts/loot/lootItems/armor/kashyyykian_black_mtn/kashyyykian_black_mtn_armor_bicep_right.py new file mode 100644 index 00000000..8cec0f7d --- /dev/null +++ b/scripts/loot/lootItems/armor/kashyyykian_black_mtn/kashyyykian_black_mtn_armor_bicep_right.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/kashyyykian_black_mtn/shared_armor_kashyyykian_black_mtn_bicep_r.iff'] + +def customItemName(): + + return 'Kashyyykian Black Mountain Bicep Right' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/kashyyykian_black_mtn/kashyyykian_black_mtn_armor_bracer_left.py b/scripts/loot/lootItems/armor/kashyyykian_black_mtn/kashyyykian_black_mtn_armor_bracer_left.py new file mode 100644 index 00000000..64ee47c3 --- /dev/null +++ b/scripts/loot/lootItems/armor/kashyyykian_black_mtn/kashyyykian_black_mtn_armor_bracer_left.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/kashyyykian_black_mtn/shared_armor_kashyyykian_black_mtn_bracer_l.iff'] + +def customItemName(): + + return 'Kashyyykian Black Mountain Bracer Left' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/kashyyykian_black_mtn/kashyyykian_black_mtn_armor_bracer_right.py b/scripts/loot/lootItems/armor/kashyyykian_black_mtn/kashyyykian_black_mtn_armor_bracer_right.py new file mode 100644 index 00000000..c17c1c47 --- /dev/null +++ b/scripts/loot/lootItems/armor/kashyyykian_black_mtn/kashyyykian_black_mtn_armor_bracer_right.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/kashyyykian_black_mtn/shared_armor_kashyyykian_black_mtn_bracer_r.iff'] + +def customItemName(): + + return 'Kashyyykian Black Mountain Bracer Right' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/kashyyykian_black_mtn/kashyyykian_black_mtn_armor_chestplate.py b/scripts/loot/lootItems/armor/kashyyykian_black_mtn/kashyyykian_black_mtn_armor_chestplate.py new file mode 100644 index 00000000..618d2a57 --- /dev/null +++ b/scripts/loot/lootItems/armor/kashyyykian_black_mtn/kashyyykian_black_mtn_armor_chestplate.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/kashyyykian_black_mtn/shared_armor_kashyyykian_black_mtn_chestplate.iff'] + +def customItemName(): + + return 'Kashyyykian Black Mountain Chestplate' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/kashyyykian_black_mtn/kashyyykian_black_mtn_leggings.py b/scripts/loot/lootItems/armor/kashyyykian_black_mtn/kashyyykian_black_mtn_leggings.py new file mode 100644 index 00000000..0118c616 --- /dev/null +++ b/scripts/loot/lootItems/armor/kashyyykian_black_mtn/kashyyykian_black_mtn_leggings.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/kashyyykian_black_mtn/shared_armor_kashyyykian_black_mtn_leggings.iff'] + +def customItemName(): + + return 'Kashyyykian Black Mountain Leggings' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/kashyyykian_ceremonial/kashyyykian_ceremonial_bicep_left.py b/scripts/loot/lootItems/armor/kashyyykian_ceremonial/kashyyykian_ceremonial_bicep_left.py new file mode 100644 index 00000000..6f2e204e --- /dev/null +++ b/scripts/loot/lootItems/armor/kashyyykian_ceremonial/kashyyykian_ceremonial_bicep_left.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/kashyyykian_ceremonial/shared_armor_kashyyykian_ceremonial_bicep_l.iff'] + +def customItemName(): + + return 'Kashyyykian Ceremonial Bicep Left' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/kashyyykian_ceremonial/kashyyykian_ceremonial_bicep_right.py b/scripts/loot/lootItems/armor/kashyyykian_ceremonial/kashyyykian_ceremonial_bicep_right.py new file mode 100644 index 00000000..b8e67983 --- /dev/null +++ b/scripts/loot/lootItems/armor/kashyyykian_ceremonial/kashyyykian_ceremonial_bicep_right.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/kashyyykian_ceremonial/shared_armor_kashyyykian_ceremonial_bicep_r.iff'] + +def customItemName(): + + return 'Kashyyykian Ceremonial Bicep Right' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/kashyyykian_ceremonial/kashyyykian_ceremonial_bracer_left.py b/scripts/loot/lootItems/armor/kashyyykian_ceremonial/kashyyykian_ceremonial_bracer_left.py new file mode 100644 index 00000000..3e27ce7f --- /dev/null +++ b/scripts/loot/lootItems/armor/kashyyykian_ceremonial/kashyyykian_ceremonial_bracer_left.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/kashyyykian_ceremonial/shared_armor_kashyyykian_ceremonial_bracer_l.iff'] + +def customItemName(): + + return 'Kashyyykian Ceremonial Bracer Left' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/kashyyykian_ceremonial/kashyyykian_ceremonial_bracer_right.py b/scripts/loot/lootItems/armor/kashyyykian_ceremonial/kashyyykian_ceremonial_bracer_right.py new file mode 100644 index 00000000..fa389235 --- /dev/null +++ b/scripts/loot/lootItems/armor/kashyyykian_ceremonial/kashyyykian_ceremonial_bracer_right.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/kashyyykian_ceremonial/shared_armor_kashyyykian_ceremonial_bracer_r.iff'] + +def customItemName(): + + return 'Kashyyykian Ceremonial Bracer Left' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/kashyyykian_ceremonial/kashyyykian_ceremonial_chestplate.py b/scripts/loot/lootItems/armor/kashyyykian_ceremonial/kashyyykian_ceremonial_chestplate.py new file mode 100644 index 00000000..de3f29d8 --- /dev/null +++ b/scripts/loot/lootItems/armor/kashyyykian_ceremonial/kashyyykian_ceremonial_chestplate.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/kashyyykian_ceremonial/shared_armor_kashyyykian_ceremonial_chestplate.iff'] + +def customItemName(): + + return 'Kashyyykian Ceremonial Chestplate' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/kashyyykian_ceremonial/kashyyykian_ceremonial_leggings.py b/scripts/loot/lootItems/armor/kashyyykian_ceremonial/kashyyykian_ceremonial_leggings.py new file mode 100644 index 00000000..5ffea758 --- /dev/null +++ b/scripts/loot/lootItems/armor/kashyyykian_ceremonial/kashyyykian_ceremonial_leggings.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/kashyyykian_ceremonial/shared_armor_kashyyykian_ceremonial_leggings.iff'] + +def customItemName(): + + return 'Kashyyykian Ceremonial Leggings' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/kashyyykian_hunting/kashyyykian_hunting_bicep_left.py b/scripts/loot/lootItems/armor/kashyyykian_hunting/kashyyykian_hunting_bicep_left.py new file mode 100644 index 00000000..02717dc3 --- /dev/null +++ b/scripts/loot/lootItems/armor/kashyyykian_hunting/kashyyykian_hunting_bicep_left.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/kashyyykian_hunting/shared_armor_kashyyykian_hunting_bicep_l.iff'] + +def customItemName(): + + return 'Kashyyykian Hunting Bicep Left' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/kashyyykian_hunting/kashyyykian_hunting_bicep_right.py b/scripts/loot/lootItems/armor/kashyyykian_hunting/kashyyykian_hunting_bicep_right.py new file mode 100644 index 00000000..70aba08f --- /dev/null +++ b/scripts/loot/lootItems/armor/kashyyykian_hunting/kashyyykian_hunting_bicep_right.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/kashyyykian_hunting/shared_armor_kashyyykian_hunting_bicep_r.iff'] + +def customItemName(): + + return 'Kashyyykian Hunting Bicep Right' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/kashyyykian_hunting/kashyyykian_hunting_bracer_left.py b/scripts/loot/lootItems/armor/kashyyykian_hunting/kashyyykian_hunting_bracer_left.py new file mode 100644 index 00000000..601c880d --- /dev/null +++ b/scripts/loot/lootItems/armor/kashyyykian_hunting/kashyyykian_hunting_bracer_left.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/kashyyykian_hunting/shared_armor_kashyyykian_hunting_bracer_l.iff'] + +def customItemName(): + + return 'Kashyyykian Hunting Bracer Left' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/kashyyykian_hunting/kashyyykian_hunting_bracer_right.py b/scripts/loot/lootItems/armor/kashyyykian_hunting/kashyyykian_hunting_bracer_right.py new file mode 100644 index 00000000..b00a3420 --- /dev/null +++ b/scripts/loot/lootItems/armor/kashyyykian_hunting/kashyyykian_hunting_bracer_right.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/kashyyykian_hunting/shared_armor_kashyyykian_hunting_bracer_r.iff'] + +def customItemName(): + + return 'Kashyyykian Hunting Bracer Right' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/kashyyykian_hunting/kashyyykian_hunting_chestplate.py b/scripts/loot/lootItems/armor/kashyyykian_hunting/kashyyykian_hunting_chestplate.py new file mode 100644 index 00000000..692bca15 --- /dev/null +++ b/scripts/loot/lootItems/armor/kashyyykian_hunting/kashyyykian_hunting_chestplate.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/kashyyykian_hunting/shared_armor_kashyyykian_hunting_chest_plate.iff'] + +def customItemName(): + + return 'Kashyyykian Hunting Chestplate' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/kashyyykian_hunting/kashyyykian_hunting_leggings.py b/scripts/loot/lootItems/armor/kashyyykian_hunting/kashyyykian_hunting_leggings.py new file mode 100644 index 00000000..ff7c10c1 --- /dev/null +++ b/scripts/loot/lootItems/armor/kashyyykian_hunting/kashyyykian_hunting_leggings.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/kashyyykian_hunting/shared_armor_kashyyykian_hunting_leggings.iff'] + +def customItemName(): + + return 'Kashyyykian Hunting Leggings' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/marauder/marauder_armor_bicep_left.py b/scripts/loot/lootItems/armor/marauder/marauder_armor_bicep_left.py new file mode 100644 index 00000000..5311bb2a --- /dev/null +++ b/scripts/loot/lootItems/armor/marauder/marauder_armor_bicep_left.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/marauder/shared_armor_marauder_s01_bicep_l.iff','object/tangible/wearables/armor/marauder/shared_armor_marauder_s02_bicep_l.iff','object/tangible/wearables/armor/marauder/shared_armor_marauder_s03_bicep_l.iff'] + +def customItemName(): + + return 'Marauder Armor Bicep Left' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/marauder/marauder_armor_bicep_right.py b/scripts/loot/lootItems/armor/marauder/marauder_armor_bicep_right.py new file mode 100644 index 00000000..ec4725e9 --- /dev/null +++ b/scripts/loot/lootItems/armor/marauder/marauder_armor_bicep_right.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/marauder/shared_armor_marauder_s01_bicep_r.iff','object/tangible/wearables/armor/marauder/shared_armor_marauder_s02_bicep_r.iff','object/tangible/wearables/armor/marauder/shared_armor_marauder_s03_bicep_r.iff'] + +def customItemName(): + + return 'Marauder Armor Bicep Right' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/marauder/marauder_armor_boots.py b/scripts/loot/lootItems/armor/marauder/marauder_armor_boots.py new file mode 100644 index 00000000..4fff799b --- /dev/null +++ b/scripts/loot/lootItems/armor/marauder/marauder_armor_boots.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/marauder/shared_armor_marauder_s01_boots.iff','object/tangible/wearables/armor/marauder/shared_armor_marauder_s02_boots.iff','object/tangible/wearables/armor/marauder/shared_armor_marauder_s03_boots.iff'] + +def customItemName(): + + return 'Marauder Armor Boots' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/marauder/marauder_armor_bracer_left.py b/scripts/loot/lootItems/armor/marauder/marauder_armor_bracer_left.py new file mode 100644 index 00000000..13e8df13 --- /dev/null +++ b/scripts/loot/lootItems/armor/marauder/marauder_armor_bracer_left.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/marauder/shared_armor_marauder_s01_bracer_l.iff','object/tangible/wearables/armor/marauder/shared_armor_marauder_s02_bracer_l.iff','object/tangible/wearables/armor/marauder/shared_armor_marauder_s03_bracer_l.iff'] + +def customItemName(): + + return 'Marauder Armor Bracer Left' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/marauder/marauder_armor_bracer_right.py b/scripts/loot/lootItems/armor/marauder/marauder_armor_bracer_right.py new file mode 100644 index 00000000..7d7938f0 --- /dev/null +++ b/scripts/loot/lootItems/armor/marauder/marauder_armor_bracer_right.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/marauder/shared_armor_marauder_s01_bracer_r.iff','object/tangible/wearables/armor/marauder/shared_armor_marauder_s02_bracer_r.iff','object/tangible/wearables/armor/marauder/shared_armor_marauder_s03_bracer_r.iff'] + +def customItemName(): + + return 'Marauder Armor Bracer Right' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/marauder/marauder_armor_chestplate.py b/scripts/loot/lootItems/armor/marauder/marauder_armor_chestplate.py new file mode 100644 index 00000000..2372a663 --- /dev/null +++ b/scripts/loot/lootItems/armor/marauder/marauder_armor_chestplate.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/marauder/shared_armor_marauder_s01_chest_plate.iff','object/tangible/wearables/armor/marauder/shared_armor_marauder_s02_chest_plate.iff','object/tangible/wearables/armor/marauder/shared_armor_marauder_s03_chest_plate.iff'] + +def customItemName(): + + return 'Marauder Armor Chestplate' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/marauder/marauder_armor_gloves.py b/scripts/loot/lootItems/armor/marauder/marauder_armor_gloves.py new file mode 100644 index 00000000..79bf35b1 --- /dev/null +++ b/scripts/loot/lootItems/armor/marauder/marauder_armor_gloves.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/marauder/shared_armor_marauder_s01_gloves.iff','object/tangible/wearables/armor/marauder/shared_armor_marauder_s02_gloves.iff','object/tangible/wearables/armor/marauder/shared_armor_marauder_s03_gloves.iff'] + +def customItemName(): + + return 'Marauder Armor Gloves' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/marauder/marauder_armor_helmet.py b/scripts/loot/lootItems/armor/marauder/marauder_armor_helmet.py new file mode 100644 index 00000000..0e8674f7 --- /dev/null +++ b/scripts/loot/lootItems/armor/marauder/marauder_armor_helmet.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/marauder/shared_armor_marauder_s01_helmet.iff','object/tangible/wearables/armor/marauder/shared_armor_marauder_s02_helmet.iff','object/tangible/wearables/armor/marauder/shared_armor_marauder_s03_helmet.iff'] + +def customItemName(): + + return 'Marauder Armor Helmet' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/marauder/marauder_armor_leggings.py b/scripts/loot/lootItems/armor/marauder/marauder_armor_leggings.py new file mode 100644 index 00000000..8e613148 --- /dev/null +++ b/scripts/loot/lootItems/armor/marauder/marauder_armor_leggings.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/marauder/shared_armor_marauder_s01_leggings.iff','object/tangible/wearables/armor/marauder/shared_armor_marauder_s02_leggings.iff','object/tangible/wearables/armor/marauder/shared_armor_marauder_s03_leggings.iff'] + +def customItemName(): + + return 'Marauder Armor Leggings' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/padded/padded_armor_bicep_left.py b/scripts/loot/lootItems/armor/padded/padded_armor_bicep_left.py new file mode 100644 index 00000000..c2f93b24 --- /dev/null +++ b/scripts/loot/lootItems/armor/padded/padded_armor_bicep_left.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/padded/shared_armor_padded_s01_bicep_l.iff'] + +def customItemName(): + + return 'Padded Armor Bicep Left' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/padded/padded_armor_bicep_right.py b/scripts/loot/lootItems/armor/padded/padded_armor_bicep_right.py new file mode 100644 index 00000000..30d77a43 --- /dev/null +++ b/scripts/loot/lootItems/armor/padded/padded_armor_bicep_right.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/padded/shared_armor_padded_s01_bicep_r.iff'] + +def customItemName(): + + return 'Padded Armor Bicep Right' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/padded/padded_armor_boots.py b/scripts/loot/lootItems/armor/padded/padded_armor_boots.py new file mode 100644 index 00000000..a1767be7 --- /dev/null +++ b/scripts/loot/lootItems/armor/padded/padded_armor_boots.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/padded/shared_armor_padded_s01_boots.iff'] + +def customItemName(): + + return 'Padded Armor Boots' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/padded/padded_armor_bracer_left.py b/scripts/loot/lootItems/armor/padded/padded_armor_bracer_left.py new file mode 100644 index 00000000..2eb2c45c --- /dev/null +++ b/scripts/loot/lootItems/armor/padded/padded_armor_bracer_left.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/padded/shared_armor_padded_s01_bracer_l.iff'] + +def customItemName(): + + return 'Padded Armor Bracer Left' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/padded/padded_armor_bracer_right.py b/scripts/loot/lootItems/armor/padded/padded_armor_bracer_right.py new file mode 100644 index 00000000..182131bf --- /dev/null +++ b/scripts/loot/lootItems/armor/padded/padded_armor_bracer_right.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/padded/shared_armor_padded_s01_bracer_r.iff'] + +def customItemName(): + + return 'Padded Armor Bracer Right' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/padded/padded_armor_chestplate.py b/scripts/loot/lootItems/armor/padded/padded_armor_chestplate.py new file mode 100644 index 00000000..7b3c84d5 --- /dev/null +++ b/scripts/loot/lootItems/armor/padded/padded_armor_chestplate.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/padded/shared_armor_padded_s01_chest_plate.iff'] + +def customItemName(): + + return 'Padded Armor Chestplate' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/padded/padded_armor_gloves.py b/scripts/loot/lootItems/armor/padded/padded_armor_gloves.py new file mode 100644 index 00000000..72001ed2 --- /dev/null +++ b/scripts/loot/lootItems/armor/padded/padded_armor_gloves.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/padded/shared_armor_padded_s01_gloves.iff'] + +def customItemName(): + + return 'Padded Armor Gloves' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/padded/padded_armor_helmet.py b/scripts/loot/lootItems/armor/padded/padded_armor_helmet.py new file mode 100644 index 00000000..575e5b98 --- /dev/null +++ b/scripts/loot/lootItems/armor/padded/padded_armor_helmet.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/padded/shared_armor_padded_s01_helmet.iff'] + +def customItemName(): + + return 'Padded Armor Helmet' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/padded/padded_armor_leggings.py b/scripts/loot/lootItems/armor/padded/padded_armor_leggings.py new file mode 100644 index 00000000..c6c299d5 --- /dev/null +++ b/scripts/loot/lootItems/armor/padded/padded_armor_leggings.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/padded/shared_armor_padded_s01_leggings.iff'] + +def customItemName(): + + return 'Padded Armor Leggings' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/tantel/tantel_armor_bicep_left.py b/scripts/loot/lootItems/armor/tantel/tantel_armor_bicep_left.py new file mode 100644 index 00000000..4705777e --- /dev/null +++ b/scripts/loot/lootItems/armor/tantel/tantel_armor_bicep_left.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/tantel/shared_armor_tantel_skreej_bicep_l.iff'] + +def customItemName(): + + return 'Tantel Armor Bicep Left' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/tantel/tantel_armor_bicep_right.py b/scripts/loot/lootItems/armor/tantel/tantel_armor_bicep_right.py new file mode 100644 index 00000000..6da6c94b --- /dev/null +++ b/scripts/loot/lootItems/armor/tantel/tantel_armor_bicep_right.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/tantel/shared_armor_tantel_skreej_bicep_r.iff'] + +def customItemName(): + + return 'Tantel Armor Bicep Right' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/tantel/tantel_armor_boots.py b/scripts/loot/lootItems/armor/tantel/tantel_armor_boots.py new file mode 100644 index 00000000..7920a987 --- /dev/null +++ b/scripts/loot/lootItems/armor/tantel/tantel_armor_boots.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/tantel/shared_armor_tantel_skreej_boots.iff'] + +def customItemName(): + + return 'Tantel Armor Boots' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/tantel/tantel_armor_bracer_left.py b/scripts/loot/lootItems/armor/tantel/tantel_armor_bracer_left.py new file mode 100644 index 00000000..70c573f3 --- /dev/null +++ b/scripts/loot/lootItems/armor/tantel/tantel_armor_bracer_left.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/tantel/shared_armor_tantel_skreej_bracer_l.iff'] + +def customItemName(): + + return 'Tantel Armor Bracer Left' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/tantel/tantel_armor_bracer_right.py b/scripts/loot/lootItems/armor/tantel/tantel_armor_bracer_right.py new file mode 100644 index 00000000..ff47d129 --- /dev/null +++ b/scripts/loot/lootItems/armor/tantel/tantel_armor_bracer_right.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/tantel/shared_armor_tantel_skreej_bracer_r.iff'] + +def customItemName(): + + return 'Tantel Armor Bracer Right' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/tantel/tantel_armor_chestplate.py b/scripts/loot/lootItems/armor/tantel/tantel_armor_chestplate.py new file mode 100644 index 00000000..d6babe12 --- /dev/null +++ b/scripts/loot/lootItems/armor/tantel/tantel_armor_chestplate.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/tantel/shared_armor_tantel_skreej_chest_plate.iff'] + +def customItemName(): + + return 'Tantel Armor Chestplate' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/tantel/tantel_armor_gloves.py b/scripts/loot/lootItems/armor/tantel/tantel_armor_gloves.py new file mode 100644 index 00000000..555b5ab1 --- /dev/null +++ b/scripts/loot/lootItems/armor/tantel/tantel_armor_gloves.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/tantel/shared_armor_tantel_skreej_gloves.iff'] + +def customItemName(): + + return 'Tantel Armor Gloves' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/tantel/tantel_armor_helmet.py b/scripts/loot/lootItems/armor/tantel/tantel_armor_helmet.py new file mode 100644 index 00000000..211b9735 --- /dev/null +++ b/scripts/loot/lootItems/armor/tantel/tantel_armor_helmet.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/tantel/shared_armor_tantel_skreej_helmet.iff'] + +def customItemName(): + + return 'Tantel Armor Helmet' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/tantel/tantel_armor_leggings.py b/scripts/loot/lootItems/armor/tantel/tantel_armor_leggings.py new file mode 100644 index 00000000..8550f9a9 --- /dev/null +++ b/scripts/loot/lootItems/armor/tantel/tantel_armor_leggings.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/tantel/shared_armor_tantel_skreej_leggings.iff'] + +def customItemName(): + + return 'Tantel Armor Leggings' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/ubese/ubese_armor_bandolier.py b/scripts/loot/lootItems/armor/ubese/ubese_armor_bandolier.py new file mode 100644 index 00000000..17fcecd9 --- /dev/null +++ b/scripts/loot/lootItems/armor/ubese/ubese_armor_bandolier.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/ubese/shared_armor_ubese_bandolier.iff'] + +def customItemName(): + + return 'Ubese Armor Bandolier' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/ubese/ubese_armor_boots.py b/scripts/loot/lootItems/armor/ubese/ubese_armor_boots.py new file mode 100644 index 00000000..9720add5 --- /dev/null +++ b/scripts/loot/lootItems/armor/ubese/ubese_armor_boots.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/ubese/shared_armor_ubese_boots.iff'] + +def customItemName(): + + return 'Ubese Armor Boots' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/ubese/ubese_armor_bracer_left.py b/scripts/loot/lootItems/armor/ubese/ubese_armor_bracer_left.py new file mode 100644 index 00000000..6f2d6dd4 --- /dev/null +++ b/scripts/loot/lootItems/armor/ubese/ubese_armor_bracer_left.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/ubese/shared_armor_ubese_bracer_l.iff'] + +def customItemName(): + + return 'Ubese Armor Bracer Left' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/ubese/ubese_armor_bracer_right.py b/scripts/loot/lootItems/armor/ubese/ubese_armor_bracer_right.py new file mode 100644 index 00000000..a1fbed28 --- /dev/null +++ b/scripts/loot/lootItems/armor/ubese/ubese_armor_bracer_right.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/ubese/shared_armor_ubese_bracer_r.iff'] + +def customItemName(): + + return 'Ubese Armor Bracer Right' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/ubese/ubese_armor_gloves.py b/scripts/loot/lootItems/armor/ubese/ubese_armor_gloves.py new file mode 100644 index 00000000..38d47564 --- /dev/null +++ b/scripts/loot/lootItems/armor/ubese/ubese_armor_gloves.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/ubese/shared_armor_ubese_gloves.iff'] + +def customItemName(): + + return 'Ubese Armor Gloves' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/ubese/ubese_armor_helmet.py b/scripts/loot/lootItems/armor/ubese/ubese_armor_helmet.py new file mode 100644 index 00000000..ff18ad4a --- /dev/null +++ b/scripts/loot/lootItems/armor/ubese/ubese_armor_helmet.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/ubese/shared_armor_ubese_helmet.iff'] + +def customItemName(): + + return 'Ubese Armor Helmet' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/ubese/ubese_armor_jacket.py b/scripts/loot/lootItems/armor/ubese/ubese_armor_jacket.py new file mode 100644 index 00000000..98a7fedd --- /dev/null +++ b/scripts/loot/lootItems/armor/ubese/ubese_armor_jacket.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/ubese/shared_armor_ubese_jacket.iff'] + +def customItemName(): + + return 'Ubese Armor Jacket' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/ubese/ubese_armor_shirt.py b/scripts/loot/lootItems/armor/ubese/ubese_armor_shirt.py new file mode 100644 index 00000000..0ad493a1 --- /dev/null +++ b/scripts/loot/lootItems/armor/ubese/ubese_armor_shirt.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/ubese/shared_armor_ubese_shirt.iff'] + +def customItemName(): + + return 'Ubese Armor Shirt' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/chroniclerelics/chronicle_relic_fragment.py b/scripts/loot/lootItems/chroniclerelics/chronicle_relic_fragment.py new file mode 100644 index 00000000..e69de29b diff --git a/scripts/loot/lootItems/clothing/suits/reinforced_jumpsuit.py b/scripts/loot/lootItems/clothing/suits/reinforced_jumpsuit.py new file mode 100644 index 00000000..e69de29b diff --git a/scripts/loot/lootItems/clothing/suits/traders_flightsuit.py b/scripts/loot/lootItems/clothing/suits/traders_flightsuit.py new file mode 100644 index 00000000..e69de29b diff --git a/scripts/loot/lootItems/clothing/tusken_raider_bandolier.py b/scripts/loot/lootItems/clothing/tusken/tusken_raider_bandolier.py similarity index 100% rename from scripts/loot/lootItems/clothing/tusken_raider_bandolier.py rename to scripts/loot/lootItems/clothing/tusken/tusken_raider_bandolier.py diff --git a/scripts/loot/lootItems/clothing/tusken_raider_boots.py b/scripts/loot/lootItems/clothing/tusken/tusken_raider_boots.py similarity index 100% rename from scripts/loot/lootItems/clothing/tusken_raider_boots.py rename to scripts/loot/lootItems/clothing/tusken/tusken_raider_boots.py diff --git a/scripts/loot/lootItems/clothing/tusken_raider_dress.py b/scripts/loot/lootItems/clothing/tusken/tusken_raider_dress.py similarity index 100% rename from scripts/loot/lootItems/clothing/tusken_raider_dress.py rename to scripts/loot/lootItems/clothing/tusken/tusken_raider_dress.py diff --git a/scripts/loot/lootItems/clothing/tusken_raider_gloves.py b/scripts/loot/lootItems/clothing/tusken/tusken_raider_gloves.py similarity index 100% rename from scripts/loot/lootItems/clothing/tusken_raider_gloves.py rename to scripts/loot/lootItems/clothing/tusken/tusken_raider_gloves.py diff --git a/scripts/loot/lootItems/clothing/tusken_raider_helmet.py b/scripts/loot/lootItems/clothing/tusken/tusken_raider_helmet.py similarity index 100% rename from scripts/loot/lootItems/clothing/tusken_raider_helmet.py rename to scripts/loot/lootItems/clothing/tusken/tusken_raider_helmet.py diff --git a/scripts/loot/lootItems/junk/explosive_dud.py b/scripts/loot/lootItems/junk/explosive_dud.py index 2d0291da..1fdcf7c3 100644 --- a/scripts/loot/lootItems/junk/explosive_dud.py +++ b/scripts/loot/lootItems/junk/explosive_dud.py @@ -1,7 +1,7 @@ def itemTemplate(): - return ['object/tangible/loot/npc_loot/shared_firework_dud_s1.iff'] + return ['object/tangible/loot/npc_loot/shared_firework_generic.iff'] def customItemName(): diff --git a/scripts/loot/lootItems/randomstatjewelry/random_stat_bracelet.py b/scripts/loot/lootItems/randomstatjewelry/random_stat_bracelet.py new file mode 100644 index 00000000..6576cc22 --- /dev/null +++ b/scripts/loot/lootItems/randomstatjewelry/random_stat_bracelet.py @@ -0,0 +1,12 @@ + +def itemTemplate(): + + bracelets = ['object/tangible/wearables/bracelet/shared_bracelet_s02_l.iff','object/tangible/wearables/bracelet/shared_bracelet_s02_r.iff'] + bracelets += ['object/tangible/wearables/bracelet/shared_bracelet_s03_l.iff','object/tangible/wearables/bracelet/shared_bracelet_s03_r.iff'] + bracelets += ['object/tangible/wearables/bracelet/shared_bracelet_s04_l.iff','object/tangible/wearables/bracelet/shared_bracelet_s04_r.iff'] + bracelets += ['object/tangible/wearables/bracelet/shared_bracelet_s05_l.iff','object/tangible/wearables/bracelet/shared_bracelet_s05_r.iff'] + bracelets += ['object/tangible/wearables/bracelet/shared_bracelet_s06_l.iff','object/tangible/wearables/bracelet/shared_bracelet_s06_r.iff'] + return bracelets + +def randomStatJewelry(): + return diff --git a/scripts/loot/lootItems/randomstatjewelry/random_stat_necklace.py b/scripts/loot/lootItems/randomstatjewelry/random_stat_necklace.py new file mode 100644 index 00000000..947af23a --- /dev/null +++ b/scripts/loot/lootItems/randomstatjewelry/random_stat_necklace.py @@ -0,0 +1,13 @@ + +def itemTemplate(): + + necklaces = ['object/tangible/wearables/necklace/shared_necklace_s01.iff','object/tangible/wearables/necklace/shared_necklace_s02.iff'] + necklaces += ['object/tangible/wearables/necklace/shared_necklace_s03.iff','object/tangible/wearables/necklace/shared_necklace_s04.iff'] + necklaces += ['object/tangible/wearables/necklace/shared_necklace_s05.iff','object/tangible/wearables/necklace/shared_necklace_s06.iff'] + necklaces += ['object/tangible/wearables/necklace/shared_necklace_s07.iff','object/tangible/wearables/necklace/shared_necklace_s08.iff'] + necklaces += ['object/tangible/wearables/necklace/shared_necklace_s09.iff','object/tangible/wearables/necklace/shared_necklace_s10.iff'] + necklaces += ['object/tangible/wearables/necklace/shared_necklace_s11.iff','object/tangible/wearables/necklace/shared_necklace_s12.iff'] + return necklaces + +def randomStatJewelry(): + return 1 diff --git a/scripts/loot/lootItems/randomstatjewelry/random_stat_ring.py b/scripts/loot/lootItems/randomstatjewelry/random_stat_ring.py new file mode 100644 index 00000000..8f7d669b --- /dev/null +++ b/scripts/loot/lootItems/randomstatjewelry/random_stat_ring.py @@ -0,0 +1,9 @@ + +def itemTemplate(): + + rings = ['object/tangible/wearables/ring/shared_ring_s01.iff','object/tangible/wearables/ring/shared_ring_s02.iff'] + rings += ['object/tangible/wearables/ring/shared_ring_s03.iff','object/tangible/wearables/ring/shared_ring_s04.iff'] + return rings + +def randomStatJewelry(): + return diff --git a/scripts/loot/lootItems/randomstatjewelry/randomstatjewelry.py b/scripts/loot/lootItems/randomstatjewelry/randomstatjewelry.py new file mode 100644 index 00000000..e69de29b diff --git a/scripts/loot/lootItems/veryrareloot/rare_ankarres_sapphire.py b/scripts/loot/lootItems/veryrareloot/rare_ankarres_sapphire.py index 5559fc50..cee3f5ae 100644 --- a/scripts/loot/lootItems/veryrareloot/rare_ankarres_sapphire.py +++ b/scripts/loot/lootItems/veryrareloot/rare_ankarres_sapphire.py @@ -15,3 +15,5 @@ def requiredCL(): return 80 +def customSetup(object): + object.setCustomName2("Success!") \ No newline at end of file diff --git a/scripts/loot/lootItems/weapons/carbine/EE3_carbine.py b/scripts/loot/lootItems/weapons/carbine/EE3_carbine.py new file mode 100644 index 00000000..e69de29b diff --git a/scripts/loot/lootItems/weapons/adjusted_cdef_rifle.py b/scripts/loot/lootItems/weapons/rifle/adjusted_cdef_rifle.py similarity index 100% rename from scripts/loot/lootItems/weapons/adjusted_cdef_rifle.py rename to scripts/loot/lootItems/weapons/rifle/adjusted_cdef_rifle.py diff --git a/scripts/loot/lootItems/weapons/rifle/jawa_ion_rifle.py b/scripts/loot/lootItems/weapons/rifle/jawa_ion_rifle.py new file mode 100644 index 00000000..e69de29b diff --git a/scripts/loot/lootItems/weapons/rifle/spraystick.py b/scripts/loot/lootItems/weapons/rifle/spraystick.py new file mode 100644 index 00000000..e69de29b diff --git a/scripts/loot/lootPools/armor_various.py b/scripts/loot/lootPools/armor_various.py new file mode 100644 index 00000000..aee801b3 --- /dev/null +++ b/scripts/loot/lootPools/armor_various.py @@ -0,0 +1,23 @@ + +def itemNames(): + + components = ['bone_armor_bicep_left','bone_armor_bicep_right','bone_armor_boots','bone_armor_bracer_left','bone_armor_bracer_right','bone_armor_chestplate','bone_armor_gloves','bone_armor_helmet','bone_armor_leggings'] + components += ['chitin_armor_bicep_left','chitin_armor_bicep_right','chitin_armor_boots','chitin_armor_bracer_left','chitin_armor_bracer_right','chitin_armor_chestplate','chitin_armor_gloves','chitin_armor_helmet','chitin_armor_leggings'] + components += ['composite_armor_bicep_left','composite_armor_bicep_right','composite_armor_boots','composite_armor_bracer_left','composite_armor_bracer_right','composite_armor_chestplate','composite_armor_gloves','composite_armor_helmet','composite_armor_leggings'] + components += ['ithorian_defender_armor_bicep_left','ithorian_defender_armor_bicep_right','ithorian_defender_armor_boots','ithorian_defender_armor_bracer_left','ithorian_defender_armor_bracer_right','ithorian_defender_armor_chestplate','ithorian_defender_armor_gloves','ithorian_defender_armor_helmet','ithorian_defender_armor_leggings'] + components += ['ithorian_guardian_armor_bicep_left','ithorian_guardian_armor_bicep_right','ithorian_guardian_armor_boots','ithorian_guardian_armor_bracer_left','ithorian_guardian_armor_bracer_right','ithorian_guardian_armor_chestplate','ithorian_guardian_armor_gloves','ithorian_guardian_armor_helmet','ithorian_guardian_armor_leggings'] + components += ['ithorian_sentinel_armor_bicep_left','ithorian_sentinel_armor_bicep_right','ithorian_sentinel_armor_boots','ithorian_sentinel_armor_bracer_left','ithorian_sentinel_armor_bracer_right','ithorian_sentinel_armor_chestplate','ithorian_sentinel_armor_gloves','ithorian_sentinel_armor_helmet','ithorian_sentinel_armor_leggings'] + components += ['kashyyykian_black_mtn_armor_bicep_left','kashyyykian_black_mtn_armor_bicep_right','kashyyykian_black_mtn_armor_bracer_left','kashyyykian_black_mtn_armor_bracer_right','kashyyykian_black_mtn_armor_chestplate','kashyyykian_black_mtn_leggings'] + components += ['kashyyykian_ceremonial_bicep_left','kashyyykian_ceremonial_bicep_right','kashyyykian_ceremonial_bracer_left','kashyyykian_ceremonial_bracer_right','kashyyykian_ceremonial_chestplate','kashyyykian_ceremonial_leggings'] + components += ['kashyyykian_hunting_bicep_left','kashyyykian_hunting_bicep_right','kashyyykian_hunting_bracer_left','kashyyykian_hunting_bracer_right','kashyyykian_hunting_chestplate','kashyyykian_hunting_leggings'] + components += ['marauder_armor_bicep_left','marauder_armor_bicep_right','marauder_armor_boots','marauder_armor_bracer_left','marauder_armor_bracer_right','marauder_armor_chestplate','marauder_armor_gloves','marauder_armor_helmet','marauder_armor_leggings'] + components += ['padded_armor_bicep_left','padded_armor_bicep_right','padded_armor_boots','padded_armor_bracer_left','padded_armor_bracer_right','padded_armor_chestplate','padded_armor_gloves','padded_armor_helmet','padded_armor_leggings'] + components += ['tantel_armor_bicep_left','tantel_armor_bicep_right','tantel_armor_boots','tantel_armor_bracer_left','tantel_armor_bracer_right','tantel_armor_chestplate','tantel_armor_gloves','tantel_armor_helmet','tantel_armor_leggings'] + components += ['ubese_armor_bandolier','ubese_armor_boots','ubese_armor_bracer_left','ubese_armor_bracer_right','ubese_armor_gloves','ubese_armor_helmet','ubese_armor_jacket','ubese_armor_shirt'] + return components + +def itemChances(): + + return [-1] # all equal + + \ No newline at end of file diff --git a/scripts/loot/lootPools/chronicle_relic.py b/scripts/loot/lootPools/chronicle_relic.py new file mode 100644 index 00000000..e69de29b diff --git a/scripts/loot/lootPools/random_stat_jewelry.py b/scripts/loot/lootPools/random_stat_jewelry.py new file mode 100644 index 00000000..0e11105e --- /dev/null +++ b/scripts/loot/lootPools/random_stat_jewelry.py @@ -0,0 +1,6 @@ + +def itemNames(): + return ['random_stat_bracelet','random_stat_necklace','random_stat_ring'] + +def itemChances(): + return [50,35,15] #= 100% \ No newline at end of file diff --git a/scripts/mobiles/dantooine/dark_adept.py b/scripts/mobiles/dantooine/dark_adept.py new file mode 100644 index 00000000..fd56213d --- /dev/null +++ b/scripts/mobiles/dantooine/dark_adept.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('dark_adept') + mobileTemplate.setLevel(70) + mobileTemplate.setMinLevel(60) + mobileTemplate.setMaxLevel(70) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(6) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(9) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('dark jedi') + mobileTemplate.setAssistRange(12) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_dark_jedi_elder_male_human_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/sword/crafted_saber/shared_sword_lightsaber_one_handed_gen5.iff', 9, 1.0) + weaponTemplates.add(weapontemplate) + weapontemplate = WeaponTemplate('object/weapon/melee/2h_sword/crafted_saber/shared_sword_lightsaber_two_handed_gen5.iff', 10, 1.0) + weaponTemplates.add(weapontemplate) + weapontemplate = WeaponTemplate('object/weapon/melee/polearm/crafted_saber/shared_sword_lightsaber_polearm_gen5.iff', 11, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('saberHit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('dark_adept', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/dantooine/dark_force_crystal_hunter.py b/scripts/mobiles/dantooine/dark_force_crystal_hunter.py new file mode 100644 index 00000000..09b3c0f3 --- /dev/null +++ b/scripts/mobiles/dantooine/dark_force_crystal_hunter.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('dark_force_crystal_hunter') + mobileTemplate.setLevel(90) + mobileTemplate.setMinLevel(60) + mobileTemplate.setMaxLevel(69) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(6) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(4) + mobileTemplate.setMinSpawnDistance(2) + mobileTemplate.setMaxSpawnDistance(4) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('remnants of kun') + mobileTemplate.setAssistRange(12) + + templates = Vector() + templates.add('object/mobile/shared_dressed_dark_force_crystal_hunter.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/sword/shared_sword_01.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('dark_force_crystal_hunter', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/dantooine/dark_jedi_knight.py b/scripts/mobiles/dantooine/dark_jedi_knight.py new file mode 100644 index 00000000..bcd26a26 --- /dev/null +++ b/scripts/mobiles/dantooine/dark_jedi_knight.py @@ -0,0 +1,64 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('dark_jedi_knight') + mobileTemplate.setLevel(90) + mobileTemplate.setMinLevel(62) + mobileTemplate.setMaxLevel(70) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(6) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(9) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('dark jedi') + mobileTemplate.setAssistRange(12) + + templates = Vector() + templates.add('object/mobile/shared_dressed_dark_jedi_male_human_01.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_male_human_02.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_male_human_03.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_male_human_04.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_male_human_05.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_male_human_06.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_male_twk_01.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_male_twk_02.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_male_twk_03.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_male_zab_01.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_male_zab_02.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_male_zab_03.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_female_human_01.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_female_human_02.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_female_human_03.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_female_human_04.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_female_twk_01.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_female_twk_02.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_female_twk_03.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_female_zab_01.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_female_zab_02.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_female_zab_03.iff') + + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/sword/crafted_saber/shared_sword_lightsaber_one_handed_gen5.iff', 9, 1.0) + weaponTemplates.add(weapontemplate) + weapontemplate = WeaponTemplate('object/weapon/melee/2h_sword/crafted_saber/shared_sword_lightsaber_two_handed_gen5.iff', 10, 1.0) + weaponTemplates.add(weapontemplate) + weapontemplate = WeaponTemplate('object/weapon/melee/polearm/crafted_saber/shared_sword_lightsaber_polearm_gen5.iff', 11, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('saberHit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('dark_jedi_knight', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/dantooine/dark_jedi_master.py b/scripts/mobiles/dantooine/dark_jedi_master.py new file mode 100644 index 00000000..6d6566ae --- /dev/null +++ b/scripts/mobiles/dantooine/dark_jedi_master.py @@ -0,0 +1,46 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('dark_jedi_master') + mobileTemplate.setLevel(90) + mobileTemplate.setDifficulty(2) + mobileTemplate.setAttackRange(6) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(9) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('dark jedi') + mobileTemplate.setAssistRange(12) + + templates = Vector() + templates.add('object/mobile/shared_dressed_dark_jedi_master_female_twk_01.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_master_female_twk_02.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_master_female_zab_01.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_master_female_zab_02.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_master_male_human_01.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_master_male_human_04.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_master_male_human_05.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_master_male_human_06.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/sword/crafted_saber/shared_sword_lightsaber_one_handed_gen5.iff', 9, 1.0) + weaponTemplates.add(weapontemplate) + weapontemplate = WeaponTemplate('object/weapon/melee/2h_sword/crafted_saber/shared_sword_lightsaber_two_handed_gen5.iff', 10, 1.0) + weaponTemplates.add(weapontemplate) + weapontemplate = WeaponTemplate('object/weapon/melee/polearm/crafted_saber/shared_sword_lightsaber_polearm_gen5.iff', 11, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('saberHit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('dark_jedi_master', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/dantooine/dark_side_savage.py b/scripts/mobiles/dantooine/dark_side_savage.py new file mode 100644 index 00000000..9f8138f1 --- /dev/null +++ b/scripts/mobiles/dantooine/dark_side_savage.py @@ -0,0 +1,34 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('eow_dark_side_savage') + mobileTemplate.setLevel(85) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(6) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(2) + mobileTemplate.setMaxSpawnDistance(4) + mobileTemplate.setDeathblow(False) + mobileTemplate.setSocialGroup('remnants of kun') + + templates = Vector() + templates.add('object/mobile/shared_dressed_dark_side_savage.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('dark_side_savage', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/dantooine/force_sensitive_crypt_crawler.py b/scripts/mobiles/dantooine/force_sensitive_crypt_crawler.py new file mode 100644 index 00000000..bbbf90f5 --- /dev/null +++ b/scripts/mobiles/dantooine/force_sensitive_crypt_crawler.py @@ -0,0 +1,36 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('eow_force_sensitive_crypt_crawler') + mobileTemplate.setLevel(90) + mobileTemplate.setMinLevel(60) + mobileTemplate.setMaxLevel(70) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(6) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(7) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(False) + mobileTemplate.setSocialGroup('remnants of kun') + + templates = Vector() + templates.add('object/mobile/shared_dressed_force_sensitive_crypt_crawler.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/polearm/shared_lance_staff_wood_s1.iff', 7, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('force_sensitive_crypt_crawler', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/dantooine/force_sensitive_renegade.py b/scripts/mobiles/dantooine/force_sensitive_renegade.py new file mode 100644 index 00000000..1efb1591 --- /dev/null +++ b/scripts/mobiles/dantooine/force_sensitive_renegade.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('force_sensitive_renegade') + mobileTemplate.setLevel(90) + mobileTemplate.setMinLevel(61) + mobileTemplate.setMaxLevel(69) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(6) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(7) + mobileTemplate.setDeathblow(False) + mobileTemplate.setSocialGroup('force renegade') + + + templates = Vector() + templates.add('object/mobile/shared_dressed_force_sensitive_renegade.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('force_sensitive_renegade', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/dantooine/forsaken_force_drifter.py b/scripts/mobiles/dantooine/forsaken_force_drifter.py new file mode 100644 index 00000000..3cb43224 --- /dev/null +++ b/scripts/mobiles/dantooine/forsaken_force_drifter.py @@ -0,0 +1,34 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('eow_forsaken_force_drifter') + mobileTemplate.setLevel(74) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(6) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(6) + mobileTemplate.setDeathblow(False) + mobileTemplate.setSocialGroup('force renegade') + + templates = Vector() + templates.add('object/mobile/shared_dressed_forsaken_force_drifter.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('forsaken_force_drifter', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/dantooine/novice_force_mystic.py b/scripts/mobiles/dantooine/novice_force_mystic.py new file mode 100644 index 00000000..b034a3ae --- /dev/null +++ b/scripts/mobiles/dantooine/novice_force_mystic.py @@ -0,0 +1,34 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('novice_force_mystic') + mobileTemplate.setLevel(63) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(6) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(4) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(7) + mobileTemplate.setDeathblow(False) + mobileTemplate.setSocialGroup('force renegade') + + templates = Vector() + templates.add('object/mobile/shared_dressed_novice_force_mystic.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/sword/shared_sword_01.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('novice_force_mystic', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/dantooine/untrained_wielder_of_the_dark_side.py b/scripts/mobiles/dantooine/untrained_wielder_of_the_dark_side.py new file mode 100644 index 00000000..dacb0620 --- /dev/null +++ b/scripts/mobiles/dantooine/untrained_wielder_of_the_dark_side.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('untrained_wielder_of_the_dark_side') + mobileTemplate.setLevel(90) + mobileTemplate.setMinLevel(61) + mobileTemplate.setMaxLevel(70) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(6) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(4) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(6) + mobileTemplate.setDeathblow(False) + mobileTemplate.setSocialGroup('remnants of kun') + mobileTemplate.setAssistRange(12) + + templates = Vector() + templates.add('object/mobile/shared_dressed_untrained_wielder_of_the_darkside.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/sword/shared_sword_01.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('untrained_wielder_of_the_dark_side', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/dynamicgroups/adolescent_krayt_wild_1.py b/scripts/mobiles/dynamicgroups/adolescent_krayt_wild_1.py new file mode 100644 index 00000000..f542e938 --- /dev/null +++ b/scripts/mobiles/dynamicgroups/adolescent_krayt_wild_1.py @@ -0,0 +1,16 @@ +import sys +from services.spawn import DynamicSpawnGroup +from services.spawn import MobileTemplate +from java.util import Vector + +def addDynamicGroup(core): + dynamicGroup = DynamicSpawnGroup() + mobileTemplates = Vector() + mobileTemplates.add('adolescent_krayt_dragon') + dynamicGroup.setMobiles(mobileTemplates) + dynamicGroup.setGroupMembersNumber(1) + dynamicGroup.setName('adolescent_krayt_wild_1') + dynamicGroup.setMaxSpawns(1) + dynamicGroup.setMinSpawnDistance(150) + core.spawnService.addDynamicGroup('adolescent_krayt_wild_1', dynamicGroup) + return \ No newline at end of file diff --git a/scripts/mobiles/dynamicgroups/canyon_krayt_wild_1.py b/scripts/mobiles/dynamicgroups/canyon_krayt_wild_1.py new file mode 100644 index 00000000..27b392b6 --- /dev/null +++ b/scripts/mobiles/dynamicgroups/canyon_krayt_wild_1.py @@ -0,0 +1,16 @@ +import sys +from services.spawn import DynamicSpawnGroup +from services.spawn import MobileTemplate +from java.util import Vector + +def addDynamicGroup(core): + dynamicGroup = DynamicSpawnGroup() + mobileTemplates = Vector() + mobileTemplates.add('canyon_krayt_dragon') + dynamicGroup.setMobiles(mobileTemplates) + dynamicGroup.setGroupMembersNumber(1) + dynamicGroup.setName('canyon_krayt_wild_1') + dynamicGroup.setMaxSpawns(1) + dynamicGroup.setMinSpawnDistance(150) + core.spawnService.addDynamicGroup('canyon_krayt_wild_1', dynamicGroup) + return \ No newline at end of file diff --git a/scripts/mobiles/dynamicgroups/dark_jedi_wild_1.py b/scripts/mobiles/dynamicgroups/dark_jedi_wild_1.py new file mode 100644 index 00000000..3bf8c043 --- /dev/null +++ b/scripts/mobiles/dynamicgroups/dark_jedi_wild_1.py @@ -0,0 +1,18 @@ +import sys +from services.spawn import DynamicSpawnGroup +from services.spawn import MobileTemplate +from java.util import Vector + +def addDynamicGroup(core): + dynamicGroup = DynamicSpawnGroup() + mobileTemplates = Vector() + mobileTemplates.add('dark_jedi_master') + mobileTemplates.add('dark_jedi_knight') + mobileTemplates.add('dark_adept') + dynamicGroup.setMobiles(mobileTemplates) + dynamicGroup.setGroupMembersNumber(3) + dynamicGroup.setName('dark_jedi_wild_1') + dynamicGroup.setMaxSpawns(-1) + dynamicGroup.setMinSpawnDistance(150) + core.spawnService.addDynamicGroup('dark_jedi_wild_1', dynamicGroup) + return \ No newline at end of file diff --git a/scripts/mobiles/dynamicgroups/force_sensitives_wild_1.py b/scripts/mobiles/dynamicgroups/force_sensitives_wild_1.py new file mode 100644 index 00000000..9ee91b60 --- /dev/null +++ b/scripts/mobiles/dynamicgroups/force_sensitives_wild_1.py @@ -0,0 +1,20 @@ +import sys +from services.spawn import DynamicSpawnGroup +from services.spawn import MobileTemplate +from java.util import Vector + +def addDynamicGroup(core): + dynamicGroup = DynamicSpawnGroup() + mobileTemplates = Vector() + mobileTemplates.add('force_sensitive_crypt_crawler') + mobileTemplates.add('force_sensitive_renegade') + mobileTemplates.add('forsaken_force_drifter') + mobileTemplates.add('novice_force_mystic') + mobileTemplates.add('untrained_wielder_of_the_dark_side') + dynamicGroup.setMobiles(mobileTemplates) + dynamicGroup.setGroupMembersNumber(-3) + dynamicGroup.setName('force_sensitives_wild_1') + dynamicGroup.setMaxSpawns(-1) + dynamicGroup.setMinSpawnDistance(150) + core.spawnService.addDynamicGroup('force_sensitives_wild_1', dynamicGroup) + return \ No newline at end of file diff --git a/scripts/mobiles/dynamicgroups/giant_canyon_krayt_wild_1.py b/scripts/mobiles/dynamicgroups/giant_canyon_krayt_wild_1.py new file mode 100644 index 00000000..90595b2f --- /dev/null +++ b/scripts/mobiles/dynamicgroups/giant_canyon_krayt_wild_1.py @@ -0,0 +1,16 @@ +import sys +from services.spawn import DynamicSpawnGroup +from services.spawn import MobileTemplate +from java.util import Vector + +def addDynamicGroup(core): + dynamicGroup = DynamicSpawnGroup() + mobileTemplates = Vector() + mobileTemplates.add('giant_canyon_krayt_dragon') + dynamicGroup.setMobiles(mobileTemplates) + dynamicGroup.setGroupMembersNumber(1) + dynamicGroup.setName('giant_canyon_krayt_dragon_1') + dynamicGroup.setMaxSpawns(1) + dynamicGroup.setMinSpawnDistance(60) + core.spawnService.addDynamicGroup('giant_canyon_krayt_dragon_1', dynamicGroup) + return \ No newline at end of file diff --git a/scripts/mobiles/dynamicgroups/grand_canyon_krayt_wild_1.py b/scripts/mobiles/dynamicgroups/grand_canyon_krayt_wild_1.py new file mode 100644 index 00000000..f8f13fe8 --- /dev/null +++ b/scripts/mobiles/dynamicgroups/grand_canyon_krayt_wild_1.py @@ -0,0 +1,16 @@ +import sys +from services.spawn import DynamicSpawnGroup +from services.spawn import MobileTemplate +from java.util import Vector + +def addDynamicGroup(core): + dynamicGroup = DynamicSpawnGroup() + mobileTemplates = Vector() + mobileTemplates.add('grand_canyon_krayt_dragon') + dynamicGroup.setMobiles(mobileTemplates) + dynamicGroup.setGroupMembersNumber(1) + dynamicGroup.setName('grand_canyon_krayt_dragon_1') + dynamicGroup.setMaxSpawns(1) + dynamicGroup.setMinSpawnDistance(60) + core.spawnService.addDynamicGroup('grand_canyon_krayt_dragon_1', dynamicGroup) + return \ No newline at end of file diff --git a/scripts/mobiles/dynamicgroups/juvenile_krayts_wild_1.py b/scripts/mobiles/dynamicgroups/juvenile_krayts_wild_1.py new file mode 100644 index 00000000..a65c74cc --- /dev/null +++ b/scripts/mobiles/dynamicgroups/juvenile_krayts_wild_1.py @@ -0,0 +1,16 @@ +import sys +from services.spawn import DynamicSpawnGroup +from services.spawn import MobileTemplate +from java.util import Vector + +def addDynamicGroup(core): + dynamicGroup = DynamicSpawnGroup() + mobileTemplates = Vector() + mobileTemplates.add('juvenile_canyon_krayt_dragon') + dynamicGroup.setMobiles(mobileTemplates) + dynamicGroup.setGroupMembersNumber(6) + dynamicGroup.setName('juvenile_krayts_wild_1') + dynamicGroup.setMaxSpawns(1) + dynamicGroup.setMinSpawnDistance(150) + core.spawnService.addDynamicGroup('juvenile_krayts_wild_1', dynamicGroup) + return \ No newline at end of file diff --git a/scripts/mobiles/dynamicgroups/krayt_dragon_ancient_wild_1.py b/scripts/mobiles/dynamicgroups/krayt_dragon_ancient_wild_1.py new file mode 100644 index 00000000..ec8ea7a8 --- /dev/null +++ b/scripts/mobiles/dynamicgroups/krayt_dragon_ancient_wild_1.py @@ -0,0 +1,16 @@ +import sys +from services.spawn import DynamicSpawnGroup +from services.spawn import MobileTemplate +from java.util import Vector + +def addDynamicGroup(core): + dynamicGroup = DynamicSpawnGroup() + mobileTemplates = Vector() + mobileTemplates.add('krayt_dragon_ancient') + dynamicGroup.setMobiles(mobileTemplates) + dynamicGroup.setGroupMembersNumber(1) + dynamicGroup.setName('krayt_dragon_ancient_1') + dynamicGroup.setMaxSpawns(1) + dynamicGroup.setMinSpawnDistance(5) + core.spawnService.addDynamicGroup('krayt_dragon_ancient_1', dynamicGroup) + return \ No newline at end of file diff --git a/scripts/mobiles/dynamicgroups/tuskens_wild_1.py b/scripts/mobiles/dynamicgroups/tuskens_wild_1.py new file mode 100644 index 00000000..472747c0 --- /dev/null +++ b/scripts/mobiles/dynamicgroups/tuskens_wild_1.py @@ -0,0 +1,15 @@ +import sys +from services.spawn import DynamicSpawnGroup +from services.spawn import MobileTemplate +from java.util import Vector + +def addDynamicGroup(core): + dynamicGroup = DynamicSpawnGroup() + mobileTemplates = Vector() + mobileTemplates.add('tusken_raider') + dynamicGroup.setMobiles(mobileTemplates) + dynamicGroup.setName('tuskens_wild_1') + dynamicGroup.setMaxSpawns(20) + dynamicGroup.setMinSpawnDistance(25) + core.spawnService.addDynamicGroup('tuskens_wild_1', dynamicGroup) + return \ No newline at end of file diff --git a/scripts/mobiles/rori/emperors_hand.py b/scripts/mobiles/rori/emperors_hand.py new file mode 100644 index 00000000..a1eaa04d --- /dev/null +++ b/scripts/mobiles/rori/emperors_hand.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('restuss_emperors_hand') + mobileTemplate.setLevel(90) + mobileTemplate.setDifficulty(2) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(9) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1.3) + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_restuss_emperors_hand.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/sword/crafted_saber/shared_sword_lightsaber_mandalorian.iff', 9, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('saberHit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('emperors_hand', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/spawnareas/force_sensitives_dynamic_1.py b/scripts/mobiles/spawnareas/force_sensitives_dynamic_1.py new file mode 100644 index 00000000..6c7638ea --- /dev/null +++ b/scripts/mobiles/spawnareas/force_sensitives_dynamic_1.py @@ -0,0 +1,9 @@ +import sys +from java.util import Vector + +def addSpawnArea(core): + dynamicGroups = Vector() + dynamicGroups.add('force_sensitives_wild_1') + dynamicGroups.add('dark_jedi_wild_1') + core.spawnService.addDynamicSpawnArea(dynamicGroups, 4083, 5780, 2048, 'dantooine') + return \ No newline at end of file diff --git a/scripts/mobiles/spawnareas/krayt_graveyard_dynamic_1.py b/scripts/mobiles/spawnareas/krayt_graveyard_dynamic_1.py new file mode 100644 index 00000000..7a998fa8 --- /dev/null +++ b/scripts/mobiles/spawnareas/krayt_graveyard_dynamic_1.py @@ -0,0 +1,11 @@ +import sys +from java.util import Vector + +def addSpawnArea(core): + dynamicGroups = Vector() + dynamicGroups.add('adolescent_krayt_wild_1') + dynamicGroups.add('juvenile_krayts_wild_1') + dynamicGroups.add('canyon_krayt_wild_1') + dynamicGroups.add('giant_canyon_krayt_dragon_1') + core.spawnService.addDynamicSpawnArea(dynamicGroups, 6471, 4267, 1024, 'tatooine') + return \ No newline at end of file diff --git a/scripts/mobiles/spawnareas/krayt_graveyard_dynamic_2.py b/scripts/mobiles/spawnareas/krayt_graveyard_dynamic_2.py new file mode 100644 index 00000000..e97d5637 --- /dev/null +++ b/scripts/mobiles/spawnareas/krayt_graveyard_dynamic_2.py @@ -0,0 +1,8 @@ +import sys +from java.util import Vector + +def addSpawnArea(core): + dynamicGroups = Vector() + dynamicGroups.add('grand_canyon_krayt_dragon_1') + core.spawnService.addDynamicSpawnArea(dynamicGroups, 7431, 4762, 120, 'tatooine') + return \ No newline at end of file diff --git a/scripts/mobiles/spawnareas/krayt_graveyard_dynamic_3.py b/scripts/mobiles/spawnareas/krayt_graveyard_dynamic_3.py new file mode 100644 index 00000000..0d863838 --- /dev/null +++ b/scripts/mobiles/spawnareas/krayt_graveyard_dynamic_3.py @@ -0,0 +1,8 @@ +import sys +from java.util import Vector + +def addSpawnArea(core): + dynamicGroups = Vector() + dynamicGroups.add('krayt_dragon_ancient_1') + core.spawnService.addDynamicSpawnArea(dynamicGroups, 7490, 4466, 10, 'tatooine') + return \ No newline at end of file diff --git a/scripts/mobiles/spawnareas/krayt_graveyard_dynamic_4.py b/scripts/mobiles/spawnareas/krayt_graveyard_dynamic_4.py new file mode 100644 index 00000000..275f8a8c --- /dev/null +++ b/scripts/mobiles/spawnareas/krayt_graveyard_dynamic_4.py @@ -0,0 +1,8 @@ +import sys +from java.util import Vector + +def addSpawnArea(core): + dynamicGroups = Vector() + dynamicGroups.add('krayt_dragon_ancient_1') + core.spawnService.addDynamicSpawnArea(dynamicGroups, 6794, 4307, 10, 'tatooine') + return \ No newline at end of file diff --git a/scripts/mobiles/spawnareas/krayt_graveyard_dynamic_5.py b/scripts/mobiles/spawnareas/krayt_graveyard_dynamic_5.py new file mode 100644 index 00000000..90c70591 --- /dev/null +++ b/scripts/mobiles/spawnareas/krayt_graveyard_dynamic_5.py @@ -0,0 +1,8 @@ +import sys +from java.util import Vector + +def addSpawnArea(core): + dynamicGroups = Vector() + dynamicGroups.add('krayt_dragon_ancient_1') + core.spawnService.addDynamicSpawnArea(dynamicGroups, 7493, 5992, 10, 'tatooine') + return \ No newline at end of file diff --git a/scripts/mobiles/spawnareas/tuskens_dynamic_1.py b/scripts/mobiles/spawnareas/tuskens_dynamic_1.py new file mode 100644 index 00000000..eefb2d5e --- /dev/null +++ b/scripts/mobiles/spawnareas/tuskens_dynamic_1.py @@ -0,0 +1,5 @@ +import sys + +def addSpawnArea(core): + #core.spawnService.addDynamicSpawnArea('tuskens_wild_1', 4310, -4786, 250, 'tatooine') + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/adolescent_krayt_dragon.py b/scripts/mobiles/tatooine/adolescent_krayt_dragon.py new file mode 100644 index 00000000..a2e064f2 --- /dev/null +++ b/scripts/mobiles/tatooine/adolescent_krayt_dragon.py @@ -0,0 +1,46 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('krayt_dragon_adolescent') + mobileTemplate.setLevel(84) + mobileTemplate.setMinLevel(80) + mobileTemplate.setMaxLevel(84) + mobileTemplate.setDifficulty(2) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(0.5) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(1700) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setHideAmount(950) + mobileTemplate.setBoneType("Animal Bones") + mobileTemplate.setBoneAmount(905) + mobileTemplate.setSocialGroup("krayt dragon") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_krayt_dragon.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('adolescent_krayt_dragon', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/alkhara_bandit.py b/scripts/mobiles/tatooine/alkhara_bandit.py new file mode 100644 index 00000000..7223a83f --- /dev/null +++ b/scripts/mobiles/tatooine/alkhara_bandit.py @@ -0,0 +1,40 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('alkhara_bandit') + mobileTemplate.setLevel(15) + mobileTemplate.setMinLevel(14) + mobileTemplate.setMaxLevel(16) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("alkhara") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_alkhara_bandit.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_cdef.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('alkhara_bandit', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/alkhara_bandit_king.py b/scripts/mobiles/tatooine/alkhara_bandit_king.py new file mode 100644 index 00000000..0aee87b6 --- /dev/null +++ b/scripts/mobiles/tatooine/alkhara_bandit_king.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('alkhara_bandit_king') + mobileTemplate.setLevel(17) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("alkhara") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_alkhara_king.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_cdef.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('alkhara_bandit_king', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/alkhara_champion.py b/scripts/mobiles/tatooine/alkhara_champion.py new file mode 100644 index 00000000..8f6924f3 --- /dev/null +++ b/scripts/mobiles/tatooine/alkhara_champion.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('alkhara_champion') + mobileTemplate.setLevel(21) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("alkhara") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_alkhara_champion.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('alkhara_bandit_champion', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/alkhara_lieutenant.py b/scripts/mobiles/tatooine/alkhara_lieutenant.py new file mode 100644 index 00000000..3bc4bbfc --- /dev/null +++ b/scripts/mobiles/tatooine/alkhara_lieutenant.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('alkhara_lieutenant') + mobileTemplate.setLevel(20) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("alkhara") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_alkhara_lieutenant.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_cdef.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('alkhara_lieutenant', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/armodragon.py b/scripts/mobiles/tatooine/armodragon.py new file mode 100644 index 00000000..c571d5ee --- /dev/null +++ b/scripts/mobiles/tatooine/armodragon.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('dragonet_armodragon') + mobileTemplate.setLevel(25) + mobileTemplate.setMinLevel(25) + mobileTemplate.setMaxLevel(27) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(125) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setHideAmount(68) + mobileTemplate.setBoneType("Animal Bones") + mobileTemplate.setBoneAmount(75) + mobileTemplate.setSocialGroup("dragonet") + mobileTemplate.setAssistRange(24) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_dragonet.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureRangedAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('armodragon', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/arrworr.py b/scripts/mobiles/tatooine/arrworr.py new file mode 100644 index 00000000..325f6e1a --- /dev/null +++ b/scripts/mobiles/tatooine/arrworr.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('c_syren_3_arrworr') + mobileTemplate.setLevel(55) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("kashyyyk") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_c_syren_3_trandoshan_boss.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('arrworr', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/bantha.py b/scripts/mobiles/tatooine/bantha.py index 4d5ee1e7..aa1699eb 100644 --- a/scripts/mobiles/tatooine/bantha.py +++ b/scripts/mobiles/tatooine/bantha.py @@ -1,15 +1,45 @@ import sys from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate from java.util import Vector def addTemplate(core): mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('bantha') + mobileTemplate.setLevel(14) + mobileTemplate.setMinLevel(14) + mobileTemplate.setMaxLevel(15) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(450) + mobileTemplate.setHideType("Wooly Hide") + mobileTemplate.setHideAmount(325) + mobileTemplate.setBoneType("Animal Bones") + mobileTemplate.setBoneAmount(250) + mobileTemplate.setSocialGroup("bantha") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + templates = Vector() templates.add('object/mobile/shared_bantha_hue.iff') - mobileTemplate.setCreatureName('bantha') mobileTemplate.setTemplates(templates) - mobileTemplate.setLevel(14) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + attacks = Vector() mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) - core.spawnService.addMobileTemplate('bantha', mobileTemplate) \ No newline at end of file + + core.spawnService.addMobileTemplate('bantha', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/bantha_low.py b/scripts/mobiles/tatooine/bantha_low.py new file mode 100644 index 00000000..18c3f7cb --- /dev/null +++ b/scripts/mobiles/tatooine/bantha_low.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('bantha') + mobileTemplate.setLevel(8) + mobileTemplate.setMinLevel(8) + mobileTemplate.setMaxLevel(10) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(450) + mobileTemplate.setHideType("Wooly Hide") + mobileTemplate.setBoneAmount(250) + mobileTemplate.setBoneType("Animal Bones") + mobileTemplate.setHideAmount(325) + mobileTemplate.setSocialGroup("bantha") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_bantha_hue.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('bantha_low', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/bantha_matriarch.py b/scripts/mobiles/tatooine/bantha_matriarch.py new file mode 100644 index 00000000..6f480187 --- /dev/null +++ b/scripts/mobiles/tatooine/bantha_matriarch.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('matriarch_bantha') + mobileTemplate.setLevel(15) + mobileTemplate.setMinLevel(15) + mobileTemplate.setMaxLevel(17) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(485) + mobileTemplate.setHideType("Wooly Hide") + mobileTemplate.setBoneAmount(365) + mobileTemplate.setBoneType("Animal Bones") + mobileTemplate.setHideAmount(320) + mobileTemplate.setSocialGroup("bantha") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_matriarch_bantha.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('bantha_matriarch', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/bd34.py b/scripts/mobiles/tatooine/bd34.py new file mode 100644 index 00000000..b5132505 --- /dev/null +++ b/scripts/mobiles/tatooine/bd34.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('legacy_lin34_droid') + mobileTemplate.setLevel(22) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("astromech") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_battle_droid.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e5.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('bd34', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/blight_boar.py b/scripts/mobiles/tatooine/blight_boar.py new file mode 100644 index 00000000..a5bde055 --- /dev/null +++ b/scripts/mobiles/tatooine/blight_boar.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('zucca_boar_blight') + mobileTemplate.setLevel(9) + mobileTemplate.setMinLevel(9) + mobileTemplate.setMaxLevel(10) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(65) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(40) + mobileTemplate.setBoneType("Animal Bones") + mobileTemplate.setBoneAmount(25) + mobileTemplate.setSocialGroup("bantha") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_zucca_boar.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('blight_boar', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/bocatt.py b/scripts/mobiles/tatooine/bocatt.py new file mode 100644 index 00000000..4c08e53c --- /dev/null +++ b/scripts/mobiles/tatooine/bocatt.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('bocatt') + mobileTemplate.setLevel(17) + mobileTemplate.setMinLevel(17) + mobileTemplate.setMaxLevel(18) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Reptilian Meat") + mobileTemplate.setMeatAmount(100) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(60) + mobileTemplate.setBoneType("Animal Bones") + mobileTemplate.setHideAmount(35) + mobileTemplate.setSocialGroup("bocatt") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_bocatt.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/creature/shared_creature_spit_small_toxicgreen.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureRangedAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('bocatt', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/bomarr_monk.py b/scripts/mobiles/tatooine/bomarr_monk.py new file mode 100644 index 00000000..2777e69b --- /dev/null +++ b/scripts/mobiles/tatooine/bomarr_monk.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('bomarr_monk') + mobileTemplate.setLevel(1) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("spiderdroid") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_bomarr_spider_monk_droid.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('bomarr_monk', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/bomarr_monk_abbot.py b/scripts/mobiles/tatooine/bomarr_monk_abbot.py new file mode 100644 index 00000000..017cce98 --- /dev/null +++ b/scripts/mobiles/tatooine/bomarr_monk_abbot.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('bomarr_monk_abbot') + mobileTemplate.setLevel(2) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("spiderdroid") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_bomarr_spider_monk_droid.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('bomarr_monk_abbot', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/bomarr_monk_bodyguard.py b/scripts/mobiles/tatooine/bomarr_monk_bodyguard.py new file mode 100644 index 00000000..290961fc --- /dev/null +++ b/scripts/mobiles/tatooine/bomarr_monk_bodyguard.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('bomarr_monk_bodyguard') + mobileTemplate.setLevel(2) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("spiderdroid") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_bomarr_spider_monk_droid.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('bomarr_monk_bodyguard', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/bomarr_monk_healer.py b/scripts/mobiles/tatooine/bomarr_monk_healer.py new file mode 100644 index 00000000..5ff6ef95 --- /dev/null +++ b/scripts/mobiles/tatooine/bomarr_monk_healer.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('bomarr_monk_healer') + mobileTemplate.setLevel(1) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("spiderdroid") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_bomarr_spider_monk_droid.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('bomarr_monk_healer', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/bomarr_monk_initiate.py b/scripts/mobiles/tatooine/bomarr_monk_initiate.py new file mode 100644 index 00000000..dd53113c --- /dev/null +++ b/scripts/mobiles/tatooine/bomarr_monk_initiate.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('bomarr_monk_initiate') + mobileTemplate.setLevel(1) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("spiderdroid") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_bomarr_spider_monk_droid.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('bomarr_monk_initiate', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/bonecracker_bantha.py b/scripts/mobiles/tatooine/bonecracker_bantha.py new file mode 100644 index 00000000..88361e49 --- /dev/null +++ b/scripts/mobiles/tatooine/bonecracker_bantha.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('bantha_bonecracker') + mobileTemplate.setLevel(21) + mobileTemplate.setMinLevel(21) + mobileTemplate.setMaxLevel(22) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(475) + mobileTemplate.setHideType("Wooly Hide") + mobileTemplate.setBoneAmount(345) + mobileTemplate.setBoneType("Animal Bones") + mobileTemplate.setHideAmount(300) + mobileTemplate.setSocialGroup("bantha") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_bantha_hue.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('bonecracker_bantha', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/bull_bantha.py b/scripts/mobiles/tatooine/bull_bantha.py new file mode 100644 index 00000000..5001ca79 --- /dev/null +++ b/scripts/mobiles/tatooine/bull_bantha.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('bull_bantha') + mobileTemplate.setLevel(15) + mobileTemplate.setMinLevel(15) + mobileTemplate.setMaxLevel(17) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(475) + mobileTemplate.setHideType("Wooly Hide") + mobileTemplate.setBoneAmount(345) + mobileTemplate.setBoneType("Animal Bones") + mobileTemplate.setHideAmount(300) + mobileTemplate.setSocialGroup("bantha") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_bantha_hue.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('bull_bantha', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/bull_ronto.py b/scripts/mobiles/tatooine/bull_ronto.py new file mode 100644 index 00000000..ce7b4fb6 --- /dev/null +++ b/scripts/mobiles/tatooine/bull_ronto.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('ronto_male') + mobileTemplate.setLevel(18) + mobileTemplate.setMinLevel(18) + mobileTemplate.setMaxLevel(19) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(465) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(320) + mobileTemplate.setBoneType("Animal Bones") + mobileTemplate.setHideAmount(200) + mobileTemplate.setSocialGroup("ronto") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_ronto.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('bullronto', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/cannibal.py b/scripts/mobiles/tatooine/cannibal.py new file mode 100644 index 00000000..e92a226d --- /dev/null +++ b/scripts/mobiles/tatooine/cannibal.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('cannibal') + mobileTemplate.setLevel(4) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("kashyyyk") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_cannibal.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('cannibal', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/cannibal_dewback.py b/scripts/mobiles/tatooine/cannibal_dewback.py new file mode 100644 index 00000000..4bc2e1e8 --- /dev/null +++ b/scripts/mobiles/tatooine/cannibal_dewback.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('dewback_cannibal') + mobileTemplate.setLevel(13) + mobileTemplate.setMinLevel(13) + mobileTemplate.setMaxLevel(14) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Reptilian Meat") + mobileTemplate.setMeatAmount(340) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(260) + mobileTemplate.setBoneType("Animal Bones") + mobileTemplate.setHideAmount(185) + mobileTemplate.setSocialGroup("dewback cannibal") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_dewback.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('cannibal_dewback', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/canyon_krayt_dragon.py b/scripts/mobiles/tatooine/canyon_krayt_dragon.py new file mode 100644 index 00000000..e0a570bc --- /dev/null +++ b/scripts/mobiles/tatooine/canyon_krayt_dragon.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('canyon_krayt_dragon') + mobileTemplate.setLevel(85) + mobileTemplate.setMinLevel(80) + mobileTemplate.setMaxLevel(86) + mobileTemplate.setDifficulty(2) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(0.8) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(1250) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setBoneAmount(750) + mobileTemplate.setBoneType("Animal Bones") + mobileTemplate.setHideAmount(675) + mobileTemplate.setSocialGroup("krayt dragon") + mobileTemplate.setAssistRange(36) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_canyon_krayt_dragon.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('canyon_krayt_dragon', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/carion_kreetle.py b/scripts/mobiles/tatooine/carion_kreetle.py new file mode 100644 index 00000000..7f066d5a --- /dev/null +++ b/scripts/mobiles/tatooine/carion_kreetle.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('fragile_kreetle') + mobileTemplate.setLevel(2) + mobileTemplate.setMinLevel(2) + mobileTemplate.setMaxLevel(7) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(1) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(2) + mobileTemplate.setSocialGroup("kreetle") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_kreetle.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('carrion_kreetle', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/cave_beetle.py b/scripts/mobiles/tatooine/cave_beetle.py new file mode 100644 index 00000000..19718882 --- /dev/null +++ b/scripts/mobiles/tatooine/cave_beetle.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('cave_beetle') + mobileTemplate.setLevel(20) + mobileTemplate.setMinLevel(20) + mobileTemplate.setMaxLevel(21) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(6) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(8) + mobileTemplate.setSocialGroup("rock beetle") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_rock_beetle.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/creature/shared_creature_spit_small_toxicgreen.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureRangedAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('cave_beetle', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/cave_beetle2.py b/scripts/mobiles/tatooine/cave_beetle2.py new file mode 100644 index 00000000..3c8a5ea3 --- /dev/null +++ b/scripts/mobiles/tatooine/cave_beetle2.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('cave_beetle') + mobileTemplate.setLevel(20) + mobileTemplate.setMinLevel(20) + mobileTemplate.setMaxLevel(22) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.2) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(8) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(10) + mobileTemplate.setSocialGroup("rock beetle") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_rock_beetle.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/creature/shared_creature_spit_small_toxicgreen.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureRangedAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('cave_beetle', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/city_rockmite.py b/scripts/mobiles/tatooine/city_rockmite.py new file mode 100644 index 00000000..b0164043 --- /dev/null +++ b/scripts/mobiles/tatooine/city_rockmite.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('city_rockmite') + mobileTemplate.setLevel(5) + mobileTemplate.setMinLevel(5) + mobileTemplate.setMaxLevel(7) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(3) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(4) + mobileTemplate.setSocialGroup("rockmite") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_rock_mite.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('city_rockmite', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/city_sewer_swamprat.py b/scripts/mobiles/tatooine/city_sewer_swamprat.py new file mode 100644 index 00000000..7e6b22ce --- /dev/null +++ b/scripts/mobiles/tatooine/city_sewer_swamprat.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('city_sewer_swamprat') + mobileTemplate.setLevel(3) + mobileTemplate.setMinLevel(3) + mobileTemplate.setMaxLevel(5) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Wild Meat") + mobileTemplate.setMeatAmount(2) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(2) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(1) + mobileTemplate.setSocialGroup("womprat") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_womp_rat.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('city_sewer_swamprat', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/crimelord.py b/scripts/mobiles/tatooine/crimelord.py new file mode 100644 index 00000000..22dae41d --- /dev/null +++ b/scripts/mobiles/tatooine/crimelord.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crimelord') + mobileTemplate.setLevel(11) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("hutt") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_crimelord.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('crimelord', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/crimelord_1.py b/scripts/mobiles/tatooine/crimelord_1.py new file mode 100644 index 00000000..20042ec7 --- /dev/null +++ b/scripts/mobiles/tatooine/crimelord_1.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crimelord') + mobileTemplate.setLevel(15) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("hutt") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_crimelord.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('crimelord_1', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/cupa.py b/scripts/mobiles/tatooine/cupa.py new file mode 100644 index 00000000..ac4aa47e --- /dev/null +++ b/scripts/mobiles/tatooine/cupa.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('cu_pa') + mobileTemplate.setLevel(10) + mobileTemplate.setMinLevel(10) + mobileTemplate.setMaxLevel(11) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Reptilian Meat") + mobileTemplate.setMeatAmount(215) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setBoneAmount(100) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(100) + mobileTemplate.setSocialGroup("cu pa") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_cu_pa.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('cu_pa', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/death_kreetle.py b/scripts/mobiles/tatooine/death_kreetle.py new file mode 100644 index 00000000..02bffd96 --- /dev/null +++ b/scripts/mobiles/tatooine/death_kreetle.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('kreetle_death') + mobileTemplate.setLevel(7) + mobileTemplate.setMinLevel(7) + mobileTemplate.setMaxLevel(8) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(3) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(4) + mobileTemplate.setSocialGroup("uber kreetle") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_kreetle.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('death_kreetle', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/dervish.py b/scripts/mobiles/tatooine/dervish.py new file mode 100644 index 00000000..e656a6d3 --- /dev/null +++ b/scripts/mobiles/tatooine/dervish.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('dervish') + mobileTemplate.setLevel(5) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("dervish") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_dervish.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('dervish', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/desert_demon.py b/scripts/mobiles/tatooine/desert_demon.py new file mode 100644 index 00000000..50130bf9 --- /dev/null +++ b/scripts/mobiles/tatooine/desert_demon.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('desert_demon') + mobileTemplate.setLevel(13) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("desert demon") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_desert_demon.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('desert_demon', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/desert_demon_bodyguard.py b/scripts/mobiles/tatooine/desert_demon_bodyguard.py new file mode 100644 index 00000000..181b0d87 --- /dev/null +++ b/scripts/mobiles/tatooine/desert_demon_bodyguard.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('desert_demon_bodyguard') + mobileTemplate.setLevel(14) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("desert demon") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_desert_demon_bodyguard.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('desert_demon_bodyguard', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/desert_demon_brawler.py b/scripts/mobiles/tatooine/desert_demon_brawler.py new file mode 100644 index 00000000..2e0084a1 --- /dev/null +++ b/scripts/mobiles/tatooine/desert_demon_brawler.py @@ -0,0 +1,40 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('desert_demon_brawler') + mobileTemplate.setLevel(13) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("desert demon") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_desert_demon_brawler.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + weapontemplate1 = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate1) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('desert_demon_brawler', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/desert_demon_leader.py b/scripts/mobiles/tatooine/desert_demon_leader.py new file mode 100644 index 00000000..fee6b29e --- /dev/null +++ b/scripts/mobiles/tatooine/desert_demon_leader.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('desert_demon_leader') + mobileTemplate.setLevel(3) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("desert demon") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_desert_demon_leader.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('desert_demon_leader', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/desert_demon_marksman.py b/scripts/mobiles/tatooine/desert_demon_marksman.py new file mode 100644 index 00000000..6f1d97f0 --- /dev/null +++ b/scripts/mobiles/tatooine/desert_demon_marksman.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('desert_demon_marksman') + mobileTemplate.setLevel(13) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("desert demon") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_desert_demon_marksman.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_cdef.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('desert_demon_marksman', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/desert_eopie.py b/scripts/mobiles/tatooine/desert_eopie.py new file mode 100644 index 00000000..1f629028 --- /dev/null +++ b/scripts/mobiles/tatooine/desert_eopie.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('desert_eopie') + mobileTemplate.setLevel(16) + mobileTemplate.setMinLevel(16) + mobileTemplate.setMaxLevel(17) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(300) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(225) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(125) + mobileTemplate.setSocialGroup("eopie") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_eopie.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('desert_eopie', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/desert_kreetle.py b/scripts/mobiles/tatooine/desert_kreetle.py new file mode 100644 index 00000000..5a33b9be --- /dev/null +++ b/scripts/mobiles/tatooine/desert_kreetle.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('orphan_kreetle') + mobileTemplate.setLevel(3) + mobileTemplate.setMinLevel(3) + mobileTemplate.setMaxLevel(5) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(1) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(2) + mobileTemplate.setSocialGroup("kreetle") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_kreetle.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('desert_kreetle', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/desert_razorback.py b/scripts/mobiles/tatooine/desert_razorback.py new file mode 100644 index 00000000..7e78276a --- /dev/null +++ b/scripts/mobiles/tatooine/desert_razorback.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('desert_razorback') + mobileTemplate.setLevel(23) + mobileTemplate.setMinLevel(23) + mobileTemplate.setMaxLevel(25) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(65) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(40) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(25) + mobileTemplate.setSocialGroup("zucca Boar") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_zucca_boar.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('desert_razorback', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/desert_squill.py b/scripts/mobiles/tatooine/desert_squill.py new file mode 100644 index 00000000..e98b07b5 --- /dev/null +++ b/scripts/mobiles/tatooine/desert_squill.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('desert_squill') + mobileTemplate.setLevel(14) + mobileTemplate.setMinLevel(14) + mobileTemplate.setMaxLevel(15) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(4) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(4) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(3) + mobileTemplate.setSocialGroup("squill") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_squill.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('desert_squill', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/desert_swooper.py b/scripts/mobiles/tatooine/desert_swooper.py new file mode 100644 index 00000000..236cf165 --- /dev/null +++ b/scripts/mobiles/tatooine/desert_swooper.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('desert_swooper') + mobileTemplate.setLevel(2) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("swoop") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_desert_swooper.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('desert_swoop', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/desert_swooper_leader.py b/scripts/mobiles/tatooine/desert_swooper_leader.py new file mode 100644 index 00000000..d223b7a6 --- /dev/null +++ b/scripts/mobiles/tatooine/desert_swooper_leader.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('desert_swooper_leader') + mobileTemplate.setLevel(3) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("swoop") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_desert_swooper_leader.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('desert_swoop', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/desert_thug.py b/scripts/mobiles/tatooine/desert_thug.py new file mode 100644 index 00000000..419cd737 --- /dev/null +++ b/scripts/mobiles/tatooine/desert_thug.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('desert_thug') + mobileTemplate.setLevel(1) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("thug") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_valarian_thug.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('desert_thug', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/dewback.py b/scripts/mobiles/tatooine/dewback.py index f2c2bb79..9808f52e 100644 --- a/scripts/mobiles/tatooine/dewback.py +++ b/scripts/mobiles/tatooine/dewback.py @@ -1,16 +1,45 @@ import sys from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate from java.util import Vector def addTemplate(core): mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('dewback') + mobileTemplate.setLevel(17) + mobileTemplate.setMinLevel(17) + mobileTemplate.setMaxLevel(18) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Reptilian Meat") + mobileTemplate.setMeatAmount(350) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(275) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(200) + mobileTemplate.setSocialGroup("dewback") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + templates = Vector() templates.add('object/mobile/shared_dewback.iff') - mobileTemplate.setCreatureName('dewback') mobileTemplate.setTemplates(templates) - mobileTemplate.setLevel(17) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + attacks = Vector() mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) + core.spawnService.addMobileTemplate('dewback', mobileTemplate) - \ No newline at end of file + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/dimu_abbot.py b/scripts/mobiles/tatooine/dimu_abbot.py new file mode 100644 index 00000000..8ab0045a --- /dev/null +++ b/scripts/mobiles/tatooine/dimu_abbot.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('dim_u_c') + mobileTemplate.setLevel(4) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("dim-u") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_dim_u_abbot.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('dimu_abbot', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/dimu_bantha.py b/scripts/mobiles/tatooine/dimu_bantha.py new file mode 100644 index 00000000..9eb67934 --- /dev/null +++ b/scripts/mobiles/tatooine/dimu_bantha.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('dim_u_bantha') + mobileTemplate.setLevel(3) + mobileTemplate.setMinLevel(3) + mobileTemplate.setMaxLevel(4) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(450) + mobileTemplate.setHideType("Wooly Hide") + mobileTemplate.setBoneAmount(325) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(250) + mobileTemplate.setSocialGroup("dim-u") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_bantha_hue.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('dim-u_bantha', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/dimu_cleric.py b/scripts/mobiles/tatooine/dimu_cleric.py new file mode 100644 index 00000000..51c3bcae --- /dev/null +++ b/scripts/mobiles/tatooine/dimu_cleric.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('dim_u_cleric') + mobileTemplate.setLevel(3) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("dim-u") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_dim_u_cleric.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('dimu_cleric', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/dimu_monastery_nun.py b/scripts/mobiles/tatooine/dimu_monastery_nun.py new file mode 100644 index 00000000..5d341724 --- /dev/null +++ b/scripts/mobiles/tatooine/dimu_monastery_nun.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('dim_u_monastery_nun') + mobileTemplate.setLevel(2) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("dim-u") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_dim_u_monastery_nun.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('dimu_monastery_nun', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/dimu_monk.py b/scripts/mobiles/tatooine/dimu_monk.py new file mode 100644 index 00000000..8ff4c056 --- /dev/null +++ b/scripts/mobiles/tatooine/dimu_monk.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('dim_u_monk') + mobileTemplate.setLevel(2) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("dim-u") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_dim_u_monk.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('dimu_monk', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/dimu_preacher.py b/scripts/mobiles/tatooine/dimu_preacher.py new file mode 100644 index 00000000..07a4965e --- /dev/null +++ b/scripts/mobiles/tatooine/dimu_preacher.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('dim_u_preacher') + mobileTemplate.setLevel(5) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("dim-u") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_dim_u_preacher.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('dimu_preacher', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/dimu_priestess.py b/scripts/mobiles/tatooine/dimu_priestess.py new file mode 100644 index 00000000..6f59d217 --- /dev/null +++ b/scripts/mobiles/tatooine/dimu_priestess.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('dim_u_priestess') + mobileTemplate.setLevel(5) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("dim-u") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_dim_u_priestess.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('dimu_priestess', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/diseased_bocatt.py b/scripts/mobiles/tatooine/diseased_bocatt.py new file mode 100644 index 00000000..59843cbe --- /dev/null +++ b/scripts/mobiles/tatooine/diseased_bocatt.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('bocatt_diseased') + mobileTemplate.setLevel(5) + mobileTemplate.setMinLevel(5) + mobileTemplate.setMaxLevel(6) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Wild Meat") + mobileTemplate.setMeatAmount(6) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(5) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(4) + mobileTemplate.setSocialGroup("bocatt") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_bocatt.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('diseased_bocatt', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/domestic_eopie.py b/scripts/mobiles/tatooine/domestic_eopie.py new file mode 100644 index 00000000..0cddcc55 --- /dev/null +++ b/scripts/mobiles/tatooine/domestic_eopie.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('domestic_eopie') + mobileTemplate.setLevel(1) + mobileTemplate.setMinLevel(1) + mobileTemplate.setMaxLevel(3) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Domesticated Meat") + mobileTemplate.setMeatAmount(335) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(260) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(190) + mobileTemplate.setSocialGroup("eopie") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_eopie.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('domestic_eopie', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/dragonet.py b/scripts/mobiles/tatooine/dragonet.py new file mode 100644 index 00000000..490771fb --- /dev/null +++ b/scripts/mobiles/tatooine/dragonet.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('dragonet') + mobileTemplate.setLevel(24) + mobileTemplate.setMinLevel(24) + mobileTemplate.setMaxLevel(27) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(125) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setBoneAmount(75) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(68) + mobileTemplate.setSocialGroup("dragonet") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_dune_lizard.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/creature/shared_creature_spit_small_toxicgreen.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureRangedAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('dragonet', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/drooling_nuna.py b/scripts/mobiles/tatooine/drooling_nuna.py new file mode 100644 index 00000000..e3be3acb --- /dev/null +++ b/scripts/mobiles/tatooine/drooling_nuna.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('dwarf_nuna_drooling') + mobileTemplate.setLevel(2) + mobileTemplate.setMinLevel(2) + mobileTemplate.setMaxLevel(3) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Avian Meat") + mobileTemplate.setMeatAmount(2) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(3) + mobileTemplate.setBoneType("Avian Bone") + mobileTemplate.setHideAmount(1) + mobileTemplate.setSocialGroup("dwarf nuna") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_nuna.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('drooling_nuna', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/dune_bantha.py b/scripts/mobiles/tatooine/dune_bantha.py new file mode 100644 index 00000000..984c29bf --- /dev/null +++ b/scripts/mobiles/tatooine/dune_bantha.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('dune_bantha') + mobileTemplate.setLevel(20) + mobileTemplate.setMinLevel(20) + mobileTemplate.setMaxLevel(22) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(375) + mobileTemplate.setHideType("Wooley Hide") + mobileTemplate.setBoneAmount(275) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(175) + mobileTemplate.setSocialGroup("bantha") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_bantha_hue.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('dune_bantha', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/dune_beetle.py b/scripts/mobiles/tatooine/dune_beetle.py new file mode 100644 index 00000000..96b36222 --- /dev/null +++ b/scripts/mobiles/tatooine/dune_beetle.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('dune_beetle') + mobileTemplate.setLevel(9) + mobileTemplate.setMinLevel(9) + mobileTemplate.setMaxLevel(10) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(6) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(8) + mobileTemplate.setSocialGroup("giant sand beetle") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_giant_sand_beetle.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('dune_beetle', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/dune_lizard.py b/scripts/mobiles/tatooine/dune_lizard.py new file mode 100644 index 00000000..00f04692 --- /dev/null +++ b/scripts/mobiles/tatooine/dune_lizard.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('dune_lizard') + mobileTemplate.setLevel(18) + mobileTemplate.setMinLevel(18) + mobileTemplate.setMaxLevel(19) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(85) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setBoneAmount(50) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(35) + mobileTemplate.setSocialGroup("dune lizard") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_dune_lizard.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/creature/shared_creature_spit_small_toxicgreen.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('dune_lizard', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/dune_stalker.py b/scripts/mobiles/tatooine/dune_stalker.py new file mode 100644 index 00000000..398cf4de --- /dev/null +++ b/scripts/mobiles/tatooine/dune_stalker.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('dune_stalker') + mobileTemplate.setLevel(5) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("dune stalker") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_dune_stalker.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('dune_stalker', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/dune_stalker_brawler.py b/scripts/mobiles/tatooine/dune_stalker_brawler.py new file mode 100644 index 00000000..9df6262e --- /dev/null +++ b/scripts/mobiles/tatooine/dune_stalker_brawler.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('dune_stalker_brawler') + mobileTemplate.setLevel(17) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("dune stalker") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_dune_stalker_brawler.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('dune_stalker_brawler', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/dune_stalker_enforcer.py b/scripts/mobiles/tatooine/dune_stalker_enforcer.py new file mode 100644 index 00000000..12bf84f3 --- /dev/null +++ b/scripts/mobiles/tatooine/dune_stalker_enforcer.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('dune_stalker_enforcer') + mobileTemplate.setLevel(18) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("dune stalker") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_dune_stalker.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('dune_stalker_enforcer', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/dune_stalker_leader.py b/scripts/mobiles/tatooine/dune_stalker_leader.py new file mode 100644 index 00000000..54b80a22 --- /dev/null +++ b/scripts/mobiles/tatooine/dune_stalker_leader.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('dune_stalker_leader') + mobileTemplate.setLevel(19) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("dune stalker") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_dune_stalker_leader.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('dune_stalker_leader', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/dune_stalker_marksman.py b/scripts/mobiles/tatooine/dune_stalker_marksman.py new file mode 100644 index 00000000..388c8e49 --- /dev/null +++ b/scripts/mobiles/tatooine/dune_stalker_marksman.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('dune_stalker_marksman') + mobileTemplate.setLevel(19) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("dune stalker") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_dune_stalker_marksman.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('dune_stalker_marksman', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/dune_stalker_scavenger.py b/scripts/mobiles/tatooine/dune_stalker_scavenger.py new file mode 100644 index 00000000..ed889a0f --- /dev/null +++ b/scripts/mobiles/tatooine/dune_stalker_scavenger.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('dune_stalker_scavenger') + mobileTemplate.setLevel(19) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("dune stalker") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_dune_stalker.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('dune_stalker_scavenger', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/dwarf_bantha.py b/scripts/mobiles/tatooine/dwarf_bantha.py new file mode 100644 index 00000000..d8c76e1d --- /dev/null +++ b/scripts/mobiles/tatooine/dwarf_bantha.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('dwarf_bantha') + mobileTemplate.setLevel(10) + mobileTemplate.setMinLevel(10) + mobileTemplate.setMaxLevel(11) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(300) + mobileTemplate.setHideType("Wooly Hide") + mobileTemplate.setBoneAmount(200) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(100) + mobileTemplate.setSocialGroup("bantha") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dwarf_bantha.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('dwarf_bantha', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/dwarf_eopie.py b/scripts/mobiles/tatooine/dwarf_eopie.py new file mode 100644 index 00000000..70caf589 --- /dev/null +++ b/scripts/mobiles/tatooine/dwarf_eopie.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('dwarf_eopie') + mobileTemplate.setLevel(1) + mobileTemplate.setMinLevel(1) + mobileTemplate.setMaxLevel(3) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(230) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(180) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(110) + mobileTemplate.setSocialGroup("eopie") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dwarf_eopie.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('dwarf_eopie', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/dwarf_nuna.py b/scripts/mobiles/tatooine/dwarf_nuna.py new file mode 100644 index 00000000..a3d8144c --- /dev/null +++ b/scripts/mobiles/tatooine/dwarf_nuna.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('dwarf_nuna') + mobileTemplate.setLevel(1) + mobileTemplate.setMinLevel(1) + mobileTemplate.setMaxLevel(3) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Avian Meat") + mobileTemplate.setMeatAmount(2) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(3) + mobileTemplate.setBoneType("Avian Bone") + mobileTemplate.setHideAmount(1) + mobileTemplate.setSocialGroup("dwarf nuna") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dwarf_nuna.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('dwarf_nuna', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/elder_zucca_boar.py b/scripts/mobiles/tatooine/elder_zucca_boar.py new file mode 100644 index 00000000..3513012c --- /dev/null +++ b/scripts/mobiles/tatooine/elder_zucca_boar.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('zucca_boar_elder') + mobileTemplate.setLevel(8) + mobileTemplate.setMinLevel(8) + mobileTemplate.setMaxLevel(9) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(65) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(40) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(25) + mobileTemplate.setSocialGroup("zucca boar") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_zucca_boar.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('elder_zucca_boar', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/elite_desert_swooper.py b/scripts/mobiles/tatooine/elite_desert_swooper.py new file mode 100644 index 00000000..56a6d9fd --- /dev/null +++ b/scripts/mobiles/tatooine/elite_desert_swooper.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('desert_swooper_elite') + mobileTemplate.setLevel(3) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("swoop") + mobileTemplate.setAssistRange(8) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_desert_swooper.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('desert_swooper_elite', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/elite_dewback_cannibal.py b/scripts/mobiles/tatooine/elite_dewback_cannibal.py new file mode 100644 index 00000000..14c65b79 --- /dev/null +++ b/scripts/mobiles/tatooine/elite_dewback_cannibal.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('elite_dewback_canibal') + mobileTemplate.setLevel(13) + mobileTemplate.setMinLevel(13) + mobileTemplate.setMaxLevel(15) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Reptilian Meat") + mobileTemplate.setMeatAmount(340) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(260) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(185) + mobileTemplate.setSocialGroup("dewback cannibal") + mobileTemplate.setAssistRange(8) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_dewback.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('elite_dewback_cannibal', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/elite_dragonet.py b/scripts/mobiles/tatooine/elite_dragonet.py new file mode 100644 index 00000000..a7a863ef --- /dev/null +++ b/scripts/mobiles/tatooine/elite_dragonet.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('elite_dragonet') + mobileTemplate.setLevel(24) + mobileTemplate.setMinLevel(24) + mobileTemplate.setMaxLevel(26) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(125) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setBoneAmount(75) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(68) + mobileTemplate.setSocialGroup("dragonet") + mobileTemplate.setAssistRange(8) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_dragonet.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/creature/shared_creature_spit_large_toxicgreen.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureRangedAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('elite_dragonet', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/elite_dune_lizard.py b/scripts/mobiles/tatooine/elite_dune_lizard.py new file mode 100644 index 00000000..119a2372 --- /dev/null +++ b/scripts/mobiles/tatooine/elite_dune_lizard.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('elite_dune_lizard') + mobileTemplate.setLevel(18) + mobileTemplate.setMinLevel(18) + mobileTemplate.setMaxLevel(19) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(85) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setBoneAmount(50) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(35) + mobileTemplate.setSocialGroup("dune lizard") + mobileTemplate.setAssistRange(8) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_dune_lizard.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/creature/shared_creature_spit_large_toxicgreen.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureRangedAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('elite_dune_lizard', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/elite_giant_sand_beetle.py b/scripts/mobiles/tatooine/elite_giant_sand_beetle.py new file mode 100644 index 00000000..c4a27c38 --- /dev/null +++ b/scripts/mobiles/tatooine/elite_giant_sand_beetle.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('elite_giant_sand_beetle') + mobileTemplate.setLevel(25) + mobileTemplate.setMinLevel(25) + mobileTemplate.setMaxLevel(26) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(15) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(20) + mobileTemplate.setSocialGroup("giant sand beetle") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_giant_sand_beetle.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('elite_giant_sand_beetle', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/elite_mutant_womprat.py b/scripts/mobiles/tatooine/elite_mutant_womprat.py new file mode 100644 index 00000000..ca4db924 --- /dev/null +++ b/scripts/mobiles/tatooine/elite_mutant_womprat.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('elite_mutant_womprat') + mobileTemplate.setLevel(12) + mobileTemplate.setMinLevel(12) + mobileTemplate.setMaxLevel(14) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Wild Meat") + mobileTemplate.setMeatAmount(6) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(5) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(4) + mobileTemplate.setSocialGroup("womprat") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_womp_rat.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('womprat', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/elite_ronto.py b/scripts/mobiles/tatooine/elite_ronto.py new file mode 100644 index 00000000..2207fa3b --- /dev/null +++ b/scripts/mobiles/tatooine/elite_ronto.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('elite_ronto_ronto') + mobileTemplate.setLevel(17) + mobileTemplate.setMinLevel(17) + mobileTemplate.setMaxLevel(18) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(450) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(300) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(180) + mobileTemplate.setSocialGroup("ronto") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_ronto.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('elite_ronto', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/elite_scyk.py b/scripts/mobiles/tatooine/elite_scyk.py new file mode 100644 index 00000000..eb6e2dc6 --- /dev/null +++ b/scripts/mobiles/tatooine/elite_scyk.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('elite_scyk') + mobileTemplate.setLevel(11) + mobileTemplate.setMinLevel(11) + mobileTemplate.setMaxLevel(13) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(40) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setBoneAmount(25) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(18) + mobileTemplate.setSocialGroup("scyk") + mobileTemplate.setAssistRange(8) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_scyk.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('elite_scyk', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/elite_sevorrt.py b/scripts/mobiles/tatooine/elite_sevorrt.py new file mode 100644 index 00000000..d525dc6a --- /dev/null +++ b/scripts/mobiles/tatooine/elite_sevorrt.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('elite_sevorrt') + mobileTemplate.setLevel(8) + mobileTemplate.setMinLevel(8) + mobileTemplate.setMaxLevel(9) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Reptilian Meat") + mobileTemplate.setMeatAmount(10) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(10) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(4) + mobileTemplate.setSocialGroup("sevorrt") + mobileTemplate.setAssistRange(8) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_sevorrt.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('elite_sevorrt', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/elite_weequay_zealot.py b/scripts/mobiles/tatooine/elite_weequay_zealot.py new file mode 100644 index 00000000..bca78f85 --- /dev/null +++ b/scripts/mobiles/tatooine/elite_weequay_zealot.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('elite_weequay_zealot') + mobileTemplate.setLevel(17) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("swoop") + mobileTemplate.setAssistRange(8) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_weequay_zealot.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('elite_weequay_zealot', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/enraged_mountain_dewback.py b/scripts/mobiles/tatooine/enraged_mountain_dewback.py new file mode 100644 index 00000000..95fdd053 --- /dev/null +++ b/scripts/mobiles/tatooine/enraged_mountain_dewback.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('elite_mountain_dewback') + mobileTemplate.setLevel(22) + mobileTemplate.setMinLevel(22) + mobileTemplate.setMaxLevel(23) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Reptilian Meat") + mobileTemplate.setMeatAmount(330) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(240) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(170) + mobileTemplate.setSocialGroup("dewback mountain") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dewback.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('enraged_mountain_dewback', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/enraged_squill.py b/scripts/mobiles/tatooine/enraged_squill.py new file mode 100644 index 00000000..0ff84664 --- /dev/null +++ b/scripts/mobiles/tatooine/enraged_squill.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('elite_squill') + mobileTemplate.setLevel(12) + mobileTemplate.setMinLevel(12) + mobileTemplate.setMaxLevel(14) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(6) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(6) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(5) + mobileTemplate.setSocialGroup("squill") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_squill.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('enraged_squill', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/eoni.py b/scripts/mobiles/tatooine/eoni.py new file mode 100644 index 00000000..c8f3d202 --- /dev/null +++ b/scripts/mobiles/tatooine/eoni.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('elite_jundland_eopie') + mobileTemplate.setLevel(21) + mobileTemplate.setMinLevel(21) + mobileTemplate.setMaxLevel(22) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(300) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(225) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(115) + mobileTemplate.setSocialGroup("eopie") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_eopie.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('eoni', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/eopie.py b/scripts/mobiles/tatooine/eopie.py new file mode 100644 index 00000000..af34d5d6 --- /dev/null +++ b/scripts/mobiles/tatooine/eopie.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('eopie') + mobileTemplate.setLevel(4) + mobileTemplate.setMinLevel(4) + mobileTemplate.setMaxLevel(5) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(315) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(250) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(150) + mobileTemplate.setSocialGroup("eopie") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_eopie.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('eopie', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/eopie_herdmaster.py b/scripts/mobiles/tatooine/eopie_herdmaster.py new file mode 100644 index 00000000..7635f124 --- /dev/null +++ b/scripts/mobiles/tatooine/eopie_herdmaster.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('eopie_herdmaster') + mobileTemplate.setLevel(5) + mobileTemplate.setMinLevel(5) + mobileTemplate.setMaxLevel(6) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(315) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(250) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(150) + mobileTemplate.setSocialGroup("eopie") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_eopie.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('eopie_herdmaster', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/error_prone_battle_droids.py b/scripts/mobiles/tatooine/error_prone_battle_droids.py new file mode 100644 index 00000000..433090f4 --- /dev/null +++ b/scripts/mobiles/tatooine/error_prone_battle_droids.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tatooine_error_prone_droid') + mobileTemplate.setLevel(6) + mobileTemplate.setMinLevel(6) + mobileTemplate.setMaxLevel(7) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("error-prone battle droid") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_battle_droid.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e5.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('error-prone_battle_droid', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/escaped_criminal.py b/scripts/mobiles/tatooine/escaped_criminal.py new file mode 100644 index 00000000..45beb8ec --- /dev/null +++ b/scripts/mobiles/tatooine/escaped_criminal.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tatooine_eisley_escaped_criminal') + mobileTemplate.setLevel(7) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("desert demon") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_criminal_organized_human_male_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('escaped_criminal', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/evil_hermit.py b/scripts/mobiles/tatooine/evil_hermit.py new file mode 100644 index 00000000..ce47739f --- /dev/null +++ b/scripts/mobiles/tatooine/evil_hermit.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('evil_hermit') + mobileTemplate.setLevel(2) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(2) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("evil") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_evil_hermit.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_cdef.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshotpistol') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('evil_hermit', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/evil_nomad.py b/scripts/mobiles/tatooine/evil_nomad.py new file mode 100644 index 00000000..b36dfac4 --- /dev/null +++ b/scripts/mobiles/tatooine/evil_nomad.py @@ -0,0 +1,40 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('evil_nomad') + mobileTemplate.setLevel(4) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("evil") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_nomad.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_dh17.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + weapontemplate1 = WeaponTemplate('object/weapon/melee/polearm/shared_lance_electric_polearm.iff', 7, 1.0) + weaponTemplates.add(weapontemplate1) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshotpistol') + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('evil_hermit', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/evil_settler.py b/scripts/mobiles/tatooine/evil_settler.py new file mode 100644 index 00000000..72fc7890 --- /dev/null +++ b/scripts/mobiles/tatooine/evil_settler.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('evil_settler') + mobileTemplate.setLevel(1) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(2) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("evil") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_evil_settler.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_cdef.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshotpistol') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('evil_settler', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/female_mountain_squill.py b/scripts/mobiles/tatooine/female_mountain_squill.py new file mode 100644 index 00000000..d38fadef --- /dev/null +++ b/scripts/mobiles/tatooine/female_mountain_squill.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('female_mountain_squill') + mobileTemplate.setLevel(7) + mobileTemplate.setMinLevel(7) + mobileTemplate.setMaxLevel(9) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(4) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(3) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(2) + mobileTemplate.setSocialGroup("squill") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_squill.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('female_mountain_squill', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/feral_bantha.py b/scripts/mobiles/tatooine/feral_bantha.py new file mode 100644 index 00000000..12847076 --- /dev/null +++ b/scripts/mobiles/tatooine/feral_bantha.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('feral_bantha') + mobileTemplate.setLevel(5) + mobileTemplate.setMinLevel(5) + mobileTemplate.setMaxLevel(6) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(415) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(305) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(215) + mobileTemplate.setSocialGroup("bantha") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_bantha_hue.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('feral_bantha', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/fighting_romo_vax.py b/scripts/mobiles/tatooine/fighting_romo_vax.py new file mode 100644 index 00000000..40d3322d --- /dev/null +++ b/scripts/mobiles/tatooine/fighting_romo_vax.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('fighting_romo_vax') + mobileTemplate.setLevel(20) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("sennex") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dressed_trader_thug_male_human_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e5.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('fighting_romo_vax', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/fugitive.py b/scripts/mobiles/tatooine/fugitive.py new file mode 100644 index 00000000..ff784bec --- /dev/null +++ b/scripts/mobiles/tatooine/fugitive.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('fugitive') + mobileTemplate.setLevel(4) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("thug") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_fugitive.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e5.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('fugitive', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/furios_ronto.py b/scripts/mobiles/tatooine/furios_ronto.py new file mode 100644 index 00000000..937930c3 --- /dev/null +++ b/scripts/mobiles/tatooine/furios_ronto.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('ronto_furious') + mobileTemplate.setLevel(18) + mobileTemplate.setMinLevel(18) + mobileTemplate.setMaxLevel(19) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(465) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(320) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(200) + mobileTemplate.setSocialGroup("ronto") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_ronto.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('furious_ronto', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/giant_canyon_krayt_dragon.py b/scripts/mobiles/tatooine/giant_canyon_krayt_dragon.py new file mode 100644 index 00000000..eec41245 --- /dev/null +++ b/scripts/mobiles/tatooine/giant_canyon_krayt_dragon.py @@ -0,0 +1,47 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('giant_canyon_krayt_dragon') + mobileTemplate.setLevel(87) + mobileTemplate.setMinLevel(80) + mobileTemplate.setMaxLevel(89) + mobileTemplate.setDifficulty(2) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(2.5) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(1500) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setBoneAmount(870) + mobileTemplate.setBoneType("Animal Bones") + mobileTemplate.setHideAmount(805) + mobileTemplate.setSocialGroup("krayt dragon") + mobileTemplate.setAssistRange(34) + mobileTemplate.setStalker(True) + + + + templates = Vector() + templates.add('object/mobile/shared_canyon_krayt_dragon.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('giant_canyon_krayt_dragon', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/giant_sand_beetle.py b/scripts/mobiles/tatooine/giant_sand_beetle.py new file mode 100644 index 00000000..54d9aed8 --- /dev/null +++ b/scripts/mobiles/tatooine/giant_sand_beetle.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('giant_sand_beetle') + mobileTemplate.setLevel(25) + mobileTemplate.setMinLevel(25) + mobileTemplate.setMaxLevel(26) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(15) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(20) + mobileTemplate.setSocialGroup("giant sand beetle") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_giant_sand_beetle.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('giant_sand_beetle', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/giant_worrt.py b/scripts/mobiles/tatooine/giant_worrt.py new file mode 100644 index 00000000..6a5aa8b1 --- /dev/null +++ b/scripts/mobiles/tatooine/giant_worrt.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('giant_worrt') + mobileTemplate.setLevel(13) + mobileTemplate.setMinLevel(13) + mobileTemplate.setMaxLevel(15) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Reptilian Meat") + mobileTemplate.setMeatAmount(9) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(9) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(4) + mobileTemplate.setSocialGroup("worrt") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_giant_worrt.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('giant_worrt', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/gorg.py b/scripts/mobiles/tatooine/gorg.py new file mode 100644 index 00000000..2762675f --- /dev/null +++ b/scripts/mobiles/tatooine/gorg.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('gorg') + mobileTemplate.setLevel(2) + mobileTemplate.setMinLevel(1) + mobileTemplate.setMaxLevel(3) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(5) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(3) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(2) + mobileTemplate.setSocialGroup("gorg") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_gorg.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('gorg', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/gorg_glutton.py b/scripts/mobiles/tatooine/gorg_glutton.py new file mode 100644 index 00000000..97e66c08 --- /dev/null +++ b/scripts/mobiles/tatooine/gorg_glutton.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('gorg_glutton') + mobileTemplate.setLevel(2) + mobileTemplate.setMinLevel(1) + mobileTemplate.setMaxLevel(3) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(12) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(9) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(8) + mobileTemplate.setSocialGroup("gorg") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_gorg.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('gorg_glutton', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/grand_krayt_dragon.py b/scripts/mobiles/tatooine/grand_krayt_dragon.py new file mode 100644 index 00000000..294c58e2 --- /dev/null +++ b/scripts/mobiles/tatooine/grand_krayt_dragon.py @@ -0,0 +1,47 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('krayt_dragon_grand') + mobileTemplate.setLevel(87) + mobileTemplate.setMinLevel(80) + mobileTemplate.setMaxLevel(89) + mobileTemplate.setDifficulty(2) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(2.6) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(1700) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setBoneAmount(950) + mobileTemplate.setBoneType("Animal Bones") + mobileTemplate.setHideAmount(905) + mobileTemplate.setSocialGroup("krayt dragon") + mobileTemplate.setAssistRange(24) + mobileTemplate.setStalker(True) + + + + templates = Vector() + templates.add('object/mobile/shared_canyon_krayt_dragon.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('grand_krayt_dragon', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/great_squill.py b/scripts/mobiles/tatooine/great_squill.py new file mode 100644 index 00000000..6c8ec3af --- /dev/null +++ b/scripts/mobiles/tatooine/great_squill.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('squill_great') + mobileTemplate.setLevel(13) + mobileTemplate.setMinLevel(13) + mobileTemplate.setMaxLevel(14) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(6) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(6) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(6) + mobileTemplate.setSocialGroup("squill") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_squill.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('great_squill', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/greater_desert_womprat.py b/scripts/mobiles/tatooine/greater_desert_womprat.py new file mode 100644 index 00000000..5bd75203 --- /dev/null +++ b/scripts/mobiles/tatooine/greater_desert_womprat.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('greater_desert_womprat') + mobileTemplate.setLevel(12) + mobileTemplate.setMinLevel(11) + mobileTemplate.setMaxLevel(14) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Wild Meat") + mobileTemplate.setMeatAmount(6) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(5) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(4) + mobileTemplate.setSocialGroup("womprat") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_greater_desert_womp_rat.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureRangedAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('greater_desert_womprat', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/grizzled_dewback.py b/scripts/mobiles/tatooine/grizzled_dewback.py new file mode 100644 index 00000000..ea05f928 --- /dev/null +++ b/scripts/mobiles/tatooine/grizzled_dewback.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('grizzled_dewback') + mobileTemplate.setLevel(18) + mobileTemplate.setMinLevel(17) + mobileTemplate.setMaxLevel(19) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Reptilian Meat") + mobileTemplate.setMeatAmount(365) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(285) + mobileTemplate.setBoneType("Animal Bones") + mobileTemplate.setHideAmount(210) + mobileTemplate.setSocialGroup("dewback") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dewback.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('grizzled_dewback', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/gunrunner.py b/scripts/mobiles/tatooine/gunrunner.py new file mode 100644 index 00000000..4331c97e --- /dev/null +++ b/scripts/mobiles/tatooine/gunrunner.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('gunrunner_newbie') + mobileTemplate.setLevel(5) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("gunrunner") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_gunrunner.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e5.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('gunrunner', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/gunrunner1.py b/scripts/mobiles/tatooine/gunrunner1.py new file mode 100644 index 00000000..e7118983 --- /dev/null +++ b/scripts/mobiles/tatooine/gunrunner1.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('gunrunner_newbie') + mobileTemplate.setLevel(14) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("mercenary") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_gunrunner.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e5.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('gunrunner_1', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/gunrunner2.py b/scripts/mobiles/tatooine/gunrunner2.py new file mode 100644 index 00000000..efd08eab --- /dev/null +++ b/scripts/mobiles/tatooine/gunrunner2.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('gunrunner_newbie') + mobileTemplate.setLevel(14) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("mercenary") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_gunrunner.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e5.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('gunrunner_2', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/gunrunner_leader.py b/scripts/mobiles/tatooine/gunrunner_leader.py new file mode 100644 index 00000000..ba2347a6 --- /dev/null +++ b/scripts/mobiles/tatooine/gunrunner_leader.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('gunrunner_newbie_leader') + mobileTemplate.setLevel(8) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("gunrunner") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_gunrunner.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e5.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('gunrunner_leader', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/gunrunner_sentry.py b/scripts/mobiles/tatooine/gunrunner_sentry.py new file mode 100644 index 00000000..31a0d952 --- /dev/null +++ b/scripts/mobiles/tatooine/gunrunner_sentry.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('gunrunner_newbie_sentry') + mobileTemplate.setLevel(6) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("gunrunner") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_gunrunner.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e5.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('gunrunner_sentry', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/harmony_worrt.py b/scripts/mobiles/tatooine/harmony_worrt.py new file mode 100644 index 00000000..89f59c15 --- /dev/null +++ b/scripts/mobiles/tatooine/harmony_worrt.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('harmony_worrt') + mobileTemplate.setLevel(18) + mobileTemplate.setMinLevel(17) + mobileTemplate.setMaxLevel(19) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("worrt") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_worrt.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('harmony_worrt', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/hermit.py b/scripts/mobiles/tatooine/hermit.py new file mode 100644 index 00000000..919beb11 --- /dev/null +++ b/scripts/mobiles/tatooine/hermit.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('hermit') + mobileTemplate.setLevel(1) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(2) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("evil") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_hermit.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_cdef.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshotpistol') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('hermit', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/hutt_assassin.py b/scripts/mobiles/tatooine/hutt_assassin.py new file mode 100644 index 00000000..fb3c7e76 --- /dev/null +++ b/scripts/mobiles/tatooine/hutt_assassin.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('hutt_assassin') + mobileTemplate.setLevel(22) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(2) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("jabba") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_hutt_male.iff') + templates.add('object/mobile/shared_hutt_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_cdef.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshotpistol') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('hutt_assassin', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/hutt_enforcer.py b/scripts/mobiles/tatooine/hutt_enforcer.py new file mode 100644 index 00000000..eac06cef --- /dev/null +++ b/scripts/mobiles/tatooine/hutt_enforcer.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('hutt_enforcer') + mobileTemplate.setLevel(22) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(4) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("jabba") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_hutt_male.iff') + templates.add('object/mobile/shared_hutt_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/sword/shared_sword_01.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('saberhit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('hutt_enforcer', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/hutt_outcast.py b/scripts/mobiles/tatooine/hutt_outcast.py new file mode 100644 index 00000000..e3400022 --- /dev/null +++ b/scripts/mobiles/tatooine/hutt_outcast.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('npe_hutt_minion') + mobileTemplate.setLevel(22) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(4) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("jabba") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_hutt_male.iff') + templates.add('object/mobile/shared_hutt_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_cdef.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshotpistol') + mobileTemplate.setAttacks(attacks) + + + core.spawnService.addMobileTemplate('hutt_outcast', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/insane_kitonak.py b/scripts/mobiles/tatooine/insane_kitonak.py new file mode 100644 index 00000000..60401027 --- /dev/null +++ b/scripts/mobiles/tatooine/insane_kitonak.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('insane_kitonak') + mobileTemplate.setLevel(1) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("insane kitonak") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_kitonak_male.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('insane_kitonak', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/jabba_assassin.py b/scripts/mobiles/tatooine/jabba_assassin.py new file mode 100644 index 00000000..56c8f45c --- /dev/null +++ b/scripts/mobiles/tatooine/jabba_assassin.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('jabba_assassin') + mobileTemplate.setLevel(15) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(2) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("jabba") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_jabba_assassin.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_cdef.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshotpistol') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('jabba_assassin', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/jabba_compound_guard.py b/scripts/mobiles/tatooine/jabba_compound_guard.py new file mode 100644 index 00000000..27f8ddff --- /dev/null +++ b/scripts/mobiles/tatooine/jabba_compound_guard.py @@ -0,0 +1,40 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('jabba_enforcer') + mobileTemplate.setLevel(14) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("jabba") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_jabba_enforcer.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + weapontemplate1 = WeaponTemplate('object/weapon/melee/sword/shared_sword_01.iff', 4, 1.0) + weaponTemplates.add(weapontemplate1) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('jabba_enforcer', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/jabba_enforcer.py b/scripts/mobiles/tatooine/jabba_enforcer.py new file mode 100644 index 00000000..d682210b --- /dev/null +++ b/scripts/mobiles/tatooine/jabba_enforcer.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('jabba_compound_guard') + mobileTemplate.setLevel(15) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("jabba") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_jabba_henchman.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('jabba_compound_guard', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/jabba_henchman.py b/scripts/mobiles/tatooine/jabba_henchman.py new file mode 100644 index 00000000..effee0d1 --- /dev/null +++ b/scripts/mobiles/tatooine/jabba_henchman.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('jabba_henchman') + mobileTemplate.setLevel(14) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("jabba") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_jabba_henchman.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('jabba_henchman', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/jabba_medic.py b/scripts/mobiles/tatooine/jabba_medic.py new file mode 100644 index 00000000..61bd4959 --- /dev/null +++ b/scripts/mobiles/tatooine/jabba_medic.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('a Jabba Medic') + mobileTemplate.setLevel(14) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("jabba") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_jabba_thug.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('jabba_medic', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/jabba_scout.py b/scripts/mobiles/tatooine/jabba_scout.py new file mode 100644 index 00000000..8daa0e00 --- /dev/null +++ b/scripts/mobiles/tatooine/jabba_scout.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('jabba_scout') + mobileTemplate.setLevel(14) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("jabba") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_jabba_scout.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_e11.iff',0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('jabba_scout', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/jabba_swooper.py b/scripts/mobiles/tatooine/jabba_swooper.py new file mode 100644 index 00000000..87316a83 --- /dev/null +++ b/scripts/mobiles/tatooine/jabba_swooper.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('jabbas_swooper') + mobileTemplate.setLevel(13) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("jabba") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_jabba_swooper.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('jabba_swooper', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/jabba_swooper_leader.py b/scripts/mobiles/tatooine/jabba_swooper_leader.py new file mode 100644 index 00000000..86ce56a6 --- /dev/null +++ b/scripts/mobiles/tatooine/jabba_swooper_leader.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('jabbas_swooper_leader') + mobileTemplate.setLevel(14) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("jabba") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_jabba_swooper_leader.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('jabba_swooper_leader', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/jabba_thief.py b/scripts/mobiles/tatooine/jabba_thief.py new file mode 100644 index 00000000..c01b9cec --- /dev/null +++ b/scripts/mobiles/tatooine/jabba_thief.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('jabba_thief') + mobileTemplate.setLevel(13) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(2) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("jabba") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_jabba_thief.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_cdef.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshotpistol') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('jabba_thief', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/jabba_thug.py b/scripts/mobiles/tatooine/jabba_thug.py new file mode 100644 index 00000000..ba49be22 --- /dev/null +++ b/scripts/mobiles/tatooine/jabba_thug.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('jabba_thief') + mobileTemplate.setLevel(13) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(2) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("jabba") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_jabba_thug.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_cdef.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshotpistol') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('jabba_thug', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/jawa.py b/scripts/mobiles/tatooine/jawa.py new file mode 100644 index 00000000..cf919c06 --- /dev/null +++ b/scripts/mobiles/tatooine/jawa.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('jawa') + mobileTemplate.setLevel(16) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("jawa") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_jawa.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('jawa', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/jawa_avenger.py b/scripts/mobiles/tatooine/jawa_avenger.py new file mode 100644 index 00000000..5e70ae35 --- /dev/null +++ b/scripts/mobiles/tatooine/jawa_avenger.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('jawa_avenger') + mobileTemplate.setLevel(18) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("jawa") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_jawa.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('jawa_avenger', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/jawa_engineer.py b/scripts/mobiles/tatooine/jawa_engineer.py new file mode 100644 index 00000000..6680135a --- /dev/null +++ b/scripts/mobiles/tatooine/jawa_engineer.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('jawa_engineer') + mobileTemplate.setLevel(16) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(2) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("jawa") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_jawa.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_cdef.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshotpistol') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('jawa_engineer', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/jawa_healer.py b/scripts/mobiles/tatooine/jawa_healer.py new file mode 100644 index 00000000..d36f48a0 --- /dev/null +++ b/scripts/mobiles/tatooine/jawa_healer.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('jawa_healer') + mobileTemplate.setLevel(16) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(2) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("jawa") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_jawa.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_cdef.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshotpistol') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('jawa_healer', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/jawa_henchman.py b/scripts/mobiles/tatooine/jawa_henchman.py new file mode 100644 index 00000000..c359eced --- /dev/null +++ b/scripts/mobiles/tatooine/jawa_henchman.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('jawa_henchman') + mobileTemplate.setLevel(16) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(2) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("jawa") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_jawa.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_cdef.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshotpistol') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('jawa_henchman', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/jawa_leader.py b/scripts/mobiles/tatooine/jawa_leader.py new file mode 100644 index 00000000..50f91b24 --- /dev/null +++ b/scripts/mobiles/tatooine/jawa_leader.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('jawa_leader') + mobileTemplate.setLevel(17) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("jawa") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_jawa.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('jawa_leader', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/jawa_protector.py b/scripts/mobiles/tatooine/jawa_protector.py new file mode 100644 index 00000000..c74b9a3a --- /dev/null +++ b/scripts/mobiles/tatooine/jawa_protector.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('jawa_smuggler') + mobileTemplate.setLevel(17) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("jawa") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_jawa.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('jawa_smuggler', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/jawa_smuggler.py b/scripts/mobiles/tatooine/jawa_smuggler.py new file mode 100644 index 00000000..d1ed269c --- /dev/null +++ b/scripts/mobiles/tatooine/jawa_smuggler.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('jawa_protector') + mobileTemplate.setLevel(17) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("jawa") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_jawa.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('jawa_protector', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/jawa_thief.py b/scripts/mobiles/tatooine/jawa_thief.py new file mode 100644 index 00000000..47498aae --- /dev/null +++ b/scripts/mobiles/tatooine/jawa_thief.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('jawa_thief') + mobileTemplate.setLevel(16) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(2) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("jawa") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_jawa.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_cdef.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshotpistol') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('jawa_thief', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/jawa_warlord.py b/scripts/mobiles/tatooine/jawa_warlord.py new file mode 100644 index 00000000..2476d389 --- /dev/null +++ b/scripts/mobiles/tatooine/jawa_warlord.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('jawa_warlord') + mobileTemplate.setLevel(18) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("jawa") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_jawa.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('jawa_warlord', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/jessk.py b/scripts/mobiles/tatooine/jessk.py new file mode 100644 index 00000000..46aea914 --- /dev/null +++ b/scripts/mobiles/tatooine/jessk.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('ep3_qst_jessk') + mobileTemplate.setLevel(18) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("jawa") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_ep3_jessk.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('jessk', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/jundland_eopie.py b/scripts/mobiles/tatooine/jundland_eopie.py new file mode 100644 index 00000000..69f75c98 --- /dev/null +++ b/scripts/mobiles/tatooine/jundland_eopie.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('jundland_eopie') + mobileTemplate.setLevel(21) + mobileTemplate.setMinLevel(19) + mobileTemplate.setMaxLevel(23) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(300) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(225) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(115) + mobileTemplate.setSocialGroup("eopie") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_eopie.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('jundland_eopie', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/junk_battle_droid.py b/scripts/mobiles/tatooine/junk_battle_droid.py new file mode 100644 index 00000000..45208bbc --- /dev/null +++ b/scripts/mobiles/tatooine/junk_battle_droid.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tatooine_lin_demolitionmech') + mobileTemplate.setLevel(14) + mobileTemplate.setMinLevel(13) + mobileTemplate.setMaxLevel(15) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("battle droid") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_battle_droid.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e5.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('junk_battle_droid', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/juvenile_canyon_krayt_dragon.py b/scripts/mobiles/tatooine/juvenile_canyon_krayt_dragon.py new file mode 100644 index 00000000..bed7b9f4 --- /dev/null +++ b/scripts/mobiles/tatooine/juvenile_canyon_krayt_dragon.py @@ -0,0 +1,47 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('juvenile_canyon_krayt') + mobileTemplate.setLevel(82) + mobileTemplate.setMinLevel(78) + mobileTemplate.setMaxLevel(83) + mobileTemplate.setDifficulty(2) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(2.6) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(750) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setBoneAmount(500) + mobileTemplate.setBoneType("Animal Bones") + mobileTemplate.setHideAmount(410) + mobileTemplate.setSocialGroup("krayt dragon") + mobileTemplate.setAssistRange(24) + mobileTemplate.setStalker(False) + + + + templates = Vector() + templates.add('object/mobile/shared_krayt_dragon.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('juvenile_canyon_krayt_dragon', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/kleetuz.py b/scripts/mobiles/tatooine/kleetuz.py new file mode 100644 index 00000000..e8dd6697 --- /dev/null +++ b/scripts/mobiles/tatooine/kleetuz.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tatooine_repo_kleetuz') + mobileTemplate.setLevel(16) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(2) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("mercenary") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_repo_kleetuz.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_cdef.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshotpistol') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('kleetuz', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/krayt_dragon.py b/scripts/mobiles/tatooine/krayt_dragon.py index aded5429..d458d1c8 100644 --- a/scripts/mobiles/tatooine/krayt_dragon.py +++ b/scripts/mobiles/tatooine/krayt_dragon.py @@ -1,19 +1,45 @@ import sys from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate from java.util import Vector def addTemplate(core): mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('krayt_dragon') + mobileTemplate.setLevel(82) + mobileTemplate.setMinLevel(78) + mobileTemplate.setMaxLevel(83) + mobileTemplate.setDifficulty(2) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(2.6) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(750) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setBoneAmount(500) + mobileTemplate.setBoneType("Animal Bones") + mobileTemplate.setHideAmount(410) + mobileTemplate.setSocialGroup("krayt dragon") + mobileTemplate.setAssistRange(24) + mobileTemplate.setStalker(False) + templates = Vector() templates.add('object/mobile/shared_krayt_dragon.iff') mobileTemplate.setTemplates(templates) - mobileTemplate.setLevel(10) - mobileTemplate.setDifficulty(2) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + attacks = Vector() mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) - mobileTemplate.setCreatureName('krayt_dragon') - mobileTemplate.setScale(2) - mobileTemplate.setAttackRange(12) + core.spawnService.addMobileTemplate('krayt_dragon', mobileTemplate) - \ No newline at end of file + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/krayt_dragon_ancient.py b/scripts/mobiles/tatooine/krayt_dragon_ancient.py index a65f6786..0e8ba26c 100644 --- a/scripts/mobiles/tatooine/krayt_dragon_ancient.py +++ b/scripts/mobiles/tatooine/krayt_dragon_ancient.py @@ -1,19 +1,47 @@ import sys from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate from java.util import Vector def addTemplate(core): mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('krayt_dragon_ancient') + mobileTemplate.setLevel(90) + mobileTemplate.setMinLevel(89) + mobileTemplate.setMaxLevel(90) + mobileTemplate.setDifficulty(2) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(2.8) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(1700) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setBoneAmount(950) + mobileTemplate.setBoneType("Animal Bones") + mobileTemplate.setHideAmount(905) + mobileTemplate.setSocialGroup("krayt dragon") + mobileTemplate.setAssistRange(36) + mobileTemplate.setStalker(True) + + + templates = Vector() templates.add('object/mobile/shared_krayt_dragon.iff') mobileTemplate.setTemplates(templates) - mobileTemplate.setLevel(90) - mobileTemplate.setDifficulty(2) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + attacks = Vector() mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) - mobileTemplate.setCreatureName('krayt_dragon_ancient') - mobileTemplate.setScale(2) - mobileTemplate.setAttackRange(12) + core.spawnService.addMobileTemplate('krayt_dragon_ancient', mobileTemplate) - \ No newline at end of file + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/kreetle.py b/scripts/mobiles/tatooine/kreetle.py index 376add57..915acf5e 100644 --- a/scripts/mobiles/tatooine/kreetle.py +++ b/scripts/mobiles/tatooine/kreetle.py @@ -1,18 +1,43 @@ import sys from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate from java.util import Vector def addTemplate(core): mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('kreetle') + mobileTemplate.setLevel(5) + mobileTemplate.setMinLevel(4) + mobileTemplate.setMaxLevel(6) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(1) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(2) + mobileTemplate.setSocialGroup("kreetle") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + templates = Vector() templates.add('object/mobile/shared_kreetle.iff') - mobileTemplate.setCreatureName('kreetle') mobileTemplate.setTemplates(templates) - mobileTemplate.setAttackRange(5) - mobileTemplate.setAttackSpeed(5) - mobileTemplate.setLevel(5) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + attacks = Vector() mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) + core.spawnService.addMobileTemplate('kreetle', mobileTemplate) - \ No newline at end of file + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/kreetle_swarmling.py b/scripts/mobiles/tatooine/kreetle_swarmling.py new file mode 100644 index 00000000..a7d0acc1 --- /dev/null +++ b/scripts/mobiles/tatooine/kreetle_swarmling.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('kreetle_swarming') + mobileTemplate.setLevel(1) + mobileTemplate.setMinLevel(1) + mobileTemplate.setMaxLevel(3) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(1) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(2) + mobileTemplate.setSocialGroup("kreetle") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_kreetle.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('kreetle_swarmling', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/large_cave_beetle.py b/scripts/mobiles/tatooine/large_cave_beetle.py new file mode 100644 index 00000000..daa562ae --- /dev/null +++ b/scripts/mobiles/tatooine/large_cave_beetle.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('large_cave_beetle') + mobileTemplate.setLevel(21) + mobileTemplate.setMinLevel(21) + mobileTemplate.setMaxLevel(23) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(10) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(14) + mobileTemplate.setSocialGroup("rock beetle") + mobileTemplate.setAssistRange(5) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_rock_beetle.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/creature/shared_creature_spit_small_toxicgreen.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureRangedAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('large_cave_beetle', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/large_rock_beetle1.py b/scripts/mobiles/tatooine/large_rock_beetle1.py new file mode 100644 index 00000000..fec7bf8e --- /dev/null +++ b/scripts/mobiles/tatooine/large_rock_beetle1.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('large_rock_beetle') + mobileTemplate.setLevel(18) + mobileTemplate.setMinLevel(17) + mobileTemplate.setMaxLevel(18) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(6) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(8) + mobileTemplate.setSocialGroup("rock beetle") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_rock_beetle.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/creature/shared_creature_spit_small_toxicgreen.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureRangedAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('large_rock_beetle_1', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/large_rock_beetle2.py b/scripts/mobiles/tatooine/large_rock_beetle2.py new file mode 100644 index 00000000..eb2a89c6 --- /dev/null +++ b/scripts/mobiles/tatooine/large_rock_beetle2.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('large_rock_beetle') + mobileTemplate.setLevel(19) + mobileTemplate.setMinLevel(18) + mobileTemplate.setMaxLevel(20) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(10) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(14) + mobileTemplate.setSocialGroup("rock beetle") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_rock_beetle.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('large_rock_beetle_2', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/large_rock_beetle3.py b/scripts/mobiles/tatooine/large_rock_beetle3.py new file mode 100644 index 00000000..cfb3248c --- /dev/null +++ b/scripts/mobiles/tatooine/large_rock_beetle3.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('large_rock_beetle') + mobileTemplate.setLevel(19) + mobileTemplate.setMinLevel(18) + mobileTemplate.setMaxLevel(20) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(12) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(16) + mobileTemplate.setSocialGroup("rock beetle") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_rock_beetle.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('large_rock_beetle_3', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/large_sand_beetle.py b/scripts/mobiles/tatooine/large_sand_beetle.py new file mode 100644 index 00000000..df30f8cf --- /dev/null +++ b/scripts/mobiles/tatooine/large_sand_beetle.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('large_sand_beetle') + mobileTemplate.setLevel(24) + mobileTemplate.setMinLevel(22) + mobileTemplate.setMaxLevel(25) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(10) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(14) + mobileTemplate.setSocialGroup("giant sand beetle") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_giant_sand_beetle.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('large_sand_beetle', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/lesser_bocatt.py b/scripts/mobiles/tatooine/lesser_bocatt.py new file mode 100644 index 00000000..e74c5f09 --- /dev/null +++ b/scripts/mobiles/tatooine/lesser_bocatt.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('lesser_bocatt') + mobileTemplate.setLevel(14) + mobileTemplate.setMinLevel(13) + mobileTemplate.setMaxLevel(15) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Reptilian Meat") + mobileTemplate.setMeatAmount(100) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(60) + mobileTemplate.setBoneType("Animal Bones") + mobileTemplate.setHideAmount(35) + mobileTemplate.setSocialGroup("bocatt") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_bocatt.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('lesser_bocatt', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/lesser_desert_womprat.py b/scripts/mobiles/tatooine/lesser_desert_womprat.py new file mode 100644 index 00000000..6d9de71d --- /dev/null +++ b/scripts/mobiles/tatooine/lesser_desert_womprat.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('lesser_desert_womprat') + mobileTemplate.setLevel(4) + mobileTemplate.setMinLevel(3) + mobileTemplate.setMaxLevel(5) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Wild Meat") + mobileTemplate.setMeatAmount(2) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(2) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(1) + mobileTemplate.setSocialGroup("womprat") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_lesser_desert_womp_rat.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('lesser_deser_womprat', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/lesser_dewback.py b/scripts/mobiles/tatooine/lesser_dewback.py new file mode 100644 index 00000000..a8dad881 --- /dev/null +++ b/scripts/mobiles/tatooine/lesser_dewback.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('lesser_dewback') + mobileTemplate.setLevel(4) + mobileTemplate.setMinLevel(3) + mobileTemplate.setMaxLevel(5) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Reptilian Meat") + mobileTemplate.setMeatAmount(175) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(125) + mobileTemplate.setBoneType("Animal Bones") + mobileTemplate.setHideAmount(100) + mobileTemplate.setSocialGroup("dewback") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dewback.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('lesser_dewback', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/malignant_squill.py b/scripts/mobiles/tatooine/malignant_squill.py new file mode 100644 index 00000000..44713158 --- /dev/null +++ b/scripts/mobiles/tatooine/malignant_squill.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('malignant_squill') + mobileTemplate.setLevel(50) + mobileTemplate.setMinLevel(48) + mobileTemplate.setMaxLevel(52) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(25) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(25) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(20) + mobileTemplate.setSocialGroup("squill") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_squill.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('malignant_squill', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/minor_worrt.py b/scripts/mobiles/tatooine/minor_worrt.py new file mode 100644 index 00000000..659b7bf9 --- /dev/null +++ b/scripts/mobiles/tatooine/minor_worrt.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('minor_worrt') + mobileTemplate.setLevel(3) + mobileTemplate.setMinLevel(2) + mobileTemplate.setMaxLevel(4) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Reptilian Meat") + mobileTemplate.setMeatAmount(3) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(3) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(1) + mobileTemplate.setSocialGroup("minor worrt") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_minor_worrt.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('minor_worrt', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/moisture_thief.py b/scripts/mobiles/tatooine/moisture_thief.py new file mode 100644 index 00000000..cc14293d --- /dev/null +++ b/scripts/mobiles/tatooine/moisture_thief.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('mission_moisture_thief') + mobileTemplate.setLevel(2) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(4) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("jabba") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_moisture_thief.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/sword/shared_sword_01.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('moisture_thief', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/mound_mite.py b/scripts/mobiles/tatooine/mound_mite.py new file mode 100644 index 00000000..581fde19 --- /dev/null +++ b/scripts/mobiles/tatooine/mound_mite.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('mound_mite') + mobileTemplate.setLevel(4) + mobileTemplate.setMinLevel(4) + mobileTemplate.setMaxLevel(7) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(3) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(4) + mobileTemplate.setSocialGroup("mound mite") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_mound_mite.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('mound_mite', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/mountain_dewback.py b/scripts/mobiles/tatooine/mountain_dewback.py new file mode 100644 index 00000000..d01a2c95 --- /dev/null +++ b/scripts/mobiles/tatooine/mountain_dewback.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('mountain_dewback') + mobileTemplate.setLevel(22) + mobileTemplate.setMinLevel(21) + mobileTemplate.setMaxLevel(23) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Reptilian Meat") + mobileTemplate.setMeatAmount(330) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(240) + mobileTemplate.setBoneType("Animal Bones") + mobileTemplate.setHideAmount(170) + mobileTemplate.setSocialGroup("dewback mountain") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_mountain_dewback.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('mountain_dewback', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/mountain_squill.py b/scripts/mobiles/tatooine/mountain_squill.py new file mode 100644 index 00000000..bf036a18 --- /dev/null +++ b/scripts/mobiles/tatooine/mountain_squill.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('mountain_squill') + mobileTemplate.setLevel(18) + mobileTemplate.setMinLevel(17) + mobileTemplate.setMaxLevel(19) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(3) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(3) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(2) + mobileTemplate.setSocialGroup("squill") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_mountain_squill.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('mountain_squill', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/mountain_squill_guardian.py b/scripts/mobiles/tatooine/mountain_squill_guardian.py new file mode 100644 index 00000000..5959aa53 --- /dev/null +++ b/scripts/mobiles/tatooine/mountain_squill_guardian.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('mountain_squill_guardian') + mobileTemplate.setLevel(19) + mobileTemplate.setMinLevel(18) + mobileTemplate.setMaxLevel(21) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(3) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(4) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(2) + mobileTemplate.setSocialGroup("squill") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_mountain_squill.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('mountain_squill_guardian', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/mountain_squill_hunter.py b/scripts/mobiles/tatooine/mountain_squill_hunter.py new file mode 100644 index 00000000..f744dcc5 --- /dev/null +++ b/scripts/mobiles/tatooine/mountain_squill_hunter.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('mountain_squill_hunter') + mobileTemplate.setLevel(19) + mobileTemplate.setMinLevel(18) + mobileTemplate.setMaxLevel(21) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(2) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(2) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(1) + mobileTemplate.setSocialGroup("squill") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_mountain_squill.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('mountain_squill_hunter', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/mountain_worrt.py b/scripts/mobiles/tatooine/mountain_worrt.py new file mode 100644 index 00000000..a20ef946 --- /dev/null +++ b/scripts/mobiles/tatooine/mountain_worrt.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('mountain_worrt') + mobileTemplate.setLevel(19) + mobileTemplate.setMinLevel(18) + mobileTemplate.setMaxLevel(21) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Reptilian Meat") + mobileTemplate.setMeatAmount(4) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(3) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(2) + mobileTemplate.setSocialGroup("mountain worrt") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_worrt.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/creature/shared_creature_spit_small_toxicgreen.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureRangedAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('mountain_worrt', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/mutant_womprat.py b/scripts/mobiles/tatooine/mutant_womprat.py new file mode 100644 index 00000000..2bb9cb93 --- /dev/null +++ b/scripts/mobiles/tatooine/mutant_womprat.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('mutant_womprat') + mobileTemplate.setLevel(12) + mobileTemplate.setMinLevel(11) + mobileTemplate.setMaxLevel(13) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Wild Meat") + mobileTemplate.setMeatAmount(6) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(5) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(4) + mobileTemplate.setSocialGroup("womprat") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_womp_rat.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('womprat', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/overkreetle.py b/scripts/mobiles/tatooine/overkreetle.py new file mode 100644 index 00000000..3f47de1a --- /dev/null +++ b/scripts/mobiles/tatooine/overkreetle.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('kreetle_over') + mobileTemplate.setLevel(11) + mobileTemplate.setMinLevel(10) + mobileTemplate.setMaxLevel(12) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(8) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(12) + mobileTemplate.setSocialGroup("uber kreetle") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_kreetle.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('overkreetle', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/parry_stormtrooper_dewback.py b/scripts/mobiles/tatooine/parry_stormtrooper_dewback.py new file mode 100644 index 00000000..8090d862 --- /dev/null +++ b/scripts/mobiles/tatooine/parry_stormtrooper_dewback.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('parry_stormtrooper_dewback') + mobileTemplate.setLevel(17) + mobileTemplate.setMinLevel(16) + mobileTemplate.setMaxLevel(18) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Reptilian Meat") + mobileTemplate.setMeatAmount(360) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(275) + mobileTemplate.setBoneType("Animal Bones") + mobileTemplate.setHideAmount(250) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dewback_armored.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('parry_stormtrooper_dewback', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/pirate.py b/scripts/mobiles/tatooine/pirate.py new file mode 100644 index 00000000..843c31ee --- /dev/null +++ b/scripts/mobiles/tatooine/pirate.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('mission_pirate') + mobileTemplate.setLevel(20) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("pirate") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dressed_pirate_plunderer_of_tatooine.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('pirate', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/pirate_leader.py b/scripts/mobiles/tatooine/pirate_leader.py new file mode 100644 index 00000000..bdcbde3e --- /dev/null +++ b/scripts/mobiles/tatooine/pirate_leader.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('mission_pirate_leader') + mobileTemplate.setLevel(23) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("pirate") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dressed_pirate_leader_of_tatooine.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('pirate_leader', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/plaque_rat.py b/scripts/mobiles/tatooine/plaque_rat.py new file mode 100644 index 00000000..2eabdeef --- /dev/null +++ b/scripts/mobiles/tatooine/plaque_rat.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('womprat_plague') + mobileTemplate.setLevel(11) + mobileTemplate.setMinLevel(10) + mobileTemplate.setMaxLevel(12) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Wild Meat") + mobileTemplate.setMeatAmount(4) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(3) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(2) + mobileTemplate.setSocialGroup("womprat") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_womp_rat.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('plaque_womprat', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/plaque_victim.py b/scripts/mobiles/tatooine/plaque_victim.py new file mode 100644 index 00000000..ab3288f4 --- /dev/null +++ b/scripts/mobiles/tatooine/plaque_victim.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('mission_plague_victim') + mobileTemplate.setLevel(2) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("pirate") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_plague_victim.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('plague_victim', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/r3-b57.py b/scripts/mobiles/tatooine/r3-b57.py new file mode 100644 index 00000000..0781f8ca --- /dev/null +++ b/scripts/mobiles/tatooine/r3-b57.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('legacy_r3_droid') + mobileTemplate.setLevel(22) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("astromech") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_r3.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e5.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('r3b57', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/ra-316.py b/scripts/mobiles/tatooine/ra-316.py new file mode 100644 index 00000000..eb7e6db1 --- /dev/null +++ b/scripts/mobiles/tatooine/ra-316.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('legacy_ra_droid') + mobileTemplate.setLevel(22) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("astromech") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_protocol_droid.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e5.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('ra316', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/razorback_felspur.py b/scripts/mobiles/tatooine/razorback_felspur.py new file mode 100644 index 00000000..3c66dae3 --- /dev/null +++ b/scripts/mobiles/tatooine/razorback_felspur.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('desert_razorback_felspur') + mobileTemplate.setLevel(24) + mobileTemplate.setMinLevel(23) + mobileTemplate.setMaxLevel(25) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(65) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(40) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(25) + mobileTemplate.setSocialGroup("zucca Boar") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_zucca_boar.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('razorback_felspur', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/razorclaw.py b/scripts/mobiles/tatooine/razorclaw.py new file mode 100644 index 00000000..f1ad041d --- /dev/null +++ b/scripts/mobiles/tatooine/razorclaw.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('elite_desert_razorback') + mobileTemplate.setLevel(24) + mobileTemplate.setMinLevel(23) + mobileTemplate.setMaxLevel(25) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(65) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(40) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(25) + mobileTemplate.setSocialGroup("zucca Boar") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_zucca_boar.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('razorclaw', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/rill.py b/scripts/mobiles/tatooine/rill.py index 9e82c0c2..e5715117 100644 --- a/scripts/mobiles/tatooine/rill.py +++ b/scripts/mobiles/tatooine/rill.py @@ -8,10 +8,25 @@ def addTemplate(core): mobileTemplate.setCreatureName('rill') mobileTemplate.setLevel(5) + mobileTemplate.setMinLevel(4) + mobileTemplate.setMaxLevel(6) mobileTemplate.setDifficulty(0) mobileTemplate.setAttackRange(5) - mobileTemplate.setWeaponType(6) mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(35) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setBoneAmount(20) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(30) + mobileTemplate.setSocialGroup("rill") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) templates = Vector() templates.add('object/mobile/shared_rill.iff') diff --git a/scripts/mobiles/tatooine/rock_beetle.py b/scripts/mobiles/tatooine/rock_beetle.py new file mode 100644 index 00000000..56e756c9 --- /dev/null +++ b/scripts/mobiles/tatooine/rock_beetle.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('rock_beetle') + mobileTemplate.setLevel(18) + mobileTemplate.setMinLevel(17) + mobileTemplate.setMaxLevel(18) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(8) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(10) + mobileTemplate.setSocialGroup("rock beetle") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_rock_beetle.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/creature/shared_creature_spit_small_toxicgreen.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureRangedAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('rock_beetle', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/rock_beetle1.py b/scripts/mobiles/tatooine/rock_beetle1.py new file mode 100644 index 00000000..f4760b94 --- /dev/null +++ b/scripts/mobiles/tatooine/rock_beetle1.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('rock_beetle') + mobileTemplate.setLevel(19) + mobileTemplate.setMinLevel(18) + mobileTemplate.setMaxLevel(19) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(6) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(8) + mobileTemplate.setSocialGroup("rock beetle") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_rock_beetle.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/creature/shared_creature_spit_small_toxicgreen.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureRangedAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('rock_beetle_1', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/rock_beetle_cave.py b/scripts/mobiles/tatooine/rock_beetle_cave.py new file mode 100644 index 00000000..20296315 --- /dev/null +++ b/scripts/mobiles/tatooine/rock_beetle_cave.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('rock_beetle_cave') + mobileTemplate.setLevel(19) + mobileTemplate.setMinLevel(18) + mobileTemplate.setMaxLevel(19) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(9) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(10) + mobileTemplate.setSocialGroup("rock beetle") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_rock_beetle.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/creature/shared_creature_spit_small_toxicgreen.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureRangedAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('rock_beetle_cave', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/rockmite.py b/scripts/mobiles/tatooine/rockmite.py new file mode 100644 index 00000000..6a2422c9 --- /dev/null +++ b/scripts/mobiles/tatooine/rockmite.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('rockmite') + mobileTemplate.setLevel(8) + mobileTemplate.setMinLevel(7) + mobileTemplate.setMaxLevel(9) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(3) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(4) + mobileTemplate.setSocialGroup("rockmite") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_rock_mite.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('rockmite', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/rodian_clan_captain.py b/scripts/mobiles/tatooine/rodian_clan_captain.py new file mode 100644 index 00000000..c0222c25 --- /dev/null +++ b/scripts/mobiles/tatooine/rodian_clan_captain.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('mission_rodian_clan_captain') + mobileTemplate.setLevel(15) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("rodian") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_rodian_clan_captain.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('rodian_clan_captain', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/rodian_clan_medic.py b/scripts/mobiles/tatooine/rodian_clan_medic.py new file mode 100644 index 00000000..af8bf5e4 --- /dev/null +++ b/scripts/mobiles/tatooine/rodian_clan_medic.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('mission_rodian_clan_medic') + mobileTemplate.setLevel(14) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("rodian") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_rodian_clan_medic.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('rodian_clan_medic', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/rodian_clan_warchief.py b/scripts/mobiles/tatooine/rodian_clan_warchief.py new file mode 100644 index 00000000..4d65378a --- /dev/null +++ b/scripts/mobiles/tatooine/rodian_clan_warchief.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('mission_rodian_clan_warchief') + mobileTemplate.setLevel(15) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("rodian") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_rodian_clan_warchief.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('rodian_clan_warchief', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/rodian_gladiator.py b/scripts/mobiles/tatooine/rodian_gladiator.py new file mode 100644 index 00000000..80061aaa --- /dev/null +++ b/scripts/mobiles/tatooine/rodian_gladiator.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('mission_rodian_gladiator') + mobileTemplate.setLevel(14) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("rodian") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_rodian_gladiator.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('rodian_gladiator', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/ronto.py b/scripts/mobiles/tatooine/ronto.py new file mode 100644 index 00000000..d2d2af5b --- /dev/null +++ b/scripts/mobiles/tatooine/ronto.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('ronto') + mobileTemplate.setLevel(7) + mobileTemplate.setMinLevel(16) + mobileTemplate.setMaxLevel(18) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(450) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(300) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(180) + mobileTemplate.setSocialGroup("ronto") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_ronto.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('ronto', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/runted_rill.py b/scripts/mobiles/tatooine/runted_rill.py new file mode 100644 index 00000000..a30260ab --- /dev/null +++ b/scripts/mobiles/tatooine/runted_rill.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('runted_rill') + mobileTemplate.setLevel(1) + mobileTemplate.setMinLevel(1) + mobileTemplate.setMaxLevel(3) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(3) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setBoneAmount(3) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(3) + mobileTemplate.setSocialGroup("rill") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_rill.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('runted_rill', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/sand_beetle.py b/scripts/mobiles/tatooine/sand_beetle.py new file mode 100644 index 00000000..ed46a5ec --- /dev/null +++ b/scripts/mobiles/tatooine/sand_beetle.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('sand_beetle') + mobileTemplate.setLevel(22) + mobileTemplate.setMinLevel(22) + mobileTemplate.setMaxLevel(24) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(6) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(8) + mobileTemplate.setSocialGroup("giant sand beetle") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_giant_sand_beetle.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('sand_beetle', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/sandcrawler_crewman.py b/scripts/mobiles/tatooine/sandcrawler_crewman.py new file mode 100644 index 00000000..c498f075 --- /dev/null +++ b/scripts/mobiles/tatooine/sandcrawler_crewman.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('legacy_jawa_grunt') + mobileTemplate.setLevel(16) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(2) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("jawa") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_jawa.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_cdef.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshotpistol') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('sandcrawler_crewman', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/sandreaver.py b/scripts/mobiles/tatooine/sandreaver.py new file mode 100644 index 00000000..758f0fa4 --- /dev/null +++ b/scripts/mobiles/tatooine/sandreaver.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('dewback_sandreaver') + mobileTemplate.setLevel(18) + mobileTemplate.setMinLevel(17) + mobileTemplate.setMaxLevel(19) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Reptilian Meat") + mobileTemplate.setMeatAmount(340) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(260) + mobileTemplate.setBoneType("Animal Bones") + mobileTemplate.setHideAmount(185) + mobileTemplate.setSocialGroup("dewback") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dewback.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('sandreaver', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/savage_zucca_boar.py b/scripts/mobiles/tatooine/savage_zucca_boar.py new file mode 100644 index 00000000..3f7981fe --- /dev/null +++ b/scripts/mobiles/tatooine/savage_zucca_boar.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('elite_zucca_boar') + mobileTemplate.setLevel(8) + mobileTemplate.setMinLevel(8) + mobileTemplate.setMaxLevel(9) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(65) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(40) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(25) + mobileTemplate.setSocialGroup("zucca boar") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_zucca_boar.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('savage_zucca_boar', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/scavenger.py b/scripts/mobiles/tatooine/scavenger.py new file mode 100644 index 00000000..e3fdaa44 --- /dev/null +++ b/scripts/mobiles/tatooine/scavenger.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('mission_scavenger') + mobileTemplate.setLevel(4) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(2) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("thug") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_scavenger.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_cdef.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshotpistol') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('scavenger', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/scyk.py b/scripts/mobiles/tatooine/scyk.py new file mode 100644 index 00000000..4b8a0267 --- /dev/null +++ b/scripts/mobiles/tatooine/scyk.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('scyk') + mobileTemplate.setLevel(11) + mobileTemplate.setMinLevel(11) + mobileTemplate.setMaxLevel(13) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(40) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setBoneAmount(25) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(18) + mobileTemplate.setSocialGroup("scyk") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_scyk.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('scyk', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/sennex_guard.py b/scripts/mobiles/tatooine/sennex_guard.py new file mode 100644 index 00000000..bfd1cf5a --- /dev/null +++ b/scripts/mobiles/tatooine/sennex_guard.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('sennex_guard') + mobileTemplate.setLevel(20) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("sennex") + mobileTemplate.setAssistRange(5) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dressed_sennex_pirate_01.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_02.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_03.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_04.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_05.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_06.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_07.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_08.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_09.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_10.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_11.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_12.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('sennex_guard', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/sennex_hunter.py b/scripts/mobiles/tatooine/sennex_hunter.py new file mode 100644 index 00000000..1cfb2ff9 --- /dev/null +++ b/scripts/mobiles/tatooine/sennex_hunter.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('sennex_hunter') + mobileTemplate.setLevel(22) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("sennex") + mobileTemplate.setAssistRange(5) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dressed_sennex_pirate_01.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_02.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_03.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_04.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_05.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_06.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_07.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_08.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_09.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_10.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_11.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_12.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_cdef.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('sennex_hunter', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/sennex_lookout.py b/scripts/mobiles/tatooine/sennex_lookout.py new file mode 100644 index 00000000..46fb6d4d --- /dev/null +++ b/scripts/mobiles/tatooine/sennex_lookout.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('sennex_lookout') + mobileTemplate.setLevel(18) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("sennex") + mobileTemplate.setAssistRange(5) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dressed_sennex_pirate_01.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_02.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_03.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_04.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_05.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_06.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_07.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_08.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_09.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_10.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_11.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_12.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('sennex_lookout', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/sennex_slavemaster.py b/scripts/mobiles/tatooine/sennex_slavemaster.py new file mode 100644 index 00000000..1e1bce16 --- /dev/null +++ b/scripts/mobiles/tatooine/sennex_slavemaster.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('sennex_slaver') + mobileTemplate.setLevel(24) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("sennex") + mobileTemplate.setAssistRange(5) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dressed_sennex_pirate_01.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_02.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_03.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_04.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_05.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_06.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_07.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_08.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_09.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_10.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_11.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_12.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('sennex_slaver', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/sennex_slaver.py b/scripts/mobiles/tatooine/sennex_slaver.py new file mode 100644 index 00000000..20ae5fc2 --- /dev/null +++ b/scripts/mobiles/tatooine/sennex_slaver.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('sennex_slavemaster') + mobileTemplate.setLevel(22) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("sennex") + mobileTemplate.setAssistRange(5) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dressed_sennex_pirate_01.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_02.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_03.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_04.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_05.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_06.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_07.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_08.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_09.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_10.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_11.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_12.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('sennex_slavemaster', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/sennex_warder.py b/scripts/mobiles/tatooine/sennex_warder.py new file mode 100644 index 00000000..325abe04 --- /dev/null +++ b/scripts/mobiles/tatooine/sennex_warder.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('sennex_warder') + mobileTemplate.setLevel(21) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("sennex") + mobileTemplate.setAssistRange(5) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dressed_sennex_pirate_01.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_02.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_03.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_04.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_05.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_06.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_07.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_08.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_09.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_10.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_11.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_12.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('sennex_warder', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/sevorrt.py b/scripts/mobiles/tatooine/sevorrt.py new file mode 100644 index 00000000..3ea14405 --- /dev/null +++ b/scripts/mobiles/tatooine/sevorrt.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('sevorrt') + mobileTemplate.setLevel(5) + mobileTemplate.setMinLevel(4) + mobileTemplate.setMaxLevel(6) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Reptilian Meat") + mobileTemplate.setMeatAmount(10) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(10) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(4) + mobileTemplate.setSocialGroup("sevorrt") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_sevorrt.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('sevorrt', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/sewer_worrt.py b/scripts/mobiles/tatooine/sewer_worrt.py new file mode 100644 index 00000000..377c28bf --- /dev/null +++ b/scripts/mobiles/tatooine/sewer_worrt.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('sewer_worrt') + mobileTemplate.setLevel(5) + mobileTemplate.setMinLevel(4) + mobileTemplate.setMaxLevel(6) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Reptilian Meat") + mobileTemplate.setMeatAmount(3) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(3) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(1) + mobileTemplate.setSocialGroup("minor worrt") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_worrt.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('sewer_worrt', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/shinn_guard.py b/scripts/mobiles/tatooine/shinn_guard.py new file mode 100644 index 00000000..222b067e --- /dev/null +++ b/scripts/mobiles/tatooine/shinn_guard.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tatooine_shinn_guard') + mobileTemplate.setLevel(8) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("shinn mugger") + mobileTemplate.setAssistRange(5) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dressed_mugger.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('shinn_guard', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/shinn_mugger.py b/scripts/mobiles/tatooine/shinn_mugger.py new file mode 100644 index 00000000..f55cedc4 --- /dev/null +++ b/scripts/mobiles/tatooine/shinn_mugger.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tatooine_shinn_mugger') + mobileTemplate.setLevel(7) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("shinn mugger") + mobileTemplate.setAssistRange(5) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dressed_mugger.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('shinn_mugger', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/sickly_womprat.py b/scripts/mobiles/tatooine/sickly_womprat.py new file mode 100644 index 00000000..2a4fabf5 --- /dev/null +++ b/scripts/mobiles/tatooine/sickly_womprat.py @@ -0,0 +1,47 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('sickly_womprat') + mobileTemplate.setLevel(4) + mobileTemplate.setMinLevel(4) + mobileTemplate.setMaxLevel(13) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Wild Meat") + mobileTemplate.setMeatAmount(2) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(2) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(1) + mobileTemplate.setSocialGroup("womprat") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + + + + templates = Vector() + templates.add('object/mobile/shared_womp_rat.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('sickly_womprat', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/sirad_far.py b/scripts/mobiles/tatooine/sirad_far.py new file mode 100644 index 00000000..381c068f --- /dev/null +++ b/scripts/mobiles/tatooine/sirad_far.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('sirad_far') + mobileTemplate.setLevel(20) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("jabba") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_sirad_far.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('sirad_far', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/slum_rat.py b/scripts/mobiles/tatooine/slum_rat.py new file mode 100644 index 00000000..3aa000c5 --- /dev/null +++ b/scripts/mobiles/tatooine/slum_rat.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('womprat_city') + mobileTemplate.setLevel(5) + mobileTemplate.setMinLevel(4) + mobileTemplate.setMaxLevel(6) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Wild Meat") + mobileTemplate.setMeatAmount(7) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(7) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(3) + mobileTemplate.setSocialGroup("womprat") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_womp_rat.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('slum_rat', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/snarlfang.py b/scripts/mobiles/tatooine/snarlfang.py new file mode 100644 index 00000000..1b36ccc7 --- /dev/null +++ b/scripts/mobiles/tatooine/snarlfang.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('elite_bocatt') + mobileTemplate.setLevel(17) + mobileTemplate.setMinLevel(17) + mobileTemplate.setMaxLevel(18) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Reptilian Meat") + mobileTemplate.setMeatAmount(100) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(60) + mobileTemplate.setBoneType("Animal Bones") + mobileTemplate.setHideAmount(35) + mobileTemplate.setSocialGroup("bocatt") + mobileTemplate.setAssistRange(8) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_bocatt.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/creature/shared_creature_spit_small_toxicgreen.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureRangedAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('snarlfang', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/squill.py b/scripts/mobiles/tatooine/squill.py new file mode 100644 index 00000000..a94b2218 --- /dev/null +++ b/scripts/mobiles/tatooine/squill.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('squill') + mobileTemplate.setLevel(12) + mobileTemplate.setMinLevel(11) + mobileTemplate.setMaxLevel(13) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(6) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(6) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(5) + mobileTemplate.setSocialGroup("squill") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_squill.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('squill', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/stormtrooper_dewback.py b/scripts/mobiles/tatooine/stormtrooper_dewback.py new file mode 100644 index 00000000..4f001b45 --- /dev/null +++ b/scripts/mobiles/tatooine/stormtrooper_dewback.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('stormtrooper_dewback') + mobileTemplate.setLevel(14) + mobileTemplate.setMinLevel(13) + mobileTemplate.setMaxLevel(15) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Reptilian Meat") + mobileTemplate.setMeatAmount(360) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(275) + mobileTemplate.setBoneType("Animal Bones") + mobileTemplate.setHideAmount(250) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dewback_armored.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('stormtrooper_dewback', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/sunstained_dunelizard.py b/scripts/mobiles/tatooine/sunstained_dunelizard.py new file mode 100644 index 00000000..035d5967 --- /dev/null +++ b/scripts/mobiles/tatooine/sunstained_dunelizard.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('dune_lizard_sunstained') + mobileTemplate.setLevel(19) + mobileTemplate.setMinLevel(18) + mobileTemplate.setMaxLevel(20) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(85) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setBoneAmount(50) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(35) + mobileTemplate.setSocialGroup("dune lizard") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_dune_lizard.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('sunstained_dune_lizard', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/swarming_lesser_dewback.py b/scripts/mobiles/tatooine/swarming_lesser_dewback.py new file mode 100644 index 00000000..b1a547fd --- /dev/null +++ b/scripts/mobiles/tatooine/swarming_lesser_dewback.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('swarming_lesser_dewback') + mobileTemplate.setLevel(13) + mobileTemplate.setMinLevel(12) + mobileTemplate.setMaxLevel(14) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Reptilian Meat") + mobileTemplate.setMeatAmount(175) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(125) + mobileTemplate.setBoneType("Animal Bones") + mobileTemplate.setHideAmount(100) + mobileTemplate.setSocialGroup("dewback") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_swarming_lesser_dewback.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('swarming_lesser_dewback', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/swoop_gang_enforcer.py b/scripts/mobiles/tatooine/swoop_gang_enforcer.py new file mode 100644 index 00000000..bb5a49cd --- /dev/null +++ b/scripts/mobiles/tatooine/swoop_gang_enforcer.py @@ -0,0 +1,41 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tatooine_opening_smuggler_12') + mobileTemplate.setLevel(10) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("niko thug") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_criminal_swooper_human_female_01.iff') + templates.add('object/mobile/shared_dressed_criminal_swooper_human_male_01.iff') + templates.add('object/mobile/shared_dressed_criminal_swooper_zabrak_female_01.iff') + templates.add('object/mobile/shared_dressed_criminal_swooper_zabrak_male_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_cdef.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('swoop_gang_enforcer', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/swoop_gang_punk.py b/scripts/mobiles/tatooine/swoop_gang_punk.py new file mode 100644 index 00000000..d33bfa86 --- /dev/null +++ b/scripts/mobiles/tatooine/swoop_gang_punk.py @@ -0,0 +1,41 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tatooine_opening_smuggler_08') + mobileTemplate.setLevel(7) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("niko thug") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_criminal_swooper_human_female_01.iff') + templates.add('object/mobile/shared_dressed_criminal_swooper_human_male_01.iff') + templates.add('object/mobile/shared_dressed_criminal_swooper_zabrak_female_01.iff') + templates.add('object/mobile/shared_dressed_criminal_swooper_zabrak_male_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_cdef.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshotpistol') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('swoop_gang_punk', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/swoop_gang_rogue.py b/scripts/mobiles/tatooine/swoop_gang_rogue.py new file mode 100644 index 00000000..53c58ed9 --- /dev/null +++ b/scripts/mobiles/tatooine/swoop_gang_rogue.py @@ -0,0 +1,40 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tatooine_opening_smuggler_10') + mobileTemplate.setLevel(9) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("niko thug") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dressed_criminal_swooper_human_female_01.iff') + templates.add('object/mobile/shared_dressed_criminal_swooper_human_male_01.iff') + templates.add('object/mobile/shared_dressed_criminal_swooper_zabrak_female_01.iff') + templates.add('object/mobile/shared_dressed_criminal_swooper_zabrak_male_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('swoop_gang_rogue', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/swoop_gang_thug.py b/scripts/mobiles/tatooine/swoop_gang_thug.py new file mode 100644 index 00000000..79d66a7a --- /dev/null +++ b/scripts/mobiles/tatooine/swoop_gang_thug.py @@ -0,0 +1,40 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tatooine_opening_smuggler_09') + mobileTemplate.setLevel(8) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("niko thug") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dressed_criminal_swooper_human_female_01.iff') + templates.add('object/mobile/shared_dressed_criminal_swooper_human_male_01.iff') + templates.add('object/mobile/shared_dressed_criminal_swooper_zabrak_female_01.iff') + templates.add('object/mobile/shared_dressed_criminal_swooper_zabrak_male_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_cdef.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshotpistol') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('swoop_gang_thug', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/swooper.py b/scripts/mobiles/tatooine/swooper.py new file mode 100644 index 00000000..f93c2dcd --- /dev/null +++ b/scripts/mobiles/tatooine/swooper.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('mission_swooper') + mobileTemplate.setLevel(1) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("niko thug") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dressed_criminal_swooper_human_female_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('swooper', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tame_rill.py b/scripts/mobiles/tatooine/tame_rill.py new file mode 100644 index 00000000..283b7973 --- /dev/null +++ b/scripts/mobiles/tatooine/tame_rill.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tame_rill') + mobileTemplate.setLevel(1) + mobileTemplate.setMinLevel(1) + mobileTemplate.setMaxLevel(3) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(3) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setBoneAmount(3) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(1) + mobileTemplate.setSocialGroup("rill") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_rill.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tame_rill', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tame_womprat.py b/scripts/mobiles/tatooine/tame_womprat.py new file mode 100644 index 00000000..e0882686 --- /dev/null +++ b/scripts/mobiles/tatooine/tame_womprat.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tame_womprat') + mobileTemplate.setLevel(2) + mobileTemplate.setMinLevel(1) + mobileTemplate.setMaxLevel(4) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Wild Meat") + mobileTemplate.setMeatAmount(2) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(2) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(1) + mobileTemplate.setSocialGroup("womprat") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_womp_rat.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tame_womprat', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tame_worrt.py b/scripts/mobiles/tatooine/tame_worrt.py new file mode 100644 index 00000000..999bad4e --- /dev/null +++ b/scripts/mobiles/tatooine/tame_worrt.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tame_worrt') + mobileTemplate.setLevel(5) + mobileTemplate.setMinLevel(4) + mobileTemplate.setMaxLevel(6) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Reptilian Meat") + mobileTemplate.setMeatAmount(5) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(5) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(2) + mobileTemplate.setSocialGroup("worrt") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_worrt_hue.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tame_worrt', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tatooine_mynock.py b/scripts/mobiles/tatooine/tatooine_mynock.py new file mode 100644 index 00000000..51935e8c --- /dev/null +++ b/scripts/mobiles/tatooine/tatooine_mynock.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tatooine_mynock') + mobileTemplate.setLevel(2) + mobileTemplate.setMinLevel(1) + mobileTemplate.setMaxLevel(3) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(20) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(70) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(20) + mobileTemplate.setSocialGroup("tatooine mynock") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_mynock.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tatooine_mynock', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tempest_rill.py b/scripts/mobiles/tatooine/tempest_rill.py new file mode 100644 index 00000000..b7b0ac66 --- /dev/null +++ b/scripts/mobiles/tatooine/tempest_rill.py @@ -0,0 +1,47 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('rill_tempest') + mobileTemplate.setLevel(8) + mobileTemplate.setMinLevel(8) + mobileTemplate.setMaxLevel(10) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(35) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setBoneAmount(20) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(15) + mobileTemplate.setSocialGroup("rill") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + + + templates = Vector() + templates.add('object/mobile/shared_rill.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tempest_rill', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/thief.py b/scripts/mobiles/tatooine/thief.py new file mode 100644 index 00000000..0202fd23 --- /dev/null +++ b/scripts/mobiles/tatooine/thief.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('mission_thief') + mobileTemplate.setLevel(8) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(4) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("jabba") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_jabba_thief.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/sword/shared_sword_01.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('thief', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tormented_bocatt.py b/scripts/mobiles/tatooine/tormented_bocatt.py new file mode 100644 index 00000000..549ff0c2 --- /dev/null +++ b/scripts/mobiles/tatooine/tormented_bocatt.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('bocatt_tormented') + mobileTemplate.setLevel(18) + mobileTemplate.setMinLevel(17) + mobileTemplate.setMaxLevel(19) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Reptilian Meat") + mobileTemplate.setMeatAmount(100) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(60) + mobileTemplate.setBoneType("Animal Bones") + mobileTemplate.setHideAmount(35) + mobileTemplate.setSocialGroup("bocatt") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_bocatt.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/creature/shared_creature_spit_small_toxicgreen.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureRangedAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tormented_bocatt', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/trandoshan_slavemaster.py b/scripts/mobiles/tatooine/trandoshan_slavemaster.py new file mode 100644 index 00000000..4a40d6ce --- /dev/null +++ b/scripts/mobiles/tatooine/trandoshan_slavemaster.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('ep3_trandoshan_slavermaster') + mobileTemplate.setLevel(2) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("slaver") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_ep3_trando_slavemaster_01.iff') + templates.add('object/mobile/shared_ep3_trando_slavemaster_02.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('trandoshan_slavemaster', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/trandoshan_slaver.py b/scripts/mobiles/tatooine/trandoshan_slaver.py new file mode 100644 index 00000000..ffe95f3e --- /dev/null +++ b/scripts/mobiles/tatooine/trandoshan_slaver.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('ep3_trandoshan_slaver') + mobileTemplate.setLevel(4) + mobileTemplate.setMinLevel(1) + mobileTemplate.setMaxLevel(4) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("slaver") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_ep3_trando_slaver_01.iff') + templates.add('object/mobile/shared_ep3_trando_slaver_02.iff') + templates.add('object/mobile/shared_ep3_trando_slaver_03.iff') + templates.add('object/mobile/shared_ep3_trando_slaver_04.iff') + templates.add('object/mobile/shared_ep3_trando_slaver_05.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('trandoshan_slaver', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tusken_avenger.py b/scripts/mobiles/tatooine/tusken_avenger.py new file mode 100644 index 00000000..76b057b1 --- /dev/null +++ b/scripts/mobiles/tatooine/tusken_avenger.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tusken_avenger') + mobileTemplate.setLevel(30) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("tusken raider") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_tusken_raider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_tusken_generic.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tusken_avenger', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tusken_bantha.py b/scripts/mobiles/tatooine/tusken_bantha.py new file mode 100644 index 00000000..5db92815 --- /dev/null +++ b/scripts/mobiles/tatooine/tusken_bantha.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('feeder_tusken_bantha') + mobileTemplate.setLevel(30) + mobileTemplate.setMinLevel(29) + mobileTemplate.setMaxLevel(31) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(475) + mobileTemplate.setHideType("Wooly Hide") + mobileTemplate.setHideAmount(350) + mobileTemplate.setBoneType("Animal Bones") + mobileTemplate.setBoneAmount(375) + mobileTemplate.setSocialGroup("tusken raider") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_bantha_hue.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tusken_bantha', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tusken_berserker.py b/scripts/mobiles/tatooine/tusken_berserker.py new file mode 100644 index 00000000..065429a4 --- /dev/null +++ b/scripts/mobiles/tatooine/tusken_berserker.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tusken_berserker') + mobileTemplate.setLevel(31) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("tusken raider") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_tusken_raider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_tusken_generic.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tusken_berserker', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tusken_blood_champion.py b/scripts/mobiles/tatooine/tusken_blood_champion.py new file mode 100644 index 00000000..39a2d86e --- /dev/null +++ b/scripts/mobiles/tatooine/tusken_blood_champion.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tusken_blood_champion') + mobileTemplate.setLevel(32) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("tusken raider") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_tusken_raider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_tusken_generic.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tusken_blood_champion', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tusken_brute.py b/scripts/mobiles/tatooine/tusken_brute.py new file mode 100644 index 00000000..a6556ae5 --- /dev/null +++ b/scripts/mobiles/tatooine/tusken_brute.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tusken_brute') + mobileTemplate.setLevel(31) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("tusken raider") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_tusken_raider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_tusken_generic.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tusken_brute', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tusken_captain.py b/scripts/mobiles/tatooine/tusken_captain.py new file mode 100644 index 00000000..5df64ce0 --- /dev/null +++ b/scripts/mobiles/tatooine/tusken_captain.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tusken_chief') + mobileTemplate.setLevel(34) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("tusken raider") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_tusken_raider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_tusken_generic.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tusken_chief', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tusken_carnage_champion.py b/scripts/mobiles/tatooine/tusken_carnage_champion.py new file mode 100644 index 00000000..6ae5f705 --- /dev/null +++ b/scripts/mobiles/tatooine/tusken_carnage_champion.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tusken_fort_tusken_champion') + mobileTemplate.setLevel(34) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("tusken raider") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_tusken_raider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_tusken_generic.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tusken_carnage_champion', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tusken_chief.py b/scripts/mobiles/tatooine/tusken_chief.py new file mode 100644 index 00000000..42bdd4f0 --- /dev/null +++ b/scripts/mobiles/tatooine/tusken_chief.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tusken_captain') + mobileTemplate.setLevel(33) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("tusken raider") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_tusken_raider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_tusken_generic.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tusken_captain', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tusken_commoner.py b/scripts/mobiles/tatooine/tusken_commoner.py new file mode 100644 index 00000000..40d20d49 --- /dev/null +++ b/scripts/mobiles/tatooine/tusken_commoner.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tusken_commoner') + mobileTemplate.setLevel(30) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("tusken raider") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_tusken_raider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_tusken_generic.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tusken_commoner', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tusken_death_hunter.py b/scripts/mobiles/tatooine/tusken_death_hunter.py new file mode 100644 index 00000000..3f840963 --- /dev/null +++ b/scripts/mobiles/tatooine/tusken_death_hunter.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tusken_death_hunter') + mobileTemplate.setLevel(32) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("tusken raider") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_tusken_raider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_tusken_generic.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tusken_death_hunter', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tusken_elite_guard.py b/scripts/mobiles/tatooine/tusken_elite_guard.py new file mode 100644 index 00000000..83c20580 --- /dev/null +++ b/scripts/mobiles/tatooine/tusken_elite_guard.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tusken_elite_guard') + mobileTemplate.setLevel(34) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("tusken raider") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_tusken_raider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_tusken_generic.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tusken_elite_guard', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tusken_executioner.py b/scripts/mobiles/tatooine/tusken_executioner.py new file mode 100644 index 00000000..7d80beff --- /dev/null +++ b/scripts/mobiles/tatooine/tusken_executioner.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tusken_executioner') + mobileTemplate.setLevel(34) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("tusken raider") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_tusken_raider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_tusken_generic.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tusken_executioner', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tusken_fighter.py b/scripts/mobiles/tatooine/tusken_fighter.py new file mode 100644 index 00000000..e19a28f5 --- /dev/null +++ b/scripts/mobiles/tatooine/tusken_fighter.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tusken_soldier') + mobileTemplate.setLevel(31) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("tusken raider") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_tusken_raider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_tusken_generic.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tusken_fighter', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tusken_flesh_hunter.py b/scripts/mobiles/tatooine/tusken_flesh_hunter.py new file mode 100644 index 00000000..efa8eee6 --- /dev/null +++ b/scripts/mobiles/tatooine/tusken_flesh_hunter.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tusken_flesh_hunter') + mobileTemplate.setLevel(33) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("tusken raider") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_tusken_raider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_tusken_generic.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tusken_flesh_hunter', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tusken_follower.py b/scripts/mobiles/tatooine/tusken_follower.py new file mode 100644 index 00000000..487198fb --- /dev/null +++ b/scripts/mobiles/tatooine/tusken_follower.py @@ -0,0 +1,40 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tusken_raider_18') + mobileTemplate.setLevel(19) + mobileTemplate.setMinLevel(18) + mobileTemplate.setMaxLevel(21) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("tusken raider") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_tusken_raider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_tusken_generic.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tusken_follower', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tusken_gore_chief.py b/scripts/mobiles/tatooine/tusken_gore_chief.py new file mode 100644 index 00000000..48d3c8cb --- /dev/null +++ b/scripts/mobiles/tatooine/tusken_gore_chief.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tusken_gore_chief') + mobileTemplate.setLevel(34) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("tusken raider") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_tusken_raider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_tusken_generic.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tusken_gore_chief', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tusken_guard.py b/scripts/mobiles/tatooine/tusken_guard.py new file mode 100644 index 00000000..6859011c --- /dev/null +++ b/scripts/mobiles/tatooine/tusken_guard.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tusken_guard') + mobileTemplate.setLevel(31) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("tusken raider") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_tusken_raider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_tusken_generic.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tusken_guard', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tusken_king.py b/scripts/mobiles/tatooine/tusken_king.py new file mode 100644 index 00000000..9d4e3557 --- /dev/null +++ b/scripts/mobiles/tatooine/tusken_king.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tusken_king') + mobileTemplate.setLevel(33) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("tusken raider") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_tusken_raider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_tusken_generic.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tusken_king', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tusken_observer.py b/scripts/mobiles/tatooine/tusken_observer.py new file mode 100644 index 00000000..88e1ef6e --- /dev/null +++ b/scripts/mobiles/tatooine/tusken_observer.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tusken_observer') + mobileTemplate.setLevel(32) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("tusken raider") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_tusken_raider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_tusken_generic.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tusken_observer', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tusken_outrider.py b/scripts/mobiles/tatooine/tusken_outrider.py new file mode 100644 index 00000000..5e8c7c6d --- /dev/null +++ b/scripts/mobiles/tatooine/tusken_outrider.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tusken_raider_wildman') + mobileTemplate.setLevel(14) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("tusken raider") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_tusken_raider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_tusken_generic.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tusken_outrider', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tusken_priest.py b/scripts/mobiles/tatooine/tusken_priest.py new file mode 100644 index 00000000..0efc6c29 --- /dev/null +++ b/scripts/mobiles/tatooine/tusken_priest.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tusken_raider_worshiper') + mobileTemplate.setLevel(20) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("tusken raider") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_tusken_raider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_tusken_generic.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tusken_worshiper', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tusken_raid_champion.py b/scripts/mobiles/tatooine/tusken_raid_champion.py new file mode 100644 index 00000000..70bd928d --- /dev/null +++ b/scripts/mobiles/tatooine/tusken_raid_champion.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('bestine_tusken_raid_leader') + mobileTemplate.setLevel(32) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("tusken raider") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_tusken_raider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_tusken_generic.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tusken_champion', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tusken_raid_hunter.py b/scripts/mobiles/tatooine/tusken_raid_hunter.py new file mode 100644 index 00000000..6d7564fc --- /dev/null +++ b/scripts/mobiles/tatooine/tusken_raid_hunter.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('bestine_tusken_raid_sub_leader') + mobileTemplate.setLevel(31) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("tusken raider") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_tusken_raider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_tusken_generic.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tusken_raid_hunter', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tusken_raid_leader.py b/scripts/mobiles/tatooine/tusken_raid_leader.py new file mode 100644 index 00000000..d072ab05 --- /dev/null +++ b/scripts/mobiles/tatooine/tusken_raid_leader.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('heroic_tusken_raid_leader') + mobileTemplate.setLevel(31) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("tusken raider") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_tusken_raider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_tusken_generic.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tusken_raid_leader', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tusken_raider.py b/scripts/mobiles/tatooine/tusken_raider.py index f3a3e867..025d7793 100644 --- a/scripts/mobiles/tatooine/tusken_raider.py +++ b/scripts/mobiles/tatooine/tusken_raider.py @@ -7,10 +7,18 @@ def addTemplate(core): mobileTemplate = MobileTemplate() mobileTemplate.setCreatureName('tusken_raider') - mobileTemplate.setLevel(10) - mobileTemplate.setDifficulty(1) - mobileTemplate.setAttackRange(24) + mobileTemplate.setLevel(30) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("tusken raider") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(True) templates = Vector() templates.add('object/mobile/shared_tusken_raider.iff') @@ -22,8 +30,8 @@ def addTemplate(core): mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() - mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setDefaultAttack('rangedshotrifle') mobileTemplate.setAttacks(attacks) core.spawnService.addMobileTemplate('tusken_raider', mobileTemplate) - \ No newline at end of file + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tusken_raider_soldier.py b/scripts/mobiles/tatooine/tusken_raider_soldier.py new file mode 100644 index 00000000..2de70aed --- /dev/null +++ b/scripts/mobiles/tatooine/tusken_raider_soldier.py @@ -0,0 +1,40 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tusken_raider_soldier') + mobileTemplate.setLevel(5) + mobileTemplate.setMinLevel(5) + mobileTemplate.setMaxLevel(6) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("tusken raider") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_tusken_raider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_tusken_generic.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tusken_soldier', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tusken_raider_warrior.py b/scripts/mobiles/tatooine/tusken_raider_warrior.py new file mode 100644 index 00000000..369dab9e --- /dev/null +++ b/scripts/mobiles/tatooine/tusken_raider_warrior.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tusken_raider_warrior') + mobileTemplate.setLevel(6) + mobileTemplate.setMinLevel(6) + mobileTemplate.setMaxLevel(7) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("tusken raider") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_tusken_raider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_tusken_generic.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tusken_warrior', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tusken_savage.py b/scripts/mobiles/tatooine/tusken_savage.py new file mode 100644 index 00000000..b24a9c81 --- /dev/null +++ b/scripts/mobiles/tatooine/tusken_savage.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tusken_savage') + mobileTemplate.setLevel(30) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("tusken raider") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_tusken_raider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_tusken.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tusken_savage', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tusken_sniper.py b/scripts/mobiles/tatooine/tusken_sniper.py new file mode 100644 index 00000000..c8330889 --- /dev/null +++ b/scripts/mobiles/tatooine/tusken_sniper.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tusken_sniper') + mobileTemplate.setLevel(30) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("tusken raider") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_tusken_raider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_tusken.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tusken_sniper', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tusken_torture_lord.py b/scripts/mobiles/tatooine/tusken_torture_lord.py new file mode 100644 index 00000000..164e0348 --- /dev/null +++ b/scripts/mobiles/tatooine/tusken_torture_lord.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tusken_torture_lord') + mobileTemplate.setLevel(32) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("tusken raider") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_tusken_raider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_tusken_generic.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tusken_torture_lord', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tusken_wanderer.py b/scripts/mobiles/tatooine/tusken_wanderer.py new file mode 100644 index 00000000..9e09de42 --- /dev/null +++ b/scripts/mobiles/tatooine/tusken_wanderer.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tusken_wanderer') + mobileTemplate.setLevel(33) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("tusken raider") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_tusken_raider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_tusken_generic.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tusken_wanderer', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tusken_warlord.py b/scripts/mobiles/tatooine/tusken_warlord.py new file mode 100644 index 00000000..9e09de42 --- /dev/null +++ b/scripts/mobiles/tatooine/tusken_warlord.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tusken_wanderer') + mobileTemplate.setLevel(33) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("tusken raider") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_tusken_raider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_tusken_generic.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tusken_wanderer', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tusken_warmaster.py b/scripts/mobiles/tatooine/tusken_warmaster.py new file mode 100644 index 00000000..c402c817 --- /dev/null +++ b/scripts/mobiles/tatooine/tusken_warmaster.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tusken_war_master') + mobileTemplate.setLevel(32) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("tusken raider") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_tusken_raider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tusken_warmaster', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tusken_warrior.py b/scripts/mobiles/tatooine/tusken_warrior.py new file mode 100644 index 00000000..4581fde7 --- /dev/null +++ b/scripts/mobiles/tatooine/tusken_warrior.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tusken_warrior') + mobileTemplate.setLevel(32) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("tusken raider") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_tusken_raider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tusken_warrior_1', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tusken_witch_doctor.py b/scripts/mobiles/tatooine/tusken_witch_doctor.py new file mode 100644 index 00000000..ce7f2dce --- /dev/null +++ b/scripts/mobiles/tatooine/tusken_witch_doctor.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tusken_witch_doctor') + mobileTemplate.setLevel(33) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("tusken raider") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_tusken_raider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_tusken_generic.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tusken_witch_doctor', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tusken_zealot.py b/scripts/mobiles/tatooine/tusken_zealot.py new file mode 100644 index 00000000..1d5795d7 --- /dev/null +++ b/scripts/mobiles/tatooine/tusken_zealot.py @@ -0,0 +1,40 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tusken_raider_zealot') + mobileTemplate.setLevel(5) + mobileTemplate.setMinLevel(5) + mobileTemplate.setMaxLevel(6) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("tusken raider") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_tusken_raider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_tusken_generic.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tusken_zealot', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/twisted_dewback.py b/scripts/mobiles/tatooine/twisted_dewback.py new file mode 100644 index 00000000..633560a5 --- /dev/null +++ b/scripts/mobiles/tatooine/twisted_dewback.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('twisted_dewback') + mobileTemplate.setLevel(11) + mobileTemplate.setMinLevel(10) + mobileTemplate.setMaxLevel(12) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Reptilian Meat") + mobileTemplate.setMeatAmount(175) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(125) + mobileTemplate.setBoneType("Animal Bones") + mobileTemplate.setHideAmount(100) + mobileTemplate.setSocialGroup("twisted") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dewback.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('twisted_dewback', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/twisted_rill.py b/scripts/mobiles/tatooine/twisted_rill.py new file mode 100644 index 00000000..752e2e0b --- /dev/null +++ b/scripts/mobiles/tatooine/twisted_rill.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('twisted_rill') + mobileTemplate.setLevel(11) + mobileTemplate.setMinLevel(10) + mobileTemplate.setMaxLevel(13) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(35) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setBoneAmount(20) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(15) + mobileTemplate.setSocialGroup("twisted") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_rill.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('twisted_rill', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/twisted_womprat.py b/scripts/mobiles/tatooine/twisted_womprat.py new file mode 100644 index 00000000..ca4b5198 --- /dev/null +++ b/scripts/mobiles/tatooine/twisted_womprat.py @@ -0,0 +1,46 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('twisted_womprat') + mobileTemplate.setLevel(11) + mobileTemplate.setMinLevel(10) + mobileTemplate.setMaxLevel(12) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Wild Meat") + mobileTemplate.setMeatAmount(4) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(3) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(2) + mobileTemplate.setSocialGroup("twisted") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_womp_rat.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('twisted_womprat', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/vaigonn_shinn.py b/scripts/mobiles/tatooine/vaigonn_shinn.py new file mode 100644 index 00000000..6311ae3b --- /dev/null +++ b/scripts/mobiles/tatooine/vaigonn_shinn.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tatooine_vaigon_shinn') + mobileTemplate.setLevel(8) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("shinn mugger") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dressed_commoner_tatooine_nikto_male_01.iff') + templates.add('object/mobile/shared_dressed_commoner_tatooine_nikto_male_02.iff') + templates.add('object/mobile/shared_dressed_commoner_tatooine_nikto_male_03.iff') + templates.add('object/mobile/shared_dressed_commoner_tatooine_nikto_male_04.iff') + templates.add('object/mobile/shared_dressed_commoner_tatooine_nikto_male_05.iff') + templates.add('object/mobile/shared_dressed_commoner_tatooine_nikto_male_06.iff') + templates.add('object/mobile/shared_dressed_commoner_tatooine_nikto_male_07.iff') + templates.add('object/mobile/shared_dressed_commoner_tatooine_nikto_male_08.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('vaigon_shinn', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/valarian_assassin.py b/scripts/mobiles/tatooine/valarian_assassin.py new file mode 100644 index 00000000..8bebf555 --- /dev/null +++ b/scripts/mobiles/tatooine/valarian_assassin.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('valarian_assassin') + mobileTemplate.setLevel(15) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("valarian") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_valarian_assassin.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_cdef.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshotpistol') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('valarian_assassin', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/valarian_compound_guard.py b/scripts/mobiles/tatooine/valarian_compound_guard.py new file mode 100644 index 00000000..fc671a3a --- /dev/null +++ b/scripts/mobiles/tatooine/valarian_compound_guard.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('valarian_compound_guard') + mobileTemplate.setLevel(14) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("valarian") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_valarian_compound_guard.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('valarian_compound_guard', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/valarian_crew_chief.py b/scripts/mobiles/tatooine/valarian_crew_chief.py new file mode 100644 index 00000000..8799d207 --- /dev/null +++ b/scripts/mobiles/tatooine/valarian_crew_chief.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('valarian_crew_chief') + mobileTemplate.setLevel(13) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("valarian") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_valarian_thug.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_cdef.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshotpistol') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('valarian_chief', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/valarian_depot_boss.py b/scripts/mobiles/tatooine/valarian_depot_boss.py new file mode 100644 index 00000000..82d6a37e --- /dev/null +++ b/scripts/mobiles/tatooine/valarian_depot_boss.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('valarian_elite_shuttle') + mobileTemplate.setLevel(22) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("valarian") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_valarian_assassin_boss.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_cdef.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshotpistol') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('valarian_depot_boss', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/valarian_depot_foreman.py b/scripts/mobiles/tatooine/valarian_depot_foreman.py new file mode 100644 index 00000000..6550ecca --- /dev/null +++ b/scripts/mobiles/tatooine/valarian_depot_foreman.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('valarian_boss_depot') + mobileTemplate.setLevel(16) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("valarian") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_valarian_thug.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_cdef.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshotpistol') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('valarian_depot_foreman', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/valarian_depot_guard.py b/scripts/mobiles/tatooine/valarian_depot_guard.py new file mode 100644 index 00000000..4295ea95 --- /dev/null +++ b/scripts/mobiles/tatooine/valarian_depot_guard.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('valarian_boss_shuttle') + mobileTemplate.setLevel(14) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("valarian") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_valarian_thug.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_cdef.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshotpistol') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('valarian_depot_guard', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/valarian_depot_scout.py b/scripts/mobiles/tatooine/valarian_depot_scout.py new file mode 100644 index 00000000..30203204 --- /dev/null +++ b/scripts/mobiles/tatooine/valarian_depot_scout.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('valarian_scout_depot') + mobileTemplate.setLevel(12) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("valarian") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_valarian_thug.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_dlt20.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('valarian_depot_scout', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/valarian_depot_swooper.py b/scripts/mobiles/tatooine/valarian_depot_swooper.py new file mode 100644 index 00000000..09fce025 --- /dev/null +++ b/scripts/mobiles/tatooine/valarian_depot_swooper.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('valarian_swooper_depot') + mobileTemplate.setLevel(12) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("valarian") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_valarian_thug.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('valarian_depot_swooper', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/valarian_depot_worker.py b/scripts/mobiles/tatooine/valarian_depot_worker.py new file mode 100644 index 00000000..d1a93038 --- /dev/null +++ b/scripts/mobiles/tatooine/valarian_depot_worker.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('valarian_thug_depot') + mobileTemplate.setLevel(12) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("valarian") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_valarian_thug.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_cdef.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshotpistol') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('valarian_depot_worker', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/valarian_enforcer.py b/scripts/mobiles/tatooine/valarian_enforcer.py new file mode 100644 index 00000000..669a2d38 --- /dev/null +++ b/scripts/mobiles/tatooine/valarian_enforcer.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('valarian_enforcer') + mobileTemplate.setLevel(15) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("valarian") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_valarian_enforcer.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('valarian_enforcer', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/valarian_henchman.py b/scripts/mobiles/tatooine/valarian_henchman.py new file mode 100644 index 00000000..702baea1 --- /dev/null +++ b/scripts/mobiles/tatooine/valarian_henchman.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('valarian_henchman') + mobileTemplate.setLevel(14) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("valarian") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_valarian_henchman.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('valarian_henchman', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/valarian_mechanic.py b/scripts/mobiles/tatooine/valarian_mechanic.py new file mode 100644 index 00000000..dab683bd --- /dev/null +++ b/scripts/mobiles/tatooine/valarian_mechanic.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('valarian_mechanic') + mobileTemplate.setLevel(13) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("valarian") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_valarian_thug.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_cdef.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshotpistol') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('valarian_mechanic', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/valarian_pod_racer.py b/scripts/mobiles/tatooine/valarian_pod_racer.py new file mode 100644 index 00000000..c5aa9b3b --- /dev/null +++ b/scripts/mobiles/tatooine/valarian_pod_racer.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('valarian_pod_racer') + mobileTemplate.setLevel(13) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("valarian") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_valarian_swooper.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_cdef.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshotpistol') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('valarian_pod_racer', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/valarian_scout.py b/scripts/mobiles/tatooine/valarian_scout.py new file mode 100644 index 00000000..46e76cc5 --- /dev/null +++ b/scripts/mobiles/tatooine/valarian_scout.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('valarian_scout') + mobileTemplate.setLevel(13) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("valarian") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_valarian_scout.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_dlt20.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('valarian_scout', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/valarian_shuttle_guard.py b/scripts/mobiles/tatooine/valarian_shuttle_guard.py new file mode 100644 index 00000000..6fbdf7cc --- /dev/null +++ b/scripts/mobiles/tatooine/valarian_shuttle_guard.py @@ -0,0 +1,40 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('valarian_swooper_shuttle') + mobileTemplate.setLevel(18) + mobileTemplate.setMinLevel(17) + mobileTemplate.setMaxLevel(22) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("valarian") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_valarian_thug.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_cdef.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshotpistol') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('valarian_shuttle_guard', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/valarian_swooper.py b/scripts/mobiles/tatooine/valarian_swooper.py new file mode 100644 index 00000000..373e60ec --- /dev/null +++ b/scripts/mobiles/tatooine/valarian_swooper.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('valarian_swooper_leader') + mobileTemplate.setLevel(14) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("valarian") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_valarian_swooper_leader.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_cdef.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshotpistol') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('valarian_swooper_leader', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/valarian_swooper_leader.py b/scripts/mobiles/tatooine/valarian_swooper_leader.py new file mode 100644 index 00000000..e1b43c7c --- /dev/null +++ b/scripts/mobiles/tatooine/valarian_swooper_leader.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('valarian_swooper') + mobileTemplate.setLevel(14) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("valarian") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_valarian_swooper.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_cdef.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshotpistol') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('valarian_swooper', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/valarian_thief.py b/scripts/mobiles/tatooine/valarian_thief.py new file mode 100644 index 00000000..feac01b1 --- /dev/null +++ b/scripts/mobiles/tatooine/valarian_thief.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('valarian_thief') + mobileTemplate.setLevel(13) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("valarian") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_valarian_thief.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_cdef.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshotpistol') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('valarian_thief', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/valarian_thug.py b/scripts/mobiles/tatooine/valarian_thug.py new file mode 100644 index 00000000..3f679719 --- /dev/null +++ b/scripts/mobiles/tatooine/valarian_thug.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('valarian_thug') + mobileTemplate.setLevel(13) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("valarian") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_valarian_thug.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_cdef.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshotpistol') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('valarian_thug', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/variegated_womprat.py b/scripts/mobiles/tatooine/variegated_womprat.py new file mode 100644 index 00000000..6384ef09 --- /dev/null +++ b/scripts/mobiles/tatooine/variegated_womprat.py @@ -0,0 +1,46 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('variegated_womprat') + mobileTemplate.setLevel(12) + mobileTemplate.setMinLevel(11) + mobileTemplate.setMaxLevel(14) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Wild Meat") + mobileTemplate.setMeatAmount(3) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(3) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(2) + mobileTemplate.setSocialGroup("variegated womprat") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_variegated_womp_rat.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('variegated_womprat', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/vicious_rill.py b/scripts/mobiles/tatooine/vicious_rill.py new file mode 100644 index 00000000..93a7e55d --- /dev/null +++ b/scripts/mobiles/tatooine/vicious_rill.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('vicious_rill') + mobileTemplate.setLevel(3) + mobileTemplate.setMinLevel(2) + mobileTemplate.setMaxLevel(4) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(35) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setBoneAmount(20) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(15) + mobileTemplate.setSocialGroup("rill") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_rill.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('vicious_rill', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/volatile_scyk.py b/scripts/mobiles/tatooine/volatile_scyk.py new file mode 100644 index 00000000..dc0fab06 --- /dev/null +++ b/scripts/mobiles/tatooine/volatile_scyk.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('scyk_volatile') + mobileTemplate.setLevel(12) + mobileTemplate.setMinLevel(11) + mobileTemplate.setMaxLevel(13) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(40) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setBoneAmount(25) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(18) + mobileTemplate.setSocialGroup("scyk") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_scyk.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('volatile_scyk', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/wasteland_cupa.py b/scripts/mobiles/tatooine/wasteland_cupa.py new file mode 100644 index 00000000..574df453 --- /dev/null +++ b/scripts/mobiles/tatooine/wasteland_cupa.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('wasteland_cu_pa') + mobileTemplate.setLevel(20) + mobileTemplate.setMinLevel(19) + mobileTemplate.setMaxLevel(21) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Reptilian Meat") + mobileTemplate.setMeatAmount(215) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setBoneAmount(100) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(115) + mobileTemplate.setSocialGroup("cu pa") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_cu_pa.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('wasteland_cu_pa', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/white_thranta_manager.py b/scripts/mobiles/tatooine/white_thranta_manager.py new file mode 100644 index 00000000..3f5d2fd1 --- /dev/null +++ b/scripts/mobiles/tatooine/white_thranta_manager.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tatooine_opening_swooper_13') + mobileTemplate.setLevel(12) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("whitethranta") + mobileTemplate.setAssistRange(3) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_opening_wh_guard.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_cdef.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshotpistol') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('white_thranta_manager', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/white_thranta_security_captain.py b/scripts/mobiles/tatooine/white_thranta_security_captain.py new file mode 100644 index 00000000..668a897b --- /dev/null +++ b/scripts/mobiles/tatooine/white_thranta_security_captain.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tatooine_opening_swooper_15') + mobileTemplate.setLevel(14) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("whitethranta") + mobileTemplate.setAssistRange(5) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_opening_wh_guard.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_dlt20.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('white_thranta_security_captain', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/white_thranta_security_elite.py b/scripts/mobiles/tatooine/white_thranta_security_elite.py new file mode 100644 index 00000000..47499e11 --- /dev/null +++ b/scripts/mobiles/tatooine/white_thranta_security_elite.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tatooine_opening_swooper_15') + mobileTemplate.setLevel(13) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("whitethranta") + mobileTemplate.setAssistRange(5) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_opening_wh_guard.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_dlt20.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('white_thranta_security_elite', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/white_thranta_security_guard.py b/scripts/mobiles/tatooine/white_thranta_security_guard.py new file mode 100644 index 00000000..e5959c69 --- /dev/null +++ b/scripts/mobiles/tatooine/white_thranta_security_guard.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tatooine_opening_swooper_9') + mobileTemplate.setLevel(13) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("whitethranta") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_opening_wh_guard.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_dlt20.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('white_thranta_security_guard', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/white_thranta_security_officer.py b/scripts/mobiles/tatooine/white_thranta_security_officer.py new file mode 100644 index 00000000..b3ac3677 --- /dev/null +++ b/scripts/mobiles/tatooine/white_thranta_security_officer.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tatooine_opening_swooper_11') + mobileTemplate.setLevel(13) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("whitethranta") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_opening_wh_guard.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_dlt20.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('white_thranta_security_officer', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/white_thranta_specialist.py b/scripts/mobiles/tatooine/white_thranta_specialist.py new file mode 100644 index 00000000..1a945909 --- /dev/null +++ b/scripts/mobiles/tatooine/white_thranta_specialist.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tatooine_opening_swooper_10') + mobileTemplate.setLevel(9) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("whitethranta") + mobileTemplate.setAssistRange(3) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_opening_wh_guard.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_cdef.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshotpistol') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('white_thranta_specialist', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/white_thranta_technican.py b/scripts/mobiles/tatooine/white_thranta_technican.py new file mode 100644 index 00000000..bc9a2673 --- /dev/null +++ b/scripts/mobiles/tatooine/white_thranta_technican.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tatooine_opening_swooper_8') + mobileTemplate.setLevel(8) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("whitethranta") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_opening_wh_guard.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_cdef.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshotpistol') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('white_thranta_technican', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/wild_bladeback_boar.py b/scripts/mobiles/tatooine/wild_bladeback_boar.py new file mode 100644 index 00000000..59ab35da --- /dev/null +++ b/scripts/mobiles/tatooine/wild_bladeback_boar.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('quest_hero_of_tatooine_ferocious_beast') + mobileTemplate.setLevel(40) + mobileTemplate.setMinLevel(39) + mobileTemplate.setMaxLevel(41) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(120) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(80) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(50) + mobileTemplate.setSocialGroup("zucca boar") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_zucca_boar.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('wild_bladeback_boar', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/wild_dune_boar.py b/scripts/mobiles/tatooine/wild_dune_boar.py new file mode 100644 index 00000000..4796affd --- /dev/null +++ b/scripts/mobiles/tatooine/wild_dune_boar.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('wild_dune_boar') + mobileTemplate.setLevel(50) + mobileTemplate.setMinLevel(49) + mobileTemplate.setMaxLevel(51) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(90) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(80) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(75) + mobileTemplate.setSocialGroup("zucca boar") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_zucca_boar.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('wild_dune_boar', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/womprat.py b/scripts/mobiles/tatooine/womprat.py index f4277933..b50adcad 100644 --- a/scripts/mobiles/tatooine/womprat.py +++ b/scripts/mobiles/tatooine/womprat.py @@ -1,22 +1,47 @@ import sys from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate from java.util import Vector def addTemplate(core): mobileTemplate = MobileTemplate() - templates = Vector() - templates.add('object/mobile/shared_womp_rat.iff') + mobileTemplate.setCreatureName('womprat') - mobileTemplate.setTemplates(templates) + mobileTemplate.setLevel(4) + mobileTemplate.setMinLevel(3) + mobileTemplate.setMaxLevel(6) + mobileTemplate.setDifficulty(0) mobileTemplate.setAttackRange(5) - mobileTemplate.setAttackSpeed(5) - mobileTemplate.setLevel(5) - mobileTemplate.setAttackRange(3) mobileTemplate.setAttackSpeed(1.0) mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Wild Meat") + mobileTemplate.setMeatAmount(4) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(3) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(2) + mobileTemplate.setSocialGroup("womprat") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + + + templates = Vector() + templates.add('object/mobile/shared_womp_rat.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) + core.spawnService.addMobileTemplate('womprat', mobileTemplate) - \ No newline at end of file + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/wonderous_cupa.py b/scripts/mobiles/tatooine/wonderous_cupa.py new file mode 100644 index 00000000..2d34e4af --- /dev/null +++ b/scripts/mobiles/tatooine/wonderous_cupa.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('cu_pa_wonderous') + mobileTemplate.setLevel(12) + mobileTemplate.setMinLevel(11) + mobileTemplate.setMaxLevel(13) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Reptilian Meat") + mobileTemplate.setMeatAmount(215) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setBoneAmount(100) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(115) + mobileTemplate.setSocialGroup("cu pa") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_cu_pa.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('wonderous_cu_pa', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/worrt.py b/scripts/mobiles/tatooine/worrt.py index 1ce16573..4a49556b 100644 --- a/scripts/mobiles/tatooine/worrt.py +++ b/scripts/mobiles/tatooine/worrt.py @@ -8,13 +8,28 @@ def addTemplate(core): mobileTemplate.setCreatureName('worrt') mobileTemplate.setLevel(5) + mobileTemplate.setMinLevel(4) + mobileTemplate.setMaxLevel(6) mobileTemplate.setDifficulty(0) mobileTemplate.setAttackRange(5) - mobileTemplate.setWeaponType(6) mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Reptilian Meat") + mobileTemplate.setMeatAmount(5) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(5) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(2) + mobileTemplate.setSocialGroup("worrt") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) templates = Vector() - templates.add('object/mobile/shared_minor_worrt.iff') + templates.add('object/mobile/shared_worrt.iff') mobileTemplate.setTemplates(templates) weaponTemplates = Vector() diff --git a/scripts/mobiles/tatooine/worrt_gutbuster.py b/scripts/mobiles/tatooine/worrt_gutbuster.py new file mode 100644 index 00000000..e39f0ffb --- /dev/null +++ b/scripts/mobiles/tatooine/worrt_gutbuster.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('worrt_gutbuster') + mobileTemplate.setLevel(13) + mobileTemplate.setMinLevel(12) + mobileTemplate.setMaxLevel(14) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Reptilian Meat") + mobileTemplate.setMeatAmount(9) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(9) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(4) + mobileTemplate.setSocialGroup("worrt") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_worrt.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('worrt_gutbuster', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/young_mountain_squill.py b/scripts/mobiles/tatooine/young_mountain_squill.py new file mode 100644 index 00000000..411e0c15 --- /dev/null +++ b/scripts/mobiles/tatooine/young_mountain_squill.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('young_mountain_squill') + mobileTemplate.setLevel(16) + mobileTemplate.setMinLevel(15) + mobileTemplate.setMaxLevel(17) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(2) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(2) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(1) + mobileTemplate.setSocialGroup("squill") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_squill.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('young_mountain_squill', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/zucca_boar.py b/scripts/mobiles/tatooine/zucca_boar.py new file mode 100644 index 00000000..6865bcac --- /dev/null +++ b/scripts/mobiles/tatooine/zucca_boar.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('zucca_boar') + mobileTemplate.setLevel(8) + mobileTemplate.setMinLevel(7) + mobileTemplate.setMaxLevel(9) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(65) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(40) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(25) + mobileTemplate.setSocialGroup("zucca boar") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_zucca_boar.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('zucca_boar', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/object/building/player/city/garden_tatooine_sml_01.py b/scripts/object/building/player/city/garden_tatooine_sml_01.py index ccad8904..287ca8f0 100644 --- a/scripts/object/building/player/city/garden_tatooine_sml_01.py +++ b/scripts/object/building/player/city/garden_tatooine_sml_01.py @@ -1,4 +1,14 @@ import sys +from engine.resources.scene import Point3D +from engine.resources.scene import Quaternion def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', -13.7, 3, 9.1, -1, 0, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', -17.2, 1.5 , 8, 1, 0 ,4) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) + return \ No newline at end of file diff --git a/scripts/object/creature/npc/droid/imperial_probot_bounty.py b/scripts/object/creature/npc/droid/imperial_probot_bounty.py index ccad8904..de71643c 100644 --- a/scripts/object/creature/npc/droid/imperial_probot_bounty.py +++ b/scripts/object/creature/npc/droid/imperial_probot_bounty.py @@ -1,4 +1,8 @@ +from resources.datatables import Options import sys def setup(core, object): + object.setAttachment('radial_filename', 'object/conversation'); + object.setAttachment('conversationFile','missions/bounty_droid_probot') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) return \ No newline at end of file diff --git a/scripts/object/intangible/data_item/guild_stone.py b/scripts/object/intangible/data_item/guild_stone.py index ccad8904..7cf0dd3a 100644 --- a/scripts/object/intangible/data_item/guild_stone.py +++ b/scripts/object/intangible/data_item/guild_stone.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'object/guild_access_device') return \ No newline at end of file diff --git a/scripts/object/intangible/vehicle/landspeeder_av21_pcd.py b/scripts/object/intangible/vehicle/landspeeder_av21_pcd.py index ccad8904..d7c3f4a1 100644 --- a/scripts/object/intangible/vehicle/landspeeder_av21_pcd.py +++ b/scripts/object/intangible/vehicle/landspeeder_av21_pcd.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'datapad/vehicle_pcd') return \ No newline at end of file diff --git a/scripts/object/mobile/21b_surgical_droid.py b/scripts/object/mobile/21b_surgical_droid.py index ccad8904..bdc8a620 100644 --- a/scripts/object/mobile/21b_surgical_droid.py +++ b/scripts/object/mobile/21b_surgical_droid.py @@ -1,4 +1,11 @@ import sys +from resources.datatables import Options def setup(core, object): - return \ No newline at end of file + object.setAttachment('radial_filename', 'object/conversation'); + object.setAttachment('conversationFile','medical_cloning_droid') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('surgical_droid') + return + diff --git a/scripts/object/mobile/dressed_dark_force_crystal_hunter.py b/scripts/object/mobile/dressed_dark_force_crystal_hunter.py index ccad8904..c7237ff3 100644 --- a/scripts/object/mobile/dressed_dark_force_crystal_hunter.py +++ b/scripts/object/mobile/dressed_dark_force_crystal_hunter.py @@ -1,4 +1,32 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['colorcrystals'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['armor_various','random_loot_rifles'] + lootPoolChances_4 = [80,20] + lootGroupChance_4 = 35 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + lootPoolNames_5 = ['sithholocrons'] + lootPoolChances_5 = [100] + lootGroupChance_5 = 1 + object.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) + + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_elder_male_human_01.py b/scripts/object/mobile/dressed_dark_jedi_elder_male_human_01.py index ccad8904..be97678c 100644 --- a/scripts/object/mobile/dressed_dark_jedi_elder_male_human_01.py +++ b/scripts/object/mobile/dressed_dark_jedi_elder_male_human_01.py @@ -1,4 +1,31 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + lootPoolNames_5 = ['sithholocrons'] + lootPoolChances_5 = [100] + lootGroupChance_5 = 1 + object.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_female_human_01.py b/scripts/object/mobile/dressed_dark_jedi_female_human_01.py index ccad8904..be97678c 100644 --- a/scripts/object/mobile/dressed_dark_jedi_female_human_01.py +++ b/scripts/object/mobile/dressed_dark_jedi_female_human_01.py @@ -1,4 +1,31 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + lootPoolNames_5 = ['sithholocrons'] + lootPoolChances_5 = [100] + lootGroupChance_5 = 1 + object.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_female_human_02.py b/scripts/object/mobile/dressed_dark_jedi_female_human_02.py index ccad8904..be97678c 100644 --- a/scripts/object/mobile/dressed_dark_jedi_female_human_02.py +++ b/scripts/object/mobile/dressed_dark_jedi_female_human_02.py @@ -1,4 +1,31 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + lootPoolNames_5 = ['sithholocrons'] + lootPoolChances_5 = [100] + lootGroupChance_5 = 1 + object.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_female_human_03.py b/scripts/object/mobile/dressed_dark_jedi_female_human_03.py index ccad8904..be97678c 100644 --- a/scripts/object/mobile/dressed_dark_jedi_female_human_03.py +++ b/scripts/object/mobile/dressed_dark_jedi_female_human_03.py @@ -1,4 +1,31 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + lootPoolNames_5 = ['sithholocrons'] + lootPoolChances_5 = [100] + lootGroupChance_5 = 1 + object.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_female_human_04.py b/scripts/object/mobile/dressed_dark_jedi_female_human_04.py index ccad8904..be97678c 100644 --- a/scripts/object/mobile/dressed_dark_jedi_female_human_04.py +++ b/scripts/object/mobile/dressed_dark_jedi_female_human_04.py @@ -1,4 +1,31 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + lootPoolNames_5 = ['sithholocrons'] + lootPoolChances_5 = [100] + lootGroupChance_5 = 1 + object.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_female_marauder_01.py b/scripts/object/mobile/dressed_dark_jedi_female_marauder_01.py index ccad8904..be97678c 100644 --- a/scripts/object/mobile/dressed_dark_jedi_female_marauder_01.py +++ b/scripts/object/mobile/dressed_dark_jedi_female_marauder_01.py @@ -1,4 +1,31 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + lootPoolNames_5 = ['sithholocrons'] + lootPoolChances_5 = [100] + lootGroupChance_5 = 1 + object.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_female_twk_01.py b/scripts/object/mobile/dressed_dark_jedi_female_twk_01.py index ccad8904..be97678c 100644 --- a/scripts/object/mobile/dressed_dark_jedi_female_twk_01.py +++ b/scripts/object/mobile/dressed_dark_jedi_female_twk_01.py @@ -1,4 +1,31 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + lootPoolNames_5 = ['sithholocrons'] + lootPoolChances_5 = [100] + lootGroupChance_5 = 1 + object.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_female_twk_02.py b/scripts/object/mobile/dressed_dark_jedi_female_twk_02.py index ccad8904..be97678c 100644 --- a/scripts/object/mobile/dressed_dark_jedi_female_twk_02.py +++ b/scripts/object/mobile/dressed_dark_jedi_female_twk_02.py @@ -1,4 +1,31 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + lootPoolNames_5 = ['sithholocrons'] + lootPoolChances_5 = [100] + lootGroupChance_5 = 1 + object.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_female_twk_03.py b/scripts/object/mobile/dressed_dark_jedi_female_twk_03.py index ccad8904..be97678c 100644 --- a/scripts/object/mobile/dressed_dark_jedi_female_twk_03.py +++ b/scripts/object/mobile/dressed_dark_jedi_female_twk_03.py @@ -1,4 +1,31 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + lootPoolNames_5 = ['sithholocrons'] + lootPoolChances_5 = [100] + lootGroupChance_5 = 1 + object.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_female_zab_01.py b/scripts/object/mobile/dressed_dark_jedi_female_zab_01.py index ccad8904..be97678c 100644 --- a/scripts/object/mobile/dressed_dark_jedi_female_zab_01.py +++ b/scripts/object/mobile/dressed_dark_jedi_female_zab_01.py @@ -1,4 +1,31 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + lootPoolNames_5 = ['sithholocrons'] + lootPoolChances_5 = [100] + lootGroupChance_5 = 1 + object.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_female_zab_02.py b/scripts/object/mobile/dressed_dark_jedi_female_zab_02.py index ccad8904..be97678c 100644 --- a/scripts/object/mobile/dressed_dark_jedi_female_zab_02.py +++ b/scripts/object/mobile/dressed_dark_jedi_female_zab_02.py @@ -1,4 +1,31 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + lootPoolNames_5 = ['sithholocrons'] + lootPoolChances_5 = [100] + lootGroupChance_5 = 1 + object.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_female_zab_03.py b/scripts/object/mobile/dressed_dark_jedi_female_zab_03.py index ccad8904..be97678c 100644 --- a/scripts/object/mobile/dressed_dark_jedi_female_zab_03.py +++ b/scripts/object/mobile/dressed_dark_jedi_female_zab_03.py @@ -1,4 +1,31 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + lootPoolNames_5 = ['sithholocrons'] + lootPoolChances_5 = [100] + lootGroupChance_5 = 1 + object.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_human_female_01.py b/scripts/object/mobile/dressed_dark_jedi_human_female_01.py index ccad8904..be97678c 100644 --- a/scripts/object/mobile/dressed_dark_jedi_human_female_01.py +++ b/scripts/object/mobile/dressed_dark_jedi_human_female_01.py @@ -1,4 +1,31 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + lootPoolNames_5 = ['sithholocrons'] + lootPoolChances_5 = [100] + lootGroupChance_5 = 1 + object.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_human_male_01.py b/scripts/object/mobile/dressed_dark_jedi_human_male_01.py index ccad8904..be97678c 100644 --- a/scripts/object/mobile/dressed_dark_jedi_human_male_01.py +++ b/scripts/object/mobile/dressed_dark_jedi_human_male_01.py @@ -1,4 +1,31 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + lootPoolNames_5 = ['sithholocrons'] + lootPoolChances_5 = [100] + lootGroupChance_5 = 1 + object.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_male_human_01.py b/scripts/object/mobile/dressed_dark_jedi_male_human_01.py index ccad8904..be97678c 100644 --- a/scripts/object/mobile/dressed_dark_jedi_male_human_01.py +++ b/scripts/object/mobile/dressed_dark_jedi_male_human_01.py @@ -1,4 +1,31 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + lootPoolNames_5 = ['sithholocrons'] + lootPoolChances_5 = [100] + lootGroupChance_5 = 1 + object.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_male_human_02.py b/scripts/object/mobile/dressed_dark_jedi_male_human_02.py index ccad8904..be97678c 100644 --- a/scripts/object/mobile/dressed_dark_jedi_male_human_02.py +++ b/scripts/object/mobile/dressed_dark_jedi_male_human_02.py @@ -1,4 +1,31 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + lootPoolNames_5 = ['sithholocrons'] + lootPoolChances_5 = [100] + lootGroupChance_5 = 1 + object.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_male_human_03.py b/scripts/object/mobile/dressed_dark_jedi_male_human_03.py index ccad8904..be97678c 100644 --- a/scripts/object/mobile/dressed_dark_jedi_male_human_03.py +++ b/scripts/object/mobile/dressed_dark_jedi_male_human_03.py @@ -1,4 +1,31 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + lootPoolNames_5 = ['sithholocrons'] + lootPoolChances_5 = [100] + lootGroupChance_5 = 1 + object.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_male_human_04.py b/scripts/object/mobile/dressed_dark_jedi_male_human_04.py index ccad8904..be97678c 100644 --- a/scripts/object/mobile/dressed_dark_jedi_male_human_04.py +++ b/scripts/object/mobile/dressed_dark_jedi_male_human_04.py @@ -1,4 +1,31 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + lootPoolNames_5 = ['sithholocrons'] + lootPoolChances_5 = [100] + lootGroupChance_5 = 1 + object.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_male_human_05.py b/scripts/object/mobile/dressed_dark_jedi_male_human_05.py index ccad8904..be97678c 100644 --- a/scripts/object/mobile/dressed_dark_jedi_male_human_05.py +++ b/scripts/object/mobile/dressed_dark_jedi_male_human_05.py @@ -1,4 +1,31 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + lootPoolNames_5 = ['sithholocrons'] + lootPoolChances_5 = [100] + lootGroupChance_5 = 1 + object.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_male_human_06.py b/scripts/object/mobile/dressed_dark_jedi_male_human_06.py index ccad8904..be97678c 100644 --- a/scripts/object/mobile/dressed_dark_jedi_male_human_06.py +++ b/scripts/object/mobile/dressed_dark_jedi_male_human_06.py @@ -1,4 +1,31 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + lootPoolNames_5 = ['sithholocrons'] + lootPoolChances_5 = [100] + lootGroupChance_5 = 1 + object.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_male_marauder_01.py b/scripts/object/mobile/dressed_dark_jedi_male_marauder_01.py index ccad8904..be97678c 100644 --- a/scripts/object/mobile/dressed_dark_jedi_male_marauder_01.py +++ b/scripts/object/mobile/dressed_dark_jedi_male_marauder_01.py @@ -1,4 +1,31 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + lootPoolNames_5 = ['sithholocrons'] + lootPoolChances_5 = [100] + lootGroupChance_5 = 1 + object.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_male_twk_01.py b/scripts/object/mobile/dressed_dark_jedi_male_twk_01.py index ccad8904..be97678c 100644 --- a/scripts/object/mobile/dressed_dark_jedi_male_twk_01.py +++ b/scripts/object/mobile/dressed_dark_jedi_male_twk_01.py @@ -1,4 +1,31 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + lootPoolNames_5 = ['sithholocrons'] + lootPoolChances_5 = [100] + lootGroupChance_5 = 1 + object.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_male_twk_02.py b/scripts/object/mobile/dressed_dark_jedi_male_twk_02.py index ccad8904..be97678c 100644 --- a/scripts/object/mobile/dressed_dark_jedi_male_twk_02.py +++ b/scripts/object/mobile/dressed_dark_jedi_male_twk_02.py @@ -1,4 +1,31 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + lootPoolNames_5 = ['sithholocrons'] + lootPoolChances_5 = [100] + lootGroupChance_5 = 1 + object.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_male_twk_03.py b/scripts/object/mobile/dressed_dark_jedi_male_twk_03.py index ccad8904..be97678c 100644 --- a/scripts/object/mobile/dressed_dark_jedi_male_twk_03.py +++ b/scripts/object/mobile/dressed_dark_jedi_male_twk_03.py @@ -1,4 +1,31 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + lootPoolNames_5 = ['sithholocrons'] + lootPoolChances_5 = [100] + lootGroupChance_5 = 1 + object.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_male_zab_01.py b/scripts/object/mobile/dressed_dark_jedi_male_zab_01.py index ccad8904..be97678c 100644 --- a/scripts/object/mobile/dressed_dark_jedi_male_zab_01.py +++ b/scripts/object/mobile/dressed_dark_jedi_male_zab_01.py @@ -1,4 +1,31 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + lootPoolNames_5 = ['sithholocrons'] + lootPoolChances_5 = [100] + lootGroupChance_5 = 1 + object.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_male_zab_02.py b/scripts/object/mobile/dressed_dark_jedi_male_zab_02.py index ccad8904..be97678c 100644 --- a/scripts/object/mobile/dressed_dark_jedi_male_zab_02.py +++ b/scripts/object/mobile/dressed_dark_jedi_male_zab_02.py @@ -1,4 +1,31 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + lootPoolNames_5 = ['sithholocrons'] + lootPoolChances_5 = [100] + lootGroupChance_5 = 1 + object.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_male_zab_03.py b/scripts/object/mobile/dressed_dark_jedi_male_zab_03.py index ccad8904..be97678c 100644 --- a/scripts/object/mobile/dressed_dark_jedi_male_zab_03.py +++ b/scripts/object/mobile/dressed_dark_jedi_male_zab_03.py @@ -1,4 +1,31 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + lootPoolNames_5 = ['sithholocrons'] + lootPoolChances_5 = [100] + lootGroupChance_5 = 1 + object.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_master_female_bith_01.py b/scripts/object/mobile/dressed_dark_jedi_master_female_bith_01.py index ccad8904..dba8fbeb 100644 --- a/scripts/object/mobile/dressed_dark_jedi_master_female_bith_01.py +++ b/scripts/object/mobile/dressed_dark_jedi_master_female_bith_01.py @@ -1,4 +1,26 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_master_female_bothan_01.py b/scripts/object/mobile/dressed_dark_jedi_master_female_bothan_01.py index ccad8904..dba8fbeb 100644 --- a/scripts/object/mobile/dressed_dark_jedi_master_female_bothan_01.py +++ b/scripts/object/mobile/dressed_dark_jedi_master_female_bothan_01.py @@ -1,4 +1,26 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_master_female_chiss_01.py b/scripts/object/mobile/dressed_dark_jedi_master_female_chiss_01.py index ccad8904..dba8fbeb 100644 --- a/scripts/object/mobile/dressed_dark_jedi_master_female_chiss_01.py +++ b/scripts/object/mobile/dressed_dark_jedi_master_female_chiss_01.py @@ -1,4 +1,26 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_master_female_chiss_02.py b/scripts/object/mobile/dressed_dark_jedi_master_female_chiss_02.py index ccad8904..dba8fbeb 100644 --- a/scripts/object/mobile/dressed_dark_jedi_master_female_chiss_02.py +++ b/scripts/object/mobile/dressed_dark_jedi_master_female_chiss_02.py @@ -1,4 +1,26 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_master_female_twk_01.py b/scripts/object/mobile/dressed_dark_jedi_master_female_twk_01.py index 9e598690..dba8fbeb 100644 --- a/scripts/object/mobile/dressed_dark_jedi_master_female_twk_01.py +++ b/scripts/object/mobile/dressed_dark_jedi_master_female_twk_01.py @@ -17,6 +17,10 @@ def setup(core, object): lootGroupChance_3 = 12 object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_master_female_twk_02.py b/scripts/object/mobile/dressed_dark_jedi_master_female_twk_02.py index 9e598690..dba8fbeb 100644 --- a/scripts/object/mobile/dressed_dark_jedi_master_female_twk_02.py +++ b/scripts/object/mobile/dressed_dark_jedi_master_female_twk_02.py @@ -17,6 +17,10 @@ def setup(core, object): lootGroupChance_3 = 12 object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_master_female_zab_01.py b/scripts/object/mobile/dressed_dark_jedi_master_female_zab_01.py index 9e598690..dba8fbeb 100644 --- a/scripts/object/mobile/dressed_dark_jedi_master_female_zab_01.py +++ b/scripts/object/mobile/dressed_dark_jedi_master_female_zab_01.py @@ -17,6 +17,10 @@ def setup(core, object): lootGroupChance_3 = 12 object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_master_female_zab_02.py b/scripts/object/mobile/dressed_dark_jedi_master_female_zab_02.py index 9e598690..dba8fbeb 100644 --- a/scripts/object/mobile/dressed_dark_jedi_master_female_zab_02.py +++ b/scripts/object/mobile/dressed_dark_jedi_master_female_zab_02.py @@ -17,6 +17,10 @@ def setup(core, object): lootGroupChance_3 = 12 object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_master_male_arcona_01.py b/scripts/object/mobile/dressed_dark_jedi_master_male_arcona_01.py index ccad8904..dba8fbeb 100644 --- a/scripts/object/mobile/dressed_dark_jedi_master_male_arcona_01.py +++ b/scripts/object/mobile/dressed_dark_jedi_master_male_arcona_01.py @@ -1,4 +1,26 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_master_male_barada_01.py b/scripts/object/mobile/dressed_dark_jedi_master_male_barada_01.py index ccad8904..dba8fbeb 100644 --- a/scripts/object/mobile/dressed_dark_jedi_master_male_barada_01.py +++ b/scripts/object/mobile/dressed_dark_jedi_master_male_barada_01.py @@ -1,4 +1,26 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_master_male_gotal_01.py b/scripts/object/mobile/dressed_dark_jedi_master_male_gotal_01.py index ccad8904..dba8fbeb 100644 --- a/scripts/object/mobile/dressed_dark_jedi_master_male_gotal_01.py +++ b/scripts/object/mobile/dressed_dark_jedi_master_male_gotal_01.py @@ -1,4 +1,26 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_master_male_human_01.py b/scripts/object/mobile/dressed_dark_jedi_master_male_human_01.py index 9e598690..dba8fbeb 100644 --- a/scripts/object/mobile/dressed_dark_jedi_master_male_human_01.py +++ b/scripts/object/mobile/dressed_dark_jedi_master_male_human_01.py @@ -17,6 +17,10 @@ def setup(core, object): lootGroupChance_3 = 12 object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_master_male_human_02.py b/scripts/object/mobile/dressed_dark_jedi_master_male_human_02.py index 9e598690..dba8fbeb 100644 --- a/scripts/object/mobile/dressed_dark_jedi_master_male_human_02.py +++ b/scripts/object/mobile/dressed_dark_jedi_master_male_human_02.py @@ -17,6 +17,10 @@ def setup(core, object): lootGroupChance_3 = 12 object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_master_male_human_03.py b/scripts/object/mobile/dressed_dark_jedi_master_male_human_03.py index 9e598690..dba8fbeb 100644 --- a/scripts/object/mobile/dressed_dark_jedi_master_male_human_03.py +++ b/scripts/object/mobile/dressed_dark_jedi_master_male_human_03.py @@ -17,6 +17,10 @@ def setup(core, object): lootGroupChance_3 = 12 object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_master_male_human_04.py b/scripts/object/mobile/dressed_dark_jedi_master_male_human_04.py index 9e598690..dba8fbeb 100644 --- a/scripts/object/mobile/dressed_dark_jedi_master_male_human_04.py +++ b/scripts/object/mobile/dressed_dark_jedi_master_male_human_04.py @@ -17,6 +17,10 @@ def setup(core, object): lootGroupChance_3 = 12 object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_master_male_human_05.py b/scripts/object/mobile/dressed_dark_jedi_master_male_human_05.py index 9e598690..dba8fbeb 100644 --- a/scripts/object/mobile/dressed_dark_jedi_master_male_human_05.py +++ b/scripts/object/mobile/dressed_dark_jedi_master_male_human_05.py @@ -17,6 +17,10 @@ def setup(core, object): lootGroupChance_3 = 12 object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_master_male_human_06.py b/scripts/object/mobile/dressed_dark_jedi_master_male_human_06.py index 9e598690..dba8fbeb 100644 --- a/scripts/object/mobile/dressed_dark_jedi_master_male_human_06.py +++ b/scripts/object/mobile/dressed_dark_jedi_master_male_human_06.py @@ -17,6 +17,10 @@ def setup(core, object): lootGroupChance_3 = 12 object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_master_male_sul_01.py b/scripts/object/mobile/dressed_dark_jedi_master_male_sul_01.py index ccad8904..dba8fbeb 100644 --- a/scripts/object/mobile/dressed_dark_jedi_master_male_sul_01.py +++ b/scripts/object/mobile/dressed_dark_jedi_master_male_sul_01.py @@ -1,4 +1,26 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_master_male_twk_01.py b/scripts/object/mobile/dressed_dark_jedi_master_male_twk_01.py index ccad8904..dba8fbeb 100644 --- a/scripts/object/mobile/dressed_dark_jedi_master_male_twk_01.py +++ b/scripts/object/mobile/dressed_dark_jedi_master_male_twk_01.py @@ -1,4 +1,26 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_master_male_twk_02.py b/scripts/object/mobile/dressed_dark_jedi_master_male_twk_02.py index ccad8904..dba8fbeb 100644 --- a/scripts/object/mobile/dressed_dark_jedi_master_male_twk_02.py +++ b/scripts/object/mobile/dressed_dark_jedi_master_male_twk_02.py @@ -1,4 +1,26 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_master_male_twk_03.py b/scripts/object/mobile/dressed_dark_jedi_master_male_twk_03.py index ccad8904..dba8fbeb 100644 --- a/scripts/object/mobile/dressed_dark_jedi_master_male_twk_03.py +++ b/scripts/object/mobile/dressed_dark_jedi_master_male_twk_03.py @@ -1,4 +1,26 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_master_male_twk_04.py b/scripts/object/mobile/dressed_dark_jedi_master_male_twk_04.py index ccad8904..dba8fbeb 100644 --- a/scripts/object/mobile/dressed_dark_jedi_master_male_twk_04.py +++ b/scripts/object/mobile/dressed_dark_jedi_master_male_twk_04.py @@ -1,4 +1,26 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_master_male_weequay_01.py b/scripts/object/mobile/dressed_dark_jedi_master_male_weequay_01.py index ccad8904..dba8fbeb 100644 --- a/scripts/object/mobile/dressed_dark_jedi_master_male_weequay_01.py +++ b/scripts/object/mobile/dressed_dark_jedi_master_male_weequay_01.py @@ -1,4 +1,26 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_master_male_zab_01.py b/scripts/object/mobile/dressed_dark_jedi_master_male_zab_01.py index ccad8904..dba8fbeb 100644 --- a/scripts/object/mobile/dressed_dark_jedi_master_male_zab_01.py +++ b/scripts/object/mobile/dressed_dark_jedi_master_male_zab_01.py @@ -1,4 +1,26 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_master_male_zab_02.py b/scripts/object/mobile/dressed_dark_jedi_master_male_zab_02.py index ccad8904..dba8fbeb 100644 --- a/scripts/object/mobile/dressed_dark_jedi_master_male_zab_02.py +++ b/scripts/object/mobile/dressed_dark_jedi_master_male_zab_02.py @@ -1,4 +1,26 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_side_savage.py b/scripts/object/mobile/dressed_dark_side_savage.py index ccad8904..70052ae4 100644 --- a/scripts/object/mobile/dressed_dark_side_savage.py +++ b/scripts/object/mobile/dressed_dark_side_savage.py @@ -1,4 +1,21 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['colorcrystals'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_force_sensitive_crypt_crawler.py b/scripts/object/mobile/dressed_force_sensitive_crypt_crawler.py index ccad8904..a96bd6e6 100644 --- a/scripts/object/mobile/dressed_force_sensitive_crypt_crawler.py +++ b/scripts/object/mobile/dressed_force_sensitive_crypt_crawler.py @@ -1,4 +1,32 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['colorcrystals'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['armor_various','random_loot_rifles'] + lootPoolChances_4 = [80,20] + lootGroupChance_4 = 35 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + lootPoolNames_5 = ['jediholocrons'] + lootPoolChances_5 = [100] + lootGroupChance_5 = 1 + object.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) + + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_force_sensitive_renegade.py b/scripts/object/mobile/dressed_force_sensitive_renegade.py index ccad8904..a96bd6e6 100644 --- a/scripts/object/mobile/dressed_force_sensitive_renegade.py +++ b/scripts/object/mobile/dressed_force_sensitive_renegade.py @@ -1,4 +1,32 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['colorcrystals'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['armor_various','random_loot_rifles'] + lootPoolChances_4 = [80,20] + lootGroupChance_4 = 35 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + lootPoolNames_5 = ['jediholocrons'] + lootPoolChances_5 = [100] + lootGroupChance_5 = 1 + object.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) + + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_forsaken_force_drifter.py b/scripts/object/mobile/dressed_forsaken_force_drifter.py index ccad8904..2c42c975 100644 --- a/scripts/object/mobile/dressed_forsaken_force_drifter.py +++ b/scripts/object/mobile/dressed_forsaken_force_drifter.py @@ -1,4 +1,27 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['colorcrystals'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['jediholocrons'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 1 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_fs_junk_dealer.py b/scripts/object/mobile/dressed_fs_junk_dealer.py index ccad8904..6fed84e5 100644 --- a/scripts/object/mobile/dressed_fs_junk_dealer.py +++ b/scripts/object/mobile/dressed_fs_junk_dealer.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): + object.setAttachment('radial_filename', 'object/conversation'); + object.setAttachment('conversationFile','junk_dealer') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('junk_dealer') return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_gendra.py b/scripts/object/mobile/dressed_gendra.py index ccad8904..ceee905c 100644 --- a/scripts/object/mobile/dressed_gendra.py +++ b/scripts/object/mobile/dressed_gendra.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): - return \ No newline at end of file + object.setAttachment('radial_filename', 'object/conversation'); + object.setAttachment('conversationFile','gendra') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('newbie_gendra') + return diff --git a/scripts/object/mobile/dressed_imperial_officer_f.py b/scripts/object/mobile/dressed_imperial_officer_f.py index ccad8904..b9963b3e 100644 --- a/scripts/object/mobile/dressed_imperial_officer_f.py +++ b/scripts/object/mobile/dressed_imperial_officer_f.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): - return \ No newline at end of file + object.setAttachment('radial_filename', 'object/conversation'); + object.setAttachment('conversationFile','imp_recruiter') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('imperial_recruiter') + return diff --git a/scripts/object/mobile/dressed_imperial_officer_m_2.py b/scripts/object/mobile/dressed_imperial_officer_m_2.py index ccad8904..b9963b3e 100644 --- a/scripts/object/mobile/dressed_imperial_officer_m_2.py +++ b/scripts/object/mobile/dressed_imperial_officer_m_2.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): - return \ No newline at end of file + object.setAttachment('radial_filename', 'object/conversation'); + object.setAttachment('conversationFile','imp_recruiter') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('imperial_recruiter') + return diff --git a/scripts/object/mobile/dressed_imperial_officer_m_3.py b/scripts/object/mobile/dressed_imperial_officer_m_3.py index ccad8904..b9963b3e 100644 --- a/scripts/object/mobile/dressed_imperial_officer_m_3.py +++ b/scripts/object/mobile/dressed_imperial_officer_m_3.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): - return \ No newline at end of file + object.setAttachment('radial_filename', 'object/conversation'); + object.setAttachment('conversationFile','imp_recruiter') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('imperial_recruiter') + return diff --git a/scripts/object/mobile/dressed_imperial_officer_m_4.py b/scripts/object/mobile/dressed_imperial_officer_m_4.py index ccad8904..b9963b3e 100644 --- a/scripts/object/mobile/dressed_imperial_officer_m_4.py +++ b/scripts/object/mobile/dressed_imperial_officer_m_4.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): - return \ No newline at end of file + object.setAttachment('radial_filename', 'object/conversation'); + object.setAttachment('conversationFile','imp_recruiter') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('imperial_recruiter') + return diff --git a/scripts/object/mobile/dressed_imperial_officer_m_5.py b/scripts/object/mobile/dressed_imperial_officer_m_5.py index ccad8904..b9963b3e 100644 --- a/scripts/object/mobile/dressed_imperial_officer_m_5.py +++ b/scripts/object/mobile/dressed_imperial_officer_m_5.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): - return \ No newline at end of file + object.setAttachment('radial_filename', 'object/conversation'); + object.setAttachment('conversationFile','imp_recruiter') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('imperial_recruiter') + return diff --git a/scripts/object/mobile/dressed_imperial_officer_m_6.py b/scripts/object/mobile/dressed_imperial_officer_m_6.py index ccad8904..b9963b3e 100644 --- a/scripts/object/mobile/dressed_imperial_officer_m_6.py +++ b/scripts/object/mobile/dressed_imperial_officer_m_6.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): - return \ No newline at end of file + object.setAttachment('radial_filename', 'object/conversation'); + object.setAttachment('conversationFile','imp_recruiter') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('imperial_recruiter') + return diff --git a/scripts/object/mobile/dressed_mayor_mikdanyell_guhrantt.py b/scripts/object/mobile/dressed_mayor_mikdanyell_guhrantt.py index ccad8904..e8e3da38 100644 --- a/scripts/object/mobile/dressed_mayor_mikdanyell_guhrantt.py +++ b/scripts/object/mobile/dressed_mayor_mikdanyell_guhrantt.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): - return \ No newline at end of file + object.setAttachment('radial_filename', 'object/conversation'); + object.setAttachment('conversationFile','mayor_mikdanyel_guhrantt') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('mos_eisley_mayor') + return diff --git a/scripts/object/mobile/dressed_novice_force_mystic.py b/scripts/object/mobile/dressed_novice_force_mystic.py index ccad8904..a96bd6e6 100644 --- a/scripts/object/mobile/dressed_novice_force_mystic.py +++ b/scripts/object/mobile/dressed_novice_force_mystic.py @@ -1,4 +1,32 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['colorcrystals'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['armor_various','random_loot_rifles'] + lootPoolChances_4 = [80,20] + lootGroupChance_4 = 35 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + lootPoolNames_5 = ['jediholocrons'] + lootPoolChances_5 = [100] + lootGroupChance_5 = 1 + object.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) + + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_rebel_recruiter_human_female_01.py b/scripts/object/mobile/dressed_rebel_recruiter_human_female_01.py index ccad8904..e0dd64a1 100644 --- a/scripts/object/mobile/dressed_rebel_recruiter_human_female_01.py +++ b/scripts/object/mobile/dressed_rebel_recruiter_human_female_01.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): - return \ No newline at end of file + object.setAttachment('radial_filename', 'object/conversation'); + object.setAttachment('conversationFile','reb_recruiter') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('rebel_recruiter') + return diff --git a/scripts/object/mobile/dressed_stormtrooper_m.py b/scripts/object/mobile/dressed_stormtrooper_m.py index 6e1e28ee..e972026a 100644 --- a/scripts/object/mobile/dressed_stormtrooper_m.py +++ b/scripts/object/mobile/dressed_stormtrooper_m.py @@ -7,14 +7,20 @@ def setup(core, object): lootGroupChance_1 = 90 object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) - lootPoolNames_2 = ['composite_armor','random_loot_rifles'] - lootPoolChances_2 = [50,50] - lootGroupChance_2 = 20 + lootPoolNames_2 = ['armor_various','random_loot_rifles'] + lootPoolChances_2 = [99,1] + lootGroupChance_2 = 100 object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) lootPoolNames_3 = ['Colorcrystals'] lootPoolChances_3 = [100] lootGroupChance_3 = 6 object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + # just to test + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 10 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_tatooine_opening_byxle.py b/scripts/object/mobile/dressed_tatooine_opening_byxle.py index ccad8904..a9115a52 100644 --- a/scripts/object/mobile/dressed_tatooine_opening_byxle.py +++ b/scripts/object/mobile/dressed_tatooine_opening_byxle.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): - return \ No newline at end of file + object.setAttachment('radial_filename', 'object/conversation'); + object.setAttachment('conversationFile','byxle') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('tatooine_opening_byxle') + return diff --git a/scripts/object/mobile/dressed_tatooine_opening_dunir.py b/scripts/object/mobile/dressed_tatooine_opening_dunir.py index ccad8904..f9d28082 100644 --- a/scripts/object/mobile/dressed_tatooine_opening_dunir.py +++ b/scripts/object/mobile/dressed_tatooine_opening_dunir.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): - return \ No newline at end of file + object.setAttachment('radial_filename', 'object/conversation'); + object.setAttachment('conversationFile','durni') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('tatooine_opening_dunir') + return diff --git a/scripts/object/mobile/dressed_tatooine_opening_niko.py b/scripts/object/mobile/dressed_tatooine_opening_niko.py index ccad8904..bb8c0ab4 100644 --- a/scripts/object/mobile/dressed_tatooine_opening_niko.py +++ b/scripts/object/mobile/dressed_tatooine_opening_niko.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): - return \ No newline at end of file + object.setAttachment('radial_filename', 'object/conversation'); + object.setAttachment('conversationFile','niko') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('tatooine_opening_niko') + return diff --git a/scripts/object/mobile/dressed_tatooine_opening_reimos.py b/scripts/object/mobile/dressed_tatooine_opening_reimos.py index ccad8904..2b2075d4 100644 --- a/scripts/object/mobile/dressed_tatooine_opening_reimos.py +++ b/scripts/object/mobile/dressed_tatooine_opening_reimos.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): - return \ No newline at end of file + object.setAttachment('radial_filename', 'object/conversation'); + object.setAttachment('conversationFile','reimos') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('tatooine_opening_reimos') + return diff --git a/scripts/object/mobile/dressed_tatooine_opening_toggi.py b/scripts/object/mobile/dressed_tatooine_opening_toggi.py index ccad8904..ee3d1ccf 100644 --- a/scripts/object/mobile/dressed_tatooine_opening_toggi.py +++ b/scripts/object/mobile/dressed_tatooine_opening_toggi.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): - return \ No newline at end of file + object.setAttachment('radial_filename', 'object/conversation'); + object.setAttachment('conversationFile','toggi') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('tatooine_opening_toggi') + return diff --git a/scripts/object/mobile/dressed_untrained_wielder_of_the_darkside.py b/scripts/object/mobile/dressed_untrained_wielder_of_the_darkside.py index ccad8904..c7237ff3 100644 --- a/scripts/object/mobile/dressed_untrained_wielder_of_the_darkside.py +++ b/scripts/object/mobile/dressed_untrained_wielder_of_the_darkside.py @@ -1,4 +1,32 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['colorcrystals'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['armor_various','random_loot_rifles'] + lootPoolChances_4 = [80,20] + lootGroupChance_4 = 35 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + lootPoolNames_5 = ['sithholocrons'] + lootPoolChances_5 = [100] + lootGroupChance_5 = 1 + object.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) + + + + return \ No newline at end of file diff --git a/scripts/object/mobile/junk_dealer_f_01.py b/scripts/object/mobile/junk_dealer_f_01.py index ccad8904..6fed84e5 100644 --- a/scripts/object/mobile/junk_dealer_f_01.py +++ b/scripts/object/mobile/junk_dealer_f_01.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): + object.setAttachment('radial_filename', 'object/conversation'); + object.setAttachment('conversationFile','junk_dealer') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('junk_dealer') return \ No newline at end of file diff --git a/scripts/object/mobile/junk_dealer_f_02.py b/scripts/object/mobile/junk_dealer_f_02.py index ccad8904..6e9644e2 100644 --- a/scripts/object/mobile/junk_dealer_f_02.py +++ b/scripts/object/mobile/junk_dealer_f_02.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): + object.setAttachment('radial_filename', 'object/conversation'); + object.setAttachment('conversationFile','junk_dealer') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('junk_dealer_smuggler') return \ No newline at end of file diff --git a/scripts/object/mobile/junk_dealer_f_03.py b/scripts/object/mobile/junk_dealer_f_03.py index ccad8904..9ed1eded 100644 --- a/scripts/object/mobile/junk_dealer_f_03.py +++ b/scripts/object/mobile/junk_dealer_f_03.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): + object.setAttachment('radial_filename', 'object/conversation'); + object.setAttachment('conversationFile','junk_dealer') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('junk_dealer_special') return \ No newline at end of file diff --git a/scripts/object/mobile/junk_dealer_m_01.py b/scripts/object/mobile/junk_dealer_m_01.py index ccad8904..6fed84e5 100644 --- a/scripts/object/mobile/junk_dealer_m_01.py +++ b/scripts/object/mobile/junk_dealer_m_01.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): + object.setAttachment('radial_filename', 'object/conversation'); + object.setAttachment('conversationFile','junk_dealer') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('junk_dealer') return \ No newline at end of file diff --git a/scripts/object/mobile/junk_dealer_m_02.py b/scripts/object/mobile/junk_dealer_m_02.py index ccad8904..6e9644e2 100644 --- a/scripts/object/mobile/junk_dealer_m_02.py +++ b/scripts/object/mobile/junk_dealer_m_02.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): + object.setAttachment('radial_filename', 'object/conversation'); + object.setAttachment('conversationFile','junk_dealer') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('junk_dealer_smuggler') return \ No newline at end of file diff --git a/scripts/object/mobile/junk_dealer_m_03.py b/scripts/object/mobile/junk_dealer_m_03.py index ccad8904..9ed1eded 100644 --- a/scripts/object/mobile/junk_dealer_m_03.py +++ b/scripts/object/mobile/junk_dealer_m_03.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): + object.setAttachment('radial_filename', 'object/conversation'); + object.setAttachment('conversationFile','junk_dealer') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('junk_dealer_special') return \ No newline at end of file diff --git a/scripts/object/mobile/junk_dender.py b/scripts/object/mobile/junk_dender.py index ccad8904..9ed1eded 100644 --- a/scripts/object/mobile/junk_dender.py +++ b/scripts/object/mobile/junk_dender.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): + object.setAttachment('radial_filename', 'object/conversation'); + object.setAttachment('conversationFile','junk_dealer') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('junk_dealer_special') return \ No newline at end of file diff --git a/scripts/object/mobile/junk_lila.py b/scripts/object/mobile/junk_lila.py index ccad8904..9ed1eded 100644 --- a/scripts/object/mobile/junk_lila.py +++ b/scripts/object/mobile/junk_lila.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): + object.setAttachment('radial_filename', 'object/conversation'); + object.setAttachment('conversationFile','junk_dealer') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('junk_dealer_special') return \ No newline at end of file diff --git a/scripts/object/mobile/junk_malik.py b/scripts/object/mobile/junk_malik.py index ccad8904..9ed1eded 100644 --- a/scripts/object/mobile/junk_malik.py +++ b/scripts/object/mobile/junk_malik.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): + object.setAttachment('radial_filename', 'object/conversation'); + object.setAttachment('conversationFile','junk_dealer') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('junk_dealer_special') return \ No newline at end of file diff --git a/scripts/object/mobile/junk_nado.py b/scripts/object/mobile/junk_nado.py index ccad8904..9ed1eded 100644 --- a/scripts/object/mobile/junk_nado.py +++ b/scripts/object/mobile/junk_nado.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): + object.setAttachment('radial_filename', 'object/conversation'); + object.setAttachment('conversationFile','junk_dealer') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('junk_dealer_special') return \ No newline at end of file diff --git a/scripts/object/mobile/junk_nathan.py b/scripts/object/mobile/junk_nathan.py index ccad8904..9ed1eded 100644 --- a/scripts/object/mobile/junk_nathan.py +++ b/scripts/object/mobile/junk_nathan.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): + object.setAttachment('radial_filename', 'object/conversation'); + object.setAttachment('conversationFile','junk_dealer') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('junk_dealer_special') return \ No newline at end of file diff --git a/scripts/object/mobile/junk_ollobo.py b/scripts/object/mobile/junk_ollobo.py index ccad8904..9ed1eded 100644 --- a/scripts/object/mobile/junk_ollobo.py +++ b/scripts/object/mobile/junk_ollobo.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): + object.setAttachment('radial_filename', 'object/conversation'); + object.setAttachment('conversationFile','junk_dealer') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('junk_dealer_special') return \ No newline at end of file diff --git a/scripts/object/mobile/junk_quich.py b/scripts/object/mobile/junk_quich.py index ccad8904..9ed1eded 100644 --- a/scripts/object/mobile/junk_quich.py +++ b/scripts/object/mobile/junk_quich.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): + object.setAttachment('radial_filename', 'object/conversation'); + object.setAttachment('conversationFile','junk_dealer') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('junk_dealer_special') return \ No newline at end of file diff --git a/scripts/object/mobile/junk_reggi.py b/scripts/object/mobile/junk_reggi.py index ccad8904..9ed1eded 100644 --- a/scripts/object/mobile/junk_reggi.py +++ b/scripts/object/mobile/junk_reggi.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): + object.setAttachment('radial_filename', 'object/conversation'); + object.setAttachment('conversationFile','junk_dealer') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('junk_dealer_special') return \ No newline at end of file diff --git a/scripts/object/mobile/junk_sheani.py b/scripts/object/mobile/junk_sheani.py index ccad8904..9ed1eded 100644 --- a/scripts/object/mobile/junk_sheani.py +++ b/scripts/object/mobile/junk_sheani.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): + object.setAttachment('radial_filename', 'object/conversation'); + object.setAttachment('conversationFile','junk_dealer') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('junk_dealer_special') return \ No newline at end of file diff --git a/scripts/object/mobile/junk_sneg.py b/scripts/object/mobile/junk_sneg.py index ccad8904..9ed1eded 100644 --- a/scripts/object/mobile/junk_sneg.py +++ b/scripts/object/mobile/junk_sneg.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): + object.setAttachment('radial_filename', 'object/conversation'); + object.setAttachment('conversationFile','junk_dealer') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('junk_dealer_special') return \ No newline at end of file diff --git a/scripts/object/mobile/outbreak_junk_dealer_f_01.py b/scripts/object/mobile/outbreak_junk_dealer_f_01.py index ccad8904..8d5252a1 100644 --- a/scripts/object/mobile/outbreak_junk_dealer_f_01.py +++ b/scripts/object/mobile/outbreak_junk_dealer_f_01.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): + object.setAttachment('radial_filename', 'object/conversation'); + object.setAttachment('conversationFile','junk_dealer') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('outbreak_junk_dealer') return \ No newline at end of file diff --git a/scripts/object/mobile/outbreak_junk_dealer_f_02.py b/scripts/object/mobile/outbreak_junk_dealer_f_02.py index ccad8904..8d5252a1 100644 --- a/scripts/object/mobile/outbreak_junk_dealer_f_02.py +++ b/scripts/object/mobile/outbreak_junk_dealer_f_02.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): + object.setAttachment('radial_filename', 'object/conversation'); + object.setAttachment('conversationFile','junk_dealer') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('outbreak_junk_dealer') return \ No newline at end of file diff --git a/scripts/object/mobile/outbreak_junk_dealer_m_01.py b/scripts/object/mobile/outbreak_junk_dealer_m_01.py index ccad8904..8d5252a1 100644 --- a/scripts/object/mobile/outbreak_junk_dealer_m_01.py +++ b/scripts/object/mobile/outbreak_junk_dealer_m_01.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): + object.setAttachment('radial_filename', 'object/conversation'); + object.setAttachment('conversationFile','junk_dealer') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('outbreak_junk_dealer') return \ No newline at end of file diff --git a/scripts/object/mobile/outbreak_junk_dealer_m_02.py b/scripts/object/mobile/outbreak_junk_dealer_m_02.py index ccad8904..8d5252a1 100644 --- a/scripts/object/mobile/outbreak_junk_dealer_m_02.py +++ b/scripts/object/mobile/outbreak_junk_dealer_m_02.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): + object.setAttachment('radial_filename', 'object/conversation'); + object.setAttachment('conversationFile','junk_dealer') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('outbreak_junk_dealer') return \ No newline at end of file diff --git a/scripts/object/mobile/outbreak_junk_dealer_m_03.py b/scripts/object/mobile/outbreak_junk_dealer_m_03.py index ccad8904..8d5252a1 100644 --- a/scripts/object/mobile/outbreak_junk_dealer_m_03.py +++ b/scripts/object/mobile/outbreak_junk_dealer_m_03.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): + object.setAttachment('radial_filename', 'object/conversation'); + object.setAttachment('conversationFile','junk_dealer') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('outbreak_junk_dealer') return \ No newline at end of file diff --git a/scripts/object/mobile/respec_seller_f_1.py b/scripts/object/mobile/respec_seller_f_1.py index c7327815..1af596e0 100644 --- a/scripts/object/mobile/respec_seller_f_1.py +++ b/scripts/object/mobile/respec_seller_f_1.py @@ -4,4 +4,7 @@ from resources.datatables import Options def setup(core, object): object.setAttachment('radial_filename', 'object/conversation') object.setAttachment('conversationFile', 'respec') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('respec_seller') return \ No newline at end of file diff --git a/scripts/object/mobile/som/must_junk.py b/scripts/object/mobile/som/must_junk.py index ccad8904..d33eab84 100644 --- a/scripts/object/mobile/som/must_junk.py +++ b/scripts/object/mobile/som/must_junk.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): + object.setAttachment('radial_filename', 'object/conversation'); + object.setAttachment('conversationFile','junk_dealer') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + junkdealer.setStfName('som_mustafarian_junk') return \ No newline at end of file diff --git a/scripts/object/mobile/space_privateer_tier1_tatooine.py b/scripts/object/mobile/space_privateer_tier1_tatooine.py index ccad8904..b0f81354 100644 --- a/scripts/object/mobile/space_privateer_tier1_tatooine.py +++ b/scripts/object/mobile/space_privateer_tier1_tatooine.py @@ -1,4 +1,9 @@ import sys +from resources.datatables import Options def setup(core, object): - return \ No newline at end of file + #object.setAttachment('radial_filename', 'object/conversation'); + #object.setAttachment('conversationFile','imp_recruiter') + object.setOptionsBitmask(Options.INVULNERABLE) + object.setCustomName('Dravis') + return diff --git a/scripts/object/mobile/space_privateer_tier2_shamdon.py b/scripts/object/mobile/space_privateer_tier2_shamdon.py index ccad8904..f30504b0 100644 --- a/scripts/object/mobile/space_privateer_tier2_shamdon.py +++ b/scripts/object/mobile/space_privateer_tier2_shamdon.py @@ -1,4 +1,9 @@ import sys +from resources.datatables import Options def setup(core, object): - return \ No newline at end of file + #object.setAttachment('radial_filename', 'object/conversation'); + #object.setAttachment('conversationFile','imp_recruiter') + object.setOptionsBitmask(Options.INVULNERABLE) + object.setCustomName('Shamdon Kree ') + return diff --git a/scripts/object/mobile/tusken_raider.py b/scripts/object/mobile/tusken_raider.py index 2d06ec85..0fcd5010 100644 --- a/scripts/object/mobile/tusken_raider.py +++ b/scripts/object/mobile/tusken_raider.py @@ -7,7 +7,7 @@ def setup(core, object): lootGroupChance_1 = 90 object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) - lootPoolNames_2 = ['batons','random_loot_rifles',] + lootPoolNames_2 = ['batons','random_loot_rifles'] lootPoolChances_2 = [60,40] lootGroupChance_2 = 20 object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) diff --git a/scripts/object/mobile/vehicle/barc_speeder_imperial.py b/scripts/object/mobile/vehicle/barc_speeder_imperial.py index ccad8904..6093148c 100644 --- a/scripts/object/mobile/vehicle/barc_speeder_imperial.py +++ b/scripts/object/mobile/vehicle/barc_speeder_imperial.py @@ -1,4 +1,9 @@ import sys def setup(core, object): + core.buffService.addBuffToCreature(object, 'vehicle_pvp_barc_imperial', object) + return + +def use(core, actor, object): + core.buffService.addBuffToCreature(object, 'vehicle_pvp_barc_imperial', object) return \ No newline at end of file diff --git a/scripts/object/mobile/vehicle/barc_speeder_rebel.py b/scripts/object/mobile/vehicle/barc_speeder_rebel.py index ccad8904..402fab24 100644 --- a/scripts/object/mobile/vehicle/barc_speeder_rebel.py +++ b/scripts/object/mobile/vehicle/barc_speeder_rebel.py @@ -1,4 +1,8 @@ import sys def setup(core, object): + return + +def use(core, actor, object): + core.buffService.addBuffToCreature(object, 'vehicle_pvp_barc_rebel', object) return \ No newline at end of file diff --git a/scripts/object/mobile/vehicle/walker_at_rt_camo.py b/scripts/object/mobile/vehicle/walker_at_rt_camo.py index ccad8904..38038e73 100644 --- a/scripts/object/mobile/vehicle/walker_at_rt_camo.py +++ b/scripts/object/mobile/vehicle/walker_at_rt_camo.py @@ -1,4 +1,8 @@ import sys def setup(core, object): + return + +def use(core, actor, object): + core.buffService.addBuffToCreature(object, 'vehicle_at_rt', object) return \ No newline at end of file diff --git a/scripts/object/mobile/vehicle/walker_at_rt_reg.py b/scripts/object/mobile/vehicle/walker_at_rt_reg.py index ccad8904..38038e73 100644 --- a/scripts/object/mobile/vehicle/walker_at_rt_reg.py +++ b/scripts/object/mobile/vehicle/walker_at_rt_reg.py @@ -1,4 +1,8 @@ import sys def setup(core, object): + return + +def use(core, actor, object): + core.buffService.addBuffToCreature(object, 'vehicle_at_rt', object) return \ No newline at end of file diff --git a/scripts/object/tangible/deed/city_deed/cityhall_corellia_deed.py b/scripts/object/tangible/deed/city_deed/cityhall_corellia_deed.py index d76c4b31..07ab9319 100644 --- a/scripts/object/tangible/deed/city_deed/cityhall_corellia_deed.py +++ b/scripts/object/tangible/deed/city_deed/cityhall_corellia_deed.py @@ -2,10 +2,6 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'deeds/structureDeed') - object.setConstructorTemplate('object/building/player/shared_construction_structure.iff') - object.setStructureTemplate('object/tangible/deed/city_deed/shared_cityhall_corellia_deed.iff') - #object.setLotRequirement(5) - object.setBMR(308) return def use(core, actor, object): diff --git a/scripts/object/tangible/deed/city_deed/cityhall_naboo_deed.py b/scripts/object/tangible/deed/city_deed/cityhall_naboo_deed.py index 51249c92..07ab9319 100644 --- a/scripts/object/tangible/deed/city_deed/cityhall_naboo_deed.py +++ b/scripts/object/tangible/deed/city_deed/cityhall_naboo_deed.py @@ -2,10 +2,6 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'deeds/structureDeed') - object.setConstructorTemplate('object/building/player/shared_construction_structure.iff') - object.setStructureTemplate('object/tangible/deed/city_deed/shared_cityhall_naboo_deed.iff') - #object.setLotRequirement(5) - object.setBMR(308) return def use(core, actor, object): diff --git a/scripts/object/tangible/deed/city_deed/cityhall_tatooine_deed.py b/scripts/object/tangible/deed/city_deed/cityhall_tatooine_deed.py index d0afdb68..07ab9319 100644 --- a/scripts/object/tangible/deed/city_deed/cityhall_tatooine_deed.py +++ b/scripts/object/tangible/deed/city_deed/cityhall_tatooine_deed.py @@ -2,10 +2,6 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'deeds/structureDeed') - object.setConstructorTemplate('object/building/player/shared_construction_structure.iff') - object.setStructureTemplate('object/tangible/deed/city_deed/shared_cityhall_tatooine_deed.iff') - #object.setLotRequirement(5) - object.setBMR(308) return def use(core, actor, object): diff --git a/scripts/object/tangible/deed/city_deed/garden_tatooine_sml_01_deed.py b/scripts/object/tangible/deed/city_deed/garden_tatooine_sml_01_deed.py index ccad8904..07ab9319 100644 --- a/scripts/object/tangible/deed/city_deed/garden_tatooine_sml_01_deed.py +++ b/scripts/object/tangible/deed/city_deed/garden_tatooine_sml_01_deed.py @@ -1,4 +1,8 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/structureDeed') + return + +def use(core, actor, object): return \ No newline at end of file diff --git a/scripts/object/tangible/deed/city_deed/shuttleport_tatooine_deed.py b/scripts/object/tangible/deed/city_deed/shuttleport_tatooine_deed.py index ccad8904..07ab9319 100644 --- a/scripts/object/tangible/deed/city_deed/shuttleport_tatooine_deed.py +++ b/scripts/object/tangible/deed/city_deed/shuttleport_tatooine_deed.py @@ -1,4 +1,8 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/structureDeed') + return + +def use(core, actor, object): return \ No newline at end of file diff --git a/scripts/object/tangible/deed/guild_deed/corellia_guild_deed.py b/scripts/object/tangible/deed/guild_deed/corellia_guild_deed.py index 4551ea56..07ab9319 100644 --- a/scripts/object/tangible/deed/guild_deed/corellia_guild_deed.py +++ b/scripts/object/tangible/deed/guild_deed/corellia_guild_deed.py @@ -2,10 +2,6 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'deeds/structureDeed') - object.setConstructorTemplate('object/building/player/construction/shared_construction_player_guildhall_corellia_style_01.iff') - object.setStructureTemplate('object/tangible/deed/guild_deed/shared_corellia_guild_deed.iff') - object.setLotRequirement(5) - object.setBMR(100) return def use(core, actor, object): diff --git a/scripts/object/tangible/deed/guild_deed/generic_guild_deed.py b/scripts/object/tangible/deed/guild_deed/generic_guild_deed.py index e7bc0a46..07ab9319 100644 --- a/scripts/object/tangible/deed/guild_deed/generic_guild_deed.py +++ b/scripts/object/tangible/deed/guild_deed/generic_guild_deed.py @@ -2,10 +2,6 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'deeds/structureDeed') - object.setConstructorTemplate('object/building/player/construction/shared_construction_player_guildhall_corellia_style_01.iff') - object.setStructureTemplate('object/tangible/deed/guild_deed/shared_generic_guild_deed.iff') - object.setLotRequirement(5) - object.setBMR(100) return def use(core, actor, object): diff --git a/scripts/object/tangible/deed/guild_deed/naboo_guild_deed.py b/scripts/object/tangible/deed/guild_deed/naboo_guild_deed.py index 773614bf..07ab9319 100644 --- a/scripts/object/tangible/deed/guild_deed/naboo_guild_deed.py +++ b/scripts/object/tangible/deed/guild_deed/naboo_guild_deed.py @@ -2,10 +2,6 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'deeds/structureDeed') - object.setConstructorTemplate('object/building/player/construction/shared_construction_player_guildhall_naboo_style_01.iff') - object.setStructureTemplate('object/tangible/deed/guild_deed/shared_naboo_guild_deed.iff') - object.setLotRequirement(5) - object.setBMR(100) return def use(core, actor, object): diff --git a/scripts/object/tangible/deed/guild_deed/tatooine_guild_deed.py b/scripts/object/tangible/deed/guild_deed/tatooine_guild_deed.py index fe254f2c..07ab9319 100644 --- a/scripts/object/tangible/deed/guild_deed/tatooine_guild_deed.py +++ b/scripts/object/tangible/deed/guild_deed/tatooine_guild_deed.py @@ -2,10 +2,6 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'deeds/structureDeed') - object.setConstructorTemplate('object/building/player/construction/shared_construction_player_guildhall_tatooine_style_01.iff') - object.setStructureTemplate('object/tangible/deed/guild_deed/shared_tatooine_guild_deed.iff') - object.setLotRequirement(5) - object.setBMR(100) return def use(core, actor, object): diff --git a/scripts/object/tangible/deed/guild_deed/tatooine_guild_style_02_deed.py b/scripts/object/tangible/deed/guild_deed/tatooine_guild_style_02_deed.py index 8560e4bb..07ab9319 100644 --- a/scripts/object/tangible/deed/guild_deed/tatooine_guild_style_02_deed.py +++ b/scripts/object/tangible/deed/guild_deed/tatooine_guild_style_02_deed.py @@ -2,10 +2,6 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'deeds/structureDeed') - object.setConstructorTemplate('object/building/player/construction/shared_construction_player_guildhall_tatooine_style_02.iff') - object.setStructureTemplate('object/tangible/deed/guild_deed/shared_tatooine_guild_style_02_deed.iff') - object.setLotRequirement(5) - object.setBMR(100) return def use(core, actor, object): diff --git a/scripts/object/tangible/deed/harvester_deed/harvester_flora_deed.py b/scripts/object/tangible/deed/harvester_deed/harvester_flora_deed.py index bc69c878..10d24ebd 100644 --- a/scripts/object/tangible/deed/harvester_deed/harvester_flora_deed.py +++ b/scripts/object/tangible/deed/harvester_deed/harvester_flora_deed.py @@ -2,8 +2,8 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'deeds/harvesterDeed') - object.setConstructorTemplate('object/installation/mining_ore/construction/shared_construction_mining_ore_harvester_style_1.iff') - object.setStructureTemplate('object/installation/mining_organic/shared_mining_organic_flora_farm.iff') - object.setLotRequirement(1) - object.setBMR(16) + object.setAttachment('ConstructorTemplate', 'object/installation/mining_ore/construction/shared_construction_mining_ore_harvester_style_1.iff') + object.setAttachment('StructureTemplate', 'object/installation/mining_organic/shared_mining_organic_flora_farm.iff') + object.setAttachment('LotRequirement', 1) + object.setIntAttribute('examine_maintenance_rate', 16) return \ No newline at end of file diff --git a/scripts/object/tangible/deed/harvester_deed/harvester_flora_deed_elite.py b/scripts/object/tangible/deed/harvester_deed/harvester_flora_deed_elite.py index 3bda16b3..8a14fe9a 100644 --- a/scripts/object/tangible/deed/harvester_deed/harvester_flora_deed_elite.py +++ b/scripts/object/tangible/deed/harvester_deed/harvester_flora_deed_elite.py @@ -2,8 +2,8 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'deeds/harvesterDeed') - object.setConstructorTemplate('object/installation/mining_ore/construction/shared_construction_mining_ore_harvester_style_heavy.iff') - object.setStructureTemplate('object/installation/mining_organic/shared_mining_organic_flora_farm_elite.iff') - object.setLotRequirement(3) - object.setBMR(120) + object.setAttachment('ConstructorTemplate', 'object/installation/mining_ore/construction/shared_construction_mining_ore_harvester_style_heavy.iff') + object.setAttachment('StructureTemplate', 'object/installation/mining_organic/shared_mining_organic_flora_farm_elite.iff') + object.setAttachment('LotRequirement', 3) + object.setIntAttribute('examine_maintenance_rate', 120) return \ No newline at end of file diff --git a/scripts/object/tangible/deed/harvester_deed/harvester_flora_deed_heavy.py b/scripts/object/tangible/deed/harvester_deed/harvester_flora_deed_heavy.py index 419f60f5..1006c18b 100644 --- a/scripts/object/tangible/deed/harvester_deed/harvester_flora_deed_heavy.py +++ b/scripts/object/tangible/deed/harvester_deed/harvester_flora_deed_heavy.py @@ -2,8 +2,8 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'deeds/harvesterDeed') - object.setConstructorTemplate('object/installation/mining_ore/construction/shared_construction_mining_ore_harvester_style_heavy.iff') - object.setStructureTemplate('object/installation/mining_organic/shared_mining_organic_flora_farm_heavy.iff') - object.setLotRequirement(1) - object.setBMR(90) + object.setAttachment('ConstructorTemplate', 'object/installation/mining_ore/construction/shared_construction_mining_ore_harvester_style_heavy.iff') + object.setAttachment('StructureTemplate', 'object/installation/mining_organic/shared_mining_organic_flora_farm_heavy.iff') + object.setAttachment('LotRequirement', 1) + object.setIntAttribute('examine_maintenance_rate', 90) return \ No newline at end of file diff --git a/scripts/object/tangible/deed/harvester_deed/harvester_flora_deed_medium.py b/scripts/object/tangible/deed/harvester_deed/harvester_flora_deed_medium.py index 9eb27e8b..41c49098 100644 --- a/scripts/object/tangible/deed/harvester_deed/harvester_flora_deed_medium.py +++ b/scripts/object/tangible/deed/harvester_deed/harvester_flora_deed_medium.py @@ -2,8 +2,8 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'deeds/harvesterDeed') - object.setConstructorTemplate('object/installation/mining_ore/construction/shared_construction_mining_ore_harvester_style_2.iff') - object.setStructureTemplate('object/installation/mining_organic/shared_mining_organic_flora_farm_medium.iff') - object.setLotRequirement(1) - object.setBMR(60) + object.setAttachment('ConstructorTemplate', 'object/installation/mining_ore/construction/shared_construction_mining_ore_harvester_style_2.iff') + object.setAttachment('StructureTemplate', 'object/installation/mining_organic/shared_mining_organic_flora_farm_medium.iff') + object.setAttachment('LotRequirement', 1) + object.setIntAttribute('examine_maintenance_rate', 60) return \ No newline at end of file diff --git a/scripts/object/tangible/deed/harvester_deed/harvester_gas_deed.py b/scripts/object/tangible/deed/harvester_deed/harvester_gas_deed.py index 5a4a2404..d11eb62d 100644 --- a/scripts/object/tangible/deed/harvester_deed/harvester_gas_deed.py +++ b/scripts/object/tangible/deed/harvester_deed/harvester_gas_deed.py @@ -2,8 +2,8 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'deeds/harvesterDeed') - object.setConstructorTemplate('object/installation/mining_ore/construction/shared_construction_mining_ore_harvester_style_1.iff') - object.setStructureTemplate('object/installation/mining_gas/shared_mining_gas_harvester_style_1.iff') - object.setLotRequirement(1) - object.setBMR(16) + object.setAttachment('ConstructorTemplate', 'object/installation/mining_ore/construction/shared_construction_mining_ore_harvester_style_1.iff') + object.setAttachment('StructureTemplate', 'object/installation/mining_gas/shared_mining_gas_harvester_style_1.iff') + object.setAttachment('LotRequirement', 1) + object.setIntAttribute('examine_maintenance_rate', 16) return \ No newline at end of file diff --git a/scripts/object/tangible/deed/harvester_deed/harvester_gas_deed_elite.py b/scripts/object/tangible/deed/harvester_deed/harvester_gas_deed_elite.py index f560acdf..0ea574be 100644 --- a/scripts/object/tangible/deed/harvester_deed/harvester_gas_deed_elite.py +++ b/scripts/object/tangible/deed/harvester_deed/harvester_gas_deed_elite.py @@ -2,8 +2,8 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'deeds/harvesterDeed') - object.setConstructorTemplate('object/installation/mining_ore/construction/shared_construction_mining_ore_harvester_style_heavy.iff') - object.setStructureTemplate('object/installation/mining_gas/shared_mining_gas_harvester_style_4.iff') - object.setLotRequirement(3) - object.setBMR(120) + object.setAttachment('ConstructorTemplate', 'object/installation/mining_ore/construction/shared_construction_mining_ore_harvester_style_heavy.iff') + object.setAttachment('StructureTemplate', 'object/installation/mining_gas/shared_mining_gas_harvester_style_4.iff') + object.setAttachment('LotRequirement', 3) + object.setIntAttribute('examine_maintenance_rate', 120) return \ No newline at end of file diff --git a/scripts/object/tangible/deed/harvester_deed/harvester_gas_deed_heavy.py b/scripts/object/tangible/deed/harvester_deed/harvester_gas_deed_heavy.py index c9bbd64b..d77581cf 100644 --- a/scripts/object/tangible/deed/harvester_deed/harvester_gas_deed_heavy.py +++ b/scripts/object/tangible/deed/harvester_deed/harvester_gas_deed_heavy.py @@ -2,8 +2,8 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'deeds/harvesterDeed') - object.setConstructorTemplate('object/installation/mining_ore/construction/shared_construction_mining_ore_harvester_style_heavy.iff') - object.setStructureTemplate('object/installation/mining_gas/shared_mining_gas_harvester_style_3.iff') - object.setLotRequirement(1) - object.setBMR(90) + object.setAttachment('ConstructorTemplate', 'object/installation/mining_ore/construction/shared_construction_mining_ore_harvester_style_heavy.iff') + object.setAttachment('StructureTemplate', 'object/installation/mining_gas/shared_mining_gas_harvester_style_3.iff') + object.setAttachment('LotRequirement', 1) + object.setIntAttribute('examine_maintenance_rate', 90) return \ No newline at end of file diff --git a/scripts/object/tangible/deed/harvester_deed/harvester_gas_deed_medium.py b/scripts/object/tangible/deed/harvester_deed/harvester_gas_deed_medium.py index 10a7007a..4e999ccb 100644 --- a/scripts/object/tangible/deed/harvester_deed/harvester_gas_deed_medium.py +++ b/scripts/object/tangible/deed/harvester_deed/harvester_gas_deed_medium.py @@ -2,8 +2,8 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'deeds/harvesterDeed') - object.setConstructorTemplate('object/installation/mining_ore/construction/shared_construction_mining_ore_harvester_style_2.iff') - object.setStructureTemplate('object/installation/mining_gas/shared_mining_gas_harvester_style_2.iff') - object.setLotRequirement(1) - object.setBMR(60) + object.setAttachment('ConstructorTemplate', 'object/installation/mining_ore/construction/shared_construction_mining_ore_harvester_style_2.iff') + object.setAttachment('StructureTemplate', 'object/installation/mining_gas/shared_mining_gas_harvester_style_2.iff') + object.setAttachment('LotRequirement', 1) + object.setIntAttribute('examine_maintenance_rate', 60) return \ No newline at end of file diff --git a/scripts/object/tangible/deed/harvester_deed/harvester_liquid_deed.py b/scripts/object/tangible/deed/harvester_deed/harvester_liquid_deed.py index b0455145..39590829 100644 --- a/scripts/object/tangible/deed/harvester_deed/harvester_liquid_deed.py +++ b/scripts/object/tangible/deed/harvester_deed/harvester_liquid_deed.py @@ -2,8 +2,8 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'deeds/harvesterDeed') - object.setConstructorTemplate('object/installation/mining_ore/construction/shared_construction_mining_ore_harvester_style_1.iff') - object.setStructureTemplate('object/installation/mining_liquid/shared_mining_liquid_harvester_style_1.iff') - object.setLotRequirement(1) - object.setBMR(16) + object.setAttachment('ConstructorTemplate', 'object/installation/mining_ore/construction/shared_construction_mining_ore_harvester_style_1.iff') + object.setAttachment('StructureTemplate', 'object/installation/mining_liquid/shared_mining_liquid_harvester_style_1.iff') + object.setAttachment('LotRequirement', 1) + object.setIntAttribute('examine_maintenance_rate', 16) return \ No newline at end of file diff --git a/scripts/object/tangible/deed/harvester_deed/harvester_liquid_deed_elite.py b/scripts/object/tangible/deed/harvester_deed/harvester_liquid_deed_elite.py index 723f3eab..b3eaba78 100644 --- a/scripts/object/tangible/deed/harvester_deed/harvester_liquid_deed_elite.py +++ b/scripts/object/tangible/deed/harvester_deed/harvester_liquid_deed_elite.py @@ -2,8 +2,8 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'deeds/harvesterDeed') - object.setConstructorTemplate('object/installation/mining_ore/construction/shared_construction_mining_ore_harvester_style_heavy.iff') - object.setStructureTemplate('object/installation/mining_liquid/shared_mining_liquid_harvester_style_4.iff') - object.setLotRequirement(3) - object.setBMR(120) + object.setAttachment('ConstructorTemplate', 'object/installation/mining_ore/construction/shared_construction_mining_ore_harvester_style_heavy.iff') + object.setAttachment('StructureTemplate', 'object/installation/mining_liquid/shared_mining_liquid_harvester_style_4.iff') + object.setAttachment('LotRequirement', 3) + object.setIntAttribute('examine_maintenance_rate', 120) return \ No newline at end of file diff --git a/scripts/object/tangible/deed/harvester_deed/harvester_liquid_deed_heavy.py b/scripts/object/tangible/deed/harvester_deed/harvester_liquid_deed_heavy.py index 773e722d..48a97f35 100644 --- a/scripts/object/tangible/deed/harvester_deed/harvester_liquid_deed_heavy.py +++ b/scripts/object/tangible/deed/harvester_deed/harvester_liquid_deed_heavy.py @@ -2,8 +2,8 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'deeds/harvesterDeed') - object.setConstructorTemplate('object/installation/mining_ore/construction/shared_construction_mining_ore_harvester_style_heavy.iff') - object.setStructureTemplate('object/installation/mining_liquid/shared_mining_liquid_harvester_style_3.iff') - object.setLotRequirement(1) - object.setBMR(90) + object.setAttachment('ConstructorTemplate', 'object/installation/mining_ore/construction/shared_construction_mining_ore_harvester_style_heavy.iff') + object.setAttachment('StructureTemplate', 'object/installation/mining_liquid/shared_mining_liquid_harvester_style_3.iff') + object.setAttachment('LotRequirement', 1) + object.setIntAttribute('examine_maintenance_rate', 90) return \ No newline at end of file diff --git a/scripts/object/tangible/deed/harvester_deed/harvester_liquid_deed_medium.py b/scripts/object/tangible/deed/harvester_deed/harvester_liquid_deed_medium.py index 1f40b563..3ece7d28 100644 --- a/scripts/object/tangible/deed/harvester_deed/harvester_liquid_deed_medium.py +++ b/scripts/object/tangible/deed/harvester_deed/harvester_liquid_deed_medium.py @@ -2,8 +2,8 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'deeds/harvesterDeed') - object.setConstructorTemplate('object/installation/mining_ore/construction/shared_construction_mining_ore_harvester_style_2.iff') - object.setStructureTemplate('object/installation/mining_liquid/shared_mining_liquid_harvester_style_2.iff') - object.setLotRequirement(1) - object.setBMR(60) + object.setAttachment('ConstructorTemplate', 'object/installation/mining_ore/construction/shared_construction_mining_ore_harvester_style_2.iff') + object.setAttachment('StructureTemplate', 'object/installation/mining_liquid/shared_mining_liquid_harvester_style_2.iff') + object.setAttachment('LotRequirement', 1) + object.setIntAttribute('examine_maintenance_rate', 60) return \ No newline at end of file diff --git a/scripts/object/tangible/deed/harvester_deed/harvester_moisture_deed.py b/scripts/object/tangible/deed/harvester_deed/harvester_moisture_deed.py index 0241a524..213a8d53 100644 --- a/scripts/object/tangible/deed/harvester_deed/harvester_moisture_deed.py +++ b/scripts/object/tangible/deed/harvester_deed/harvester_moisture_deed.py @@ -2,8 +2,8 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'deeds/harvesterDeed') - object.setConstructorTemplate('object/installation/mining_ore/construction/shared_construction_mining_ore_harvester_style_1.iff') - object.setStructureTemplate('object/installation/mining_liquid/shared_mining_liquid_moisture_harvester.iff') - object.setLotRequirement(1) - object.setBMR(16) + object.setAttachment('ConstructorTemplate', 'object/installation/mining_ore/construction/shared_construction_mining_ore_harvester_style_1.iff') + object.setAttachment('StructureTemplate', 'object/installation/mining_liquid/shared_mining_liquid_moisture_harvester.iff') + object.setAttachment('LotRequirement', 1) + object.setIntAttribute('examine_maintenance_rate', 16) return \ No newline at end of file diff --git a/scripts/object/tangible/deed/harvester_deed/harvester_moisture_deed_elite.py b/scripts/object/tangible/deed/harvester_deed/harvester_moisture_deed_elite.py index e008e004..ba7cf3f9 100644 --- a/scripts/object/tangible/deed/harvester_deed/harvester_moisture_deed_elite.py +++ b/scripts/object/tangible/deed/harvester_deed/harvester_moisture_deed_elite.py @@ -2,8 +2,8 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'deeds/harvesterDeed') - object.setConstructorTemplate('object/installation/mining_ore/construction/shared_construction_mining_ore_harvester_style_heavy.iff') - object.setStructureTemplate('object/installation/mining_liquid/shared_mining_liquid_moisture_harvester_elite.iff') - object.setLotRequirement(3) - object.setBMR(120) + object.setAttachment('ConstructorTemplate', 'object/installation/mining_ore/construction/shared_construction_mining_ore_harvester_style_heavy.iff') + object.setAttachment('StructureTemplate', 'object/installation/mining_liquid/shared_mining_liquid_moisture_harvester_elite.iff') + object.setAttachment('LotRequirement', 3) + object.setIntAttribute('examine_maintenance_rate', 120) return \ No newline at end of file diff --git a/scripts/object/tangible/deed/harvester_deed/harvester_moisture_deed_heavy.py b/scripts/object/tangible/deed/harvester_deed/harvester_moisture_deed_heavy.py index e9206a11..5ca18dc4 100644 --- a/scripts/object/tangible/deed/harvester_deed/harvester_moisture_deed_heavy.py +++ b/scripts/object/tangible/deed/harvester_deed/harvester_moisture_deed_heavy.py @@ -2,8 +2,8 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'deeds/harvesterDeed') - object.setConstructorTemplate('object/installation/mining_ore/construction/shared_construction_mining_ore_harvester_style_heavy.iff') - object.setStructureTemplate('object/installation/mining_liquid/shared_mining_liquid_moisture_harvester_heavy.iff') - object.setLotRequirement(1) - object.setBMR(90) + object.setAttachment('ConstructorTemplate', 'object/installation/mining_ore/construction/shared_construction_mining_ore_harvester_style_heavy.iff') + object.setAttachment('StructureTemplate', 'object/installation/mining_liquid/shared_mining_liquid_moisture_harvester_heavy.iff') + object.setAttachment('LotRequirement', 1) + object.setIntAttribute('examine_maintenance_rate', 90) return \ No newline at end of file diff --git a/scripts/object/tangible/deed/harvester_deed/harvester_moisture_deed_medium.py b/scripts/object/tangible/deed/harvester_deed/harvester_moisture_deed_medium.py index 2d1b24d2..e14043d2 100644 --- a/scripts/object/tangible/deed/harvester_deed/harvester_moisture_deed_medium.py +++ b/scripts/object/tangible/deed/harvester_deed/harvester_moisture_deed_medium.py @@ -2,8 +2,8 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'deeds/harvesterDeed') - object.setConstructorTemplate('object/installation/mining_ore/construction/shared_construction_mining_ore_harvester_style_2.iff') - object.setStructureTemplate('object/installation/mining_liquid/shared_mining_liquid_moisture_harvester_medium.iff') - object.setLotRequirement(1) - object.setBMR(60) + object.setAttachment('ConstructorTemplate', 'object/installation/mining_ore/construction/shared_construction_mining_ore_harvester_style_2.iff') + object.setAttachment('StructureTemplate', 'object/installation/mining_liquid/shared_mining_liquid_moisture_harvester_medium.iff') + object.setAttachment('LotRequirement', 1) + object.setIntAttribute('examine_maintenance_rate', 60) return \ No newline at end of file diff --git a/scripts/object/tangible/deed/harvester_deed/harvester_ore_deed_elite.py b/scripts/object/tangible/deed/harvester_deed/harvester_ore_deed_elite.py index b8f86d6e..6c3db03a 100644 --- a/scripts/object/tangible/deed/harvester_deed/harvester_ore_deed_elite.py +++ b/scripts/object/tangible/deed/harvester_deed/harvester_ore_deed_elite.py @@ -2,8 +2,8 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'deeds/harvesterDeed') - object.setConstructorTemplate('object/installation/mining_ore/construction/shared_construction_mining_ore_harvester_style_heavy.iff') - object.setStructureTemplate('object/installation/mining_ore/shared_mining_ore_harvester_elite.iff') - object.setLotRequirement(3) - object.setBMR(120) + object.setAttachment('ConstructorTemplate', 'object/installation/mining_ore/construction/shared_construction_mining_ore_harvester_style_heavy.iff') + object.setAttachment('StructureTemplate', 'object/installation/mining_ore/shared_mining_ore_harvester_elite.iff') + object.setAttachment('LotRequirement', 3) + object.setIntAttribute('examine_maintenance_rate', 120) return \ No newline at end of file diff --git a/scripts/object/tangible/deed/harvester_deed/harvester_ore_heavy_deed.py b/scripts/object/tangible/deed/harvester_deed/harvester_ore_heavy_deed.py index 28978e9c..e15fd8b4 100644 --- a/scripts/object/tangible/deed/harvester_deed/harvester_ore_heavy_deed.py +++ b/scripts/object/tangible/deed/harvester_deed/harvester_ore_heavy_deed.py @@ -2,8 +2,8 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'deeds/harvesterDeed') - object.setConstructorTemplate('object/installation/mining_ore/construction/shared_construction_mining_ore_harvester_style_heavy.iff') - object.setStructureTemplate('object/installation/mining_ore/shared_mining_ore_harvester_heavy.iff') - object.setLotRequirement(1) - object.setBMR(90) + object.setAttachment('ConstructorTemplate', 'object/installation/mining_ore/construction/shared_construction_mining_ore_harvester_style_heavy.iff') + object.setAttachment('StructureTemplate', 'object/installation/mining_ore/shared_mining_ore_harvester_heavy.iff') + object.setAttachment('LotRequirement', 1) + object.setIntAttribute('examine_maintenance_rate', 90) return \ No newline at end of file diff --git a/scripts/object/tangible/deed/harvester_deed/harvester_ore_s1_deed.py b/scripts/object/tangible/deed/harvester_deed/harvester_ore_s1_deed.py index ca897eb7..42fbafc3 100644 --- a/scripts/object/tangible/deed/harvester_deed/harvester_ore_s1_deed.py +++ b/scripts/object/tangible/deed/harvester_deed/harvester_ore_s1_deed.py @@ -2,8 +2,8 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'deeds/harvesterDeed') - object.setConstructorTemplate('object/installation/mining_ore/construction/shared_construction_mining_ore_harvester_style_1.iff') - object.setStructureTemplate('object/installation/mining_ore/shared_mining_ore_harvester_style_1.iff') - object.setLotRequirement(1) - object.setBMR(16) + object.setAttachment('ConstructorTemplate', 'object/installation/mining_ore/construction/shared_construction_mining_ore_harvester_style_1.iff') + object.setAttachment('StructureTemplate', 'object/installation/mining_ore/shared_mining_ore_harvester_style_1.iff') + object.setAttachment('LotRequirement', 1) + object.setIntAttribute('examine_maintenance_rate', 16) return \ No newline at end of file diff --git a/scripts/object/tangible/deed/harvester_deed/harvester_ore_s2_deed.py b/scripts/object/tangible/deed/harvester_deed/harvester_ore_s2_deed.py index 97ca86a7..e619c2ee 100644 --- a/scripts/object/tangible/deed/harvester_deed/harvester_ore_s2_deed.py +++ b/scripts/object/tangible/deed/harvester_deed/harvester_ore_s2_deed.py @@ -2,8 +2,8 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'deeds/harvesterDeed') - object.setConstructorTemplate('object/installation/mining_ore/construction/shared_construction_mining_ore_harvester_style_2.iff') - object.setStructureTemplate('object/installation/mining_ore/shared_mining_ore_harvester_style_2.iff') - object.setLotRequirement(1) - object.setBMR(60) + object.setAttachment('ConstructorTemplate', 'object/installation/mining_ore/construction/shared_construction_mining_ore_harvester_style_2.iff') + object.setAttachment('StructureTemplate', 'object/installation/mining_ore/shared_mining_ore_harvester_style_2.iff') + object.setAttachment('LotRequirement', 1) + object.setIntAttribute('examine_maintenance_rate', 60) return \ No newline at end of file diff --git a/scripts/object/tangible/deed/player_house_deed/corellia_house_large_deed.py b/scripts/object/tangible/deed/player_house_deed/corellia_house_large_deed.py index 7110ddc2..07ab9319 100644 --- a/scripts/object/tangible/deed/player_house_deed/corellia_house_large_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/corellia_house_large_deed.py @@ -2,10 +2,6 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'deeds/structureDeed') - object.setConstructorTemplate('object/building/player/construction/shared_construction_player_house_corellia_large_style_01.iff') - object.setStructureTemplate('object/tangible/deed/player_house_deed/shared_corellia_house_large_deed.iff') - object.setLotRequirement(5) - object.setBMR(26) return def use(core, actor, object): diff --git a/scripts/object/tangible/deed/player_house_deed/corellia_house_large_style_02_deed.py b/scripts/object/tangible/deed/player_house_deed/corellia_house_large_style_02_deed.py index fd316e06..07ab9319 100644 --- a/scripts/object/tangible/deed/player_house_deed/corellia_house_large_style_02_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/corellia_house_large_style_02_deed.py @@ -2,10 +2,6 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'deeds/structureDeed') - object.setConstructorTemplate('object/building/player/construction/shared_construction_player_house_corellia_large_style_02.iff') - object.setStructureTemplate('object/tangible/deed/player_house_deed/shared_corellia_house_large_style_02_deed.iff') - object.setLotRequirement(5) - object.setBMR(26) return def use(core, actor, object): diff --git a/scripts/object/tangible/deed/player_house_deed/corellia_house_medium_deed.py b/scripts/object/tangible/deed/player_house_deed/corellia_house_medium_deed.py index 0794bf6a..07ab9319 100644 --- a/scripts/object/tangible/deed/player_house_deed/corellia_house_medium_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/corellia_house_medium_deed.py @@ -2,10 +2,6 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'deeds/structureDeed') - object.setConstructorTemplate('object/building/player/construction/shared_player_house_corellia_medium_style_01.iff') - object.setStructureTemplate('object/tangible/deed/player_house_deed/shared_corellia_house_medium_deed.iff') - object.setLotRequirement(2) - object.setBMR(18) return def use(core, actor, object): diff --git a/scripts/object/tangible/deed/player_house_deed/corellia_house_medium_style_02_deed.py b/scripts/object/tangible/deed/player_house_deed/corellia_house_medium_style_02_deed.py index ff561136..07ab9319 100644 --- a/scripts/object/tangible/deed/player_house_deed/corellia_house_medium_style_02_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/corellia_house_medium_style_02_deed.py @@ -2,10 +2,6 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'deeds/structureDeed') - object.setConstructorTemplate('object/building/player/construction/shared_player_house_corellia_medium_style_02.iff') - object.setStructureTemplate('object/tangible/deed/player_house_deed/shared_corellia_house_medium_style_02_deed.iff') - object.setLotRequirement(2) - object.setBMR(18) return def use(core, actor, object): diff --git a/scripts/object/tangible/deed/player_house_deed/corellia_house_small_deed.py b/scripts/object/tangible/deed/player_house_deed/corellia_house_small_deed.py index 412cb41f..07ab9319 100644 --- a/scripts/object/tangible/deed/player_house_deed/corellia_house_small_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/corellia_house_small_deed.py @@ -2,10 +2,6 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'deeds/structureDeed') - object.setConstructorTemplate('object/building/player/construction/shared_construction_player_house_corellia_small_style_01.iff') - object.setStructureTemplate('object/tangible/deed/player_house_deed/shared_corellia_house_small_deed.iff') - object.setLotRequirement(2) - object.setBMR(8) return def use(core, actor, object): diff --git a/scripts/object/tangible/deed/player_house_deed/corellia_house_small_floor_02_deed.py b/scripts/object/tangible/deed/player_house_deed/corellia_house_small_floor_02_deed.py index d7c943c8..07ab9319 100644 --- a/scripts/object/tangible/deed/player_house_deed/corellia_house_small_floor_02_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/corellia_house_small_floor_02_deed.py @@ -2,10 +2,6 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'deeds/structureDeed') - object.setConstructorTemplate('object/building/player/construction/shared_construction_player_house_corellia_small_style_01.iff') - object.setStructureTemplate('object/tangible/deed/player_house_deed/shared_corellia_house_small_floor_02_deed.iff') - object.setLotRequirement(2) - object.setBMR(8) return def use(core, actor, object): diff --git a/scripts/object/tangible/deed/player_house_deed/corellia_house_small_style_02_deed.py b/scripts/object/tangible/deed/player_house_deed/corellia_house_small_style_02_deed.py index 5d4d2b6a..07ab9319 100644 --- a/scripts/object/tangible/deed/player_house_deed/corellia_house_small_style_02_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/corellia_house_small_style_02_deed.py @@ -2,10 +2,6 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'deeds/structureDeed') - object.setConstructorTemplate('object/building/player/construction/shared_construction_player_house_corellia_small_style_02.iff') - object.setStructureTemplate('object/tangible/deed/player_house_deed/shared_corellia_house_small_style_02_deed.iff') - object.setLotRequirement(2) - object.setBMR(8) return def use(core, actor, object): diff --git a/scripts/object/tangible/deed/player_house_deed/corellia_house_small_style_02_floor_02_deed.py b/scripts/object/tangible/deed/player_house_deed/corellia_house_small_style_02_floor_02_deed.py index af5a8c82..07ab9319 100644 --- a/scripts/object/tangible/deed/player_house_deed/corellia_house_small_style_02_floor_02_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/corellia_house_small_style_02_floor_02_deed.py @@ -2,10 +2,6 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'deeds/structureDeed') - object.setConstructorTemplate('object/building/player/construction/shared_construction_player_house_corellia_small_style_02.iff') - object.setStructureTemplate('object/tangible/deed/player_house_deed/shared_corellia_house_small_style_02_floor_02_deed.iff') - object.setLotRequirement(2) - object.setBMR(8) return def use(core, actor, object): diff --git a/scripts/object/tangible/deed/player_house_deed/generic_house_large_deed.py b/scripts/object/tangible/deed/player_house_deed/generic_house_large_deed.py index 8762d716..07ab9319 100644 --- a/scripts/object/tangible/deed/player_house_deed/generic_house_large_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/generic_house_large_deed.py @@ -2,10 +2,6 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'deeds/structureDeed') - object.setConstructorTemplate('object/building/player/construction/shared_construction_player_house_generic_large_style_01.iff') - object.setStructureTemplate('object/tangible/deed/player_house_deed/shared_generic_house_large_deed.iff') - object.setLotRequirement(5) - object.setBMR(26) return def use(core, actor, object): diff --git a/scripts/object/tangible/deed/player_house_deed/generic_house_large_style_02_deed.py b/scripts/object/tangible/deed/player_house_deed/generic_house_large_style_02_deed.py index 33ac2fb5..07ab9319 100644 --- a/scripts/object/tangible/deed/player_house_deed/generic_house_large_style_02_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/generic_house_large_style_02_deed.py @@ -2,10 +2,6 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'deeds/structureDeed') - object.setConstructorTemplate('object/building/player/construction/shared_construction_player_house_generic_large_style_02.iff') - object.setStructureTemplate('object/tangible/deed/player_house_deed/shared_generic_house_large_style_02_deed.iff') - object.setLotRequirement(2) - object.setBMR(26) return def use(core, actor, object): diff --git a/scripts/object/tangible/deed/player_house_deed/generic_house_large_window_s01_deed.py b/scripts/object/tangible/deed/player_house_deed/generic_house_large_window_s01_deed.py index 5c5fe535..07ab9319 100644 --- a/scripts/object/tangible/deed/player_house_deed/generic_house_large_window_s01_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/generic_house_large_window_s01_deed.py @@ -2,10 +2,6 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'deeds/structureDeed') - object.setConstructorTemplate('object/building/player/construction/shared_construction_player_house_generic_large_style_01.iff') - object.setStructureTemplate('object/tangible/deed/player_house_deed/shared_generic_house_large_window_s01_deed.iff') - object.setLotRequirement(2) - object.setBMR(26) return def use(core, actor, object): diff --git a/scripts/object/tangible/deed/player_house_deed/generic_house_large_window_s02_deed.py b/scripts/object/tangible/deed/player_house_deed/generic_house_large_window_s02_deed.py index 8ad15d4e..07ab9319 100644 --- a/scripts/object/tangible/deed/player_house_deed/generic_house_large_window_s02_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/generic_house_large_window_s02_deed.py @@ -2,10 +2,6 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'deeds/structureDeed') - object.setConstructorTemplate('object/building/player/construction/shared_construction_player_house_generic_large_style_02.iff') - object.setStructureTemplate('object/tangible/deed/player_house_deed/shared_generic_house_large_window_s02_deed.iff') - object.setLotRequirement(2) - object.setBMR(26) return def use(core, actor, object): diff --git a/scripts/object/tangible/deed/player_house_deed/generic_house_medium_deed.py b/scripts/object/tangible/deed/player_house_deed/generic_house_medium_deed.py index 98fbe311..07ab9319 100644 --- a/scripts/object/tangible/deed/player_house_deed/generic_house_medium_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/generic_house_medium_deed.py @@ -2,10 +2,6 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'deeds/structureDeed') - object.setConstructorTemplate('object/building/player/construction/shared_construction_player_house_generic_medium_style_01.iff') - object.setStructureTemplate('object/tangible/deed/player_house_deed/shared_generic_house_medium_deed.iff') - object.setLotRequirement(2) - object.setBMR(18) return def use(core, actor, object): diff --git a/scripts/object/tangible/deed/player_house_deed/generic_house_medium_style_02_deed.py b/scripts/object/tangible/deed/player_house_deed/generic_house_medium_style_02_deed.py index f8941dc1..07ab9319 100644 --- a/scripts/object/tangible/deed/player_house_deed/generic_house_medium_style_02_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/generic_house_medium_style_02_deed.py @@ -2,10 +2,6 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'deeds/structureDeed') - object.setConstructorTemplate('object/building/player/construction/shared_construction_player_house_generic_medium_style_02.iff') - object.setStructureTemplate('object/tangible/deed/player_house_deed/shared_generic_house_medium_style_02_deed.iff') - object.setLotRequirement(2) - object.setBMR(18) return def use(core, actor, object): diff --git a/scripts/object/tangible/deed/player_house_deed/generic_house_medium_windowed_deed.py b/scripts/object/tangible/deed/player_house_deed/generic_house_medium_windowed_deed.py index 28949069..07ab9319 100644 --- a/scripts/object/tangible/deed/player_house_deed/generic_house_medium_windowed_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/generic_house_medium_windowed_deed.py @@ -2,10 +2,6 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'deeds/structureDeed') - object.setConstructorTemplate('object/building/player/construction/shared_construction_player_house_generic_medium_style_01.iff') - object.setStructureTemplate('object/tangible/deed/player_house_deed/shared_generic_house_medium_windowed_deed.iff') - object.setLotRequirement(2) - object.setBMR(18) return def use(core, actor, object): diff --git a/scripts/object/tangible/deed/player_house_deed/generic_house_medium_windowed_s02_deed.py b/scripts/object/tangible/deed/player_house_deed/generic_house_medium_windowed_s02_deed.py index b784b441..07ab9319 100644 --- a/scripts/object/tangible/deed/player_house_deed/generic_house_medium_windowed_s02_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/generic_house_medium_windowed_s02_deed.py @@ -2,10 +2,6 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'deeds/structureDeed') - object.setConstructorTemplate('object/building/player/construction/shared_construction_player_house_generic_medium_style_02.iff') - object.setStructureTemplate('object/tangible/deed/player_house_deed/shared_generic_house_medium_windowed_s02_deed.iff') - object.setLotRequirement(2) - object.setBMR(18) return def use(core, actor, object): diff --git a/scripts/object/tangible/deed/player_house_deed/generic_house_small_deed.py b/scripts/object/tangible/deed/player_house_deed/generic_house_small_deed.py index 15cdd156..07ab9319 100644 --- a/scripts/object/tangible/deed/player_house_deed/generic_house_small_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/generic_house_small_deed.py @@ -2,10 +2,6 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'deeds/structureDeed') - object.setConstructorTemplate('object/building/player/construction/shared_construction_player_house_generic_small_style_01.iff') - object.setStructureTemplate('object/tangible/deed/player_house_deed/shared_generic_house_small_deed.iff') - object.setLotRequirement(2) - object.setBMR(8) return def use(core, actor, object): diff --git a/scripts/object/tangible/deed/player_house_deed/generic_house_small_floor_02_deed.py b/scripts/object/tangible/deed/player_house_deed/generic_house_small_floor_02_deed.py index 830af4dc..5483eb6d 100644 --- a/scripts/object/tangible/deed/player_house_deed/generic_house_small_floor_02_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/generic_house_small_floor_02_deed.py @@ -2,8 +2,4 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'deeds/structureDeed') - object.setConstructorTemplate('object/building/player/construction/shared_construction_player_house_generic_small_style_02.iff') - object.setStructureTemplate('object/tangible/deed/player_house_deed/shared_generic_house_small_floor_02_deed.iff') - object.setLotRequirement(2) - object.setBMR(8) return \ No newline at end of file diff --git a/scripts/object/tangible/deed/player_house_deed/generic_house_small_style_02_deed.py b/scripts/object/tangible/deed/player_house_deed/generic_house_small_style_02_deed.py index 54ae2ecb..29729ab1 100644 --- a/scripts/object/tangible/deed/player_house_deed/generic_house_small_style_02_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/generic_house_small_style_02_deed.py @@ -2,8 +2,4 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'deeds/structureDeed') - object.setConstructorTemplate('object/building/player/construction/shared_construction_player_house_generic_small_style_02.iff') - object.setStructureTemplate('object/tangible/deed/player_house_deed/shared_generic_house_small_style_02_deed.iff') - object.setLotRequirement(2) - object.setBMR(8) return diff --git a/scripts/object/tangible/deed/player_house_deed/generic_house_small_style_02_floor_02_deed.py b/scripts/object/tangible/deed/player_house_deed/generic_house_small_style_02_floor_02_deed.py index 4ca8c73e..29729ab1 100644 --- a/scripts/object/tangible/deed/player_house_deed/generic_house_small_style_02_floor_02_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/generic_house_small_style_02_floor_02_deed.py @@ -2,8 +2,4 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'deeds/structureDeed') - object.setConstructorTemplate('object/building/player/construction/shared_construction_player_house_generic_small_style_02.iff') - object.setStructureTemplate('object/tangible/deed/player_house_deed/shared_generic_house_small_style_02_floor_02_deed.iff') - object.setLotRequirement(2) - object.setBMR(8) return diff --git a/scripts/object/tangible/deed/player_house_deed/generic_house_small_window_deed.py b/scripts/object/tangible/deed/player_house_deed/generic_house_small_window_deed.py index 5bad5b8e..07ab9319 100644 --- a/scripts/object/tangible/deed/player_house_deed/generic_house_small_window_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/generic_house_small_window_deed.py @@ -2,10 +2,6 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'deeds/structureDeed') - object.setConstructorTemplate('object/building/player/construction/shared_construction_player_house_generic_small_style_01.iff') - object.setStructureTemplate('object/tangible/deed/player_house_deed/shared_generic_house_small_window_deed.iff') - object.setLotRequirement(2) - object.setBMR(8) return def use(core, actor, object): diff --git a/scripts/object/tangible/deed/player_house_deed/generic_house_small_window_style_03_deed.py b/scripts/object/tangible/deed/player_house_deed/generic_house_small_window_style_03_deed.py index 3666b630..07ab9319 100644 --- a/scripts/object/tangible/deed/player_house_deed/generic_house_small_window_style_03_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/generic_house_small_window_style_03_deed.py @@ -2,10 +2,6 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'deeds/structureDeed') - object.setConstructorTemplate('object/building/player/construction/shared_construction_player_house_generic_small_style_02.iff') - object.setStructureTemplate('object/tangible/deed/player_house_deed/shared_generic_house_small_window_style_03_deed.iff') - object.setLotRequirement(2) - object.setBMR(8) return def use(core, actor, object): diff --git a/scripts/object/tangible/deed/player_house_deed/jabbas_sail_barge_deed.py b/scripts/object/tangible/deed/player_house_deed/jabbas_sail_barge_deed.py index 515f876b..07ab9319 100644 --- a/scripts/object/tangible/deed/player_house_deed/jabbas_sail_barge_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/jabbas_sail_barge_deed.py @@ -2,10 +2,6 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'deeds/structureDeed') - object.setConstructorTemplate('object/building/player/construction/shared_construction_player_house_jabbas_sail_barge.iff') - object.setStructureTemplate('object/tangible/deed/player_house_deed/shared_jabbas_sail_barge_deed.iff') - object.setLotRequirement(2) - object.setBMR(8) return def use(core, actor, object): diff --git a/scripts/object/tangible/deed/player_house_deed/merchant_tent_style_01_deed.py b/scripts/object/tangible/deed/player_house_deed/merchant_tent_style_01_deed.py index 39fa9d08..07ab9319 100644 --- a/scripts/object/tangible/deed/player_house_deed/merchant_tent_style_01_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/merchant_tent_style_01_deed.py @@ -2,10 +2,6 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'deeds/structureDeed') - object.setConstructorTemplate('object/building/player/construction/shared_construction_structure.iff') - object.setStructureTemplate('object/tangible/deed/player_house_deed/shared_merchant_tent_style_01_deed.iff') - object.setLotRequirement(2) - object.setBMR(8) return def use(core, actor, object): diff --git a/scripts/object/tangible/deed/player_house_deed/merchant_tent_style_02_deed.py b/scripts/object/tangible/deed/player_house_deed/merchant_tent_style_02_deed.py index 387a8928..07ab9319 100644 --- a/scripts/object/tangible/deed/player_house_deed/merchant_tent_style_02_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/merchant_tent_style_02_deed.py @@ -2,10 +2,6 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'deeds/structureDeed') - object.setConstructorTemplate('object/building/player/construction/shared_construction_structure.iff') - object.setStructureTemplate('object/tangible/deed/player_house_deed/shared_merchant_tent_style_02_deed.iff') - object.setLotRequirement(2) - object.setBMR(8) return def use(core, actor, object): diff --git a/scripts/object/tangible/deed/player_house_deed/merchant_tent_style_03_deed.py b/scripts/object/tangible/deed/player_house_deed/merchant_tent_style_03_deed.py index 38c8003f..07ab9319 100644 --- a/scripts/object/tangible/deed/player_house_deed/merchant_tent_style_03_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/merchant_tent_style_03_deed.py @@ -2,10 +2,6 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'deeds/structureDeed') - object.setConstructorTemplate('object/building/player/construction/shared_construction_structure.iff') - object.setStructureTemplate('object/tangible/deed/player_house_deed/shared_merchant_tent_style_03_deed.iff') - object.setLotRequirement(2) - object.setBMR(8) return def use(core, actor, object): diff --git a/scripts/object/tangible/deed/player_house_deed/mustafar_house_lg.py b/scripts/object/tangible/deed/player_house_deed/mustafar_house_lg.py index 9232137e..07ab9319 100644 --- a/scripts/object/tangible/deed/player_house_deed/mustafar_house_lg.py +++ b/scripts/object/tangible/deed/player_house_deed/mustafar_house_lg.py @@ -2,10 +2,6 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'deeds/structureDeed') - object.setConstructorTemplate('object/building/player/construction/shared_construction_structure.iff') - object.setStructureTemplate('object/tangible/deed/player_house_deed/shared_mustafar_house_lg.iff') - object.setLotRequirement(2) - object.setBMR(8) return def use(core, actor, object): diff --git a/scripts/object/tangible/deed/player_house_deed/naboo_house_large_deed.py b/scripts/object/tangible/deed/player_house_deed/naboo_house_large_deed.py index 0f0a6353..5483eb6d 100644 --- a/scripts/object/tangible/deed/player_house_deed/naboo_house_large_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/naboo_house_large_deed.py @@ -2,12 +2,4 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'deeds/structureDeed') - object.setConstructorTemplate('object/building/player/construction/shared_construction_player_house_naboo_large_style_01.iff') - object.setStructureTemplate('object/tangible/deed/player_house_deed/shared_naboo_house_large_deed.iff') - object.setLotRequirement(2) - object.setBMR(8) - return - - - - + return \ No newline at end of file diff --git a/scripts/object/tangible/deed/player_house_deed/naboo_house_medium_deed.py b/scripts/object/tangible/deed/player_house_deed/naboo_house_medium_deed.py index 22d9b33e..07ab9319 100644 --- a/scripts/object/tangible/deed/player_house_deed/naboo_house_medium_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/naboo_house_medium_deed.py @@ -2,10 +2,6 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'deeds/structureDeed') - object.setConstructorTemplate('object/building/player/construction/shared_construction_player_house_naboo_medium_style_01.iff') - object.setStructureTemplate('object/tangible/deed/player_house_deed/shared_naboo_house_medium_deed.iff') - object.setLotRequirement(2) - object.setBMR(18) return def use(core, actor, object): diff --git a/scripts/object/tangible/deed/player_house_deed/naboo_house_small_deed.py b/scripts/object/tangible/deed/player_house_deed/naboo_house_small_deed.py index edff2158..07ab9319 100644 --- a/scripts/object/tangible/deed/player_house_deed/naboo_house_small_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/naboo_house_small_deed.py @@ -2,10 +2,6 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'deeds/structureDeed') - object.setConstructorTemplate('object/building/player/construction/shared_construction_player_house_naboo_small_style_01.iff') - object.setStructureTemplate('object/tangible/deed/player_house_deed/shared_naboo_house_small_deed.iff') - object.setLotRequirement(2) - object.setBMR(18) return def use(core, actor, object): diff --git a/scripts/object/tangible/deed/player_house_deed/naboo_house_small_style_02_deed.py b/scripts/object/tangible/deed/player_house_deed/naboo_house_small_style_02_deed.py index adeca170..07ab9319 100644 --- a/scripts/object/tangible/deed/player_house_deed/naboo_house_small_style_02_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/naboo_house_small_style_02_deed.py @@ -2,10 +2,6 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'deeds/structureDeed') - object.setConstructorTemplate('object/building/player/construction/shared_construction_player_house_naboo_small_style_02.iff') - object.setStructureTemplate('object/tangible/deed/player_house_deed/shared_naboo_house_small_style_02_deed.iff') - object.setLotRequirement(2) - object.setBMR(18) return def use(core, actor, object): diff --git a/scripts/object/tangible/deed/player_house_deed/naboo_house_small_window_deed.py b/scripts/object/tangible/deed/player_house_deed/naboo_house_small_window_deed.py index 8ebc7feb..07ab9319 100644 --- a/scripts/object/tangible/deed/player_house_deed/naboo_house_small_window_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/naboo_house_small_window_deed.py @@ -2,10 +2,6 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'deeds/structureDeed') - object.setConstructorTemplate('object/building/player/construction/shared_player_house_naboo_small_window_style_01.iff') - object.setStructureTemplate('object/tangible/deed/player_house_deed/shared_naboo_house_small_window_deed.iff') - object.setLotRequirement(2) - object.setBMR(18) return def use(core, actor, object): diff --git a/scripts/object/tangible/deed/player_house_deed/player_house_tcg_8_bespin_house_deed.py b/scripts/object/tangible/deed/player_house_deed/player_house_tcg_8_bespin_house_deed.py index 937edeb4..07ab9319 100644 --- a/scripts/object/tangible/deed/player_house_deed/player_house_tcg_8_bespin_house_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/player_house_tcg_8_bespin_house_deed.py @@ -2,10 +2,6 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'deeds/structureDeed') - object.setConstructorTemplate('object/building/player/construction/shared_construction_structure.iff') - object.setStructureTemplate('object/tangible/deed/player_house_deed/shared_player_house_tcg_8_bespin_house_deed.iff') - object.setLotRequirement(2) - object.setBMR(8) return def use(core, actor, object): diff --git a/scripts/object/tangible/deed/player_house_deed/tatooine_house_large_deed.py b/scripts/object/tangible/deed/player_house_deed/tatooine_house_large_deed.py index 7110ddc2..07ab9319 100644 --- a/scripts/object/tangible/deed/player_house_deed/tatooine_house_large_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/tatooine_house_large_deed.py @@ -2,10 +2,6 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'deeds/structureDeed') - object.setConstructorTemplate('object/building/player/construction/shared_construction_player_house_corellia_large_style_01.iff') - object.setStructureTemplate('object/tangible/deed/player_house_deed/shared_corellia_house_large_deed.iff') - object.setLotRequirement(5) - object.setBMR(26) return def use(core, actor, object): diff --git a/scripts/object/tangible/deed/player_house_deed/tatooine_house_medium_deed.py b/scripts/object/tangible/deed/player_house_deed/tatooine_house_medium_deed.py index b9918233..07ab9319 100644 --- a/scripts/object/tangible/deed/player_house_deed/tatooine_house_medium_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/tatooine_house_medium_deed.py @@ -2,10 +2,6 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'deeds/structureDeed') - object.setConstructorTemplate('object/building/player/construction/shared_construction_player_house_tatooine_medium_style_01.iff') - object.setStructureTemplate('object/tangible/deed/player_house_deed/shared_tatooine_house_medium_deed.iff') - object.setLotRequirement(2) - object.setBMR(18) return def use(core, actor, object): diff --git a/scripts/object/tangible/deed/player_house_deed/tatooine_house_small_deed.py b/scripts/object/tangible/deed/player_house_deed/tatooine_house_small_deed.py index dd23d101..07ab9319 100644 --- a/scripts/object/tangible/deed/player_house_deed/tatooine_house_small_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/tatooine_house_small_deed.py @@ -2,10 +2,6 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'deeds/structureDeed') - object.setConstructorTemplate('object/building/player/construction/shared_construction_player_house_tatooine_small_style_01.iff') - object.setStructureTemplate('object/tangible/deed/player_house_deed/shared_tatooine_house_small_deed.iff') - object.setLotRequirement(2) - object.setBMR(8) return def use(core, actor, object): diff --git a/scripts/object/tangible/deed/player_house_deed/tatooine_house_small_style_02_deed.py b/scripts/object/tangible/deed/player_house_deed/tatooine_house_small_style_02_deed.py index 31de820d..07ab9319 100644 --- a/scripts/object/tangible/deed/player_house_deed/tatooine_house_small_style_02_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/tatooine_house_small_style_02_deed.py @@ -2,10 +2,6 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'deeds/structureDeed') - object.setConstructorTemplate('object/building/player/construction/shared_tatooine_house_small_style_02_deed.iff') - object.setStructureTemplate('object/tangible/deed/player_house_deed/shared_tatooine_house_small_deed.iff') - object.setLotRequirement(2) - object.setBMR(8) return def use(core, actor, object): diff --git a/scripts/object/tangible/deed/vehicle_deed/landspeeder_tantive4_deed.py b/scripts/object/tangible/deed/vehicle_deed/landspeeder_tantive4_deed.py index 92a45a9d..f031d37f 100644 --- a/scripts/object/tangible/deed/vehicle_deed/landspeeder_tantive4_deed.py +++ b/scripts/object/tangible/deed/vehicle_deed/landspeeder_tantive4_deed.py @@ -1,7 +1,7 @@ import sys def setup(core, object): - object.setAttachment('radial_filename', 'vehicleDeed') + object.setAttachment('radial_filename', 'deeds/vehicleDeed') return def use(core, actor, object): @@ -21,4 +21,4 @@ def use(core, actor, object): core.simulationService.add(vehicle, vehicle.getPosition().x, vehicle.getPosition().z, True) actor.setAttachment('activeVehicleID', vehicle.getObjectID()) - return \ No newline at end of file + return diff --git a/scripts/object/tangible/food/crafted/drink_breath_of_heaven.py b/scripts/object/tangible/food/crafted/drink_breath_of_heaven.py index ccad8904..eec73983 100644 --- a/scripts/object/tangible/food/crafted/drink_breath_of_heaven.py +++ b/scripts/object/tangible/food/crafted/drink_breath_of_heaven.py @@ -1,4 +1,5 @@ import sys def setup(core, object): - return \ No newline at end of file + object.setAttachment('radial_filename', 'shared_drink_breath_of_heaven') + return diff --git a/scripts/object/tangible/furniture/technical/guild_registry_initial.py b/scripts/object/tangible/furniture/technical/guild_registry_initial.py index ccad8904..25ce3c98 100644 --- a/scripts/object/tangible/furniture/technical/guild_registry_initial.py +++ b/scripts/object/tangible/furniture/technical/guild_registry_initial.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'object/guild_registry') return \ No newline at end of file diff --git a/scripts/object/tangible/mission/mission_bounty_droid_probot.py b/scripts/object/tangible/mission/mission_bounty_droid_probot.py index ccad8904..4b30916a 100644 --- a/scripts/object/tangible/mission/mission_bounty_droid_probot.py +++ b/scripts/object/tangible/mission/mission_bounty_droid_probot.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'npc/bounty_probot') return \ No newline at end of file diff --git a/scripts/object/tangible/mission/mission_bounty_droid_seeker.py b/scripts/object/tangible/mission/mission_bounty_droid_seeker.py index ccad8904..516734c3 100644 --- a/scripts/object/tangible/mission/mission_bounty_droid_seeker.py +++ b/scripts/object/tangible/mission/mission_bounty_droid_seeker.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'npc/bounty_seeker') return \ No newline at end of file diff --git a/scripts/object/tangible/saga_system/rewards/structure_deed_player_house_sandcrawler.py b/scripts/object/tangible/saga_system/rewards/structure_deed_player_house_sandcrawler.py index 5a653b5c..07ab9319 100644 --- a/scripts/object/tangible/saga_system/rewards/structure_deed_player_house_sandcrawler.py +++ b/scripts/object/tangible/saga_system/rewards/structure_deed_player_house_sandcrawler.py @@ -2,10 +2,6 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'deeds/structureDeed') - object.setConstructorTemplate('object/building/player/shared_construction_structure.iff') - object.setStructureTemplate('object/tangible/saga_system/rewards/shared_structure_deed_player_house_sandcrawler.iff') - object.setLotRequirement(5) - object.setBMR(26) return def use(core, actor, object): diff --git a/scripts/object/tangible/tcg/series3/structure_deed_jedi_meditation_room_deed.py b/scripts/object/tangible/tcg/series3/structure_deed_jedi_meditation_room_deed.py index 3abde0fa..01e3b335 100644 --- a/scripts/object/tangible/tcg/series3/structure_deed_jedi_meditation_room_deed.py +++ b/scripts/object/tangible/tcg/series3/structure_deed_jedi_meditation_room_deed.py @@ -2,10 +2,6 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'deeds/structureDeed') - object.setConstructorTemplate('object/building/player/construction/shared_construction_player_jedi_meditation_room.iff') - object.setStructureTemplate('object/tangible/tcg/series3/shared_structure_deed_jedi_meditation_room_deed.iff') - object.setLotRequirement(3) - object.setBMR(8) return def use(core, actor, object): diff --git a/scripts/object/tangible/tcg/series3/structure_deed_sith_meditation_room_deed.py b/scripts/object/tangible/tcg/series3/structure_deed_sith_meditation_room_deed.py index d069e412..01e3b335 100644 --- a/scripts/object/tangible/tcg/series3/structure_deed_sith_meditation_room_deed.py +++ b/scripts/object/tangible/tcg/series3/structure_deed_sith_meditation_room_deed.py @@ -2,10 +2,6 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'deeds/structureDeed') - object.setConstructorTemplate('object/building/player/construction/shared_construction_player_sith_meditation_room.iff') - object.setStructureTemplate('object/tangible/tcg/series3/shared_structure_deed_sith_meditation_room_deed.iff') - object.setLotRequirement(3) - object.setBMR(8) return def use(core, actor, object): diff --git a/scripts/object/tangible/tcg/series5/structure_deed_player_house_hangar.py b/scripts/object/tangible/tcg/series5/structure_deed_player_house_hangar.py index 3abde0fa..01e3b335 100644 --- a/scripts/object/tangible/tcg/series5/structure_deed_player_house_hangar.py +++ b/scripts/object/tangible/tcg/series5/structure_deed_player_house_hangar.py @@ -2,10 +2,6 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'deeds/structureDeed') - object.setConstructorTemplate('object/building/player/construction/shared_construction_player_jedi_meditation_room.iff') - object.setStructureTemplate('object/tangible/tcg/series3/shared_structure_deed_jedi_meditation_room_deed.iff') - object.setLotRequirement(3) - object.setBMR(8) return def use(core, actor, object): diff --git a/scripts/object/tangible/terminal/terminal_bank.py b/scripts/object/tangible/terminal/terminal_bank.py index 64205c68..0a27868e 100644 --- a/scripts/object/tangible/terminal/terminal_bank.py +++ b/scripts/object/tangible/terminal/terminal_bank.py @@ -2,6 +2,6 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'terminal/bank') - core.mapService.addLocation(object.getPlanet(), 'Bank Terminal', object.getPosition().x, object.getPosition().z, 41, 42, 0) + core.mapService.addLocation(object.getPlanet(), '@map_loc_cat_n:terminal_bank', object.getPosition().x, object.getPosition().z, 2, 42, 0) return \ No newline at end of file diff --git a/scripts/object/tangible/terminal/terminal_bazaar.py b/scripts/object/tangible/terminal/terminal_bazaar.py index e94866f0..967ff912 100644 --- a/scripts/object/tangible/terminal/terminal_bazaar.py +++ b/scripts/object/tangible/terminal/terminal_bazaar.py @@ -1,7 +1,6 @@ import sys def setup(core, object): - - core.mapService.addLocation(object.getPlanet(), 'Bazaar Terminal', object.getPosition().x, object.getPosition().z, 41, 43, 0) + core.mapService.addLocation(object.getPlanet(), '@map_loc_cat_n:terminal_bazaar', object.getPosition().x, object.getPosition().z, 41, 43, 0) return \ No newline at end of file diff --git a/scripts/object/tangible/terminal/terminal_city_junk_dealer.py b/scripts/object/tangible/terminal/terminal_city_junk_dealer.py index ccad8904..f09f88cc 100644 --- a/scripts/object/tangible/terminal/terminal_city_junk_dealer.py +++ b/scripts/object/tangible/terminal/terminal_city_junk_dealer.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + core.mapService.addLocation(object.getPlanet(), '@map_loc_cat_n:junk_dealer', object.getPosition().x, object.getPosition().z, 26, 81, 0) return \ No newline at end of file diff --git a/scripts/object/tangible/terminal/terminal_cloning.py b/scripts/object/tangible/terminal/terminal_cloning.py index dc256f9a..46138012 100644 --- a/scripts/object/tangible/terminal/terminal_cloning.py +++ b/scripts/object/tangible/terminal/terminal_cloning.py @@ -2,5 +2,6 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'terminal/cloning_terminal') + return \ No newline at end of file diff --git a/scripts/object/tangible/terminal/terminal_mission.py b/scripts/object/tangible/terminal/terminal_mission.py index ccf684c0..10fe46c8 100644 --- a/scripts/object/tangible/terminal/terminal_mission.py +++ b/scripts/object/tangible/terminal/terminal_mission.py @@ -1,9 +1,7 @@ -from resources.common import TerminalType import sys def setup(core, object): - - core.mapService.addLocation(object.getPlanet(), 'Mission Terminal', object.getPosition().x, object.getPosition().z, 41, 44, 0) - object.setAttachment("terminalType", TerminalType.MISSION_GENERIC) + core.mapService.addLocation(object.getPlanet(), '@map_loc_cat_n:terminal_mission', object.getPosition().x, object.getPosition().z, 41, 44, 0) + object.setAttachment("terminalType", 1) return \ No newline at end of file diff --git a/scripts/object/tangible/terminal/terminal_mission_artisan.py b/scripts/object/tangible/terminal/terminal_mission_artisan.py index 911010d8..7bbd42dd 100644 --- a/scripts/object/tangible/terminal/terminal_mission_artisan.py +++ b/scripts/object/tangible/terminal/terminal_mission_artisan.py @@ -1,7 +1,7 @@ import sys def setup(core, object): - - core.mapService.addLocation(object.getPlanet(), 'Artisan Mission Terminal', object.getPosition().x, object.getPosition().z, 41, 21, 0) + object.setAttachment("terminalType", 4) + core.mapService.addLocation(object.getPlanet(), '@map_loc_cat_n:terminal_mission_artisan', object.getPosition().x, object.getPosition().z, 41, 76, 0) return \ No newline at end of file diff --git a/scripts/object/tangible/terminal/terminal_mission_bounty.py b/scripts/object/tangible/terminal/terminal_mission_bounty.py index ccad8904..f97abb2a 100644 --- a/scripts/object/tangible/terminal/terminal_mission_bounty.py +++ b/scripts/object/tangible/terminal/terminal_mission_bounty.py @@ -1,4 +1,6 @@ import sys def setup(core, object): + object.setAttachment("terminalType", 2) + core.mapService.addLocation(object.getPlanet(), '@map_loc_cat_n:terminal_mission_bounty', object.getPosition().x, object.getPosition().z, 41, 78, 0) return \ No newline at end of file diff --git a/scripts/object/tangible/terminal/terminal_mission_entertainer.py b/scripts/object/tangible/terminal/terminal_mission_entertainer.py index 433b5f91..31bc4a90 100644 --- a/scripts/object/tangible/terminal/terminal_mission_entertainer.py +++ b/scripts/object/tangible/terminal/terminal_mission_entertainer.py @@ -1,7 +1,6 @@ import sys def setup(core, object): - - core.mapService.addLocation(object.getPlanet(), 'Entertainer Mission Terminal', object.getPosition().x, object.getPosition().z, 41, 24, 0) - return - \ No newline at end of file + object.setAttachment("terminalType", 2) + core.mapService.addLocation(object.getPlanet(), '@map_loc_cat_n:terminal_mission_entertainer', object.getPosition().x, object.getPosition().z, 41, 75, 0) + return \ No newline at end of file diff --git a/scripts/object/tangible/terminal/terminal_mission_imperial.py b/scripts/object/tangible/terminal/terminal_mission_imperial.py index 8e4773b5..216f3bfc 100644 --- a/scripts/object/tangible/terminal/terminal_mission_imperial.py +++ b/scripts/object/tangible/terminal/terminal_mission_imperial.py @@ -1,7 +1,6 @@ import sys def setup(core, object): - - core.mapService.addLocation(object.getPlanet(), 'Imperial Mission Terminal', object.getPosition().x, object.getPosition().z, 41, 46, 0) + core.mapService.addLocation(object.getPlanet(), '@map_loc_cat_n:terminal_mission_imperial', object.getPosition().x, object.getPosition().z, 41, 80, 0) return \ No newline at end of file diff --git a/scripts/object/tangible/terminal/terminal_mission_rebel.py b/scripts/object/tangible/terminal/terminal_mission_rebel.py index 0bb50bbe..f435f149 100644 --- a/scripts/object/tangible/terminal/terminal_mission_rebel.py +++ b/scripts/object/tangible/terminal/terminal_mission_rebel.py @@ -1,7 +1,6 @@ import sys def setup(core, object): - - core.mapService.addLocation(object.getPlanet(), 'Rebel Mission Terminal', object.getPosition().x, object.getPosition().z, 41, 45, 0) + core.mapService.addLocation(object.getPlanet(), '@map_loc_cat_n:terminal_mission_rebel', object.getPosition().x, object.getPosition().z, 41, 79, 0) return \ No newline at end of file diff --git a/scripts/object/tangible/terminal/terminal_mission_scout.py b/scripts/object/tangible/terminal/terminal_mission_scout.py index ccad8904..eb7c1e2a 100644 --- a/scripts/object/tangible/terminal/terminal_mission_scout.py +++ b/scripts/object/tangible/terminal/terminal_mission_scout.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + core.mapService.addLocation(object.getPlanet(), '@map_loc_cat_n:terminal_mission_scout', object.getPosition().x, object.getPosition().z, 41, 77, 0) return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/armor/zam/item_roadmap_belt_trader_01_02.py b/scripts/object/tangible/wearables/armor/zam/item_roadmap_belt_trader_01_02.py new file mode 100644 index 00000000..353407c0 --- /dev/null +++ b/scripts/object/tangible/wearables/armor/zam/item_roadmap_belt_trader_01_02.py @@ -0,0 +1,13 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_roadmap_belt_trader_01_02') + object.setDetailFilename('static_item_d') + object.setDetailName('item_roadmap_belt_trader_01_02') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:agility_modified', 15) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 20) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:precision_modified', 15) + object.setStringAttribute('class_required', 'Trader') + object.setIntAttribute('required_combat_level', 90) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/backpack/item_trader_backpack_01_02.py b/scripts/object/tangible/wearables/backpack/item_trader_backpack_01_02.py new file mode 100644 index 00000000..9eb23a37 --- /dev/null +++ b/scripts/object/tangible/wearables/backpack/item_trader_backpack_01_02.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_trader_backpack_01_02') + object.setDetailFilename('static_item_d') + object.setDetailName('item_trader_backpack_01_02') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:expertise_assembly_increase_artisan', 5) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:hiring', 3) + object.setStringAttribute('class_required', 'Trader') + return diff --git a/scripts/object/tangible/wearables/bodysuit/item_trader_roadmap_jumpsuit_02_01.py b/scripts/object/tangible/wearables/bodysuit/item_trader_roadmap_jumpsuit_02_01.py new file mode 100644 index 00000000..7218be6d --- /dev/null +++ b/scripts/object/tangible/wearables/bodysuit/item_trader_roadmap_jumpsuit_02_01.py @@ -0,0 +1,12 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_trader_roadmap_jumpsuit_02_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_trader_roadmap_jumpsuit_02_01') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:agility_modified', 2) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 1) + object.setStringAttribute('class_required', 'Trader') + object.setIntAttribute('required_combat_level', 30) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bodysuit/item_trader_roadmap_jumpsuit_02_02.py b/scripts/object/tangible/wearables/bodysuit/item_trader_roadmap_jumpsuit_02_02.py new file mode 100644 index 00000000..f10fbe79 --- /dev/null +++ b/scripts/object/tangible/wearables/bodysuit/item_trader_roadmap_jumpsuit_02_02.py @@ -0,0 +1,12 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_trader_roadmap_jumpsuit_02_02') + object.setDetailFilename('static_item_d') + object.setDetailName('item_trader_roadmap_jumpsuit_02_02') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:agility_modified', 2) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 1) + object.setStringAttribute('class_required', 'Trader') + object.setIntAttribute('required_combat_level', 30) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_spy_utility_a_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_spy_utility_a_01_01.py index cf9b8380..024129b8 100644 --- a/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_spy_utility_a_01_01.py +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_spy_utility_a_01_01.py @@ -7,11 +7,12 @@ def setup(core, object): object.setDetailName('item_bracelet_l_set_spy_utility_a_01_01') object.setIntAttribute('required_combat_level', 85) object.setStringAttribute('class_required', 'Spy') - object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_strikethrough_chance', 2) - object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_all', 1) - object.setIntAttribute('cat_stat_mod_bonus.@stat_n:luck_modified', 50) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:strength_modified', 25) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_sp_smoke', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_duration_line_sp_preparation', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_sp_preparation', 6) object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_spy_utility_a_1') object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_spy_utility_a_2') object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_spy_utility_a_3') object.setAttachment('setBonus', 'set_bonus_spy_utility_a') - return \ No newline at end of file + return diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_spy_utility_a_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_spy_utility_a_01_01.py index 490bfeab..6d18e3d8 100644 --- a/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_spy_utility_a_01_01.py +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_spy_utility_a_01_01.py @@ -7,11 +7,12 @@ def setup(core, object): object.setDetailName('item_bracelet_r_set_spy_utility_a_01_01') object.setIntAttribute('required_combat_level', 85) object.setStringAttribute('class_required', 'Spy') - object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_strikethrough_chance', 2) - object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_all', 1) - object.setIntAttribute('cat_stat_mod_bonus.@stat_n:luck_modified', 50) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:strength_modified', 25) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_sp_smoke', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_duration_line_sp_preparation', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_sp_preparation', 6) object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_spy_utility_a_1') object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_spy_utility_a_2') object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_spy_utility_a_3') object.setAttachment('setBonus', 'set_bonus_spy_utility_a') - return \ No newline at end of file + return diff --git a/scripts/object/tangible/wearables/necklace/item_necklace_set_spy_utility_a_01_01.py b/scripts/object/tangible/wearables/necklace/item_necklace_set_spy_utility_a_01_01.py index af9be68a..405ed693 100644 --- a/scripts/object/tangible/wearables/necklace/item_necklace_set_spy_utility_a_01_01.py +++ b/scripts/object/tangible/wearables/necklace/item_necklace_set_spy_utility_a_01_01.py @@ -7,11 +7,12 @@ def setup(core, object): object.setDetailName('item_necklace_set_spy_utility_a_01_01') object.setIntAttribute('required_combat_level', 85) object.setStringAttribute('class_required', 'Spy') - object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_strikethrough_chance', 2) - object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_all', 1) - object.setIntAttribute('cat_stat_mod_bonus.@stat_n:luck_modified', 50) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:strength_modified', 25) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_sp_smoke', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_duration_sp_preparation', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_sp_preparation', 6) object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_spy_utility_a_1') object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_spy_utility_a_2') object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_spy_utility_a_3') object.setAttachment('setBonus', 'set_bonus_spy_utility_a') - return \ No newline at end of file + return diff --git a/scripts/object/tangible/wearables/necklace/item_trader_pendant_01_02.py b/scripts/object/tangible/wearables/necklace/item_trader_pendant_01_02.py new file mode 100644 index 00000000..48f0b1b9 --- /dev/null +++ b/scripts/object/tangible/wearables/necklace/item_trader_pendant_01_02.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_trader_pendant_01_02') + object.setDetailFilename('static_item_d') + object.setDetailName('item_trader_pendant_01_02') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:general_assembly', 5) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:hiring', 3) + object.setStringAttribute('class_required', 'Trader') + return diff --git a/scripts/object/tangible/wearables/ring/item_band_set_spy_utility_a_01_01.py b/scripts/object/tangible/wearables/ring/item_band_set_spy_utility_a_01_01.py index aa7306d4..3483cb23 100644 --- a/scripts/object/tangible/wearables/ring/item_band_set_spy_utility_a_01_01.py +++ b/scripts/object/tangible/wearables/ring/item_band_set_spy_utility_a_01_01.py @@ -9,11 +9,12 @@ def setup(core, object): object.setDetailName('item_band_set_spy_utility_a_01_01') object.setIntAttribute('required_combat_level', 85) object.setStringAttribute('class_required', 'Spy') - object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_strikethrough_chance', 2) - object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_all', 1) - object.setIntAttribute('cat_stat_mod_bonus.@stat_n:luck_modified', 50) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:strength_modified', 25) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_sp_smoke', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_duration_line_sp_preparation', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_sp_preparation', 6) object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_spy_utility_a_1') object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_spy_utility_a_2') object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_spy_utility_a_3') object.setAttachment('setBonus', 'set_bonus_spy_utility_a') - return \ No newline at end of file + return diff --git a/scripts/object/tangible/wearables/ring/item_content_trader_ring_03_01.py b/scripts/object/tangible/wearables/ring/item_content_trader_ring_03_01.py new file mode 100644 index 00000000..70713a96 --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_content_trader_ring_03_01.py @@ -0,0 +1,13 @@ +import sys + +def setup(core, object): + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_content_trader_ring_03_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_content_trader_ring_03_01') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 6) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:general_assembly', 6) + object.setStringAttribute('class_required', 'Trader') + object.setAttachment('radial_filename', 'ring/unity') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_ring_set_spy_utility_a_01_01.py b/scripts/object/tangible/wearables/ring/item_ring_set_spy_utility_a_01_01.py index e57da3f8..500ea4ff 100644 --- a/scripts/object/tangible/wearables/ring/item_ring_set_spy_utility_a_01_01.py +++ b/scripts/object/tangible/wearables/ring/item_ring_set_spy_utility_a_01_01.py @@ -9,11 +9,12 @@ def setup(core, object): object.setDetailName('item_ring_set_spy_utility_a_01_01') object.setIntAttribute('required_combat_level', 85) object.setStringAttribute('class_required', 'Spy') - object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_strikethrough_chance', 2) - object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_all', 1) - object.setIntAttribute('cat_stat_mod_bonus.@stat_n:luck_modified', 50) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:strength_modified', 25) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_sp_smoke', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_duration_line_sp_preparation', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_sp_preparation', 6) object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_spy_utility_a_1') object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_spy_utility_a_2') object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_spy_utility_a_3') object.setAttachment('setBonus', 'set_bonus_spy_utility_a') - return \ No newline at end of file + return diff --git a/scripts/object/weapon/melee/2h_sword/crafted_saber/sword_lightsaber_two_handed_gen5.py b/scripts/object/weapon/melee/2h_sword/crafted_saber/sword_lightsaber_two_handed_gen5.py index ccad8904..7f41b9a6 100644 --- a/scripts/object/weapon/melee/2h_sword/crafted_saber/sword_lightsaber_two_handed_gen5.py +++ b/scripts/object/weapon/melee/2h_sword/crafted_saber/sword_lightsaber_two_handed_gen5.py @@ -1,4 +1,13 @@ import sys +from engine.resources.container import CreaturePermissions def setup(core, object): + + inventory = core.objectService.createObject("object/tangible/inventory/shared_lightsaber_inventory_5.iff", object.getPlanet()) + inventory.setContainerPermissions(CreaturePermissions.CREATURE_PERMISSIONS); + + object.add(inventory) + + object.setAttachment('radial_filename', 'item/lightsaber') + return \ No newline at end of file diff --git a/scripts/object/weapon/melee/knife/weapon_knife_trader_roadmap_01_02.py b/scripts/object/weapon/melee/knife/weapon_knife_trader_roadmap_01_02.py new file mode 100644 index 00000000..a8e53801 --- /dev/null +++ b/scripts/object/weapon/melee/knife/weapon_knife_trader_roadmap_01_02.py @@ -0,0 +1,15 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('weapon_knife_trader_roadmap_01_02') + object.setDetailFilename('static_item_d') + object.setDetailName('weapon_knife_trader_roadmap_01_02') + object.setStringAttribute('class_required', 'Trader') + object.setIntAttribute('required_combat_level', 42) + object.setFloatAttribute('cat_wpn_damage.wpn_attack_speed', 0) + object.setStringAttribute('cat_wpn_damage.damage', '80 - 160') + object.setStringAttribute('cat_wpn_damage.wpn_range', '0-5m') + object.setStringAttribute('cat_wpn_damage.wpn_category', 'One-Handed Melee') + object.setIntAttribute('cat_wpn_damage.dps', object.getDamagePerSecond()) + return \ No newline at end of file diff --git a/scripts/object/weapon/melee/polearm/crafted_saber/sword_lightsaber_polearm_gen5.py b/scripts/object/weapon/melee/polearm/crafted_saber/sword_lightsaber_polearm_gen5.py index ccad8904..7f41b9a6 100644 --- a/scripts/object/weapon/melee/polearm/crafted_saber/sword_lightsaber_polearm_gen5.py +++ b/scripts/object/weapon/melee/polearm/crafted_saber/sword_lightsaber_polearm_gen5.py @@ -1,4 +1,13 @@ import sys +from engine.resources.container import CreaturePermissions def setup(core, object): + + inventory = core.objectService.createObject("object/tangible/inventory/shared_lightsaber_inventory_5.iff", object.getPlanet()) + inventory.setContainerPermissions(CreaturePermissions.CREATURE_PERMISSIONS); + + object.add(inventory) + + object.setAttachment('radial_filename', 'item/lightsaber') + return \ No newline at end of file diff --git a/scripts/object/weapon/melee/sword/crafted_saber/sword_lightsaber_one_handed_gen5.py b/scripts/object/weapon/melee/sword/crafted_saber/sword_lightsaber_one_handed_gen5.py index ccad8904..7f41b9a6 100644 --- a/scripts/object/weapon/melee/sword/crafted_saber/sword_lightsaber_one_handed_gen5.py +++ b/scripts/object/weapon/melee/sword/crafted_saber/sword_lightsaber_one_handed_gen5.py @@ -1,4 +1,13 @@ import sys +from engine.resources.container import CreaturePermissions def setup(core, object): + + inventory = core.objectService.createObject("object/tangible/inventory/shared_lightsaber_inventory_5.iff", object.getPlanet()) + inventory.setContainerPermissions(CreaturePermissions.CREATURE_PERMISSIONS); + + object.add(inventory) + + object.setAttachment('radial_filename', 'item/lightsaber') + return \ No newline at end of file diff --git a/scripts/object/weapon/ranged/pistol/weapon_pistol_trader_roadmap_01_02.py b/scripts/object/weapon/ranged/pistol/weapon_pistol_trader_roadmap_01_02.py new file mode 100644 index 00000000..9feea0cd --- /dev/null +++ b/scripts/object/weapon/ranged/pistol/weapon_pistol_trader_roadmap_01_02.py @@ -0,0 +1,16 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('weapon_pistol_trader_roadmap_01_02') + object.setDetailFilename('static_item_d') + object.setDetailName('weapon_pistol_trader_roadmap_01_02') + object.setStringAttribute('class_required', 'Trader') + object.setIntAttribute('required_combat_level', 62) + object.setFloatAttribute('cat_wpn_damage.wpn_attack_speed', 0.4) + object.setStringAttribute('cat_wpn_damage.wpn_damage_type', 'Energy') + object.setStringAttribute('cat_wpn_damage.damage', '250-500') + object.setStringAttribute('cat_wpn_damage.wpn_range', '0-35m') + object.setStringAttribute('cat_wpn_damage.wpn_category', 'Pistol') + object.setIntAttribute('cat_wpn_damage.dps', object.getDamagePerSecond()) + return \ No newline at end of file diff --git a/scripts/radial/creature/vehicle.py b/scripts/radial/creature/vehicle.py index 5106c8ee..af827f7d 100644 --- a/scripts/radial/creature/vehicle.py +++ b/scripts/radial/creature/vehicle.py @@ -22,6 +22,7 @@ def handleSelection(core, owner, target, option): mntSvc.dismount(owner, target) else: mntSvc.mount(owner, target) + core.objectService.useObject(owner, target) elif option == 60: mntSvc.store(owner, target) elif option == 114: diff --git a/scripts/radial/deeds/harvesterDeed.py b/scripts/radial/deeds/harvesterDeed.py index cc8fdc7a..9d85158b 100644 --- a/scripts/radial/deeds/harvesterDeed.py +++ b/scripts/radial/deeds/harvesterDeed.py @@ -3,20 +3,18 @@ import sys def createRadial(core, owner, target, radials): radials.clear() - radials.add(RadialOptions(0, 21, 1, 'Use Deed')) + radials.add(RadialOptions(0, 21, 3, 'Use Deed')) #radials.add(RadialOptions(0, 7, 1, '111111')) #radials.add(RadialOptions(0, 15, 1, '')) #radials.add(RadialOptions(0, 61, 1, '')) return def handleSelection(core, owner, target, option): - if option == 21 and target: - owner.setAttachment('UsingHarvesterDeed', '1'); - core.harvesterService.enterStructurePlacementMode(target,owner) - if option == 61 and target: - object5 = core.harvesterService.constructionSite(owner,target) core.objectService.useObject(owner, target) + core.harvesterService.enterStructurePlacementMode(owner, target) + if option == 61 and target: + object5 = core.harvesterService.constructionSite(owner, target) if option == 15 and target: core.objectService.destroyObject(target) return diff --git a/scripts/radial/deeds/vehicleDeed.py b/scripts/radial/deeds/vehicleDeed.py index 033462ad..ad08a40f 100644 --- a/scripts/radial/deeds/vehicleDeed.py +++ b/scripts/radial/deeds/vehicleDeed.py @@ -4,7 +4,7 @@ import sys def createRadial(core, owner, target, radials): radials.add(RadialOptions(0, 7, 1, '')) radials.add(RadialOptions(0, 15, 1, '')) - radials.add(RadialOptions(0, 61, 3, '@pet_menu:menu_generate')) + radials.add(RadialOptions(0, 61, 3, '@pet/pet_menu:menu_generate')) return def handleSelection(core, owner, target, option): diff --git a/scripts/radial/item/lightsaber.py b/scripts/radial/item/lightsaber.py new file mode 100644 index 00000000..c02dc502 --- /dev/null +++ b/scripts/radial/item/lightsaber.py @@ -0,0 +1,12 @@ +from resources.common import RadialOptions +import sys + +def createRadial(core, owner, target, radials): + radials.add(RadialOptions(0, 21, 1, 'Open Lightsaber')) + return + +def handleSelection(core, owner, target, option): + if option == 21 and target: + core.simulationService.openContainer(owner, target.getSlottedObject("saber_inv")) + return + \ No newline at end of file diff --git a/scripts/radial/item/tunable.py b/scripts/radial/item/tunable.py index f226f86b..cda19b74 100644 --- a/scripts/radial/item/tunable.py +++ b/scripts/radial/item/tunable.py @@ -1,15 +1,60 @@ from resources.common import RadialOptions +from services.sui.SUIService import MessageBoxType +import time +from services.sui.SUIWindow import Trigger +from java.util import Vector +import main.NGECore import sys -def createRadial(core, owner, target, radials): +def createRadial(core, owner, target, radials): radials.clear() radials.add(RadialOptions(0, 7, 0, 'Examine')) radials.add(RadialOptions(0, 15, 0, 'Destroy')) - radials.add(RadialOptions(0, 19, 0, 'Tune')) + if target.getAttachment("tunerId") == None or target.getAttachment("tunerId") == 0: + if owner.getPlayerObject().getProfession()=='force_sensitive_1a': + radials.add(RadialOptions(0, 19, 0, '@jedi_spam:tune_crystal')) return def handleSelection(core, owner, target, option): if option == 19 and target: if owner is not None: - owner.sendSystemMessage('You are not attuned enough with the force yet.',1) + #owner.sendSystemMessage('You are not attuned enough with the force yet.',1) + + if target.getAttachment("tunerId") == None or target.getAttachment("tunerId") == 0: + + owner.setAttachment("TunableObject", target.getObjectID()) + handleSUIWindow(core, owner, target, option) + + else: + owner.sendSystemMessage("You cannot tune this crystal.",1) return + +def handleSUIWindow(core, owner, target, option): + suiSvc = core.suiService + suiWindow = suiSvc.createMessageBox(MessageBoxType.MESSAGE_BOX_OK_CANCEL, '@jedi_spam:confirm_tune_title', '@jedi_spam:confirm_tune_prompt', owner, target, 15) + returnParams = Vector() + returnParams.add('btnOk:Text') + returnParams.add('btnCancel:Text') + suiWindow.addHandler(0, '', Trigger.TRIGGER_OK, returnParams, handleSUI) + suiWindow.addHandler(1, '', Trigger.TRIGGER_CANCEL, returnParams, handleSUI) + suiSvc.openSUIWindow(suiWindow) + +def handleSUI(owner, window, eventType, returnList): + + if eventType == 0: + time.sleep(1) + objectID = long(owner.getAttachment("TunableObject")) + tunableObject = main.NGECore.getInstance().objectService.getObject(objectID) + + if tunableObject: + tunableObject.getAttributes().put("@obj_attr_n:crystal_owner", owner.getCustomName()) + tunableObject.setAttachment("tunerId", int(owner.getObjectId())) + + if tunableObject.getAttributes().get("@obj_attr_n:color") is None: + main.NGECore.getInstance().lootService.tuneProcess(tunableObject) + time.sleep(0.5) + + tunableObject.setCustomName( "\\#00FF00" + tunableObject.getObjectName().getStfValue() + " (tuned)") + owner.sendSystemMessage('@jedi_spam:crystal_tune_success',1) + return + \ No newline at end of file diff --git a/scripts/radial/npc/bounty_probot.py b/scripts/radial/npc/bounty_probot.py new file mode 100644 index 00000000..1301c027 --- /dev/null +++ b/scripts/radial/npc/bounty_probot.py @@ -0,0 +1,30 @@ +from resources.common import RadialOptions +import sys + +def createRadial(core, owner, target, radials): + radials.add(RadialOptions(0, 138, 1, '@mission/mission_generic:probe_droid_summon')) + return + +def handleSelection(core, owner, target, option): + + if option == 138 and target: + id = owner.getPlayerObject().getBountyMissionId() + if id is None or id == 0: + owner.sendSystemMessage('@mission/mission_generic:bounty_no_mission', 0) + return + + mission = core.objectService.getObject(id) + if mission is None: + owner.sendSystemMessage('@mission/mission_generic:bounty_no_mission', 0) + return + + if mission.getObjective().isArakydActive(): + owner.sendSystemMessage('@mission/mission_generic:probe_droid_too_many', 0) + return + + if not core.terrainService.canBuildAtPosition(owner, owner.getPosition().x, owner.getPosition().z): + owner.sendSystemMessage('@mission/mission_generic:probe_droid_bad_location', 0) + return + + mission.getObjective().handleProbeDroidSummon(core, owner) + return \ No newline at end of file diff --git a/scripts/radial/npc/bounty_seeker.py b/scripts/radial/npc/bounty_seeker.py new file mode 100644 index 00000000..d7e829fe --- /dev/null +++ b/scripts/radial/npc/bounty_seeker.py @@ -0,0 +1,41 @@ +from resources.common import RadialOptions +from resources.common import SpawnPoint +import time +import sys + +def createRadial(core, owner, target, radials): + radials.clear() + radials.add(RadialOptions(0, 138, 0, 'Track Target')) + radials.add(RadialOptions(1, 136, 0, '@mission/mission_generic:probe_droid_track_target')) # Track Bounty Target + radials.add(RadialOptions(1, 137, 0, '@mission/mission_generic:probe_droid_find_target')) # Identify Bounty Target + return + +def handleSelection(core, owner, target, option): + + if option == 136 and target or option == 138 and target: + id = owner.getPlayerObject().getBountyMissionId() + if id is None or id == 0: + owner.sendSystemMessage('@mission/mission_generic:bounty_no_mission', 0) + return + + mission = core.objectService.getObject(id) + if mission is None: + owner.sendSystemMessage('@mission/mission_generic:bounty_no_mission', 0) + return + + if mission.getObjective().isSeekerActive(): + owner.sendSystemMessage('@mission/mission_generic:bounty_already_tracking', 0) + return + pos = SpawnPoint.getRandomPosition(owner.getPosition(), 1, 3, owner.getPlanetId()) + ori = owner.getOrientation() + seeker = core.staticService.spawnObject('object/creature/npc/droid/crafted/shared_probe_droid_advanced.iff', owner.getPlanet().getName(), 0, pos.x, pos.y, pos.z, ori.y, ori.w) + time.sleep(3) + owner.sendSystemMessage('@mission/mission_generic:seeker_droid_standby', 0) + seeker.setPosture(8) + time.sleep(7.5) + mission.getObjective().beginSeekerUpdates(core, owner) + return + + if option == 137 and target: + return + return \ No newline at end of file diff --git a/scripts/radial/npc/corpse.py b/scripts/radial/npc/corpse.py index dc93d74a..453b7382 100644 --- a/scripts/radial/npc/corpse.py +++ b/scripts/radial/npc/corpse.py @@ -2,12 +2,26 @@ from resources.common import RadialOptions import sys def createRadial(core, owner, target, radials): + #owner.sendSystemMessage('Correct Loot Radial created', 0) radials.clear() radials.add(RadialOptions(0, 36, 0, 'Loot')) - + if target.getAttachment('AI') and core.resourceService.canHarvest(owner, target): + radials.add(RadialOptions(0, 163, 3, '@sui:harvest_corpse')) + radials.add(RadialOptions(2, 164, 3, '@sui:harvest_meat')) + radials.add(RadialOptions(2, 165, 3, '@sui:harvest_hide')) + radials.add(RadialOptions(2, 166, 3, '@sui:harvest_bone')) + + return def handleSelection(core, owner, target, option): + + if option == 164 and target.getAttachment('AI') and core.resourceService.canHarvest(owner, target): + core.resourceService.doHarvest(owner, target, 'meat') + if option == 165 and target.getAttachment('AI') and core.resourceService.canHarvest(owner, target): + core.resourceService.doHarvest(owner, target, 'hide') + if option == 166 and target.getAttachment('AI') and core.resourceService.canHarvest(owner, target): + core.resourceService.doHarvest(owner, target, 'bone') if option == 36 and target: #core.lootService.handleLootRequest(owner,target) core.lootService.handleLootRequest(owner,target) diff --git a/scripts/radial/npc/mobile.py b/scripts/radial/npc/mobile.py new file mode 100644 index 00000000..decba1d8 --- /dev/null +++ b/scripts/radial/npc/mobile.py @@ -0,0 +1,16 @@ +from resources.common import RadialOptions +import sys + +def createRadial(core, owner, target, radials): + radials.clear() + if target.getAttachment('AI') and core.resourceService.canMilk(owner, target): + radials.add(RadialOptions(0, 167, 3, '@pet/pet_menu:milk_me')) + + return + +def handleSelection(core, owner, target, option): + + if option == 167 and target.getAttachment('AI') and core.resourceService.canMilk(owner, target): + core.resourceService.doMilk(owner, target) + return + \ No newline at end of file diff --git a/scripts/radial/object/guild_access_device.py b/scripts/radial/object/guild_access_device.py new file mode 100644 index 00000000..bd019f39 --- /dev/null +++ b/scripts/radial/object/guild_access_device.py @@ -0,0 +1,30 @@ +from resources.common import RadialOptions +from services.sui.SUIService import InputBoxType +from java.util import Vector +from main import NGECore +import sys + +def createRadial(core, owner, target, radials): + + #radials.clear() + + if owner.getGuildId() != 0: + guild = core.guildService.getGuildById(owner.getGuildId) + + if guild is None: + return + + if guild.getLeader() == owner.getObjectID(): + radials.add(RadialOptions(0, RadialOptions.serverGuildGuildManagement, 3, '@guild:menu_guild_management')) + radials.add(RadialOptions(0, RadialOptions.serverGuildMemberManagement, 3, '@guild:menu_member_management')) + + #Guild Management + radials.add(RadialOptions(3, RadialOptions.serverGuildDisband, 3, '@guild:menu_disband')) + + #Member Management + radials.add(RadialOptions(4, RadialOptions.serverGuildSponsor, 3, '@guild:menu_sponsor')) + return + return + +def handleSelection(core, owner, target, option): + return \ No newline at end of file diff --git a/scripts/radial/object/guild_registry.py b/scripts/radial/object/guild_registry.py new file mode 100644 index 00000000..7b383d9a --- /dev/null +++ b/scripts/radial/object/guild_registry.py @@ -0,0 +1,47 @@ +from resources.common import RadialOptions +from services.sui.SUIService import InputBoxType +from java.util import Vector +from main import NGECore +import sys + +def createRadial(core, owner, target, radials): + + #radials.clear() + + if owner.getGuildId() == 0: + radials.add(RadialOptions(0, RadialOptions.serverGuildCreate, 3, '@guild:menu_create')) + return + + return + +def handleSelection(core, owner, target, option): + suiSvc = NGECore().getInstance().suiService + # Create Guild + if option == 185 and target: + wndGuildCreate = core.suiService.createInputBox(InputBoxType.INPUT_BOX_OK_CANCEL, '@guild:create_name_title', '@guild:create_name_prompt', owner, owner, 0, handleGuildCreateName) + wndGuildCreate.setProperty("txtInput:MaxLength", "24"); + wndGuildCreate.setProperty("txtInput:NumericInteger", "false") + suiSvc.openSUIWindow(wndGuildCreate) + return + + return + +def handleGuildCreateName(owner, window, eventType, returnList): + suiSvc = NGECore().getInstance().suiService + if eventType == 0: + guildName = str(returnList.get(0)) + if guildName is not None: + owner.setAttachment('guildName', guildName) + wndGuildInitials = NGECore().getInstance().suiService.createInputBox(InputBoxType.INPUT_BOX_OK, '@guild:create_abbrev_title', '@guild:create_abbrev_prompt', owner, owner, 0, doGuildCreate) + wndGuildInitials.setProperty("txtInput:MaxLength", "4"); + wndGuildInitials.setProperty("txtInput:NumericInteger", "false") + suiSvc.openSUIWindow(wndGuildInitials) + return + return + +def doGuildCreate(owner, window, eventType, returnList): + if eventType == 0: + guild = NGECore().getInstance().guildService.createGuild(str(returnList.get(0)), str(owner.getAttachment('guildName')), owner) + owner.setGuildId(guild.getId()) + return + return \ No newline at end of file diff --git a/scripts/radial/shared_drink_breath_of_heaven.py b/scripts/radial/shared_drink_breath_of_heaven.py new file mode 100644 index 00000000..11ae9ca7 --- /dev/null +++ b/scripts/radial/shared_drink_breath_of_heaven.py @@ -0,0 +1,16 @@ +import resources.objects.creature.CreatureObject; +from resources.common import RadialOptions +import sys + +def createRadial(core, owner, target, radials): + radials.add(RadialOptions(0, 21, 1, '')) + radials.add(RadialOptions(0, 7, 1, '')) + radials.add(RadialOptions(0, 15, 1, '')) + return + +def handleSelection(core, owner, object, option): + if option == 21: + core.buffService.addBuffToCreature(owner, 'drink_breath_of_heaven', owner) + + core.objectService.destroyObject(object) + return diff --git a/scripts/radial/structure/structure_management_terminal.py b/scripts/radial/structure/structure_management_terminal.py index b6e7ae3a..8bdc5878 100644 --- a/scripts/radial/structure/structure_management_terminal.py +++ b/scripts/radial/structure/structure_management_terminal.py @@ -24,6 +24,8 @@ def createRadial(core, owner, target, radials): radials.add(RadialOptions(2, 172, 0, 'Pack Up This Building')) radials.add(RadialOptions(3, 121, 0, '@player_structure:permission_enter')) radials.add(RadialOptions(3, 123, 0, '@player_structure:permission_banned')) + if owner.getSkillModBase('manage_vendor') >= 1: + radials.add(RadialOptions(2, 130, 0, '@player_structure:create_vendor')) return @@ -73,5 +75,7 @@ def handleSelection(core, owner, target, option): if owner is not None: core.housingService.handlePermissionBan(owner,target) return - - + if option == 130: + if owner is not None and owner.getSkillModBase('manage_vendor') >= 1: + core.commandService.callCommand(owner, 'createvendor', None, '') + return diff --git a/scripts/radial/terminal/city_maintenance_terminal.py b/scripts/radial/terminal/city_maintenance_terminal.py index ef951426..e5bab716 100644 --- a/scripts/radial/terminal/city_maintenance_terminal.py +++ b/scripts/radial/terminal/city_maintenance_terminal.py @@ -24,6 +24,10 @@ def createRadial(core, owner, target, radials): radials.add(RadialOptions(3, 121, 0, '@city/city:non_citizen_city_status')) radials.add(RadialOptions(3, 122, 0, '@city/city:rank_info_t')) radials.add(RadialOptions(3, 123, 0, '@city/city:citizen_list_t')) + radials.add(RadialOptions(3, 230, 0, '@city/city:revoke_citizenship')) + + radials.add(RadialOptions(3, 231, 0, 'Add 10 citizens')) + radials.add(RadialOptions(3, 232, 0, 'Deduct 10 citizens')) return @@ -80,14 +84,26 @@ def handleSelection(core, owner, target, option): if owner is not None: handleCitizenList(core, owner, target, option) return - -def handleSetCityName(core, owner, target, option): - window = core.suiService.createInputBox(2,'@city/city:city_name_new_t','@city/city:city_name_new_d', owner, target, 0) - returnList = Vector() - returnList.add('txtInput:LocalText') - window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, setnameCallBack) - window.addHandler(1, '', Trigger.TRIGGER_CANCEL, returnList, setnameCallBack) - core.suiService.openSUIWindow(window); + + if option == 231: + if owner is not None: + handle10Add(core, owner, target, option) + return + + if option == 232: + if owner is not None: + handle10Deduct(core, owner, target, option) + return + +def handle10Add(core, owner, target, option): + playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity(owner) + playerCity.Add10MoreCitizens() + return + + +def handle10Deduct(core, owner, target, option): + playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity(owner) + playerCity.Deduct10Citizens() return def setnameCallBack(owner, window, eventType, returnList): diff --git a/scripts/radial/terminal/cloning_terminal.py b/scripts/radial/terminal/cloning_terminal.py index 4809d1d6..1cf0e065 100644 --- a/scripts/radial/terminal/cloning_terminal.py +++ b/scripts/radial/terminal/cloning_terminal.py @@ -10,8 +10,19 @@ def createRadial(core, owner, target, radials): def handleSelection(core, owner, target, option): if option == 21 and target: + # REALLY Dirty hack until this can be resolved SWG way !! + stra = "Will you pay the %DI credits to clone yourself here?" + level = int(owner.getLevel()) + + if level <= 10: + cloningFee = 100 + elif level >= 11: + cloningFee = (((owner.getLevel() + 17) * owner.getLevel())/2) + elif level == 90: + cloningFee = 5000 + suiSvc = core.suiService - suiWindow = suiSvc.createMessageBox(MessageBoxType.MESSAGE_BOX_OK_CANCEL, '@base_player:clone_confirm_title', '@base_player:clone_confirm_prompt', owner, target, 15) + suiWindow = suiSvc.createMessageBox(MessageBoxType.MESSAGE_BOX_OK_CANCEL, '@base_player:clone_confirm_title', stra.replace ("%DI" , str(cloningFee)), owner, target, 15) returnParams = Vector() returnParams.add('btnOk:Text') returnParams.add('btnCancel:Text') @@ -24,17 +35,26 @@ def handleSelection(core, owner, target, option): def handleSUI(owner, window, eventType, returnList): if eventType == 0: + level = int(owner.getLevel()) + if level <= 10: + cloningFee = 100 + elif level >= 11: + cloningFee = (((owner.getLevel() + 17) * owner.getLevel())/2) + elif level == 90: + cloningFee = 5000 + cash = owner.getCashCredits() bank = owner.getBankCredits() - if bank < 1000 and cash < 1000: + + if bank < cloningFee and cash < cloningFee: owner.sendSystemMessage('You lack the credits required to cover the cost of cloning.', 0) return - elif bank > 1000: - owner.setBankCredits(bank - 1000) - elif cash > 1000 and bank < 1000: - owner.setCashCredits(cash - 1000) + elif bank >= cloningFee: + owner.setBankCredits(bank - cloningFee) + elif cash >= cloningFee and bank < cloningFee: + owner.setCashCredits(cash - cloningFee) - owner.setAttachment('preDesignatedCloner', window.getRangeObject().getGrandparent().getObjectID()) + owner.getPlayerObject().setBindLocation(window.getRangeObject().getGrandparent().getObjectID()) owner.sendSystemMessage('@base_player:clone_success', 0) diff --git a/scripts/radial/terminal/vendor.py b/scripts/radial/terminal/vendor.py new file mode 100644 index 00000000..39b25d8b --- /dev/null +++ b/scripts/radial/terminal/vendor.py @@ -0,0 +1,39 @@ +from resources.common import RadialOptions +import sys + +def createRadial(core, owner, target, radials): + radials.clear() + radials.add(RadialOptions(0, 11, 1, '')) + radials.add(RadialOptions(0, 55, 0, '')) + radials.add(RadialOptions(2, 56, 1, '')) + radials.add(RadialOptions(2, 57, 1, '')) + radials.add(RadialOptions(2, 58, 1, '')) + radials.add(RadialOptions(2, 59, 1, '')) + radials.add(RadialOptions(0, 52, 0, '')) + radials.add(RadialOptions(3, 53, 1, '')) + radials.add(RadialOptions(3, 54, 1, '')) + + if not owner.getPlayerObject().getOwnedVendors().contains(target.getObjectID()) + return + radials.add(RadialOptions(0, 112, 3, '@player_structure:vendor_control')) + if target.getAttachment('initialized') == False: + radials.add(RadialOptions(1, 118, 3, '@player_structure:vendor_init')) + else: + # soe reuses option 118 + radials.add(RadialOptions(4, 118, 3, '@player_structure:vendor_status')) + radials.add(RadialOptions(4, 217, 3, '@player_structure:give_maintenance')) + radials.add(RadialOptions(4, 115, 3, '@player_structure:take_maintenance')) + if owner.getSkillModBase('private_register_vendor') >= 1: + radials.add(RadialOptions(4, 116, 3, '@player_structure:register_vendor')) + radials.add(RadialOptions(4, 205, 3, '@player_structure:enable_vendor_search')) + radials.add(RadialOptions(4, 206, 3, '@player_structure:disable_vendor_search')) + radials.add(RadialOptions(4, 121, 3, '@player_structure:customize_vendor')) + + radials.add(RadialOptions(4, 114, 3, '@player_structure:vendor_pack')) + radials.add(RadialOptions(4, 117, 3, '@player_structure:remove_vendor')) + + return + +def handleSelection(core, owner, target, option): + return + \ No newline at end of file diff --git a/scripts/roadmap/trader_0a.py b/scripts/roadmap/trader_0a.py index 203b6ad9..c0ae1ee4 100644 --- a/scripts/roadmap/trader_0a.py +++ b/scripts/roadmap/trader_0a.py @@ -25,4 +25,30 @@ def getAction(): return 75 def getRewards(name): - return \ No newline at end of file + if name == 'item_npe_gen_craft_tool_trader_03_01': + return "object/tangible/crafting/base/shared_generic_base_tool.iff" + + if name == 'item_trader_backpack_01_02': + return "object/tangible/wearables/backpack/shared_backpack_s04.iff" + + if name == 'weapon_knife_trader_roadmap_01_02': + return "object/weapon/melee/knife/shared_knife_dagger.iff" + + if name == 'item_trader_ring_01_02': + return "object/tangible/wearables/ring/shared_ring_s02.iff" + + if name == 'item_trader_roadmap_jumpsuit_02_02': + return "object/tangible/wearables/bodysuit/shared_bodysuit_s01.iff" + + if name == 'weapon_pistol_trader_roadmap_01_02': + return "object/weapon/ranged/pistol/shared_pistol_scout_blaster.iff" + + if name == 'item_trader_pendant_01_02': + return "object/tangible/wearables/necklace/shared_necklace_s07.iff" + + if name == 'item_trader_clicky_01_02': + return "object/tangible/crafting/station/shared_generic_generic_tool.iff" + + if name == 'item_roadmap_belt_trader_01_02': + return "object/tangible/wearables/armor/zam/shared_armor_zam_wesell_belt.iff" + return \ No newline at end of file diff --git a/scripts/roadmap/trader_0b.py b/scripts/roadmap/trader_0b.py index 203b6ad9..c3a7e4ec 100644 --- a/scripts/roadmap/trader_0b.py +++ b/scripts/roadmap/trader_0b.py @@ -24,5 +24,32 @@ def getHealth(): def getAction(): return 75 + def getRewards(name): - return \ No newline at end of file + if name == 'item_npe_gen_craft_tool_trader_03_01': + return "object/tangible/crafting/base/shared_generic_base_tool.iff" + + if name == 'item_trader_backpack_01_02': + return "object/tangible/wearables/backpack/shared_backpack_s04.iff" + + if name == 'weapon_knife_trader_roadmap_01_02': + return "object/weapon/melee/knife/shared_knife_dagger.iff" + + if name == 'item_trader_ring_01_02': + return "object/tangible/wearables/ring/shared_ring_s02.iff" + + if name == 'item_trader_roadmap_jumpsuit_02_02': + return "object/tangible/wearables/bodysuit/shared_bodysuit_s01.iff" + + if name == 'weapon_pistol_trader_roadmap_01_02': + return "object/weapon/ranged/pistol/shared_pistol_scout_blaster.iff" + + if name == 'item_trader_pendant_01_02': + return "object/tangible/wearables/necklace/shared_necklace_s07.iff" + + if name == 'item_trader_clicky_01_02': + return "object/tangible/crafting/station/shared_generic_generic_tool.iff" + + if name == 'item_roadmap_belt_trader_01_02': + return "object/tangible/wearables/armor/zam/shared_armor_zam_wesell_belt.iff" + return \ No newline at end of file diff --git a/scripts/roadmap/trader_0c.py b/scripts/roadmap/trader_0c.py index 203b6ad9..7ac4a0d7 100644 --- a/scripts/roadmap/trader_0c.py +++ b/scripts/roadmap/trader_0c.py @@ -25,4 +25,30 @@ def getAction(): return 75 def getRewards(name): - return \ No newline at end of file + if name == 'item_npe_gen_craft_tool_trader_03_01': + return "object/tangible/crafting/base/shared_generic_base_tool.iff" + + if name == 'item_trader_backpack_01_02': + return "object/tangible/wearables/backpack/shared_backpack_s04.iff" + + if name == 'weapon_knife_trader_roadmap_01_02': + return "object/weapon/melee/knife/shared_knife_dagger.iff" + + if name == 'item_trader_ring_01_02': + return "object/tangible/wearables/ring/shared_ring_s02.iff" + + if name == 'item_trader_roadmap_jumpsuit_02_02': + return "object/tangible/wearables/bodysuit/shared_bodysuit_s01.iff" + + if name == 'weapon_pistol_trader_roadmap_01_02': + return "object/weapon/ranged/pistol/shared_pistol_scout_blaster.iff" + + if name == 'item_trader_pendant_01_02': + return "object/tangible/wearables/necklace/shared_necklace_s07.iff" + + if name == 'item_trader_clicky_01_02': + return "object/tangible/crafting/station/shared_generic_generic_tool.iff" + + if name == 'item_roadmap_belt_trader_01_02': + return "object/tangible/wearables/armor/zam/shared_armor_zam_wesell_belt.iff" + return \ No newline at end of file diff --git a/scripts/roadmap/trader_0d.py b/scripts/roadmap/trader_0d.py index 203b6ad9..7ac4a0d7 100644 --- a/scripts/roadmap/trader_0d.py +++ b/scripts/roadmap/trader_0d.py @@ -25,4 +25,30 @@ def getAction(): return 75 def getRewards(name): - return \ No newline at end of file + if name == 'item_npe_gen_craft_tool_trader_03_01': + return "object/tangible/crafting/base/shared_generic_base_tool.iff" + + if name == 'item_trader_backpack_01_02': + return "object/tangible/wearables/backpack/shared_backpack_s04.iff" + + if name == 'weapon_knife_trader_roadmap_01_02': + return "object/weapon/melee/knife/shared_knife_dagger.iff" + + if name == 'item_trader_ring_01_02': + return "object/tangible/wearables/ring/shared_ring_s02.iff" + + if name == 'item_trader_roadmap_jumpsuit_02_02': + return "object/tangible/wearables/bodysuit/shared_bodysuit_s01.iff" + + if name == 'weapon_pistol_trader_roadmap_01_02': + return "object/weapon/ranged/pistol/shared_pistol_scout_blaster.iff" + + if name == 'item_trader_pendant_01_02': + return "object/tangible/wearables/necklace/shared_necklace_s07.iff" + + if name == 'item_trader_clicky_01_02': + return "object/tangible/crafting/station/shared_generic_generic_tool.iff" + + if name == 'item_roadmap_belt_trader_01_02': + return "object/tangible/wearables/armor/zam/shared_armor_zam_wesell_belt.iff" + return \ No newline at end of file diff --git a/scripts/skillMods/expertise_strikethrough_chance.py b/scripts/skillMods/expertise_strikethrough_chance.py index b5c5e291..47e3d763 100644 --- a/scripts/skillMods/expertise_strikethrough_chance.py +++ b/scripts/skillMods/expertise_strikethrough_chance.py @@ -1,8 +1,10 @@ import sys def add(core, actor, skillMod, value): + core.skillModService.addSkillMod(actor, 'display_only_strikethrough', 100 * skillMod.getBase()) return def deduct(core, actor, skillMod, value): + core.skillModService.deductSkillMod(actor, 'display_only_strikethrough', 100 * skillMod.getBase()) return - \ No newline at end of file + diff --git a/scripts/skillMods/strength_modified.py b/scripts/skillMods/strength_modified.py index 45ac9940..469cc568 100644 --- a/scripts/skillMods/strength_modified.py +++ b/scripts/skillMods/strength_modified.py @@ -4,7 +4,7 @@ def add(core, actor, skillMod, divisor): core.skillModService.addSkillMod(actor, 'display_only_block', skillMod.getBase() / 2) return -def deduct(core, actor, name, base): +def deduct(core, actor, skillMod, divisor): core.skillModService.deductSkillMod(actor, 'display_only_block', skillMod.getBase() / 2) return \ No newline at end of file diff --git a/scripts/static_spawns/lok.py b/scripts/static_spawns/corellia/corellia.py similarity index 98% rename from scripts/static_spawns/lok.py rename to scripts/static_spawns/corellia/corellia.py index 30c9163e..0df29b32 100644 --- a/scripts/static_spawns/lok.py +++ b/scripts/static_spawns/corellia/corellia.py @@ -3,8 +3,11 @@ import sys from resources.datatables import Options from resources.datatables import StateStatus + def addPlanetSpawns(core, planet): #This Script is no longer to be used for NPC Scripting. - Levarris - + + + return diff --git a/scripts/static_spawns/corellia/coronet.py b/scripts/static_spawns/corellia/coronet.py new file mode 100644 index 00000000..c04fe03e --- /dev/null +++ b/scripts/static_spawns/corellia/coronet.py @@ -0,0 +1,125 @@ +import sys +from resources.datatables import Options +from resources.datatables import StateStatus + +def addPlanetSpawns(core, planet): + + stcSvc = core.staticService + +#-Coronet + ralMundi = stcSvc.spawnObject('object/mobile/shared_dressed_noble_fat_twilek_male_02.iff', 'corellia', long(0), float(-138.975), float(28), float(-4718.86), float(-0.97), float(0.21)) + ralMundi.setCustomName2('Ral Mundi') + ralMundi.setOptionsBitmask(256) + + ioTsomcren = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_naboo_moncal_male_01.iff', 'corellia', long(0), float(-140.701), float(28), float(-4719.16), float(-0.97), float(0.21)) + ioTsomcren.setCustomName2('Io Tsomcren') + ioTsomcren.setOptionsBitmask(256) + + tarthJax = stcSvc.spawnObject('object/mobile/shared_dressed_binayre_pirate_zabrak_male_01.iff', 'corellia', long(0), float(-137.464), float(28), float(-4718.83), float(-0.97), float(0.21)) + tarthJax.setCustomName2('Tarth Jaxx') + tarthJax.setOptionsBitmask(256) + + rebCoord = stcSvc.spawnObject('object/mobile/shared_dressed_rebel_communication_female_01.iff', 'corellia', long(0), float(94.8749), float(28), float(-4519.08), float(-0.97), float(0.21)) + rebCoord.setCustomName2('Rebel Coordinator') + rebCoord.setOptionsBitmask(264) + + huntrJavz = stcSvc.spawnObject('object/mobile/ep3/shared_ep3_rodian_hunter_m.iff', 'corellia', long(0), float(-51.79), float(28), float(-4662.65), float(0.11), float(0.21)) + huntrJavz.setCustomName2('Hunter Javeezo') + huntrJavz.setOptionsBitmask(256) + + dw_heraldRebel = stcSvc.spawnObject('object/mobile/shared_dressed_rebel_general_moncal_male_01.iff', 'corellia', long(0), float(-213.64), float(28), float(-4445.46), float(-0.97), float(0.21)) + dw_heraldRebel.setCustomName2('Lutin Nightstalker') + dw_heraldRebel.setOptionsBitmask(256) + +#---Coronet-CityHall-interrior + brantlee = stcSvc.spawnObject('object/mobile/shared_dressed_brantlee_spondoon.iff', 'corellia', long(1855463), float(-25.7), float(1.3), float(-0.5), float(0.98), float(0.01)) + brantlee.setCustomName2('Brantlee Spondoon') + brantlee.setOptionsBitmask(256) + + cor_brawlr00 = stcSvc.spawnObject('object/mobile/shared_dressed_brawler_trainer_01.iff', 'corellia', long(1855463), float(-1.7274), float(7.9), float(-32.175), float(0.5), float(0.01)) + cor_brawlr00.setCustomName2('a brawler') + + cor_btdiplmt02 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_naboo_bothan_male_01.iff', 'corellia', long(1855463), float(5.228), float(0.3), float(2.9167), float(-0.47), float(0.21)) + cor_btdiplmt02.setCustomName2('a Bothan Diplomat') + + cor_btinfobkr00 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_naboo_bothan_female_02.iff', 'corellia', long(1855463), float(5.228), float(0.3), float(4.016), float(0.99), float(0.01)) + cor_btinfobkr00.setCustomName2('a Bothan Information Broker') + + cor_btinfobkr01 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_naboo_bothan_male_02.iff', 'corellia', long(1855463), float(5.345), float(2.278), float(-27.0615), float(-0.14), float(0.22)) + cor_btinfobkr01.setCustomName2('a Bothan Information Broker') + + cor_ent00 = stcSvc.spawnObject('object/mobile/shared_dressed_twk_entertainer.iff', 'corellia', long(1855463), float(0.767877), float(0.3), float(-2.902), float(-0.50), float(0.11)) + cor_ent00.setCustomName2('an Entertainer') + + cor_farmer00 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_naboo_human_male_02.iff', 'corellia', long(1855463), float(-18.6014), float(1.3026), float(-11.314), float(-0.45), float(0.21)) + cor_farmer00.setCustomName2('a farmer') + + cor_farmer01 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_naboo_human_female_01.iff', 'corellia', long(1855463), float(0.767877), float(0.3), float(-4.002), float(-0.45), float(0.21)) + cor_farmer01.setCustomName2('a farmer') + + galluraHanderin = stcSvc.spawnObject('object/mobile/shared_dressed_noble_human_female_02.iff', 'corellia', long(1855463), float(-6.51554), float(1.303), float(9.6562), float(0.1), float(0.01)) + galluraHanderin.setCustomName2('Gallura Handerin') + galluraHanderin.setOptionsBitmask(256) + + corsec_agent00 = stcSvc.spawnObject('object/mobile/shared_dressed_corellia_local_corsec_chief.iff', 'corellia', long(1855463), float(-0.332), float(0.3), float(-2.902), float(0.89), float(0.01)) + corsec_agent00.setCustomName2('a CorSec Agent') + + thaleDustrunner = stcSvc.spawnObject('object/mobile/shared_dressed_criminal_smuggler_human_male_01.iff', 'corellia', long(1855463), float(-0.05), float(3.078), float(-10.9388), float(0.99), float(0.11)) + thaleDustrunner.setCustomName2('Thale Dustrunner') + thaleDustrunner.setOptionsBitmask(256) + +#---Coronet-StarPort-interrior + cor_btdiplmt00 = stcSvc.spawnObject('object/mobile/shared_dressed_noble_bothan_female_01.iff', 'corellia', long(1855678), float(56.669), float(-0.521137), float(33.7689), float(0.99), float(0.11)) + cor_btdiplmt00.setCustomName2('a Bothan Diplomat') + + cor_btdiplmt01 = stcSvc.spawnObject('object/mobile/shared_dressed_noble_bothan_male_01.iff', 'corellia', long(1855672), float(8.651), float(0.6394), float(74.448), float(-0.47), float(0.21)) + cor_btdiplmt01.setCustomName2('a Bothan Diplomat') + + corsec_cadt00 = stcSvc.spawnObject('object/mobile/shared_dressed_corsec_pilot_human_female_01.iff', 'corellia', long(1855678), float(37.163), float(0.6394), float(40.706), float(0.99), float(0.11)) + corsec_cadt00.setCustomName2('a CorSec cadet') + + farmer02 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_naboo_human_male_04.iff', 'corellia', long(1855683), float(-62.767), float(2.6394), float(40.66), float(-0.45), float(0.21)) + farmer02.setCustomName2('a farmer') + + gambler00 = stcSvc.spawnObject('object/mobile/ep3/shared_ep3_cheated_gambler.iff', 'corellia', long(1855675), float(-4.61669), float(0.6394), float(67.826), float(0.99), float(0.11)) + gambler00.setCustomName2('a gambler') + + cor_hunter00 = stcSvc.spawnObject('object/mobile/shared_dressed_trader_thug_male_moncal_02.iff', 'corellia', long(1855672), float(8.651), float(0.6394), float(75.548), float(0.99), float(0.11)) + cor_hunter00.setCustomName2('a hunter') + + jessbConvorr = stcSvc.spawnObject('object/mobile/shared_dressed_corellia_jesseb_convorr.iff', 'corellia', long(1855684), float(50.2), float(1.0), float(20.1), float(-0.47), float(0.21)) + jessbConvorr.setCustomName2('Jesseb Convorr') + jessbConvorr.setOptionsBitmask(256) + + cor_merc00 = stcSvc.spawnObject('object/mobile/shared_dressed_mercenary_strong_hum_m.iff', 'corellia', long(1855683), float(-62.767), float(2.6394), float(41.76), float(0.99), float(0.11)) + cor_merc00.setCustomName2('a mercenary') + + cor_miner00 = stcSvc.spawnObject('object/mobile/shared_dressed_mand_miner_hum_03.iff', 'corellia', long(1855678), float(37.163), float(0.6394), float(39.606), float(-0.47), float(0.21)) + cor_miner00.setCustomName2('a miner') + + cor_scintst00 = stcSvc.spawnObject('object/mobile/shared_dressed_twi_female_scientist_01.iff', 'corellia', long(1855678), float(56.669), float(-0.521137), float(32.6689), float(-0.47), float(0.21)) + cor_scintst00.setCustomName2('a Scientist') + + cor_slice00 = stcSvc.spawnObject('object/mobile/shared_dressed_criminal_slicer_human_male_01.iff', 'corellia', long(1855675), float(-4.61669), float(0.6394), float(66.7263), float(-0.5), float(0.21)) + cor_slice00.setCustomName2('a slicer') + +#-Coronet-Legacy NPCs + stregand = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_tatooine_bith_male_01.iff', 'corellia', long(0), float(-33), float(28), float(-4424), float(0.67), float(0.21)) + stregand.setCustomName2('Stregand') + stregand.setOptionsBitmask(256) + + borgan = stcSvc.spawnObject('object/creature/npc/base/shared_whiphid_base_male.iff', 'corellia', long(0), float(-34.4), float(28), float(-4418.2), float(0.75), float(0.21)) + borgan.setCustomName2('Borgan') + borgan.setOptionsBitmask(256) + + #Lt. Joth - wrong appearance - looking for a bearded guy with BLUE CorSec Jacket + ltJoth = stcSvc.spawnObject('object/mobile/shared_dressed_corellia_cec_officer.iff', 'corellia', long(0), float(-283), float(28), float(-4697), float(0.07), float(0.11)) + ltJoth.setCustomName2('Lieutenant Joth') + ltJoth.setOptionsBitmask(256) + + mackJasper = stcSvc.spawnObject('object/mobile/shared_dressed_corsec_officer_human_male_01.iff', 'corellia', long(0), float(-68.2), float(28), float(-4631.8), float(-0.97), float(0.21)) + mackJasper.setCustomName2('Lieutenant Mack Jasper') + mackJasper.setOptionsBitmask(256) + + + return \ No newline at end of file diff --git a/scripts/static_spawns/corellia/placeholder.txt b/scripts/static_spawns/corellia/placeholder.txt new file mode 100644 index 00000000..e69de29b diff --git a/scripts/static_spawns/dantooine/dantooine.py b/scripts/static_spawns/dantooine/dantooine.py new file mode 100644 index 00000000..ad56f992 --- /dev/null +++ b/scripts/static_spawns/dantooine/dantooine.py @@ -0,0 +1,21 @@ +import sys +from resources.datatables import Options +from resources.datatables import State + +def addPlanetSpawns(core, planet): +######################################################## +# DO NOT ADD ANYTHING ELSE TO THIS SCRIPT, PLEASE USE THE +# SUBFOLDERS FOR EACH PLANET AND CREATE NEW SCRIPTS FOR +# EACH AREA OF A PLANET. - LEVARRIS +######################################################## + stcSvc = core.staticService + # Blue Frog: Uncomment only when needed for testing. + stcSvc.spawnObject('object/tangible/terminal/shared_terminal_character_builder.iff', 'dantooine', long(0), float(4196), float(9), float(5206), float(0.70), float(0.71)) + +######################################################## +# DO NOT ADD ANYTHING ELSE TO THIS SCRIPT, PLEASE USE THE +# SUBFOLDERS FOR EACH PLANET AND CREATE NEW SCRIPTS FOR +# EACH AREA OF A PLANET. - LEVARRIS +######################################################## + return + diff --git a/scripts/static_spawns/dantooine/placeholder.txt b/scripts/static_spawns/dantooine/placeholder.txt new file mode 100644 index 00000000..e69de29b diff --git a/scripts/static_spawns/dathomir/placeholder.txt b/scripts/static_spawns/dathomir/placeholder.txt new file mode 100644 index 00000000..e69de29b diff --git a/scripts/static_spawns/endor/placeholder.txt b/scripts/static_spawns/endor/placeholder.txt new file mode 100644 index 00000000..e69de29b diff --git a/scripts/static_spawns/kaas.py b/scripts/static_spawns/kaas/kaas.py similarity index 71% rename from scripts/static_spawns/kaas.py rename to scripts/static_spawns/kaas/kaas.py index 7bcd17d9..f21c8441 100644 --- a/scripts/static_spawns/kaas.py +++ b/scripts/static_spawns/kaas/kaas.py @@ -14,14 +14,14 @@ def addPlanetSpawns(core, planet): objSvc = core.objectService #Dark Temple Area #Structures - stcSvc.spawnObject('object/building/military/shared_military_base_police_station_imperial_lok_otto.iff', 'kaas', long(0), float(-5117.8), float(80.0), float(-2314.1), float(0), float(0)) - stcSvc.spawnObject('object/building/player/shared_player_house_corellia_medium_style_01.iff', 'kaas', long(0), float(-5078.6), float(80.0), float(-2302.5), float(0), float(0)) - stcSvc.spawnObject('object/building/general/shared_bunker_imperial_weapons_research_facility_01.iff', 'kaas', long(0), float(-5159.5), float(80.0), float(-2298.7), float(0), float(0)) - stcSvc.spawnObject('object/building/content/aurilia/shared_aurilia_pyramid_hut.iff', 'kaas', long(0), float(-5163.9), float(79.0), float(-2369.6), float(0.71), float(0.71)) - stcSvc.spawnObject('object/building/content/aurilia/shared_aurilia_pyramid_hut.iff', 'kaas', long(0), float(-5163.9), float(79.0), float(-2351.6), float(0.71), float(0.71)) - stcSvc.spawnObject('object/building/content/aurilia/shared_aurilia_pyramid_hut.iff', 'kaas', long(0), float(-5072.1), float(79.0), float(-2369.6), float(-0.71), float(0.71)) - stcSvc.spawnObject('object/building/content/aurilia/shared_aurilia_pyramid_hut.iff', 'kaas', long(0), float(-5072.1), float(79.0), float(-2351.6), float(-0.71), float(0.71)) - stcSvc.spawnObject('object/building/military/shared_outpost_cloning_facility_s02.iff', long(0), 'kaas', long(0), float(-5072.1), float(80.0), float(-2279.5), float(0.71), float(0), float(-0.71), float(0)) + #stcSvc.spawnObject('object/building/military/shared_military_base_police_station_imperial_lok_otto.iff', 'kaas', long(0), float(-5117.8), float(80.0), float(-2314.1), float(0), float(0)) + #stcSvc.spawnObject('object/building/player/shared_player_house_corellia_medium_style_01.iff', 'kaas', long(0), float(-5078.6), float(80.0), float(-2302.5), float(0), float(0)) + #stcSvc.spawnObject('object/building/general/shared_bunker_imperial_weapons_research_facility_01.iff', 'kaas', long(0), float(-5159.5), float(80.0), float(-2298.7), float(0), float(0)) + #stcSvc.spawnObject('object/building/content/aurilia/shared_aurilia_pyramid_hut.iff', 'kaas', long(0), float(-5163.9), float(79.0), float(-2369.6), float(0.71), float(0.71)) + #stcSvc.spawnObject('object/building/content/aurilia/shared_aurilia_pyramid_hut.iff', 'kaas', long(0), float(-5163.9), float(79.0), float(-2351.6), float(0.71), float(0.71)) + #stcSvc.spawnObject('object/building/content/aurilia/shared_aurilia_pyramid_hut.iff', 'kaas', long(0), float(-5072.1), float(79.0), float(-2369.6), float(-0.71), float(0.71)) + #stcSvc.spawnObject('object/building/content/aurilia/shared_aurilia_pyramid_hut.iff', 'kaas', long(0), float(-5072.1), float(79.0), float(-2351.6), float(-0.71), float(0.71)) + #stcSvc.spawnObject('object/building/military/shared_outpost_cloning_facility_s02.iff', 'kaas', long(0), float(-5072.1), float(80.0), float(-2279.5), float(0.71), float(0), float(-0.71), float(0)) #Terminals stcSvc.spawnObject('object/tangible/terminal/shared_terminal_bank.iff', 'kaas', long(0), float(-5080.8), float(80.0), float(-2275.7), float(-0.71), float(0.71)) @@ -58,20 +58,20 @@ def addPlanetSpawns(core, planet): #Village of the Descendants Area - stcSvc.spawnObject('object/building/general/shared_cave_01.iff', 'kaas', long(0), float(3348.1), float(110), float(2562.1), float(0), float(0)) + #stcSvc.spawnObject('object/building/general/shared_cave_01.iff', 'kaas', long(0), float(3348.1), float(110), float(2562.1), float(0), float(0)) #Kaas City Ruins #Tomb of Vitiate #Northwest Cave - stcSvc.spawnObject('object/building/general/shared_cave_01.iff', 'kaas', long(0), float(-6135.3), float(185), float(6575.0), float(0), float(0)) + #stcSvc.spawnObject('object/building/general/shared_cave_01.iff', 'kaas', long(0), float(-6135.3), float(185), float(6575.0), float(0), float(0)) #Abandoned Separatist Base - stcSvc.spawnObject('object/building/military/shared_military_base_police_station_rebel_style_01.iff', 'kaas', long(0), float(-3509), float(77), float(6800), float(0), float(0)) + #stcSvc.spawnObject('object/building/military/shared_military_base_police_station_rebel_style_01.iff', 'kaas', long(0), float(-3538), float(80), float(6758), float(0), float(0)) #Sith Meditation Chamber - stcSvc.spawnObject('object/building/player/shared_player_house_sith_meditation_room.iff', 'kaas', long(0), float(4766), float(126), float(-7307), float(0), float(0)) + #stcSvc.spawnObject('object/building/player/shared_player_house_sith_meditation_room.iff', 'kaas', long(0), float(4766), float(126), float(-7307), float(0), float(0)) #Large Ruin stcSvc.spawnObject('object/static/structure/dantooine/shared_dant_jedi_main_structure.iff', 'kaas', long(0), float(-434), float(77), float(-2252), float(0), float(0)) @@ -82,6 +82,7 @@ def addPlanetSpawns(core, planet): stcSvc.spawnObject('object/static/structure/dantooine/shared_dant_jedi_wall_1.iff', 'kaas', long(0), float(-58), float(77), float(6321), float(-0.71), float(0.71)) stcSvc.spawnObject('object/static/structure/dantooine/shared_dant_jedi_wall_2.iff', 'kaas', long(0), float(-71), float(77), float(6312), float(0), float(0)) stcSvc.spawnObject('object/static/structure/dantooine/shared_dant_jedi_temple_pillar.iff', 'kaas', long(0), float(-71.0), float(78), float(6320.8), float(0), float(0)) + stcSvc.spawnObject('object/static/structure/dantooine/shared_dant_jedi_main_structure.iff', 'kaas', long(0), float(-97), float(78), float(6376), float(0), float(0)) return diff --git a/scripts/static_spawns/kaas/placeholder.txt b/scripts/static_spawns/kaas/placeholder.txt new file mode 100644 index 00000000..e69de29b diff --git a/scripts/static_spawns/kashyyyk_main/placeholder.txt b/scripts/static_spawns/kashyyyk_main/placeholder.txt new file mode 100644 index 00000000..e69de29b diff --git a/scripts/static_spawns/lok/lok.py b/scripts/static_spawns/lok/lok.py new file mode 100644 index 00000000..658c4a93 --- /dev/null +++ b/scripts/static_spawns/lok/lok.py @@ -0,0 +1,14 @@ + +import sys +from resources.datatables import Options +from resources.datatables import StateStatus + +def addPlanetSpawns(core, planet): +######################################################## +# DO NOT ADD ANYTHING ELSE TO THIS SCRIPT, PLEASE USE THE +# SUBFOLDERS FOR EACH PLANET AND CREATE NEW SCRIPTS FOR +# EACH AREA OF A PLANET. - LEVARRIS +######################################################## + + + return diff --git a/scripts/static_spawns/lok/placeholder.txt b/scripts/static_spawns/lok/placeholder.txt new file mode 100644 index 00000000..e69de29b diff --git a/scripts/static_spawns/mustafar/placeholder.txt b/scripts/static_spawns/mustafar/placeholder.txt new file mode 100644 index 00000000..e69de29b diff --git a/scripts/static_spawns/naboo.py b/scripts/static_spawns/naboo.py deleted file mode 100644 index c1072308..00000000 --- a/scripts/static_spawns/naboo.py +++ /dev/null @@ -1,8 +0,0 @@ -import sys - -def addPlanetSpawns(core, planet): - - stcSvc = core.staticService - #this script is no longer for NPC spawning - Levarris - - return \ No newline at end of file diff --git a/scripts/static_spawns/naboo/naboo.py b/scripts/static_spawns/naboo/naboo.py new file mode 100644 index 00000000..7b0f3034 --- /dev/null +++ b/scripts/static_spawns/naboo/naboo.py @@ -0,0 +1,11 @@ +import sys + +def addPlanetSpawns(core, planet): + + stcSvc = core.staticService +######################################################## +# DO NOT ADD ANYTHING ELSE TO THIS SCRIPT, PLEASE USE THE +# SUBFOLDERS FOR EACH PLANET AND CREATE NEW SCRIPTS FOR +# EACH AREA OF A PLANET. - LEVARRIS + + return \ No newline at end of file diff --git a/scripts/static_spawns/naboo/placeholder.txt b/scripts/static_spawns/naboo/placeholder.txt new file mode 100644 index 00000000..e69de29b diff --git a/scripts/static_spawns/rori/emperors_hand.py b/scripts/static_spawns/rori/emperors_hand.py new file mode 100644 index 00000000..c7f61f9d --- /dev/null +++ b/scripts/static_spawns/rori/emperors_hand.py @@ -0,0 +1,15 @@ +import sys +import java.util.Random + +def addPlanetSpawns(core, planet): + + stcSvc = core.staticService + random = java.util.Random() + + mintime = 14400 + maxtime = 25200 + + respawntimer = random.nextInt((maxtime - mintime) + 1800) + + stcSvc.spawnObject('emperors_hand', 'rori', long(0), float(5283), float(80), float(5746), float(0.641), float(0.767),float(0),float(0), int(respawntimer)) + return \ No newline at end of file diff --git a/scripts/static_spawns/rori.py b/scripts/static_spawns/rori/restuss.py similarity index 100% rename from scripts/static_spawns/rori.py rename to scripts/static_spawns/rori/restuss.py diff --git a/scripts/static_spawns/rori/rori.py b/scripts/static_spawns/rori/rori.py new file mode 100644 index 00000000..ff976d80 --- /dev/null +++ b/scripts/static_spawns/rori/rori.py @@ -0,0 +1,14 @@ +import sys + +def addPlanetSpawns(core, planet): + + stcSvc = core.staticService + +######################################################## +# DO NOT ADD ANYTHING ELSE TO THIS SCRIPT, PLEASE USE THE +# SUBFOLDERS FOR EACH PLANET AND CREATE NEW SCRIPTS FOR +# EACH AREA OF A PLANET. - LEVARRIS +######################################################## + + + return \ No newline at end of file diff --git a/scripts/static_spawns/talus/placeholder.txt b/scripts/static_spawns/talus/placeholder.txt new file mode 100644 index 00000000..e69de29b diff --git a/scripts/static_spawns/tatooine.py b/scripts/static_spawns/tatooine.py deleted file mode 100644 index b376cf1f..00000000 --- a/scripts/static_spawns/tatooine.py +++ /dev/null @@ -1,22 +0,0 @@ -import sys -from resources.datatables import Options -from resources.datatables import StateStatus - -def addPlanetSpawns(core, planet): - - stcSvc = core.staticService - #this script is no longer for NPC spawning usage. - Levarris - - #stcSvc.spawnObject('object/mobile/shared_3po_protocol_droid_red.iff', 'tatooine', long(26582), float(-14.3), float(2.0), float(47.4), float(0.70), float(0.71)) - stcSvc.spawnObject('object/tangible/terminal/shared_terminal_character_builder.iff', 'tatooine', long(0), float(3525), float(4), float(-4801), float(0.70), float(0.71)) - #object = stcSvc.spawnObject('object/mobile/shared_respec_seller_f_1.iff', 'tatooine', long(0), float(3533.14), float(5), float(-4788.86), float(-0.3327), float(0.9288)) - #object.setOptionsBitmask(264) - - junkdealer = stcSvc.spawnObject('object/mobile/shared_junk_dealer_m_01.iff', 'tatooine', long(0), float(3525), float(4), float(-4804), float(0.70), float(0.71)) - junkdealer.setOptionsBitmask(264) - junkdealer.setCustomName('a Junk Dealer') - junkdealer.setAttachment('radial_filename', 'object/conversation'); - junkdealer.setAttachment('conversationFile','junk_dealer') - - return - diff --git a/scripts/static_spawns/tatooine/anchorhead.py b/scripts/static_spawns/tatooine/anchorhead.py new file mode 100644 index 00000000..379246f2 --- /dev/null +++ b/scripts/static_spawns/tatooine/anchorhead.py @@ -0,0 +1,51 @@ +import sys +# Project SWG: Anchorhead: Static Spawns +# (C)2014 ProjectSWG + + + +from resources.datatables import Options +from resources.datatables import State + +def addPlanetSpawns(core, planet): + + + stcSvc = core.staticService + objSvc = core.objectService + + # TODO Check all NPCs for personalized scripting, change format. + + # Cantina Interior + rebRecruiter = stcSvc.spawnObject('object/mobile/shared_dressed_rebel_recruiter_human_female_01.iff', 'tatooine', long(1213345), float(-2.2), float(0.4), float(-5.4), float(0), float(0)) + rebRecruiter.setOptionsBitmask(264) + + borraSetas = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_tatooine_rodian_female_03.iff', 'tatooine', long(1213345), float(9.8), float(0.4), float(-1.2), float(-0.65), float(0.75)) + borraSetas.setCustomName2('Borra Setas') + borraSetas.setOptionsBitmask(256) + + # Outside + aaphKoden = stcSvc.spawnObject('object/mobile/shared_dressed_tatooine_aaph_koden.iff', 'tatooine', long(0), float(129), float(5.0), float(-5399), float(-0.67), float(0.73)) + aaphKoden.setCustomName2('Aaph Koden') + aaphKoden.setOptionsBitmask(256) + + Alger = stcSvc.spawnObject('object/mobile/shared_smuggler_fence_alger.iff', 'tatooine', long(0), float(107), float(5.0), float(-5315), float(0.96), float(0.26)) + Alger.setCustomName2('Alger') + Alger.setOptionsBitmask(256) + + carhlaBastra = stcSvc.spawnObject('object/mobile/shared_dressed_legacy_bastra.iff', 'tatooine', long(0), float(128), float(5.0), float(-5428), float(-0.26), float(0.96)) + carhlaBastra.setCustomName2('Carh\'la Bastra') + carhlaBastra.setOptionsBitmask(256) + + cuanTalon = stcSvc.spawnObject('object/mobile/shared_dressed_legacy_cuan.iff', 'tatooine', long(0), float(-161.7), float(65.0), float(-5322.8), float(0), float(0)) + cuanTalon.setCustomName2('Cuan Talon') + cuanTalon.setOptionsBitmask(256) + + dromaOrdo = stcSvc.spawnObject('object/mobile/shared_dressed_anchorjobs_ordo.iff', 'tatooine', long(0), float(110), float(52.0), float(-5431), float(0.36), float(0.93)) + dromaOrdo.setCustomName2('Droma Ordo') + dromaOrdo.setOptionsBitmask(256) + + Sorna = stcSvc.spawnObject('object/mobile/shared_dressed_tatooine_tosche_sorna.iff', 'tatooine', long(0), float(-135), float(52.0), float(-5331), float(0.36), float(0.93)) + Sorna.setCustomName2('Sorna') + Sorna.setOptionsBitmask(256) + return + diff --git a/scripts/static_spawns/tatooine/bestine.py b/scripts/static_spawns/tatooine/bestine.py new file mode 100644 index 00000000..caaeed4a --- /dev/null +++ b/scripts/static_spawns/tatooine/bestine.py @@ -0,0 +1,100 @@ +import sys +# Project SWG: Bestine: Static Spawns +# (C)2014 ProjectSWG + + + +from resources.datatables import Options +from resources.datatables import State + +def addPlanetSpawns(core, planet): + + + stcSvc = core.staticService + objSvc = core.objectService + + # TODO Check all NPCs for personalized scripting, change format. + + # City hall + indigoSiyan = stcSvc.spawnObject('object/mobile/shared_dressed_indigo_siyan.iff', 'tatooine', long(926483), float(24.7), float(3.2), float(-30.7), float(-0.06), float(0.99)) + indigoSiyan.setCustomName2('Indigo Siyan') + indigoSiyan.setOptionsBitmask(256) + + keanna = stcSvc.spawnObject('object/mobile/shared_dressed_keanna_likyna.iff', 'tatooine', long(926480), float(-18.7), float(3.2), float(20.6), float(-0.97), float(0.2)) + keanna.setCustomName2('Keanna Li\'kyna') + keanna.setOptionsBitmask(256) + + oberhaur = stcSvc.spawnObject('object/mobile/shared_space_imperial_tier2_tatooine_oberhaur.iff', 'tatooine', long(926480), float(-21.9), float(3.2), float(26.9), float(0.99), float(0.01)) + oberhaur.setCustomName2('Commander Oberhaur') + oberhaur.setOptionsBitmask(256) + + seanTrenwell = stcSvc.spawnObject('object/mobile/shared_dressed_sean_trenwell.iff', 'tatooine', long(926483), float(19.4), float(3.2), float(-36), float(-0.06), float(0.99)) + seanTrenwell.setCustomName2('Sean Trenwell') + seanTrenwell.setOptionsBitmask(256) + + talmont = stcSvc.spawnObject('object/mobile/shared_prefect_talmont.iff', 'tatooine', long(926475), float(-1.9), float(3.1), float(-10.3), float(0.99), float(0)) + talmont.setCustomName2('Prefect Talmont') + talmont.setOptionsBitmask(256) + + tourAryon = stcSvc.spawnObject('object/mobile/shared_dressed_tatooine_tour_aryon.iff', 'tatooine', long(926479), float(-36.8), float(1.3), float(0.3), float(0.8), float(0.59)) + tourAryon.setCustomName2('Tour Aryon') + tourAryon.setOptionsBitmask(256) + + victorVisalis = stcSvc.spawnObject('object/mobile/shared_dressed_victor_visalis.iff', 'tatooine', long(926480), float(-26.7), float(3.2), float(20.8), float(0.96), float(0.24)) + victorVisalis.setCustomName2('Victor Visalis') + victorVisalis.setOptionsBitmask(256) + + wilhalmSkrim = stcSvc.spawnObject('object/mobile/shared_dressed_tatooine_wilhalm_skrim.iff', 'tatooine', long(926482), float(28.9), float(1.3), float(-6.0), float(0.23), float(0.97)) + wilhalmSkrim.setCustomName2('Wilhalm Skrim') + wilhalmSkrim.setOptionsBitmask(256) + + + #Miscellaneous Building Interiors + akalColzet = stcSvc.spawnObject('object/mobile/shared_dressed_imperial_trainer_space_01.iff', 'tatooine', long(1212359), float(0.7), float(1.8), float(-14), float(0), float(0.99)) + akalColzet.setCustomName2('lt. Akal Colzet') + akalColzet.setOptionsBitmask(256) + + fariousGletch = stcSvc.spawnObject('object/mobile/shared_dressed_tatooine_farious_gletch.iff', 'tatooine', long(1278989), float(2.0), float(-0.4), float(-5.7), float(-0.15), float(0.98)) + fariousGletch.setCustomName2('Farious Gletch') + fariousGletch.setOptionsBitmask(256) + + pfilbeeJhorn = stcSvc.spawnObject('object/mobile/shared_dressed_tatooine_pfilbee_jhorn.iff', 'tatooine', long(1279923), float(5.1), float(0.1), float(-3.8), float(-0.7), float(0.71)) + pfilbeeJhorn.setCustomName2('Pfilbee Jhorn') + pfilbeeJhorn.setOptionsBitmask(256) + + #Hotel interior + gilBurtin = stcSvc.spawnObject('object/mobile/shared_dressed_industrialist_trainer_01.iff', 'tatooine', long(1223850), float(20.3), float(1.6), float(12.8), float(0.99), float(0)) + gilBurtin.setCustomName2('Gil Burtin') + gilBurtin.setOptionsBitmask(256) + + # Outside + barak = stcSvc.spawnObject('object/mobile/shared_smuggler_broker_barak.iff', 'tatooine', long(0), float(-1049), float(5.0), float(-3537), float(0.97), float(0.23)) + barak.setCustomName2('Barak') + barak.setOptionsBitmask(256) + + barrezz = stcSvc.spawnObject('object/mobile/shared_dressed_dressed_legacy_barrezz.iff', 'tatooine', long(0), float(-1146.8), float(98.0), float(-3892.1), float(0.75), float(0.65)) + barrezz.setCustomName2('Commander Barrezz') + barrezz.setOptionsBitmask(256) + + jasha = stcSvc.spawnObject('object/mobile/shared_dressed_bestinejobs_jasha.iff', 'tatooine', long(0), float(-1128), float(98.0), float(-3900), float(-0.42), float(0.90)) + jasha.setCustomName2('Captain Jasha') + jasha.setOptionsBitmask(256) + + dkrn = stcSvc.spawnObject('object/mobile/shared_dressed_imperial_general_m.iff', 'tatooine', long(0), float(-1160), float(5.0), float(-3525), float(0.90), float(-0.41)) + dkrn.setCustomName2('Commander D\'krn') + dkrn.setOptionsBitmask(256) + + gunham = stcSvc.spawnObject('object/mobile/shared_dressed_imperial_lieutenant_m.iff', 'tatooine', long(0), float(-1125), float(12.2), float(-3620), float(0.9), float(0.42)) + gunham.setCustomName2('Commander Gunham') + gunham.setOptionsBitmask(256) + + kormundThrylle = stcSvc.spawnObject('object/mobile/shared_dressed_tatooine_kormund_thrylle.iff', 'tatooine', long(0), float(-1043), float(10.0), float(-3530), float(0.99), float(0.06)) + kormundThrylle.setCustomName2('Kormund Thrylle') + kormundThrylle.setOptionsBitmask(256) + + calebKnolar = stcSvc.spawnObject('object/mobile/shared_dressed_imperial_major_cold_m.iff', 'tatooine', long(0), float(-1149), float(98.0), float(-3903), float(0.42), float(0.91)) + calebKnolar.setCustomName2('Major Caleb Knolar') + calebKnolar.setOptionsBitmask(256) + + return + diff --git a/scripts/static_spawns/tatooine/jabbas_palace.py b/scripts/static_spawns/tatooine/jabbas_palace.py new file mode 100644 index 00000000..df11aef4 --- /dev/null +++ b/scripts/static_spawns/tatooine/jabbas_palace.py @@ -0,0 +1,82 @@ +import sys +# Project SWG: Jabba's Palace: Static Spawns +# (C)2014 ProjectSWG + + + +from resources.datatables import Options +from resources.datatables import State + +def addPlanetSpawns(core, planet): + + + stcSvc = core.staticService + objSvc = core.objectService + + # TODO Check all NPCs for personalized scripting, change format. + + # TODO Verify proper cell IDs once Jabba's Palace is spawning properly again. + + reelo = stcSvc.spawnObject('object/mobile/shared_reelo_baruk.iff', 'tatooine', long(26560), float(-3.5), float(0.2), float(113.5), float(0), float(0)) + reelo.setCustomName2('Reelo Baruk') + reelo.setOptionsBitmask(264) + + reeyees = stcSvc.spawnObject('object/mobile/shared_dressed_gran_thug_male_01.iff', 'tatooine', long(26560), float(5.8), float(0.2), float(115.7), float(0.70), float(-0.71)) + reeyees.setCustomName2('Ree-Yees') + reeyees.setOptionsBitmask(264) + + ephant = stcSvc.spawnObject('object/mobile/shared_ephant_mon.iff', 'tatooine', long(26564), float(-6.1), float(5.8), float(86.1), float(0), float(0)) + ephant.setCustomName2('Ephant Mon') + ephant.setOptionsBitmask(264) + + porcellus = stcSvc.spawnObject('object/mobile/shared_dressed_porcellus.iff', 'tatooine', long(26572), float(-44.0), float(3.0), float(63.4), float(0), float(0)) + porcellus.setCustomName2('Porcellus') + porcellus.setOptionsBitmask(264) + + barada = stcSvc.spawnObject('object/mobile/shared_barada.iff', 'tatooine', long(26596), float(31.2), float(0.2), float(-1.0), float(0.98), float(-0.17)) + barada.setCustomName2('Barada') + barada.setOptionsBitmask(264) + + bibMain = stcSvc.spawnObject('object/mobile/shared_bib_fortuna.iff', 'tatooine', long(26582), float(-11.1), float(2.0), float(49.5), float(0.70), float(0.71)) + bibMain.setCustomName2('Bib Fortuna') + bibMain.setOptionsBitmask(264) + + jabba = stcSvc.spawnObject('object/mobile/shared_jabba_the_hutt.iff', 'tatooine', long(26582), float(-17.0), float(2.8), float(44.9), float(0.70), float(0.71)) + jabba.setCustomName2('Jabba the Hutt') + jabba.setOptionsBitmask(264) + + oola = stcSvc.spawnObject('object/mobile/shared_oola.iff', 'tatooine', long(26582), float(-10.3), float(2.0), float(43.9), float(0.70), float(-0.71)) + oola.setCustomName2('Oola') + oola.setOptionsBitmask(264) + + bobaFett = stcSvc.spawnObject('object/mobile/shared_boba_fett.iff', 'tatooine', long(26582), float(-1.0), float(3.0), float(33.1), float(0), float(0)) + bobaFett.setCustomName2('Boba Fett') + bobaFett.setOptionsBitmask(264) + + ev9d9 = stcSvc.spawnObject('object/mobile/shared_ev_9d9.iff', 'tatooine', long(26574), float(18.8), float(0.2), float(78.7), float(1.0), float(0)) + ev9d9.setCustomName2('EV-9D9') + ev9d9.setOptionsBitmask(264) + + malakili = stcSvc.spawnObject('object/mobile/shared_malakili.iff', 'tatooine', long(26599), float(17.3), float(-11.0), float(43.8), float(0), float(0)) + malakili.setCustomName2('Malakili') + malakili.setOptionsBitmask(264) + +# TODO Need to somehow get the cellID for the Rancor Pit or it will NEVER be spawned. + + maxRebo = stcSvc.spawnObject('object/mobile/shared_max_rebo.iff', 'tatooine', long(26582), float(-1.4), float(3.0), float(26.9), float(0.42), float(-0.9)) + maxRebo.setCustomName2('Max Rebo') + maxRebo.setOptionsBitmask(264) + + droopy = stcSvc.spawnObject('object/mobile/shared_droopy_mccool.iff', 'tatooine', long(26582), float(-3.9), float(3.0), float(26.1), float(0.42), float(-0.9)) + droopy.setCustomName2('Droopy McCool') + droopy.setOptionsBitmask(264) + + sySnootles = stcSvc.spawnObject('object/mobile/shared_sy_snootles.iff', 'tatooine', long(26582), float(-1.4), float(3.0), float(29.8), float(0.42), float(-0.)) + sySnootles.setCustomName2('Sy Snootles') + sySnootles.setOptionsBitmask(264) + + g5po = stcSvc.spawnObject('object/mobile/shared_3po_protocol_droid_red.iff', 'tatooine', long(26582), float(-14.3), float(2.0), float(47.4), float(0.70), float(0.71)) + g5po.setCustomName2('G5-PO') + g5po.setOptionsBitmask(264) + return + diff --git a/scripts/static_spawns/tatooine/jawa_sandcrawler_legacy.py b/scripts/static_spawns/tatooine/jawa_sandcrawler_legacy.py new file mode 100644 index 00000000..4a4d0c61 --- /dev/null +++ b/scripts/static_spawns/tatooine/jawa_sandcrawler_legacy.py @@ -0,0 +1,25 @@ +import sys +# Project SWG: Jawa Sandcrawler - Legacy Quest Area: Static Spawns +# (C)2014 ProjectSWG + + + +from resources.datatables import Options +from resources.datatables import State + +def addPlanetSpawns(core, planet): + + + stcSvc = core.staticService + objSvc = core.objectService + + # TODO Check all NPCs for personalized scripting, change format. + + #Outside + fa2po = stcSvc.spawnObject('object/mobile/shared_3po_protocol_droid.iff', 'tatooine', long(0), float(-3805.7), float(30.4), float(-4721.6), float(0), float(0)) + fa2po.setCustomName2('FA-2PO') + fa2po.setOptionsBitmask(256) + + + return + diff --git a/scripts/static_spawns/tatooine/lars_homestead.py b/scripts/static_spawns/tatooine/lars_homestead.py new file mode 100644 index 00000000..90877ca9 --- /dev/null +++ b/scripts/static_spawns/tatooine/lars_homestead.py @@ -0,0 +1,25 @@ +import sys +# Project SWG: Lars Homestead: Static Spawns +# (C)2014 ProjectSWG + + + +from resources.datatables import Options +from resources.datatables import State + +def addPlanetSpawns(core, planet): + + + stcSvc = core.staticService + objSvc = core.objectService + + # TODO Check all NPCs for personalized scripting, change format. + + #Outside + zefAndo = stcSvc.spawnObject('object/mobile/shared_dressed_legacy_zef.iff', 'tatooine', long(0), float(-2574.9), float(0), float(-5516.7), float(0), float(0)) + zefAndo.setCustomName2('Zef Ando') + zefAndo.setOptionsBitmask(256) + + + return + diff --git a/scripts/static_spawns/tatooine/mos_eisley.py b/scripts/static_spawns/tatooine/mos_eisley.py new file mode 100644 index 00000000..8b3ac25f --- /dev/null +++ b/scripts/static_spawns/tatooine/mos_eisley.py @@ -0,0 +1,336 @@ +import sys +# Project SWG: Mos Eisley: Static Spawns +# (C)2014 ProjectSWG + + + +from resources.datatables import Options +from resources.datatables import State + +def addPlanetSpawns(core, planet): + + + stcSvc = core.staticService + objSvc = core.objectService + + # TODO Check all NPCs for personalized scripting, change format. + + #Cantina Interior + wuher = stcSvc.spawnObject('object/mobile/shared_wuher.iff', 'tatooine', long(1082877), float(8.6), float(-0.9), float(0.4), float(0.71), float(0.71)) + wuher.setCustomName2('Wuher') + wuher.setOptionsBitmask(256) + + chadraFanFemale = stcSvc.spawnObject('object/mobile/shared_chadra_fan_female.iff', 'tatooine', long(1082877), float(10.6), float(-0.9), float(-1.5), float(0.42), float(0.90)) + chadraFanFemale.setCustomName2('a Chadra Fan Female') + chadraFanFemale.setOptionsBitmask(256) + + chadraFanMale = stcSvc.spawnObject('object/mobile/shared_chadra_fan_male.iff', 'tatooine', long(1082877), float(10.7), float(-0.9), float(-0.3), float(0.64), float(0.77)) + chadraFanMale.setCustomName2('a Chadra Fan Male') + chadraFanMale.setOptionsBitmask(256) + + muftak = stcSvc.spawnObject('object/mobile/shared_muftak.iff', 'tatooine', long(1082877), float(20.3), float(-0.9), float(4.9), float(0.82), float(0.57)) + muftak.setCustomName2('Muftak') + muftak.setOptionsBitmask(256) + + chissMale1 = stcSvc.spawnObject('object/mobile/ep3/shared_ep3_etyyy_chiss_poacher_01.iff', 'tatooine', long(1082877), float(1.7), float(-0.9), float(-5.0), float(0.71), float(0.71)) + chissMale1.setCustomName2('a Chiss Male') + chissMale1.setOptionsBitmask(256) + + chissMale2 = stcSvc.spawnObject('object/mobile/ep3/shared_ep3_etyyy_chiss_poacher_02.iff', 'tatooine', long(1082877), float(3.4), float(-0.9), float(-4.8), float(0), float(0)) + chissMale2.setCustomName2('a Chiss Male') + chissMale2.setOptionsBitmask(256) + + cantinaStorm = stcSvc.spawnObject('object/mobile/shared_stormtrooper.iff', 'tatooine', long(1082877), float(2.9), float(-0.9), float(-6.5), float(0.71), float(0.71)) + cantinaStorm.setCustomName2('a Stormtrooper') + cantinaStorm.setOptionsBitmask(256) + + cantinaStormL = stcSvc.spawnObject('object/mobile/shared_stormtrooper_groupleader.iff', 'tatooine', long(1082877), float(3.6), float(-0.9), float(-7.9), float(0.71), float(0.71)) + cantinaStormL.setCustomName2('a Stormtrooper Squad Leader') + cantinaStormL.setOptionsBitmask(256) + + figrinDan = stcSvc.spawnObject('object/mobile/tatooine_npc/shared_figrin_dan.iff', 'tatooine', long(1082880), float(3.7), float(-0.9), float(-14.4), float(0.42), float(0.91)) + figrinDan.setCustomName2('Figrin D\'an') + figrinDan.setOptionsBitmask(256) + + techMor = stcSvc.spawnObject('object/mobile/tatooine_npc/shared_figrin_dan.iff', 'tatooine', long(1082880), float(4.0), float(-0.9), float(-17.0), float(0.42), float(0.91)) + techMor.setCustomName2('Tech M\'or') + techMor.setOptionsBitmask(256) + + doikkNats = stcSvc.spawnObject('object/mobile/tatooine_npc/shared_figrin_dan.iff', 'tatooine', long(1082880), float(2.2), float(-0.9), float(-16.4), float(0.42), float(0.91)) + doikkNats.setCustomName2('Doikk Na\'ts') + doikkNats.setOptionsBitmask(256) + + tednDahai = stcSvc.spawnObject('object/mobile/tatooine_npc/shared_figrin_dan.iff', 'tatooine', long(1082880), float(1.3), float(-0.9), float(-15.2), float(0.42), float(0.91)) + tednDahai.setCustomName2('Tedn Dahai') + tednDahai.setOptionsBitmask(256) + + nalanCheel = stcSvc.spawnObject('object/mobile/tatooine_npc/shared_figrin_dan.iff', 'tatooine', long(1082880), float(0.5), float(-0.9), float(-17.1), float(0.42), float(0.91)) + nalanCheel.setCustomName2('Nalan Cheel') + nalanCheel.setOptionsBitmask(256) + + businessman1 = stcSvc.spawnObject('object/mobile/shared_dressed_businessman_human_male_01.iff', 'tatooine', long(1082877), float(11.0), float(-0.9), float(2.1), float(0.38), float(-0.92)) + businessman1.setCustomName2('a Businessman') + businessman1.setOptionsBitmask(256) + + commoner1 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_tatooine_aqualish_male_01.iff', 'tatooine', long(1082877), float(10.3), float(-0.9), float(2.7), float(0.82), float(0.57)) + commoner1.setCustomName2('a Commoner') + commoner1.setOptionsBitmask(256) + + entertainer1 = stcSvc.spawnObject('object/mobile/shared_dressed_entertainer_trainer_twk_female_01.iff', 'tatooine', long(1082877), float(9.4), float(-0.9), float(3.9), float(0.38), float(-0.92)) + entertainer1.setCustomName2('an Entertainer') + entertainer1.setOptionsBitmask(256) + + noble1 = stcSvc.spawnObject('object/mobile/shared_dressed_noble_trandoshan_male_01.iff', 'tatooine', long(1082877), float(8.6), float(-0.9), float(4.8), float(0.82), float(0.57)) + noble1.setCustomName2('a Noble') + noble1.setOptionsBitmask(256) + + commoner2 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_tatooine_trandoshan_female_01.iff', 'tatooine', long(1082877), float(4.1), float(-0.9), float(5.7), float(1), float(0)) + commoner2.setCustomName2('a Commoner') + commoner2.setOptionsBitmask(256) + + commoner3 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_naboo_bothan_female_01.iff', 'tatooine', long(1082877), float(3.1), float(-0.9), float(5.9), float(1), float(0)) + commoner3.setCustomName2('a Commoner') + commoner3.setOptionsBitmask(256) + + commoner4 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_fat_twilek_male_01.iff', 'tatooine', long(1082877), float(1.7), float(-0.9), float(6.0), float(1), float(0)) + commoner4.setCustomName2('a Commoner') + commoner4.setOptionsBitmask(256) + + commoner5 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_naboo_bothan_male_01.iff', 'tatooine', long(1082877), float(-0.4), float(-0.9), float(5.9), float(1), float(0)) + commoner5.setCustomName2('a Commoner') + commoner5.setOptionsBitmask(256) + + commoner6 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_naboo_human_male_05.iff', 'tatooine', long(1082877), float(16.0), float(-0.9), float(4.1), float(0), float(0)) + commoner6.setCustomName2('a Commoner') + commoner6.setOptionsBitmask(256) + + commoner7 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_fat_zabrak_male_01.iff', 'tatooine', long(1082877), float(8.8), float(-0.9), float(-6.0), float(0.98), float(-0.22)) + commoner7.setCustomName2('a Patron') + commoner7.setOptionsBitmask(256) + + commoner8 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_naboo_human_male_08.iff', 'tatooine', long(1082877), float(6.8), float(-0.9), float(-6.5), float(0.98), float(-0.22)) + commoner8.setCustomName2('a Patron') + commoner8.setOptionsBitmask(256) + + commoner9 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_tatooine_aqualish_male_09.iff', 'tatooine', long(1082877), float(1.1), float(-0.9), float(-7.7), float(0.42), float(0.91)) + commoner9.setCustomName2('a Commoner') + commoner9.setOptionsBitmask(256) + + commoner10 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_tatooine_nikto_male_04.iff', 'tatooine', long(1082877), float(2.1), float(-0.9), float(-8.4), float(0.42), float(0.91)) + commoner10.setCustomName2('a Commoner') + commoner10.setOptionsBitmask(256) + + anetiaKahryn = stcSvc.spawnObject('object/mobile/shared_dressed_twk_entertainer.iff', 'tatooine', long(1082878), float(19.8), float(-0.9), float(-21), float(-0.03), float(0.99)) + anetiaKahryn.setCustomName2('Anetia Kah\'ryn') + anetiaKahryn.setOptionsBitmask(256) + + dravis = stcSvc.spawnObject('object/mobile/shared_space_privateer_tier1_tatooine.iff', 'tatooine', long(1082886), float(-21.7), float(-0.9), float(25.5), float(0.99), float(0.03)) + dravis.setCustomName2('Dravis') + dravis.setOptionsBitmask(256) + + talonKarrde = stcSvc.spawnObject('object/mobile/shared_dressed_talon_karrde.iff', 'tatooine', long(1082887), float(-25.7), float(-0.5), float(8.8), float(0.21), float(0.97)) + talonKarrde.setCustomName2('Talon Karrde') + talonKarrde.setOptionsBitmask(256) + + #Starport Interior + + bartender1 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_tatooine_nikto_male_04.iff', 'tatooine', long(1106380), float(-59.1), float(2.6), float(39.5), float(0), float(0)) + bartender1.setCustomName2('a Bartender') + bartender1.setOptionsBitmask(256) + + #City Hall Interior + + #Lucky Despot Interior TODO: Check Cell IDs for Spawned NPCS inside once Lucky Despot is spawning properly again. + + hansolo1 = stcSvc.spawnObject('object/mobile/shared_han_solo.iff', 'tatooine', long(26949), float(32.3), float(7.0), float(1.6), float(0), float(0)) + hansolo1.setCustomName2('Han Solo') + hansolo1.setOptionsBitmask(256) + + #Medical Center Interior + + #Theater Interior + + #Miscellaneous Building Interiors + + #Outside + businessman2 = stcSvc.spawnObject('object/mobile/shared_dressed_businessman_human_male_01.iff', 'tatooine', long(0), float(3663.3), float(4.0), float(-4738.6), float(0), float(0)) + businessman2.setCustomName2('a Businessman') + businessman2.setOptionsBitmask(256) + + noble2 = stcSvc.spawnObject('object/mobile/shared_dressed_noble_human_female_01.iff', 'tatooine', long(0), float(3542.3), float(5.0), float(-4826.0), float(0.42), float(0.91)) + noble2.setCustomName2('a Noble') + noble2.setOptionsBitmask(256) + + commoner11 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_naboo_human_male_06.iff', 'tatooine', long(0), float(3529.1), float(5.0), float(-4900.4), float(0.42), float(0.91)) + commoner11.setCustomName2('a Commoner') + commoner11.setOptionsBitmask(256) + + businessman3 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_tatooine_trandoshan_male_02.iff', 'tatooine', long(0), float(3595.7), float(5.0), float(-4740.1), float(0), float(0)) + businessman3.setCustomName2('a Businessman') + businessman3.setOptionsBitmask(256) + + jawa1 = stcSvc.spawnObject('object/mobile/shared_jawa.iff', 'tatooine', long(0), float(3663.3), float(5.0), float(-4858.6), float(0), float(0)) + jawa1.setCustomName2('a Jawa') + jawa1.setOptionsBitmask(256) + + commoner12 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_naboo_moncal_male_01.iff', 'tatooine', long(0), float(3490.3), float(5.0), float(-4799.4), float(0), float(0)) + commoner12.setCustomName2('a Scientist') + commoner12.setOptionsBitmask(256) + + commoner13 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_naboo_zabrak_female_02.iff', 'tatooine', long(0), float(3559.7), float(5.0), float(-4725.9), float(0), float(0)) + commoner13.setCustomName2('a Commoner') + commoner13.setOptionsBitmask(256) + + commoner14 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_tatooine_devaronian_male_01.iff', 'tatooine', long(0), float(3527.7), float(5.0), float(-4721.1), float(0.71), float(0.71)) + commoner14.setCustomName2('a Commoner') + commoner14.setOptionsBitmask(256) + + commoner15 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_tatooine_aqualish_female_01.iff', 'tatooine', long(0), float(3514.9), float(5.0), float(-4737.8), float(0), float(0)) + commoner15.setCustomName2('a Commoner') + commoner15.setOptionsBitmask(256) + + jawa2 = stcSvc.spawnObject('object/mobile/shared_jawa.iff', 'tatooine', long(0), float(3485.2), float(4.9), float(-4859.2), float(0), float(0)) + jawa2.setCustomName2('a Jawa') + jawa2.setOptionsBitmask(256) + + jawa3 = stcSvc.spawnObject('object/mobile/shared_jawa.iff', 'tatooine', long(0), float(3465.3), float(5.0), float(-4860.1), float(0.71), float(-0.71)) + jawa3.setCustomName2('a Jawa') + jawa3.setOptionsBitmask(256) + + jawa4 = stcSvc.spawnObject('object/mobile/shared_jawa.iff', 'tatooine', long(0), float(3486.8), float(5.0), float(-4884.7), float(0.43051), float(-0.9025)) + jawa4.setCustomName2('a Jawa') + jawa4.setOptionsBitmask(256) + + jawa5 = stcSvc.spawnObject('object/mobile/shared_jawa.iff', 'tatooine', long(0), float(3487.1), float(5.0), float(-4886.0), float(0.95105), float(0.3090)) + jawa5.setCustomName2('a Jawa') + jawa5.setOptionsBitmask(256) + + jawa6 = stcSvc.spawnObject('object/mobile/shared_jawa.iff', 'tatooine', long(0), float(3488.8), float(5.0), float(-4884.4), float(0.3255), float(-0.9455)) + jawa6.setCustomName2('a Jawa') + jawa6.setOptionsBitmask(256) + + jawa7 = stcSvc.spawnObject('object/mobile/shared_jawa.iff', 'tatooine', long(0), float(3472.2), float(5.0), float(-4918.4), float(0), float(0)) + jawa7.setCustomName2('a Jawa') + jawa7.setOptionsBitmask(256) + + jawa8 = stcSvc.spawnObject('object/mobile/shared_jawa.iff', 'tatooine', long(0), float(3471.4), float(5.0), float(-4919.5), float(0), float(0)) + jawa8.setCustomName2('a Jawa') + jawa8.setOptionsBitmask(256) + + jawa9 = stcSvc.spawnObject('object/mobile/shared_jawa.iff', 'tatooine', long(0), float(3470.3), float(5.0), float(-4918.7), float(0), float(0)) + jawa9.setCustomName2('a Jawa') + jawa9.setOptionsBitmask(256) + + bib = stcSvc.spawnObject('object/mobile/shared_bib_fortuna.iff', 'tatooine', long(0), float(3552.4), float(5.0), float(-4933.2), float(0.31730), float(-0.9483)) + bib.setCustomName2('Bib Fortuna') + bib.setOptionsBitmask(256) + + commoner16 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_naboo_human_male_06.iff', 'tatooine', long(0), float(3398.2), float(4.0), float(-4654.2), float(0.42), float(0.91)) + commoner16.setCustomName2('a Commoner') + commoner16.setOptionsBitmask(256) + + noble3 = stcSvc.spawnObject('object/mobile/shared_dressed_noble_human_female_01.iff', 'tatooine', long(0), float(3396.3), float(4.0), float(-4774.1), float(0.42), float(0.91)) + noble3.setCustomName2('a Noble') + noble3.setOptionsBitmask(256) + + entertainer1 = stcSvc.spawnObject('object/mobile/shared_dressed_entertainer_trainer_twk_female_01.iff', 'tatooine', long(0), float(3305.7), float(5.6), float(-4771.7), float(0), float(0)) + entertainer1.setCustomName2('an Entertainer') + entertainer1.setOptionsBitmask(256) + + r3m6 = stcSvc.spawnObject('object/mobile/shared_r3.iff', 'tatooine', long(0), float(3460.1), float(4.0), float(-4898.2), float(0.38), float(-0.92)) + r3m6.setCustomName2('R3-M6') + r3m6.setOptionsBitmask(256) + + eg1 = stcSvc.spawnObject('object/mobile/shared_eg6_power_droid.iff', 'tatooine', long(0), float(3463.8), float(4.0), float(-4882.6), float(-0.38), float(0.92)) + eg1.setCustomName2('an EG-6 Power Droid') + eg1.setOptionsBitmask(256) + + commoner17 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_naboo_zabrak_female_02.iff', 'tatooine', long(0), float(3452.6), float(4.0), float(-4937.1), float(0), float(0)) + commoner17.setCustomName2('a Commoner') + commoner17.setOptionsBitmask(256) + + lifter1 = stcSvc.spawnObject('object/mobile/shared_cll8_binary_load_lifter.iff', 'tatooine', long(0), float(3547), float(5.0), float(-4768.9), float(0), float(0)) + lifter1.setCustomName2('a CLL-8 Binary Load Lifter') + lifter1.setOptionsBitmask(256) + + r3j7 = stcSvc.spawnObject('object/mobile/shared_r3.iff', 'tatooine', long(0), float(3311.1), float(4.0), float(-4820.2), float(0.38), float(-0.92)) + r3j7.setCustomName2('R3-J7') + r3j7.setOptionsBitmask(256) + + noble4 = stcSvc.spawnObject('object/mobile/shared_dressed_noble_human_female_03.iff', 'tatooine', long(0), float(3255.3), float(4.0), float(-4848.1), float(0.42), float(0.91)) + noble4.setCustomName2('a Noble') + noble4.setOptionsBitmask(256) + + byxlePedette = stcSvc.spawnObject('object/mobile/shared_dressed_tatooine_opening_byxle.iff', 'tatooine', long(0), float(3365), float(5), float(-4639), float(0.99), float(0.12)) + byxlePedette.setOptionsBitmask(264) + + errikDarksider = stcSvc.spawnObject('object/mobile/shared_dressed_herald_tatooine_01.iff', 'tatooine', long(0), float(3381), float(4.6), float(-4498), float(0.91), float(0.40)) + errikDarksider.setCustomName2('Errik Darksider') + errikDarksider.setOptionsBitmask(256) + + gendra = stcSvc.spawnObject('object/mobile/shared_dressed_gendra.iff', 'tatooine', long(0), float(3308), float(5.6), float(-4785), float(0.84), float(0.53)) + gendra.setOptionsBitmask(264) + + lurval = stcSvc.spawnObject('object/mobile/shared_lurval.iff', 'tatooine', long(0), float(3387), float(5), float(-4791), float(-0.4), float(0.91)) + lurval.setCustomName2('Lurval') + lurval.setOptionsBitmask(256) + + matildaCarson = stcSvc.spawnObject('object/mobile/shared_dressed_noble_human_female_02.iff', 'tatooine', long(0), float(3490.2), float(5), float(-4778), float(0.87), float(0.48)) + matildaCarson.setCustomName2('Matilda Carson') + matildaCarson.setOptionsBitmask(256) + + vanvi = stcSvc.spawnObject('object/mobile/shared_dressed_bestine_artist01.iff', 'tatooine', long(0), float(3312), float(5), float(-4655), float(0.95), float(-0.28)) + vanvi.setCustomName2('Vanvi Hotn') + vanvi.setOptionsBitmask(256) + + #Eisley Legacy Quest NPCs + + vourk = stcSvc.spawnObject('object/mobile/shared_dressed_tatooine_opening_santos.iff', 'tatooine', long(0), float(3520.0), float(5.0), float(-4821.0), float(0.42), float(0.91)) + vourk.setCustomName2('Vourk Ver\'Zremp') + vourk.setOptionsBitmask(256) + + mayor = stcSvc.spawnObject('object/mobile/shared_dressed_mayor_mikdanyell_guhrantt.iff', 'tatooine', long(1279960), float(1.2), float(2.5), float(5.4), float(0), float(0)) + mayor.setOptionsBitmask(264) + + enthaKandela = stcSvc.spawnObject('object/mobile/shared_dressed_entha_kandela.iff', 'tatooine', long(0), float(3511), float(5.0), float(-4785), float(0.70), float(0.71)) + enthaKandela.setCustomName2('Entha Kandela') + enthaKandela.setOptionsBitmask(256) + + purvis = stcSvc.spawnObject('object/mobile/shared_dressed_purvis_arrison.iff', 'tatooine', long(0), float(3512.4), float(5.0), float(-4764.9), float(0.38), float(-0.92)) + purvis.setCustomName2('Purvis Arrison') + purvis.setOptionsBitmask(256) + + peawpRdawc = stcSvc.spawnObject('object/mobile/shared_peawp_bodyguard_trainer.iff', 'tatooine', long(1189639), float(-11.8), float(1.1), float(-10.1), float(0), float(0)) + peawpRdawc.setCustomName2('Peawp R\'dawc') + peawpRdawc.setOptionsBitmask(256) + + nikoBrehe = stcSvc.spawnObject('object/mobile/shared_dressed_tatooine_opening_niko.iff', 'tatooine', long(0), float(3506.7), float(5.0), float(-4795.8), float(0.70), float(0.71)) + nikoBrehe.setOptionsBitmask(264) + + dunir = stcSvc.spawnObject('object/mobile/shared_dressed_tatooine_opening_dunir.iff', 'tatooine', long(0), float(3520.7), float(5.0), float(-4683.7), float(0.99), float(-0.08)) + dunir.setOptionsBitmask(264) + + #Eisley Ship Controller + stcSvc.spawnObject('object/mobile/shared_distant_ship_controller.iff', 'tatooine', long(0), float(3542.3), float(5.0), float(-4826.0), float(0.42), float(0.91)) + + #recruiters + impRecruiter = stcSvc.spawnObject('object/mobile/shared_dressed_imperial_officer_f.iff', 'tatooine', long(1280132), float(-6), float(1), float(9.2), float(0.70), float(0.71)) + impRecruiter.setOptionsBitmask(264) + + + + #Profession Counselor + stcSvc.spawnObject('object/mobile/shared_respec_seller_f_1.iff', 'tatooine', long(0), float(3533.14), float(5), float(-4788.86), float(-0.3327), float(0.9288)) + + #Junk Dealers + stcSvc.spawnObject('object/mobile/shared_junk_dealer_m_01.iff', 'tatooine', long(0), float(3355), float(5), float(-4823), float(0.71), float(0.71)) + stcSvc.spawnObject('object/mobile/shared_junk_dealer_m_01.iff', 'tatooine', long(0), float(3412), float(5), float(-4713), float(0.71), float(-0.71)) + stcSvc.spawnObject('object/mobile/shared_junk_dealer_m_01.iff', 'tatooine', long(0), float(3500), float(5), float(-4960), float(0), float(0)) + stcSvc.spawnObject('object/mobile/shared_junk_dealer_m_01.iff', 'tatooine', long(0), float(3497), float(5), float(-4928), float(0), float(1)) + stcSvc.spawnObject('object/mobile/shared_junk_dealer_m_01.iff', 'tatooine', long(0), float(3377), float(5), float(-4524), float(0.71), float(0.71)) + stcSvc.spawnObject('object/mobile/shared_junk_dealer_m_01.iff', 'tatooine', long(0), float(3271), float(5), float(-4704), float(0), float(0)) + stcSvc.spawnObject('object/mobile/shared_junk_dealer_m_01.iff', 'tatooine', long(0), float(3476), float(5), float(-4665), float(0.71), float(0.71)) + + + return + diff --git a/scripts/static_spawns/tatooine/mos_eisley_kreetles.py b/scripts/static_spawns/tatooine/mos_eisley_kreetles.py new file mode 100644 index 00000000..fda1dbd5 --- /dev/null +++ b/scripts/static_spawns/tatooine/mos_eisley_kreetles.py @@ -0,0 +1,50 @@ +import sys +# Project SWG: MosEisley Kreetles: Static Spawns +# (C)2014 ProjectSWG + + + +from resources.datatables import Options +from resources.datatables import State + +def addPlanetSpawns(core, planet): + + + stcSvc = core.staticService + objSvc = core.objectService + + # Carrion Kreetles + carrion_kreetle1 = stcSvc.spawnObject('carrion_kreetle', 'tatooine', long(0), float(3551), float(4), float(-5064), float(0), float(0), float(0), float(0), 30) + carrion_kreetle11 = stcSvc.spawnObject('carrion_kreetle', 'tatooine', long(0), float(3545), float(4), float(-5055), float(0), float(0), float(0), float(0), 30) + carrion_kreetle12 = stcSvc.spawnObject('carrion_kreetle', 'tatooine', long(0), float(3540), float(4), float(-5050), float(0), float(0), float(0), float(0), 30) + carrion_kreetle13 = stcSvc.spawnObject('carrion_kreetle', 'tatooine', long(0), float(3533), float(4), float(-5070), float(0), float(0), float(0), float(0), 30) + carrion_kreetle14 = stcSvc.spawnObject('carrion_kreetle', 'tatooine', long(0), float(3555), float(4), float(-5072), float(0), float(0), float(0), float(0), 30) + carrion_kreetle15 = stcSvc.spawnObject('carrion_kreetle', 'tatooine', long(0), float(3559), float(4), float(-5061), float(0), float(0), float(0), float(0), 30) + carrion_kreetle16 = stcSvc.spawnObject('carrion_kreetle', 'tatooine', long(0), float(3562), float(4), float(-5064), float(0), float(0), float(0), float(0), 30) + carrion_kreetle17 = stcSvc.spawnObject('carrion_kreetle', 'tatooine', long(0), float(3565), float(4), float(-5058), float(0), float(0), float(0), float(0), 30) + carrion_kreetle18 = stcSvc.spawnObject('carrion_kreetle', 'tatooine', long(0), float(3535), float(4), float(-5061), float(0), float(0), float(0), float(0), 30) + carrion_kreetle19 = stcSvc.spawnObject('carrion_kreetle', 'tatooine', long(0), float(3551), float(4), float(-5058), float(0), float(0), float(0), float(0), 30) + + carrion_kreetle2 = stcSvc.spawnObject('carrion_kreetle', 'tatooine', long(0), float(3233), float(8), float(-4457), float(0), float(0), float(0), float(0), 30) + carrion_kreetle21 = stcSvc.spawnObject('carrion_kreetle', 'tatooine', long(0), float(3223), float(8), float(-4447), float(0), float(0), float(0), float(0), 30) + carrion_kreetle22 = stcSvc.spawnObject('carrion_kreetle', 'tatooine', long(0), float(3213), float(8), float(-4455), float(0), float(0), float(0), float(0), 30) + carrion_kreetle23 = stcSvc.spawnObject('carrion_kreetle', 'tatooine', long(0), float(3235), float(8), float(-4440), float(0), float(0), float(0), float(0), 30) + carrion_kreetle24 = stcSvc.spawnObject('carrion_kreetle', 'tatooine', long(0), float(3245), float(8), float(-4460), float(0), float(0), float(0), float(0), 30) + carrion_kreetle25 = stcSvc.spawnObject('carrion_kreetle', 'tatooine', long(0), float(3250), float(8), float(-4461), float(0), float(0), float(0), float(0), 30) + carrion_kreetle26 = stcSvc.spawnObject('carrion_kreetle', 'tatooine', long(0), float(3238), float(8), float(-4464), float(0), float(0), float(0), float(0), 30) + carrion_kreetle27 = stcSvc.spawnObject('carrion_kreetle', 'tatooine', long(0), float(3228), float(8), float(-4470), float(0), float(0), float(0), float(0), 30) + carrion_kreetle28 = stcSvc.spawnObject('carrion_kreetle', 'tatooine', long(0), float(3222), float(8), float(-4471), float(0), float(0), float(0), float(0), 30) + carrion_kreetle29 = stcSvc.spawnObject('carrion_kreetle', 'tatooine', long(0), float(3239), float(8), float(-4437), float(0), float(0), float(0), float(0), 30) + + carrion_kreetle3 = stcSvc.spawnObject('carrion_kreetle', 'tatooine', long(0), float(3147), float(4), float(-4846), float(0), float(0), float(0), float(0), 30) + carrion_kreetle31 = stcSvc.spawnObject('carrion_kreetle', 'tatooine', long(0), float(3137), float(4), float(-4856), float(0), float(0), float(0), float(0), 30) + carrion_kreetle32 = stcSvc.spawnObject('carrion_kreetle', 'tatooine', long(0), float(3127), float(4), float(-4836), float(0), float(0), float(0), float(0), 30) + carrion_kreetle33 = stcSvc.spawnObject('carrion_kreetle', 'tatooine', long(0), float(3157), float(4), float(-4840), float(0), float(0), float(0), float(0), 30) + carrion_kreetle34 = stcSvc.spawnObject('carrion_kreetle', 'tatooine', long(0), float(3167), float(4), float(-4850), float(0), float(0), float(0), float(0), 30) + carrion_kreetle35 = stcSvc.spawnObject('carrion_kreetle', 'tatooine', long(0), float(3145), float(4), float(-4852), float(0), float(0), float(0), float(0), 30) + carrion_kreetle36 = stcSvc.spawnObject('carrion_kreetle', 'tatooine', long(0), float(3135), float(4), float(-4838), float(0), float(0), float(0), float(0), 30) + carrion_kreetle37 = stcSvc.spawnObject('carrion_kreetle', 'tatooine', long(0), float(3150), float(4), float(-4856), float(0), float(0), float(0), float(0), 30) + carrion_kreetle38 = stcSvc.spawnObject('carrion_kreetle', 'tatooine', long(0), float(3163), float(4), float(-4844), float(0), float(0), float(0), float(0), 30) + carrion_kreetle39 = stcSvc.spawnObject('carrion_kreetle', 'tatooine', long(0), float(3140), float(4), float(-4860), float(0), float(0), float(0), float(0), 30) + + return \ No newline at end of file diff --git a/scripts/static_spawns/tatooine/mos_eisley_mites.py b/scripts/static_spawns/tatooine/mos_eisley_mites.py new file mode 100644 index 00000000..a6b03e4c --- /dev/null +++ b/scripts/static_spawns/tatooine/mos_eisley_mites.py @@ -0,0 +1,69 @@ +import sys +# Project SWG: MosEisley mites: Static Spawns +# (C)2014 ProjectSWG + + + +from resources.datatables import Options +from resources.datatables import State + +def addPlanetSpawns(core, planet): + + + stcSvc = core.staticService + objSvc = core.objectService + + + # Mound Mites + mound_mite1 = stcSvc.spawnObject('mound_mite', 'tatooine', long(0), float(3785), float(65), float(-5057), float(0), float(0), float(0), float(0), 30) + mound_mite11 = stcSvc.spawnObject('mound_mite', 'tatooine', long(0), float(3775), float(65), float(-5067), float(0), float(0), float(0), float(0), 30) + mound_mite12 = stcSvc.spawnObject('mound_mite', 'tatooine', long(0), float(3765), float(65), float(-5077), float(0), float(0), float(0), float(0), 30) + mound_mite13 = stcSvc.spawnObject('mound_mite', 'tatooine', long(0), float(3795), float(65), float(-5047), float(0), float(0), float(0), float(0), 30) + mound_mite14 = stcSvc.spawnObject('mound_mite', 'tatooine', long(0), float(3805), float(65), float(-5037), float(0), float(0), float(0), float(0), 30) + mound_mite15 = stcSvc.spawnObject('mound_mite', 'tatooine', long(0), float(3780), float(65), float(-5050), float(0), float(0), float(0), float(0), 30) + mound_mite16 = stcSvc.spawnObject('mound_mite', 'tatooine', long(0), float(3790), float(65), float(-5040), float(0), float(0), float(0), float(0), 30) + + # Mound Mites + mound_mite2 = stcSvc.spawnObject('mound_mite', 'tatooine', long(0), float(3560), float(63), float(-4339), float(0), float(0), float(0), float(0), 30) + mound_mite21 = stcSvc.spawnObject('mound_mite', 'tatooine', long(0), float(3550), float(63), float(-4349), float(0), float(0), float(0), float(0), 30) + mound_mite22 = stcSvc.spawnObject('mound_mite', 'tatooine', long(0), float(3540), float(63), float(-4359), float(0), float(0), float(0), float(0), 30) + mound_mite23 = stcSvc.spawnObject('mound_mite', 'tatooine', long(0), float(3570), float(63), float(-4329), float(0), float(0), float(0), float(0), 30) + mound_mite24 = stcSvc.spawnObject('mound_mite', 'tatooine', long(0), float(3580), float(63), float(-4319), float(0), float(0), float(0), float(0), 30) + mound_mite25 = stcSvc.spawnObject('mound_mite', 'tatooine', long(0), float(3555), float(63), float(-4345), float(0), float(0), float(0), float(0), 30) + mound_mite26 = stcSvc.spawnObject('mound_mite', 'tatooine', long(0), float(3565), float(63), float(-4325), float(0), float(0), float(0), float(0), 30) + + + # Legacy RockMites + + rockmite = stcSvc.spawnObject('rockmite', 'tatooine', long(0), float(3140), float(5), float(-4907), float(0), float(0), float(0), float(0), 30) + rockmite1 = stcSvc.spawnObject('rockmite', 'tatooine', long(0), float(3150), float(5), float(-4917), float(0), float(0), float(0), float(0), 30) + rockmite2 = stcSvc.spawnObject('rockmite', 'tatooine', long(0), float(3160), float(5), float(-4927), float(0), float(0), float(0), float(0), 30) + rockmite3 = stcSvc.spawnObject('rockmite', 'tatooine', long(0), float(3130), float(5), float(-4897), float(0), float(0), float(0), float(0), 30) + rockmite4 = stcSvc.spawnObject('rockmite', 'tatooine', long(0), float(3120), float(5), float(-4887), float(0), float(0), float(0), float(0), 30) + rockmite5 = stcSvc.spawnObject('rockmite', 'tatooine', long(0), float(3145), float(5), float(-4900), float(0), float(0), float(0), float(0), 30) + rockmite6 = stcSvc.spawnObject('rockmite', 'tatooine', long(0), float(3155), float(5), float(-4908), float(0), float(0), float(0), float(0), 30) + + # Legacy RockMites + rockmite2 = stcSvc.spawnObject('rockmite', 'tatooine', long(0), float(3710), float(5), float(-4652), float(0), float(0), float(0), float(0), 30) + rockmite21 = stcSvc.spawnObject('rockmite', 'tatooine', long(0), float(3724), float(5), float(-4661), float(0), float(0), float(0), float(0), 30) + rockmite22 = stcSvc.spawnObject('rockmite', 'tatooine', long(0), float(3733), float(5), float(-4659), float(0), float(0), float(0), float(0), 30) + rockmite23 = stcSvc.spawnObject('rockmite', 'tatooine', long(0), float(3747), float(5), float(-4655), float(0), float(0), float(0), float(0), 30) + rockmite24 = stcSvc.spawnObject('rockmite', 'tatooine', long(0), float(3752), float(5), float(-4645), float(0), float(0), float(0), float(0), 30) + rockmite25 = stcSvc.spawnObject('rockmite', 'tatooine', long(0), float(3761), float(5), float(-4644), float(0), float(0), float(0), float(0), 30) + rockmite26 = stcSvc.spawnObject('rockmite', 'tatooine', long(0), float(3762), float(5), float(-4654), float(0), float(0), float(0), float(0), 30) + rockmite27 = stcSvc.spawnObject('rockmite', 'tatooine', long(0), float(3732), float(5), float(-4664), float(0), float(0), float(0), float(0), 30) + rockmite28 = stcSvc.spawnObject('rockmite', 'tatooine', long(0), float(3741), float(5), float(-4663), float(0), float(0), float(0), float(0), 30) + rockmite29 = stcSvc.spawnObject('rockmite', 'tatooine', long(0), float(3752), float(5), float(-4659), float(0), float(0), float(0), float(0), 30) + rockmite210 = stcSvc.spawnObject('rockmite', 'tatooine', long(0), float(3769), float(5), float(-4650), float(0), float(0), float(0), float(0), 30) + rockmite211 = stcSvc.spawnObject('rockmite', 'tatooine', long(0), float(3778), float(5), float(-4647), float(0), float(0), float(0), float(0), 30) + rockmite212 = stcSvc.spawnObject('rockmite', 'tatooine', long(0), float(3727), float(5), float(-4647), float(0), float(0), float(0), float(0), 30) + rockmite213 = stcSvc.spawnObject('rockmite', 'tatooine', long(0), float(3742), float(5), float(-4637), float(0), float(0), float(0), float(0), 30) + rockmite214 = stcSvc.spawnObject('rockmite', 'tatooine', long(0), float(3755), float(5), float(-4635), float(0), float(0), float(0), float(0), 30) + rockmite215 = stcSvc.spawnObject('rockmite', 'tatooine', long(0), float(3771), float(5), float(-4660), float(0), float(0), float(0), float(0), 30) + rockmite216 = stcSvc.spawnObject('rockmite', 'tatooine', long(0), float(3785), float(5), float(-4657), float(0), float(0), float(0), float(0), 30) + rockmite217 = stcSvc.spawnObject('rockmite', 'tatooine', long(0), float(3774), float(5), float(-4663), float(0), float(0), float(0), float(0), 30) + rockmite218 = stcSvc.spawnObject('rockmite', 'tatooine', long(0), float(3767), float(5), float(-4672), float(0), float(0), float(0), float(0), 30) + rockmite219 = stcSvc.spawnObject('rockmite', 'tatooine', long(0), float(3754), float(5), float(-4666), float(0), float(0), float(0), float(0), 30) + rockmite220 = stcSvc.spawnObject('rockmite', 'tatooine', long(0), float(3717), float(5), float(-4633), float(0), float(0), float(0), float(0), 30) + + return \ No newline at end of file diff --git a/scripts/static_spawns/tatooine/mos_eisley_tempest_rills.py b/scripts/static_spawns/tatooine/mos_eisley_tempest_rills.py new file mode 100644 index 00000000..e135dcb6 --- /dev/null +++ b/scripts/static_spawns/tatooine/mos_eisley_tempest_rills.py @@ -0,0 +1,52 @@ +import sys +# Project SWG: MosEisley Tempest Rills: Static Spawns +# (C)2014 ProjectSWG + + + +from resources.datatables import Options +from resources.datatables import State + +def addPlanetSpawns(core, planet): + + + stcSvc = core.staticService + objSvc = core.objectService + + # Tempest rills + tempest_rill1 = stcSvc.spawnObject('tempest_rill', 'tatooine', long(0), float(3716), float(5), float(-4602), float(0), float(0), float(0), float(0), 30) + tempest_rill2 = stcSvc.spawnObject('tempest_rill', 'tatooine', long(0), float(3701), float(5), float(-4649), float(0), float(0), float(0), float(0), 30) + tempest_rill3 = stcSvc.spawnObject('tempest_rill', 'tatooine', long(0), float(3741), float(5), float(-4651), float(0), float(0), float(0), float(0), 30) + tempest_rill4 = stcSvc.spawnObject('tempest_rill', 'tatooine', long(0), float(3668), float(5), float(-4597), float(0), float(0), float(0), float(0), 30) + tempest_rill5 = stcSvc.spawnObject('tempest_rill', 'tatooine', long(0), float(3695), float(5), float(-4613), float(0), float(0), float(0), float(0), 30) + tempest_rill6 = stcSvc.spawnObject('tempest_rill', 'tatooine', long(0), float(3678), float(5), float(-4613), float(0), float(0), float(0), float(0), 30) + tempest_rill7 = stcSvc.spawnObject('tempest_rill', 'tatooine', long(0), float(3718), float(5), float(-4651), float(0), float(0), float(0), float(0), 30) + tempest_rill8 = stcSvc.spawnObject('tempest_rill', 'tatooine', long(0), float(3737), float(5), float(-4633), float(0), float(0), float(0), float(0), 30) + tempest_rill9 = stcSvc.spawnObject('tempest_rill', 'tatooine', long(0), float(3692), float(5), float(-4621), float(0), float(0), float(0), float(0), 30) + tempest_rill10 = stcSvc.spawnObject('tempest_rill', 'tatooine', long(0), float(3695), float(5), float(-4646), float(0), float(0), float(0), float(0), 30) + tempest_rill11 = stcSvc.spawnObject('tempest_rill', 'tatooine', long(0), float(3795), float(5), float(-4647), float(0), float(0), float(0), float(0), 30) + tempest_rill12 = stcSvc.spawnObject('tempest_rill', 'tatooine', long(0), float(3716), float(5), float(-4613), float(0), float(0), float(0), float(0), 30) + tempest_rill13 = stcSvc.spawnObject('tempest_rill', 'tatooine', long(0), float(3704), float(5), float(-4624), float(0), float(0), float(0), float(0), 30) + tempest_rill14 = stcSvc.spawnObject('tempest_rill', 'tatooine', long(0), float(3687), float(5), float(-4600), float(0), float(0), float(0), float(0), 30) + tempest_rill15 = stcSvc.spawnObject('tempest_rill', 'tatooine', long(0), float(3709), float(5), float(-4611), float(0), float(0), float(0), float(0), 30) + tempest_rill16 = stcSvc.spawnObject('tempest_rill', 'tatooine', long(0), float(3725), float(5), float(-4619), float(0), float(0), float(0), float(0), 30) + tempest_rill17 = stcSvc.spawnObject('tempest_rill', 'tatooine', long(0), float(3727), float(5), float(-4638), float(0), float(0), float(0), float(0), 30) + tempest_rill18 = stcSvc.spawnObject('tempest_rill', 'tatooine', long(0), float(3716), float(5), float(-4622), float(0), float(0), float(0), float(0), 30) + tempest_rill19 = stcSvc.spawnObject('tempest_rill', 'tatooine', long(0), float(3710), float(5), float(-4637), float(0), float(0), float(0), float(0), 30) + tempest_rill20 = stcSvc.spawnObject('tempest_rill', 'tatooine', long(0), float(3698), float(5), float(-4637), float(0), float(0), float(0), float(0), 30) + tempest_rill21 = stcSvc.spawnObject('tempest_rill', 'tatooine', long(0), float(3684), float(5), float(-4645), float(0), float(0), float(0), float(0), 30) + + + # Tempest rills + tempest_rill4 = stcSvc.spawnObject('tempest_rill', 'tatooine', long(0), float(3875), float(48), float(-5068), float(0), float(0), float(0), float(0), 30) + tempest_rill41 = stcSvc.spawnObject('tempest_rill', 'tatooine', long(0), float(3855), float(45), float(-5048), float(0), float(0), float(0), float(0), 30) + tempest_rill42 = stcSvc.spawnObject('tempest_rill', 'tatooine', long(0), float(3865), float(45), float(-5058), float(0), float(0), float(0), float(0), 30) + tempest_rill43 = stcSvc.spawnObject('tempest_rill', 'tatooine', long(0), float(3885), float(56), float(-5088), float(0), float(0), float(0), float(0), 30) + tempest_rill44 = stcSvc.spawnObject('tempest_rill', 'tatooine', long(0), float(3892), float(58), float(-5078), float(0), float(0), float(0), float(0), 30) + tempest_rill45 = stcSvc.spawnObject('tempest_rill', 'tatooine', long(0), float(3860), float(44), float(-5043), float(0), float(0), float(0), float(0), 30) + tempest_rill46 = stcSvc.spawnObject('tempest_rill', 'tatooine', long(0), float(3870), float(44), float(-5053), float(0), float(0), float(0), float(0), 30) + tempest_rill47 = stcSvc.spawnObject('tempest_rill', 'tatooine', long(0), float(3877), float(53), float(-5082), float(0), float(0), float(0), float(0), 30) + tempest_rill48 = stcSvc.spawnObject('tempest_rill', 'tatooine', long(0), float(3890), float(54), float(-5073), float(0), float(0), float(0), float(0), 30) + + return + diff --git a/scripts/static_spawns/tatooine/mos_eisley_tusken_soldiers.py b/scripts/static_spawns/tatooine/mos_eisley_tusken_soldiers.py new file mode 100644 index 00000000..98e25c41 --- /dev/null +++ b/scripts/static_spawns/tatooine/mos_eisley_tusken_soldiers.py @@ -0,0 +1,51 @@ +import sys +# Project SWG: Moseisley Tusken soldiers: Static Spawns +# (C)2014 ProjectSWG + + + +from resources.datatables import Options +from resources.datatables import State + +def addPlanetSpawns(core, planet): + + + stcSvc = core.staticService + objSvc = core.objectService + + # Tusken Solders + soldiers = stcSvc.spawnObject('tusken_soldier', 'tatooine', long(0), float(4168), float(8), float(-4735), float(0), float(0), float(0), float(0), 45) + soldiers1 = stcSvc.spawnObject('tusken_soldier', 'tatooine', long(0), float(4170), float(8), float(-4731), float(0), float(0), float(0), float(0), 45) + soldiers11 = stcSvc.spawnObject('tusken_soldier', 'tatooine', long(0), float(4172), float(8), float(-4727), float(0), float(0), float(0), float(0), 45) + soldiers12 = stcSvc.spawnObject('tusken_soldier', 'tatooine', long(0), float(4174), float(8), float(-4723), float(0), float(0), float(0), float(0), 45) + soldiers13 = stcSvc.spawnObject('tusken_soldier', 'tatooine', long(0), float(4176), float(8), float(-4719), float(0), float(0), float(0), float(0), 45) + soldiers14 = stcSvc.spawnObject('tusken_soldier', 'tatooine', long(0), float(4178), float(8), float(-4739), float(0), float(0), float(0), float(0), 45) + soldiers15 = stcSvc.spawnObject('tusken_soldier', 'tatooine', long(0), float(4176), float(8), float(-4743), float(0), float(0), float(0), float(0), 45) + + + soldiers2 = stcSvc.spawnObject('tusken_soldier', 'tatooine', long(0), float(4162), float(8), float(-4735), float(0), float(0), float(0), float(0), 45) + soldiers25 = stcSvc.spawnObject('tusken_soldier', 'tatooine', long(0), float(4168), float(8), float(-4739), float(0), float(0), float(0), float(0), 45) + soldiers26 = stcSvc.spawnObject('tusken_soldier', 'tatooine', long(0), float(4166), float(8), float(-4743), float(0), float(0), float(0), float(0), 45) + soldiers27 = stcSvc.spawnObject('tusken_soldier', 'tatooine', long(0), float(4164), float(8), float(-4747), float(0), float(0), float(0), float(0), 45) + soldiers28 = stcSvc.spawnObject('tusken_soldier', 'tatooine', long(0), float(4162), float(8), float(-4751), float(0), float(0), float(0), float(0), 45) + soldiers29 = stcSvc.spawnObject('tusken_soldier', 'tatooine', long(0), float(4160), float(8), float(-4756), float(0), float(0), float(0), float(0), 45) + + + soldiers3 = stcSvc.spawnObject('tusken_soldier', 'tatooine', long(0), float(4158), float(8), float(-4735), float(0), float(0), float(0), float(0), 45) + soldiers31 = stcSvc.spawnObject('tusken_soldier', 'tatooine', long(0), float(4160), float(8), float(-4731), float(0), float(0), float(0), float(0), 45) + soldiers32 = stcSvc.spawnObject('tusken_soldier', 'tatooine', long(0), float(4162), float(8), float(-4727), float(0), float(0), float(0), float(0), 45) + soldiers33 = stcSvc.spawnObject('tusken_soldier', 'tatooine', long(0), float(4164), float(8), float(-4723), float(0), float(0), float(0), float(0), 45) + soldiers38 = stcSvc.spawnObject('tusken_soldier', 'tatooine', long(0), float(4158), float(8), float(-4751), float(0), float(0), float(0), float(0), 45) + soldiers39 = stcSvc.spawnObject('tusken_soldier', 'tatooine', long(0), float(4156), float(8), float(-4756), float(0), float(0), float(0), float(0), 45) + + soldiers4 = stcSvc.spawnObject('tusken_soldier', 'tatooine', long(0), float(4154), float(8), float(-4735), float(0), float(0), float(0), float(0), 45) + soldiers41 = stcSvc.spawnObject('tusken_soldier', 'tatooine', long(0), float(4156), float(8), float(-4731), float(0), float(0), float(0), float(0), 45) + soldiers42 = stcSvc.spawnObject('tusken_soldier', 'tatooine', long(0), float(4158), float(8), float(-4727), float(0), float(0), float(0), float(0), 45) + soldiers47 = stcSvc.spawnObject('tusken_soldier', 'tatooine', long(0), float(4152), float(8), float(-4747), float(0), float(0), float(0), float(0), 45) + soldiers48 = stcSvc.spawnObject('tusken_soldier', 'tatooine', long(0), float(4156), float(8), float(-4751), float(0), float(0), float(0), float(0), 45) + soldiers49 = stcSvc.spawnObject('tusken_soldier', 'tatooine', long(0), float(4158), float(8), float(-4756), float(0), float(0), float(0), float(0), 45) + + + + return + diff --git a/scripts/static_spawns/tatooine/mos_eisley_tusken_warriors.py b/scripts/static_spawns/tatooine/mos_eisley_tusken_warriors.py new file mode 100644 index 00000000..c051b473 --- /dev/null +++ b/scripts/static_spawns/tatooine/mos_eisley_tusken_warriors.py @@ -0,0 +1,27 @@ +import sys +# Project SWG: Moseisley Tusken warriors: Static Spawns +# (C)2014 ProjectSWG + + + +from resources.datatables import Options +from resources.datatables import State + +def addPlanetSpawns(core, planet): + + + stcSvc = core.staticService + objSvc = core.objectService + + # Tusken Warriors + warrior = stcSvc.spawnObject('tusken_warrior', 'tatooine', long(0), float(4288), float(8), float(-4729), float(0), float(0), float(0), float(0), 45) + warrior1 = stcSvc.spawnObject('tusken_warrior', 'tatooine', long(0), float(4290), float(8), float(-4725), float(0), float(0), float(0), float(0), 45) + warrior2 = stcSvc.spawnObject('tusken_warrior', 'tatooine', long(0), float(4292), float(8), float(-4721), float(0), float(0), float(0), float(0), 45) + warrior3 = stcSvc.spawnObject('tusken_warrior', 'tatooine', long(0), float(4290), float(8), float(-4717), float(0), float(0), float(0), float(0), 45) + warrior4 = stcSvc.spawnObject('tusken_warrior', 'tatooine', long(0), float(4288), float(8), float(-4713), float(0), float(0), float(0), float(0), 45) + warrior5 = stcSvc.spawnObject('tusken_warrior', 'tatooine', long(0), float(4290), float(8), float(-4733), float(0), float(0), float(0), float(0), 45) + warrior6 = stcSvc.spawnObject('tusken_warrior', 'tatooine', long(0), float(4292), float(8), float(-4737), float(0), float(0), float(0), float(0), 45) + warrior8 = stcSvc.spawnObject('tusken_warrior', 'tatooine', long(0), float(4290), float(8), float(-4741), float(0), float(0), float(0), float(0), 45) + warrior9 = stcSvc.spawnObject('tusken_warrior', 'tatooine', long(0), float(4288), float(8), float(-4745), float(0), float(0), float(0), float(0), 45) + warrior0 = stcSvc.spawnObject('tusken_warrior', 'tatooine', long(0), float(4286), float(8), float(-4749), float(0), float(0), float(0), float(0), 45) + \ No newline at end of file diff --git a/scripts/static_spawns/tatooine/mos_eisley_tusken_zealot.py b/scripts/static_spawns/tatooine/mos_eisley_tusken_zealot.py new file mode 100644 index 00000000..007ebb35 --- /dev/null +++ b/scripts/static_spawns/tatooine/mos_eisley_tusken_zealot.py @@ -0,0 +1,80 @@ +import sys +# Project SWG: Tusken ZElaots: Static Spawns +# (C)2014 ProjectSWG + + + +from resources.datatables import Options +from resources.datatables import State + +def addPlanetSpawns(core, planet): + + + stcSvc = core.staticService + objSvc = core.objectService + + # Outside of Tusken camp + zealot = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(4005), float(5), float(-4846), float(0), float(0), float(0), float(0), 45) + zealot1 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(4009), float(5), float(-4851), float(0), float(0), float(0), float(0), 45) + zealot2 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(4009), float(5), float(-4852), float(0), float(0), float(0), float(0), 45) + + # Outside of Tusken camp pt2 + + zealot3 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(4051), float(5), float(-4859), float(0), float(0), float(0), float(0), 45) + zealot4 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(4050), float(5), float(-4859), float(0), float(0), float(0), float(0), 45) + zealot5 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(4050), float(5), float(-4858), float(0), float(0), float(0), float(0), 45) + + # inside camp pt1 (behind the camp) + + zealot5 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(4076), float(5), float(-4812), float(0), float(0), float(0), float(0), 45) + zealot6 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(4075), float(5), float(-4812), float(0), float(0), float(0), float(0), 45) + zealot7 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(4074), float(5), float(-4812), float(0), float(0), float(0), float(0), 45) + + # inside camp p2 (coming from starport) + + zealot8 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(3991), float(5), float(-4794), float(0), float(0), float(0), float(0), 45) + zealot9 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(3995), float(5), float(-4788), float(0), float(0), float(0), float(0), 45) + zealot10 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(3993), float(5), float(-4794), float(0), float(0), float(0), float(0), 45) + zealot11 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(3992), float(5), float(-4812), float(0), float(0), float(0), float(0), 45) + zealot12 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(3997), float(5), float(-4812), float(0), float(0), float(0), float(0), 45) + zealot12 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(4010), float(5), float(-4811), float(0), float(0), float(0), float(0), 45) + zealot13 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(4014), float(5), float(-4811), float(0), float(0), float(0), float(0), 45) + zealot14 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(4010), float(5), float(-4795), float(0), float(0), float(0), float(0), 45) + zealot15 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(4013), float(5), float(-4793), float(0), float(0), float(0), float(0), 45) + zealot16 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(4005), float(5), float(-4783), float(0), float(0), float(0), float(0), 45) + + # inside camp pt3 (2nd from starport + + zealot17 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(4009), float(5), float(-4758), float(0), float(0), float(0), float(0), 45) + zealot18 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(4010), float(5), float(-4759), float(0), float(0), float(0), float(0), 45) + zealot19 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(4028), float(5), float(-4767), float(0), float(0), float(0), float(0), 45) + zealot20 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(4020), float(5), float(-4766), float(0), float(0), float(0), float(0), 45) + zealot21 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(4038), float(5), float(-4736), float(0), float(0), float(0), float(0), 45) + zealot22 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(4033), float(5), float(-4743), float(0), float(0), float(0), float(0), 45) + zealot23 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(4048), float(5), float(-4767), float(0), float(0), float(0), float(0), 45) + zealot24 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(4039), float(5), float(-4767), float(0), float(0), float(0), float(0), 45) + zealot25 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(4056), float(5), float(-4787), float(0), float(0), float(0), float(0), 45) + zealot26 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(4047), float(5), float(-4787), float(0), float(0), float(0), float(0), 45) + zealot27 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(4044), float(5), float(-4807), float(0), float(0), float(0), float(0), 45) + zealot28 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(4049), float(5), float(-4807), float(0), float(0), float(0), float(0), 45) + zealot29 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(4065), float(5), float(-4774), float(0), float(0), float(0), float(0), 45) + zealot30 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(4063), float(5), float(-4767), float(0), float(0), float(0), float(0), 45) + zealot31 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(4074), float(5), float(-4755), float(0), float(0), float(0), float(0), 45) + zealot32 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(4065), float(5), float(-4755), float(0), float(0), float(0), float(0), 45) + zealot33 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(4065), float(5), float(-4743), float(0), float(0), float(0), float(0), 45) + zealot34 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(4070), float(5), float(-4743), float(0), float(0), float(0), float(0), 45) + zealot35 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(4094), float(5), float(-4747), float(0), float(0), float(0), float(0), 45) + zealot36 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(4102), float(5), float(-4753), float(0), float(0), float(0), float(0), 45) + zealot37 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(4093), float(5), float(-4771), float(0), float(0), float(0), float(0), 45) + zealot38 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(4080), float(5), float(-4766), float(0), float(0), float(0), float(0), 45) + zealot39 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(4083), float(5), float(-4787), float(0), float(0), float(0), float(0), 45) + zealot40 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(4094), float(5), float(-4783), float(0), float(0), float(0), float(0), 45) + zealot41 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(4084), float(5), float(-4801), float(0), float(0), float(0), float(0), 45) + + # inside camp pt4 terrace of the building + + zealot42 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(4081), float(8), float(-4752), float(0), float(0), float(0), float(0), 45) + zealot43 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(4078), float(8), float(-4759), float(0), float(0), float(0), float(0), 45) + zealot44 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(4086), float(8), float(-4762), float(0), float(0), float(0), float(0), 45) + + return diff --git a/scripts/static_spawns/tatooine/mos_eisley_womprats.py b/scripts/static_spawns/tatooine/mos_eisley_womprats.py new file mode 100644 index 00000000..ba10079a --- /dev/null +++ b/scripts/static_spawns/tatooine/mos_eisley_womprats.py @@ -0,0 +1,68 @@ +import sys +# Project SWG: MosEisley Rat Spawn: Static Spawns +# (C)2014 ProjectSWG + + + +from resources.datatables import Options +from resources.datatables import State + +def addPlanetSpawns(core, planet): + + + stcSvc = core.staticService + objSvc = core.objectService + + + # City Sewer Swamprats + city_sewer = stcSvc.spawnObject('city_sewer_swamprat', 'tatooine', long(0), float(3216), float(8), float(-4465), float(0), float(0), float(0), float(0), 30) + city_sewer1 = stcSvc.spawnObject('city_sewer_swamprat', 'tatooine', long(0), float(3212), float(8), float(-4465), float(0), float(0), float(0), float(0), 30) + city_sewer2 = stcSvc.spawnObject('city_sewer_swamprat', 'tatooine', long(0), float(3208), float(8), float(-4467), float(0), float(0), float(0), float(0), 30) + city_sewer3 = stcSvc.spawnObject('city_sewer_swamprat', 'tatooine', long(0), float(3218), float(8), float(-4463), float(0), float(0), float(0), float(0), 30) + city_sewer4 = stcSvc.spawnObject('city_sewer_swamprat', 'tatooine', long(0), float(3220), float(8), float(-4462), float(0), float(0), float(0), float(0), 30) + city_sewer5 = stcSvc.spawnObject('city_sewer_swamprat', 'tatooine', long(0), float(3224), float(8), float(-4469), float(0), float(0), float(0), float(0), 30) + city_sewer6 = stcSvc.spawnObject('city_sewer_swamprat', 'tatooine', long(0), float(3218), float(8), float(-4467), float(0), float(0), float(0), float(0), 30) + city_sewer7 = stcSvc.spawnObject('city_sewer_swamprat', 'tatooine', long(0), float(3216), float(8), float(-4458), float(0), float(0), float(0), float(0), 30) + city_sewer8 = stcSvc.spawnObject('city_sewer_swamprat', 'tatooine', long(0), float(3207), float(8), float(-4457), float(0), float(0), float(0), float(0), 30) + city_sewer9 = stcSvc.spawnObject('city_sewer_swamprat', 'tatooine', long(0), float(3211), float(8), float(-4472), float(0), float(0), float(0), float(0), 30) + city_sewer10 = stcSvc.spawnObject('city_sewer_swamprat', 'tatooine', long(0), float(3208), float(8), float(-4474), float(0), float(0), float(0), float(0), 30) + + + # Sickly Womprats + sickly_womprat = stcSvc.spawnObject('sickly_womprat', 'tatooine', long(0), float(3115), float(9), float(-4758), float(0), float(0), float(0), float(0), 30) + sickly_womprat1 = stcSvc.spawnObject('sickly_womprat', 'tatooine', long(0), float(3111), float(9), float(-4758), float(0), float(0), float(0), float(0), 30) + sickly_womprat2 = stcSvc.spawnObject('sickly_womprat', 'tatooine', long(0), float(3103), float(9), float(-4758), float(0), float(0), float(0), float(0), 30) + sickly_womprat3 = stcSvc.spawnObject('sickly_womprat', 'tatooine', long(0), float(3115), float(9), float(-4754), float(0), float(0), float(0), float(0), 30) + sickly_womprat4 = stcSvc.spawnObject('sickly_womprat', 'tatooine', long(0), float(3115), float(9), float(-4750), float(0), float(0), float(0), float(0), 30) + sickly_womprat5 = stcSvc.spawnObject('sickly_womprat', 'tatooine', long(0), float(3117), float(9), float(-4760), float(0), float(0), float(0), float(0), 30) + sickly_womprat6 = stcSvc.spawnObject('sickly_womprat', 'tatooine', long(0), float(3121), float(9), float(-4766), float(0), float(0), float(0), float(0), 30) + sickly_womprat7 = stcSvc.spawnObject('sickly_womprat', 'tatooine', long(0), float(3124), float(9), float(-4756), float(0), float(0), float(0), float(0), 30) + sickly_womprat8 = stcSvc.spawnObject('sickly_womprat', 'tatooine', long(0), float(3119), float(9), float(-4750), float(0), float(0), float(0), float(0), 30) + sickly_womprat9 = stcSvc.spawnObject('sickly_womprat', 'tatooine', long(0), float(3122), float(9), float(-4754), float(0), float(0), float(0), float(0), 30) + sickly_womprat10 = stcSvc.spawnObject('sickly_womprat', 'tatooine', long(0), float(3104), float(9), float(-4762), float(0), float(0), float(0), float(0), 30) + + # Normal Womprats + womprat = stcSvc.spawnObject('womprat', 'tatooine', long(0), float(3587), float(56), float(-4354), float(0), float(0), float(0), float(0), 30) + womprat1 = stcSvc.spawnObject('womprat', 'tatooine', long(0), float(3583), float(56), float(-4354), float(0), float(0), float(0), float(0), 30) + womprat2 = stcSvc.spawnObject('womprat', 'tatooine', long(0), float(3579), float(56), float(-4354), float(0), float(0), float(0), float(0), 30) + womprat3 = stcSvc.spawnObject('womprat', 'tatooine', long(0), float(3587), float(56), float(-4350), float(0), float(0), float(0), float(0), 30) + womprat4 = stcSvc.spawnObject('womprat', 'tatooine', long(0), float(3587), float(56), float(-4348), float(0), float(0), float(0), float(0), 30) + womprat5 = stcSvc.spawnObject('womprat', 'tatooine', long(0), float(3587), float(56), float(-4358), float(0), float(0), float(0), float(0), 30) + womprat6 = stcSvc.spawnObject('womprat', 'tatooine', long(0), float(3590), float(56), float(-4360), float(0), float(0), float(0), float(0), 30) + womprat7 = stcSvc.spawnObject('womprat', 'tatooine', long(0), float(3594), float(56), float(-4364), float(0), float(0), float(0), float(0), 30) + womprat8 = stcSvc.spawnObject('womprat', 'tatooine', long(0), float(3590), float(56), float(-4372), float(0), float(0), float(0), float(0), 30) + womprat9 = stcSvc.spawnObject('womprat', 'tatooine', long(0), float(3592), float(56), float(-4376), float(0), float(0), float(0), float(0), 30) + womprat10 = stcSvc.spawnObject('womprat', 'tatooine', long(0), float(3580), float(56), float(-4350), float(0), float(0), float(0), float(0), 30) + + womprat2 = stcSvc.spawnObject('womprat', 'tatooine', long(0), float(3841), float(49), float(-5072), float(0), float(0), float(0), float(0), 30) + womprat21 = stcSvc.spawnObject('womprat', 'tatooine', long(0), float(3832), float(49), float(-5072), float(0), float(0), float(0), float(0), 30) + womprat22 = stcSvc.spawnObject('womprat', 'tatooine', long(0), float(3823), float(49), float(-5072), float(0), float(0), float(0), float(0), 30) + womprat23 = stcSvc.spawnObject('womprat', 'tatooine', long(0), float(3841), float(49), float(-5068), float(0), float(0), float(0), float(0), 30) + womprat24 = stcSvc.spawnObject('womprat', 'tatooine', long(0), float(3841), float(49), float(-5060), float(0), float(0), float(0), float(0), 30) + womprat25 = stcSvc.spawnObject('womprat', 'tatooine', long(0), float(3841), float(49), float(-5056), float(0), float(0), float(0), float(0), 30) + womprat26 = stcSvc.spawnObject('womprat', 'tatooine', long(0), float(3839), float(49), float(-5082), float(0), float(0), float(0), float(0), 30) + womprat23 = stcSvc.spawnObject('womprat', 'tatooine', long(0), float(3836), float(49), float(-5086), float(0), float(0), float(0), float(0), 30) + womprat24 = stcSvc.spawnObject('womprat', 'tatooine', long(0), float(3837), float(49), float(-5090), float(0), float(0), float(0), float(0), 30) + womprat25 = stcSvc.spawnObject('womprat', 'tatooine', long(0), float(3832), float(49), float(-5061), float(0), float(0), float(0), float(0), 30) + womprat26 = stcSvc.spawnObject('womprat', 'tatooine', long(0), float(3841), float(49), float(-5069), float(0), float(0), float(0), float(0), 30) + return diff --git a/scripts/static_spawns/tatooine/mos_eisley_worrts.py b/scripts/static_spawns/tatooine/mos_eisley_worrts.py new file mode 100644 index 00000000..eff360a0 --- /dev/null +++ b/scripts/static_spawns/tatooine/mos_eisley_worrts.py @@ -0,0 +1,40 @@ +import sys +# Project SWG: MosEisley Worrts: Static Spawns +# (C)2014 ProjectSWG + + + +from resources.datatables import Options +from resources.datatables import State + +def addPlanetSpawns(core, planet): + + + stcSvc = core.staticService + objSvc = core.objectService + + # Tame Worrts + tame_worrt1 = stcSvc.spawnObject('tame_worrt', 'tatooine', long(0), float(3153), float(4), float(-4945), float(0), float(0), float(0), float(0), 30) + tame_worrt11 = stcSvc.spawnObject('tame_worrt', 'tatooine', long(0), float(3143), float(4), float(-4935), float(0), float(0), float(0), float(0), 30) + tame_worrt12 = stcSvc.spawnObject('tame_worrt', 'tatooine', long(0), float(3123), float(4), float(-4925), float(0), float(0), float(0), float(0), 30) + tame_worrt13 = stcSvc.spawnObject('tame_worrt', 'tatooine', long(0), float(3163), float(4), float(-4955), float(0), float(0), float(0), float(0), 30) + tame_worrt14 = stcSvc.spawnObject('tame_worrt', 'tatooine', long(0), float(3173), float(4), float(-4965), float(0), float(0), float(0), float(0), 30) + tame_worrt15 = stcSvc.spawnObject('tame_worrt', 'tatooine', long(0), float(3145), float(4), float(-4950), float(0), float(0), float(0), float(0), 30) + tame_worrt16 = stcSvc.spawnObject('tame_worrt', 'tatooine', long(0), float(3135), float(4), float(-4960), float(0), float(0), float(0), float(0), 30) + tame_worrt17 = stcSvc.spawnObject('tame_worrt', 'tatooine', long(0), float(3165), float(4), float(-4950), float(0), float(0), float(0), float(0), 30) + tame_worrt18 = stcSvc.spawnObject('tame_worrt', 'tatooine', long(0), float(3170), float(4), float(-4930), float(0), float(0), float(0), float(0), 30) + tame_worrt19 = stcSvc.spawnObject('tame_worrt', 'tatooine', long(0), float(3160), float(4), float(-4940), float(0), float(0), float(0), float(0), 30) + + # Tame Worrts + tame_worrt2 = stcSvc.spawnObject('tame_worrt', 'tatooine', long(0), float(3125), float(4), float(-4726), float(0), float(0), float(0), float(0), 30) + tame_worrt21 = stcSvc.spawnObject('tame_worrt', 'tatooine', long(0), float(3115), float(4), float(-4716), float(0), float(0), float(0), float(0), 30) + tame_worrt22 = stcSvc.spawnObject('tame_worrt', 'tatooine', long(0), float(3105), float(4), float(-4706), float(0), float(0), float(0), float(0), 30) + tame_worrt23 = stcSvc.spawnObject('tame_worrt', 'tatooine', long(0), float(3135), float(4), float(-4736), float(0), float(0), float(0), float(0), 30) + tame_worrt24 = stcSvc.spawnObject('tame_worrt', 'tatooine', long(0), float(3145), float(4), float(-4746), float(0), float(0), float(0), float(0), 30) + tame_worrt25 = stcSvc.spawnObject('tame_worrt', 'tatooine', long(0), float(3120), float(4), float(-4721), float(0), float(0), float(0), float(0), 30) + tame_worrt26 = stcSvc.spawnObject('tame_worrt', 'tatooine', long(0), float(3110), float(4), float(-4731), float(0), float(0), float(0), float(0), 30) + tame_worrt27 = stcSvc.spawnObject('tame_worrt', 'tatooine', long(0), float(3130), float(4), float(-4741), float(0), float(0), float(0), float(0), 30) + tame_worrt28 = stcSvc.spawnObject('tame_worrt', 'tatooine', long(0), float(3140), float(4), float(-4711), float(0), float(0), float(0), float(0), 30) + tame_worrt29 = stcSvc.spawnObject('tame_worrt', 'tatooine', long(0), float(3130), float(4), float(-4726), float(0), float(0), float(0), float(0), 30) + + return \ No newline at end of file diff --git a/scripts/static_spawns/tatooine/mos_entha.py b/scripts/static_spawns/tatooine/mos_entha.py new file mode 100644 index 00000000..e99d36ea --- /dev/null +++ b/scripts/static_spawns/tatooine/mos_entha.py @@ -0,0 +1,25 @@ +import sys +# Project SWG: Mos Entha: Static Spawns +# (C)2014 ProjectSWG + + + +from resources.datatables import Options +from resources.datatables import State + +def addPlanetSpawns(core, planet): + + + stcSvc = core.staticService + objSvc = core.objectService + + # TODO Check all NPCs for personalized scripting, change format. + + #Outside + ankwee = stcSvc.spawnObject('object/mobile/shared_dressed_tatooine_entha_ankwee.iff', 'tatooine', long(0), float(1351), float(5.0), float(3108), float(0.42), float(0.91)) + ankwee.setCustomName2('An\'kwee') + ankwee.setOptionsBitmask(256) + + + return + diff --git a/scripts/static_spawns/tatooine/mos_espa.py b/scripts/static_spawns/tatooine/mos_espa.py new file mode 100644 index 00000000..6cb589b3 --- /dev/null +++ b/scripts/static_spawns/tatooine/mos_espa.py @@ -0,0 +1,69 @@ +import sys +# Project SWG: Mos Espa: Static Spawns +# (C)2014 ProjectSWG + + + +from resources.datatables import Options +from resources.datatables import State + +def addPlanetSpawns(core, planet): + + + stcSvc = core.staticService + objSvc = core.objectService + + # TODO Check all NPCs for personalized scripting, change format. + + # Cantina Interior + dalaSocuna = stcSvc.spawnObject('object/mobile/shared_space_rebel_tier1_tatooine_socuna.iff', 'tatooine', long(1256068), float(-28.4), float(-0.5), float(9.4), float(0.33), float(0.94)) + dalaSocuna.setCustomName2('Commander Da\'la Socuna') + dalaSocuna.setOptionsBitmask(256) + + #Watto's Shop ****TODO: Get Proper cells for Watto's Shop once Buildout structures are spawning as intended again. + + watto = stcSvc.spawnObject('object/mobile/shared_watto.iff', 'tatooine', long(26670), float(4.7), float(-0.5), float(2.4), float(0.70), float(-0.71)) + watto.setCustomName2('Watto') + watto.setOptionsBitmask(256) + + #Exterior Uninteractable NPCs + commoner18 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_naboo_zabrak_female_02.iff', 'tatooine', long(0), float(-2915.3), float(5.0), float(2148.5), float(0), float(0)) + commoner18.setCustomName2('a Commoner') + commoner18.setOptionsBitmask(256) + + jawa10 = stcSvc.spawnObject('object/mobile/shared_jawa.iff', 'tatooine', long(0), float(-2966.3), float(5.0), float(2196.9), float(0), float(0)) + jawa10.setCustomName2('a Jawa') + jawa10.setOptionsBitmask(256) + + commoner19 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_naboo_human_male_06.iff', 'tatooine', long(0), float(-2960.4), float(5.0), float(2271.3), float(0), float(0)) + commoner19.setCustomName2('a Commoner') + commoner19.setOptionsBitmask(256) + + commoner20 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_tatooine_devaronian_male_01.iff', 'tatooine', long(0), float(-2934.3), float(5.0), float(2298.9), float(0.71), float(0.71)) + commoner20.setCustomName2('a Commoner') + commoner20.setOptionsBitmask(256) + + commoner21 = stcSvc.spawnObject('object/mobile/shared_dressed_noble_human_female_01.iff', 'tatooine', long(0), float(-2897.7), float(5.0), float(2345.4), float(0.71), float(0.71)) + commoner21.setCustomName2('a Commoner') + commoner21.setOptionsBitmask(256) + + commoner22 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_fat_twilek_male_01.iff', 'tatooine', long(0), float(-2763.8), float(5.0), float(2305.2), float(0.71), float(0.71)) + commoner22.setCustomName2('a Commoner') + commoner22.setOptionsBitmask(256) + + jawa11 = stcSvc.spawnObject('object/mobile/shared_jawa.iff', 'tatooine', long(0), float(-2936.8), float(5.0), float(2078.4), float(0.95105), float(0.3090)) + jawa11.setCustomName2('a Jawa') + jawa11.setOptionsBitmask(256) + + businessman4 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_tatooine_trandoshan_male_02.iff', 'tatooine', long(0), float(-2914.2), float(5.0), float(2022.4), float(0), float(0)) + businessman4.setCustomName2('a Businessman') + businessman4.setOptionsBitmask(256) + + commoner23 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_naboo_moncal_male_01.iff', 'tatooine', long(0), float(-2904.1), float(5.0), float(1965.3), float(0.71), float(0.71)) + commoner23.setCustomName2('a Commoner') + commoner23.setOptionsBitmask(256) + + + + return + diff --git a/scripts/static_spawns/tatooine/tatooine.py b/scripts/static_spawns/tatooine/tatooine.py new file mode 100644 index 00000000..9a45d308 --- /dev/null +++ b/scripts/static_spawns/tatooine/tatooine.py @@ -0,0 +1,21 @@ +import sys +from resources.datatables import Options +from resources.datatables import State + +def addPlanetSpawns(core, planet): +######################################################## +# DO NOT ADD ANYTHING ELSE TO THIS SCRIPT, PLEASE USE THE +# SUBFOLDERS FOR EACH PLANET AND CREATE NEW SCRIPTS FOR +# EACH AREA OF A PLANET. - LEVARRIS +######################################################## + stcSvc = core.staticService + # Blue Frog: Uncomment only when needed for testing. + stcSvc.spawnObject('object/tangible/terminal/shared_terminal_character_builder.iff', 'tatooine', long(0), float(3525), float(4), float(-4801), float(0.70), float(0.71)) + +######################################################## +# DO NOT ADD ANYTHING ELSE TO THIS SCRIPT, PLEASE USE THE +# SUBFOLDERS FOR EACH PLANET AND CREATE NEW SCRIPTS FOR +# EACH AREA OF A PLANET. - LEVARRIS +######################################################## + return + diff --git a/scripts/static_spawns/yavin4/placeholder.txt b/scripts/static_spawns/yavin4/placeholder.txt new file mode 100644 index 00000000..e69de29b diff --git a/src/main/NGECore.java b/src/main/NGECore.java index c99d4912..cb351655 100644 --- a/src/main/NGECore.java +++ b/src/main/NGECore.java @@ -21,6 +21,7 @@ ******************************************************************************/ package main; +import java.io.File; import java.io.IOException; import java.sql.PreparedStatement; import java.sql.SQLException; @@ -45,9 +46,13 @@ import com.sleepycat.persist.EntityCursor; import protocol.swg.chat.ChatSystemMessage; import net.engio.mbassy.bus.config.BusConfiguration; +import resources.common.BountyListItem; import resources.common.RadialOptions; import resources.common.ThreadMonitor; import resources.objects.creature.CreatureObject; +import resources.objects.guild.GuildObject; +import resources.objects.resource.GalacticResource; +import resources.objects.resource.ResourceRoot; import services.AttributeService; import services.BuffService; import services.CharacterService; @@ -71,18 +76,23 @@ import services.SurveyService; import services.TerrainService; import services.WeatherService; import services.ai.AIService; +import services.bazaar.AuctionItem; import services.bazaar.BazaarService; +import services.chat.ChatRoom; import services.chat.ChatService; +import services.chat.Mail; import services.collections.CollectionService; import services.combat.CombatService; import services.command.CombatCommand; import services.command.CommandService; import services.gcw.FactionService; import services.gcw.GCWService; -import services.guild.GuildService; +import services.GuildService; import services.LoginService; import services.map.MapService; import services.mission.MissionService; +import services.object.DuplicateId; +import services.object.ObjectId; import services.object.ObjectService; import services.object.UpdateService; import services.pet.MountService; @@ -110,6 +120,7 @@ import engine.resources.config.Config; import engine.resources.config.DefaultConfig; import engine.resources.container.Traverser; import engine.resources.database.DatabaseConnection; +import engine.resources.database.ODBCursor; import engine.resources.database.ObjectDatabase; import engine.resources.objects.SWGObject; import engine.resources.scene.Point3D; @@ -199,7 +210,6 @@ public class NGECore { public InteractiveJythonAcceptor jythonAcceptor; private InteractiveJythonServer jythonServer; - private ObjectDatabase creatureODB; private ObjectDatabase mailODB; private ObjectDatabase guildODB; private ObjectDatabase objectIdODB; @@ -208,17 +218,14 @@ public class NGECore { private BusConfiguration eventBusConfig = BusConfiguration.Default(1, new ThreadPoolExecutor(1, 4, 1, TimeUnit.MINUTES, new LinkedBlockingQueue())); - private ObjectDatabase buildingODB; private ObjectDatabase auctionODB; private ObjectDatabase resourcesODB; private ObjectDatabase resourceRootsODB; private ObjectDatabase resourceHistoryODB; + private ObjectDatabase swgObjectODB; + private ObjectDatabase bountiesODB; public static boolean PACKET_DEBUG = false; - - - - public NGECore() { @@ -250,6 +257,21 @@ public class NGECore { options.setFilePath("options.cfg"); boolean optionsConfigLoaded = options.loadConfigFile(); + if (optionsConfigLoaded && options.getInt("CLEAN.ODB.FOLDERS") > 0) { + File baseFolder = new File("./odb"); + + if (baseFolder.isDirectory()) { + for (File odbFolder : baseFolder.listFiles()) { + if (odbFolder.isDirectory()) { + for (File file : odbFolder.listFiles()) { + if (!file.isDirectory() && !file.getName().equals("placeholder.txt")) { file.delete(); } + } + } + } + } + System.out.println("Cleaned ODB Folders."); + } + // Database databaseConnection = new DatabaseConnection(); databaseConnection.connect(config.getString("DB.URL"), config.getString("DB.NAME"), config.getString("DB.USER"), config.getString("DB.PASS"), "postgresql"); @@ -263,17 +285,17 @@ public class NGECore { } setGalaxyStatus(1); - creatureODB = new ObjectDatabase("creature", true, false, true); - buildingODB = new ObjectDatabase("building", true, false, true); - mailODB = new ObjectDatabase("mails", true, false, true); - guildODB = new ObjectDatabase("guild", true, false, true); - objectIdODB = new ObjectDatabase("oids", true, false, false); - duplicateIdODB = new ObjectDatabase("doids", true, false, true); - chatRoomODB = new ObjectDatabase("chatRooms", true, false, true); - resourcesODB = new ObjectDatabase("resources", true, false, true); - resourceRootsODB = new ObjectDatabase("resourceroots", true, false, true); - resourceHistoryODB = new ObjectDatabase("resourcehistory", true, false, true); - auctionODB = new ObjectDatabase("auction", true, false, true); + 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); + objectIdODB = new ObjectDatabase("oids", true, true, true, ObjectId.class); + duplicateIdODB = new ObjectDatabase("doids", true, true, true, DuplicateId.class); + chatRoomODB = new ObjectDatabase("chatRooms", true, true, true, ChatRoom.class); + resourcesODB = new ObjectDatabase("resources", true, true, true, GalacticResource.class); + resourceRootsODB = new ObjectDatabase("resourceroots", true, true, true, ResourceRoot.class); + resourceHistoryODB = new ObjectDatabase("resourcehistory", true, true, true, GalacticResource.class); + auctionODB = new ObjectDatabase("auction", true, true, true, AuctionItem.class); + bountiesODB = new ObjectDatabase("bounties", true, true, true, BountyListItem.class); // Services loginService = new LoginService(this); @@ -308,6 +330,7 @@ public class NGECore { harvesterService = new HarvesterService(this); mountService = new MountService(this); playerCityService = new PlayerCityService(this); + staticService = new StaticService(this); if (config.keyExists("JYTHONCONSOLE.PORT")) { int jythonPort = config.getInt("JYTHONCONSOLE.PORT"); @@ -363,7 +386,9 @@ public class NGECore { zoneDispatch.addService(bazaarService); zoneDispatch.addService(lootService); zoneDispatch.addService(mountService); + zoneDispatch.addService(housingService); zoneDispatch.addService(playerCityService); + zoneDispatch.addService(staticService); if (optionsConfigLoaded && options.getInt("LOAD.RESOURCE.SYSTEM") == 1) { zoneDispatch.addService(surveyService); @@ -372,7 +397,7 @@ public class NGECore { zoneServer = new MINAServer(zoneDispatch, config.getInt("ZONE.PORT")); zoneServer.start(); - staticService = new StaticService(this); + //Start terrainList // Original Planets terrainService.addPlanet(1, "tatooine", "terrain/tatooine.trn", true); @@ -438,7 +463,6 @@ public class NGECore { travelService.loadTravelPoints(); simulationService = new SimulationService(this); - objectService.loadBuildings(); if (optionsConfigLoaded && options.getInt("LOAD.RESOURCE.SYSTEM") > 0) { resourceService.loadResourceRoots(); @@ -446,16 +470,15 @@ public class NGECore { } terrainService.loadSnapShotObjects(); - objectService.loadServerTemplates(); + objectService.loadServerTemplates(); + objectService.loadBuildings(); + harvesterService.loadHarvesters(); + simulationService.insertSnapShotObjects(); simulationService.insertPersistentBuildings(); // Zone services that need to be loaded after the above zoneDispatch.addService(simulationService); - - // Static Spawns - staticService.spawnStatics(); - guildService = new GuildService(this); zoneDispatch.addService(guildService); @@ -473,16 +496,17 @@ public class NGECore { instanceService = new InstanceService(this); zoneDispatch.addService(instanceService); - weatherService = new WeatherService(this); weatherService.loadPlanetSettings(); spawnService.loadMobileTemplates(); spawnService.loadLairTemplates(); spawnService.loadLairGroups(); + spawnService.loadDynamicGroups();; spawnService.loadSpawnAreas(); - housingService.loadHousingTemplates(); + staticService.spawnStatics(); + equipmentService.loadBonusSets(); retroService.run(); @@ -495,24 +519,21 @@ public class NGECore { } private void cleanupCreatureODB() { - EntityCursor cursor = creatureODB.getCursor(Long.class, CreatureObject.class); + ODBCursor cursor = swgObjectODB.getCursor(); - Iterator it = cursor.iterator(); List deletedObjects = new ArrayList(); - while(it.hasNext()) { - CreatureObject creature = it.next(); - if(!characterService.playerExists(creature.getObjectID())) - deletedObjects.add(creature); + while(cursor.hasNext()) { + SWGObject creature = (SWGObject) cursor.next(); + if(!characterService.playerExists(creature.getObjectID()) && creature instanceof CreatureObject) + deletedObjects.add((CreatureObject) creature); } - cursor.close(); - Transaction txn = creatureODB.getEnvironment().beginTransaction(null, null); for(CreatureObject creature : deletedObjects) { - creatureODB.delete(creature.getObjectID(), Long.class, CreatureObject.class, txn); + swgObjectODB.remove(creature.getObjectID()); } - txn.commitSync(); + System.out.println("Deleted " + deletedObjects.size() + " creatures."); } @@ -598,8 +619,8 @@ public class NGECore { return databaseConnection2; } - public ObjectDatabase getCreatureODB() { - return creatureODB; + public ObjectDatabase getSWGObjectODB() { + return swgObjectODB; } public ObjectDatabase getMailODB() { @@ -609,11 +630,7 @@ public class NGECore { public ObjectDatabase getGuildODB() { return guildODB; } - - public ObjectDatabase getBuildingODB() { - return buildingODB; - } - + public ObjectDatabase getObjectIdODB() { return objectIdODB; } @@ -626,6 +643,10 @@ public class NGECore { return chatRoomODB; } + public ObjectDatabase getBountiesODB() { + return bountiesODB; + } + public ObjectDatabase getResourcesODB() { return resourcesODB; } @@ -738,6 +759,19 @@ public class NGECore { return System.currentTimeMillis() - galacticTime; } + public void closeODBs() { + swgObjectODB.close(); + mailODB.close(); + guildODB.close(); + chatRoomODB.close(); + resourcesODB.close(); + resourceRootsODB.close(); + resourceHistoryODB.close(); + objectIdODB.close(); + duplicateIdODB.close(); + auctionODB.close(); + } + } diff --git a/src/protocol/swg/CharacterSheetResponseMessage.java b/src/protocol/swg/CharacterSheetResponseMessage.java index 70e14124..bdb6531d 100644 --- a/src/protocol/swg/CharacterSheetResponseMessage.java +++ b/src/protocol/swg/CharacterSheetResponseMessage.java @@ -49,11 +49,11 @@ public class CharacterSheetResponseMessage extends SWGMessage { public IoBuffer serialize() { CreatureObject creature = (CreatureObject) player.getContainer(); - if (creature != null) { + if (creature != null && player != null) { SWGObject desCloner = null; - if (creature.getAttachment("preDesignatedCloner") != null) - desCloner = NGECore.getInstance().objectService.getObject((long) creature.getAttachment("preDesignatedCloner")); + if (player.getBindLocation() != 0) + desCloner = NGECore.getInstance().objectService.getObject(player.getBindLocation()); String clonerPlanet = ""; String spouse = ""; diff --git a/src/protocol/swg/CommPlayerMessage.java b/src/protocol/swg/CommPlayerMessage.java index 5d1274c8..9acde60c 100644 --- a/src/protocol/swg/CommPlayerMessage.java +++ b/src/protocol/swg/CommPlayerMessage.java @@ -25,15 +25,16 @@ import java.nio.ByteOrder; import org.apache.mina.core.buffer.IoBuffer; -import resources.common.Console; +import engine.resources.common.CRC; import resources.common.OutOfBand; -import resources.common.StringUtilities; public class CommPlayerMessage extends SWGMessage { private long objectId; + private String model; private OutOfBand outOfBand; - + private int time; + public CommPlayerMessage(long objectId, OutOfBand outOfBand) { this.objectId = objectId; this.outOfBand = outOfBand; @@ -46,28 +47,35 @@ public class CommPlayerMessage extends SWGMessage { @Override public IoBuffer serialize() { - IoBuffer buffer = IoBuffer.allocate(200).order(ByteOrder.LITTLE_ENDIAN); + IoBuffer buffer = IoBuffer.allocate(50).order(ByteOrder.LITTLE_ENDIAN); + buffer.setAutoExpand(true); + buffer.putShort((short) 2); buffer.putInt(0x594AD258); buffer.put((byte) 0); // aurebesh borders on comm, space version? Can cause crashes buffer.putLong(objectId); - /* Seen numbers: - * 52 (Starting Station Comms) - * 54 (Tansarii Comms) - * 57 (Supply Drops) - * 58 (Faction Covert->Overt) - * 68 (Imperial stop) - */ buffer.put(outOfBand.serialize().array()); // Officer Supply Drop: 0x3E894347 // Rebel Faction Dude: 0x528CB3D7 - buffer.putInt(0x528CB3D7); // model crc, can be anything w/o crashing + if (model == null) + buffer.putInt(0x3E894347); + else + buffer.putInt(CRC.StringtoCRC(model)); buffer.putInt(0); // sound buffer.putShort((short) 0); // unk - buffer.putShort((short) 16576); // comm display time, unsure on how it's calculated (probably milliseconds) + if (time == 0) + buffer.putShort((short) 16576); + else + buffer.putShort((short) time); buffer.flip(); - Console.println("CPM: " + StringUtilities.bytesToHex(buffer.array())); return buffer; } + + public void setModel(String model) { + this.model = model; + } + public void setTime(int time) { + this.time = time; + } } diff --git a/src/protocol/swg/CreateClientPathMessage.java b/src/protocol/swg/CreateClientPathMessage.java index 37a6d571..930f9eb2 100644 --- a/src/protocol/swg/CreateClientPathMessage.java +++ b/src/protocol/swg/CreateClientPathMessage.java @@ -26,8 +26,8 @@ import java.util.List; import org.apache.mina.core.buffer.IoBuffer; -import resources.common.StringUtilities; import engine.resources.common.CRC; +import engine.resources.common.StringUtilities; import engine.resources.scene.Point3D; public class CreateClientPathMessage extends SWGMessage { diff --git a/src/protocol/swg/EnterStructurePlacementModeMessage.java b/src/protocol/swg/EnterStructurePlacementModeMessage.java index 3f12cf0a..b46ed3db 100644 --- a/src/protocol/swg/EnterStructurePlacementModeMessage.java +++ b/src/protocol/swg/EnterStructurePlacementModeMessage.java @@ -39,6 +39,7 @@ public class EnterStructurePlacementModeMessage extends SWGMessage { public EnterStructurePlacementModeMessage(SWGObject deed, String structureTemplate) { this.deed = deed; this.structureTemplate = structureTemplate; + deed.setAttachment("structureTemplate", structureTemplate); } @Override @@ -49,15 +50,10 @@ public class EnterStructurePlacementModeMessage extends SWGMessage { @Override public IoBuffer serialize() { IoBuffer result = IoBuffer.allocate(16 + structureTemplate.length()).order(ByteOrder.LITTLE_ENDIAN); - result.putShort((short) 3); result.putInt(0xE8A54DC1); - result.putLong(deed.getObjectID()); - - deed.setAttachment("structureTemplate", structureTemplate); result.put(getAsciiString(structureTemplate)); - return result.flip(); } diff --git a/src/protocol/swg/OkMessage.java b/src/protocol/swg/OkMessage.java index 4c31f533..a5bc1276 100644 --- a/src/protocol/swg/OkMessage.java +++ b/src/protocol/swg/OkMessage.java @@ -4,7 +4,7 @@ import java.nio.ByteOrder; import org.apache.mina.core.buffer.IoBuffer; -import resources.common.StringUtilities; +import engine.resources.common.StringUtilities; public class OkMessage extends SWGMessage { diff --git a/src/protocol/swg/auctionManagerClientListener/AuctionQueryHeadersMessage.java b/src/protocol/swg/auctionManagerClientListener/AuctionQueryHeadersMessage.java index e0ce1fd6..b92f96c3 100644 --- a/src/protocol/swg/auctionManagerClientListener/AuctionQueryHeadersMessage.java +++ b/src/protocol/swg/auctionManagerClientListener/AuctionQueryHeadersMessage.java @@ -52,6 +52,7 @@ public class AuctionQueryHeadersMessage extends SWGMessage { setScreen(data.getInt()); setCategory(data.getInt()); setItemTypeCRC(data.getInt()); + data.get(); // unk int size = data.getInt(); try { setSearchString(new String(ByteBuffer.allocate(size * 2).put(data.array(), data.position(), size * 2).array(), "UTF-16LE")); @@ -59,11 +60,12 @@ public class AuctionQueryHeadersMessage extends SWGMessage { e.printStackTrace(); } data.position(data.position() + size * 2); + setUnkInt(data.getInt()); setMinPrice(data.getInt()); setMaxPrice(data.getInt()); setIncludeEntranceFee(data.get()); - data.skip(6); // unk + data.skip(5); // unk setVendorId(data.getLong()); setVendorFlag(data.get()); setOffset(data.getShort()); diff --git a/src/protocol/swg/auctionManagerClientListener/AuctionQueryHeadersResponseMessage.java b/src/protocol/swg/auctionManagerClientListener/AuctionQueryHeadersResponseMessage.java index a36bb523..3ea90dd0 100644 --- a/src/protocol/swg/auctionManagerClientListener/AuctionQueryHeadersResponseMessage.java +++ b/src/protocol/swg/auctionManagerClientListener/AuctionQueryHeadersResponseMessage.java @@ -22,15 +22,10 @@ package protocol.swg.auctionManagerClientListener; import java.nio.ByteOrder; -import java.util.HashSet; import java.util.LinkedHashSet; -import java.util.Set; -import java.util.TreeSet; -import java.util.Vector; import org.apache.mina.core.buffer.IoBuffer; -import engine.resources.common.CRC; import protocol.swg.SWGMessage; import services.bazaar.AuctionItem; @@ -103,7 +98,27 @@ public class AuctionQueryHeadersResponseMessage extends SWGMessage { result.putInt((int) ((item.getExpireTime() - System.currentTimeMillis()) / 1000)); result.putInt(item.getPrice()); result.putShort((short) 0); + result.putLong(item.getOwnerId()); + result.put((byte) (item.isAuction() ? 0 : 1)); + result.putLong(0); result.put((byte) 0); + result.putInt(2); // unk + result.putInt(0); + result.putShort((short) 0); + result.putInt(item.getItemType()); + + //result.putInt(0x400C); // category bitmask? + result.putInt(0); + int options = 0; + + if(item.getOwnerId() == playerId && (item.getStatus() == AuctionItem.OFFERED || item.getStatus() == AuctionItem.FORSALE)) + options |= 0x800; + + result.putInt(item.getAuctionOptions() | options); + result.putInt(0); + + + /*result.put((byte) 0); result.putInt(CRC.StringtoCRC(item.getItem().getTemplate())); result.putShort((short) 0); result.put((byte) 0); @@ -117,7 +132,7 @@ public class AuctionQueryHeadersResponseMessage extends SWGMessage { result.putInt(item.getItemType()); result.putInt(0); result.putInt(0); - result.putInt(0); + result.putInt(0);*/ /* result.put((byte) (item.isAuction() ? 0 : 1)); diff --git a/src/protocol/swg/auctionManagerClientListener/CreateAuctionMessage.java b/src/protocol/swg/auctionManagerClientListener/CreateAuctionMessage.java index d05a6756..33a57339 100644 --- a/src/protocol/swg/auctionManagerClientListener/CreateAuctionMessage.java +++ b/src/protocol/swg/auctionManagerClientListener/CreateAuctionMessage.java @@ -26,7 +26,6 @@ import java.nio.ByteBuffer; import org.apache.mina.core.buffer.IoBuffer; -import engine.resources.common.Utilities; import protocol.swg.SWGMessage; public class CreateAuctionMessage extends SWGMessage { diff --git a/src/protocol/swg/auctionManagerClientListener/CreateImmediateAuctionMessage.java b/src/protocol/swg/auctionManagerClientListener/CreateImmediateAuctionMessage.java index 33307c41..0546f41e 100644 --- a/src/protocol/swg/auctionManagerClientListener/CreateImmediateAuctionMessage.java +++ b/src/protocol/swg/auctionManagerClientListener/CreateImmediateAuctionMessage.java @@ -100,8 +100,10 @@ public class CreateImmediateAuctionMessage extends SWGMessage { this.description = description; } - public byte getPremium() { - return premium; + public boolean getPremium() { + if(premium == 1) + return true; + return false; } public void setPremium(byte premium) { diff --git a/src/protocol/swg/auctionManagerClientListener/GetAuctionDetailsResponse.java b/src/protocol/swg/auctionManagerClientListener/GetAuctionDetailsResponse.java index 458c59d6..e4aaac6c 100644 --- a/src/protocol/swg/auctionManagerClientListener/GetAuctionDetailsResponse.java +++ b/src/protocol/swg/auctionManagerClientListener/GetAuctionDetailsResponse.java @@ -25,7 +25,6 @@ import java.nio.ByteOrder; import org.apache.mina.core.buffer.IoBuffer; -import engine.resources.objects.SWGObject; import protocol.swg.SWGMessage; import resources.objects.tangible.TangibleObject; import services.bazaar.AuctionItem; diff --git a/src/protocol/swg/chat/ChatOnLeaveRoom.java b/src/protocol/swg/chat/ChatOnLeaveRoom.java index 1fecfe5f..b9c2c0ba 100644 --- a/src/protocol/swg/chat/ChatOnLeaveRoom.java +++ b/src/protocol/swg/chat/ChatOnLeaveRoom.java @@ -26,7 +26,6 @@ import java.nio.ByteOrder; import org.apache.mina.core.buffer.IoBuffer; import protocol.swg.SWGMessage; -import resources.common.StringUtilities; public class ChatOnLeaveRoom extends SWGMessage { diff --git a/src/protocol/swg/chat/ChatSendToRoom.java b/src/protocol/swg/chat/ChatSendToRoom.java index 1c603c3c..68e0ced2 100644 --- a/src/protocol/swg/chat/ChatSendToRoom.java +++ b/src/protocol/swg/chat/ChatSendToRoom.java @@ -27,7 +27,6 @@ import java.nio.ByteBuffer; import org.apache.mina.core.buffer.IoBuffer; import protocol.swg.SWGMessage; -import resources.common.StringUtilities; public class ChatSendToRoom extends SWGMessage { diff --git a/src/protocol/swg/objectControllerObjects/BuffBuilderChangeMessage.java b/src/protocol/swg/objectControllerObjects/BuffBuilderChangeMessage.java index b522ee35..0c5740fd 100644 --- a/src/protocol/swg/objectControllerObjects/BuffBuilderChangeMessage.java +++ b/src/protocol/swg/objectControllerObjects/BuffBuilderChangeMessage.java @@ -6,7 +6,7 @@ import java.util.Vector; import org.apache.mina.core.buffer.IoBuffer; import protocol.swg.ObjControllerMessage; -import resources.objects.BuffItem; +import resources.buffs.BuffItem; public class BuffBuilderChangeMessage extends ObjControllerObject { diff --git a/src/protocol/swg/objectControllerObjects/BuffBuilderEndMessage.java b/src/protocol/swg/objectControllerObjects/BuffBuilderEndMessage.java index 96a959db..b4aa5cd1 100644 --- a/src/protocol/swg/objectControllerObjects/BuffBuilderEndMessage.java +++ b/src/protocol/swg/objectControllerObjects/BuffBuilderEndMessage.java @@ -27,7 +27,7 @@ import java.util.Vector; import org.apache.mina.core.buffer.IoBuffer; import protocol.swg.ObjControllerMessage; -import resources.objects.BuffItem; +import resources.buffs.BuffItem; public class BuffBuilderEndMessage extends ObjControllerObject { diff --git a/src/protocol/swg/objectControllerObjects/CombatSpam.java b/src/protocol/swg/objectControllerObjects/CombatSpam.java index 26d64b9a..b6be2857 100644 --- a/src/protocol/swg/objectControllerObjects/CombatSpam.java +++ b/src/protocol/swg/objectControllerObjects/CombatSpam.java @@ -28,6 +28,7 @@ import org.apache.mina.core.buffer.IoBuffer; import protocol.swg.ObjControllerMessage; import resources.datatables.HitType; +@SuppressWarnings("unused") public class CombatSpam extends ObjControllerObject{ private long attackerId; diff --git a/src/protocol/swg/objectControllerObjects/MissionListRequest.java b/src/protocol/swg/objectControllerObjects/MissionListRequest.java index 5e7aa208..6d1fa2f5 100644 --- a/src/protocol/swg/objectControllerObjects/MissionListRequest.java +++ b/src/protocol/swg/objectControllerObjects/MissionListRequest.java @@ -23,9 +23,6 @@ package protocol.swg.objectControllerObjects; import org.apache.mina.core.buffer.IoBuffer; -import resources.common.Console; -import resources.common.StringUtilities; - public class MissionListRequest extends ObjControllerObject { private long objectId; diff --git a/src/protocol/swg/objectControllerObjects/NpcConversationOptions.java b/src/protocol/swg/objectControllerObjects/NpcConversationOptions.java index 092b2556..c9387ffa 100644 --- a/src/protocol/swg/objectControllerObjects/NpcConversationOptions.java +++ b/src/protocol/swg/objectControllerObjects/NpcConversationOptions.java @@ -26,9 +26,9 @@ import java.util.Vector; import org.apache.mina.core.buffer.IoBuffer; +import engine.resources.objects.Delta; import protocol.swg.ObjControllerMessage; import resources.common.ConversationOption; -import resources.objects.Delta; public class NpcConversationOptions extends ObjControllerObject { diff --git a/src/protocol/swg/objectControllerObjects/ShowFlyText.java b/src/protocol/swg/objectControllerObjects/ShowFlyText.java index 39530a87..71b32631 100644 --- a/src/protocol/swg/objectControllerObjects/ShowFlyText.java +++ b/src/protocol/swg/objectControllerObjects/ShowFlyText.java @@ -25,10 +25,10 @@ import java.nio.ByteOrder; import org.apache.mina.core.buffer.IoBuffer; +import engine.resources.common.RGB; +import engine.resources.common.Stf; import protocol.swg.ObjControllerMessage; import resources.common.OutOfBand; -import resources.common.RGB; -import resources.common.Stf; public class ShowFlyText extends ObjControllerObject { diff --git a/src/resources/objects/Buff.java b/src/resources/buffs/Buff.java similarity index 96% rename from src/resources/objects/Buff.java rename to src/resources/buffs/Buff.java index fd6aa4e0..d845d423 100644 --- a/src/resources/objects/Buff.java +++ b/src/resources/buffs/Buff.java @@ -19,8 +19,9 @@ * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. ******************************************************************************/ -package resources.objects; +package resources.buffs; +import java.io.Serializable; import java.nio.ByteOrder; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledFuture; @@ -34,15 +35,16 @@ import org.apache.mina.core.buffer.SimpleBufferAllocator; import resources.objects.creature.CreatureObject; import com.sleepycat.persist.model.NotPersistent; -import com.sleepycat.persist.model.Persistent; import engine.resources.common.CRC; +import engine.resources.objects.IDelta; +import engine.resources.objects.SWGObject; -@Persistent(version=10) -public class Buff implements IDelta { +public class Buff implements IDelta, Serializable { + private static final long serialVersionUID = 1L; @NotPersistent - private SimpleBufferAllocator bufferPool = new SimpleBufferAllocator(); + private transient static SimpleBufferAllocator bufferPool = new SimpleBufferAllocator(); private String group1, group2; private int priority; private float duration; @@ -64,7 +66,7 @@ public class Buff implements IDelta { private int totalPlayTime; private byte decayCounter = 0; @NotPersistent - private ScheduledFuture removalTask; + private transient ScheduledFuture removalTask; private int stacks = 1; private long groupBufferId; private int buffCRC; @@ -149,7 +151,13 @@ public class Buff implements IDelta { }*/ public Buff() { } - + + @Override + public void init(SWGObject object) { + // TODO Auto-generated method stub + + } + @Override public byte[] getBytes() { @@ -481,5 +489,5 @@ public class Buff implements IDelta { public void setBuffCRC(int buffCRC) { this.buffCRC = buffCRC; } - + } diff --git a/src/resources/objects/BuffItem.java b/src/resources/buffs/BuffItem.java similarity index 92% rename from src/resources/objects/BuffItem.java rename to src/resources/buffs/BuffItem.java index b87ce0af..0c46f9ce 100644 --- a/src/resources/objects/BuffItem.java +++ b/src/resources/buffs/BuffItem.java @@ -19,12 +19,13 @@ * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. ******************************************************************************/ -package resources.objects; +package resources.buffs; -import com.sleepycat.persist.model.Persistent; +import java.io.Serializable; -@Persistent -public class BuffItem { +public class BuffItem implements Serializable { + + private static final long serialVersionUID = 1L; private int affectAmount; private int entertainerBonus; private int invested; diff --git a/src/resources/objects/DamageOverTime.java b/src/resources/buffs/DamageOverTime.java similarity index 93% rename from src/resources/objects/DamageOverTime.java rename to src/resources/buffs/DamageOverTime.java index ce367916..fcd91ad5 100644 --- a/src/resources/objects/DamageOverTime.java +++ b/src/resources/buffs/DamageOverTime.java @@ -19,22 +19,22 @@ * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. ******************************************************************************/ -package resources.objects; +package resources.buffs; +import java.io.Serializable; import java.util.concurrent.ScheduledFuture; import com.sleepycat.persist.model.NotPersistent; -import com.sleepycat.persist.model.Persistent; -@Persistent(version=1) -public class DamageOverTime { +public class DamageOverTime implements Serializable { + private static final long serialVersionUID = 1L; private Buff buff; private String type; private int duration; private int intensity; @NotPersistent - private ScheduledFuture task; + private transient ScheduledFuture task; private long startTime; private String commandName; diff --git a/src/resources/common/BountyListItem.java b/src/resources/common/BountyListItem.java new file mode 100644 index 00000000..3b09ec0f --- /dev/null +++ b/src/resources/common/BountyListItem.java @@ -0,0 +1,135 @@ +/******************************************************************************* + * 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.common; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + +import com.sleepycat.persist.model.Entity; +import com.sleepycat.persist.model.PrimaryKey; + +@Entity(version=1) +public class BountyListItem implements Serializable { + + private static final long serialVersionUID = 1L; + @PrimaryKey + private long objectID; + private int creditReward; + private String profession; + private String faction; + private String name; + private List assignedHunters; + private List bountyPlacers; + private int failedAttempts; + + public BountyListItem() { } + + public BountyListItem(long objectID, int creditReward, String profession, String faction, String name) { + this.objectID = objectID; + this.creditReward = creditReward; + this.profession = profession; + this.faction = faction; + this.setName(name); + this.setAssignedHunters(new ArrayList(3)); + this.setBountyPlacers(new ArrayList()); + } + + public long getObjectID() { + return objectID; + } + public void setObjectID(long objectID) { + this.objectID = objectID; + } + public int getCreditReward() { + return creditReward; + } + public void setCreditReward(int creditReward) { + this.creditReward = creditReward; + } + public String getProfession() { + return profession; + } + public void setProfession(String profession) { + this.profession = profession; + } + + public String getFaction() { + return faction; + } + + public void setFaction(String faction) { + this.faction = faction; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public void addBounty(int amountToAdd) { + this.creditReward += amountToAdd; + } + + public void deductBounty(int amountToDeduct) { + this.creditReward = this.creditReward - amountToDeduct; + } + + public List getAssignedHunters() { + return assignedHunters; + } + + public void setAssignedHunters(List assignedHunters) { + this.assignedHunters = assignedHunters; + } + + public void addBountyHunter(long objectId) { + assignedHunters.add(objectId); + } + + public void removeBountyHunter(long objectId) { + assignedHunters.remove(objectId); + } + + public List getBountyPlacers() { + return bountyPlacers; + } + + public void setBountyPlacers(List bountyPlacers) { + this.bountyPlacers = bountyPlacers; + } + + public int getFailedAttempts() { + return failedAttempts; + } + + public void setFailedAttempts(int failedAttempts) { + this.failedAttempts = failedAttempts; + } + + public void incrementFailedAttempts() { + this.failedAttempts += 1; + } +} \ No newline at end of file diff --git a/src/resources/common/Console.java b/src/resources/common/Console.java index 292e78e3..770eb5b2 100644 --- a/src/resources/common/Console.java +++ b/src/resources/common/Console.java @@ -24,12 +24,15 @@ package resources.common; import java.util.Calendar; public class Console { + public static void println(String string) { Calendar cal = Calendar.getInstance(); System.out.println(cal.getTime() + ": " + string); } + public static void print(String string) { Calendar cal = Calendar.getInstance(); System.out.print(cal.getTime() + ": " + string); } + } diff --git a/src/resources/common/Forager.java b/src/resources/common/Forager.java index e0445f29..000d8886 100644 --- a/src/resources/common/Forager.java +++ b/src/resources/common/Forager.java @@ -27,15 +27,12 @@ import java.util.Random; import java.util.Vector; import engine.resources.objects.SWGObject; -import engine.resources.scene.Planet; import engine.resources.scene.Point3D; -import engine.resources.scene.Quaternion; import main.NGECore; import resources.datatables.Options; -import resources.objects.cell.CellObject; +import resources.loot.LootGroup; import resources.objects.creature.CreatureObject; import resources.objects.group.GroupObject; -import resources.objects.loot.LootGroup; import resources.objects.tangible.TangibleObject; import services.ai.AIActor; @@ -292,7 +289,6 @@ public class Forager { break; } wormie.setCustomName(name); - wormie.setCustomName2(name); wormie.setLevel(forager.getLevel()); wormie.setOptions(Options.AGGRESSIVE, true); wormie.setOptions(Options.ATTACKABLE, true); @@ -345,7 +341,6 @@ public class Forager { goon.addObserver(forager); goon.setCustomName(name); - goon.setCustomName2(name); goon.setLevel(forager.getLevel()); goon.setOptions(Options.AGGRESSIVE, true); goon.setOptions(Options.ATTACKABLE, true); @@ -421,7 +416,6 @@ public class Forager { guard.addObserver(owner); // ToDo: add any players in aggro range!!! guard.setCustomName(name); - guard.setCustomName2(name); guard.setLevel(owner.getLevel()); guard.setOptions(Options.AGGRESSIVE, true); guard.setOptions(Options.ATTACKABLE, true); @@ -437,8 +431,8 @@ public class Forager { public CreatureObject spawnBoss(Point3D exactTreasureLocation, CreatureObject owner, TangibleObject map, short spawnLevel){ - Point3D treasureLocation = resources.common.SpawnPoint.getRandomPosition(exactTreasureLocation, 1, 10, owner.getPlanetId()); - return new CreatureObject(); + //Point3D treasureLocation = resources.common.SpawnPoint.getRandomPosition(exactTreasureLocation, 1, 10, owner.getPlanetId()); + return new CreatureObject(); // FIXME on paper this looks bad } @SuppressWarnings("unchecked") diff --git a/src/resources/common/OutOfBand.java b/src/resources/common/OutOfBand.java index be36d672..ed4909f8 100644 --- a/src/resources/common/OutOfBand.java +++ b/src/resources/common/OutOfBand.java @@ -24,11 +24,11 @@ package resources.common; import java.nio.ByteOrder; import java.util.Vector; -import resources.common.StringUtilities; -import resources.objects.Delta; - import org.apache.mina.core.buffer.IoBuffer; +import engine.resources.common.StringUtilities; +import engine.resources.objects.Delta; + public class OutOfBand { private Vector prosePackages = new Vector(); diff --git a/src/resources/common/ProsePackage.java b/src/resources/common/ProsePackage.java index b461bb8e..22549d40 100644 --- a/src/resources/common/ProsePackage.java +++ b/src/resources/common/ProsePackage.java @@ -21,6 +21,8 @@ ******************************************************************************/ package resources.common; +import engine.resources.common.Stf; + public class ProsePackage { /* @@ -55,6 +57,12 @@ public class ProsePackage { stf.setStfName(stfLabel); } + public ProsePackage(String stfFile, String stfLabel, String ttCustomString) { + stf.setStfFilename(stfFile); + stf.setStfName(stfLabel); + this.ttCustomString = ttCustomString; + } + public ProsePackage(String stfFile, String stfLabel, long tuObjectId, String tuStfFile, String tuStfLabel, String tuCustomString) { stf.setStfFilename(stfFile); stf.setStfName(stfLabel); diff --git a/src/resources/common/RGB.java b/src/resources/common/RGB.java deleted file mode 100644 index 50723be5..00000000 --- a/src/resources/common/RGB.java +++ /dev/null @@ -1,37 +0,0 @@ -package resources.common; - -import resources.objects.Delta; - -public class RGB extends Delta { - - private byte red, green, blue; - - public RGB(byte red, byte green, byte blue) { - this.red = red; - this.green = green; - this.blue = blue; - } - - public RGB(int red, int green, int blue) { - this.red = (byte) red; - this.green = (byte) green; - this.blue = (byte) blue; - } - - public byte getRed() { - return red; - } - - public byte getGreen() { - return green; - } - - public byte getBlue() { - return blue; - } - - public byte[] getBytes() { - return new byte[] { red, green, blue }; - } - -} diff --git a/src/resources/common/Stf.java b/src/resources/common/Stf.java deleted file mode 100644 index 8907ecba..00000000 --- a/src/resources/common/Stf.java +++ /dev/null @@ -1,120 +0,0 @@ -/******************************************************************************* - * 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.common; - -import org.apache.mina.core.buffer.IoBuffer; - -import resources.objects.Delta; - -import com.sleepycat.persist.model.Persistent; - -@Persistent -public class Stf extends Delta { - - private AString stfFilename = new AString(""); - private int spacer = 0; - private AString stfName = new AString(""); - - public Stf(String stfFilename, int spacer, String stfName) { - this.stfFilename = new AString(stfFilename); - this.spacer = spacer; - this.stfName = new AString(stfName); - } - - public Stf(String stf) { - setString(stf); - } - - public Stf() { - - } - - public String getStfFilename() { - synchronized(objectMutex) { - return stfFilename.get(); - } - } - - public void setStfFilename(String stfFilename) { - synchronized(objectMutex) { - this.stfFilename = new AString(stfFilename); - } - } - - public int getSpacer() { - synchronized(objectMutex) { - return spacer; - } - } - - public void setSpacer(int spacer) { - synchronized(objectMutex) { - this.spacer = spacer; - } - } - - public String getStfName() { - synchronized(objectMutex) { - return stfName.get(); - } - } - - public void setStfName(String stfName) { - synchronized(objectMutex) { - this.stfName = new AString(stfName); - } - } - - public String getString() { - synchronized(objectMutex) { - return ("@" + stfFilename.get() + ":" + stfName.get()); - } - } - - public void setString(String stf) { - synchronized(objectMutex) { - if (stf == null || stf.equals("")) { - stfFilename.set(""); - stfName.set(""); - } else if (stf.contains(":")) { - stf = stf.replace("@", ""); - stfFilename.set(stf.split(":")[0]); - stfName.set(stf.split(":")[1]); - } - } - } - - public byte[] getBytes() { - synchronized(objectMutex) { - int size = stfFilename.getBytes().length + 4 + stfName.getBytes().length; - - IoBuffer buffer = createBuffer(size); - buffer.put(stfFilename.getBytes()); - buffer.putInt(spacer); - buffer.put(stfName.getBytes()); - buffer.flip(); - - return buffer.array(); - } - } - -} diff --git a/src/resources/common/StringUtilities.java b/src/resources/common/StringUtilities.java deleted file mode 100644 index e7d34d3a..00000000 --- a/src/resources/common/StringUtilities.java +++ /dev/null @@ -1,187 +0,0 @@ -/******************************************************************************* - * 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.common; - -import java.io.UnsupportedEncodingException; -import java.nio.ByteBuffer; -import java.nio.ByteOrder; - -import org.apache.mina.core.buffer.IoBuffer; - -import engine.resources.common.Utilities; - -public class StringUtilities { - - final protected static char[] hexArray = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; - - public static String getAsciiString(ByteBuffer buffer) { - return getString(buffer, "US-ASCII"); - } - - public static String getAsciiString(IoBuffer buffer) { - return getString(buffer, "US-ASCII"); - } - - public static String getAsciiString(IoBuffer buffer, boolean integer) { - return getString(buffer, "US-ASCII", integer); - } - - public static String getUnicodeString(ByteBuffer buffer) { - return getString(buffer, "UTF-16LE"); - } - - public static String getUnicodeString(IoBuffer buffer) { - return getString(buffer, "UTF-16LE"); - } - - public static String getUnicodeString(IoBuffer buffer, boolean integer) { - return getString(buffer, "UTF-16LE", integer); - } - - public static byte[] getAsciiString(String string) { - return getString(string, "US-ASCII"); - } - - public static byte[] getUnicodeString(String string) { - return getString(string, "UTF-16LE"); - } - - private static String getString(ByteBuffer buffer, String charFormat) { - String result; - int length; - - if (charFormat == "UTF-16LE") { - length = buffer.order(ByteOrder.LITTLE_ENDIAN).getInt(); - } else { - length = buffer.order(ByteOrder.LITTLE_ENDIAN).getShort(); - } - - int bufferPosition = buffer.position(); - - try { - result = new String(buffer.array(), bufferPosition, length, charFormat); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - return ""; - } - - buffer.position(bufferPosition + length); - - return result; - } - - private static String getString(IoBuffer buffer, String charFormat) { - String result; - int length; - - if (charFormat == "UTF-16LE") { - length = buffer.order(ByteOrder.LITTLE_ENDIAN).getInt(); - } else { - length = buffer.order(ByteOrder.LITTLE_ENDIAN).getShort(); - } - - int bufferPosition = buffer.position(); - - try { - result = new String(buffer.array(), bufferPosition, length, charFormat); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - return ""; - } - - buffer.position(bufferPosition + length); - - return result; - } - - private static String getString(IoBuffer buffer, String charFormat, boolean integer) { - String result; - int length; - - if (charFormat == "UTF-16LE") { - if (integer) { - length = buffer.order(ByteOrder.LITTLE_ENDIAN).getInt() * 2; - } else { - length = buffer.order(ByteOrder.LITTLE_ENDIAN).getInt(); - } - } else { - if (integer) { - length = buffer.order(ByteOrder.LITTLE_ENDIAN).getInt(); - } else { - length = buffer.order(ByteOrder.LITTLE_ENDIAN).getShort(); - } - } - - int bufferPosition = buffer.position(); - - try { - result = new String(buffer.array(), bufferPosition, length, charFormat); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - return ""; - } - - buffer.position(bufferPosition + length); - - return result; - } - - private static byte[] getString(String string, String charFormat) { - ByteBuffer result; - int length = 2 + string.length(); - - if (charFormat == "UTF-16LE") { - result = ByteBuffer.allocate(length * 2).order(ByteOrder.LITTLE_ENDIAN); - result.putInt(string.length()); - } else { - result = ByteBuffer.allocate(length).order(ByteOrder.LITTLE_ENDIAN); - result.putShort((short)string.length()); - } - - try { - result.put(string.getBytes(charFormat)); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - return new byte[] { }; - } - - return result.array(); - } - - public static String bytesToHex(byte[] bytes) { - char[] hexChars = new char[bytes.length * 2]; - int v; - - for ( int j = 0; j < bytes.length; j++ ) { - v = bytes[j] & 0xFF; - hexChars[j * 2] = hexArray[v >>> 4]; - hexChars[j * 2 + 1] = hexArray[v & 0x0F]; - } - - return new String(hexChars); - } - - public static void printBytes(byte[] bytes) { - System.out.println(Utilities.getHexString(bytes)); - } - -} diff --git a/src/resources/craft/DraftSchematic.java b/src/resources/craft/DraftSchematic.java new file mode 100644 index 00000000..9f203e2f --- /dev/null +++ b/src/resources/craft/DraftSchematic.java @@ -0,0 +1,87 @@ +/******************************************************************************* + * 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.craft; + +import java.io.Serializable; + +import org.apache.mina.core.buffer.IoBuffer; + +import engine.resources.objects.Delta; + +public class DraftSchematic extends Delta implements Serializable { + + private static final long serialVersionUID = 1L; + + private int serverSchematicCrc = 0; + private int schematicCrc = 0; + private int amount = 1; + + public DraftSchematic(int serverSchematicCrc, int schematicCrc, int amount) { + this.serverSchematicCrc = serverSchematicCrc; + this.schematicCrc = schematicCrc; + this.amount = amount; + } + + public DraftSchematic(int serverSchematicCrc, int schematicCrc) { + this.serverSchematicCrc = serverSchematicCrc; + this.schematicCrc = schematicCrc; + } + + public DraftSchematic() { + + } + + public int getServerSchematicCrc() { + synchronized(objectMutex) { + return serverSchematicCrc; + } + } + + public int getSchematicCrc() { + synchronized(objectMutex) { + return schematicCrc; + } + } + + public int getAmount() { + synchronized(objectMutex) { + return amount; + } + } + + public void setAmount(int amount) { + synchronized(objectMutex) { + this.amount = amount; + } + } + + public byte[] getBytes() { + synchronized(objectMutex) { + IoBuffer buffer = createBuffer(12); + buffer.putInt(serverSchematicCrc); + buffer.putInt(schematicCrc); + buffer.putInt(amount); + return buffer.array(); + } + } + +} diff --git a/src/resources/datatables/LightsaberColors.java b/src/resources/datatables/LightsaberColors.java new file mode 100644 index 00000000..cb2028c5 --- /dev/null +++ b/src/resources/datatables/LightsaberColors.java @@ -0,0 +1,83 @@ +/******************************************************************************* + * 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; + +import org.python.google.common.collect.BiMap; +import org.python.google.common.collect.HashBiMap; + +public final class LightsaberColors { + + public static BiMap map = HashBiMap.create(); + + static + { + // Basic color crystals with the basic lightsaber shader + map.put("Red", 0); + map.put("Dark Red", 1); + map.put("Light Green", 2); + map.put("Dark Green", 3); + map.put("Blue", 4); + map.put("Dark Blue", 5); + map.put("Yellow", 6); + map.put("Dark Yellow", 7); + map.put("Light Purple", 8); + map.put("Dark Purple", 9); + map.put("Orange", 10); + map.put("Brown", 11); + map.put("Allya's Exile", 12); + map.put("Kun's Blood", 13); + map.put("Bondara's Folly", 14); + map.put("Ulic's Redemption", 15); + map.put("Bane's Heart", 16); + map.put("Gallia's Intuition", 17); + map.put("Prowess of Plo Koon", 18); + map.put("B'Nar's Sacrifice", 19); + map.put("Windu's Guile", 20); + map.put("Mundi's Response", 21); + map.put("Strength of Luminaria", 22); + map.put("Baaa's Wisdom", 23); + map.put("Quintessence of the Force", 24); + map.put("Dawn of Dagobah", 25); + map.put("Horn's Future", 26); + map.put("Allya's Redemption", 27); + map.put("Kenobi's Legacy", 28); + map.put("Sunrider's Destiny", 29); + map.put("Kit's Ferocity", 30); + + // Special crystals that have seperate shaders - the 256 is for a hacky way to set blade type and color without more code + map.put("Lava", 256 + 1); + map.put("Permafrost", 256 + 2); + map.put("Blackwing Bezoar", 256 + 3); + } + + public static int getByName(String colorName) + { + return map.get(colorName); + } + + public static String get(int index) + { + return map.inverse().get(index); + } + + +} diff --git a/src/resources/objects/IDelta.java b/src/resources/datatables/MilkState.java similarity index 85% rename from src/resources/objects/IDelta.java rename to src/resources/datatables/MilkState.java index cf1d8802..002b6e7c 100644 --- a/src/resources/objects/IDelta.java +++ b/src/resources/datatables/MilkState.java @@ -19,13 +19,10 @@ * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. ******************************************************************************/ -package resources.objects; +package resources.datatables; -import com.sleepycat.persist.model.Persistent; - -@Persistent -public interface IDelta { - - public byte[] getBytes(); - +public class MilkState { + public static final byte NOTYETMILKED = 0; + public static final byte MILKINGINPROGRESS = 1; + public static final byte MILKED = 2; } diff --git a/src/resources/datatables/PvpStatus.java b/src/resources/datatables/PvpStatus.java index ddded7a4..f2bb3350 100644 --- a/src/resources/datatables/PvpStatus.java +++ b/src/resources/datatables/PvpStatus.java @@ -32,6 +32,6 @@ public class PvpStatus { public static int Enemy = 32; public static int GoingOvert = 64; public static int GoingCovert = 128; - public static int Dueling = 256; + public static int Self = 256; } diff --git a/src/resources/gcw/CurrentServerGCWZoneHistory.java b/src/resources/gcw/CurrentServerGCWZoneHistory.java index 66874d64..b98bba3b 100644 --- a/src/resources/gcw/CurrentServerGCWZoneHistory.java +++ b/src/resources/gcw/CurrentServerGCWZoneHistory.java @@ -21,15 +21,15 @@ ******************************************************************************/ package resources.gcw; +import java.io.Serializable; + import org.apache.mina.core.buffer.IoBuffer; -import com.sleepycat.persist.model.Persistent; +import engine.resources.objects.Delta; -import resources.objects.Delta; - -@Persistent(version=0) -public class CurrentServerGCWZoneHistory extends Delta implements Cloneable { +public class CurrentServerGCWZoneHistory extends Delta implements Cloneable, Serializable { + private static final long serialVersionUID = 1L; private int lastUpdateTime; private int percent; diff --git a/src/resources/gcw/CurrentServerGCWZonePercent.java b/src/resources/gcw/CurrentServerGCWZonePercent.java index ea825d7a..8829b1b3 100644 --- a/src/resources/gcw/CurrentServerGCWZonePercent.java +++ b/src/resources/gcw/CurrentServerGCWZonePercent.java @@ -21,20 +21,18 @@ ******************************************************************************/ package resources.gcw; +import java.io.Serializable; import java.math.BigDecimal; import java.math.MathContext; import org.apache.mina.core.buffer.IoBuffer; -import com.sleepycat.persist.model.Persistent; - +import engine.resources.objects.Delta; import engine.resources.scene.Point2D; -import resources.objects.Delta; - -@Persistent(version=0) -public class CurrentServerGCWZonePercent extends Delta implements Cloneable { +public class CurrentServerGCWZonePercent extends Delta implements Cloneable, Serializable { + private static final long serialVersionUID = 1L; private Point2D position; private float radius = 0; private BigDecimal weight; diff --git a/src/resources/gcw/OtherServerGCWZonePercent.java b/src/resources/gcw/OtherServerGCWZonePercent.java index ab8048eb..d97bf098 100644 --- a/src/resources/gcw/OtherServerGCWZonePercent.java +++ b/src/resources/gcw/OtherServerGCWZonePercent.java @@ -21,15 +21,15 @@ ******************************************************************************/ package resources.gcw; +import java.io.Serializable; + import org.apache.mina.core.buffer.IoBuffer; -import com.sleepycat.persist.model.Persistent; +import engine.resources.objects.Delta; -import resources.objects.Delta; - -@Persistent(version=0) -public class OtherServerGCWZonePercent extends Delta implements Cloneable { +public class OtherServerGCWZonePercent extends Delta implements Cloneable, Serializable { + private static final long serialVersionUID = 1L; private String zone = ""; private int percent = 50; diff --git a/src/resources/guild/Guild.java b/src/resources/guild/Guild.java index 5651c2d0..4c1f0201 100644 --- a/src/resources/guild/Guild.java +++ b/src/resources/guild/Guild.java @@ -21,31 +21,32 @@ ******************************************************************************/ package resources.guild; +import java.io.Serializable; +import java.util.ArrayList; import java.util.List; import org.apache.mina.core.buffer.IoBuffer; -import com.sleepycat.persist.model.Persistent; - -import resources.objects.Delta; - +import engine.resources.objects.Delta; import engine.resources.objects.SWGObject; -@Persistent(version=0) -public class Guild extends Delta { +public class Guild extends Delta implements Serializable, Comparable { + private static final long serialVersionUID = 1L; private int id; private String abbreviation; private String name; - private SWGObject leader; - private List members; + private long leader; + private String leaderName; + private List members = new ArrayList(); public Guild(int id, String abbreviation, String name, SWGObject leader) { this.id = id; this.abbreviation = abbreviation; this.name = name; - this.leader = leader; - this.members.add(leader); + this.leader = leader.getObjectID(); + this.leaderName = leader.getCustomName(); + this.members.add(leader.getObjectID()); } public Guild() { @@ -92,22 +93,34 @@ public class Guild extends Delta { return (Integer.toString(getId()) + ":" + getAbbreviation()); } - public SWGObject getLeader() { + public long getLeader() { synchronized(objectMutex) { return leader; } } - public void setLeader(SWGObject leader) { + public void setLeader(long leader) { synchronized(objectMutex) { this.leader = leader; } } - public List getMembers() { + public List getMembers() { return members; } + public String getLeaderName() { + synchronized(objectMutex) { + return leaderName; + } + } + + public void setLeaderName(String leaderName) { + synchronized(objectMutex) { + this.leaderName = leaderName; + } + } + public byte[] getBytes() { synchronized(objectMutex) { IoBuffer buffer = createBuffer((getString().length() + 2)); @@ -116,4 +129,9 @@ public class Guild extends Delta { } } + @Override + public int compareTo(Guild guild) { + return ((Integer) id).compareTo(guild.getId()); + } + } diff --git a/src/resources/objects/loot/LootDrop.java b/src/resources/loot/LootDrop.java similarity index 98% rename from src/resources/objects/loot/LootDrop.java rename to src/resources/loot/LootDrop.java index 371c1727..efd455ba 100644 --- a/src/resources/objects/loot/LootDrop.java +++ b/src/resources/loot/LootDrop.java @@ -19,7 +19,7 @@ * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. ******************************************************************************/ -package resources.objects.loot; +package resources.loot; import java.util.ArrayList; import java.util.List; diff --git a/src/resources/objects/loot/LootGroup.java b/src/resources/loot/LootGroup.java similarity index 92% rename from src/resources/objects/loot/LootGroup.java rename to src/resources/loot/LootGroup.java index 1c626c05..94ad4ef7 100644 --- a/src/resources/objects/loot/LootGroup.java +++ b/src/resources/loot/LootGroup.java @@ -19,17 +19,18 @@ * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. ******************************************************************************/ -package resources.objects.loot; +package resources.loot; -import com.sleepycat.persist.model.Persistent; +import java.io.Serializable; /** * @author Charon */ -@Persistent(version=0) -public class LootGroup { +public class LootGroup implements Serializable { + private static final long serialVersionUID = 1L; + private String[] lootPoolNames; private double[] lootPoolChances; private double lootGroupChance; diff --git a/src/resources/objects/loot/LootPool.java b/src/resources/loot/LootPool.java similarity index 97% rename from src/resources/objects/loot/LootPool.java rename to src/resources/loot/LootPool.java index 2e74cf8b..83576a16 100644 --- a/src/resources/objects/loot/LootPool.java +++ b/src/resources/loot/LootPool.java @@ -19,7 +19,7 @@ * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. ******************************************************************************/ -package resources.objects.loot; +package resources.loot; /** * @author Charon diff --git a/src/resources/objects/loot/LootRollSession.java b/src/resources/loot/LootRollSession.java similarity index 84% rename from src/resources/objects/loot/LootRollSession.java rename to src/resources/loot/LootRollSession.java index 884346ba..b20f1030 100644 --- a/src/resources/objects/loot/LootRollSession.java +++ b/src/resources/loot/LootRollSession.java @@ -19,7 +19,7 @@ * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. ******************************************************************************/ -package resources.objects.loot; +package resources.loot; import java.util.ArrayList; import java.util.List; @@ -46,11 +46,17 @@ public class LootRollSession { private int sessionLootMode; private boolean allowRareLoot; private boolean increasedRLSChance; + private int lootedObjectLevel=0; + private int lootedObjectDifficulty=0; - public LootRollSession(){ + public LootRollSession() + { + droppedItems = new ArrayList(); + errorMessages = new ArrayList(); } public LootRollSession(CreatureObject requester, TangibleObject lootedObject){ + long requesterGroupId = requester.getGroupId(); if (requesterGroupId>0){ this.playerGroup = (GroupObject) NGECore.getInstance().objectService.getObject(requesterGroupId); @@ -62,6 +68,8 @@ public class LootRollSession { if (lootedObject instanceof CreatureObject){ CreatureObject lootedCreature = (CreatureObject)lootedObject; + lootedObjectLevel = lootedCreature.getLevel(); + lootedObjectDifficulty = lootedCreature.getDifficulty(); // Exclude rare loot depending on creature level // For groups maybe average CL? if (requester.getLevel()-lootedCreature.getLevel()<=6){ @@ -108,6 +116,11 @@ public class LootRollSession { public Planet getSessionPlanet() { return sessionPlanet; } + + public void setSessionPlanet(Planet planet) + { + this.sessionPlanet = planet; + } public List getErrorMessages() { return errorMessages; @@ -160,4 +173,20 @@ public class LootRollSession { public void setRequester(CreatureObject requester) { this.requester = requester; } + + public int getLootedObjectLevel() { + return lootedObjectLevel; + } + + public void setLootedObjectLevel(int lootedObjectLevel) { + this.lootedObjectLevel = lootedObjectLevel; + } + + public int getLootedObjectDifficulty() { + return lootedObjectDifficulty; + } + + public void setLootedObjectDifficulty(int lootedObjectDifficulty) { + this.lootedObjectDifficulty = lootedObjectDifficulty; + } } diff --git a/src/resources/objectives/BountyMissionObjective.java b/src/resources/objectives/BountyMissionObjective.java new file mode 100644 index 00000000..6c6dcff1 --- /dev/null +++ b/src/resources/objectives/BountyMissionObjective.java @@ -0,0 +1,386 @@ +/******************************************************************************* + * 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.objectives; + +import java.util.Random; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicInteger; + +import protocol.swg.CommPlayerMessage; +import protocol.swg.PlayClientEffectLocMessage; +import engine.resources.common.CRC; +import engine.resources.container.Traverser; +import engine.resources.objects.SWGObject; +import engine.resources.scene.Point3D; +import engine.resources.scene.Quaternion; +import main.NGECore; +import resources.common.BountyListItem; +import resources.common.OutOfBand; +import resources.common.ProsePackage; +import resources.common.SpawnPoint; +import resources.datatables.DisplayType; +import resources.objects.creature.CreatureObject; +import resources.objects.mission.MissionObject; +import resources.objects.waypoint.WaypointObject; +import services.chat.Mail; +import services.mission.MissionObjective; + +public class BountyMissionObjective extends MissionObjective { + + private static final long serialVersionUID = 1L; + + private Point3D lastKnownLocation; + private String lastKnownPlanet; + private ScheduledFuture seekerUpdates; + private ScheduledFuture probeSummonTask; + private long markObjId; + + private boolean seekerActive = false; + private String seekerPlanet = ""; + private boolean arakydActive = false; + + private Point3D arakydLandingLocation; + + ////// Droids in the world - Set Posture to 8 to launch them. ////// + // Seeker Droids: object/creature/npc/droid/crafted/shared_probe_droid_advanced.iff + // Arakyd Droids: object/creature/npc/droid/shared_imperial_probot_bounty.iff + + ///// Inventory form ///// + // Seeker Droids: object/tangible/mission/shared_mission_bounty_droid_seeker.iff + // Arakyd Droids: object/tangible/mission/shared_mission_bounty_droid_probot.iff + public BountyMissionObjective(MissionObject parent) { + super(parent); + } + + @Override + public void activate(NGECore core, CreatureObject player) { + if (isActivated()) + return; + + BountyListItem bountyTarget = core.missionService.getBountyListItem(getMissionObject().getBountyMarkId()); + + if (bountyTarget == null) { + core.missionService.handleMissionAbort(player, getMissionObject()); + player.sendSystemMessage("@bountyhunter:null_mission", DisplayType.Broadcast); + return; + } + + bountyTarget.addBountyHunter(player.getObjectID()); + + setMarkObjId(bountyTarget.getObjectID()); + + String message = "@mission/mission_bounty_informant:target_hard_" + Integer.toString(new Random().nextInt(4) + 1); + + CommPlayerMessage comm = new CommPlayerMessage(player.getObjectId(), new OutOfBand(new ProsePackage(message))); + comm.setTime(2000); + switch (bountyTarget.getFaction()) { + case "neutral": + comm.setModel("object/mobile/shared_dressed_assassin_mission_giver_0" + Integer.toString(new Random().nextInt(2) + 1) + ".iff"); + break; + case "rebel": + comm.setModel("object/mobile/shared_dressed_assassin_mission_giver_imp_hum_m_0" + Integer.toString(new Random().nextInt(2) + 1) + ".iff"); + break; + case "imperial": + comm.setModel("object/mobile/shared_dressed_assassin_mission_giver_reb_0" + Integer.toString(new Random().nextInt(2) + 1) + ".iff"); + break; + } //Could also be: object/mobile/shared_bounty_guild_bounty_check.iff || object/mobile/shared_bounty_check_fugitive_x.iff + + player.getClient().getSession().write(comm.serialize()); + + player.getPlayerObject().setBountyMissionId(getMissionObject().getObjectId()); + + player.updatePvpStatus(); + } + + + @Override + public void complete(NGECore core, CreatureObject player) { + BountyListItem bounty = core.missionService.getBountyListItem(markObjId); + + if (bounty == null) + return; + + int reward = getMissionObject().getCreditReward(); + + if (bounty.getCreditReward() - reward == 0) + player.addBankCredits(reward); + else + player.addBankCredits(bounty.getCreditReward()); + + bounty.removeBountyHunter(player.getObjectId()); + + notifyBountyPlacers(core, player, bounty); + + clearActiveMissions(core, bounty); + + core.missionService.removeBounty(markObjId); + player.getPlayerObject().setBountyMissionId(0); + player.updatePvpStatus(); + } + + @Override + public void abort(NGECore core, CreatureObject player) { + cancelLocationUpdates(); + + BountyListItem bounty = core.missionService.getBountyListItem(markObjId); + + if (bounty == null) + return; + + bounty.removeBountyHunter(player.getObjectId()); + player.getPlayerObject().setBountyMissionId(0); + player.updatePvpStatus(); + } + + @Override + public void update(NGECore core, CreatureObject player) { + + } + + public void notifyBountyPlacers(NGECore core, CreatureObject player, BountyListItem bounty) { + + String message = "Dear Sir or Madam,\nThe Galactic Bounty Network wishes to inform you that the bounty that you placed on the head of "+ bounty.getName() + + " has been claimed by the bounty hunter, " + player.getCustomName() + ".\nThank you for your patronage, and have a nice day."; + + bounty.getBountyPlacers().forEach(id -> { + Mail bountyMail = new Mail(); + bountyMail.setMailId(core.chatService.generateMailId()); + bountyMail.setTimeStamp((int) (new java.util.Date().getTime() / 1000)); + bountyMail.setRecieverId(id); + bountyMail.setSubject("Bounty Claim Notification"); + bountyMail.setSenderName("Galactic Bounty Network"); + bountyMail.setMessage(message); + bountyMail.setStatus(Mail.NEW); + + core.chatService.storePersistentMessage(bountyMail); + + SWGObject obj = core.objectService.getObject(id); + if (obj != null) + core.chatService.sendPersistentMessageHeader(obj.getClient(), bountyMail); + }); + } + + public void clearActiveMissions(NGECore core, BountyListItem bounty) { + bounty.getAssignedHunters().forEach(id -> { + + CreatureObject hunter = (CreatureObject) core.objectService.getObject(id); + + if (hunter != null) { + hunter.sendSystemMessage(new OutOfBand(new ProsePackage("@bounty_hunter:bounty_failed_hunter", "TT", getMissionObject().getGrandparent().getObjectId())), DisplayType.Broadcast); + hunter.getSlottedObject("datapad").viewChildren(hunter, true, false, new Traverser() { + @Override + public void process(SWGObject item) { + if (item instanceof MissionObject) { + MissionObject mission = (MissionObject) item; + if (mission.getMissionType().equals("bounty")) { + core.missionService.handleMissionAbort(hunter, mission); + } + } + } + }); + } + }); + } + + public void checkBountyActiveStatus(NGECore core) { + BountyListItem bountyTarget = core.missionService.getBountyListItem(getMissionObject().getBountyMarkId()); + CreatureObject player = (CreatureObject) getMissionObject().getGrandparent(); + + if (bountyTarget == null || !bountyTarget.getAssignedHunters().contains(player.getObjectId())) { + player.sendSystemMessage("@bounty_hunter:bounty_incomplete", DisplayType.Broadcast); + core.missionService.handleMissionAbort(player, getMissionObject(), true); + } + } + + public void handleProbeDroidSummon(NGECore core, final CreatureObject actor) { + + actor.sendSystemMessage("@mission/mission_generic:probe_droid_launch_prep", DisplayType.Broadcast); + AtomicInteger countDown = new AtomicInteger(); + + ScheduledFuture summon = Executors.newScheduledThreadPool(1).scheduleAtFixedRate(new Runnable() { + + @Override + public void run() { + switch(countDown.incrementAndGet()) { + case 15: + actor.sendSystemMessage("@mission/mission_generic:probe_droid_arrival_5", DisplayType.Broadcast); + break; + case 16: + actor.sendSystemMessage("@mission/mission_generic:probe_droid_arrival_4", DisplayType.Broadcast); + break; + case 17: + actor.sendSystemMessage("@mission/mission_generic:probe_droid_arrival_3", DisplayType.Broadcast); + break; + case 18: + actor.sendSystemMessage("@mission/mission_generic:probe_droid_arrival_2", DisplayType.Broadcast); + break; + case 19: + actor.sendSystemMessage("@mission/mission_generic:probe_droid_arrival_1", DisplayType.Broadcast); + arakydLandingLocation = SpawnPoint.getRandomPosition(actor.getPosition(), 50, 120, actor.getPlanetId()); + PlayClientEffectLocMessage effectMsg = new PlayClientEffectLocMessage("clienteffect/probot_delivery.cef", actor.getPlanet().getName(), arakydLandingLocation); + actor.getClient().getSession().write(effectMsg.serialize()); + break; + case 20: + break; + case 23: + Quaternion ori = actor.getOrientation(); + + CreatureObject probe = (CreatureObject) NGECore.getInstance().staticService.spawnObject("object/creature/npc/droid/shared_imperial_probot_bounty.iff", + actor.getPlanet().getName(), 0, arakydLandingLocation.x, arakydLandingLocation.y, arakydLandingLocation.z, ori.y, ori.w); + + // TODO: Move probe to the player. + + probe.setAttachment("probotRequester", actor.getObjectID()); + probe.setAttachment("attachedMission", getMissionObject().getObjectID()); + actor.sendSystemMessage("@mission/mission_generic:probe_droid_arrival", DisplayType.Broadcast); + probeSummonTask.cancel(false); + break; + } + } + }, 1, 1, TimeUnit.SECONDS); + + probeSummonTask = summon; + + } + + public void beginSeekerUpdates(NGECore core, CreatureObject actor) { + + if (!seekerActive) { + setSeekerActive(true); + setSeekerPlanet(actor.getPlanet().getName()); + + AtomicInteger updates = new AtomicInteger(); + ScheduledFuture updater = Executors.newScheduledThreadPool(1).scheduleAtFixedRate(new Runnable() { + + @Override + public void run() { + + MissionObject mission = getMissionObject(); + SWGObject target = core.objectService.getObject(markObjId); + + if (target == null) { + actor.sendSystemMessage("@mission/mission_generic:player_target_inactive", DisplayType.Broadcast); + cancelLocationUpdates(); + return; + } else if (target.getPlanet().getName() != getSeekerPlanet()) { + actor.sendSystemMessage("@mission/mission_generic:target_not_on_planet", DisplayType.Broadcast); + cancelLocationUpdates(); + return; + } else { + + if (updates.get() >= 6) { + actor.sendSystemMessage("@mission/mission_generic:target_track_lost", DisplayType.Broadcast); + cancelLocationUpdates(); + return; + } + + WaypointObject missionWp = mission.getAttachedWaypoint(); + + if (missionWp == null) { + WaypointObject waypoint = (WaypointObject) NGECore.getInstance().objectService.createObject("object/waypoint/shared_waypoint.iff", target.getPlanet(), + target.getWorldPosition().x, target.getWorldPosition().z, target.getWorldPosition().y); + waypoint.setActive(true); + waypoint.setColor(WaypointObject.ORANGE); + waypoint.setName(getMissionObject().getMissionTargetName()); + waypoint.setPlanetCRC(CRC.StringtoCRC(target.getPlanet().getName())); + waypoint.setStringAttribute("", ""); + getMissionObject().setAttachedWaypoint(waypoint); + } else { + missionWp.setPosition(target.getWorldPosition()); + mission.setAttachedWaypoint(missionWp); + } + actor.sendSystemMessage("@mission/mission_generic:target_location_updated_ground", DisplayType.Broadcast); + actor.sendSystemMessage("@mission/mission_generic:target_continue_tracking", DisplayType.Broadcast); + updates.getAndIncrement(); + } + } + }, 60, 15, TimeUnit.SECONDS); + + seekerUpdates = updater; + } + } + + public void beginArakydUpdate(final CreatureObject actor) { + arakydActive = true; + Executors.newScheduledThreadPool(1).schedule(() -> { + + int number = new Random().nextInt(100); + + // Effectively a 16% chance of failing. The failure type is calculated by subtracting 10 from the number received. + if (number <= 16 && number != 0) { actor.sendSystemMessage("@mission/mission_generic:target_not_found_" + String.valueOf(10 - number), (byte) 0); return; } + + SWGObject target = NGECore.getInstance().objectService.getObject(markObjId); + if (target == null) { actor.sendSystemMessage("@mission/mission_generic:player_target_inactive", DisplayType.Broadcast); } + + WaypointObject waypoint = (WaypointObject) NGECore.getInstance().objectService.createObject("object/waypoint/shared_waypoint.iff", target.getPlanet(), + target.getWorldPosition().x, target.getWorldPosition().z, target.getWorldPosition().y); + waypoint.setActive(true); + waypoint.setColor(WaypointObject.ORANGE); + waypoint.setName(getMissionObject().getMissionTargetName()); + waypoint.setPlanetCRC(CRC.StringtoCRC(target.getPlanet().getName())); + waypoint.setStringAttribute("", ""); + getMissionObject().setAttachedWaypoint(waypoint); + + actor.sendSystemMessage("@mission/mission_generic:target_location_updated_ground", DisplayType.Broadcast); + actor.sendSystemMessage("@mission/mission_generic:target_located_" + target.getPlanet().getName(), DisplayType.Broadcast); + + }, 180, TimeUnit.SECONDS); + } + + public void cancelLocationUpdates() { + if (seekerUpdates != null) + seekerUpdates.cancel(true); + if (probeSummonTask != null) + probeSummonTask.cancel(true); + + setSeekerActive(false); + setSeekerPlanet(""); + setArakydActive(false); + } + + public Point3D getLastKnownLocation() { return lastKnownLocation; } + + public void setLastKnownLocation(Point3D lastKnownLocation) { this.lastKnownLocation = lastKnownLocation; } + + public long getMarkObjId() { return markObjId; } + + public void setMarkObjId(long markObjId) { this.markObjId = markObjId; } + + public String getLastKnownPlanet() { return lastKnownPlanet; } + + public void setLastKnownPlanet(String lastKnownPlanet) { this.lastKnownPlanet = lastKnownPlanet; } + + public boolean isSeekerActive() { return seekerActive; } + + public void setSeekerActive(boolean seekerActive) { this.seekerActive = seekerActive; } + + public boolean isArakydActive() { return arakydActive; } + + public void setArakydActive(boolean araykdActive) { this.arakydActive = araykdActive; } + + public String getSeekerPlanet() { return seekerPlanet; } + + public void setSeekerPlanet(String seekerPlanet) { this.seekerPlanet = seekerPlanet; } + +} diff --git a/src/resources/objectives/DeliveryMissionObjective.java b/src/resources/objectives/DeliveryMissionObjective.java index b5802390..7d5f029b 100644 --- a/src/resources/objectives/DeliveryMissionObjective.java +++ b/src/resources/objectives/DeliveryMissionObjective.java @@ -21,7 +21,6 @@ ******************************************************************************/ package resources.objectives; -import engine.resources.objects.SWGObject; import engine.resources.scene.Point3D; import main.NGECore; import resources.common.OutOfBand; @@ -34,17 +33,18 @@ import services.mission.MissionObjective; public class DeliveryMissionObjective extends MissionObjective { + private static final long serialVersionUID = 1L; + private TangibleObject deliveryObject; private CreatureObject missionGiver; private CreatureObject dropOffNpc; - private NGECore core = NGECore.getInstance(); public DeliveryMissionObjective(MissionObject parent) { super(parent); } @Override - public void activate() { + public void activate(NGECore core, CreatureObject player) { if (isActivated()) return; @@ -97,25 +97,21 @@ public class DeliveryMissionObjective extends MissionObjective { } @Override - public void complete() { - CreatureObject completer = (CreatureObject) getMissionObject().getGrandparent(); - - if (completer == null) - return; - + public void complete(NGECore core, CreatureObject player) { + int reward = getMissionObject().getCreditReward(); - completer.addBankCredits(reward); + player.addBankCredits(reward); - completer.sendSystemMessage(new OutOfBand(new ProsePackage("@mission/mission_generic:success_w_amount", reward)), (byte) 0); + player.sendSystemMessage(new OutOfBand(new ProsePackage("@mission/mission_generic:success_w_amount", reward)), (byte) 0); - abort(); + abort(core, player); core.objectService.destroyObject(getMissionObject()); } @Override - public void abort() { + public void abort(NGECore core, CreatureObject player) { if (deliveryObject != null) core.objectService.destroyObject(deliveryObject.getObjectId()); @@ -127,7 +123,7 @@ public class DeliveryMissionObjective extends MissionObjective { } @Override - public void update() { + public void update(NGECore core, CreatureObject player) { setObjectivePhase(getObjectivePhase() + 1); @@ -154,10 +150,8 @@ public class DeliveryMissionObjective extends MissionObjective { } } - public boolean createDeliveryItem() { + public boolean createDeliveryItem(NGECore core, CreatureObject player) { - SWGObject player = getMissionObject().getGrandparent(); - if (player == null) return false; diff --git a/src/resources/objectives/DestroyMissionObjective.java b/src/resources/objectives/DestroyMissionObjective.java index e4832756..442e4384 100644 --- a/src/resources/objectives/DestroyMissionObjective.java +++ b/src/resources/objectives/DestroyMissionObjective.java @@ -21,37 +21,42 @@ ******************************************************************************/ package resources.objectives; +import main.NGECore; +import resources.objects.creature.CreatureObject; import resources.objects.mission.MissionObject; import services.mission.MissionObjective; public class DestroyMissionObjective extends MissionObjective { + private static final long serialVersionUID = 1L; + public DestroyMissionObjective(MissionObject parent) { super(parent); } @Override - public void activate() { + public void activate(NGECore core, CreatureObject player) { // TODO Auto-generated method stub - + } @Override - public void complete() { + public void complete(NGECore core, CreatureObject player) { // TODO Auto-generated method stub - + } @Override - public void abort() { + public void abort(NGECore core, CreatureObject player) { // TODO Auto-generated method stub - + } @Override - public void update() { + public void update(NGECore core, CreatureObject player) { // TODO Auto-generated method stub - + } + } diff --git a/src/resources/objectives/SurveyMissionObjective.java b/src/resources/objectives/SurveyMissionObjective.java new file mode 100644 index 00000000..025b15bf --- /dev/null +++ b/src/resources/objectives/SurveyMissionObjective.java @@ -0,0 +1,83 @@ +/******************************************************************************* + * 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.objectives; + +import java.util.concurrent.atomic.AtomicInteger; + +import engine.resources.scene.Point3D; +import main.NGECore; +import resources.datatables.DisplayType; +import resources.objects.creature.CreatureObject; +import resources.objects.mission.MissionObject; +import services.mission.MissionObjective; + +public class SurveyMissionObjective extends MissionObjective{ + + private static final long serialVersionUID = 1L; + + private String resourceFamily; + private Point3D pickupLocation; + private String pickupPlanet; + private int surveyMissionNum; + + public SurveyMissionObjective(MissionObject parent) { + super(parent); + } + + @Override + public void activate(NGECore core, CreatureObject player) { + pickupPlanet = player.getPlanet().getName(); + pickupLocation = player.getPosition(); + resourceFamily = getMissionObject().getMissionTargetName(); + + // This way will allow 2 survey missions at a time. + AtomicInteger number = new AtomicInteger(); + player.getSlottedObject("datapad").viewChildren(player, true, false, (obj) -> { + if (obj instanceof MissionObject && ((MissionObject) obj).getMissionType().equals("survey")) { number.getAndIncrement(); } + }); + player.setAttachment("surveyMission" + Integer.valueOf(number.get()), getMissionObject().getObjectID()); + surveyMissionNum = number.get(); + + player.sendSystemMessage("@mission/mission_generic:survey_start", DisplayType.Broadcast); + } + + @Override + public void complete(NGECore core, CreatureObject player) { + player.addBankCredits(getMissionObject().getCreditReward()); + player.setAttachment("surveyMission" + Integer.valueOf(surveyMissionNum), 0); + } + + @Override + public void abort(NGECore core, CreatureObject player) { + player.setAttachment("surveyMission" + Integer.valueOf(surveyMissionNum), 0); + } + + @Override + public void update(NGECore core, CreatureObject player) { + } + + public String getResourceFamily() { return resourceFamily; } + + public Point3D getPickupLocation() { return pickupLocation; } + + public String getPickupPlanet() { return pickupPlanet; } +} diff --git a/src/resources/objects/Delta.java b/src/resources/objects/Delta.java deleted file mode 100644 index 35ef4299..00000000 --- a/src/resources/objects/Delta.java +++ /dev/null @@ -1,76 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2013 - * - * This File is part of NGECore2. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see . - * - * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. - * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. - ******************************************************************************/ -package resources.objects; - -import java.nio.ByteBuffer; -import java.nio.ByteOrder; - -import org.apache.mina.core.buffer.IoBuffer; -import org.apache.mina.core.buffer.SimpleBufferAllocator; - -import com.sleepycat.persist.model.NotPersistent; -import com.sleepycat.persist.model.Persistent; - -import resources.common.StringUtilities; - -@Persistent -public abstract class Delta implements IDelta { - - @NotPersistent - protected final Object objectMutex = new Object(); - @NotPersistent - private static SimpleBufferAllocator bufferPool = new SimpleBufferAllocator(); - - public Delta() { - - } - - protected String getAsciiString(ByteBuffer buffer) { - return StringUtilities.getAsciiString(buffer); - } - - protected String getUnicodeString(ByteBuffer buffer) { - return StringUtilities.getUnicodeString(buffer); - } - - protected byte[] getAsciiString(String string) { - return StringUtilities.getAsciiString(string); - } - - protected byte[] getUnicodeString(String string) { - return StringUtilities.getUnicodeString(string); - } - - protected byte getBoolean(boolean variable) { - return ((byte) ((variable) ? 1 : 0)); - } - - public static IoBuffer createBuffer(int size) { - return IoBuffer.allocate(size, false).order(ByteOrder.LITTLE_ENDIAN); - } - - public static IoBuffer resizeBuffer(IoBuffer buffer) { - int size = buffer.position(); - return buffer == null ? createBuffer(0) : createBuffer(size).put(buffer.flip().array(), 0, size).flip(); - } - -} diff --git a/src/resources/objects/ObjectMessageBuilder.java b/src/resources/objects/ObjectMessageBuilder.java index 4ae29461..20a294c8 100644 --- a/src/resources/objects/ObjectMessageBuilder.java +++ b/src/resources/objects/ObjectMessageBuilder.java @@ -24,25 +24,112 @@ package resources.objects; import java.io.UnsupportedEncodingException; import java.nio.ByteBuffer; import java.nio.ByteOrder; +import java.util.Map; import org.apache.mina.core.buffer.IoBuffer; import org.apache.mina.core.buffer.SimpleBufferAllocator; -import com.sleepycat.persist.model.NotPersistent; -import com.sleepycat.persist.model.Persistent; - import resources.common.Opcodes; - +import engine.resources.common.StringUtilities; +import engine.resources.objects.Baseline; +import engine.resources.objects.Builder; import engine.resources.objects.SWGObject; -@Persistent -public abstract class ObjectMessageBuilder { +public class ObjectMessageBuilder { + protected SWGObject object; - public SWGObject object; - @NotPersistent - public SimpleBufferAllocator bufferPool = new SimpleBufferAllocator(); + public ObjectMessageBuilder(SWGObject object) { + this.object = object; + } + + public ObjectMessageBuilder() { + } + + public void buildBaseline1(Map baselineBuilders, Map deltaBuilders) { + /* + baselineBuilders.put(5, new Builder { + public byte[] build() { + IoBuffer = Baseline.createBuffer(2); + buffer.putShort((short) 27); + return buffer.array(); + } + }); + + deltaBuilders.put(7, new Builder { + public byte[] build() { + IoBuffer = Baseline.createBuffer(4); + buffer.putInt(27); + return buffer.array(); + } + }); + */ + } + + public void buildBaseline3(Map baselineBuilders, Map deltaBuilders) { + + } + + public void buildBaseline4(Map baselineBuilders, Map deltaBuilders) { + + } + + public void buildBaseline6(Map baselineBuilders, Map deltaBuilders) { + + } + + public void buildBaseline7(Map baselineBuilders, Map deltaBuilders) { + + } + + public void buildBaseline8(Map baselineBuilders, Map deltaBuilders) { + + } + + public void buildBaseline9(Map baselineBuilders, Map deltaBuilders) { + + } + + public IoBuffer createBuffer(int size, boolean autoSize) { + return createBuffer(size).setAutoExpand(autoSize); + } + + public IoBuffer createBuffer(int size) { + return Baseline.createBuffer(size); + } + + protected byte getBoolean(boolean variable) { + return Baseline.getBoolean(variable); + } + + protected String getAsciiString(ByteBuffer buffer) { + return StringUtilities.getAsciiString(buffer); + } + + protected String getUnicodeString(ByteBuffer buffer) { + return StringUtilities.getUnicodeString(buffer); + } + + protected byte[] getAsciiString(String string) { + return StringUtilities.getAsciiString(string); + } + + protected byte[] getUnicodeString(String string) { + return StringUtilities.getUnicodeString(string); + } + + // Temporary for compatibility + public SimpleBufferAllocator bufferPool = new SimpleBufferAllocator(); + + public SWGObject getObject() { + return object; + } + + public void setObject(SWGObject object) { + this.object = object; + } + public IoBuffer createBaseline(String objectType, byte viewType, IoBuffer data, int size) { IoBuffer buffer = bufferPool.allocate(23 + size, false).order(ByteOrder.LITTLE_ENDIAN); @@ -83,92 +170,11 @@ public abstract class ObjectMessageBuilder { return buffer; } - public IoBuffer createDelta(String objectType, byte viewType, short updateCount, IoBuffer data, int size) { - IoBuffer buffer = bufferPool.allocate(25 + size, false).order(ByteOrder.LITTLE_ENDIAN); - - buffer.putShort((short) 5); - buffer.putInt(Opcodes.DeltasMessage); - buffer.putLong(object.getObjectID()); - try { - buffer.put(reverse(objectType).getBytes("US-ASCII")); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - } - buffer.put(viewType); - buffer.putInt(size); - buffer.putShort(updateCount); - buffer.put(data); - buffer.flip(); - - return buffer; - } - - public IoBuffer createDeltaObject(short updateType, IoBuffer data, int size) { - IoBuffer buffer = bufferPool.allocate(2 + size, false).order(ByteOrder.LITTLE_ENDIAN); - - buffer.putShort(updateType); - buffer.put(data.array()); - - return buffer; - } - - public SWGObject getObject() { return object; } - public void setObject(SWGObject object) { this.object = object; } - - public abstract void sendListDelta(byte viewType, short updateType, IoBuffer buffer); - - public abstract void sendBaselines(); - private String reverse(String reverseString) { if (reverseString.length() <= 1) return reverseString; return reverse(reverseString.substring(1, reverseString.length())) + reverseString.charAt(0); } - - protected String getAsciiString(ByteBuffer buffer) { return getString(buffer, "US-ASCII"); } - protected String getUnicodeString(ByteBuffer buffer) { return getString(buffer, "UTF-16LE"); } - protected byte[] getAsciiString(String string) { return getString(string, "US-ASCII"); } - protected byte[] getUnicodeString(String string) { return getString(string, "UTF-16LE"); } - private String getString(ByteBuffer buffer, String charFormat) { - String result; - int length; - if (charFormat == "UTF-16LE") - length = buffer.order(ByteOrder.LITTLE_ENDIAN).getInt(); - else - length = buffer.order(ByteOrder.LITTLE_ENDIAN).getShort(); - - int bufferPosition = buffer.position(); - try { - result = new String(buffer.array(), bufferPosition, length, charFormat); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - return ""; - } - buffer.position(bufferPosition + length); - - return result; - } - - private byte[] getString(String string, String charFormat) { - ByteBuffer result; - int length = 2 + string.length(); - if (charFormat == "UTF-16LE") { - result = ByteBuffer.allocate(length * 2).order(ByteOrder.LITTLE_ENDIAN); - result.putInt(string.length()); - } - else { - result = ByteBuffer.allocate(length).order(ByteOrder.LITTLE_ENDIAN); - result.putShort((short)string.length()); - } - try { - result.put(string.getBytes(charFormat)); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - return new byte[] { }; - } - return result.array(); - } - } diff --git a/src/resources/objects/SWGList.java b/src/resources/objects/SWGList.java index 7471305c..781a676d 100644 --- a/src/resources/objects/SWGList.java +++ b/src/resources/objects/SWGList.java @@ -21,7 +21,7 @@ ******************************************************************************/ package resources.objects; -import java.nio.ByteOrder; +import java.io.Serializable; import java.util.ArrayList; import java.util.Collection; import java.util.Comparator; @@ -29,6 +29,7 @@ import java.util.Iterator; import java.util.List; import java.util.ListIterator; import java.util.Spliterator; +import java.util.concurrent.CopyOnWriteArrayList; import java.util.function.Consumer; import java.util.function.Predicate; import java.util.function.UnaryOperator; @@ -37,53 +38,70 @@ import java.util.stream.Stream; import org.apache.mina.core.buffer.IoBuffer; import org.python.google.common.collect.Lists; -import com.sleepycat.persist.model.NotPersistent; -import com.sleepycat.persist.model.Persistent; +import engine.resources.objects.Baseline; +import engine.resources.objects.Delta; +import engine.resources.objects.IDelta; +import engine.resources.objects.SWGObject; -/* A SWGList element MUST implement IDelta, or it will refuse to work with it */ +/* A SWGList element should extend Delta or implement IDelta */ -@Persistent -public class SWGList implements List { +public class SWGList implements List, Serializable { - private List list = new ArrayList(); - @NotPersistent - private int updateCounter = 1; - private ObjectMessageBuilder messageBuilder; + private static final long serialVersionUID = 1L; + + private List list = new CopyOnWriteArrayList(); + private transient int updateCounter = 0; private byte viewType; private short updateType; - @NotPersistent - protected final Object objectMutex = new Object(); + private boolean addByte; + protected transient Object objectMutex = new Object(); + private transient SWGObject object; public SWGList() { } - public SWGList(ObjectMessageBuilder messageBuilder, int viewType, int updateType) { - this.messageBuilder = messageBuilder; + public SWGList(SWGObject object, int viewType, int updateType, boolean addByte) { this.viewType = (byte) viewType; this.updateType = (short) updateType; + this.addByte = addByte; + this.object = object; } - @Override + public void init(SWGObject object) { + objectMutex = new Object(); + updateCounter = 0; + this.object = object; + + for (Object item : list) { + try { + if (item instanceof IDelta) { + item.getClass().getMethod("init", new Class[] { SWGObject.class }).invoke(item, new Object[] { object }); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + } + public boolean add(E e) { synchronized(objectMutex) { - if (list.add(e) && e instanceof IDelta) { - queue(item(1, list.lastIndexOf(e), ((IDelta) e).getBytes(), true, true)); + if (valid(e) && list.add(e)) { + queue(item(1, list.lastIndexOf(e), Baseline.toBytes(e), true, true)); return true; - } + } + return false; } } - @Override public void add(int index, E element) { synchronized(objectMutex) { - if (element instanceof IDelta) { + if (valid(element)) { list.add(index, element); - queue(item(1, index, ((IDelta) element).getBytes(), true, true)); + queue(item(1, index, Baseline.toBytes(element), true, true)); } } } - @Override public boolean addAll(Collection c) { synchronized(objectMutex) { if (!c.isEmpty()) { @@ -91,9 +109,9 @@ public class SWGList implements List { boolean success = false; for (E element : c) { - if (element instanceof IDelta) { + if (valid(element)) { if (list.add(element)) { - buffer.add(item(1, list.lastIndexOf(element), ((IDelta) element).getBytes(), true, true)); + buffer.add(item(1, list.lastIndexOf(element), Baseline.toBytes(element), true, true)); success = true; } } else { @@ -112,16 +130,15 @@ public class SWGList implements List { } } - @Override public boolean addAll(int index, Collection c) { synchronized(objectMutex) { if (!c.isEmpty()) { List buffer = new ArrayList(); for (E element : c) { - if (element instanceof IDelta) { + if (valid(element)) { list.add(index, element); - buffer.add(item(1, index, ((IDelta) element).getBytes(), true, true)); + buffer.add(item(1, index, Baseline.toBytes(element), true, true)); index++; } else { return false; @@ -137,7 +154,6 @@ public class SWGList implements List { } } - @Override public void clear() { synchronized(objectMutex) { list.clear(); @@ -145,21 +161,22 @@ public class SWGList implements List { } } - @Override public boolean contains(Object o) { synchronized(objectMutex) { return list.contains(o); } } - @Override public boolean containsAll(Collection c) { synchronized(objectMutex) { return list.containsAll(c); } } - @Override + public void forEach(Consumer action) { + list.forEach(action); + } + public E get(int index) { synchronized(objectMutex) { return list.get(index); @@ -170,49 +187,48 @@ public class SWGList implements List { return list; } - @Override public int indexOf(Object o) { synchronized(objectMutex) { return list.indexOf(o); } } - @Override public boolean isEmpty() { synchronized(objectMutex) { return list.isEmpty(); } } - @Override public Iterator iterator() { synchronized(objectMutex) { return list.iterator(); } } - @Override public int lastIndexOf(Object o) { synchronized(objectMutex) { return list.lastIndexOf(o); } } - @Override public ListIterator listIterator() { synchronized(objectMutex) { return list.listIterator(); } } - @Override public ListIterator listIterator(int index) { synchronized(objectMutex) { return listIterator(index); } } - @Override + public Stream parallelStream() { + synchronized(objectMutex) { + return list.parallelStream(); + } + } + public boolean remove(Object o) { synchronized(objectMutex) { int index = list.indexOf(o); @@ -226,7 +242,6 @@ public class SWGList implements List { } } - @Override public E remove(int index) { synchronized(objectMutex) { E element = list.remove(index); @@ -237,7 +252,6 @@ public class SWGList implements List { } } - @Override public boolean removeAll(Collection c) { synchronized(objectMutex) { if (!c.isEmpty()) { @@ -265,20 +279,34 @@ public class SWGList implements List { } } - @Override + public void replaceAll(UnaryOperator operator) { + System.err.println("SWGList::sort: Not currently supported."); + } + public boolean retainAll(Collection c) { synchronized(objectMutex) { return list.retainAll(c); } } - @Override + public List reverseGet() { + synchronized(objectMutex) { + return Lists.reverse(list); + } + } + + public boolean removeIf(Predicate filter) { + synchronized(objectMutex) { + return false; + } + } + public E set(int index, E element) { synchronized(objectMutex) { - if (element instanceof IDelta) { + if (valid(element)) { E previousElement = list.set(index, element); - queue(item(2, index, ((IDelta) element).getBytes(), true, true)); + queue(item(2, index, Baseline.toBytes(element), true, true)); return previousElement; } @@ -293,10 +321,10 @@ public class SWGList implements List { if (!list.isEmpty()) { for (E element : list) { - if (element instanceof IDelta) { - IoBuffer buffer = messageBuilder.bufferPool.allocate((newListData.length + ((IDelta) element).getBytes().length), false).order(ByteOrder.LITTLE_ENDIAN); + if (valid(element)) { + IoBuffer buffer = Delta.createBuffer((newListData.length + Baseline.toBytes(element).length)); buffer.put(newListData); - buffer.put(((IDelta) element).getBytes()); + buffer.put(Baseline.toBytes(element)); newListData = buffer.array(); } else { return false; @@ -315,28 +343,42 @@ public class SWGList implements List { } } - @Override public int size() { synchronized(objectMutex) { return list.size(); } } - @Override + public void sort(Comparator c) { + synchronized(objectMutex) { + System.err.println("SWGList::sort: Not supported."); + } + } + + public Spliterator spliterator() { + synchronized(objectMutex) { + return list.spliterator(); + } + } + + public Stream stream() { + synchronized(objectMutex) { + return list.stream(); + } + } + public List subList(int fromIndex, int toIndex) { synchronized(objectMutex) { return list.subList(fromIndex, toIndex); } } - @Override public Object[] toArray() { synchronized(objectMutex) { return list.toArray(); } } - @Override public T[] toArray(T[] a) { synchronized(objectMutex) { return list.toArray(a); @@ -344,25 +386,61 @@ public class SWGList implements List { } public int getUpdateCounter() { - return updateCounter; + synchronized(objectMutex) { + return updateCounter; + } } public Object getMutex() { return objectMutex; } + public byte[] getBytes() { + synchronized(objectMutex) { + byte[] objects = { }; + int size = 0; + + for (Object o : list) { + byte[] object = Baseline.toBytes(o); + size += object.length; + + IoBuffer buffer = Delta.createBuffer(size); + buffer.put(objects); + if (addByte) buffer.put((byte) 0); + buffer.put(object); + buffer.flip(); + + objects = buffer.array(); + } + + IoBuffer buffer = Delta.createBuffer(8 + size); + buffer.putInt(list.size()); + buffer.putInt(updateCounter); + buffer.put(objects); + buffer.flip(); + + return buffer.array(); + } + } + + private boolean valid(Object o) { + if (o instanceof String || o instanceof Byte || o instanceof Short || + o instanceof Integer || o instanceof Float || o instanceof Long || + o instanceof IDelta) { + return true; + } else { + return false; + } + } + private byte[] item(int type, int index, byte[] data, boolean useIndex, boolean useData) { int size = 1 + ((useIndex) ? 2 : 0) + ((useData) ? data.length : 0); - if (messageBuilder == null) { - updateCounter++; - return new byte[] { }; - } - - IoBuffer buffer = messageBuilder.bufferPool.allocate((size), false).order(ByteOrder.LITTLE_ENDIAN); + IoBuffer buffer = Delta.createBuffer(size); buffer.put((byte) type); if (useIndex) buffer.putShort((short) index); if (useData) buffer.put(data); + buffer.flip(); updateCounter++; @@ -370,11 +448,12 @@ public class SWGList implements List { } private void queue(byte[] data) { - IoBuffer buffer = messageBuilder.bufferPool.allocate((data.length + 8), false).order(ByteOrder.LITTLE_ENDIAN); + IoBuffer buffer = Delta.createBuffer((data.length + 8)); buffer.putInt(1); buffer.putInt(updateCounter); buffer.put(data); - messageBuilder.sendListDelta(viewType, updateType, buffer); + buffer.flip(); + object.sendListDelta(viewType, updateType, buffer); } private void queue(List data) { @@ -384,58 +463,13 @@ public class SWGList implements List { size += queued.length; } - IoBuffer buffer = messageBuilder.bufferPool.allocate((size + 8), false).order(ByteOrder.LITTLE_ENDIAN); + IoBuffer buffer = Delta.createBuffer((size + 8)); buffer.putInt(data.size()); buffer.putInt(updateCounter); for (byte[] queued : data) buffer.put(queued); + buffer.flip(); - messageBuilder.sendListDelta(viewType, updateType, buffer); - } - - @Override - public boolean removeIf(Predicate filter) { - return false; - } - - public List reverseGet() - { - return Lists.reverse(list); - } - - @Override - public Stream stream() { - // TODO Auto-generated method stub - return null; - } - - @Override - public Stream parallelStream() { - // TODO Auto-generated method stub - return null; - } - - @Override - public void forEach(Consumer action) { - // TODO Auto-generated method stub - - } - - @Override - public void replaceAll(UnaryOperator operator) { - // TODO Auto-generated method stub - - } - - @Override - public void sort(Comparator c) { - // TODO Auto-generated method stub - - } - - @Override - public Spliterator spliterator() { - // TODO Auto-generated method stub - return null; + object.sendListDelta(viewType, updateType, buffer); } } diff --git a/src/resources/objects/SWGMap.java b/src/resources/objects/SWGMap.java index b8f9610d..89e25a13 100644 --- a/src/resources/objects/SWGMap.java +++ b/src/resources/objects/SWGMap.java @@ -21,60 +21,96 @@ ******************************************************************************/ package resources.objects; -import java.nio.ByteOrder; +import java.io.Serializable; import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Map; import java.util.Set; import java.util.TreeMap; -import java.util.Map.Entry; import java.util.function.BiConsumer; import java.util.function.BiFunction; import java.util.function.Function; import org.apache.mina.core.buffer.IoBuffer; -import resources.common.StringUtilities; - -import com.sleepycat.persist.model.NotPersistent; import com.sleepycat.persist.model.Persistent; -@SuppressWarnings("unused") +import engine.resources.objects.Baseline; +import engine.resources.objects.Delta; +import engine.resources.objects.IDelta; +import engine.resources.objects.SWGObject; + +/* A SWGMap element should extend Delta or implement IDelta */ @Persistent -public class SWGMap implements Map { +public class SWGMap implements Map, Serializable { + private static final long serialVersionUID = 1L; private Map map = new TreeMap(); - @NotPersistent - private int updateCounter = 0; - private ObjectMessageBuilder messageBuilder; + private transient int updateCounter = 0; private byte viewType; private short updateType; - @NotPersistent - protected final Object objectMutex = new Object(); + private boolean addByte; + protected transient Object objectMutex = new Object(); + private transient SWGObject object; public SWGMap() { } - public SWGMap(ObjectMessageBuilder messageBuilder, int viewType, int updateType) { - this.messageBuilder = messageBuilder; + public SWGMap(SWGObject object, int viewType, int updateType, boolean addByte) { this.viewType = (byte) viewType; this.updateType = (short) updateType; + this.addByte = addByte; + this.object = object; } public SWGMap(Map m) { if (m instanceof SWGMap) { - this.messageBuilder = ((SWGMap) m).messageBuilder; + this.object = ((SWGMap) m).object; this.viewType = ((SWGMap) m).viewType; this.updateType = ((SWGMap) m).updateType; map.putAll(m); } } + public void init(SWGObject object) { + objectMutex = new Object(); + updateCounter = 0; + this.object = object; + + for (Object item : map.values()) { + try { + if (item instanceof IDelta) { + item.getClass().getMethod("init", new Class[] { SWGObject.class }).invoke(item, new Object[] { object }); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + } + public void clear() { throw new UnsupportedOperationException(); } + public V computeIfAbsent(K key, Function mappingFunction) { + synchronized(objectMutex) { + return map.computeIfAbsent(key, mappingFunction); + } + } + + public V computeIfPresent(K key, BiFunction remappingFunction) { + synchronized(objectMutex) { + return map.computeIfPresent(key, remappingFunction); + } + } + + public V compute(K key, BiFunction remappingFunction) { + synchronized(objectMutex) { + return map.compute(key, remappingFunction); + } + } + public boolean containsKey(Object key) { synchronized(objectMutex) { return map.containsKey(key); @@ -93,12 +129,22 @@ public class SWGMap implements Map { } } + public void forEach(BiConsumer action) { + map.forEach(action); + } + public V get(Object key) { synchronized(objectMutex) { return map.get(key); } } + public V getOrDefault(Object key, V defaultValue) { + synchronized(objectMutex) { + return map.getOrDefault(key, defaultValue); + } + } + public boolean isEmpty() { synchronized(objectMutex) { return map.isEmpty(); @@ -111,23 +157,26 @@ public class SWGMap implements Map { } } + public V merge(K key, V value, BiFunction remappingFunction) { + System.err.println("SWGMap::merge: Not implemented."); + return null; + } + public V put(K key, V value) { synchronized(objectMutex) { - if ((key instanceof String || key instanceof Byte || key instanceof Short || - key instanceof Integer || key instanceof Float ||key instanceof Long) && - value instanceof IDelta) { + if (valid(key) && valid(value)) { if (map.containsKey(key)) { V oldValue = map.put(key, value); if (oldValue != null) { - queue(item(2, (String) key, ((IDelta) value).getBytes(), true, true)); + queue(item(2, key, Baseline.toBytes(value), true, true)); } return oldValue; } else { V oldValue = map.put(key, value); - queue(item(0, (String) key, ((IDelta) value).getBytes(), true, true)); + queue(item(0, key, Baseline.toBytes(value), true, true)); return oldValue; } @@ -145,16 +194,14 @@ public class SWGMap implements Map { K key = entry.getKey(); V value = entry.getValue(); - if (key instanceof String || key instanceof Byte || key instanceof Short || - key instanceof Integer || key instanceof Float || key instanceof Long || - value instanceof IDelta) { + if (valid(key) && valid(value)) { if (map.containsKey(key)) { if (map.put(key, value) != null) { - buffer.add(item(2, (String) key, ((IDelta) value).getBytes(), true, true)); + buffer.add(item(2, key, Baseline.toBytes(value), true, true)); } } else { if (map.put(key, value) != null) { - buffer.add(item(0, (String) key, ((IDelta) value).getBytes(), true, true)); + buffer.add(item(0, key, Baseline.toBytes(value), true, true)); } } } @@ -166,14 +213,21 @@ public class SWGMap implements Map { } } + public V putIfAbsent(K key, V value) { + if (!map.containsKey(key)) { + return put(key, value); + } + + return null; + } + public V remove(Object key) { synchronized(objectMutex) { - if (key instanceof String || key instanceof Byte || key instanceof Short || - key instanceof Integer || key instanceof Float || key instanceof Long) { + if (valid(key)) { V value = map.remove(key); if (value != null) { - queue(item(1, (String) key, ((IDelta) value).getBytes(), true, true)); + queue(item(1, key, Baseline.toBytes(value), true, true)); } return value; @@ -183,6 +237,47 @@ public class SWGMap implements Map { } } + public boolean remove(Object key, Object value) { + synchronized(objectMutex) { + if (valid(key) && valid(value)) { + boolean removed = map.remove(key, value); + + if (removed) { + queue(item(1, key, Baseline.toBytes(value), true, true)); + } + + return removed; + } + + return false; + } + } + + public V replace(K key, V value) { + synchronized(objectMutex) { + if (map.containsKey(key)) { + return put(key, value); + } + + return null; + } + } + + public boolean replace(K key, V oldValue, V newValue) { + synchronized(objectMutex) { + if (map.containsKey(key) && map.containsValue(oldValue)) { + put(key, newValue); + return true; + } + + return false; + } + } + + public void replaceAll(BiFunction function) { + System.err.println("SWGMap::replaceAll: Not implemented."); + } + public int size() { synchronized(objectMutex) { return map.size(); @@ -205,49 +300,71 @@ public class SWGMap implements Map { return objectMutex; } + public byte[] getBytes() { + synchronized(objectMutex) { + byte[] objects = { }; + int size = 0; + + for (Entry entry : map.entrySet()) { + byte[] key = Baseline.toBytes(entry.getKey()); + byte[] value = Baseline.toBytes(entry.getValue()); + size += ((addByte) ? 1 : 0) + key.length + value.length; + + IoBuffer buffer = Baseline.createBuffer(size); + buffer.put(objects); + if (addByte) buffer.put((byte) 0); + buffer.put(key); + buffer.put(value); + buffer.flip(); + + objects = buffer.array(); + } + + IoBuffer buffer = Baseline.createBuffer(8 + size); + buffer.putInt(map.size()); + buffer.putInt(updateCounter); + buffer.put(objects); + buffer.flip(); + + return buffer.array(); + } + } + + private boolean valid(Object o) { + if (o instanceof String || o instanceof Byte || o instanceof Short || + o instanceof Integer || o instanceof Float || o instanceof Long || + o instanceof IDelta) { + return true; + } else { + return false; + } + } + private byte[] item(int type, Object index, byte[] data, boolean useIndex, boolean useData) { - if (useIndex && !(index instanceof Byte) && !(index instanceof Short) - && !(index instanceof Integer) && !(index instanceof Float) - && !(index instanceof Long) && !(index instanceof String)) { + if (useIndex && ((index instanceof IDelta) && !valid(index))) { throw new IllegalArgumentException(); } - int size = 1 + ((useIndex) ? (2 + index.toString().getBytes().length) : 0) + ((useData) ? data.length : 0); - - IoBuffer buffer = messageBuilder.bufferPool.allocate((size), false).order(ByteOrder.LITTLE_ENDIAN); + int size = 1 + ((useIndex) ? (Baseline.toBytes(index).length) : 0) + ((useData) ? data.length : 0); + + IoBuffer buffer = Delta.createBuffer(size); buffer.put((byte) type); - if (useIndex) { - if (index instanceof String) { - buffer.put(StringUtilities.getAsciiString((String) index)); - } else if (index instanceof Byte) { - buffer.put(((Byte) index).byteValue()); - } else if (index instanceof Short) { - buffer.putShort(((Short) index).shortValue()); - } else if (index instanceof Integer) { - buffer.putInt(((Integer) index).intValue()); - } else if (index instanceof Float) { - buffer.putFloat(((Float) index).floatValue()); - } else if (index instanceof Long) { - buffer.putLong(((Long) index).longValue()); - } else { - throw new IllegalArgumentException(); - } - } - if (useData) buffer.put(data); - buffer.flip(); - - updateCounter++; - - return buffer.array(); + if (useIndex) buffer.put(Baseline.toBytes(index)); + if (useData) buffer.put(data); + buffer.flip(); + + updateCounter++; + + return buffer.array(); } - + private void queue(byte[] data) { - IoBuffer buffer = messageBuilder.bufferPool.allocate((data.length + 8), false).order(ByteOrder.LITTLE_ENDIAN); + IoBuffer buffer = Delta.createBuffer(data.length + 8); buffer.putInt(1); buffer.putInt(updateCounter); buffer.put(data); buffer.flip(); - messageBuilder.sendListDelta(viewType, updateType, buffer); + object.sendListDelta(viewType, updateType, buffer); } private void queue(List data) { @@ -257,84 +374,13 @@ public class SWGMap implements Map { size += queued.length; } - IoBuffer buffer = messageBuilder.bufferPool.allocate((size + 8), false).order(ByteOrder.LITTLE_ENDIAN); + IoBuffer buffer = Delta.createBuffer((size + 8)); buffer.putInt(data.size()); buffer.putInt(updateCounter); for (byte[] queued : data) buffer.put(queued); buffer.flip(); - messageBuilder.sendListDelta(viewType, updateType, buffer); - } - - @Override - public V getOrDefault(Object key, V defaultValue) { - // TODO Auto-generated method stub - return null; - } - - @Override - public void forEach(BiConsumer action) { - // TODO Auto-generated method stub - - } - - @Override - public void replaceAll( - BiFunction function) { - // TODO Auto-generated method stub - - } - - @Override - public V putIfAbsent(K key, V value) { - // TODO Auto-generated method stub - return null; - } - - @Override - public boolean remove(Object key, Object value) { - // TODO Auto-generated method stub - return false; - } - - @Override - public boolean replace(K key, V oldValue, V newValue) { - // TODO Auto-generated method stub - return false; - } - - @Override - public V replace(K key, V value) { - // TODO Auto-generated method stub - return null; - } - - @Override - public V computeIfAbsent(K key, - Function mappingFunction) { - // TODO Auto-generated method stub - return null; - } - - @Override - public V computeIfPresent(K key, - BiFunction remappingFunction) { - // TODO Auto-generated method stub - return null; - } - - @Override - public V compute(K key, - BiFunction remappingFunction) { - // TODO Auto-generated method stub - return null; - } - - @Override - public V merge(K key, V value, - BiFunction remappingFunction) { - // TODO Auto-generated method stub - return null; + object.sendListDelta(viewType, updateType, buffer); } } diff --git a/src/resources/objects/SWGMultiMap.java b/src/resources/objects/SWGMultiMap.java index 850b55f9..f0bb5083 100644 --- a/src/resources/objects/SWGMultiMap.java +++ b/src/resources/objects/SWGMultiMap.java @@ -21,59 +21,69 @@ ******************************************************************************/ package resources.objects; -import java.nio.ByteOrder; +import java.io.Serializable; import java.util.ArrayList; import java.util.Collection; -import java.util.Comparator; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; -import java.util.TreeMap; import org.apache.mina.core.buffer.IoBuffer; import org.python.google.common.collect.ArrayListMultimap; import org.python.google.common.collect.Multimap; import org.python.google.common.collect.Multiset; -import org.python.google.common.collect.Ordering; -import org.python.google.common.collect.TreeMultimap; -import resources.common.StringUtilities; +import engine.resources.objects.Baseline; +import engine.resources.objects.Delta; +import engine.resources.objects.IDelta; +import engine.resources.objects.SWGObject; -import com.sleepycat.persist.model.NotPersistent; -import com.sleepycat.persist.model.Persistent; - -@SuppressWarnings("unused") - -@Persistent -public class SWGMultiMap implements Multimap { +public class SWGMultiMap implements Multimap, Serializable { + private static final long serialVersionUID = 1L; private Multimap map = ArrayListMultimap.create(); - @NotPersistent - private int updateCounter = 0; - private ObjectMessageBuilder messageBuilder; + private transient int updateCounter = 0; private byte viewType; private short updateType; - @NotPersistent - protected final Object objectMutex = new Object(); + private boolean addByte; + protected transient Object objectMutex = new Object(); + private transient SWGObject object; public SWGMultiMap() { } - public SWGMultiMap(ObjectMessageBuilder messageBuilder, int viewType, int updateType) { - this.messageBuilder = messageBuilder; + public SWGMultiMap(SWGObject object, int viewType, int updateType, boolean addByte) { this.viewType = (byte) viewType; this.updateType = (short) updateType; + this.addByte = addByte; + this.object = object; } public SWGMultiMap(Multimap m) { if (m instanceof SWGMultiMap) { - this.messageBuilder = ((SWGMultiMap) m).messageBuilder; + this.object = ((SWGMultiMap) m).object; this.viewType = ((SWGMultiMap) m).viewType; this.updateType = ((SWGMultiMap) m).updateType; map.putAll(m); } } + public void init(SWGObject object) { + objectMutex = new Object(); + updateCounter = 0; + this.object = object; + + for (Object item : map.values()) { + try { + if (item instanceof IDelta) { + item.getClass().getMethod("init", new Class[] { SWGObject.class }).invoke(item, new Object[] { object }); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + } + public Map> asMap() { synchronized(objectMutex) { return map.asMap(); @@ -134,11 +144,9 @@ public class SWGMultiMap implements Multimap { public boolean put(K key, V value) { synchronized(objectMutex) { - if (key instanceof String || key instanceof Byte || key instanceof Short || - key instanceof Integer || key instanceof Float || key instanceof Long || - value instanceof IDelta) { + if (valid(key) && valid(value)) { if (map.put(key, value)) { - queue(item(0, (String) key, ((IDelta) value).getBytes(), true, true)); + queue(item(0, key, Baseline.toBytes(value), true, true)); return true; } } @@ -149,14 +157,13 @@ public class SWGMultiMap implements Multimap { public boolean putAll(K key, Iterable values) { synchronized(objectMutex) { - if (key instanceof String || key instanceof Byte || key instanceof Short || - key instanceof Integer || key instanceof Float || key instanceof Long) { + if (valid(key)) { List buffer = new ArrayList(); for (V value : values) { - if (value instanceof IDelta) { + if (valid(value)) { if (map.put(key, value)) { - buffer.add(item(0, (String) key, ((IDelta) value).getBytes(), true, true)); + buffer.add(item(0, key, Baseline.toBytes(value), true, true)); } } } @@ -179,11 +186,9 @@ public class SWGMultiMap implements Multimap { K key = entry.getKey(); V value = entry.getValue(); - if (key instanceof String || key instanceof Byte || key instanceof Short || - key instanceof Integer || key instanceof Float || key instanceof Long || - value instanceof IDelta) { + if (valid(key) && valid(value)) { if (this.map.put(key, value)) { - buffer.add(item(0, (String) key, ((IDelta) value).getBytes(), true, true)); + buffer.add(item(0, key, Baseline.toBytes(value), true, true)); } } } @@ -197,13 +202,11 @@ public class SWGMultiMap implements Multimap { } } - @SuppressWarnings("unchecked") public boolean remove(Object key, Object value) { synchronized(objectMutex) { - if (key instanceof String || key instanceof Byte || key instanceof Short || - key instanceof Integer || key instanceof Float || key instanceof Long) { + if (valid(key)) { if (map.remove(key, value)) { - queue(item(1, (String) key, ((IDelta) map.get((K) key)).getBytes(), true, true)); + queue(item(1, key, Baseline.toBytes(value), true, true)); return true; } @@ -216,14 +219,13 @@ public class SWGMultiMap implements Multimap { @SuppressWarnings("unchecked") public Collection removeAll(Object key) { synchronized(objectMutex) { - if (key instanceof String || key instanceof Byte || key instanceof Short || - key instanceof Integer || key instanceof Float || key instanceof Long) { + if (valid(key)) { Collection collection = map.get((K) key); List buffer = new ArrayList(); for (V value : map.get((K) key)) { if (map.remove(key, value)) { - buffer.add(item(1, (String) key, ((IDelta) map.get((K) key)).getBytes(), true, true)); + buffer.add(item(1, key, Baseline.toBytes(value), true, true)); } } @@ -239,15 +241,14 @@ public class SWGMultiMap implements Multimap { public Collection replaceValues(K key, Iterable values) { synchronized(objectMutex) { - if (key instanceof String || key instanceof Byte || key instanceof Short || - key instanceof Integer || key instanceof Float || key instanceof Long) { + if (valid(key)) { if (map.containsKey(key)) { List buffer = new ArrayList(); for (V value : values) { - if (value instanceof IDelta) { + if (valid(value)) { if (!map.get(key).contains(value)) { - buffer.add(item(2, (String) key, ((IDelta) value).getBytes(), true, true)); + buffer.add(item(2, key, Baseline.toBytes(value), true, true)); } } else { return null; @@ -287,6 +288,46 @@ public class SWGMultiMap implements Multimap { return objectMutex; } + public byte[] getBytes() { + synchronized(objectMutex) { + byte[] objects = { }; + int size = 0; + + for (Entry entry : map.entries()) { + byte[] key = Baseline.toBytes(entry.getKey()); + byte[] value = Baseline.toBytes(entry.getValue()); + size += ((addByte) ? 1 : 0) + key.length + value.length; + + IoBuffer buffer = Baseline.createBuffer(size); + buffer.put(objects); + if (addByte) buffer.put((byte) 0); + buffer.put(key); + buffer.put(value); + buffer.flip(); + + objects = buffer.array(); + } + + IoBuffer buffer = Baseline.createBuffer(8 + size); + buffer.putInt(map.size()); + buffer.putInt(updateCounter); + buffer.put(objects); + buffer.flip(); + + return buffer.array(); + } + } + + private boolean valid(Object o) { + if (o instanceof String || o instanceof Byte || o instanceof Short || + o instanceof Integer || o instanceof Float || o instanceof Long || + o instanceof IDelta) { + return true; + } else { + return false; + } + } + private byte[] item(int type, Object index, byte[] data, boolean useIndex, boolean useData) { if (useIndex && !(index instanceof Byte) && !(index instanceof Short) && !(index instanceof Integer) && !(index instanceof Float) @@ -294,28 +335,13 @@ public class SWGMultiMap implements Multimap { throw new IllegalArgumentException(); } - int size = 1 + ((useIndex) ? (2 + index.toString().getBytes().length) : 0) + ((useData) ? data.length : 0); + int size = 1 + ((useIndex) ? (2 + Baseline.toBytes(index).length) : 0) + ((useData) ? data.length : 0); - IoBuffer buffer = messageBuilder.bufferPool.allocate((size), false).order(ByteOrder.LITTLE_ENDIAN); + IoBuffer buffer = Delta.createBuffer(size); buffer.put((byte) type); - if (useIndex) { - if (index instanceof String) { - buffer.put(StringUtilities.getAsciiString((String) index)); - } else if (index instanceof Byte) { - buffer.put(((Byte) index).byteValue()); - } else if (index instanceof Short) { - buffer.putShort(((Short) index).shortValue()); - } else if (index instanceof Integer) { - buffer.putInt(((Integer) index).intValue()); - } else if (index instanceof Float) { - buffer.putFloat(((Float) index).floatValue()); - } else if (index instanceof Long) { - buffer.putLong(((Long) index).longValue()); - } else { - throw new IllegalArgumentException(); - } - } + if (useIndex) buffer.put(Baseline.toBytes(index)); if (useData) buffer.put(data); + buffer.flip(); updateCounter++; @@ -323,11 +349,12 @@ public class SWGMultiMap implements Multimap { } private void queue(byte[] data) { - IoBuffer buffer = messageBuilder.bufferPool.allocate((data.length + 8), false).order(ByteOrder.LITTLE_ENDIAN); + IoBuffer buffer = Delta.createBuffer((data.length + 8)); buffer.putInt(1); buffer.putInt(updateCounter); buffer.put(data); - messageBuilder.sendListDelta(viewType, updateType, buffer); + buffer.flip(); + object.sendListDelta(viewType, updateType, buffer); } private void queue(List data) { @@ -337,12 +364,13 @@ public class SWGMultiMap implements Multimap { size += queued.length; } - IoBuffer buffer = messageBuilder.bufferPool.allocate((size + 8), false).order(ByteOrder.LITTLE_ENDIAN); + IoBuffer buffer = Delta.createBuffer((size + 8)); buffer.putInt(data.size()); buffer.putInt(updateCounter); for (byte[] queued : data) buffer.put(queued); + buffer.flip(); - messageBuilder.sendListDelta(viewType, updateType, buffer); + object.sendListDelta(viewType, updateType, buffer); } } diff --git a/src/resources/objects/SWGSet.java b/src/resources/objects/SWGSet.java new file mode 100644 index 00000000..40f688f3 --- /dev/null +++ b/src/resources/objects/SWGSet.java @@ -0,0 +1,293 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package resources.objects; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Iterator; +import java.util.List; +import java.util.Set; +import java.util.TreeSet; + +import org.apache.mina.core.buffer.IoBuffer; + +import engine.resources.objects.Baseline; +import engine.resources.objects.Delta; +import engine.resources.objects.IDelta; +import engine.resources.objects.SWGObject; + +/* A SWGSet element should extend Delta or implement IDelta */ + +public class SWGSet implements Set, Serializable { + + private static final long serialVersionUID = 1L; + private TreeSet set = new TreeSet(); + private transient int updateCounter = 0; + private byte viewType; + private short updateType; + private boolean addByte; + protected transient Object objectMutex = new Object(); + private transient SWGObject object; + + public SWGSet() { } + + public SWGSet(SWGObject object, int viewType, int updateType, boolean addByte) { + this.viewType = (byte) viewType; + this.updateType = (short) updateType; + this.addByte = addByte; + this.object = object; + } + + public SWGSet(Set s) { + if (s instanceof SWGSet) { + this.object = ((SWGSet) s).object; + this.viewType = ((SWGSet) s).viewType; + this.updateType = ((SWGSet) s).updateType; + set.addAll(s); + } + } + + public void init(SWGObject object) { + objectMutex = new Object(); + updateCounter = 0; + this.object = object; + + for (Object item : set) { + try { + if (item instanceof IDelta) { + item.getClass().getMethod("init", new Class[] { SWGObject.class }).invoke(item, new Object[] { object }); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + } + + public boolean add(E e) { + synchronized(objectMutex) { + if (valid(e)) { + if (set.add(e)) { + queue(item(1, e, null, true, false)); + return true; + } + } + + return false; + } + } + + public boolean addAll(Collection c) { + synchronized(objectMutex) { + List buffer = new ArrayList(); + + for (E e : c) { + if (valid(e) && set.add(e)) { + buffer.add(item(1, e, null, true, false)); + } + } + + if (buffer.size() > 0) { + queue(buffer); + return true; + } else { + return false; + } + } + } + + public void clear() { + synchronized(objectMutex) { + queue(item(2, null, null, false, false)); + } + } + + public boolean contains(Object o) { + synchronized(objectMutex) { + return set.contains(o); + } + } + + public boolean containsAll(Collection c) { + synchronized(objectMutex) { + return set.containsAll(c); + } + } + + public boolean isEmpty() { + synchronized(objectMutex) { + return set.isEmpty(); + } + } + + public Iterator iterator() { + synchronized(objectMutex) { + return set.iterator(); + } + } + + public boolean remove(Object e) { + synchronized(objectMutex) { + if (valid(e) && set.remove(e)) { + queue(item(0, e, null, true, false)); + return true; + } + + return false; + } + } + + public boolean removeAll(Collection c) { + synchronized(objectMutex) { + List buffer = new ArrayList(); + + for (Object o : c) { + if (valid(o) && set.remove(o)) { + buffer.add(item(0, o, null, true, false)); + } + } + + if (buffer.size() > 0) { + queue(buffer); + return true; + } else { + return false; + } + } + } + + public boolean retainAll(Collection c) { + synchronized(objectMutex) { + return set.retainAll(c); + } + } + + public int size() { + synchronized(objectMutex) { + return set.size(); + } + } + + public Object[] toArray() { + synchronized(objectMutex) { + return set.toArray(); + } + } + + public T[] toArray(T[] a) { + synchronized(objectMutex) { + return set.toArray(a); + } + } + + public int getUpdateCounter() { + synchronized(objectMutex) { + return updateCounter; + } + } + + public Object getMutex() { + return objectMutex; + } + + public byte[] getBytes() { + synchronized(objectMutex) { + byte[] objects = { }; + int size = 0; + + for (Object o : set) { + byte[] object = Baseline.toBytes(o); + size += object.length; + + IoBuffer buffer = Delta.createBuffer(size); + buffer.put(objects); + if (addByte) buffer.put((byte) 0); + buffer.put(object); + buffer.flip(); + + objects = buffer.array(); + } + + IoBuffer buffer = Delta.createBuffer(8 + size); + buffer.putInt(set.size()); + buffer.putInt(updateCounter); + buffer.put(objects); + buffer.flip(); + + return buffer.array(); + } + } + + private boolean valid(Object o) { + if (o instanceof String || o instanceof Byte || o instanceof Short || + o instanceof Integer || o instanceof Float || o instanceof Long || + o instanceof IDelta) { + return true; + } else { + return false; + } + } + + private byte[] item(int type, Object index, byte[] data, boolean useIndex, boolean useData) { + if (useIndex && ((index instanceof IDelta) || !valid(index))) { + throw new IllegalArgumentException(); + } + + int size = 1 + ((useIndex) ? (2 + Baseline.toBytes(index).length) : 0) + ((useData) ? data.length : 0); + + IoBuffer buffer = Delta.createBuffer(size); + buffer.put((byte) type); + if (useIndex) buffer.put(Baseline.toBytes(index)); + if (useData) buffer.put(data); + buffer.flip(); + + updateCounter++; + + return buffer.array(); + } + + private void queue(byte[] data) { + IoBuffer buffer = Delta.createBuffer(data.length + 8); + buffer.putInt(1); + buffer.putInt(updateCounter); + buffer.put(data); + buffer.flip(); + object.sendListDelta(viewType, updateType, buffer); + } + + private void queue(List data) { + int size = 0; + + for (byte[] queued : data) { + size += queued.length; + } + + IoBuffer buffer = Delta.createBuffer(size + 8); + buffer.putInt(data.size()); + buffer.putInt(updateCounter); + for (byte[] queued : data) buffer.put(queued); + buffer.flip(); + + object.sendListDelta(viewType, updateType, buffer); + } + +} diff --git a/src/resources/objects/building/BuildingMessageBuilder.java b/src/resources/objects/building/BuildingMessageBuilder.java index 8dbf7ec8..6861117f 100644 --- a/src/resources/objects/building/BuildingMessageBuilder.java +++ b/src/resources/objects/building/BuildingMessageBuilder.java @@ -22,16 +22,22 @@ package resources.objects.building; import java.nio.ByteOrder; +import java.util.Map; import java.util.Vector; import org.apache.mina.core.buffer.IoBuffer; -import resources.objects.ObjectMessageBuilder; +import engine.resources.objects.Builder; +import resources.objects.tangible.TangibleMessageBuilder; -public class BuildingMessageBuilder extends ObjectMessageBuilder { +public class BuildingMessageBuilder extends TangibleMessageBuilder { - public BuildingMessageBuilder(BuildingObject buildingObject) { - setObject(buildingObject); + public BuildingMessageBuilder(BuildingObject object) { + super(object); + } + + public BuildingMessageBuilder() { + super(); } public IoBuffer buildBaseline3() { @@ -145,17 +151,25 @@ public class BuildingMessageBuilder extends ObjectMessageBuilder { tools.CharonPacketUtils.printAnalysis(IoBuffer.allocate(size).put(buffer.array(), 0, size).flip()); return IoBuffer.allocate(size).put(buffer.array(), 0, size).flip(); } - @Override - public void sendListDelta(byte viewType, short updateType, IoBuffer buffer) { - // TODO Auto-generated method stub - + public void buildBaseline3(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline3(deltaBuilders, deltaBuilders); } - + @Override - public void sendBaselines() { - + public void buildBaseline6(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline6(deltaBuilders, deltaBuilders); } - + + @Override + public void buildBaseline8(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline8(deltaBuilders, deltaBuilders); + } + + @Override + public void buildBaseline9(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline9(deltaBuilders, deltaBuilders); + } + } diff --git a/src/resources/objects/building/BuildingObject.java b/src/resources/objects/building/BuildingObject.java index 6b4fd8fa..f1b95da7 100644 --- a/src/resources/objects/building/BuildingObject.java +++ b/src/resources/objects/building/BuildingObject.java @@ -21,17 +21,14 @@ ******************************************************************************/ package resources.objects.building; +import java.io.Serializable; import java.util.Vector; -import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicReference; import main.NGECore; +import resources.objects.ObjectMessageBuilder; import resources.objects.cell.CellObject; import resources.objects.creature.CreatureObject; - -import com.sleepycat.je.Environment; -import com.sleepycat.je.Transaction; - import resources.objects.tangible.TangibleObject; import com.sleepycat.persist.model.Entity; @@ -44,12 +41,11 @@ import engine.resources.scene.Point3D; import engine.resources.scene.Quaternion; @Entity(version=6) -public class BuildingObject extends TangibleObject implements IPersistent { +public class BuildingObject extends TangibleObject implements IPersistent, Serializable { + private static final long serialVersionUID = 1L; @NotPersistent - private BuildingMessageBuilder messageBuilder; - @NotPersistent - private Transaction txn; + private transient BuildingMessageBuilder messageBuilder; private float maintenanceAmount = 0; private int BMR = 0; @@ -61,15 +57,15 @@ public class BuildingObject extends TangibleObject implements IPersistent { private short maximumStorageCapacity=0; private Vector entryList = new Vector(); // Preferably the OIDs should be stored, because of name changes private Vector banList = new Vector(); - - public BuildingObject() { - super(); + + public BuildingObject(long objectID, Planet planet, Point3D position, Quaternion orientation, String Template) { + super(objectID, planet, position, orientation, Template); messageBuilder = new BuildingMessageBuilder(this); this.setConditionDamage(100); } - - public BuildingObject(long objectID, Planet planet, Point3D position, Quaternion orientation, String Template) { - super(objectID, planet, Template, position, orientation); + + public BuildingObject() { + super(); messageBuilder = new BuildingMessageBuilder(this); this.setConditionDamage(100); } @@ -89,6 +85,18 @@ public class BuildingObject extends TangibleObject implements IPersistent { } + public int getCellNumberByObjectId(long objectId) { + Vector cells = getCells(); + + for (CellObject cell : cells) { + if (cell.getObjectID() == objectId) { + return cell.getCellNumber(); + } + } + + return 0; + } + public float getMaintenanceAmount() { return maintenanceAmount; } @@ -233,13 +241,6 @@ public class BuildingObject extends TangibleObject implements IPersistent { destination.getSession().write(messageBuilder.buildBaseline9()); } - - public Transaction getTransaction() { return txn; } - - public void createTransaction(Environment env) { - txn = env.beginTransaction(null, null); - txn.setLockTimeout(500, TimeUnit.MILLISECONDS); - } public Vector getCells() { final Vector cells = new Vector(); @@ -250,4 +251,15 @@ public class BuildingObject extends TangibleObject implements IPersistent { return cells; } + @Override + public void initAfterDBLoad() { + super.init(); + messageBuilder = new BuildingMessageBuilder(this); + defendersList = new Vector(); + } + + public ObjectMessageBuilder getMessageBuilder() { + return messageBuilder; + } + } diff --git a/src/resources/objects/cell/CellMessageBuilder.java b/src/resources/objects/cell/CellMessageBuilder.java index 1884d4b0..89c28951 100644 --- a/src/resources/objects/cell/CellMessageBuilder.java +++ b/src/resources/objects/cell/CellMessageBuilder.java @@ -22,15 +22,21 @@ package resources.objects.cell; import java.nio.ByteOrder; +import java.util.Map; import org.apache.mina.core.buffer.IoBuffer; import resources.objects.ObjectMessageBuilder; +import engine.resources.objects.Builder; public class CellMessageBuilder extends ObjectMessageBuilder { - public CellMessageBuilder(CellObject cellObject) { - setObject(cellObject); + public CellMessageBuilder(CellObject object) { + super(object); + } + + public CellMessageBuilder() { + super(); } public IoBuffer buildBaseline3() { @@ -80,18 +86,25 @@ public class CellMessageBuilder extends ObjectMessageBuilder { return buffer; } - - - + @Override - public void sendListDelta(byte viewType, short updateType, IoBuffer buffer) { - // TODO Auto-generated method stub - + public void buildBaseline3(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline3(deltaBuilders, deltaBuilders); } - + @Override - public void sendBaselines() { - // TODO Auto-generated method stub - + public void buildBaseline6(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline6(deltaBuilders, deltaBuilders); } + + @Override + public void buildBaseline8(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline8(deltaBuilders, deltaBuilders); + } + + @Override + public void buildBaseline9(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline9(deltaBuilders, deltaBuilders); + } + } diff --git a/src/resources/objects/cell/CellObject.java b/src/resources/objects/cell/CellObject.java index 32f1e86b..2709577f 100644 --- a/src/resources/objects/cell/CellObject.java +++ b/src/resources/objects/cell/CellObject.java @@ -21,10 +21,16 @@ ******************************************************************************/ package resources.objects.cell; +import java.io.Serializable; + +import org.apache.mina.core.buffer.IoBuffer; + import protocol.swg.UpdateCellPermissionMessage; +import resources.objects.ObjectMessageBuilder; import com.sleepycat.persist.model.NotPersistent; import com.sleepycat.persist.model.Persistent; + import engine.clients.Client; import engine.resources.objects.SWGObject; import engine.resources.scene.Planet; @@ -32,11 +38,12 @@ import engine.resources.scene.Point3D; import engine.resources.scene.Quaternion; @Persistent(version=0) -public class CellObject extends SWGObject { +public class CellObject extends SWGObject implements Serializable { + private static final long serialVersionUID = 1L; private int cellNumber = 0; @NotPersistent - private CellMessageBuilder messageBuilder; + private transient CellMessageBuilder messageBuilder; public CellObject() { super(); @@ -80,5 +87,20 @@ public class CellObject extends SWGObject { } - + @Override + public void initAfterDBLoad() { + super.init(); + messageBuilder = new CellMessageBuilder(this); + } + + public ObjectMessageBuilder getMessageBuilder() { + return messageBuilder; + } + + @Override + public void sendListDelta(byte viewType, short updateType, IoBuffer buffer) { + // TODO Auto-generated method stub + + } + } diff --git a/src/resources/objects/craft/DraftSchematic.java b/src/resources/objects/craft/DraftSchematic.java index 3e47ae31..0539eba4 100644 --- a/src/resources/objects/craft/DraftSchematic.java +++ b/src/resources/objects/craft/DraftSchematic.java @@ -21,7 +21,14 @@ ******************************************************************************/ package resources.objects.craft; +import java.io.Serializable; + +import org.apache.mina.core.buffer.IoBuffer; + +import resources.objects.ObjectMessageBuilder; + import com.sleepycat.persist.model.Persistent; + import engine.clients.Client; import engine.resources.objects.SWGObject; import engine.resources.scene.Planet; @@ -29,9 +36,11 @@ import engine.resources.scene.Point3D; import engine.resources.scene.Quaternion; @Persistent -public class DraftSchematic extends SWGObject { - +public class DraftSchematic extends SWGObject implements Serializable { + private static final long serialVersionUID = 1L; + private transient ObjectMessageBuilder messageBuilder = null; + public DraftSchematic(long objectID, Planet planet, String template, Point3D position, Quaternion orientation){ super(objectID, planet, position, orientation, template); } @@ -42,5 +51,19 @@ public class DraftSchematic extends SWGObject { } + @Override + public void initAfterDBLoad() { + super.init(); + } + + public ObjectMessageBuilder getMessageBuilder() { + return messageBuilder; + } + + @Override + public void sendListDelta(byte viewType, short updateType, IoBuffer buffer) { + // TODO Auto-generated method stub + + } } diff --git a/src/resources/objects/creature/CreatureMessageBuilder.java b/src/resources/objects/creature/CreatureMessageBuilder.java index 1255acb9..8c8edbf9 100644 --- a/src/resources/objects/creature/CreatureMessageBuilder.java +++ b/src/resources/objects/creature/CreatureMessageBuilder.java @@ -22,33 +22,33 @@ package resources.objects.creature; import java.nio.ByteOrder; - +import java.util.Map; import java.util.Map.Entry; +import main.NGECore; + import org.apache.mina.core.buffer.IoBuffer; -import com.sleepycat.persist.model.Persistent; - import engine.resources.common.CRC; -import resources.objects.Buff; -import resources.objects.ObjectMessageBuilder; -import resources.objects.SkillMod; +import resources.buffs.Buff; +import engine.resources.objects.Builder; import engine.resources.objects.SWGObject; import resources.objects.player.PlayerObject; +import resources.objects.tangible.TangibleMessageBuilder; import resources.objects.tangible.TangibleObject; import resources.objects.weapon.WeaponObject; +import resources.skills.SkillMod; -@Persistent -public class CreatureMessageBuilder extends ObjectMessageBuilder { - - public CreatureMessageBuilder() { } +public class CreatureMessageBuilder extends TangibleMessageBuilder { - public CreatureMessageBuilder(CreatureObject creatureObject) { - - setObject(creatureObject); - + public CreatureMessageBuilder(CreatureObject object) { + super(object); } - + + public CreatureMessageBuilder() { + super(); + } + public IoBuffer buildBaseline1() { CreatureObject creature = (CreatureObject) object; IoBuffer buffer = bufferPool.allocate(26, false).order(ByteOrder.LITTLE_ENDIAN); @@ -305,7 +305,14 @@ public class CreatureMessageBuilder extends ObjectMessageBuilder { buffer.putInt(creature.getEquipmentList().size()); buffer.putInt(creature.getEquipmentListUpdateCounter()); - for(SWGObject obj : creature.getEquipmentList().get()) { + for(Long objId : creature.getEquipmentList().get()) { + + SWGObject obj = NGECore.getInstance().objectService.getObject(objId); + + if(obj == null) { + System.err.println("Cant find obj for obj id in equip list!!!"); + continue; + } if(obj instanceof TangibleObject && !(obj instanceof WeaponObject)) { TangibleObject tangible = (TangibleObject) obj; @@ -410,7 +417,14 @@ public class CreatureMessageBuilder extends ObjectMessageBuilder { buffer.putInt(creature.getAppearanceEquipmentList().size()); buffer.putInt(creature.getAppearanceEquipmentListUpdateCounter()); - for(SWGObject obj : creature.getAppearanceEquipmentList().get()) { + for(Long objId : creature.getAppearanceEquipmentList().get()) { + + SWGObject obj = NGECore.getInstance().objectService.getObject(objId); + + if(obj == null) { + System.err.println("Cant find obj for obj id in equip list!!!"); + continue; + } if(obj instanceof TangibleObject) { TangibleObject tangible = (TangibleObject) obj; @@ -668,6 +682,16 @@ public class CreatureMessageBuilder extends ObjectMessageBuilder { } + public IoBuffer buildGuildIdDelta(int guildId) { + IoBuffer buffer = bufferPool.allocate(4, false).order(ByteOrder.LITTLE_ENDIAN); + buffer.putInt(guildId); + int size = buffer.position(); + buffer.flip(); + buffer = createDelta("CREO", (byte) 6, (short) 1, (short) 0x0F, buffer, size + 4); + + return buffer; + } + public IoBuffer buildGroupInviteDelta(long inviteSenderId, String inviteSenderName, long inviteCounter) { IoBuffer buffer = bufferPool.allocate(18 + inviteSenderName.length(), false).order(ByteOrder.LITTLE_ENDIAN); @@ -1048,7 +1072,7 @@ public class CreatureMessageBuilder extends ObjectMessageBuilder { buffer.putInt(1); buffer.putInt(creature.getEquipmentListUpdateCounter()); buffer.put((byte) 1); - buffer.putShort((short) creature.getEquipmentList().indexOf(item)); + buffer.putShort((short) creature.getEquipmentList().indexOf(item.getObjectId())); if(item.getCustomization() == null || item.getCustomization().length == 0) { buffer.putShort((short) 0); } else { @@ -1084,7 +1108,7 @@ public class CreatureMessageBuilder extends ObjectMessageBuilder { buffer.putInt(1); buffer.putInt(creature.getEquipmentListUpdateCounter()); buffer.put((byte) 0); - buffer.putShort((short) creature.getEquipmentList().indexOf(item)); + buffer.putShort((short) creature.getEquipmentList().indexOf(item.getObjectId())); int size = buffer.position(); buffer.flip(); @@ -1177,36 +1201,35 @@ public class CreatureMessageBuilder extends ObjectMessageBuilder { buffer = createDelta("CREO", (byte) 6, (short) 1, (short) 0x1E, buffer, size + 4); return buffer; } - - public void sendListDelta(byte viewType, short updateType, IoBuffer buffer) { - switch (viewType) { - case 4: { - switch (updateType) { - case 3: { - buffer = createDelta("CREO", (byte) 4, (short) 1, (byte) 3, buffer, buffer.array().length + 4); - - if (object.getClient() != null && object.getClient().getSession() != null) { - object.getClient().getSession().write(buffer); - } - - break; - } - } - } - case 1: - case 3: - case 6: - case 8: - case 9: - default: { - return; - } - } + + @Override + public void buildBaseline1(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline1(baselineBuilders, deltaBuilders); } @Override - public void sendBaselines() { - + public void buildBaseline3(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline3(baselineBuilders, deltaBuilders); + } + + @Override + public void buildBaseline4(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline4(baselineBuilders, deltaBuilders); + } + + @Override + public void buildBaseline6(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline6(baselineBuilders, deltaBuilders); + } + + @Override + public void buildBaseline8(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline8(baselineBuilders, deltaBuilders); + } + + @Override + public void buildBaseline9(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline9(baselineBuilders, deltaBuilders); } } diff --git a/src/resources/objects/creature/CreatureObject.java b/src/resources/objects/creature/CreatureObject.java index 20e460e4..68eea2b3 100644 --- a/src/resources/objects/creature/CreatureObject.java +++ b/src/resources/objects/creature/CreatureObject.java @@ -21,6 +21,7 @@ ******************************************************************************/ package resources.objects.creature; +import java.io.Serializable; import java.lang.System; import java.util.ArrayList; import java.util.Collections; @@ -42,44 +43,39 @@ import protocol.swg.objectControllerObjects.Animation; import protocol.swg.objectControllerObjects.Posture; import protocol.swg.objectControllerObjects.StartTask; -import com.sleepycat.je.Environment; -import com.sleepycat.je.Transaction; import com.sleepycat.persist.model.Entity; import com.sleepycat.persist.model.NotPersistent; import main.NGECore; import engine.clients.Client; -import resources.common.Cooldown; +import resources.buffs.Buff; +import resources.buffs.DamageOverTime; import resources.common.OutOfBand; -import resources.objects.Buff; -import resources.objects.DamageOverTime; +import resources.objects.ObjectMessageBuilder; import resources.objects.SWGList; import resources.objects.SWGMap; -import resources.objects.SkillMod; import engine.resources.common.CRC; -import engine.resources.objects.IPersistent; -import engine.resources.objects.MissionCriticalObject; import engine.resources.objects.SWGObject; import engine.resources.scene.Planet; import engine.resources.scene.Point3D; import engine.resources.scene.Quaternion; import resources.objects.player.PlayerObject; import resources.objects.tangible.TangibleObject; +import resources.skills.SkillMod; import services.command.BaseSWGCommand; @Entity(version=9) -public class CreatureObject extends TangibleObject implements IPersistent { +public class CreatureObject extends TangibleObject implements Serializable { - @NotPersistent - private Transaction txn; + private static final long serialVersionUID = 1L; // CREO 1 private int bankCredits = 0; private int cashCredits = 0; private List skills; @NotPersistent - private int skillsUpdateCounter = 0; - + private transient int skillsUpdateCounter = 0; + // CREO 3 private byte posture = 0; private float height; @@ -102,14 +98,12 @@ public class CreatureObject extends TangibleObject implements IPersistent { private SWGList abilities; private int abilitiesUpdateCounter = 0; private int xpBarValue = 0; - - private SWGList missionCriticalObjects; + + private SWGMap missionCriticalObjects; @NotPersistent - private int missionCriticalObjectsUpdateCounter = 0; - - + private transient int missionCriticalObjectsUpdateCounter = 0; + // CREO6 - private byte combatFlag = 0; private short level = -1; private int grantedHealth = 0; private String currentAnimation; @@ -130,30 +124,30 @@ public class CreatureObject extends TangibleObject implements IPersistent { private boolean acceptBandflourishes = true; private boolean groupDance = true; @NotPersistent - private CreatureObject performanceWatchee; + private transient CreatureObject performanceWatchee; @NotPersistent - private CreatureObject performanceListenee; + private transient CreatureObject performanceListenee; @NotPersistent - private Vector performanceAudience = new Vector(); + private transient Vector performanceAudience = new Vector(); private int health = 1000; private int action = 300; @NotPersistent - private int HAMListCounter = 0; + private transient int HAMListCounter = 0; private int maxHealth = 1000; private int maxAction = 300; @NotPersistent - private int maxHAMListCounter = 0; + private transient int maxHAMListCounter = 0; - private SWGList equipmentList; + private SWGList equipmentList; @NotPersistent - private int equipmentListUpdateCounter = 0; + private transient int equipmentListUpdateCounter = 0; private SWGList buffList = new SWGList(); @NotPersistent - private int buffListUpdateCounter = 0; + private transient int buffListUpdateCounter = 0; private byte difficulty = 0; - private SWGList appearanceEquipmentList; + private SWGList appearanceEquipmentList; @NotPersistent - private int appearanceEquipmentListUpdateCounter = 0; + private transient int appearanceEquipmentListUpdateCounter = 0; private boolean inStealth = false; private boolean radarVisible = true; // radar @@ -161,46 +155,47 @@ public class CreatureObject extends TangibleObject implements IPersistent { // non-baseline vars @NotPersistent - private List duelList = Collections.synchronizedList(new ArrayList()); + private transient List duelList = Collections.synchronizedList(new ArrayList()); @NotPersistent - private CreatureMessageBuilder messageBuilder; + private transient CreatureMessageBuilder messageBuilder; private SWGList dotList = new SWGList(); @NotPersistent - private ScheduledFuture incapTask; + private transient ScheduledFuture incapTask; @NotPersistent - private ScheduledFuture entertainerExperience; + private transient ScheduledFuture entertainerExperience; @NotPersistent - private ScheduledFuture inspirationTick; + private transient ScheduledFuture inspirationTick; @NotPersistent - private ScheduledFuture spectatorTask; + private transient ScheduledFuture spectatorTask; - private boolean staticNPC = false; // temp @NotPersistent - private int flourishCount = 0; + private transient int flourishCount = 0; @NotPersistent - private boolean performingEffect; + private transient boolean performingEffect; @NotPersistent - private boolean performingFlourish; + private transient boolean performingFlourish; private int coverCharge; @NotPersistent - private TangibleObject conversingNpc; + private transient TangibleObject conversingNpc; @NotPersistent - private ConcurrentHashMap cooldowns = new ConcurrentHashMap(); + private transient ConcurrentHashMap cooldowns = new ConcurrentHashMap(); @NotPersistent - private long tefTime = System.currentTimeMillis(); + private transient long tefTime = 0; + @NotPersistent + private transient SWGObject useTarget; public CreatureObject(long objectID, Planet planet, Point3D position, Quaternion orientation, String Template) { - super(objectID, planet, Template, position, orientation); + super(objectID, planet, position, orientation, Template); messageBuilder = new CreatureMessageBuilder(this); loadTemplateData(); skills = new ArrayList(); - skillMods = new SWGMap(messageBuilder, 4, 3); - abilities = new SWGList(messageBuilder, 4, 14); - missionCriticalObjects = new SWGList(messageBuilder, 4, 13); - equipmentList = new SWGList(messageBuilder, 6, 0x17); - buffList = new SWGList(messageBuilder, 6, 0x1A); - appearanceEquipmentList = new SWGList(messageBuilder, 6, 0x1F); + skillMods = new SWGMap(this, 4, 3, true); + abilities = new SWGList(this, 4, 14, true); + missionCriticalObjects = new SWGMap(this, 4, 13, false); + equipmentList = new SWGList(this, 6, 23, false); + buffList = new SWGList(this, 6, 26, false); + appearanceEquipmentList = new SWGList(this, 6, 31, false); } public CreatureObject() { @@ -208,6 +203,23 @@ public class CreatureObject extends TangibleObject implements IPersistent { messageBuilder = new CreatureMessageBuilder(this); } + @Override + public void initAfterDBLoad() { + super.init(); + defendersList = new Vector(); + duelList = Collections.synchronizedList(new ArrayList()); + cooldowns = new ConcurrentHashMap(); + performanceAudience = new Vector(); + messageBuilder = new CreatureMessageBuilder(this); + dotList.init(this); + buffList.init(this); + equipmentList.init(this); + appearanceEquipmentList.init(this); + missionCriticalObjects.init(this); + abilities.init(this); + skillMods.init(this); + } + private void loadTemplateData() { /*if(getTemplateData().getAttribute("scale") != null) @@ -221,16 +233,6 @@ public class CreatureObject extends TangibleObject implements IPersistent { } - public void setCustomName2(String customName) { - setCustomName(customName); - - notifyObservers(messageBuilder.buildCustomNameDelta(customName), true); - } - - public Transaction getTransaction() { return txn; } - - public void createTransaction(Environment env) { txn = env.beginTransaction(null, null); } - public int getBankCredits() { synchronized(objectMutex) { return bankCredits; @@ -342,25 +344,6 @@ public class CreatureObject extends TangibleObject implements IPersistent { } - @Override - public int getOptionsBitmask() { - synchronized(objectMutex) { - return optionsBitmask; - } - } - - @Override - public void setOptionsBitmask(int optionBitmask) { - synchronized(objectMutex) { - this.optionsBitmask = optionBitmask; - } - - IoBuffer optionDelta = messageBuilder.buildOptionMaskDelta(optionBitmask); - - notifyObservers(optionDelta, true); - - } - public void setOptions(int options, boolean add) { synchronized(objectMutex) { if (options != 0) { @@ -476,15 +459,9 @@ public class CreatureObject extends TangibleObject implements IPersistent { this.inspirationTick = inspirationTick; } } - - @Override + public void setFaction(String faction) { - synchronized(objectMutex) { - this.faction = faction; - } - - notifyObservers(messageBuilder.buildFactionDelta(faction), true); - + super.setFaction(faction); CreatureObject companion = NGECore.getInstance().mountService.getCompanion(this); @@ -493,13 +470,8 @@ public class CreatureObject extends TangibleObject implements IPersistent { } } - @Override public void setFactionStatus(int factionStatus) { - synchronized(objectMutex) { - this.factionStatus = factionStatus; - } - - notifyObservers(messageBuilder.buildFactionStatusDelta(factionStatus), true); + super.setFactionStatus(factionStatus); CreatureObject companion = NGECore.getInstance().mountService.getCompanion(this); @@ -558,12 +530,14 @@ public class CreatureObject extends TangibleObject implements IPersistent { synchronized(objectMutex) { if (state != 0) { if (add) { - stateBitmask = (stateBitmask | state); + state = (stateBitmask | state); } else { - stateBitmask = (stateBitmask & ~state); + state = (stateBitmask & ~state); } } } + + notifyObservers(messageBuilder.buildStateDelta(state), true); } public boolean getState(long state) { @@ -796,27 +770,11 @@ public class CreatureObject extends TangibleObject implements IPersistent { } } - - - public SWGList getMissionCriticalObjects() { + + public SWGMap getMissionCriticalObjects() { return missionCriticalObjects; } - - public byte getCombatFlag() { - synchronized(objectMutex) { - return combatFlag; - } - } - - public void setCombatFlag(byte combatFlag) { - synchronized(objectMutex) { - this.combatFlag = combatFlag; - } - IoBuffer combatDelta = messageBuilder.buildCombatFlagDelta(combatFlag); - - notifyObservers(combatDelta, true); - } - + public short getLevel() { synchronized(objectMutex) { return level; @@ -957,6 +915,10 @@ public class CreatureObject extends TangibleObject implements IPersistent { synchronized(objectMutex) { this.guildId = guildId; } + + IoBuffer guildIdDelta = messageBuilder.buildGuildIdDelta(guildId); + + notifyObservers(guildIdDelta, true); } public long getLookAtTarget() { @@ -987,6 +949,18 @@ public class CreatureObject extends TangibleObject implements IPersistent { notifyObservers(messageBuilder.buildIntendedTargetDelta(intendedTarget), true); } + public SWGObject getUseTarget() { + synchronized(objectMutex) { + return useTarget; + } + } + + public void setUseTarget(SWGObject useTarget) { + synchronized(objectMutex) { + this.useTarget = useTarget; + } + } + public long getTargetId() { return getIntendedTarget(); } @@ -1053,17 +1027,15 @@ public class CreatureObject extends TangibleObject implements IPersistent { this.acceptBandflourishes = acceptBandflourishes; } - public SWGList getEquipmentList() { - synchronized(objectMutex) { + public SWGList getEquipmentList() { return equipmentList; - } } public SWGList getBuffList() { return buffList; } - public SWGList getAppearanceEquipmentList() { + public SWGList getAppearanceEquipmentList() { return appearanceEquipmentList; } @@ -1079,33 +1051,33 @@ public class CreatureObject extends TangibleObject implements IPersistent { public void addObjectToEquipList(SWGObject object) { if(object instanceof TangibleObject) { - equipmentList.get().add(object); + equipmentList.get().add(object.getObjectID()); setEquipmentListUpdateCounter(getEquipmentListUpdateCounter() + 1); notifyObservers(messageBuilder.buildAddEquipmentDelta((TangibleObject) object), true); } } public void removeObjectFromEquipList(SWGObject object) { - if(object instanceof TangibleObject && equipmentList.contains(object)) { + if(object instanceof TangibleObject && equipmentList.contains(object.getObjectID())) { setEquipmentListUpdateCounter(getEquipmentListUpdateCounter() + 1); notifyObservers(messageBuilder.buildRemoveEquipmentDelta((TangibleObject) object), true); - equipmentList.get().remove(object); + equipmentList.get().remove(object.getObjectID()); } } public void addObjectToAppearanceEquipList(SWGObject object) { if(object instanceof TangibleObject) { - appearanceEquipmentList.get().add(object); + appearanceEquipmentList.get().add(object.getObjectID()); setAppearanceEquipmentListUpdateCounter(getAppearanceEquipmentListUpdateCounter() + 1); notifyObservers(messageBuilder.buildAddAppearanceEquipmentDelta((TangibleObject) object), true); } } public void removeObjectFromAppearanceEquipList(SWGObject object) { - if(object instanceof TangibleObject && appearanceEquipmentList.contains(object)) { + if(object instanceof TangibleObject && appearanceEquipmentList.contains(object.getObjectID())) { setAppearanceEquipmentListUpdateCounter(getAppearanceEquipmentListUpdateCounter() + 1); notifyObservers(messageBuilder.buildRemoveAppearanceEquipmentDelta((TangibleObject) object), true); - appearanceEquipmentList.get().remove(object); + appearanceEquipmentList.get().remove(object.getObjectID()); } } @@ -1466,15 +1438,7 @@ public class CreatureObject extends TangibleObject implements IPersistent { } public void playMusic(String sndFile, long targetId, int repetitions, boolean flag) { - getClient().getSession().write(new PlayMusicMessage(sndFile, targetId, 1, false)); - } - - public boolean getStaticNPC() { - return staticNPC; - } - - public boolean setStaticNPC(boolean staticNPC) { - return this.staticNPC = staticNPC; + getClient().getSession().write(new PlayMusicMessage(sndFile, targetId, 1, false).serialize()); } public boolean getGroupDance() { @@ -1541,20 +1505,6 @@ public class CreatureObject extends TangibleObject implements IPersistent { if(getClient() != null) getClient().getSession().write(messageBuilder.buildListenToId(performanceListenee.getObjectId())); } - - - - @Override - public void setPvPBitmask(int pvpBitmask) { - super.setPvPBitmask(pvpBitmask); - notifyObservers(new UpdatePVPStatusMessage(getObjectID(), getPvPBitmask(), getFaction()), false); - } - - @Override - public void setPvpStatus(int pvpBitmask, boolean add) { - super.setPvpStatus(pvpBitmask, add); - notifyObservers(new UpdatePVPStatusMessage(getObjectID(), getPvPBitmask(), getFaction()), false); - } public byte getDifficulty() { synchronized(objectMutex) { @@ -1785,10 +1735,6 @@ public class CreatureObject extends TangibleObject implements IPersistent { return false; } - public Cooldown getCooldown(String cooldownGroup) { - return new Cooldown(getRemainingCooldown(cooldownGroup)); - } - public long getRemainingCooldown(String cooldownGroup) { if (cooldowns.containsKey(cooldownGroup)) { if (System.currentTimeMillis() < cooldowns.get(cooldownGroup)) { @@ -1830,8 +1776,34 @@ public class CreatureObject extends TangibleObject implements IPersistent { return adder.intValue(); } - //public float getCooldown(String cooldownGroup) { - //return ((float) getCooldown(cooldownGroup) / (float) 1000); - //} + public ObjectMessageBuilder getMessageBuilder() { + return messageBuilder; + } + + public void sendListDelta(byte viewType, short updateType, IoBuffer buffer) { + switch (viewType) { + case 4: { + switch (updateType) { + case 3: { + buffer = messageBuilder.createDelta("CREO", (byte) 4, (short) 1, (byte) 3, buffer, buffer.array().length + 4); + + if (getClient() != null && getClient().getSession() != null) { + getClient().getSession().write(buffer); + } + + break; + } + } + } + case 1: + case 3: + case 6: + case 8: + case 9: + default: { + return; + } + } + } } diff --git a/src/resources/objects/deed/Harvester_Deed.java b/src/resources/objects/deed/Harvester_Deed.java deleted file mode 100644 index 945d9eb3..00000000 --- a/src/resources/objects/deed/Harvester_Deed.java +++ /dev/null @@ -1,121 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2013 - * - * This File is part of NGECore2. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see . - * - * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. - * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. - ******************************************************************************/ -package resources.objects.deed; -import com.sleepycat.persist.model.Persistent; - -import engine.resources.scene.Planet; -import engine.resources.scene.Point3D; -import engine.resources.scene.Quaternion; - -/** - * @author Charon - */ -@Persistent(version=0) -public class Harvester_Deed extends Deed { - - private String name; - private String structureTemplate; - private String constructorTemplate; - private int outputHopperCapacity=0; - private int BER=0; - private int BMR=0; - private int surplusMaintenance=0; - private int surplusPower=0; - private int lotRequirement; - - - public Harvester_Deed(long objectID, Planet planet, String template, Point3D position, Quaternion orientation){ - super(objectID, planet, template, position, orientation); - } - - public int getOutputHopperCapacity() { - return outputHopperCapacity; - } - public void setOutputHopperCapacity(int outputHopperCapacity) { - this.outputHopperCapacity = outputHopperCapacity; - } - public int getBER() { - return BER; - } - public void setBER(int bER) { - this.BER = bER; - } - public String getName() { - return name; - } - public void setName(String name) { - this.name = name; - } - public String getStructureTemplate() { - return structureTemplate; - } - public void setStructureTemplate(String structureTemplate) { - this.structureTemplate = structureTemplate; - } - public int getLotRequirement() { - return lotRequirement; - } - public void setLotRequirement(int lotRequirement) { - this.lotRequirement = lotRequirement; - } - public String getConstructorTemplate() { - return constructorTemplate; - } - public void setConstructorTemplate(String constructorTemplate) { - this.constructorTemplate = constructorTemplate; - } - public int getBMR() { - return BMR; - } - public void setBMR(int BMR) { - this.BMR = BMR; - } - public int getSurplusMaintenance() { - return surplusMaintenance; - } - public void setSurplusMaintenance(int surplusMaintenance) { - this.surplusMaintenance = surplusMaintenance; - } - - public int getSurplusPower() { - return surplusPower; - } - - public void setSurplusPower(int surplusPower) { - this.surplusPower = surplusPower; - } - - - public void setAttributes() { - this.getAttributes().put("@obj_attr_n:volume", "1"); - this.getAttributes().put("@obj_attr_n:examine_maintenance_rate", ""+this.getBMR() + "/hour"); - if (this.getSurplusMaintenance()>0) - this.getAttributes().put("@obj_attr_n:examine_maintenance", ""+this.getSurplusMaintenance()); - - //this.getAttributes().put("@obj_attr_n:energy_maintenance", "0"); - if (this.getSurplusPower()>0) - this.getAttributes().put("@obj_attr_n:examine_power", ""+this.getSurplusPower()); - - this.getAttributes().put("@obj_attr_n:examine_hoppersize", ""+this.getOutputHopperCapacity()); - this.getAttributes().put("@obj_attr_n:examine_extractionrate", ""+this.getBER()); - } -} diff --git a/src/resources/objects/deed/Player_House_Deed.java b/src/resources/objects/deed/Player_House_Deed.java deleted file mode 100644 index 448f3da9..00000000 --- a/src/resources/objects/deed/Player_House_Deed.java +++ /dev/null @@ -1,94 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2013 - * - * This File is part of NGECore2. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see . - * - * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. - * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. - ******************************************************************************/ -package resources.objects.deed; -import com.sleepycat.persist.model.Persistent; - -import engine.resources.scene.Planet; -import engine.resources.scene.Point3D; -import engine.resources.scene.Quaternion; - -/** - * @author Seefo - * @author Charon - */ - -@Persistent(version=0) -public class Player_House_Deed extends Deed { - - private String name; - private String structureTemplate; - private String constructorTemplate; - private int BMR=0; - private int surplusMaintenance=0; - private int lotRequirement; - - - public Player_House_Deed(long objectID, Planet planet, String template, Point3D position, Quaternion orientation){ - super(objectID, planet, template, position, orientation); - } - - public String getName() { - return name; - } - public void setName(String name) { - this.name = name; - } - public String getStructureTemplate() { - return structureTemplate; - } - public void setStructureTemplate(String structureTemplate) { - this.structureTemplate = structureTemplate; - } - public int getLotRequirement() { - return lotRequirement; - } - public void setLotRequirement(int lotRequirement) { - this.lotRequirement = lotRequirement; - } - public String getConstructorTemplate() { - return constructorTemplate; - } - public void setConstructorTemplate(String constructorTemplate) { - this.constructorTemplate = constructorTemplate; - } - public int getBMR() { - return BMR; - } - public void setBMR(int BMR) { - this.BMR = BMR; - } - public int getSurplusMaintenance() { - return surplusMaintenance; - } - public void setSurplusMaintenance(int surplusMaintenance) { - this.surplusMaintenance = surplusMaintenance; - } - - public void setAttributes() { - this.getAttributes().put("@obj_attr_n:volume", "1"); - this.getAttributes().put("@obj_attr_n:examine_maintenance_rate", ""+this.getBMR() + "/hour"); - if (this.getSurplusMaintenance()>0) - this.getAttributes().put("@obj_attr_n:examine_maintenance", ""+this.getSurplusMaintenance()); - - - } -} diff --git a/src/resources/objects/factorycrate/FactoryCrateMessageBuilder.java b/src/resources/objects/factorycrate/FactoryCrateMessageBuilder.java index 59c39cbe..bcde4afc 100644 --- a/src/resources/objects/factorycrate/FactoryCrateMessageBuilder.java +++ b/src/resources/objects/factorycrate/FactoryCrateMessageBuilder.java @@ -22,23 +22,22 @@ package resources.objects.factorycrate; import java.nio.ByteOrder; +import java.util.Map; import org.apache.mina.core.buffer.IoBuffer; -import resources.objects.ObjectMessageBuilder; -import resources.objects.resource.GalacticResource; -import resources.objects.resource.ResourceContainerObject; +import engine.resources.objects.Builder; +import resources.objects.tangible.TangibleMessageBuilder; -/** - * @author Charon - */ - -public class FactoryCrateMessageBuilder extends ObjectMessageBuilder{ +public class FactoryCrateMessageBuilder extends TangibleMessageBuilder{ - public FactoryCrateMessageBuilder(FactoryCrateObject factoryCrateObject) { - setObject(factoryCrateObject); + public FactoryCrateMessageBuilder(FactoryCrateObject object) { + super(object); } + public FactoryCrateMessageBuilder() { + super(); + } public IoBuffer buildBaseline3() { FactoryCrateObject factoryCrateObject = (FactoryCrateObject) object; @@ -162,15 +161,23 @@ public class FactoryCrateMessageBuilder extends ObjectMessageBuilder{ } @Override - public void sendListDelta(byte viewType, short updateType, IoBuffer buffer) { - // TODO Auto-generated method stub - + public void buildBaseline3(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline3(deltaBuilders, deltaBuilders); } - @Override - public void sendBaselines() { - // TODO Auto-generated method stub - + public void buildBaseline6(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline6(deltaBuilders, deltaBuilders); } + + @Override + public void buildBaseline8(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline8(deltaBuilders, deltaBuilders); + } + + @Override + public void buildBaseline9(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline9(deltaBuilders, deltaBuilders); + } + } diff --git a/src/resources/objects/factorycrate/FactoryCrateObject.java b/src/resources/objects/factorycrate/FactoryCrateObject.java index d7b7b7d6..b735ece8 100644 --- a/src/resources/objects/factorycrate/FactoryCrateObject.java +++ b/src/resources/objects/factorycrate/FactoryCrateObject.java @@ -21,16 +21,15 @@ ******************************************************************************/ package resources.objects.factorycrate; +import java.io.Serializable; import java.util.Map; import java.util.Vector; import main.NGECore; - import protocol.swg.SceneCreateObjectByCrc; import protocol.swg.SceneDestroyObject; import protocol.swg.SceneEndBaselines; import protocol.swg.UpdateContainmentMessage; -import protocol.swg.UpdatePVPStatusMessage; import com.sleepycat.persist.model.NotPersistent; import com.sleepycat.persist.model.Persistent; @@ -41,17 +40,15 @@ import engine.resources.objects.SWGObject; import engine.resources.scene.Planet; import engine.resources.scene.Point3D; import engine.resources.scene.Quaternion; - +import resources.objects.ObjectMessageBuilder; import resources.objects.creature.CreatureObject; import resources.objects.tangible.TangibleObject; -/** - * @author Charon - */ - @Persistent(version=0) -public class FactoryCrateObject extends TangibleObject { +public class FactoryCrateObject extends TangibleObject implements Serializable { + private static final long serialVersionUID = 1L; + private Vector contents; private byte capacity; private byte contentObjectQuantity; @@ -59,14 +56,21 @@ public class FactoryCrateObject extends TangibleObject { private TangibleObject contentObjectType; @NotPersistent - private FactoryCrateMessageBuilder messageBuilder; + private transient FactoryCrateMessageBuilder messageBuilder; public FactoryCrateObject() { } - public FactoryCrateObject(long objectID, Planet planet, String template, Point3D position, Quaternion orientation) { - super(objectID, planet, template, position, orientation); + @Override + public void initAfterDBLoad() { + super.init(); + messageBuilder = new FactoryCrateMessageBuilder(this); + } + + + public FactoryCrateObject(long objectID, Planet planet, Point3D position, Quaternion orientation, String template) { + super(objectID, planet, position, orientation, template); this.messageBuilder = new FactoryCrateMessageBuilder(this); this.contents = new Vector(); this.contentObjectQuantity = 0; @@ -267,4 +271,9 @@ public class FactoryCrateObject extends TangibleObject { this.getAttributes().put("@obj_attr_n:factory_count", ""+this.getQuantity()); //services.CharonPacketUtils.printAnalysis(messageBuilder.buildDelta3(),"FCYT3 Delta"); } + + public ObjectMessageBuilder getMessageBuilder() { + return messageBuilder; + } + } \ No newline at end of file diff --git a/src/resources/objects/group/GroupMessageBuilder.java b/src/resources/objects/group/GroupMessageBuilder.java index a04b639a..2c407e36 100644 --- a/src/resources/objects/group/GroupMessageBuilder.java +++ b/src/resources/objects/group/GroupMessageBuilder.java @@ -22,16 +22,23 @@ package resources.objects.group; import java.nio.ByteOrder; +import java.util.Map; + import org.apache.mina.core.buffer.IoBuffer; + +import engine.resources.objects.Builder; import engine.resources.objects.SWGObject; -import resources.objects.ObjectMessageBuilder; +import resources.objects.universe.UniverseMessageBuilder; -public class GroupMessageBuilder extends ObjectMessageBuilder { +public class GroupMessageBuilder extends UniverseMessageBuilder { - public GroupMessageBuilder(GroupObject groupObject) { - setObject(groupObject); + public GroupMessageBuilder(GroupObject object) { + super(object); + } + + public GroupMessageBuilder() { + super(); } - public IoBuffer buildBaseline3() { @@ -178,18 +185,15 @@ public class GroupMessageBuilder extends ObjectMessageBuilder { return buffer = createDelta("GRUP", (byte) 6, (short) 1, (short) 2, buffer, size + 4); } - - + @Override - public void sendListDelta(byte viewType, short updateType, IoBuffer buffer) { - // TODO Auto-generated method stub - + public void buildBaseline3(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline3(baselineBuilders, deltaBuilders); } - + @Override - public void sendBaselines() { - // TODO Auto-generated method stub - + public void buildBaseline6(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline6(baselineBuilders, deltaBuilders); } - + } diff --git a/src/resources/objects/group/GroupObject.java b/src/resources/objects/group/GroupObject.java index 0f5c4622..85535598 100644 --- a/src/resources/objects/group/GroupObject.java +++ b/src/resources/objects/group/GroupObject.java @@ -23,8 +23,8 @@ package resources.objects.group; import java.util.Vector; +import resources.objects.ObjectMessageBuilder; import resources.objects.universe.UniverseObject; - import engine.clients.Client; import engine.resources.objects.SWGObject; import engine.resources.scene.Point3D; @@ -32,13 +32,14 @@ import engine.resources.scene.Quaternion; public class GroupObject extends UniverseObject { + private static final long serialVersionUID = 1L; private Vector memberList = new Vector(); private int memberListUpdateCounter; private SWGObject groupLeader; private SWGObject lootMaster; private short groupLevel; private int lootMode; - private GroupMessageBuilder messageBuilder; + private transient GroupMessageBuilder messageBuilder; private int chatRoomId; public static int FREE_FOR_ALL = 0; @@ -165,4 +166,9 @@ public class GroupObject extends UniverseObject { destination.getSession().write(messageBuilder.buildBaseline6()); } + + public ObjectMessageBuilder getMessageBuilder() { + return messageBuilder; + } + } diff --git a/src/resources/objects/guild/GuildMessageBuilder.java b/src/resources/objects/guild/GuildMessageBuilder.java index ade7d71d..65bc51c6 100644 --- a/src/resources/objects/guild/GuildMessageBuilder.java +++ b/src/resources/objects/guild/GuildMessageBuilder.java @@ -21,250 +21,29 @@ ******************************************************************************/ package resources.objects.guild; -import java.nio.ByteOrder; -import java.util.Map.Entry; +import java.util.Map; -import org.apache.mina.core.buffer.IoBuffer; +import engine.resources.objects.Builder; +import resources.objects.universe.UniverseMessageBuilder; -import engine.clients.Client; - -import resources.gcw.CurrentServerGCWZoneHistory; -import resources.gcw.CurrentServerGCWZonePercent; -import resources.gcw.OtherServerGCWZonePercent; -import resources.guild.Guild; -import resources.objects.ObjectMessageBuilder; - -public class GuildMessageBuilder extends ObjectMessageBuilder { +public class GuildMessageBuilder extends UniverseMessageBuilder { - public GuildMessageBuilder(GuildObject guildObject) { - setObject(guildObject); + public GuildMessageBuilder(GuildObject object) { + super(object); } - public IoBuffer buildBaseline3() { - GuildObject guilds = (GuildObject) object; - - IoBuffer buffer = bufferPool.allocate(((guilds.getGuildList().size() * 10) + 49), false).order(ByteOrder.LITTLE_ENDIAN); - buffer.putShort((short) 5); // Object Count - buffer.putFloat(guilds.getComplexity()); - buffer.put(getAsciiString(guilds.getSTFFile())); - buffer.putInt(guilds.getSTFSpacer()); - buffer.put(getAsciiString(guilds.getSTFName())); - buffer.put(getUnicodeString(guilds.getCustomName())); - buffer.putInt(guilds.getVolume()); - buffer.putInt(guilds.getGuildList().size()); - buffer.putInt(guilds.getGuildList().getUpdateCounter()); - for (Guild object : guilds.getGuildList().get()) { - buffer.put(getAsciiString(object.getString())); - } - - int size = buffer.position(); - buffer = bufferPool.allocate(size, false).put(buffer.array(), 0, size); - buffer.flip(); - buffer = createBaseline("GILD", (byte) 3, buffer, size); - - return buffer; - } - - public IoBuffer buildBaseline6() { - GuildObject guilds = (GuildObject) object; - - int capacity = 16 + getAsciiString(guilds.getSTFFile()).length; - for (Entry entry : guilds.getCurrentServerGCWZonePercentMap().entrySet()) capacity += (11 + entry.getKey().length() + entry.getValue().getBytes().length); - for (Entry entry : guilds.getCurrentServerGCWTotalPercentMap().entrySet()) capacity += (11 + entry.getKey().length() + entry.getValue().getBytes().length); - for (Entry entry : guilds.getCurrentServerGCWZoneHistoryMap().entries()) capacity += (11 + entry.getKey().length() + entry.getValue().getBytes().length); - for (Entry entry : guilds.getCurrentServerGCWTotalHistoryMap().entries()) capacity += (11 + entry.getKey().length() + entry.getValue().getBytes().length); - for (Entry entry : guilds.getOtherServerGCWZonePercentMap().entries()) capacity += (11 + entry.getKey().length() + entry.getValue().getBytes().length); - for (Entry entry : guilds.getOtherServerGCWTotalPercentMap().entries()) capacity += (11 + entry.getKey().length() + entry.getValue().getBytes().length); - - IoBuffer buffer = bufferPool.allocate(capacity, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.setAutoExpand(true); - buffer.putShort((short) 9); // Object Count - buffer.putInt(guilds.getServerId()); - buffer.put(getAsciiString(guilds.getSTFFile())); - buffer.putInt(guilds.getUnknown1()); - buffer.putShort(guilds.getUnknown2()); - buffer.putInt(guilds.getCurrentServerGCWZonePercentMap().size()); - buffer.putInt(guilds.getCurrentServerGCWZonePercentMap().getUpdateCounter()); - for (Entry entry : guilds.getCurrentServerGCWZonePercentMap().entrySet()) { - buffer.put((byte) 0); - buffer.put(getAsciiString(entry.getKey())); - buffer.put(entry.getValue().getBytes()); - } - buffer.putInt(guilds.getCurrentServerGCWTotalPercentMap().size()); - buffer.putInt(guilds.getCurrentServerGCWTotalPercentMap().getUpdateCounter()); - for (Entry entry : guilds.getCurrentServerGCWTotalPercentMap().entrySet()) { - buffer.put((byte) 0); - buffer.put(getAsciiString(entry.getKey())); - buffer.put(entry.getValue().getBytes()); - } - buffer.putInt(guilds.getCurrentServerGCWZoneHistoryMap().size()); - buffer.putInt(guilds.getCurrentServerGCWZoneHistoryMap().getUpdateCounter()); - for (Entry entry : guilds.getCurrentServerGCWZoneHistoryMap().entries()) { - buffer.put((byte) 0); - buffer.put(getAsciiString(entry.getKey())); - buffer.put(entry.getValue().getBytes()); - } - buffer.putInt(guilds.getCurrentServerGCWTotalHistoryMap().size()); - buffer.putInt(guilds.getCurrentServerGCWTotalHistoryMap().getUpdateCounter()); - for (Entry entry : guilds.getCurrentServerGCWTotalHistoryMap().entries()) { - buffer.put((byte) 0); - buffer.put(getAsciiString(entry.getKey())); - buffer.put(entry.getValue().getBytes()); - } - buffer.putInt(guilds.getOtherServerGCWZonePercentMap().size()); - buffer.putInt(guilds.getOtherServerGCWZonePercentMap().getUpdateCounter()); - for (Entry entry : guilds.getOtherServerGCWZonePercentMap().entries()) { - buffer.put((byte) 0); - buffer.put(getAsciiString(entry.getKey())); - buffer.put(entry.getValue().getBytes()); - } - buffer.putInt(guilds.getOtherServerGCWTotalPercentMap().size()); - buffer.putInt(guilds.getOtherServerGCWTotalPercentMap().getUpdateCounter()); - for (Entry entry : guilds.getOtherServerGCWTotalPercentMap().entries()) { - buffer.put((byte) 0); - buffer.put(getAsciiString(entry.getKey())); - buffer.put(entry.getValue().getBytes()); - } - buffer.putInt(guilds.getUnknown3()); - - int size = buffer.position(); - buffer = bufferPool.allocate(size, false).put(buffer.array(), 0, size); - buffer.flip(); - buffer = createBaseline("GILD", (byte) 6, buffer, size); - - return buffer; - } - - public IoBuffer buildComplexity(float complexity) { - IoBuffer buffer = bufferPool.allocate(4, false).order(ByteOrder.LITTLE_ENDIAN); - - buffer.putFloat(complexity); - int size = buffer.position(); - buffer.flip(); - buffer = createDelta("GILD", (byte) 3, (short) 1, (short) 0, buffer, size + 4); - - return buffer; - } - - public IoBuffer buildSTF(String STFFile, int STFSpacer, String STFName) { - IoBuffer buffer = bufferPool.allocate((STFFile.length() + STFName.length() + 8), false).order(ByteOrder.LITTLE_ENDIAN); - - buffer.put(getAsciiString(STFFile)); - buffer.putInt(STFSpacer); - buffer.put(getAsciiString(STFName)); - int size = buffer.position(); - buffer.flip(); - buffer = createDelta("GILD", (byte) 3, (short) 1, (short) 1, buffer, size + 4); - - return buffer; - } - - public IoBuffer buildCustomName(String customName) { - IoBuffer buffer = bufferPool.allocate((customName.length() + 4), false).order(ByteOrder.LITTLE_ENDIAN); - - buffer.put(getUnicodeString(customName)); - int size = buffer.position(); - buffer.flip(); - buffer = createDelta("GILD", (byte) 3, (short) 1, (short) 2, buffer, size + 4); - - return buffer; - } - - public IoBuffer buildVolume(int volume) { - IoBuffer buffer = bufferPool.allocate(4, false).order(ByteOrder.LITTLE_ENDIAN); - - buffer.putInt(volume); - int size = buffer.position(); - buffer.flip(); - buffer = createDelta("GILD", (byte) 3, (short) 1, (short) 3, buffer, size + 4); - - return buffer; - } - - public IoBuffer buildServerId(int serverId) { - IoBuffer buffer = bufferPool.allocate(4, false).order(ByteOrder.LITTLE_ENDIAN); - - buffer.putInt(serverId); - int size = buffer.position(); - buffer.flip(); - buffer = createDelta("GILD", (byte) 6, (short) 1, (short) 0, buffer, size + 4); - - return buffer; - } - - public IoBuffer buildUnknowns(int unknown1, short unknown2) { - IoBuffer buffer = bufferPool.allocate(6, false).order(ByteOrder.LITTLE_ENDIAN); - - buffer.putInt(unknown1); - buffer.putShort(unknown2); - int size = buffer.position(); - buffer.flip(); - buffer = createDelta("GILD", (byte) 6, (short) 1, (short) 1, buffer, size + 4); - - return buffer; - } - - public IoBuffer buildUnknown3(int unknown3) { - IoBuffer buffer = bufferPool.allocate(4, false).order(ByteOrder.LITTLE_ENDIAN); - - buffer.putInt(unknown3); - int size = buffer.position(); - buffer.flip(); - buffer = createDelta("GILD", (byte) 6, (short) 1, (short) 8, buffer, size + 4); - - return buffer; + public GuildMessageBuilder() { + super(); } @Override - public void sendListDelta(byte viewType, short updateType, IoBuffer buffer) { - - switch (viewType) { - case 3: - { - switch (updateType) { - case 4: - { - buffer = createDelta("GILD", (byte) 3, (short) 1, (short) 4, buffer.flip(), buffer.array().length + 4); - - for (Client client : ((GuildObject) object).core.getActiveConnectionsMap().values()) { - client.getSession().write(buffer); - } - - break; - } - } - } - case 6: - { - switch (updateType) { - case 2: - case 3: - case 4: - case 5: - case 6: - case 7: - { - buffer = createDelta("GILD", (byte) 6, (short) 1, (short) updateType, buffer.flip(), buffer.array().length + 4); - - for (Client client : ((GuildObject) object).core.getActiveConnectionsMap().values()) { - client.getSession().write(buffer); - } - - break; - } - default: - { - return; - } - } - } - } + public void buildBaseline3(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline3(baselineBuilders, deltaBuilders); } - + @Override - public void sendBaselines() { - // TODO Auto-generated method stub - + public void buildBaseline6(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline6(baselineBuilders, deltaBuilders); } } diff --git a/src/resources/objects/guild/GuildObject.java b/src/resources/objects/guild/GuildObject.java index 5890756b..b3723937 100644 --- a/src/resources/objects/guild/GuildObject.java +++ b/src/resources/objects/guild/GuildObject.java @@ -21,6 +21,7 @@ ******************************************************************************/ package resources.objects.guild; +import java.io.Serializable; import java.util.HashMap; import java.util.Map; import java.util.TreeMap; @@ -28,253 +29,120 @@ import java.util.TreeMap; import org.apache.mina.core.buffer.IoBuffer; import main.NGECore; - import resources.gcw.CurrentServerGCWZoneHistory; import resources.gcw.CurrentServerGCWZonePercent; import resources.gcw.OtherServerGCWZonePercent; import resources.guild.Guild; +import resources.objects.ObjectMessageBuilder; import resources.objects.SWGList; import resources.objects.SWGMap; import resources.objects.SWGMultiMap; +import resources.objects.SWGSet; import resources.objects.universe.UniverseObject; import services.collections.ServerFirst; - -import com.sleepycat.je.Environment; -import com.sleepycat.je.Transaction; -import com.sleepycat.persist.model.Entity; -import com.sleepycat.persist.model.NotPersistent; - import engine.clients.Client; -import engine.resources.objects.IPersistent; +import engine.resources.objects.Baseline; import engine.resources.scene.Planet; import engine.resources.scene.Point3D; import engine.resources.scene.Quaternion; -@Entity(version=1) -public class GuildObject extends UniverseObject implements IPersistent { +public class GuildObject extends UniverseObject implements Serializable { - protected NGECore core; - @NotPersistent - private GuildMessageBuilder messageBuilder = new GuildMessageBuilder(this); + private static final long serialVersionUID = 1L; - private Map serverFirst = new HashMap(); - private Map> zoneMap = new TreeMap>(); - @NotPersistent - private Transaction txn; - - private long nextInstanceId = 0; - - // GILD 3 - private float complexity = 0x803F0F00; - private String STFFile = "string_id_table"; - private int STFSpacer = 0; - private String STFName = ""; - private String customName = ""; - private int volume = 0; - private SWGList guildList = new SWGList(messageBuilder, 3, 4); - - // GILD 6 - private int serverId = 0x43; - //private String STFName = "string_id_table"; - private int unknown1 = 0; - private short unknown2 = 0; - private SWGMap currentServerGCWZonePercentMap = new SWGMap(messageBuilder, 6, 2); - private SWGMap currentServerGCWTotalPercentMap = new SWGMap(messageBuilder, 6, 3); - private SWGMultiMap currentServerGCWZoneHistoryMap = new SWGMultiMap(messageBuilder, 6, 4); - private SWGMultiMap currentServerGCWTotalHistoryMap = new SWGMultiMap(messageBuilder, 6, 5); - private SWGMultiMap otherServerGCWZonePercentMap = new SWGMultiMap(messageBuilder, 6, 6); - private SWGMultiMap otherServerGCWTotalPercentMap = new SWGMultiMap(messageBuilder, 6, 7); - private int unknown3 = 5; + private transient GuildMessageBuilder messageBuilder = new GuildMessageBuilder(this); public GuildObject(NGECore core, long objectID, Planet planet, Point3D position, Quaternion orientation, String Template) { super(objectID, planet, position, orientation, Template); - this.core = core; + otherVariables = getOtherVariables(); // FIXME temp } - public float getComplexity() { - synchronized(objectMutex) { - return complexity; - } + public GuildObject() { + super(); } - public void setComplexity(float complexity) { - synchronized(objectMutex) { - this.complexity = complexity; - } - - notifyAll(messageBuilder.buildComplexity(complexity)); + public void initAfterDBLoad() { + super.init(); } - public String getSTFFile() { - synchronized(objectMutex) { - return STFFile; - } + @Override + public Baseline getOtherVariables() { + Baseline baseline = super.getOtherVariables(); + baseline.put("nextInstanceId", (long) 0); + baseline.put("zoneMap", new TreeMap>()); + baseline.put("serverFirst", new HashMap()); + return baseline; } - public void setSTFFile(String STFFile) { - synchronized(objectMutex) { - this.STFFile = STFFile; - } - - notifyAll(messageBuilder.buildSTF(STFFile, STFSpacer, STFName)); + @Override + public Baseline getBaseline3() { + Baseline baseline = super.getBaseline3(); + baseline.put("guildList", new SWGSet(this, 3, 4, false)); + return baseline; } - public int getSTFSpacer() { - synchronized(objectMutex) { - return STFSpacer; - } + @Override + public Baseline getBaseline6() { + Baseline baseline = super.getBaseline6(); + baseline.put("currentServerGCWZonePercentMap", new SWGMap(this, 6, 2, true)); + baseline.put("currentServerGCWTotalPercentMap", new SWGMap(this, 6, 3, true)); + baseline.put("currentServerGCWZoneHistoryMap", new SWGMultiMap(this, 6, 4, true)); + baseline.put("currentServerGCWTotalHistoryMap", new SWGMultiMap(this, 6, 5, true)); + baseline.put("otherServerGCWZonePercentMap", new SWGMultiMap(this, 6, 6, true)); + baseline.put("otherServerGCWTotalPercentMap", new SWGMultiMap(this, 6, 7, true)); + baseline.put("8", 5); + return baseline; } - public void setSTFSpacer(int STFSpacer) { - synchronized(objectMutex) { - this.STFSpacer = STFSpacer; - } - - notifyAll(messageBuilder.buildSTF(STFFile, STFSpacer, STFName)); - } - - public String getSTFName() { - synchronized(objectMutex) { - return STFName; - } - } - - public void setSTFName(String STFName) { - synchronized(objectMutex) { - this.STFName = STFName; - } - - notifyAll(messageBuilder.buildSTF(STFFile, STFSpacer, STFName)); - } - - public String getCustomName() { - synchronized(objectMutex) { - return customName; - } - } - - public void setCustomName(String customName) { - synchronized(objectMutex) { - this.customName = customName; - } - - notifyAll(messageBuilder.buildCustomName(customName)); - } - - public int getVolume() { - synchronized(objectMutex) { - return volume; - } - } - - public void setVolume(int volume) { - synchronized(objectMutex) { - this.volume = volume; - } - - notifyAll(messageBuilder.buildVolume(volume)); - } - - public SWGList getGuildList() { - return guildList; - } - - public int getServerId() { - synchronized(objectMutex) { - return serverId; - } - } - - public void setServerId(int serverId) { - synchronized(objectMutex) { - this.serverId = serverId; - } - - notifyAll(messageBuilder.buildServerId(serverId)); - } - - public int getUnknown1() { - synchronized(objectMutex) { - return unknown1; - } - } - - public void setUnknown1(int unknown1) { - synchronized(objectMutex) { - this.unknown1 = unknown1; - } - - notifyAll(messageBuilder.buildUnknowns(unknown1, unknown2)); - } - - public short getUnknown2() { - synchronized(objectMutex) { - return unknown2; - } - } - - public void setUnknown2(short unknown2) { - synchronized(objectMutex) { - this.unknown2 = unknown2; - } - - notifyAll(messageBuilder.buildUnknowns(unknown1, unknown2)); + @SuppressWarnings("unchecked") + public SWGSet getGuildList() { + return (SWGSet) getBaseline(3).get("guildList"); } + @SuppressWarnings("unchecked") public SWGMap getCurrentServerGCWZonePercentMap() { - return currentServerGCWZonePercentMap; + return (SWGMap) getBaseline(6).get("currentServerGCWZonePercentMap"); } + @SuppressWarnings("unchecked") public SWGMap getCurrentServerGCWTotalPercentMap() { - return currentServerGCWTotalPercentMap; + return (SWGMap) getBaseline(6).get("currentServerGCWTotalPercentMap"); } + @SuppressWarnings("unchecked") public SWGMultiMap getCurrentServerGCWZoneHistoryMap() { - return currentServerGCWZoneHistoryMap; + return (SWGMultiMap) getBaseline(6).get("currentServerGCWZoneHistoryMap"); } + @SuppressWarnings("unchecked") public SWGMultiMap getCurrentServerGCWTotalHistoryMap() { - return currentServerGCWTotalHistoryMap; + return (SWGMultiMap) getBaseline(6).get("currentServerGCWTotalHistoryMap"); } + @SuppressWarnings("unchecked") public SWGMultiMap getOtherServerGCWZonePercentMap() { - return otherServerGCWZonePercentMap; + return (SWGMultiMap) getBaseline(6).get("otherServerGCWZonePercentMap"); } + @SuppressWarnings("unchecked") public SWGMultiMap getOtherServerGCWTotalPercentMap() { - return otherServerGCWTotalPercentMap; - } - - public int getUnknown3() { - synchronized(objectMutex) { - return unknown3; - } - } - - public void setUnknown3(int unknown3) { - synchronized(objectMutex) { - this.unknown3 = unknown3; - } - - notifyAll(messageBuilder.buildUnknown3(unknown3)); + return (SWGMultiMap) getBaseline(6).get("otherServerGCWTotalPercentMap"); } + @SuppressWarnings("unchecked") public Map> getZoneMap() { - synchronized(objectMutex) { - return zoneMap; - } + return (Map>) otherVariables.get("zoneMap"); } + @SuppressWarnings("unchecked") public Map getServerFirst() { - synchronized(objectMutex) { - return serverFirst; - } + return (Map) otherVariables.get("serverFirst"); } public boolean addServerFirst(String collectionName, ServerFirst player) { synchronized(objectMutex) { - if (!serverFirst.containsKey(collectionName)) { - serverFirst.put(collectionName, player); + if (!getServerFirst().containsKey(collectionName)) { + getServerFirst().put(collectionName, player); return true; } @@ -282,32 +150,40 @@ public class GuildObject extends UniverseObject implements IPersistent { } } - public synchronized long getNextInstanceId() { - long ret = nextInstanceId; - nextInstanceId++; - return ret; + public long getNextInstanceId() { + synchronized(objectMutex) { + otherVariables.set("nextInstanceId", (long) (((long) otherVariables.get("nextInstanceId")) + 1L)); + return (long) otherVariables.get("nextInstanceId"); + } + } + + @Override + public void notifyClients(IoBuffer buffer, boolean notifySelf) { + notifyObservers(buffer, false); + } + + @Override + public ObjectMessageBuilder getMessageBuilder() { + synchronized(objectMutex) { + if (messageBuilder == null) { + messageBuilder = new GuildMessageBuilder(this); + } + + return messageBuilder; + } } @Override public void sendBaselines(Client destination) { - destination.getSession().write(messageBuilder.buildBaseline3()); - destination.getSession().write(messageBuilder.buildBaseline6()); - } - - private void notifyAll(IoBuffer buffer) { - synchronized(core.getActiveConnectionsMap()) { - for (Client client : core.getActiveConnectionsMap().values()) { - client.getSession().write(buffer); - } + if (destination != null && destination.getSession() != null) { + destination.getSession().write(getBaseline(3).getBaseline()); + destination.getSession().write(getBaseline(6).getBaseline()); } } - public Transaction getTransaction() { - return txn; - } - - public void createTransaction(Environment env) { - txn = env.beginTransaction(null, null); + @Override + public void sendListDelta(byte viewType, short updateType, IoBuffer buffer) { + notifyClients(getBaseline(viewType).createDelta(updateType, buffer.array()), false); } } diff --git a/src/resources/objects/harvester/HarvesterMessageBuilder.java b/src/resources/objects/harvester/HarvesterMessageBuilder.java index cbe9b4d9..81372b07 100644 --- a/src/resources/objects/harvester/HarvesterMessageBuilder.java +++ b/src/resources/objects/harvester/HarvesterMessageBuilder.java @@ -22,24 +22,26 @@ package resources.objects.harvester; import java.nio.ByteOrder; +import java.util.Map; import java.util.Vector; import org.apache.mina.core.buffer.IoBuffer; +import engine.resources.objects.Builder; import engine.resources.objects.SWGObject; - -import resources.objects.ObjectMessageBuilder; import resources.objects.creature.CreatureObject; import resources.objects.resource.GalacticResource; import resources.objects.resource.ResourceContainerObject; +import resources.objects.tangible.TangibleMessageBuilder; -/** - * @author Charon - */ -public class HarvesterMessageBuilder extends ObjectMessageBuilder{ +public class HarvesterMessageBuilder extends TangibleMessageBuilder { - public HarvesterMessageBuilder(HarvesterObject harvesterObject) { - setObject(harvesterObject); + public HarvesterMessageBuilder(HarvesterObject object) { + super(object); + } + + public HarvesterMessageBuilder() { + super(); } public IoBuffer buildBaseline3() { @@ -166,9 +168,9 @@ public class HarvesterMessageBuilder extends ObjectMessageBuilder{ Vector outputHopperContent = harvester.getOutputHopperContent(); int hopperContentSize = outputHopperContent.size(); - int iHopperList = 1; + //int iHopperList = 1; if (hopperContentSize==0) { - iHopperList = 0; + //iHopperList = 0; } //int sizeP = 30 + 15*hopperContentSize; int sizeP = 30-2-4-4; @@ -193,12 +195,12 @@ public class HarvesterMessageBuilder extends ObjectMessageBuilder{ // buffer.putInt(iHopperList); // buffer.putInt(harvester.getResourceUpdateCount()); int sumOfHopper = 0; - int i = 0; + //int i = 0; sumOfHopper = 0; Vector outputHopper = harvester.getOutputHopperContent(); for (ResourceContainerObject cont : outputHopper){ sumOfHopper += cont.getStackCount(); - i++; + //i++; } buffer.putShort((short)0x0A); @@ -430,9 +432,9 @@ public class HarvesterMessageBuilder extends ObjectMessageBuilder{ public IoBuffer buildHINO7ActivateDelta2(HarvesterObject harvester) { - int iHopperList = 0; + //int iHopperList = 0; if (harvester.getOutputHopperContent().size() >= 1) { - iHopperList = 1; + //iHopperList = 1; } IoBuffer buffer = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN); @@ -461,9 +463,9 @@ public class HarvesterMessageBuilder extends ObjectMessageBuilder{ public IoBuffer buildHINO7ActivateDelta2old(HarvesterObject harvester) { - int iHopperList = 0; + //int iHopperList = 0; if (harvester.getOutputHopperContent().size() >= 1) { - iHopperList = 1; + //iHopperList = 1; } IoBuffer buffer = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN); @@ -812,15 +814,24 @@ public class HarvesterMessageBuilder extends ObjectMessageBuilder{ return IoBuffer.allocate(size).put(buffer.array(), 0, size).flip(); } + @Override + public void buildBaseline3(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline3(deltaBuilders, deltaBuilders); + } @Override - public void sendListDelta(byte viewType, short updateType, IoBuffer buffer) { - // TODO Auto-generated method stub - + public void buildBaseline6(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline6(deltaBuilders, deltaBuilders); } - + @Override - public void sendBaselines() { - + public void buildBaseline8(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline8(deltaBuilders, deltaBuilders); } + + @Override + public void buildBaseline9(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline9(deltaBuilders, deltaBuilders); + } + } diff --git a/src/resources/objects/harvester/HarvesterObject.java b/src/resources/objects/harvester/HarvesterObject.java index 8964d7e1..50f87e23 100644 --- a/src/resources/objects/harvester/HarvesterObject.java +++ b/src/resources/objects/harvester/HarvesterObject.java @@ -21,6 +21,7 @@ ******************************************************************************/ package resources.objects.harvester; +import java.io.Serializable; import java.util.Vector; import main.NGECore; @@ -31,21 +32,21 @@ import engine.clients.Client; import engine.resources.scene.Planet; import engine.resources.scene.Point3D; import engine.resources.scene.Quaternion; +import resources.objects.ObjectMessageBuilder; import resources.objects.creature.CreatureObject; import resources.objects.installation.InstallationMessageBuilder; import resources.objects.installation.InstallationObject; import resources.objects.resource.GalacticResource; import resources.objects.resource.ResourceContainerObject; - -/** - * @author Charon - */ +import resources.objects.tangible.TangibleObject; @Persistent(version=0) -public class HarvesterObject extends InstallationObject { +public class HarvesterObject extends InstallationObject implements Serializable { - private HarvesterMessageBuilder messageBuilder; - private InstallationMessageBuilder installationMessageBuilder; + private static final long serialVersionUID = 1L; + + private transient HarvesterMessageBuilder messageBuilder; + private transient InstallationMessageBuilder installationMessageBuilder; public final static byte HARVESTER_TYPE_MINERAL = 0; public final static byte HARVESTER_TYPE_CHEMICAL = 1; @@ -116,10 +117,9 @@ public class HarvesterObject extends InstallationObject { private String deedTemplate; private int specRate; - - public HarvesterObject(long objectID, Planet planet, String template, Point3D position, Quaternion orientation){ - super(objectID, planet, template, position, orientation); + public HarvesterObject(long objectID, Planet planet, Point3D position, Quaternion orientation, String template) { + super(objectID, planet, position, orientation, template); this.setConditionDamage(100); messageBuilder = new HarvesterMessageBuilder(this); installationMessageBuilder = new InstallationMessageBuilder((InstallationObject)this); @@ -128,6 +128,17 @@ public class HarvesterObject extends InstallationObject { public int getBER() { return BER; } + + @Override + public void initAfterDBLoad() { + super.init(); + messageBuilder = new HarvesterMessageBuilder(this); + installationMessageBuilder = new InstallationMessageBuilder((InstallationObject)this); + outputHopperContent.forEach(ResourceContainerObject::initAfterDBLoad); + if(selectedHarvestResource != null) + selectedHarvestResource.initAfterDBLoad(); + defendersList = new Vector(); + } public void setBER(int baseExtractionRate) { @@ -408,4 +419,9 @@ public class HarvesterObject extends InstallationObject { //destination.getSession().write(installationMessageBuilder.buildBaseline9()); } + + public ObjectMessageBuilder getMessageBuilder() { + return messageBuilder; + } + } diff --git a/src/resources/objects/installation/InstallationMessageBuilder.java b/src/resources/objects/installation/InstallationMessageBuilder.java index f9fe356d..d2b1f80c 100644 --- a/src/resources/objects/installation/InstallationMessageBuilder.java +++ b/src/resources/objects/installation/InstallationMessageBuilder.java @@ -22,18 +22,21 @@ package resources.objects.installation; import java.nio.ByteOrder; +import java.util.Map; + import org.apache.mina.core.buffer.IoBuffer; -import resources.objects.ObjectMessageBuilder; -import resources.objects.harvester.HarvesterObject; -/** - * @author Charon - */ +import engine.resources.objects.Builder; +import resources.objects.tangible.TangibleMessageBuilder; -public class InstallationMessageBuilder extends ObjectMessageBuilder{ +public class InstallationMessageBuilder extends TangibleMessageBuilder{ - public InstallationMessageBuilder(InstallationObject installationObject) { - setObject(installationObject); + public InstallationMessageBuilder(InstallationObject object) { + super(object); + } + + public InstallationMessageBuilder() { + super(); } public IoBuffer buildBaseline3(InstallationObject installationObject) { @@ -170,8 +173,8 @@ public class InstallationMessageBuilder extends ObjectMessageBuilder{ public IoBuffer constructINSO7Var1(InstallationObject installationObject,long selectedResource) { IoBuffer buffer = bufferPool.allocate(10, false).order(ByteOrder.LITTLE_ENDIAN); - int hopperContentsSize = ((HarvesterObject)installationObject).getOutputHopperContent().size()+1; - byte updateCounter = ((HarvesterObject)installationObject).getUpdateCount(); + //int hopperContentsSize = ((HarvesterObject)installationObject).getOutputHopperContent().size()+1; + //byte updateCounter = ((HarvesterObject)installationObject).getUpdateCount(); buffer.setAutoExpand(true); buffer.putShort((short)2); // buffer.putShort((short)updateCounter); @@ -211,15 +214,30 @@ public class InstallationMessageBuilder extends ObjectMessageBuilder{ // 0000: 05 00 53 21 86 12 82 EC 7D 16 00 00 02 00 4F 53 ..S!....}.....OS // 0010: 4E 49 07 12 00 00 00 02 00 09 00 00 00 00 00 05 NI.............. // 0020: 00 8A D3 79 16 00 00 0F 00 ...y..... - + @Override - public void sendListDelta(byte viewType, short updateType, IoBuffer buffer) { - // TODO Auto-generated method stub - + public void buildBaseline3(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline3(deltaBuilders, deltaBuilders); } - + @Override - public void sendBaselines() { - + public void buildBaseline6(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline6(deltaBuilders, deltaBuilders); } + + @Override + public void buildBaseline7(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline7(deltaBuilders, deltaBuilders); + } + + @Override + public void buildBaseline8(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline8(deltaBuilders, deltaBuilders); + } + + @Override + public void buildBaseline9(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline9(deltaBuilders, deltaBuilders); + } + } diff --git a/src/resources/objects/installation/InstallationObject.java b/src/resources/objects/installation/InstallationObject.java index 4d78229d..b9cc98d6 100644 --- a/src/resources/objects/installation/InstallationObject.java +++ b/src/resources/objects/installation/InstallationObject.java @@ -21,23 +21,43 @@ ******************************************************************************/ package resources.objects.installation; +import java.io.Serializable; +import java.util.Vector; + import com.sleepycat.persist.model.Entity; import engine.clients.Client; import engine.resources.scene.Planet; import engine.resources.scene.Point3D; import engine.resources.scene.Quaternion; +import resources.objects.ObjectMessageBuilder; import resources.objects.tangible.TangibleObject; @Entity(version=0) -public class InstallationObject extends TangibleObject { +public class InstallationObject extends TangibleObject implements Serializable { - public InstallationObject(long objectID, Planet planet, String template, Point3D position, Quaternion orientation){ - super(objectID, planet, template, position, orientation); + private static final long serialVersionUID = 1L; + private transient InstallationMessageBuilder messageBuilder; + + public InstallationObject(long objectID, Planet planet, Point3D position, Quaternion orientation, String template) { + super(objectID, planet, position, orientation, template); + messageBuilder = new InstallationMessageBuilder(this); } @Override public void sendBaselines(Client destination) { } + + @Override + public void initAfterDBLoad() { + super.init(); + messageBuilder = new InstallationMessageBuilder(this); + defendersList = new Vector(); + } + + public ObjectMessageBuilder getMessageBuilder() { + return messageBuilder; + } + } \ No newline at end of file diff --git a/src/resources/objects/intangible/IntangibleMessageBuilder.java b/src/resources/objects/intangible/IntangibleMessageBuilder.java index 1dd0af60..b6c572f8 100644 --- a/src/resources/objects/intangible/IntangibleMessageBuilder.java +++ b/src/resources/objects/intangible/IntangibleMessageBuilder.java @@ -21,6 +21,39 @@ ******************************************************************************/ package resources.objects.intangible; -public class IntangibleMessageBuilder { +import java.util.Map; +import resources.objects.ObjectMessageBuilder; +import engine.resources.objects.Builder; + +public class IntangibleMessageBuilder extends ObjectMessageBuilder { + + public IntangibleMessageBuilder(IntangibleObject object) { + super(object); + } + + public IntangibleMessageBuilder() { + super(); + } + + @Override + public void buildBaseline3(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline3(baselineBuilders, deltaBuilders); + } + + @Override + public void buildBaseline6(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline6(baselineBuilders, deltaBuilders); + } + + @Override + public void buildBaseline8(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline8(baselineBuilders, deltaBuilders); + } + + @Override + public void buildBaseline9(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline9(baselineBuilders, deltaBuilders); + } + } diff --git a/src/resources/objects/intangible/IntangibleObject.java b/src/resources/objects/intangible/IntangibleObject.java index 23801ed6..df6843b3 100644 --- a/src/resources/objects/intangible/IntangibleObject.java +++ b/src/resources/objects/intangible/IntangibleObject.java @@ -21,43 +21,107 @@ ******************************************************************************/ package resources.objects.intangible; -import com.sleepycat.persist.model.Persistent; +import java.io.Serializable; +import org.apache.mina.core.buffer.IoBuffer; + +import resources.objects.ObjectMessageBuilder; import engine.clients.Client; +import engine.resources.objects.Baseline; import engine.resources.objects.SWGObject; import engine.resources.scene.Planet; import engine.resources.scene.Point3D; import engine.resources.scene.Quaternion; -@Persistent(version=0) -public class IntangibleObject extends SWGObject { +public class IntangibleObject extends SWGObject implements Serializable { - private int genericInt; + private static final long serialVersionUID = 1L; + + private transient IntangibleMessageBuilder messageBuilder; + + public IntangibleObject(long objectID, Planet planet, Point3D position, Quaternion orientation, String Template) { + super(objectID, planet, position, orientation, Template); + } public IntangibleObject() { super(); } - - public IntangibleObject(long objectID, Planet planet, Point3D position, Quaternion orientation, String Template) { - super(objectID, planet, position, orientation, Template); + + public void initAfterDBLoad() { + super.init(); } - + + public Baseline getOtherVariables() { + Baseline baseline = super.getOtherVariables(); + return baseline; + } + + public Baseline getBaseline3() { + Baseline baseline = super.getBaseline3(); + baseline.put("genericInt", 0); + return baseline; + } + + public Baseline getBaseline6() { + Baseline baseline = super.getBaseline6(); + return baseline; + } + + public Baseline getBaseline8() { + Baseline baseline = super.getBaseline8(); + return baseline; + } + + public Baseline getBaseline9() { + Baseline baseline = super.getBaseline9(); + return baseline; + } + public int getGenericInt() { - synchronized(objectMutex) { - return genericInt; - } + return (int) getBaseline(3).get("genericInt"); } - + public void setGenericInt(int genericInt) { + notifyClients(getBaseline(3).set("genericInt", genericInt), true); + } + + public void incrementGenericInt(int increase) { + setGenericInt((getGenericInt() + increase)); + } + + public void decrementGenericInt(int decrease) { + setGenericInt((((getGenericInt() - decrease) < 1) ? 0 : (getGenericInt() - decrease))); + } + + public void notifyClients(IoBuffer buffer, boolean notifySelf) { + notifyObservers(buffer, notifySelf); + } + + public ObjectMessageBuilder getMessageBuilder() { synchronized(objectMutex) { - this.genericInt = genericInt; + if (messageBuilder == null) { + messageBuilder = new IntangibleMessageBuilder(this); + } + + return messageBuilder; } } - - @Override - public void sendBaselines(Client client) { - // TODO Auto-generated method stub + + public void sendBaselines(Client destination) { + if (destination != null && destination.getSession() != null) { + destination.getSession().write(getBaseline(3).getBaseline()); + destination.getSession().write(getBaseline(6).getBaseline()); + + // FIXME Check if destination has view permissions to this + if (this.getContainer() == destination.getParent() || this.getGrandparent() == destination.getParent()) { + destination.getSession().write(getBaseline(8).getBaseline()); + destination.getSession().write(getBaseline(9).getBaseline()); + } + } + } + + public void sendListDelta(byte viewType, short updateType, IoBuffer buffer) { } - + } diff --git a/src/resources/objects/manufacture/ManufactureSchematicMessageBuilder.java b/src/resources/objects/manufacture/ManufactureSchematicMessageBuilder.java new file mode 100644 index 00000000..ce90c1ab --- /dev/null +++ b/src/resources/objects/manufacture/ManufactureSchematicMessageBuilder.java @@ -0,0 +1,64 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package resources.objects.manufacture; + +import java.util.Map; + +import engine.resources.objects.Builder; +import resources.objects.intangible.IntangibleMessageBuilder; + +public class ManufactureSchematicMessageBuilder extends IntangibleMessageBuilder { + + public ManufactureSchematicMessageBuilder(ManufactureSchematicObject object) { + super(object); + } + + public ManufactureSchematicMessageBuilder() { + super(); + } + + @Override + public void buildBaseline3(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline3(baselineBuilders, deltaBuilders); + } + + @Override + public void buildBaseline6(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline6(baselineBuilders, deltaBuilders); + } + + @Override + public void buildBaseline7(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline7(baselineBuilders, deltaBuilders); + } + + @Override + public void buildBaseline8(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline8(baselineBuilders, deltaBuilders); + } + + @Override + public void buildBaseline9(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline9(baselineBuilders, deltaBuilders); + } + +} diff --git a/src/resources/objects/manufacture/ManufactureSchematicObject.java b/src/resources/objects/manufacture/ManufactureSchematicObject.java index 4ed340ef..c2693da5 100644 --- a/src/resources/objects/manufacture/ManufactureSchematicObject.java +++ b/src/resources/objects/manufacture/ManufactureSchematicObject.java @@ -21,27 +21,36 @@ ******************************************************************************/ package resources.objects.manufacture; +import java.io.Serializable; +import resources.objects.ObjectMessageBuilder; import resources.objects.intangible.IntangibleObject; + import com.sleepycat.persist.model.Persistent; + import engine.resources.scene.Planet; import engine.resources.scene.Point3D; import engine.resources.scene.Quaternion; - -/** - * @author Charon - */ - @Persistent(version=0) -public class ManufactureSchematicObject extends IntangibleObject{ +public class ManufactureSchematicObject extends IntangibleObject implements Serializable { - //@NotPersistent - //private ManufactureSchematicMessageBuilder messageBuilder; + private static final long serialVersionUID = 1L; + private transient ManufactureSchematicMessageBuilder messageBuilder; public ManufactureSchematicObject(long objectID, Planet planet, String template, Point3D position, Quaternion orientation) { super(objectID, planet, position, orientation, template); - //messageBuilder = new ManufactureSchematicMessageBuilder(this); + messageBuilder = new ManufactureSchematicMessageBuilder(this); + } + + @Override + public void initAfterDBLoad() { + super.init(); + messageBuilder = new ManufactureSchematicMessageBuilder(this); + } + + public ObjectMessageBuilder getMessageBuilder() { + return messageBuilder; } } diff --git a/src/resources/objects/mission/MissionMessageBuilder.java b/src/resources/objects/mission/MissionMessageBuilder.java index 24c9aa07..c7b61268 100644 --- a/src/resources/objects/mission/MissionMessageBuilder.java +++ b/src/resources/objects/mission/MissionMessageBuilder.java @@ -22,22 +22,26 @@ package resources.objects.mission; import java.nio.ByteOrder; +import java.util.Map; import org.apache.mina.core.buffer.IoBuffer; import engine.resources.common.CRC; +import engine.resources.objects.Builder; import engine.resources.scene.Point3D; -import resources.common.Console; -import resources.common.StringUtilities; -import resources.objects.ObjectMessageBuilder; +import resources.objects.intangible.IntangibleMessageBuilder; import resources.objects.waypoint.WaypointObject; -public class MissionMessageBuilder extends ObjectMessageBuilder { - - public MissionMessageBuilder(MissionObject missionObject) { - setObject(missionObject); +public class MissionMessageBuilder extends IntangibleMessageBuilder { + + public MissionMessageBuilder(MissionObject object) { + super(object); } - + + public MissionMessageBuilder() { + super(); + } + public IoBuffer buildBaseline3() { MissionObject mission = (MissionObject) object; IoBuffer buffer = IoBuffer.allocate(100, false).order(ByteOrder.LITTLE_ENDIAN); @@ -304,13 +308,13 @@ public class MissionMessageBuilder extends ObjectMessageBuilder { return buffer; } - public IoBuffer buildMissionDescriptionDelta(String desc, int id) { + public IoBuffer buildMissionDescriptionDelta(String desc, int id, String additionalParam) { - IoBuffer buffer = IoBuffer.allocate(12 + desc.length(), false).order(ByteOrder.LITTLE_ENDIAN); + IoBuffer buffer = IoBuffer.allocate(13 + desc.length() + additionalParam.length(), false).order(ByteOrder.LITTLE_ENDIAN); buffer.put(getAsciiString(desc)); buffer.putInt(0); - buffer.put(getAsciiString("m" + id + "d")); + buffer.put(getAsciiString("m" + id + "d" + additionalParam)); int size = buffer.position(); buffer.flip(); @@ -318,14 +322,14 @@ public class MissionMessageBuilder extends ObjectMessageBuilder { return buffer; } - - public IoBuffer buildMissionTitleDelta(String title, int id) { - IoBuffer buffer = IoBuffer.allocate(12 + title.length(), false).order(ByteOrder.LITTLE_ENDIAN); + public IoBuffer buildMissionTitleDelta(String title, int id, String additionalParam) { + + IoBuffer buffer = IoBuffer.allocate(12 + title.length() + additionalParam.length(), false).order(ByteOrder.LITTLE_ENDIAN); buffer.put(getAsciiString(title)); buffer.putInt(0); - buffer.put(getAsciiString("m" + id + "t")); + buffer.put(getAsciiString("m" + id + "t" + additionalParam)); int size = buffer.position(); buffer.flip(); @@ -394,15 +398,25 @@ public class MissionMessageBuilder extends ObjectMessageBuilder { return buffer; } - + @Override - public void sendListDelta(byte viewType, short updateType, IoBuffer buffer) { - + public void buildBaseline3(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline3(baselineBuilders, deltaBuilders); } - + @Override - public void sendBaselines() { - + public void buildBaseline6(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline6(baselineBuilders, deltaBuilders); } - + + @Override + public void buildBaseline8(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline8(baselineBuilders, deltaBuilders); + } + + @Override + public void buildBaseline9(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline9(baselineBuilders, deltaBuilders); + } + } diff --git a/src/resources/objects/mission/MissionObject.java b/src/resources/objects/mission/MissionObject.java index 12ed3fa8..aa3f4ba2 100644 --- a/src/resources/objects/mission/MissionObject.java +++ b/src/resources/objects/mission/MissionObject.java @@ -21,23 +21,24 @@ ******************************************************************************/ package resources.objects.mission; -import com.sleepycat.je.Environment; -import com.sleepycat.je.Transaction; +import java.io.Serializable; + import com.sleepycat.persist.model.NotPersistent; import com.sleepycat.persist.model.Persistent; +import resources.objects.ObjectMessageBuilder; import resources.objects.intangible.IntangibleObject; import resources.objects.waypoint.WaypointObject; import services.mission.MissionObjective; import engine.clients.Client; -import engine.resources.objects.IPersistent; import engine.resources.scene.Planet; import engine.resources.scene.Point3D; import engine.resources.scene.Quaternion; @Persistent(version=1) -public class MissionObject extends IntangibleObject implements IPersistent { - +public class MissionObject extends IntangibleObject implements Serializable { + + private static final long serialVersionUID = 1L; private Point3D destination; private Point3D startLocation; private String startPlanet = ""; @@ -53,14 +54,14 @@ public class MissionObject extends IntangibleObject implements IPersistent { private String type = ""; private int missionTemplateObject = 0; private WaypointObject attachedWaypoint; + + // Server variables private MissionObjective objective; - - @NotPersistent - MissionMessageBuilder messageBuilder = new MissionMessageBuilder(this); + private long bountyObjId; @NotPersistent - private Transaction txn; - + private transient MissionMessageBuilder messageBuilder = new MissionMessageBuilder(this); + public MissionObject() { super(); } @@ -74,6 +75,14 @@ public class MissionObject extends IntangibleObject implements IPersistent { return destinationPlanet; } } + + @Override + public void initAfterDBLoad() { + super.init(); + messageBuilder = new MissionMessageBuilder(this); + if(attachedWaypoint != null) + attachedWaypoint.initAfterDBLoad(); + } public int getMissionLevel() { synchronized(objectMutex) { @@ -148,11 +157,15 @@ public class MissionObject extends IntangibleObject implements IPersistent { } public void setMissionDescription(String missionDescription) { + setMissionDescription(missionDescription, ""); + } + + public void setMissionDescription(String missionDescription, String additionalParam) { synchronized(objectMutex) { this.description = missionDescription; } if (getGrandparent() != null && getGrandparent().getClient() != null && getGrandparent().getClient().getSession() != null) { - getGrandparent().getClient().getSession().write(messageBuilder.buildMissionDescriptionDelta(missionDescription, missionId)); + getGrandparent().getClient().getSession().write(messageBuilder.buildMissionDescriptionDelta(missionDescription, missionId, additionalParam)); } } @@ -163,11 +176,15 @@ public class MissionObject extends IntangibleObject implements IPersistent { } public void setMissionTitle(String missionTitle) { + setMissionTitle(missionTitle, ""); + } + + public void setMissionTitle(String missionTitle, String additionalParam) { synchronized(objectMutex) { this.title = missionTitle; } if (getGrandparent() != null && getGrandparent().getClient() != null && getGrandparent().getClient().getSession() != null) { - getGrandparent().getClient().getSession().write(messageBuilder.buildMissionTitleDelta(missionTitle, missionId)); + getGrandparent().getClient().getSession().write(messageBuilder.buildMissionTitleDelta(missionTitle, missionId, additionalParam)); } } @@ -286,12 +303,12 @@ public class MissionObject extends IntangibleObject implements IPersistent { this.missionId = missionId; } - public Transaction getTransaction() { - return txn; + public long getBountyMarkId() { + return bountyObjId; } - - public void createTransaction(Environment env) { - txn = env.beginTransaction(null, null); + + public void setBountyMarkId(long bountyObjId) { + this.bountyObjId = bountyObjId; } @Override @@ -307,5 +324,9 @@ public class MissionObject extends IntangibleObject implements IPersistent { destination.getSession().write(messageBuilder.buildBaseline8()); destination.getSession().write(messageBuilder.buildBaseline9()); } - + + public ObjectMessageBuilder getMessageBuilder() { + return messageBuilder; + } + } diff --git a/src/resources/objects/player/PlayerMessageBuilder.java b/src/resources/objects/player/PlayerMessageBuilder.java index 7e518a32..a1a19436 100644 --- a/src/resources/objects/player/PlayerMessageBuilder.java +++ b/src/resources/objects/player/PlayerMessageBuilder.java @@ -23,19 +23,25 @@ package resources.objects.player; import java.nio.ByteOrder; import java.util.List; +import java.util.Map; import java.util.Map.Entry; import org.apache.mina.core.buffer.IoBuffer; -import resources.objects.ObjectMessageBuilder; +import engine.resources.objects.Builder; +import resources.objects.intangible.IntangibleMessageBuilder; import resources.objects.waypoint.WaypointObject; -public class PlayerMessageBuilder extends ObjectMessageBuilder { +public class PlayerMessageBuilder extends IntangibleMessageBuilder { - public PlayerMessageBuilder(PlayerObject playerObject) { - setObject(playerObject); + public PlayerMessageBuilder(PlayerObject object) { + super(object); } - + + public PlayerMessageBuilder() { + super(); + } + public IoBuffer buildBaseline3() { PlayerObject player = (PlayerObject) object; @@ -662,17 +668,23 @@ public class PlayerMessageBuilder extends ObjectMessageBuilder { return buffer; } - + @Override - public void sendListDelta(byte viewType, short updateType, IoBuffer buffer) { - // TODO Auto-generated method stub - + public void buildBaseline3(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline3(baselineBuilders, deltaBuilders); } - + @Override - public void sendBaselines() { - // TODO Auto-generated method stub - + public void buildBaseline6(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline6(baselineBuilders, deltaBuilders); } - + + public void buildBaseline8(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline8(baselineBuilders, deltaBuilders); + } + + public void buildBaseline9(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline9(baselineBuilders, deltaBuilders); + } + } diff --git a/src/resources/objects/player/PlayerObject.java b/src/resources/objects/player/PlayerObject.java index bcbc3b21..436daeef 100644 --- a/src/resources/objects/player/PlayerObject.java +++ b/src/resources/objects/player/PlayerObject.java @@ -21,32 +21,36 @@ ******************************************************************************/ package resources.objects.player; +import java.io.Serializable; import java.util.ArrayList; import java.util.BitSet; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.TreeMap; +import java.util.Vector; +import resources.craft.DraftSchematic; +import resources.objects.ObjectMessageBuilder; import resources.objects.intangible.IntangibleObject; import resources.objects.resource.ResourceContainerObject; import resources.objects.tool.SurveyTool; import resources.objects.waypoint.WaypointObject; import resources.objects.creature.CreatureObject; +import resources.quest.Quest; import com.sleepycat.persist.model.NotPersistent; import com.sleepycat.persist.model.Persistent; import engine.clients.Client; -import engine.resources.objects.DraftSchematic; -import engine.resources.objects.Quest; import engine.resources.scene.Planet; import engine.resources.scene.Point3D; import engine.resources.scene.Quaternion; @Persistent(version=13) -public class PlayerObject extends IntangibleObject { +public class PlayerObject extends IntangibleObject implements Serializable { + private static final long serialVersionUID = 1L; // PLAY 3 private String title; @@ -71,11 +75,11 @@ public class PlayerObject extends IntangibleObject { private Map xpList = new HashMap(); @NotPersistent - private int xpListUpdateCounter = 0; + private transient int xpListUpdateCounter = 0; private List waypoints = new ArrayList(); @NotPersistent - private int waypointListUpdateCounter = 0; + private transient int waypointListUpdateCounter = 0; private int currentForcePower = 0; // unused in NGE private int maxForcePower = 0; // unused in NGE @@ -85,7 +89,7 @@ public class PlayerObject extends IntangibleObject { private List questJournal = new ArrayList(); @NotPersistent - private int questJournalUpdateCounter = 0; + private transient int questJournalUpdateCounter = 0; private String professionWheelPosition; @@ -97,17 +101,17 @@ public class PlayerObject extends IntangibleObject { private List draftSchematicList = new ArrayList(); @NotPersistent - private int draftSchematicListUpdateCounter = 0; + private transient int draftSchematicListUpdateCounter = 0; private int experimentationPoints = 0; private int accomplishmentCounter = 0; private List friendList = new ArrayList(); @NotPersistent - private int friendListUpdateCounter = 0; + private transient int friendListUpdateCounter = 0; private List ignoreList = new ArrayList(); @NotPersistent - private int ignoreListUpdateCounter = 0; + private transient int ignoreListUpdateCounter = 0; private int languageId = 0; // unused in NGE private int currentStomach = 0; // unused in NGE @@ -129,10 +133,10 @@ public class PlayerObject extends IntangibleObject { private int lotsRemaining = 10; @NotPersistent - private PlayerMessageBuilder messageBuilder; + private transient PlayerMessageBuilder messageBuilder; @NotPersistent - private long lastPlayTimeUpdate = System.currentTimeMillis(); + private transient long lastPlayTimeUpdate = System.currentTimeMillis(); private Map factionStandingMap = new TreeMap(); @@ -145,7 +149,11 @@ public class PlayerObject extends IntangibleObject { private List chatChannels = new ArrayList(); @NotPersistent - private boolean callingCompanion = false; + private transient boolean callingCompanion = false; + + private long bountyMissionId; + private Vector ownedVendors = new Vector(); + private long bindLocation; public PlayerObject() { super(); @@ -156,6 +164,14 @@ public class PlayerObject extends IntangibleObject { super(objectID, planet, new Point3D(0, 0, 0), new Quaternion(1, 0, 0, 0), "object/player/shared_player.iff"); messageBuilder = new PlayerMessageBuilder(this); } + + @Override + public void initAfterDBLoad() { + super.init(); + lastPlayTimeUpdate = System.currentTimeMillis(); + messageBuilder = new PlayerMessageBuilder(this); + waypoints.forEach(WaypointObject::initAfterDBLoad); + } public String getTitle() { synchronized(objectMutex) { @@ -884,10 +900,8 @@ public class PlayerObject extends IntangibleObject { public boolean isMemberOfChannel(int roomId) { if (chatChannels.contains(roomId)) { - System.out.println("Member of the channel!"); return true; } - System.out.println("Not a Member of the channel!"); return false; } @@ -899,4 +913,44 @@ public class PlayerObject extends IntangibleObject { this.callingCompanion = callingCompanion; } + public long getBountyMissionId() { + return bountyMissionId; + } + + public void setBountyMissionId(long bountyMissionId) { + this.bountyMissionId = bountyMissionId; + } + + public ObjectMessageBuilder getMessageBuilder() { + return messageBuilder; + } + + public Vector getOwnedVendors() { + return ownedVendors; + } + + public void addVendor(long vendorId) { + ownedVendors.add(vendorId); + } + + public void removeVendor(long vendorId) { + ownedVendors.remove(vendorId); + } + + public int getAmountOfVendors() { + return ownedVendors.size(); + } + + public long getBindLocation() { + synchronized(objectMutex) { + return bindLocation; + } + } + + public void setBindLocation(long bindLocation) { + synchronized(objectMutex) { + this.bindLocation = bindLocation; + } + } + } diff --git a/src/resources/objects/resource/GalacticResource.java b/src/resources/objects/resource/GalacticResource.java index 9f23a171..eff19d01 100644 --- a/src/resources/objects/resource/GalacticResource.java +++ b/src/resources/objects/resource/GalacticResource.java @@ -21,23 +21,23 @@ ******************************************************************************/ package resources.objects.resource; +import java.io.Serializable; import java.util.List; import java.util.Random; import java.util.Vector; +import org.apache.mina.core.buffer.IoBuffer; + import main.NGECore; import protocol.swg.SurveyMapUpdateMessage; import resources.objects.creature.CreatureObject; import resources.objects.player.PlayerObject; import resources.objects.waypoint.WaypointObject; -import com.sleepycat.je.Environment; -import com.sleepycat.je.Transaction; import com.sleepycat.persist.model.Entity; import com.sleepycat.persist.model.NotPersistent; import engine.clients.Client; -import engine.resources.objects.IPersistent; import engine.resources.objects.SWGObject; import engine.resources.scene.Planet; import engine.resources.scene.Point3D; @@ -48,10 +48,9 @@ import engine.resources.scene.Quaternion; */ @Entity(version=0) -public class GalacticResource extends SWGObject implements IPersistent { +public class GalacticResource extends SWGObject implements Serializable { - @NotPersistent - private Transaction txn; + private static final long serialVersionUID = 1L; private String name; private String fileName; @@ -63,30 +62,30 @@ public class GalacticResource extends SWGObject implements IPersistent { @NotPersistent - public static final int INT_COLDRESISTANCE = 0; + public transient static final int INT_COLDRESISTANCE = 0; @NotPersistent - public static final int INT_CONDUCTIVITY = 1; + public transient static final int INT_CONDUCTIVITY = 1; @NotPersistent - public static final int INT_DECAYRESISTANCE = 2; + public transient static final int INT_DECAYRESISTANCE = 2; @NotPersistent - public static final int INT_HEATRESISTANCE = 3; + public transient static final int INT_HEATRESISTANCE = 3; @NotPersistent - public static final int INT_MALLEABILITY = 4; + public transient static final int INT_MALLEABILITY = 4; @NotPersistent - public static final int INT_SHOCKRESISTANCE = 5; + public transient static final int INT_SHOCKRESISTANCE = 5; @NotPersistent - public static final int INT_UNITTOUGHNESS = 6; + public transient static final int INT_UNITTOUGHNESS = 6; @NotPersistent - public static final int INT_ENTANGLERESISTANCE = 7; + public transient static final int INT_ENTANGLERESISTANCE = 7; @NotPersistent - public static final int INT_POTENTIALENERGY = 8; + public transient static final int INT_POTENTIALENERGY = 8; @NotPersistent - public static final int INT_OVERALLQUALITY = 9; + public transient static final int INT_OVERALLQUALITY = 9; @NotPersistent - public static final int INT_FLAVOR = 10; + public transient static final int INT_FLAVOR = 10; @NotPersistent - public static final String[] statNamesLookup = {"Cold Resistance", + public transient static final String[] statNamesLookup = {"Cold Resistance", "Conductivity", "Decay Resistance", "Heat Resistance", @@ -117,22 +116,22 @@ public class GalacticResource extends SWGObject implements IPersistent { short[] resourceStats = new short[11]; @NotPersistent - private static int RES_CAT_HI = 1; // Up to 99%, easy to find spots over 90% + private transient static int RES_CAT_HI = 1; // Up to 99%, easy to find spots over 90% @NotPersistent - private static int RES_CAT_MID = 2; // Up to 90%, often have to settle at around 80% + private transient static int RES_CAT_MID = 2; // Up to 90%, often have to settle at around 80% @NotPersistent - private static int RES_CAT_LO = 3; // Up to 70%, often have to settle around 60% + private transient static int RES_CAT_LO = 3; // Up to 70%, often have to settle around 60% @NotPersistent - private static int RES_CAT_CRE = 4; // Creature resource + private transient static int RES_CAT_CRE = 4; // Creature resource @NotPersistent // Direct Persistence Layer entity reference restriction - private ResourceRoot resourceRoot; + private transient ResourceRoot resourceRoot; private int resourceRootID; // This is for re-referencing the resourceRoot in the reloaded resourceRoot collection // due to the DPL entity reference restriction @NotPersistent - private double minDist = 99999.0; + private transient double minDist = 99999.0; public GalacticResource(){ @@ -148,6 +147,11 @@ public class GalacticResource extends SWGObject implements IPersistent { this.id = id; } + @Override + public void initAfterDBLoad() { + init(); + } + public GalacticResource(String name, String fileName, String category){ this.name = name; this.fileName = fileName; @@ -227,7 +231,7 @@ public class GalacticResource extends SWGObject implements IPersistent { public void generateResourceStats(){ // Generate the stats randomly, considering the caps for (int k=0;k0) randomStatValue = (short) (resourceRoot.getResourceMinCaps()[k] + new Random().nextInt(resourceRoot.getResourceMaxCaps()[k]-resourceRoot.getResourceMinCaps()[k])); @@ -633,13 +637,6 @@ public class GalacticResource extends SWGObject implements IPersistent { "zau"}; - @Override - public void createTransaction(Environment env) { txn = env.beginTransaction(null, null);} - - - @Override - public Transaction getTransaction() { return txn; } - @Override public void sendBaselines(Client arg0) { } @@ -680,4 +677,11 @@ public class GalacticResource extends SWGObject implements IPersistent { return historicResource; } + + @Override + public void sendListDelta(byte viewType, short updateType, IoBuffer buffer) { + // TODO Auto-generated method stub + + } + } diff --git a/src/resources/objects/resource/PlanetDeposits.java b/src/resources/objects/resource/PlanetDeposits.java index 712ec89b..9daea331 100644 --- a/src/resources/objects/resource/PlanetDeposits.java +++ b/src/resources/objects/resource/PlanetDeposits.java @@ -1,12 +1,14 @@ package resources.objects.resource; +import java.io.Serializable; import java.util.List; import com.sleepycat.persist.model.Persistent; @Persistent(version=0) -public class PlanetDeposits { +public class PlanetDeposits implements Serializable { + private static final long serialVersionUID = 1L; private int planetId; private List depositList; diff --git a/src/resources/objects/resource/ResourceContainerMessageBuilder.java b/src/resources/objects/resource/ResourceContainerMessageBuilder.java index 92192c3f..c81e4932 100644 --- a/src/resources/objects/resource/ResourceContainerMessageBuilder.java +++ b/src/resources/objects/resource/ResourceContainerMessageBuilder.java @@ -22,17 +22,22 @@ package resources.objects.resource; import java.nio.ByteOrder; +import java.util.Map; import org.apache.mina.core.buffer.IoBuffer; -import resources.objects.ObjectMessageBuilder; +import engine.resources.objects.Builder; +import resources.objects.tangible.TangibleMessageBuilder; -public class ResourceContainerMessageBuilder extends ObjectMessageBuilder { - - public ResourceContainerMessageBuilder(ResourceContainerObject resourceContainerObject) { - setObject(resourceContainerObject); +public class ResourceContainerMessageBuilder extends TangibleMessageBuilder { + + public ResourceContainerMessageBuilder(ResourceContainerObject object) { + super(object); } + public ResourceContainerMessageBuilder() { + super(); + } public IoBuffer buildBaseline3() { ResourceContainerObject resourceContainer = (ResourceContainerObject) object; @@ -106,7 +111,6 @@ public class ResourceContainerMessageBuilder extends ObjectMessageBuilder { public IoBuffer buildBaseline8() { - ResourceContainerObject resourceContainer = (ResourceContainerObject) object; IoBuffer buffer = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN); buffer.setAutoExpand(true); @@ -271,18 +275,24 @@ public class ResourceContainerMessageBuilder extends ObjectMessageBuilder { return IoBuffer.allocate(size).put(result.array(), 0, size).flip(); } - @Override - public void sendListDelta(byte viewType, short updateType, IoBuffer buffer) { - // TODO Auto-generated method stub - + public void buildBaseline3(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline3(baselineBuilders, deltaBuilders); } - @Override - public void sendBaselines() { - // TODO Auto-generated method stub - + public void buildBaseline6(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline6(baselineBuilders, deltaBuilders); } - + + @Override + public void buildBaseline8(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline8(baselineBuilders, deltaBuilders); + } + + @Override + public void buildBaseline9(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline9(baselineBuilders, deltaBuilders); + } + } diff --git a/src/resources/objects/resource/ResourceContainerObject.java b/src/resources/objects/resource/ResourceContainerObject.java index c5b84a9f..aef9ce0e 100644 --- a/src/resources/objects/resource/ResourceContainerObject.java +++ b/src/resources/objects/resource/ResourceContainerObject.java @@ -21,6 +21,7 @@ ******************************************************************************/ package resources.objects.resource; +import java.io.Serializable; import main.NGECore; @@ -32,6 +33,7 @@ import engine.resources.objects.SWGObject; import engine.resources.scene.Planet; import engine.resources.scene.Point3D; import engine.resources.scene.Quaternion; +import resources.objects.ObjectMessageBuilder; import resources.objects.creature.CreatureObject; import resources.objects.tangible.TangibleObject; @@ -40,8 +42,9 @@ import resources.objects.tangible.TangibleObject; */ @Persistent(version=0) -public class ResourceContainerObject extends TangibleObject { +public class ResourceContainerObject extends TangibleObject implements Serializable { + private static final long serialVersionUID = 1L; // Unique ID private long containerID; @@ -131,20 +134,27 @@ public class ResourceContainerObject extends TangibleObject { */ @NotPersistent - public static int maximalStackCapacity = 100000; + public transient static int maximalStackCapacity = 100000; @NotPersistent - private ResourceContainerMessageBuilder messageBuilder; + private transient ResourceContainerMessageBuilder messageBuilder; public ResourceContainerObject(){ } - public ResourceContainerObject(long objectID, Planet planet, String template, Point3D position, Quaternion orientation){ - super(objectID, planet, template, position, orientation); + + public ResourceContainerObject(long objectID, Planet planet, Point3D position, Quaternion orientation, String template){ + super(objectID, planet, position, orientation, template); messageBuilder = new ResourceContainerMessageBuilder(this); this.setAttachment("radial_filename", "resourceContainer"); - } + } + + @Override + public void initAfterDBLoad() { + super.init(); + messageBuilder = new ResourceContainerMessageBuilder(this); + } public void initializeStats(GalacticResource resource){ this.setResourceName(resource.getName()); @@ -548,4 +558,9 @@ public class ResourceContainerObject extends TangibleObject { destination.getSession().write(messageBuilder.buildDelta3()); } + + public ObjectMessageBuilder getMessageBuilder() { + return messageBuilder; + } + } diff --git a/src/resources/objects/resource/ResourceDeposit.java b/src/resources/objects/resource/ResourceDeposit.java index 9a6572fc..b3772f52 100644 --- a/src/resources/objects/resource/ResourceDeposit.java +++ b/src/resources/objects/resource/ResourceDeposit.java @@ -1,5 +1,7 @@ package resources.objects.resource; +import java.io.Serializable; + import com.sleepycat.persist.model.Persistent; /** @@ -7,7 +9,9 @@ import com.sleepycat.persist.model.Persistent; */ @Persistent(version=0) -public class ResourceDeposit { +public class ResourceDeposit implements Serializable { + + private static final long serialVersionUID = 1L; private float spawnCoordsX; private float spawnCoordsZ; private float spawnRadius; diff --git a/src/resources/objects/resource/ResourceRoot.java b/src/resources/objects/resource/ResourceRoot.java index 34bba280..31d558da 100644 --- a/src/resources/objects/resource/ResourceRoot.java +++ b/src/resources/objects/resource/ResourceRoot.java @@ -21,6 +21,8 @@ ******************************************************************************/ package resources.objects.resource; +import java.io.Serializable; + import com.sleepycat.je.Environment; import com.sleepycat.je.Transaction; import com.sleepycat.persist.model.Entity; @@ -32,8 +34,9 @@ import com.sleepycat.persist.model.PrimaryKey; */ @Entity(version=0) -public class ResourceRoot { +public class ResourceRoot implements Serializable { + private static final long serialVersionUID = 1L; // Publish 15: // - Total: 61, Minimum pool: 15, Random pool: 24 (3 was removed), Fixed pool: 22. @@ -84,7 +87,7 @@ public class ResourceRoot { // All 38 Organic types for each planet @NotPersistent - private Transaction txn; + private transient Transaction txn; private static int highestID = 0; diff --git a/src/resources/objects/ship/ShipMessageBuilder.java b/src/resources/objects/ship/ShipMessageBuilder.java index b3874e8e..5905c0f7 100644 --- a/src/resources/objects/ship/ShipMessageBuilder.java +++ b/src/resources/objects/ship/ShipMessageBuilder.java @@ -21,6 +21,39 @@ ******************************************************************************/ package resources.objects.ship; -public class ShipMessageBuilder { +import java.util.Map; +import engine.resources.objects.Builder; +import resources.objects.tangible.TangibleMessageBuilder; + +public class ShipMessageBuilder extends TangibleMessageBuilder { + + public ShipMessageBuilder(ShipObject object) { + super(object); + } + + public ShipMessageBuilder() { + super(); + } + + @Override + public void buildBaseline3(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline3(baselineBuilders, deltaBuilders); + } + + @Override + public void buildBaseline6(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline6(baselineBuilders, deltaBuilders); + } + + @Override + public void buildBaseline8(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline8(baselineBuilders, deltaBuilders); + } + + @Override + public void buildBaseline9(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline9(baselineBuilders, deltaBuilders); + } + } diff --git a/src/resources/objects/ship/ShipObject.java b/src/resources/objects/ship/ShipObject.java index 62d4d6a4..67d27246 100644 --- a/src/resources/objects/ship/ShipObject.java +++ b/src/resources/objects/ship/ShipObject.java @@ -21,11 +21,26 @@ ******************************************************************************/ package resources.objects.ship; +import java.io.Serializable; + import com.sleepycat.persist.model.Persistent; +import resources.objects.ObjectMessageBuilder; import resources.objects.tangible.TangibleObject; @Persistent(version=0) -public class ShipObject extends TangibleObject { - +public class ShipObject extends TangibleObject implements Serializable { + + private static final long serialVersionUID = 1L; + private transient ObjectMessageBuilder messageBuilder = null; + + @Override + public void initAfterDBLoad() { + super.init(); + } + + public ObjectMessageBuilder getMessageBuilder() { + return messageBuilder; + } + } diff --git a/src/resources/objects/staticobject/StaticMessageBuilder.java b/src/resources/objects/staticobject/StaticMessageBuilder.java index e6c1e141..c412a78d 100644 --- a/src/resources/objects/staticobject/StaticMessageBuilder.java +++ b/src/resources/objects/staticobject/StaticMessageBuilder.java @@ -21,76 +21,29 @@ ******************************************************************************/ package resources.objects.staticobject; -import java.nio.ByteOrder; - -import org.apache.mina.core.buffer.IoBuffer; +import java.util.Map; import resources.objects.ObjectMessageBuilder; +import engine.resources.objects.Builder; public class StaticMessageBuilder extends ObjectMessageBuilder { - public StaticMessageBuilder(StaticObject staticObject) { - setObject(staticObject); - } - - - public IoBuffer buildBaseline3() { - - IoBuffer buffer = bufferPool.allocate(100, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.setAutoExpand(true); - - buffer.putShort((short) 4); - buffer.putInt(0); - //buffer.putShort((short) 0); - - buffer.put(getAsciiString(object.getStfFilename())); - buffer.putInt(0); - //buffer.putShort((short) 0); - buffer.put(getAsciiString(object.getStfName())); - buffer.putInt(0); - buffer.putInt(0xFF); - - int size = buffer.position(); - buffer = bufferPool.allocate(size, false).put(buffer.array(), 0, size); - - buffer.flip(); - buffer = createBaseline("STAO", (byte) 3, buffer, size); - - return buffer; + public StaticMessageBuilder(StaticObject object) { + super(object); } - public IoBuffer buildBaseline6() { - - IoBuffer buffer = bufferPool.allocate(100, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.setAutoExpand(true); - buffer.putShort((short) 2); - buffer.putInt(0x43); - //buffer.putShort((short) 0); - buffer.put(getAsciiString(object.getDetailFilename())); - buffer.putInt(0); - buffer.put(getAsciiString(object.getDetailName())); - // buffer.putShort((short) 0); - - int size = buffer.position(); - buffer = bufferPool.allocate(size, false).put(buffer.array(), 0, size); - - buffer.flip(); - buffer = createBaseline("STAO", (byte) 6, buffer, size); - - return buffer; + public StaticMessageBuilder() { + super(); } - + @Override - public void sendListDelta(byte viewType, short updateType, IoBuffer buffer) { - // TODO Auto-generated method stub - + public void buildBaseline3(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline3(baselineBuilders, deltaBuilders); } - + @Override - public void sendBaselines() { - // TODO Auto-generated method stub - + public void buildBaseline6(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline6(baselineBuilders, deltaBuilders); } - - + } diff --git a/src/resources/objects/staticobject/StaticObject.java b/src/resources/objects/staticobject/StaticObject.java index 53297b00..1131aafd 100644 --- a/src/resources/objects/staticobject/StaticObject.java +++ b/src/resources/objects/staticobject/StaticObject.java @@ -21,43 +21,89 @@ ******************************************************************************/ package resources.objects.staticobject; -import com.sleepycat.persist.model.NotPersistent; -import com.sleepycat.persist.model.Persistent; +import java.io.Serializable; + +import org.apache.mina.core.buffer.IoBuffer; import engine.clients.Client; +import engine.resources.objects.Baseline; import engine.resources.objects.SWGObject; import engine.resources.scene.Planet; import engine.resources.scene.Point3D; import engine.resources.scene.Quaternion; -@Persistent(version=0) -public class StaticObject extends SWGObject { +public class StaticObject extends SWGObject implements Serializable { + + private static final long serialVersionUID = 1L; + + private transient StaticMessageBuilder messageBuilder; - @NotPersistent - private StaticMessageBuilder messageBuilder; - - public StaticObject() { - super(); - messageBuilder = new StaticMessageBuilder(this); - } - public StaticObject(long objectID, Planet planet, Point3D position, Quaternion orientation, String Template) { super(objectID, planet, position, orientation, Template); - messageBuilder = new StaticMessageBuilder(this); } - + + public StaticObject() { + super(); + } + + @Override + public void initAfterDBLoad() { + super.init(); + } + + @Override + public Baseline getOtherVariables() { + Baseline baseline = super.getOtherVariables(); + return baseline; + } + + @Override + public Baseline getBaseline3() { + Baseline baseline = super.getBaseline3(); + return baseline; + } + + @Override + public Baseline getBaseline6() { + Baseline baseline = super.getBaseline6(); + return baseline; + } + + @Override + public void notifyClients(IoBuffer buffer, boolean notifySelf) { + notifyObservers(buffer, false); + } + + @Override + public StaticMessageBuilder getMessageBuilder() { + synchronized(objectMutex) { + if (messageBuilder == null) { + messageBuilder = new StaticMessageBuilder(this); + } + + return messageBuilder; + } + } + @Override public void sendBaselines(Client destination) { - - - if(destination == null || destination.getSession() == null) { - System.out.println("NULL destination"); - return; + if (destination != null && destination.getSession() != null) { + destination.getSession().write(getBaseline(3).getBaseline()); + destination.getSession().write(getBaseline(6).getBaseline()); + + Client parent = ((getGrandparent() == null) ? null : getGrandparent().getClient()); + + if (parent != null && destination == parent) { + destination.getSession().write(getBaseline(8).getBaseline()); + destination.getSession().write(getBaseline(9).getBaseline()); + } } - - //destination.getSession().write(messageBuilder.buildBaseline3()); - //destination.getSession().write(messageBuilder.buildBaseline6()); - - } + + @Override + public void sendListDelta(byte viewType, short updateType, IoBuffer buffer) { + // TODO Auto-generated method stub + + } + } diff --git a/src/resources/objects/tangible/TangibleMessageBuilder.java b/src/resources/objects/tangible/TangibleMessageBuilder.java index ec017af4..b6f4e4b8 100644 --- a/src/resources/objects/tangible/TangibleMessageBuilder.java +++ b/src/resources/objects/tangible/TangibleMessageBuilder.java @@ -21,199 +21,39 @@ ******************************************************************************/ package resources.objects.tangible; -import java.nio.ByteOrder; - -import org.apache.mina.core.buffer.IoBuffer; +import java.util.Map; import resources.objects.ObjectMessageBuilder; - +import engine.resources.objects.Builder; public class TangibleMessageBuilder extends ObjectMessageBuilder { - public TangibleMessageBuilder(TangibleObject tangible) { - setObject(tangible); + public TangibleMessageBuilder(TangibleObject object) { + setObject(object); } - public IoBuffer buildBaseline3() { - TangibleObject tangible = (TangibleObject) object; - IoBuffer buffer = bufferPool.allocate(100, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.setAutoExpand(true); - - buffer.putShort((short) 0x0D); - buffer.putFloat(object.getComplexity()); - buffer.put(getAsciiString(object.getStfFilename())); - buffer.putInt(0); - buffer.put(getAsciiString(object.getStfName())); - - if(object.getCustomName() == null || object.getCustomName().length() < 1) - buffer.putInt(0); - else - buffer.put(getUnicodeString(object.getCustomName())); - buffer.putInt(object.getVolume()); - buffer.putInt(0); - buffer.putInt(tangible.getFactionStatus()); // faction vars - - if(tangible.getCustomization() == null || tangible.getCustomization().length <= 0) - buffer.putShort((short) 0); - else { - buffer.putShort((short) tangible.getCustomization().length); - buffer.put(tangible.getCustomization()); - } - - buffer.putInt(0); - buffer.putInt(0); - - //buffer.putInt(0); - if(tangible.getOptionsBitmask() == 0) - tangible.setOptionsBitmask(0x100); - buffer.putInt(tangible.getOptionsBitmask()); - buffer.putInt(tangible.getUses()); // number of item uses - buffer.putInt(tangible.getConditionDamage()); - buffer.putInt(tangible.getMaxDamage()); - buffer.put((byte) (tangible.isStaticObject() ? 1 : 0)); - - int size = buffer.position(); - buffer = bufferPool.allocate(size, false).put(buffer.array(), 0, size); - - buffer.flip(); - buffer = createBaseline("TANO", (byte) 3, buffer, size); - - return buffer; - } - - public IoBuffer buildBaseline6() { - TangibleObject tangible = (TangibleObject) object; - IoBuffer buffer = bufferPool.allocate(100, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.setAutoExpand(true); - buffer.putShort((short) 8); - buffer.putInt(0x43); - buffer.put(getAsciiString(tangible.getDetailFilename())); - buffer.putInt(0); - buffer.put(getAsciiString(tangible.getDetailName())); - buffer.putLong(0); - buffer.putLong(0); - buffer.putLong(0); // unks - buffer.putLong(0); - buffer.putInt(0); - buffer.put((byte) 0); - - int size = buffer.position(); - buffer = bufferPool.allocate(size, false).put(buffer.array(), 0, size); - - buffer.flip(); - buffer = createBaseline("TANO", (byte) 6, buffer, size); - - return buffer; - } - - public IoBuffer buildBaseline8() { - IoBuffer buffer = bufferPool.allocate(2, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.putShort((short) 0); - int size = buffer.position(); - buffer = IoBuffer.allocate(size).put(buffer.array(), 0, size); - buffer.flip(); - buffer = createBaseline("TANO", (byte) 8, buffer, size); - - return buffer; - } - - public IoBuffer buildBaseline9() { - IoBuffer buffer = bufferPool.allocate(2, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.putShort((short) 0); - int size = buffer.position(); - buffer = IoBuffer.allocate(size).put(buffer.array(), 0, size); - buffer.flip(); - buffer = createBaseline("TANO", (byte) 9, buffer, size); - - return buffer; - } - - public IoBuffer buildConditionDamageDelta(int conditionDamage) { - - IoBuffer buffer = bufferPool.allocate(4, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.putInt(conditionDamage); - int size = buffer.position(); - buffer.flip(); - buffer = createDelta("TANO", (byte) 3, (short) 1, (short) 0x0A, buffer, size + 4); - - return buffer; - - } - - public IoBuffer buildCustomNameDelta(String customName) { - IoBuffer buffer = bufferPool.allocate(getUnicodeString(customName).length, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.put(getUnicodeString(customName)); - int size = buffer.position(); - buffer.flip(); - buffer = createDelta("TANO", (byte) 3, (short) 1, (short) 2, buffer, size + 4); - return buffer; - - } - - public IoBuffer buildCustomizationDelta(byte[] customization) { - IoBuffer buffer = bufferPool.allocate(customization.length, false).order(ByteOrder.LITTLE_ENDIAN); - - buffer.put(customization); - - int size = buffer.position(); - buffer.flip(); - buffer = createDelta("TANO", (byte) 3, (short) 1, (short) 6, buffer, size + 4); - return buffer; - } - - public IoBuffer buildDelta3() { - IoBuffer buffer = bufferPool.allocate(2, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.setAutoExpand(true); - buffer.putShort((short)5); - buffer.putInt(0x12862153); - buffer.putLong(getObject().getObjectID()); - buffer.putInt(0x54414E4F); - buffer.put((byte)3); - buffer.putInt(8);//buffer.putInt(8+6); - - buffer.putShort((short) 2); - buffer.putShort((short)8); - buffer.put((byte)0); - buffer.putShort((short) 0x21); - buffer.put((byte)0); - -// buffer.putShort((short) 0); -// buffer.putFloat(4.0F); - - int size = buffer.position(); - buffer.flip(); - return IoBuffer.allocate(size).put(buffer.array(), 0, size).flip(); - } - - public IoBuffer buildAssemblyDelta3() { - IoBuffer buffer = bufferPool.allocate(2, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.setAutoExpand(true); - buffer.putShort((short)5); - buffer.putInt(0x12862153); - buffer.putLong(getObject().getObjectID()); - buffer.putInt(0x54414E4F); - buffer.put((byte)3); - buffer.putInt(8);//buffer.putInt(8+6); - - buffer.putShort((short) 1); - buffer.putShort((short)0x0B); - buffer.putInt(0x000003E8); // ? - - int size = buffer.position(); - buffer.flip(); - return IoBuffer.allocate(size).put(buffer.array(), 0, size).flip(); + public TangibleMessageBuilder() { + super(); } @Override - public void sendListDelta(byte viewType, short updateType, IoBuffer buffer) { - // TODO Auto-generated method stub - + public void buildBaseline3(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline3(baselineBuilders, deltaBuilders); } @Override - public void sendBaselines() { - // TODO Auto-generated method stub - + public void buildBaseline6(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline6(baselineBuilders, deltaBuilders); + } + + @Override + public void buildBaseline8(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline8(baselineBuilders, deltaBuilders); + } + + @Override + public void buildBaseline9(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline9(baselineBuilders, deltaBuilders); } } diff --git a/src/resources/objects/tangible/TangibleObject.java b/src/resources/objects/tangible/TangibleObject.java index 4a5f11c3..1e2b13b3 100644 --- a/src/resources/objects/tangible/TangibleObject.java +++ b/src/resources/objects/tangible/TangibleObject.java @@ -22,6 +22,7 @@ package resources.objects.tangible; import java.io.ByteArrayOutputStream; +import java.io.Serializable; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; @@ -31,6 +32,8 @@ import java.util.Map; import java.util.Set; import java.util.Vector; +import org.apache.mina.core.buffer.IoBuffer; + import main.NGECore; import protocol.swg.ObjControllerMessage; import protocol.swg.PlayClientEffectObjectMessage; @@ -38,212 +41,320 @@ import protocol.swg.StopClientEffectObjectByLabel; import protocol.swg.UpdatePVPStatusMessage; import protocol.swg.objectControllerObjects.ShowFlyText; import resources.common.OutOfBand; -import resources.common.RGB; import resources.datatables.Options; +import resources.datatables.PvpStatus; +import resources.loot.LootGroup; +import resources.objects.ObjectMessageBuilder; +import resources.objects.SWGList; +import resources.objects.SWGSet; import resources.objects.creature.CreatureObject; -import resources.objects.loot.LootGroup; -import resources.visitors.IDManagerVisitor; - -import com.sleepycat.persist.model.NotPersistent; -import com.sleepycat.persist.model.Persistent; - import engine.clientdata.ClientFileManager; +import engine.clientdata.visitors.IDManagerVisitor; import engine.clients.Client; +import engine.resources.common.CRC; +import engine.resources.common.RGB; +import engine.resources.objects.Baseline; import engine.resources.objects.SWGObject; import engine.resources.scene.Planet; import engine.resources.scene.Point3D; import engine.resources.scene.Quaternion; -@Persistent(version=12) -public class TangibleObject extends SWGObject { +@SuppressWarnings("unchecked") +public class TangibleObject extends SWGObject implements Serializable { - // TODO: Thread safety + private static final long serialVersionUID = 1L; + + private transient TangibleMessageBuilder messageBuilder; - protected int incapTimer = 10; - private int conditionDamage = 0; - protected int pvpBitmask = 0; - protected byte[] customization; - private List componentCustomizations = new ArrayList(); private Map customizationVariables = new HashMap(); - protected int optionsBitmask = 0; - private int uses = 0; - private int maxDamage = 1000; - private boolean staticObject = true; - protected String faction = ""; // Says you're "Imperial Special Forces" if it's 0 for some reason - protected int factionStatus = 0; - @NotPersistent - private Vector defendersList = new Vector(); // unused in packets but useful for the server - @NotPersistent - private TangibleMessageBuilder messageBuilder; - private int respawnTime = 0; - private Point3D spawnCoordinates = new Point3D(0, 0, 0); + protected transient Vector defendersList = new Vector(); + + private transient int pvpBitmask = 0; //private TreeSet> lootSpecification = new TreeSet>(); - private List lootGroups = new ArrayList(); + private transient List lootGroups = new ArrayList(); + private transient boolean looted = false; + private transient boolean lootLock = false; + private transient boolean creditRelieved = false; + private transient boolean lootItem = false; + private transient TangibleObject killer = null; - @NotPersistent - private boolean looted = false; // These 4 should not need to be persisted, since a looted corpse will get wiped with server restart - @NotPersistent - private boolean lootLock = false; - @NotPersistent - private boolean creditRelieved = false; - @NotPersistent - private boolean lootItem = false; - - private boolean stackable = false; - private int stackCount = 1; - private boolean noSell = false; - private byte junkType = -1; - private int junkDealerPrice = 0; - - - private String serialNumber; - - @NotPersistent - private TangibleObject killer = null; + public TangibleObject(long objectID, Planet planet, Point3D position, Quaternion orientation, String template) { + super(objectID, planet, position, orientation, template); + if (this.getClass().getSimpleName().equals("TangibleObject")) setIntAttribute("volume", 1); + otherVariables = getOtherVariables(); // FIXME temp + } public TangibleObject(long objectID, Planet planet, String template) { super(objectID, planet, new Point3D(0, 0, 0), new Quaternion(1, 0, 1, 0), template); - messageBuilder = new TangibleMessageBuilder(this); - if (this.getClass().getSimpleName().equals("TangibleObject")) setIntAttribute("volume", 1); - } - - public TangibleObject(long objectID, Planet planet, String template, Point3D position, Quaternion orientation) { - super(objectID, planet, position, orientation, template); - messageBuilder = new TangibleMessageBuilder(this); - spawnCoordinates = position.clone(); if (this.getClass().getSimpleName().equals("TangibleObject")) setIntAttribute("volume", 1); + otherVariables = getOtherVariables(); // FIXME temp } public TangibleObject() { super(); - messageBuilder = new TangibleMessageBuilder(this); } - public void setCustomName2(String customName) { - setCustomName(customName); - - notifyObservers(messageBuilder.buildCustomNameDelta(customName), true); - } - - public int getIncapTimer() { - return incapTimer; - } - - public void setIncapTimer(int incapTimer) { - this.incapTimer = incapTimer; + public void initAfterDBLoad() { + super.init(); + defendersList = new Vector(); } - public int getUses() { - return uses; + public Baseline getOtherVariables() { + Baseline baseline = super.getOtherVariables(); + baseline.put("stackable", false); + baseline.put("noSell", false); + baseline.put("junkType", (byte) -1); + baseline.put("junkDealerPrice", 0); + return baseline; } - public void setUses(int uses) { - this.uses = uses; - setIntAttribute("uses", uses); + public Baseline getBaseline3() { + Baseline baseline = super.getBaseline3(); + baseline.put("faction", 0); + baseline.put("factionStatus", 0); + baseline.put("customization", new byte[] { }); + baseline.put("componentCustomizations", new SWGList(this, 3, 7, false)); + baseline.put("optionsBitmask", 0); + baseline.put("uses", 0); + baseline.put("conditionDamage", 0); + baseline.put("maximumCondition", 100); + baseline.put("staticObject", false); + return baseline; } - - public synchronized int getConditionDamage() { - return conditionDamage; + + public Baseline getBaseline6() { + Baseline baseline = super.getBaseline6(); + baseline.put("inCombat", false); + baseline.put("defendersList", new SWGSet(this, 6, 3, false)); + baseline.put("4", 0); + baseline.put("5", new SWGList(this, 6, 5, false)); + baseline.put("6", new SWGList(this, 6, 6, false)); + baseline.put("7", (long) 0); // Unknown List (HUGE structure inside) + return baseline; } - - public synchronized void setConditionDamage(int conditionDamage) { - if(conditionDamage < 0) - conditionDamage = 0; - else if(conditionDamage > getMaxDamage()) - conditionDamage = getMaxDamage(); - this.conditionDamage = conditionDamage; - notifyObservers(messageBuilder.buildConditionDamageDelta(conditionDamage), false); - if (maxDamage > 0) { - this.setStringAttribute("condition", (maxDamage + "/" + (maxDamage - conditionDamage))); - } + + @Override + public Baseline getBaseline8() { + Baseline baseline = super.getBaseline8(); + return baseline; } - + + @Override + public Baseline getBaseline9() { + Baseline baseline = super.getBaseline9(); + return baseline; + } + + public String getFaction() { + return NGECore.getInstance().factionService.getName((int) getBaseline(3).get("faction")); + } + + public void setFaction(String faction) { + notifyClients(getBaseline(3).set("faction", CRC.StringtoCRC(faction)), true); + updatePvpStatus(); + } + + public int getFactionStatus() { + return (int) getBaseline(3).get("factionStatus"); + } + + public void setFactionStatus(int factionStatus) { + notifyClients(getBaseline(3).set("factionStatus", factionStatus), true); + } + public byte[] getCustomization() { - return customization; + return (byte[]) getBaseline(3).get("customization"); } - + public void setCustomization(byte[] customization) { - synchronized(objectMutex) { - this.customization = customization; + notifyClients(getBaseline(3).set("customization", customization), true); + } + + public SWGList getComponentCustomizations() { + return (SWGList) getBaseline(3).get("componentCustomizations"); + } + + public void setComponentCustomizations(List componentCustomizations) { + getComponentCustomizations().addAll(componentCustomizations); + } + + public Byte getCustomizationVariable(String type) { + if (customizationVariables.containsKey(type)) { + return customizationVariables.get(type); + } else { + System.err.println("Error: object doesn't have customization variable " + type); } - notifyObservers(messageBuilder.buildCustomizationDelta(customization), false); + return null; } - - public List getComponentCustomizations() { - return componentCustomizations; + + public void setCustomizationVariable(String type, byte value) { + if (customizationVariables.containsKey(type)) { + customizationVariables.replace(type, value); + } else { + customizationVariables.put(type, value); + } + + setCustomization(getCustomizationBytes()); } - - public void setComponentCustomizations(List componentCustomizations) { - this.componentCustomizations = componentCustomizations; + + public void removeCustomizationVariable(String type) { + if (customizationVariables.containsKey(type)) { + customizationVariables.remove(type); + setCustomization(getCustomizationBytes()); + } } - + + private byte[] getCustomizationBytes() { + ByteArrayOutputStream stream = new ByteArrayOutputStream(); + + try { + IDManagerVisitor visitor = ClientFileManager.loadFile("customization/customization_id_manager.iff", IDManagerVisitor.class); + + stream.write((byte) 0x02); // Unk + stream.write((byte) customizationVariables.size()); // Number of customization attributes + + for (String type : customizationVariables.keySet()) { + stream.write(visitor.getAttributeIndex(type)); // Index of palette type within "customization/customization_id_manager.iff" + stream.write(customizationVariables.get(type)); // Value/Index within palette + + // Seperator/Footer + stream.write((byte) 0xC3); + stream.write((byte) 0xBF); + stream.write((byte) 0x03); + } + + return stream.toByteArray(); + } catch (Exception e) { + e.printStackTrace(); + } + + return null; + } + public int getOptionsBitmask() { - return optionsBitmask; + return (int) getBaseline(3).get("optionsBitmask"); } - + public void setOptionsBitmask(int optionsBitmask) { - this.optionsBitmask = optionsBitmask; + notifyClients(getBaseline(3).set("optionsBitmask", optionsBitmask), true); } public void setOptions(int options, boolean add) { - synchronized(objectMutex) { - if (options != 0) { - if (add) { - addOption(options); - } else { - removeOption(options); - } + if (options != 0) { + if (add) { + setOptionsBitmask(getOptionsBitmask() | options); + } else { + setOptionsBitmask(getOptionsBitmask() & ~options);; } } } public boolean getOption(int option) { - synchronized(objectMutex) { - return ((optionsBitmask & option) == option); + return ((getOptionsBitmask() & option) == option); + } + + public int getUses() { + return (int) getBaseline(3).get("uses"); + } + + public void setUses(int uses) { + notifyClients(getBaseline(3).set("uses", uses), true); + setIntAttribute("uses", uses); + } + + public int getIncapTimer() { + return getUses(); + } + + public void setIncapTimer(int incapTimer) { + notifyClients(getBaseline(3).set("uses", incapTimer), true); + } + + public int getConditionDamage() { + return (int) getBaseline(3).get("conditionDamage"); + } + + public void setConditionDamage(int conditionDamage) { + int maximumCondition = getMaximumCondition(); + + if (conditionDamage < 0) { + conditionDamage = 0; + } else if (conditionDamage > maximumCondition) { + conditionDamage = maximumCondition; + } + + notifyClients(getBaseline(3).set("conditionDamage", conditionDamage), true); + + if (getMaximumCondition() > 0) { + setStringAttribute("condition", (maximumCondition + "/" + (maximumCondition - conditionDamage))); } } - public void addOption(int option) { - setOptionsBitmask(getOptionsBitmask() | option); + public int getMaximumCondition() { + return (int) getBaseline(3).get("maximumCondition"); } - public void removeOption(int option) { - setOptionsBitmask(getOptionsBitmask() & ~option); + public void setMaximumCondition(int maximumCondition) { + notifyClients(getBaseline(3).set("maximumCondition", maximumCondition), true); + setStringAttribute("condition", (maximumCondition + "/" + (maximumCondition - getConditionDamage()))); } - public int getMaxDamage() { - return maxDamage; - } - - public void setMaxDamage(int maxDamage) { - this.maxDamage = maxDamage; - - this.setStringAttribute("condition", (maxDamage + "/" + (maxDamage - conditionDamage))); - } - public boolean isStaticObject() { - return staticObject; - } - - public void setStaticObject(boolean staticObject) { - this.staticObject = staticObject; + return (boolean) getBaseline(3).get("staticObject"); } - public int getPvPBitmask() { + public void setStaticObject(boolean staticObject) { + notifyClients(getBaseline(3).set("staticObject", staticObject), true); + } + + public boolean isInCombat() { + return (boolean) getBaseline(6).get("inCombat"); + } + + public void setInCombat(boolean inCombat) { + notifyClients(getBaseline(6).set("inCombat", inCombat), true); + } + + // All objects can be in combat (terminal mission flag bases, tutorial target box) + + public List getDefendersList() { + synchronized(objectMutex) { + return defendersList; + } + } + + public void addDefender(TangibleObject defender) { + defendersList.add(defender); + + if (!isInCombat()) { + setInCombat(true); + } + } + + public void removeDefender(TangibleObject defender) { + defendersList.remove(defender); + + if (defendersList.isEmpty() && isInCombat()) { + setInCombat(false); + } + } + + public int getPvpBitmask() { synchronized(objectMutex) { return pvpBitmask; } } - - public void setPvPBitmask(int pvpBitmask) { + + public void setPvpBitmask(int pvpBitmask) { synchronized(objectMutex) { this.pvpBitmask = pvpBitmask; } } + public boolean getPvpStatus(int pvpStatus) { synchronized(objectMutex) { return ((pvpBitmask & pvpStatus) != 0); @@ -260,8 +371,6 @@ public class TangibleObject extends SWGObject { } } } - - //updatePvpStatus(); } public void updatePvpStatus() { @@ -287,146 +396,9 @@ public class TangibleObject extends SWGObject { } } - public void setCustomizationVariable(String type, byte value) - { - if(customizationVariables.containsKey(type)) customizationVariables.replace(type, value); - else customizationVariables.put(type, value); - - buildCustomizationBytes(); - } - - public void removeCustomizationVariable(String type) - { - if(customizationVariables.containsKey(type)) - { - customizationVariables.remove(type); - buildCustomizationBytes(); - } - } - - private void buildCustomizationBytes() - { - //if(customizationVariables.size() == 0) customization = { 0x00 }; - - ByteArrayOutputStream stream = new ByteArrayOutputStream(); - try - { - IDManagerVisitor visitor = ClientFileManager.loadFile("customization/customization_id_manager.iff", IDManagerVisitor.class); - - stream.write((byte)0x02); // Unk - stream.write((byte)customizationVariables.size()); // Number of customization attributes - - for(String type : customizationVariables.keySet()) - { - stream.write(visitor.getAttributeIndex(type)); // Index of palette type within "customization/customization_id_manager.iff" - stream.write(customizationVariables.get(type)); // Value/Index within palette - - // Seperator/Footer - stream.write((byte) 0xC3); - stream.write((byte) 0xBF); - stream.write((byte) 0x03); - } - customization = stream.toByteArray(); - } - catch (Exception e) { e.printStackTrace(); } - } - - public String getFaction() { - synchronized(objectMutex) { - return faction; - } - } - - public void setFaction(String faction) { - synchronized(objectMutex) { - this.faction = faction; - } - - updatePvpStatus(); - } - - public int getFactionStatus() { - synchronized(objectMutex) { - return factionStatus; - } - } - - public void setFactionStatus(int factionStatus) { - synchronized(objectMutex) { - this.factionStatus = factionStatus; - } - } - - public Vector getDefendersList() { - synchronized(objectMutex) { - return defendersList; - } - } - - public void addDefender(TangibleObject defender) { - - defendersList.add(defender); - - if(this instanceof CreatureObject) { - CreatureObject creature = (CreatureObject) this; - - if(creature.getCombatFlag() == 0) - creature.setCombatFlag((byte) 1); - } - - } - - public void removeDefender(TangibleObject defender) { - - defendersList.remove(defender); - - if(this instanceof CreatureObject) { - CreatureObject creature = (CreatureObject) this; - - if(creature.getCombatFlag() == 1 && defendersList.isEmpty()) - creature.setCombatFlag((byte) 0); - } - - } - public boolean isAttackableBy(CreatureObject attacker) { - - CreatureObject creature; - - if(this instanceof CreatureObject) { - creature = (CreatureObject) this; - if(creature.getDuelList().contains(attacker) && attacker.getDuelList().contains(this)) - return true; - } - - if(faction.equals("rebel") && attacker.getFaction().equals("rebel")) - return false; - else if(faction.equals("imperial") && attacker.getFaction().equals("imperial")) - return false; - else if(attacker.getSlottedObject("ghost") != null) { - - if(this instanceof CreatureObject && getSlottedObject("ghost") != null) { - - creature = (CreatureObject) this; - - if(creature.getFactionStatus() == 2 && attacker.getFactionStatus() == 2) - return true; - else - return false; - - } - - if((faction.equals("rebel") || faction.equals("imperial")) && attacker.getFactionStatus() >= 1) - return true; - else if((faction.equals("rebel") || faction.equals("imperial")) && attacker.getFactionStatus() == 0) - return false; - - return getPvPBitmask() == 1 || getPvPBitmask() == 2; - - } else if(attacker.getSlottedObject("ghost") == null) - return true; - - return getPvPBitmask() == 1 || getPvPBitmask() == 2; + int pvpStatus = NGECore.getInstance().factionService.calculatePvpStatus(attacker, this); + return (((pvpStatus & PvpStatus.Attackable) == PvpStatus.Attackable) || ((pvpStatus & PvpStatus.Aggressive) == PvpStatus.Aggressive)); } public void showFlyText(OutOfBand outOfBand, float scale, RGB color, int displayType, boolean notifyObservers) { @@ -467,16 +439,13 @@ public class TangibleObject extends SWGObject { notifyObservers(new StopClientEffectObjectByLabel(getObjectID(), commandString), true); } - public int getRespawnTime() { - synchronized(objectMutex) { - return respawnTime; - } + public String getSerialNumber() { + return getStringAttribute("serial_number"); } - - public void setRespawnTime(int respawnTime) { - synchronized(objectMutex) { - this.respawnTime = respawnTime; - } + + public void setSerialNumber(String serialNumber) { + setStringAttribute("serial_number", serialNumber); + setOptions(Options.SERIAL, true); } public TangibleObject getKiller() { @@ -492,134 +461,208 @@ public class TangibleObject extends SWGObject { } public List getLootGroups() { - return lootGroups; + synchronized(objectMutex) { + return lootGroups; + } + } + + public void setLootGroups(List lootGroups) { + synchronized(objectMutex) { + this.lootGroups = lootGroups; + } } public void addToLootGroups(String[] lootPoolNames, double[] lootPoolChances, double lootGroupChance) { - System.out.println("lootPoolNames[0] " + lootPoolNames[0]); - LootGroup lootGroup = new LootGroup(lootPoolNames, lootPoolChances, lootGroupChance); - this.lootGroups.add(lootGroup); + synchronized(objectMutex) { + //System.out.println("lootPoolNames[0] " + lootPoolNames[0]); + LootGroup lootGroup = new LootGroup(lootPoolNames, lootPoolChances, lootGroupChance); + lootGroups.add(lootGroup); + } + } + + public void addToLootGroups(LootGroup lootGroup) { + synchronized(objectMutex) { + lootGroups.add(lootGroup); + } } public boolean isLooted() { - return looted; + synchronized(objectMutex) { + return looted; + } } - + public void setLooted(boolean looted) { - this.looted = looted; + synchronized(objectMutex) { + this.looted = looted; + } } public boolean isLootLock() { - return lootLock; + synchronized(objectMutex) { + return lootLock; + } } - + public void setLootLock(boolean lootLock) { - this.lootLock = lootLock; + synchronized(objectMutex) { + this.lootLock = lootLock; + } } public boolean isLootItem() { - return lootItem; + synchronized(objectMutex) { + return lootItem; + } } - + public void setLootItem(boolean lootItem) { - this.lootItem = lootItem; + synchronized(objectMutex) { + this.lootItem = lootItem; + } } public boolean isStackable() { - return stackable; - } - - public void setStackable(boolean stackable) { - this.stackable = stackable; + return (boolean) otherVariables.get("stackable"); } - public int getStackCount() { - return stackCount; - } - - public void setStackCount(int stackCount) { - this.stackCount = stackCount; + public void setStackable(boolean stackable) { + otherVariables.set("stackable", stackable); } public boolean isNoSell() { - return noSell; + return (boolean) otherVariables.get("noSell"); } - + public void setNoSell(boolean noSell) { - this.noSell = noSell; + otherVariables.set("noSell", noSell); } public byte getJunkType() { - return junkType; + return (byte) otherVariables.get("junkType"); } - + public void setJunkType(byte junkType) { - this.junkType = junkType; + otherVariables.set("junkType", junkType); } - + public int getJunkDealerPrice() { - return junkDealerPrice; + return (int) otherVariables.get("junkDealerPrice"); } - + public void setJunkDealerPrice(int junkDealerPrice) { - this.junkDealerPrice = junkDealerPrice; + otherVariables.set("junkDealerPrice", junkDealerPrice); } public boolean isCreditRelieved() { - return creditRelieved; + synchronized(objectMutex) { + return creditRelieved; + } } - + public void setCreditRelieved(boolean creditRelieved) { - if (creditRelieved) - this.creditRelieved = creditRelieved; // only allow one state change to prevent hacking + synchronized(objectMutex) { + if (creditRelieved) { + this.creditRelieved = creditRelieved; // only allow one state change to prevent hacking + } + } } - public String getSerialNumber() { - return getStringAttribute("serial_number"); - } - - public void setSerialNumber(String serialNumber) { - setStringAttribute("serial_number", serialNumber); - setOptions(Options.SERIAL, true); + public boolean isFull() { + if (getTemplateData().getAttribute("containerVolumeLimit") == null) { + return false; + } + + int containerVolumeLimit = (int) getTemplateData().getAttribute("containerVolumeLimit") >> 8; // Shifting because it seems to be returning an extra byte before it should + + if (containerVolumeLimit == 0) { + return false; + } + + if (NGECore.getInstance().objectService.objsInContainer(this, this) >= containerVolumeLimit) { + return true; + } + + return false; } - public void sendDelta3(Client destination) { - destination.getSession().write(messageBuilder.buildDelta3()); - //tools.CharonPacketUtils.printAnalysis(messageBuilder.buildDelta3(),"TANO3 Delta"); + public void notifyClients(IoBuffer buffer, boolean notifySelf) { + notifyObservers(buffer, false); } - public void sendAssemblyDelta3(Client destination) { - destination.getSession().write(messageBuilder.buildAssemblyDelta3()); - //tools.CharonPacketUtils.printAnalysis(messageBuilder.buildAssemblyDelta3(),"TANO3 Assembly Delta"); + public ObjectMessageBuilder getMessageBuilder() { + synchronized(objectMutex) { + if (messageBuilder == null) { + messageBuilder = new TangibleMessageBuilder(this); + } + + return messageBuilder; + } } - public void sendCustomizationDelta3(Client destination, String enteredName){ - destination.getSession().write(messageBuilder.buildCustomNameDelta(enteredName)); - //tools.CharonPacketUtils.printAnalysis(messageBuilder.buildCustomNameDelta(enteredName),"TANO3 Customization Delta"); - } - - - @Override public void sendBaselines(Client destination) { - - - if(destination == null || destination.getSession() == null) { - System.out.println("NULL destination"); - return; + if (destination != null && destination.getSession() != null) { + destination.getSession().write(getBaseline(3).getBaseline()); + destination.getSession().write(getBaseline(6).getBaseline()); + + Client parent = ((getGrandparent() == null) ? null : getGrandparent().getClient()); + + if (parent != null && destination == parent) { + destination.getSession().write(getBaseline(8).getBaseline()); + destination.getSession().write(getBaseline(9).getBaseline()); + } + + if (destination.getParent() != this) { + UpdatePVPStatusMessage upvpm = new UpdatePVPStatusMessage(getObjectID()); + upvpm.setFaction(CRC.StringtoCRC(getFaction())); + upvpm.setStatus(NGECore.getInstance().factionService.calculatePvpStatus((CreatureObject) destination.getParent(), this)); + destination.getSession().write(upvpm.serialize()); + } } - - destination.getSession().write(messageBuilder.buildBaseline3()); - destination.getSession().write(messageBuilder.buildBaseline6()); - destination.getSession().write(messageBuilder.buildBaseline8()); - destination.getSession().write(messageBuilder.buildBaseline9()); - - if(getPvPBitmask() != 0) { - UpdatePVPStatusMessage upvpm = new UpdatePVPStatusMessage(getObjectID()); - upvpm.setFaction(UpdatePVPStatusMessage.factionCRC.Neutral); - upvpm.setStatus(getPvPBitmask()); - destination.getSession().write(upvpm.serialize()); - } - - } + + public void sendListDelta(byte viewType, short updateType, IoBuffer buffer) { + switch (viewType) { + case 3: + { + switch (updateType) { + case 7: + { + buffer = getBaseline(3).createDelta(7, buffer.array()); + notifyClients(buffer, true); + break; + } + } + } + } + } + + @Deprecated public void setCustomName2(String customName) { setCustomName(customName); } + + @Deprecated public void sendDelta3(Client destination) { setOptions(Options.SERIAL | Options.INVULNERABLE, true); } + + @Deprecated public void sendAssemblyDelta3(Client destination) { setMaximumCondition(1000); } + + @Deprecated public void sendCustomizationDelta3(Client destination, String enteredName){ setCustomName(enteredName); } + + @Deprecated public void addOption(int option) { setOptionsBitmask(getOptionsBitmask() | option); } + + @Deprecated public void removeOption(int option) { setOptionsBitmask(getOptionsBitmask() & ~option); } + + @Deprecated public int getMaxDamage() { return getMaximumCondition(); } + + @Deprecated public void setMaxDamage(int maxDamage) { setMaximumCondition(maxDamage); } + + @Deprecated public byte getCombatFlag() { return (byte) ((isInCombat()) ? 1 : 0); } //Baseline.getBoolean(isInCombat()); } + + @Deprecated public void setCombatFlag(byte combatFlag) { setInCombat(combatFlag > 0); } //setInCombat(Baseline.getBoolean(combatFlag)); } + + @Deprecated public int getPvPBitmask() { return getPvpBitmask(); } + + @Deprecated public void setPvPBitmask(int pvpBitmask) { setPvpBitmask(pvpBitmask); } + + @Deprecated public int getStackCount() { if (getUses() == 0) setUses(1); return getUses(); } + + @Deprecated public void setStackCount(int stackCount) { setUses(stackCount); } + } diff --git a/src/resources/objects/tool/SurveyTool.java b/src/resources/objects/tool/SurveyTool.java index 90dfbc18..464c8534 100644 --- a/src/resources/objects/tool/SurveyTool.java +++ b/src/resources/objects/tool/SurveyTool.java @@ -21,6 +21,7 @@ ******************************************************************************/ package resources.objects.tool; +import java.io.Serializable; import java.util.Vector; import main.NGECore; @@ -41,8 +42,9 @@ import resources.objects.tangible.TangibleObject; */ @Persistent(version=0) -public class SurveyTool extends TangibleObject{ +public class SurveyTool extends TangibleObject implements Serializable { + private static final long serialVersionUID = 1L; private byte toolType=0; private long surveyResourceID; private long userID=0; @@ -50,25 +52,25 @@ public class SurveyTool extends TangibleObject{ private byte SurveyRangeSetting=0; @NotPersistent - private String surveyEffectString=""; + private transient String surveyEffectString=""; @NotPersistent - private String sampleEffectString=""; + private transient String sampleEffectString=""; @NotPersistent - private boolean currentlySurveying=false; + private transient boolean currentlySurveying=false; @NotPersistent - private boolean currentlySampling=false; + private transient boolean currentlySampling=false; @NotPersistent - private boolean currentlyCoolingDown=false; + private transient boolean currentlyCoolingDown=false; @NotPersistent - private boolean exceptionalState=false; + private transient boolean exceptionalState=false; @NotPersistent - private boolean recoveryMode=false; + private transient boolean recoveryMode=false; @NotPersistent - private Long lastSurveyTime=0L; + private transient Long lastSurveyTime=0L; @NotPersistent - private Long lastSampleTime=0L; + private transient Long lastSampleTime=0L; @NotPersistent - private Long recoveryTime=10L; + private transient Long recoveryTime=10L; public static byte MineralSurveyDevice = 1; public static byte ChemicalSurveyDevice = 2; @@ -84,8 +86,17 @@ public class SurveyTool extends TangibleObject{ this.exceptionalState = false; } - public SurveyTool(long objectID, Planet planet, String template, Point3D position, Quaternion orientation){ - super(objectID, planet, template, position, orientation); + @Override + public void initAfterDBLoad() { + super.init(); + this.exceptionalState = false; + surveyEffectString = ""; + sampleEffectString = ""; + defendersList = new Vector(); + } + + public SurveyTool(long objectID, Planet planet, Point3D position, Quaternion orientation, String template) { + super(objectID, planet, position, orientation, template); surveyEffectString = ""; sampleEffectString = ""; this.tanoID = objectID; diff --git a/src/resources/objects/deed/Deed.java b/src/resources/objects/universe/UniverseMessageBuilder.java similarity index 71% rename from src/resources/objects/deed/Deed.java rename to src/resources/objects/universe/UniverseMessageBuilder.java index f98c6398..f0c72079 100644 --- a/src/resources/objects/deed/Deed.java +++ b/src/resources/objects/universe/UniverseMessageBuilder.java @@ -19,19 +19,18 @@ * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. ******************************************************************************/ -package resources.objects.deed; +package resources.objects.universe; -import engine.resources.scene.Planet; -import engine.resources.scene.Point3D; -import engine.resources.scene.Quaternion; -import resources.objects.tangible.TangibleObject; +import resources.objects.ObjectMessageBuilder; -/** - * @author Charon - */ -public class Deed extends TangibleObject { +public class UniverseMessageBuilder extends ObjectMessageBuilder { - public Deed(long objectID, Planet planet, String template, Point3D position, Quaternion orientation){ - super(objectID, planet, template, position, orientation); + public UniverseMessageBuilder(UniverseObject object) { + super(object); } + + public UniverseMessageBuilder() { + super(); + } + } diff --git a/src/resources/objects/universe/UniverseObject.java b/src/resources/objects/universe/UniverseObject.java index 723d5a1e..021abff6 100644 --- a/src/resources/objects/universe/UniverseObject.java +++ b/src/resources/objects/universe/UniverseObject.java @@ -21,16 +21,23 @@ ******************************************************************************/ package resources.objects.universe; -import com.sleepycat.persist.model.Persistent; +import java.io.Serializable; + +import org.apache.mina.core.buffer.IoBuffer; + +import resources.objects.ObjectMessageBuilder; import engine.clients.Client; +import engine.resources.objects.Baseline; import engine.resources.objects.SWGObject; import engine.resources.scene.Planet; import engine.resources.scene.Point3D; import engine.resources.scene.Quaternion; -@Persistent(version=0) -public class UniverseObject extends SWGObject { +public class UniverseObject extends SWGObject implements Serializable { + + private static final long serialVersionUID = 1L; + private transient UniverseMessageBuilder messageBuilder = null; public UniverseObject(long objectID, Planet planet, Point3D position, Quaternion orientation, String Template) { super(objectID, planet, position, orientation, Template); @@ -39,10 +46,41 @@ public class UniverseObject extends SWGObject { public UniverseObject() { super(); } - + @Override - public void sendBaselines(Client arg0) { - // TODO Auto-generated method stub + public void initAfterDBLoad() { + super.init(); + } + + @Override + public Baseline getOtherVariables() { + Baseline baseline = super.getOtherVariables(); + return baseline; + } + + @Override + public void notifyClients(IoBuffer buffer, boolean notifySelf) { + notifyObservers(buffer, false); + } + + @Override + public ObjectMessageBuilder getMessageBuilder() { + synchronized(objectMutex) { + if (messageBuilder == null) { + messageBuilder = new UniverseMessageBuilder(this); + } + + return messageBuilder; + } + } + + @Override + public void sendBaselines(Client destination) { + + } + + @Override + public void sendListDelta(byte viewType, short updateType, IoBuffer buffer) { } diff --git a/src/resources/objects/waypoint/WaypointObject.java b/src/resources/objects/waypoint/WaypointObject.java index 32d73e1b..d73c6b66 100644 --- a/src/resources/objects/waypoint/WaypointObject.java +++ b/src/resources/objects/waypoint/WaypointObject.java @@ -21,17 +21,18 @@ ******************************************************************************/ package resources.objects.waypoint; -import resources.objects.intangible.IntangibleObject; +import java.io.Serializable; -import com.sleepycat.persist.model.Persistent; +import resources.objects.intangible.IntangibleObject; import engine.clients.Client; import engine.resources.scene.Planet; import engine.resources.scene.Point3D; import engine.resources.scene.Quaternion; -@Persistent(version=0) -public class WaypointObject extends IntangibleObject { +public class WaypointObject extends IntangibleObject implements Serializable { + + private static final long serialVersionUID = 1L; private int cellId; // ??? private long locationNetworkId; @@ -54,6 +55,11 @@ public class WaypointObject extends IntangibleObject { super(objectID, planet, position, new Quaternion(0, 0, 0, 1), "object/waypoint/shared_waypoint.iff"); } + @Override + public void initAfterDBLoad() { + super.init(); + } + public int getCellId() { synchronized(objectMutex) { return cellId; diff --git a/src/resources/objects/weapon/WeaponMessageBuilder.java b/src/resources/objects/weapon/WeaponMessageBuilder.java index 5084b9cf..80eec11a 100644 --- a/src/resources/objects/weapon/WeaponMessageBuilder.java +++ b/src/resources/objects/weapon/WeaponMessageBuilder.java @@ -22,18 +22,24 @@ package resources.objects.weapon; import java.nio.ByteOrder; +import java.util.Map; import org.apache.mina.core.buffer.IoBuffer; -import resources.objects.ObjectMessageBuilder; +import engine.resources.objects.Builder; +import resources.objects.tangible.TangibleMessageBuilder; import resources.datatables.Elemental; -public class WeaponMessageBuilder extends ObjectMessageBuilder { - - public WeaponMessageBuilder(WeaponObject weaponObject) { - setObject(weaponObject); +public class WeaponMessageBuilder extends TangibleMessageBuilder { + + public WeaponMessageBuilder(WeaponObject object) { + super(object); } - + + public WeaponMessageBuilder() { + super(); + } + public IoBuffer buildBaseline3() { WeaponObject weapon = (WeaponObject) object; IoBuffer buffer = bufferPool.allocate(100, false).order(ByteOrder.LITTLE_ENDIAN); @@ -134,15 +140,40 @@ public class WeaponMessageBuilder extends ObjectMessageBuilder { } @Override - public void sendListDelta(byte viewType, short updateType, IoBuffer buffer) { - // TODO Auto-generated method stub - + public void buildBaseline3(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline3(baselineBuilders, deltaBuilders); } @Override - public void sendBaselines() { - // TODO Auto-generated method stub + public void buildBaseline6(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline6(baselineBuilders, deltaBuilders); + /* + baselineBuilders.put(13, new Builder() { + + public byte[] build() { + return Baseline.createBuffer(4).putInt(((WeaponObject) object).getWeaponType()).array(); + } + + }); + deltaBuilders.put(13, new Builder() { + + public byte[] build() { + return Baseline.createBuffer(4).putInt(((WeaponObject) object).getWeaponType()).array(); + } + + }); + */ + } + + @Override + public void buildBaseline8(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline8(baselineBuilders, deltaBuilders); + } + + @Override + public void buildBaseline9(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline9(baselineBuilders, deltaBuilders); } } diff --git a/src/resources/objects/weapon/WeaponObject.java b/src/resources/objects/weapon/WeaponObject.java index 2d0fa6ba..4fca13d7 100644 --- a/src/resources/objects/weapon/WeaponObject.java +++ b/src/resources/objects/weapon/WeaponObject.java @@ -21,76 +21,59 @@ ******************************************************************************/ package resources.objects.weapon; +import java.io.Serializable; +import java.util.Vector; + import resources.datatables.WeaponType; import resources.objects.tangible.TangibleObject; import com.sleepycat.persist.model.NotPersistent; -import com.sleepycat.persist.model.Persistent; import engine.clients.Client; import engine.resources.scene.Planet; import engine.resources.scene.Point3D; import engine.resources.scene.Quaternion; -@Persistent(version=1) -public class WeaponObject extends TangibleObject { +public class WeaponObject extends TangibleObject implements Serializable { + private static final long serialVersionUID = 1L; + // TODO: Thread safety @NotPersistent - private WeaponMessageBuilder messageBuilder; + private transient WeaponMessageBuilder messageBuilder; public WeaponObject(long objectID, Planet planet, String template) { - super(objectID, planet, template, new Point3D(0, 0, 0), new Quaternion(1, 0, 1, 0)); + super(objectID, planet, new Point3D(0, 0, 0), new Quaternion(1, 0, 1, 0), template); messageBuilder = new WeaponMessageBuilder(this); if (this.getClass().getSimpleName().equals("WeaponObject")) setIntAttribute("volume", 1); setStringAttribute("cat_wpn_damage.damage", "0-0"); } - public WeaponObject(long objectID, Planet planet, String template, Point3D position, Quaternion orientation) { - super(objectID, planet, template, position, orientation); + public WeaponObject(long objectID, Planet planet, Point3D position, Quaternion orientation, String template) { + super(objectID, planet, position, orientation, template); messageBuilder = new WeaponMessageBuilder(this); if (this.getClass().getSimpleName().equals("WeaponObject")) setIntAttribute("volume", 1); setStringAttribute("cat_wpn_damage.damage", "0-0"); } - public WeaponObject() { super(); messageBuilder = new WeaponMessageBuilder(this); } - - public int getIncapTimer() { - return incapTimer; + + @Override + public void initAfterDBLoad() { + super.init(); + messageBuilder = new WeaponMessageBuilder(this); + defendersList = new Vector(); } - - public void setIncapTimer(int incapTimer) { - this.incapTimer = incapTimer; - } - - - public byte[] getCustomization() { - return customization; - } - - public void setCustomization(byte[] customization) { - this.customization = customization; - } - - public int getOptionsBitmask() { - return optionsBitmask; - } - - public void setOptionsBitmask(int optionsBitmask) { - this.optionsBitmask = optionsBitmask; - } - + public int getMaxDamage() { return Integer.parseInt(getStringAttribute("cat_wpn_damage.damage").split("-")[1]); } - + public void setMaxDamage(int maxDamage) { - setStringAttribute("cat_wpn_damage.damage", String.valueOf(getMinDamage()) + "-" + String.valueOf(maxDamage)); setIntAttribute("cat_wpn_damage.dps", getDamagePerSecond()); } @@ -214,5 +197,4 @@ public class WeaponObject extends TangibleObject { return false; } - } diff --git a/src/resources/common/AString.java b/src/resources/quest/Quest.java similarity index 57% rename from src/resources/common/AString.java rename to src/resources/quest/Quest.java index 1a9f73f2..80348605 100644 --- a/src/resources/common/AString.java +++ b/src/resources/quest/Quest.java @@ -19,51 +19,22 @@ * 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.common; +package resources.quest; -import java.nio.ByteOrder; +import java.io.Serializable; -import org.apache.mina.core.buffer.IoBuffer; +import engine.resources.objects.Delta; -import com.sleepycat.persist.model.Persistent; - -import resources.objects.Delta; - -@Persistent -public final class AString extends Delta { +public class Quest extends Delta implements Serializable { - private String string; + private static final long serialVersionUID = 1L; - public AString() { - string = ""; - } - - public AString(String string) { - this.string = ((string == null) ? "" : string); - } - - public String get() { - synchronized(objectMutex) { - return string; - } - } - - public void set(String string) { - synchronized(objectMutex) { - this.string = string; - } - } - - public short length() { - synchronized(objectMutex) { - return (short) string.length(); - } + public Quest() { + } public byte[] getBytes() { - synchronized(objectMutex) { - return IoBuffer.allocate(2 + string.length(), false).order(ByteOrder.LITTLE_ENDIAN).putShort((short) string.length()).put(string.getBytes()).flip().array(); - } + return new byte[] { }; } } diff --git a/src/resources/objects/SkillMod.java b/src/resources/skills/SkillMod.java similarity index 92% rename from src/resources/objects/SkillMod.java rename to src/resources/skills/SkillMod.java index 1a2fef63..a667f6b0 100644 --- a/src/resources/objects/SkillMod.java +++ b/src/resources/skills/SkillMod.java @@ -19,15 +19,18 @@ * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. ******************************************************************************/ -package resources.objects; +package resources.skills; + +import java.io.Serializable; import org.apache.mina.core.buffer.IoBuffer; -import com.sleepycat.persist.model.Persistent; +import engine.resources.objects.Delta; -@Persistent(version=0) -public class SkillMod extends Delta { +public class SkillMod extends Delta implements Serializable { + private static final long serialVersionUID = 1L; + private int base; private int modifier; diff --git a/src/resources/visitors/IDManagerVisitor.java b/src/resources/visitors/IDManagerVisitor.java deleted file mode 100644 index 3c7a1617..00000000 --- a/src/resources/visitors/IDManagerVisitor.java +++ /dev/null @@ -1,73 +0,0 @@ -/******************************************************************************* - * 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.visitors; - -import java.nio.charset.Charset; -import java.nio.charset.CharsetDecoder; -import java.util.concurrent.ConcurrentHashMap; - -import org.apache.mina.core.buffer.IoBuffer; - -import engine.clientdata.VisitorInterface; - -public class IDManagerVisitor implements VisitorInterface { - - private ConcurrentHashMap customizationMap; - private CharsetDecoder charsetDecoder; - - public IDManagerVisitor() { - customizationMap = new ConcurrentHashMap(); - charsetDecoder = Charset.forName("US-ASCII").newDecoder(); - } - - @Override - public void parseData(String node, IoBuffer data, int depth, int size) throws Exception { - - if (!node.equals("0001DATA") || depth != 2) - return; - - while(data.hasRemaining()) { - - byte designNumber = data.get(); - data.get(); - String customizationType = data.getString(charsetDecoder); - charsetDecoder.reset(); - - customizationMap.put(customizationType, designNumber); - - //System.out.println(designNumber + ": " + customizationType); - } - } - - public byte getAttributeIndex(String type) - { - return customizationMap.get(type); - } - - @Override - public void notifyFolder(String node, int depth) throws Exception { - } - - public ConcurrentHashMap getCustomizationMap() { - return this.customizationMap; - } -} diff --git a/src/resources/visitors/ProfessionTemplateVisitor.java b/src/resources/visitors/ProfessionTemplateVisitor.java deleted file mode 100644 index 8b46a49d..00000000 --- a/src/resources/visitors/ProfessionTemplateVisitor.java +++ /dev/null @@ -1,98 +0,0 @@ -/******************************************************************************* - * 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.visitors; - -import java.nio.charset.CharacterCodingException; -import java.nio.charset.Charset; -import java.nio.charset.CharsetDecoder; -import java.util.Vector; - -import org.apache.mina.core.buffer.IoBuffer; - -import engine.clientdata.VisitorInterface; - -public class ProfessionTemplateVisitor implements VisitorInterface { - - - private class RaceTemplate { - private Vector items; - private String template; - public RaceTemplate(String template) { - this.template = template; - this.items = new Vector(); - } - - public Vector getItems() { - return items; - } - - public String getTemplate() { - return template; - } - } - - private CharsetDecoder charsetDecoder; - - private Vector pItems; - - public ProfessionTemplateVisitor() { - this.charsetDecoder = Charset.forName("US-ASCII").newDecoder(); - this.pItems = new Vector(); - } - - public Vector getItems(String template) { - for(RaceTemplate rTemplate : pItems) { - if (rTemplate.getTemplate().equals(template)) { - return rTemplate.getItems(); - } - } - return null; - } - - @Override - public void notifyFolder(String str, int depth) throws Exception { - } - - @Override - public void parseData(String node, IoBuffer data, int depth, int size) { - - try { - if (depth != 3) - return; - - if (node.equals("PTMPNAME")) { - String ptmpname = data.getString(charsetDecoder); - - pItems.add(new RaceTemplate(ptmpname)); - charsetDecoder.reset(); - } else if (node.equals("ITEM")){ - int index = pItems.size() - 1; - data.skip(4); - String item = data.getString(charsetDecoder); - pItems.get(index).getItems().add(item); - charsetDecoder.reset(); - } - } catch(CharacterCodingException e) { - e.printStackTrace(); - } - } -} diff --git a/src/services/BuffService.java b/src/services/BuffService.java index 71f44a0d..839c2b01 100644 --- a/src/services/BuffService.java +++ b/src/services/BuffService.java @@ -31,9 +31,9 @@ import java.util.concurrent.TimeUnit; import org.python.core.Py; import org.python.core.PyObject; +import resources.buffs.Buff; +import resources.buffs.DamageOverTime; import resources.common.FileUtilities; -import resources.objects.Buff; -import resources.objects.DamageOverTime; import resources.objects.creature.CreatureObject; import resources.objects.group.GroupObject; import resources.objects.player.PlayerObject; diff --git a/src/services/CharacterService.java b/src/services/CharacterService.java index b11bd350..591d76db 100644 --- a/src/services/CharacterService.java +++ b/src/services/CharacterService.java @@ -34,10 +34,9 @@ import main.NGECore; import org.apache.mina.core.buffer.IoBuffer; import org.apache.mina.core.session.IoSession; - - import engine.clientdata.ClientFileManager; import engine.clientdata.visitors.DatatableVisitor; +import engine.clientdata.visitors.ProfessionTemplateVisitor; import engine.clients.Client; import engine.resources.common.CRC; import engine.resources.container.CreatureContainerPermissions; @@ -61,11 +60,11 @@ import protocol.swg.ClientVerifyAndLockNameResponse; import protocol.swg.CreateCharacterSuccess; import protocol.swg.HeartBeatMessage; import resources.objects.creature.CreatureObject; +import resources.objects.intangible.IntangibleObject; import resources.objects.mission.MissionObject; import resources.objects.player.PlayerObject; import resources.objects.tangible.TangibleObject; import resources.objects.weapon.WeaponObject; -import resources.visitors.ProfessionTemplateVisitor; @SuppressWarnings("unused") @@ -89,6 +88,18 @@ public class CharacterService implements INetworkDispatch { } } + public boolean checkName(String name, Client client) { + // TODO: check for dev names, profane names, iconic names etc + try { + if(checkForDuplicateName(name, client.getAccountId()) || !name.matches(allowedCharsRegex)) + return false; + } catch (SQLException e) { + e.printStackTrace(); + } + + return true; + } + @Override public void insertOpcodes(Map swgOpcodes, Map objControllerOpcodes) { @@ -269,10 +280,7 @@ public class CharacterService implements INetworkDispatch { core.skillModService.addSkillMod(object, "language_basic_speak", 100); core.skillModService.addSkillMod(object, "creature_harvesting", 25); core.skillModService.addSkillMod(object, "language_wookiee_comprehend", 100); - - - object.createTransaction(core.getCreatureODB().getEnvironment()); - + PlayerObject player = (PlayerObject) core.objectService.createObject("object/player/shared_player.iff", object.getPlanet()); object._add(player); core.skillService.addSkill(object, "species_" + object.getStfName()); @@ -317,9 +325,6 @@ public class CharacterService implements INetworkDispatch { } // TODO: Race abilities - if (client.isGM()) - object.addAbility("admin"); - object.addAbility("startDance"); object.addAbility("startDance+Basic"); @@ -334,12 +339,13 @@ public class CharacterService implements INetworkDispatch { object._add(defaultWeapon); object.setWeaponId(defaultWeapon.getObjectID()); + IntangibleObject pda = (IntangibleObject) core.objectService.createObject("object/intangible/data_item/shared_guild_stone.iff", object.getPlanet()); + datapad.add(pda); + createStarterClothing(object, sharedRaceTemplate, clientCreateCharacter.getStarterProfession()); //core.scriptService.callScript("scripts/", "demo", "CreateStartingCharacter", core, object); - core.getCreatureODB().put(object, Long.class, CreatureObject.class, object.getTransaction()); - // might not need to commit transaction but better safe than sorry - object.getTransaction().commitSync(); + core.getSWGObjectODB().put(object.getObjectID(), object); PreparedStatement ps = databaseConnection.preparedStatement("INSERT INTO characters (id, \"firstName\", \"lastName\", \"accountId\", \"galaxyId\", \"statusId\", appearance, gmflag) VALUES (?, ?, ?, ?, ?, ?, ?, ?)"); ps.setLong(1, object.getObjectID()); diff --git a/src/services/ConnectionService.java b/src/services/ConnectionService.java index ff79d72c..9baa6d0b 100644 --- a/src/services/ConnectionService.java +++ b/src/services/ConnectionService.java @@ -270,6 +270,10 @@ public class ConnectionService implements INetworkDispatch { } }*/ + if (core.getBountiesODB().contains(object.getObjectID())) { + core.missionService.getBountyMap().remove(core.getBountiesODB().get(object.getObjectID())); + } + ghost.toggleFlag(PlayerFlags.LD); object.setPerformanceListenee(null); @@ -277,13 +281,13 @@ public class ConnectionService implements INetworkDispatch { object.setAttachment("disconnectTask", null); List> schedulers = core.playerService.getSchedulers().get(object.getObjectID()); - schedulers.forEach(s -> s.cancel(true)); - schedulers.clear(); + if(schedulers != null) { + schedulers.forEach(s -> s.cancel(true)); + schedulers.clear(); + } core.playerService.getSchedulers().remove(object.getObjectID()); - object.createTransaction(core.getCreatureODB().getEnvironment()); - core.getCreatureODB().put(object, Long.class, CreatureObject.class, object.getTransaction()); - object.getTransaction().commitSync(); + core.getSWGObjectODB().put(object.getObjectID(), object); core.objectService.destroyObject(object); } diff --git a/src/services/ConversationService.java b/src/services/ConversationService.java index b2b3854a..29dd18ec 100644 --- a/src/services/ConversationService.java +++ b/src/services/ConversationService.java @@ -57,6 +57,8 @@ public class ConversationService implements INetworkDispatch { if(player.getConversingNpc() != null && player.getConversingNpc() != npc) handleEndConversation(player, player.getConversingNpc()); + core.simulationService.faceTarget(npc, player); + player.setConversingNpc(npc); sendStartConversation(player, npc); core.scriptService.callScript("scripts/conversation/", (String) npc.getAttachment("conversationFile"), "startConversation", core, player, npc); diff --git a/src/services/DevService.java b/src/services/DevService.java index 8a3ce949..68c616a7 100644 --- a/src/services/DevService.java +++ b/src/services/DevService.java @@ -31,7 +31,6 @@ import java.util.Vector; import org.apache.mina.core.buffer.IoBuffer; import org.apache.mina.core.session.IoSession; -import protocol.swg.ExpertiseRequestMessage; import resources.common.Console; import resources.common.FileUtilities; import resources.common.Opcodes; @@ -39,8 +38,6 @@ import resources.common.SpawnPoint; import resources.datatables.WeaponType; import resources.objects.building.BuildingObject; import resources.objects.creature.CreatureObject; -import resources.objects.deed.Harvester_Deed; -import resources.objects.deed.Player_House_Deed; import resources.objects.player.PlayerObject; import resources.objects.tangible.TangibleObject; import resources.objects.tool.SurveyTool; @@ -77,11 +74,11 @@ public class DevService implements INetworkDispatch { case 0: // Root suiOptions.put((long) 1, "Character"); suiOptions.put((long) 2, "Items"); + suiOptions.put((long) 3, "Locations"); break; case 1: // Character suiOptions.put((long) 10, "Set combat level to 90"); suiOptions.put((long) 11, "Give 100,000 credits"); - suiOptions.put((long) 12, "Reset expertise"); break; case 2: // Items suiOptions.put((long) 20, "Armor"); @@ -90,9 +87,14 @@ public class DevService implements INetworkDispatch { suiOptions.put((long) 23, "Jedi Items"); suiOptions.put((long) 26, "Installations"); suiOptions.put((long) 110, "Survey Devices"); - if(creature.getClient().isGM()) suiOptions.put((long) 120, "House Deeds"); - if(creature.getClient().isGM()) suiOptions.put((long) 125, "Crafting Tools"); - if(creature.getClient().isGM()) suiOptions.put((long) 130, "Vehicle Deeds"); + if(creature.getPlayerObject().getProfession().equals("bounty_hunter_1a")) suiOptions.put((long) 123, "Tracking Droids"); + if (creature.getClient().isGM()) { + suiOptions.put((long) 120, "House Deeds"); + suiOptions.put((long) 125, "Crafting Tools"); + suiOptions.put((long) 130, "Vehicle Deeds"); + suiOptions.put((long) 121, "Sandbox City"); + suiOptions.put((long) 140, "Guild Registry Device (PDA)"); + } break; case 3: // [Items] Weapons @@ -105,6 +107,7 @@ public class DevService implements INetworkDispatch { suiOptions.put((long) 40, "Unity Ring"); suiOptions.put((long) 41, "Tusken Rucksack"); suiOptions.put((long) 42, "Heroism Jewlery Set"); + suiOptions.put((long) 43, "Breath of Heaven"); break; case 5: // [Items] Armor suiOptions.put((long) 50, "Assault Armor"); @@ -130,11 +133,16 @@ public class DevService implements INetworkDispatch { suiOptions.put((long) 90, "(Light) Jedi Robe"); suiOptions.put((long) 91, "(Dark) Jedi Robe"); suiOptions.put((long) 92, "Belt of Master Bodo Baas"); + suiOptions.put((long) 93, "Lightsaber Crystals"); break; case 10: // [Items] Jedi Items suiOptions.put((long) 111, "Harvesters"); suiOptions.put((long) 112, "Energy resources"); break; + case 11: // Locations + suiOptions.put((long) 122, "Teleport to Jedi Ruins"); + suiOptions.put((long) 124, "Teleport to Mos Eisley"); + break; } @@ -163,6 +171,9 @@ public class DevService implements INetworkDispatch { case 2: // Items sendCharacterBuilderSUI(player, 2); return; + case 3: // Locations + sendCharacterBuilderSUI(player, 11); + return; // Character case 10: // Set combat level to 90 @@ -172,18 +183,7 @@ public class DevService implements INetworkDispatch { case 11: // Give 100,000 credits player.setCashCredits(player.getCashCredits() + 100000); return; - case 12: // Reset expertise - // Seefo->Light: I commented out the below line because it gave us an error and didn't properly remove the skill, could you try the method SWGList.reverseGet that I added? - //player.getSkills().get().stream().filter(s -> s.contains("expertise")).forEach(s -> core.skillService.removeSkill(creature, s)); - - // Using this for now - for(int i = creature.getSkills().size() - 1; i >= 0; i-- ) - { - String skill = creature.getSkills().get(i); - if(skill.contains("expertise")) core.skillService.removeSkill(player, skill); - } - return; - + // Items case 20: // Armor sendCharacterBuilderSUI(player, 5); @@ -268,7 +268,7 @@ public class DevService implements INetworkDispatch { rifle1.setMaxDamage(1250); rifle1.setWeaponType(WeaponType.RIFLE); - inventory.add(rifle1); + // inventory.add(rifle1); WeaponObject carbine1 = (WeaponObject) core.objectService.createObject("object/weapon/ranged/carbine/shared_carbine_cdef.iff", planet); carbine1.setIntAttribute("required_combat_level", 90); @@ -355,6 +355,12 @@ public class DevService implements INetworkDispatch { inventory.add(heroismBraceletRight); inventory.add(heroismBraceletLeft); return; + case 43: + TangibleObject drink = (TangibleObject) core.objectService.createObject("object/tangible/food/crafted/shared_drink_breath_of_heaven.iff", planet); + drink.setFloatAttribute("cat_stat_mod_bonus.@stat_n:constitution_modified", 100); + drink.setFloatAttribute("cat_stat_mod_bonus.@stat_n:dodge", 3); + inventory.add(drink); + return; case 50: // [Items] Assault Armor sendCharacterBuilderSUI(player, 6); return; @@ -997,6 +1003,55 @@ public class DevService implements INetworkDispatch { case 92: // Belt of Master Bodo Baas inventory.add(core.objectService.createObject("object/tangible/wearables/backpack/shared_fannypack_s01.iff", planet)); return; + case 93: // Lightsaber Crystals + TangibleObject kraytPearl = (TangibleObject) core.objectService.createObject("object/tangible/component/weapon/lightsaber/shared_lightsaber_module_krayt_dragon_pearl.iff", planet); + kraytPearl.setAttachment("LootItemName", "kraytpearl_flawless"); + core.lootService.handleSpecialItems(kraytPearl, "kraytpearl"); + inventory.add(kraytPearl); + + TangibleObject kraytPearl2 = (TangibleObject) core.objectService.createObject("object/tangible/component/weapon/lightsaber/shared_lightsaber_module_krayt_dragon_pearl.iff", planet); + kraytPearl2.setAttachment("LootItemName", "kraytpearl_flawless"); + core.lootService.handleSpecialItems(kraytPearl2, "kraytpearl"); + inventory.add(kraytPearl2); + + TangibleObject kraytPearl3 = (TangibleObject) core.objectService.createObject("object/tangible/component/weapon/lightsaber/shared_lightsaber_module_krayt_dragon_pearl.iff", planet); + kraytPearl3.setAttachment("LootItemName", "kraytpearl_flawless"); + core.lootService.handleSpecialItems(kraytPearl3, "kraytpearl"); + inventory.add(kraytPearl3); + + TangibleObject kraytPearl4 = (TangibleObject) core.objectService.createObject("object/tangible/component/weapon/lightsaber/shared_lightsaber_module_krayt_dragon_pearl.iff", planet); + kraytPearl4.setAttachment("LootItemName", "kraytpearl_flawless"); + core.lootService.handleSpecialItems(kraytPearl4, "kraytpearl"); + inventory.add(kraytPearl4); + + TangibleObject kraytPearl5 = (TangibleObject) core.objectService.createObject("object/tangible/component/weapon/lightsaber/shared_lightsaber_module_krayt_dragon_pearl.iff", planet); + kraytPearl5.setAttachment("LootItemName", "kraytpearl_flawless"); + core.lootService.handleSpecialItems(kraytPearl5, "kraytpearl"); + inventory.add(kraytPearl5); + + TangibleObject kraytPearl6 = (TangibleObject) core.objectService.createObject("object/tangible/component/weapon/lightsaber/shared_lightsaber_module_krayt_dragon_pearl.iff", planet); + kraytPearl6.setAttachment("LootItemName", "kraytpearl_premium"); + core.lootService.handleSpecialItems(kraytPearl6, "kraytpearl"); + inventory.add(kraytPearl6); + + + + TangibleObject colorCrystal = (TangibleObject) core.objectService.createObject("object/tangible/component/weapon/lightsaber/shared_lightsaber_module_force_crystal.iff", planet); + colorCrystal.getAttributes().put("@obj_attr_n:condition", "100/100"); + colorCrystal.getAttributes().put("@obj_attr_n:crystal_owner", "\\#D1F56F UNTUNED \\#FFFFFF "); + colorCrystal.setAttachment("radial_filename", "item/tunable"); + core.lootService.setCustomization(colorCrystal, "colorcrystal"); + inventory.add(colorCrystal); + + TangibleObject lavaCrystal = (TangibleObject) core.objectService.createObject("object/tangible/component/weapon/lightsaber/shared_lightsaber_module_lava_crystal.iff", planet); + lavaCrystal.getAttributes().put("@obj_attr_n:condition", "100/100"); + lavaCrystal.getAttributes().put("@obj_attr_n:crystal_owner", "\\#D1F56F UNTUNED \\#FFFFFF "); + lavaCrystal.getAttributes().put("@obj_attr_n:color", "Lava"); + lavaCrystal.setAttachment("radial_filename", "item/tunable"); + inventory.add(lavaCrystal); + + return; + case 110: SurveyTool mineralSurveyTool = (SurveyTool) core.objectService.createObject("object/tangible/survey_tool/shared_survey_tool_mineral.iff", planet); mineralSurveyTool.setCustomName("Mineral Survey Device"); @@ -1027,190 +1082,140 @@ public class DevService implements INetworkDispatch { inventory.add(solarSurveyTool); return; case 111: + SWGObject deed1; + // Minerals - String templateString="object/tangible/deed/harvester_deed/shared_harvester_ore_s1_deed.iff"; - Harvester_Deed deed1 = (Harvester_Deed)core.objectService.createObject(templateString, planet); - deed1.setOutputHopperCapacity(27344); - deed1.setBER(5); - deed1.setAttributes(); + deed1 = core.objectService.createObject("object/tangible/deed/harvester_deed/shared_harvester_ore_s1_deed.iff", planet); + deed1.setIntAttribute("examine_hoppersize", 27344); + deed1.setIntAttribute("examine_maintenance_rate", 5); inventory.add(deed1); - templateString="object/tangible/deed/harvester_deed/shared_harvester_ore_s2_deed.iff"; - deed1 = (Harvester_Deed)core.objectService.createObject(templateString, planet); - deed1.setOutputHopperCapacity(27344); - deed1.setBER(11); - deed1.setAttributes(); + deed1 = core.objectService.createObject("object/tangible/deed/harvester_deed/shared_harvester_ore_s2_deed.iff", planet); + deed1.setIntAttribute("examine_hoppersize", 27344); + deed1.setIntAttribute("examine_maintenance_rate", 11); inventory.add(deed1); - templateString="object/tangible/deed/harvester_deed/shared_harvester_ore_heavy_deed.iff"; - deed1 = (Harvester_Deed)core.objectService.createObject(templateString, planet); - deed1.setOutputHopperCapacity(135400); - deed1.setBER(14); - deed1.setAttributes(); + deed1 = core.objectService.createObject("object/tangible/deed/harvester_deed/shared_harvester_ore_heavy_deed.iff", planet); + deed1.setIntAttribute("examine_hoppersize", 135400); + deed1.setIntAttribute("examine_maintenance_rate", 14); inventory.add(deed1); - templateString="object/tangible/deed/harvester_deed/shared_harvester_ore_deed_elite.iff"; - deed1 = (Harvester_Deed)core.objectService.createObject(templateString, planet); - deed1.setOutputHopperCapacity(250000); - deed1.setBER(44); - deed1.setAttributes(); + deed1 = core.objectService.createObject("object/tangible/deed/harvester_deed/shared_harvester_ore_deed_elite.iff", planet); + deed1.setIntAttribute("examine_hoppersize", 250000); + deed1.setIntAttribute("examine_maintenance_rate", 44); inventory.add(deed1); - // Chemicals - templateString="object/tangible/deed/harvester_deed/shared_harvester_liquid_deed.iff"; - deed1 = (Harvester_Deed)core.objectService.createObject(templateString, planet); - deed1.setOutputHopperCapacity(27344); - deed1.setBER(5); - deed1.setAttributes(); + deed1 = core.objectService.createObject("object/tangible/deed/harvester_deed/shared_harvester_liquid_deed.iff", planet); + deed1.setIntAttribute("examine_hoppersize", 27344); + deed1.setIntAttribute("examine_maintenance_rate", 5); inventory.add(deed1); - templateString="object/tangible/deed/harvester_deed/shared_harvester_liquid_deed_medium.iff"; - deed1 = (Harvester_Deed)core.objectService.createObject(templateString, planet); - deed1.setOutputHopperCapacity(27344); - deed1.setBER(11); - deed1.setAttributes(); + deed1 = core.objectService.createObject("object/tangible/deed/harvester_deed/shared_harvester_liquid_deed_medium.iff", planet); + deed1.setIntAttribute("examine_hoppersize", 27344); + deed1.setIntAttribute("examine_maintenance_rate", 11); inventory.add(deed1); - templateString="object/tangible/deed/harvester_deed/shared_harvester_liquid_deed_heavy.iff"; - deed1 = (Harvester_Deed)core.objectService.createObject(templateString, planet); - deed1.setOutputHopperCapacity(135400); - deed1.setBER(14); - deed1.setAttributes(); + deed1 = core.objectService.createObject("object/tangible/deed/harvester_deed/shared_harvester_liquid_deed_heavy.iff", planet); + deed1.setIntAttribute("examine_hoppersize", 135400); + deed1.setIntAttribute("examine_maintenance_rate", 14); inventory.add(deed1); - templateString="object/tangible/deed/harvester_deed/shared_harvester_liquid_deed_elite.iff"; - deed1 = (Harvester_Deed)core.objectService.createObject(templateString, planet); - deed1.setOutputHopperCapacity(250000); - deed1.setBER(44); - deed1.setAttributes(); + deed1 = core.objectService.createObject("object/tangible/deed/harvester_deed/shared_harvester_liquid_deed_elite.iff", planet); + deed1.setIntAttribute("examine_hoppersize", 250000); + deed1.setIntAttribute("examine_maintenance_rate", 44); inventory.add(deed1); - // Flora - templateString="object/tangible/deed/harvester_deed/shared_harvester_flora_deed.iff"; - deed1 = (Harvester_Deed)core.objectService.createObject(templateString, planet); - deed1.setOutputHopperCapacity(27344); - deed1.setBER(5); - deed1.setAttributes(); + deed1 = core.objectService.createObject("object/tangible/deed/harvester_deed/shared_harvester_flora_deed.iff", planet); + deed1.setIntAttribute("examine_hoppersize", 27344); + deed1.setIntAttribute("examine_maintenance_rate", 5); inventory.add(deed1); - templateString="object/tangible/deed/harvester_deed/shared_harvester_flora_deed_medium.iff"; - deed1 = (Harvester_Deed)core.objectService.createObject(templateString, planet); - deed1.setOutputHopperCapacity(27344); - deed1.setBER(11); - deed1.setAttributes(); + deed1 = core.objectService.createObject("object/tangible/deed/harvester_deed/shared_harvester_flora_deed_medium.iff", planet); + deed1.setIntAttribute("examine_hoppersize", 27344); + deed1.setIntAttribute("examine_maintenance_rate", 11); inventory.add(deed1); - templateString="object/tangible/deed/harvester_deed/shared_harvester_flora_deed_heavy.iff"; - deed1 = (Harvester_Deed)core.objectService.createObject(templateString, planet); - deed1.setOutputHopperCapacity(135400); - deed1.setBER(14); - deed1.setAttributes(); + deed1 = core.objectService.createObject("object/tangible/deed/harvester_deed/shared_harvester_flora_deed_heavy.iff", planet); + deed1.setIntAttribute("examine_hoppersize", 135400); + deed1.setIntAttribute("examine_maintenance_rate", 14); inventory.add(deed1); - templateString="object/tangible/deed/harvester_deed/shared_harvester_flora_deed_elite.iff"; - deed1 = (Harvester_Deed)core.objectService.createObject(templateString, planet); - deed1.setOutputHopperCapacity(250000); - deed1.setBER(44); - deed1.setAttributes(); + deed1 = core.objectService.createObject("object/tangible/deed/harvester_deed/shared_harvester_flora_deed_elite.iff", planet); + deed1.setIntAttribute("examine_hoppersize", 250000); + deed1.setIntAttribute("examine_maintenance_rate", 44); inventory.add(deed1); // Gas - templateString="object/tangible/deed/harvester_deed/shared_harvester_gas_deed.iff"; - deed1 = (Harvester_Deed)core.objectService.createObject(templateString, planet); - deed1.setOutputHopperCapacity(27344); - deed1.setBER(5); - deed1.setAttributes(); + deed1 = core.objectService.createObject("object/tangible/deed/harvester_deed/shared_harvester_gas_deed.iff", planet); + deed1.setIntAttribute("examine_hoppersize", 27344); + deed1.setIntAttribute("examine_maintenance_rate", 5); inventory.add(deed1); - templateString="object/tangible/deed/harvester_deed/shared_harvester_gas_deed_medium.iff"; - deed1 = (Harvester_Deed)core.objectService.createObject(templateString, planet); - deed1.setOutputHopperCapacity(27344); - deed1.setBER(11); - deed1.setAttributes(); + deed1 = core.objectService.createObject("object/tangible/deed/harvester_deed/shared_harvester_gas_deed_medium.iff", planet); + deed1.setIntAttribute("examine_hoppersize", 27344); + deed1.setIntAttribute("examine_maintenance_rate", 11); inventory.add(deed1); - templateString="object/tangible/deed/harvester_deed/shared_harvester_gas_deed_heavy.iff"; - deed1 = (Harvester_Deed)core.objectService.createObject(templateString, planet); - deed1.setOutputHopperCapacity(135400); - deed1.setBER(14); - deed1.setAttributes(); + deed1 = core.objectService.createObject("object/tangible/deed/harvester_deed/shared_harvester_gas_deed_heavy.iff", planet); + deed1.setIntAttribute("examine_hoppersize", 135400); + deed1.setIntAttribute("examine_maintenance_rate", 14); inventory.add(deed1); - templateString="object/tangible/deed/harvester_deed/shared_harvester_gas_deed_elite.iff"; - deed1 = (Harvester_Deed)core.objectService.createObject(templateString, planet); - deed1.setOutputHopperCapacity(250000); - deed1.setBER(44); - deed1.setAttributes(); + deed1 = core.objectService.createObject("object/tangible/deed/harvester_deed/shared_harvester_gas_deed_elite.iff", planet); + deed1.setIntAttribute("examine_hoppersize", 250000); + deed1.setIntAttribute("examine_maintenance_rate", 44); inventory.add(deed1); - // Water - templateString="object/tangible/deed/harvester_deed/shared_harvester_moisture_deed.iff"; - deed1 = (Harvester_Deed)core.objectService.createObject(templateString, planet); - deed1.setOutputHopperCapacity(27344); - deed1.setBER(5); - deed1.setAttributes(); + deed1 = core.objectService.createObject("object/tangible/deed/harvester_deed/shared_harvester_moisture_deed.iff", planet); + deed1.setIntAttribute("examine_hoppersize", 27344); + deed1.setIntAttribute("examine_maintenance_rate", 5); inventory.add(deed1); - templateString="object/tangible/deed/harvester_deed/shared_harvester_moisture_deed_medium.iff"; - deed1 = (Harvester_Deed)core.objectService.createObject(templateString, planet); - deed1.setOutputHopperCapacity(27344); - deed1.setBER(11); - deed1.setAttributes(); + deed1 = core.objectService.createObject("object/tangible/deed/harvester_deed/shared_harvester_moisture_deed_medium.iff", planet); + deed1.setIntAttribute("examine_hoppersize", 27344); + deed1.setIntAttribute("examine_maintenance_rate", 11); inventory.add(deed1); - templateString="object/tangible/deed/harvester_deed/shared_harvester_moisture_deed_heavy.iff"; - deed1 = (Harvester_Deed)core.objectService.createObject(templateString, planet); - deed1.setOutputHopperCapacity(135400); - deed1.setBER(14); - deed1.setAttributes(); + deed1 = core.objectService.createObject("object/tangible/deed/harvester_deed/shared_harvester_moisture_deed_heavy.iff", planet); + deed1.setIntAttribute("examine_hoppersize", 135400); + deed1.setIntAttribute("examine_maintenance_rate", 14); inventory.add(deed1); - templateString="object/tangible/deed/harvester_deed/shared_harvester_moisture_deed_elite.iff"; - deed1 = (Harvester_Deed)core.objectService.createObject(templateString, planet); - deed1.setOutputHopperCapacity(250000); - deed1.setBER(44); - deed1.setAttributes(); + deed1 = core.objectService.createObject("object/tangible/deed/harvester_deed/shared_harvester_moisture_deed_elite.iff", planet); + deed1.setIntAttribute("examine_hoppersize", 250000); + deed1.setIntAttribute("examine_maintenance_rate", 44); inventory.add(deed1); - // Generators - templateString="object/tangible/deed/generator_deed/shared_generator_fusion_deed.iff"; - deed1 = (Harvester_Deed)core.objectService.createObject(templateString, planet); - deed1.setOutputHopperCapacity(250000); - deed1.setBER(19); - deed1.setAttributes(); + deed1 = core.objectService.createObject("object/tangible/deed/generator_deed/shared_generator_fusion_deed.iff", planet); + deed1.setIntAttribute("examine_hoppersize", 250000); + deed1.setIntAttribute("examine_maintenance_rate", 19); inventory.add(deed1); - templateString="object/tangible/deed/generator_deed/shared_generator_wind_deed.iff"; - deed1 = (Harvester_Deed)core.objectService.createObject(templateString, planet); - deed1.setOutputHopperCapacity(250000); - deed1.setBER(10); - deed1.setAttributes(); + deed1 = core.objectService.createObject("object/tangible/deed/generator_deed/shared_generator_wind_deed.iff", planet); + deed1.setIntAttribute("examine_hoppersize", 250000); + deed1.setIntAttribute("examine_maintenance_rate", 10); inventory.add(deed1); - templateString="object/tangible/deed/generator_deed/shared_generator_solar_deed.iff"; - deed1 = (Harvester_Deed)core.objectService.createObject(templateString, planet); - deed1.setOutputHopperCapacity(250000); - deed1.setBER(15); - deed1.setAttributes(); + deed1 = core.objectService.createObject("object/tangible/deed/generator_deed/shared_generator_solar_deed.iff", planet); + deed1.setIntAttribute("examine_hoppersize", 250000); + deed1.setIntAttribute("examine_maintenance_rate", 15); inventory.add(deed1); -// templateString="object/tangible/deed/generator_deed/shared_generator_photo_bio_deed.iff"; -// deed1 = (Harvester_Deed)core.objectService.createObject(templateString, planet); -// deed1.setOutputHopperCapacity(250000); -// deed1.setBER(19); +// deed1 = core.objectService.createObject("object/tangible/deed/generator_deed/shared_generator_photo_bio_deed.iff", planet); +// deed1.setIntAttribute("examine_hoppersize", 250000); +// deed1.setIntAttribute("examine_maintenance_rate", 19); // inventory.add(deed1); - templateString="object/tangible/deed/generator_deed/shared_generator_geothermal_deed.iff"; - deed1 = (Harvester_Deed)core.objectService.createObject(templateString, planet); - deed1.setOutputHopperCapacity(250000); - deed1.setBER(15); - deed1.setAttributes(); + deed1 = core.objectService.createObject("object/tangible/deed/generator_deed/shared_generator_geothermal_deed.iff", planet); + deed1.setIntAttribute("examine_hoppersize", 250000); + deed1.setIntAttribute("examine_maintenance_rate", 15); inventory.add(deed1); + return; case 112: core.resourceService.spawnSpecificResourceContainer("Radioactive", player, 100000); @@ -1218,21 +1223,39 @@ public class DevService implements INetworkDispatch { case 120: // SWGObject houseDeed = core.objectService.createObject("object/tangible/deed/player_house_deed/shared_generic_house_small_deed.iff", planet); // inventory.add(houseDeed); - - templateString="object/tangible/deed/player_house_deed/shared_generic_house_small_deed.iff"; - Player_House_Deed deed = (Player_House_Deed)core.objectService.createObject(templateString, planet); - deed.setBMR(15); - deed.setAttributes(); - inventory.add(deed); - - templateString="object/tangible/deed/city_deed/shared_cityhall_tatooine_deed.iff"; - deed = (Player_House_Deed)core.objectService.createObject(templateString, planet); - deed.setBMR(15); - deed.setAttributes(); - inventory.add(deed); + + TangibleObject deed = (TangibleObject) core.objectService.createObject("object/tangible/deed/player_house_deed/shared_generic_house_small_deed.iff", planet); + deed.setIntAttribute("examine_maintenance_rate", 15); + inventory.add(deed); + + deed = (TangibleObject) core.objectService.createObject("object/tangible/deed/city_deed/shared_cityhall_tatooine_deed.iff", planet); + deed.setIntAttribute("examine_maintenance_rate", 15); + inventory.add(deed); + + return; - return; - + case 121: + NGECore.getInstance().playerCityService.buildSandboxTestCity(player); + return; + + case 122: + core.simulationService.transferToPlanet(player, core.terrainService.getPlanetByName("dantooine"), new Point3D(4198,9,5210), player.getOrientation(), null); + return; + + case 124: + core.simulationService.transferToPlanet(player, core.terrainService.getPlanetByName("tatooine"), new Point3D(3521,4,-4800), player.getOrientation(), null); + return; + + case 123: + TangibleObject arakydDroids = (TangibleObject) core.objectService.createObject("object/tangible/mission/shared_mission_bounty_droid_probot.iff", planet); + //arakydDroids.setStackable(true); + //arakydDroids.setStackCount(10); + inventory.add(arakydDroids); + + TangibleObject seekerDroids = (TangibleObject) core.objectService.createObject("object/tangible/mission/shared_mission_bounty_droid_seeker.iff", planet); + inventory.add(seekerDroids); + return; + case 125: TangibleObject genericCraftingTool = (TangibleObject) core.objectService.createObject("object/tangible/crafting/station/shared_generic_tool.iff", planet); genericCraftingTool.setCustomName("Generic Crafting Tool"); @@ -1244,6 +1267,11 @@ public class DevService implements INetworkDispatch { inventory.add(swoopDeed); inventory.add(av21deed); return; + + case 140: + TangibleObject guildRegistry = (TangibleObject) core.objectService.createObject("object/tangible/furniture/technical/shared_guild_registry_initial.iff", planet); + inventory.add(guildRegistry); + return; } } }); diff --git a/src/services/EntertainmentService.java b/src/services/EntertainmentService.java index f210cdc7..fccb607b 100644 --- a/src/services/EntertainmentService.java +++ b/src/services/EntertainmentService.java @@ -20,6 +20,7 @@ import protocol.swg.ObjControllerMessage; import protocol.swg.objectControllerObjects.BuffBuilderChangeMessage; import protocol.swg.objectControllerObjects.BuffBuilderEndMessage; import protocol.swg.objectControllerObjects.ImageDesignMessage; +import resources.buffs.BuffItem; import resources.common.BuffBuilder; import resources.common.IDAttribute; import resources.common.MathUtilities; @@ -27,20 +28,19 @@ import resources.common.ObjControllerOpcodes; import resources.common.OutOfBand; import resources.common.Performance; import resources.common.PerformanceEffect; -import resources.common.RGB; import resources.datatables.Posture; -import resources.objects.BuffItem; -import resources.objects.SkillMod; import resources.objects.creature.CreatureObject; import resources.objects.player.PlayerObject; import resources.objects.tangible.TangibleObject; -import resources.visitors.IDManagerVisitor; +import resources.skills.SkillMod; import services.sui.SUIService.InputBoxType; import services.sui.SUIWindow; import services.sui.SUIWindow.Trigger; import engine.clientdata.ClientFileManager; import engine.clientdata.visitors.DatatableVisitor; +import engine.clientdata.visitors.IDManagerVisitor; import engine.clients.Client; +import engine.resources.common.RGB; import engine.resources.objects.SWGObject; import engine.resources.service.INetworkDispatch; import engine.resources.service.INetworkRemoteEvent; diff --git a/src/services/EquipmentService.java b/src/services/EquipmentService.java index 00f9d17c..a75ba2d6 100644 --- a/src/services/EquipmentService.java +++ b/src/services/EquipmentService.java @@ -41,10 +41,13 @@ import org.python.core.PyObject; import resources.datatables.FactionStatus; import resources.objects.creature.CreatureObject; import main.NGECore; +import engine.resources.container.Traverser; import engine.resources.objects.SWGObject; import engine.resources.service.INetworkDispatch; import engine.resources.service.INetworkRemoteEvent; import resources.objects.player.PlayerObject; +import resources.objects.tangible.TangibleObject; +import resources.objects.weapon.WeaponObject; import services.equipment.BonusSetTemplate; public class EquipmentService implements INetworkDispatch { @@ -66,61 +69,92 @@ public class EquipmentService implements INetworkDispatch { } - public boolean canEquip(CreatureObject actor, SWGObject item) { + + /* + Returns an array; + [0] = boolean, whether or not the item may be equipped; + [1] = string, in case of failure, why + */ + public Object[] canEquip(CreatureObject actor, SWGObject item) { // TODO: Species restrictions // TODO: Gender restrictions boolean result = true; + String message = ""; - if (item == null) - return false; + if (item == null) + { + result = false; + message = "null_item"; + return new Object[] { result, message }; + } if (item.getAttributes().toString().contains("cat_armor")) { - if (actor.hasAbility("wear_all_armor")) result = true; // Change to "wear_all_armor" ability instead of lvl 22 - else return false; + if (actor.hasAbility("wear_all_armor")) result = true; + else + { + result = false; + message = "@error_message:insufficient_skill"; // I am unsure if this is the right message + return new Object[] { result, message }; + } } - if (item.getStringAttribute("class_required") != null) { + if (item.getStringAttribute("class_required") != null) + { String classRequired = item.getStringAttribute("class_required"); String profession = ((PlayerObject) actor.getSlottedObject("ghost")).getProfession(); - if (classRequired.contains(",")) { - String[] classes = classRequired.split(","); - - for (int i = 0; i < classes.length; i++) { - if (classes[i].contains(core.playerService.getFormalProfessionName(profession))) { - return true; - } - } + if (classRequired.contains(core.playerService.getFormalProfessionName(profession)) || classRequired.equals("None")) result = true; + else + { + result = false; + message = "@error_message:insufficient_skill"; // I am unsure if this is the right message + return new Object[] { result, message }; } - if (classRequired.contentEquals(core.playerService.getFormalProfessionName(profession)) || classRequired.contentEquals("None")) - result = true; - else - return false; } if (item.getStringAttribute("faction_restriction") != null) - if (item.getStringAttribute("faction_restriction").toLowerCase().contentEquals(actor.getFaction()) && actor.getFactionStatus() >= FactionStatus.Combatant) - result = true; - else - return false; + { + if (item.getStringAttribute("faction_restriction").toLowerCase().contentEquals(actor.getFaction()) && actor.getFactionStatus() >= FactionStatus.Combatant) result = true; + else + { + result = false; + message = "@faction_recruiter:must_be_faction_member_use"; // will have to somehow manage prose %TO for faction name + return new Object[] { result, message }; + } + } if (item.getAttributes().containsKey("required_combat_level")) { - if (actor.getLevel() >= item.getIntAttribute("required_combat_level")) - result = true; - else - return false; + if (actor.getLevel() >= item.getIntAttribute("required_combat_level")) result = true; + else + { + result = false; + message = "@error_message:insufficient_skill"; // I am unsure if this is the right message + return new Object[] { result, message }; + } } if(item.getAttachment("unity") != null) { - actor.sendSystemMessage("@unity:cannot_remove_ring", (byte) 0); - return false; + result = false; + message = "@unity:cannot_remove_ring"; + return new Object[] { result, message }; } - return result; + if(item.getTemplate().startsWith("object/weapon/") && item.getTemplate().contains("lightsaber") && item.getAttachment("hasColorCrystal") == null) item.setAttachment("hasColorCrystal", false); + + if(item.getAttachment("hasColorCrystal") != null && (Boolean) item.getAttachment("hasColorCrystal") == false) + { + result = false; + message = "@jedi_spam:lightsaber_no_color"; + return new Object[] { result, message }; + } + + result = true; + message = "success"; + return new Object[] { result, message }; } public void equip(CreatureObject actor, SWGObject item) @@ -133,7 +167,7 @@ public class EquipmentService implements INetworkDispatch { // TODO: bio-link (assign it by objectID with setAttachment and then just display the customName for that objectID). - if(!actor.getEquipmentList().contains(item)) + if(!actor.getEquipmentList().contains(item.getObjectId())) { actor.addObjectToEquipList(item); processItemAtrributes(actor, item, true); @@ -149,7 +183,7 @@ public class EquipmentService implements INetworkDispatch { if(func != null) func.__call__(Py.java2py(core), Py.java2py(actor), Py.java2py(item)); - if(actor.getEquipmentList().contains(item)) + if(actor.getEquipmentList().contains(item.getObjectId())) { actor.removeObjectFromEquipList(item); processItemAtrributes(actor, item, false); @@ -232,8 +266,11 @@ public class EquipmentService implements INetworkDispatch { int wornArmourPieces = 0, forceProtection = 0; Map protection = new TreeMap(); - for(SWGObject item : new ArrayList(creature.getEquipmentList())) + for(Long itemId : new ArrayList(creature.getEquipmentList())) { + SWGObject item = core.objectService.getObject(itemId); + if(item == null) + continue; Map attributes = new TreeMap(item.getAttributes()); boolean incPieceCount = false; @@ -287,6 +324,109 @@ public class EquipmentService implements INetworkDispatch { } } + public void calculateLightsaberAttributes(CreatureObject actor, TangibleObject item, SWGObject targetContainer) + { + WeaponObject lightsaber = null; + TangibleObject lightsaberInventory = null; + long tunerId = 0; + + // Get our lightsaber weapon object + if(item.getContainer().getTemplate().startsWith("object/tangible/inventory/shared_lightsaber_inventory")) lightsaber = (WeaponObject) item.getGrandparent(); + else if(targetContainer.getTemplate().startsWith("object/tangible/inventory/shared_lightsaber_inventory")) lightsaber = (WeaponObject) targetContainer.getContainer(); + lightsaberInventory = (TangibleObject) lightsaber.getSlottedObject("saber_inv"); + + if(lightsaber.getAttachment("weaponBaseDamageMin") == null) lightsaber.setAttachment("weaponBaseDamageMin", lightsaber.getMinDamage()); + if(lightsaber.getAttachment("weaponBaseDamageMax") == null) lightsaber.setAttachment("weaponBaseDamageMax", lightsaber.getMaxDamage()); + + // Check if item is a lightsaber component + if(lightsaber == null) return; + if(lightsaberInventory == null) return; + if(lightsaber.getContainer() instanceof CreatureObject) + { + actor.sendSystemMessage("@jedi_spam:saber_not_while_equpped", (byte) 0); + return; + } + + if(!item.getTemplate().startsWith("object/tangible/component/weapon/lightsaber/")) + { + actor.sendSystemMessage("@jedi_spam:saber_not_crystal", (byte) 0); + return; + } + if(lightsaber.getAttachment("hasColorCrystal") == null) lightsaber.setAttachment("hasColorCrystal", false); + if(item.getAttributes().containsKey("@obj_attr_n:color") && (Boolean) lightsaber.getAttachment("hasColorCrystal") && !(targetContainer.getContainer() instanceof CreatureObject)) + { + actor.sendSystemMessage("@jedi_spam:saber_already_has_color", (byte) 0); + return; + } + + // Find our tuner + if(item.getAttachment("tunerId") == null) item.setAttachment("tunerId", 0); + tunerId = (int) item.getAttachment("tunerId"); + + // Check if player tuned the crystal + if(tunerId == 0) + { + actor.sendSystemMessage("@jedi_spam:saber_crystal_not_tuned", (byte) 0); + return; + } + if(tunerId != actor.getObjectId()) + { + actor.sendSystemMessage("@jedi_spam:saber_crystal_not_owner", (byte) 0); + return; + } + else item.getContainer().transferTo(actor, targetContainer, item); + + // Calculate attributes + lightsaber.setAttachment("hasColorCrystal", false); + + lightsaberInventory.viewChildren(lightsaberInventory, false, false, new Traverser() + { + WeaponObject saber; + TangibleObject saberInv; + + int minDamageBonus = 0; + int maxDamageBonus = 0; + Boolean hasColorCrystal = false; + + public void process(SWGObject item) + { + saber = (WeaponObject) item.getGrandparent(); + saberInv = (TangibleObject) saber.getSlottedObject("saber_inv"); + + if(item.getAttributes().get("@obj_attr_n:color") != null) // "Blade Color Modification" + { + int crystalColorIndex = resources.datatables.LightsaberColors.getByName((String) item.getAttributes().get("@obj_attr_n:color")); + + byte bladeType = crystalColorIndex > 256 ? (byte) (crystalColorIndex % 256) : 0x00; + byte bladeColor = crystalColorIndex > 256 ? (byte) 0x00 : (byte) crystalColorIndex; + + saber.setCustomizationVariable("private/alternate_shader_blade", bladeType); + saber.setCustomizationVariable("/private/index_color_blade", bladeColor); + + // System.out.println("bladeColorName: " + item.getAttributes().get("@obj_attr_n:color")); + // System.out.println("bladeColor: " + bladeColor); + // System.out.println("bladeType: " + bladeType); + // System.out.println(); + + hasColorCrystal = true; + } + else + { + minDamageBonus += Integer.parseInt(item.getAttributes().get("@obj_attr_n:mindamage")); // "Minimum Damage" + maxDamageBonus += Integer.parseInt(item.getAttributes().get("@obj_attr_n:maxdamage")); // "Maximum Damage" + } + + int saberBaseDamageMin = (int) saber.getAttachment("weaponBaseDamageMin"); + int saberBaseDamageMax = (int) saber.getAttachment("weaponBaseDamageMax"); + + saber.setMinDamage(saberBaseDamageMin + minDamageBonus); + saber.setMaxDamage(saberBaseDamageMax + maxDamageBonus); + + saber.setAttachment("hasColorCrystal", hasColorCrystal); + } + }); + } + private int getWeaponCriticalChance(CreatureObject actor, SWGObject item) { int weaponCriticalChance = 0; String weaponCriticalSkillMod = (core.scriptService.getMethod("scripts/equipment/", "weapon_critical", "weap_" + item.getStringAttribute("cat_wpn_damage.wpn_category").replace("@obj_attr_n:wpn_category_", "")).__call__().asString()); diff --git a/src/services/GroupService.java b/src/services/GroupService.java index fa4d9d5b..032ecd15 100644 --- a/src/services/GroupService.java +++ b/src/services/GroupService.java @@ -25,7 +25,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; -import resources.objects.Buff; +import resources.buffs.Buff; import resources.objects.creature.CreatureObject; import resources.objects.group.GroupObject; import services.chat.ChatRoom; @@ -146,6 +146,12 @@ public class GroupService implements INetworkDispatch { group.setGroupLeader(leader); group.getMemberList().add(leader); group.getMemberList().add(invited); + + if (invited.getLevel() > leader.getLevel()) + group.setGroupLevel(invited.getLevel()); + else + group.setGroupLevel(leader.getLevel()); + leader.makeAware(group); leader.setGroupId(group.getObjectID()); invited.makeAware(group); @@ -170,6 +176,10 @@ public class GroupService implements INetworkDispatch { invited.makeAware(group); invited.setGroupId(group.getObjectID()); invited.sendSystemMessage("@group:joined_self", (byte) 0); + + if (group.getGroupLevel() < invited.getLevel()) + group.setGroupLevel(invited.getLevel()); + addGroupBuffsToMember(group, invited); core.chatService.joinChatRoom(invited.getCustomName(), group.getChatRoomId(), true); diff --git a/src/services/guild/GuildService.java b/src/services/GuildService.java similarity index 75% rename from src/services/guild/GuildService.java rename to src/services/GuildService.java index 022895de..fed7c2c9 100644 --- a/src/services/guild/GuildService.java +++ b/src/services/GuildService.java @@ -19,12 +19,12 @@ * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. ******************************************************************************/ -package services.guild; +package services; import java.util.Map; import resources.guild.Guild; -import resources.objects.SWGList; +import resources.objects.SWGSet; import resources.objects.guild.GuildObject; import main.NGECore; import engine.resources.objects.SWGObject; @@ -49,22 +49,15 @@ public class GuildService implements INetworkDispatch { object = (GuildObject) this.core.objectService.createObject("object/guild/shared_guild_object.iff", core.terrainService.getPlanetList().get(0)); } - object.createTransaction(core.getGuildODB().getEnvironment()); } public Guild createGuild(String abbreviation, String name, SWGObject leader) { if (leader == null) return null; - - int id = 0; - if (object.getGuildList().size() < 1) { - id = 0; - } else { - id = ((object.getGuildList().get(object.getGuildList().size()).getId() + 1)); - } - Guild guild = new Guild(id, abbreviation, name, leader); + int listSize = object.getGuildList().size(); + Guild guild = new Guild((listSize == 0 ? 1 : listSize + 1), abbreviation, name, leader); object.getGuildList().add(guild); @@ -75,38 +68,20 @@ public class GuildService implements INetworkDispatch { return object; } - public SWGList getGuildList() { + public SWGSet getGuildList() { return object.getGuildList(); } public Guild getGuildById(int id) { - for (int i = 0; i < object.getGuildList().size(); i++) { - if (object.getGuildList().get(i).getId() == id) { - return object.getGuildList().get(i); - } - } - - return null; + return object.getGuildList().stream().filter(g -> g.getId() == id).findFirst().get(); } public Guild getGuildByAbbreviation(String abbreviation) { - for (int i = 0; i < object.getGuildList().size(); i++) { - if (object.getGuildList().get(i).getAbbreviation().equals(abbreviation)) { - return object.getGuildList().get(i); - } - } - - return null; + return object.getGuildList().stream().filter(g -> g.getAbbreviation().equals(abbreviation)).findFirst().get(); } public Guild getGuildByName(String name) { - for (int i = 0; i < object.getGuildList().size(); i++) { - if (object.getGuildList().get(i).getName().equals(name)) { - return object.getGuildList().get(i); - } - } - - return null; + return object.getGuildList().stream().filter(g -> g.getName().equals(name)).findFirst().get(); } public boolean removeGuild(int id) { diff --git a/src/services/LoginService.java b/src/services/LoginService.java index 374400ef..bad84964 100644 --- a/src/services/LoginService.java +++ b/src/services/LoginService.java @@ -26,6 +26,7 @@ import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Map; +import java.util.Properties; import java.util.Random; import java.util.concurrent.ScheduledExecutorService; @@ -42,7 +43,6 @@ import engine.resources.service.INetworkDispatch; import engine.resources.service.INetworkRemoteEvent; import engine.resources.service.LocalDbLoginProvider; import engine.resources.service.VBLoginProvider; - import protocol.swg.CharacterCreationDisabled; import protocol.swg.ClientUIErrorMessage; import protocol.swg.DeleteCharacterMessage; @@ -56,7 +56,6 @@ import protocol.swg.ServerNowEpochTime; import protocol.swg.StationIdHasJediSlot; import resources.common.*; import resources.datatables.PlayerFlags; - import resources.objects.creature.CreatureObject; @SuppressWarnings("unused") @@ -206,7 +205,12 @@ public class LoginService implements INetworkDispatch{ core.objectService.destroyObject(object); } - core.getCreatureODB().delete(new Long(packet.getcharId()), Long.class, CreatureObject.class); + try { + core.getSWGObjectODB().remove(object.getObjectID()); + } catch (Exception e) { + + } + DeleteCharacterReplyMessage reply = new DeleteCharacterReplyMessage(0); session.write(reply.serialize()); } @@ -224,7 +228,16 @@ public class LoginService implements INetworkDispatch{ } public boolean checkForGmPermission(int id) { + try { + if (core.getConfig().getInt("ADMIN") > 0) { + return true; + } + } catch (Exception e) { + + } + PreparedStatement preparedStatement; + try { preparedStatement = databaseConnection1.preparedStatement("SELECT * FROM accounts WHERE id=" + id + ""); ResultSet resultSet = preparedStatement.executeQuery(); @@ -233,6 +246,7 @@ public class LoginService implements INetworkDispatch{ } catch (SQLException e) { e.printStackTrace(); } + return false; } diff --git a/src/services/LootService.java b/src/services/LootService.java index 1105e13c..3b680b74 100644 --- a/src/services/LootService.java +++ b/src/services/LootService.java @@ -21,13 +21,15 @@ ******************************************************************************/ package services; -import java.io.File; import java.io.IOException; -import java.nio.file.DirectoryStream; import java.nio.file.DirectoryStream.Filter; -import java.nio.file.FileSystems; +import java.nio.file.attribute.BasicFileAttributes; +import java.nio.file.FileVisitResult; +import java.nio.file.FileVisitor; import java.nio.file.Files; import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.SimpleFileVisitor; import java.util.ArrayList; import java.util.Iterator; import java.util.LinkedHashMap; @@ -35,11 +37,12 @@ import java.util.List; import java.util.Map; import java.util.Random; import java.util.Vector; + import protocol.swg.PlayClientEffectObjectTransformMessage; +import resources.loot.LootGroup; +import resources.loot.LootRollSession; import resources.objects.creature.CreatureObject; import resources.objects.group.GroupObject; -import resources.objects.loot.LootGroup; -import resources.objects.loot.LootRollSession; import resources.objects.tangible.TangibleObject; import resources.objects.weapon.WeaponObject; import main.NGECore; @@ -76,12 +79,14 @@ public class LootService implements INetworkDispatch { } public void handleLootRequest(CreatureObject requester, TangibleObject lootedObject) { - + System.out.println("handleLootRequest "); // security check if (hasAccess(requester,lootedObject) && ! lootedObject.isLooted()){ LootRollSession lootRollSession = (LootRollSession )lootedObject.getAttachment("LootSession"); - if (lootRollSession.getDroppedItems().size()==0) - return; + if (lootRollSession.getDroppedItems().size()==0){ + System.err.println("lootRollSession.getDroppedItems().size()==0"); + return; + } SWGObject lootedObjectInventory = lootedObject.getSlottedObject("inventory"); core.simulationService.openContainer(requester, lootedObjectInventory); setLooted(requester,lootedObject); @@ -90,6 +95,8 @@ public class LootService implements INetworkDispatch { private boolean hasAccess(CreatureObject requester, TangibleObject lootedObject){ LootRollSession lootRollSession = (LootRollSession )lootedObject.getAttachment("LootSession"); + if (lootRollSession==null) + System.err.println("LootSession null: " + lootRollSession); if (lootRollSession!=null){ if (lootRollSession.getRequester()==requester){ return true; @@ -117,6 +124,7 @@ public class LootService implements INetworkDispatch { lootedObject.setLootLock(true); LootRollSession lootRollSession = new LootRollSession(requester,lootedObject); + lootedObject.setAttachment("LootSession", lootRollSession); // preliminarily register session already here handleCreditDrop(requester,lootedObject,lootRollSession); @@ -140,21 +148,23 @@ public class LootService implements INetworkDispatch { System.out.println("this lootGroup will drop something"); handleLootGroup(lootGroup,lootRollSession); //this lootGroup will drop something e.g. {kraytpearl_range,krayt_tissue_rare} } + System.out.println("While Loop Stuck check"); } + System.out.println("Past while "); // Rare Loot System Stage (Is in place for all looted creatures) - if (lootRollSession.isAllowRareLoot()){ - int randomRareLoot = new Random().nextInt(100); - int chanceRequirement = 1; - if (lootRollSession.isIncreasedRLSChance()) - chanceRequirement+=3; // RLS chance is at 4% for groupsize >= 4 - if (randomRareLoot <= chanceRequirement){ - handleRareLootChest(lootRollSession); - } - } +//if (lootRollSession.isAllowRareLoot()){ +// int randomRareLoot = new Random().nextInt(100); +// int chanceRequirement = 1; +// if (lootRollSession.isIncreasedRLSChance()) +// chanceRequirement+=3; // RLS chance is at 4% for groupsize >= 4 +// if (randomRareLoot <= chanceRequirement){ +// handleRareLootChest(lootRollSession); +// } +//} // set info above corpse - + System.out.println("lootedObject instanceof CreatureObject " + (lootedObject instanceof CreatureObject)); if (lootedObject instanceof CreatureObject){ float y = 0.5F; // 1.3356977F float qz= 1.06535322E9F; @@ -181,7 +191,7 @@ public class LootService implements INetworkDispatch { // For autoloot //SWGObject requesterInventory = requester.getSlottedObject("inventory"); - + System.out.println("lootRollSession.getDroppedItems() " + (lootRollSession.getDroppedItems())); for (TangibleObject droppedItem : lootRollSession.getDroppedItems()){ //droppedItem.setAttachment("radial_filename", "lootitem"); @@ -216,15 +226,24 @@ public class LootService implements INetworkDispatch { double randomItemFromGroup = new Random().nextDouble()*100; double remainder = 0; // [10,20,30,34,5,1] + double span = 100/lootPoolNames.length; + + boolean test = false; for(int i=0;i itemChances = (Vector)core.scriptService.fetchDoubleVector(path,"itemChances"); double randomItemFromPool = new Random().nextDouble()*100; - int remainder = 0; // [10,20,30,34,5,1] - + double remainder = 0.0; // [10,20,30,34,5,1] + double span = 100.0/(double)itemNames.size(); + for (int i=0;i subfolders = new ArrayList(); // Consider all sub-folders - try (DirectoryStream ds = Files.newDirectoryStream(FileSystems.getDefault().getPath("scripts/loot/lootItems/"), new DirectoriesFilter())) { - for (Path p : ds) { - subfolders.add(p.getFileName().toString()); - } - } catch (IOException e) { - lootRollSession.addErrorMessage("File system check caused an error. Please contact Charon about this issue."); - return; - } - - String itemPath = "scripts/loot/lootItems/"+itemName.toLowerCase()+".py"; - File file = new File(itemPath); - if (!file.isFile()){ - for (String subfolderName : subfolders){ - itemPath = "scripts/loot/lootItems/"+ subfolderName +"/"+itemName.toLowerCase()+".py"; - File subfile = new File(itemPath); - if (subfile.isFile()) - break; - } + + final Vector foundPath = new Vector(); + Path p = Paths.get("scripts/loot/lootItems/"); + FileVisitor fv = new SimpleFileVisitor() { + @Override + public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { + String actualFileName = file.getFileName().toString(); + actualFileName = actualFileName.substring(0, actualFileName.length()-3); + if (actualFileName.equals(itemName.toLowerCase())){ + foundPath.add(file.toString()); + } + return FileVisitResult.CONTINUE; + } + }; + try { + Files.walkFileTree(p, fv); + } catch (IOException e) { + e.printStackTrace(); } - - File checkfile = new File(itemPath); - if (!checkfile.isFile()){ + + + if (foundPath.size()==0){ String errorMessage = "Loot item '" + itemName + "' not found in file system. Please contact Charon about this issue."; lootRollSession.addErrorMessage(errorMessage); return; - } + + } + String itemPath = foundPath.get(0); itemPath = itemPath.substring(0, itemPath.length()-3); // remove the file type @@ -334,7 +369,7 @@ public class LootService implements INetworkDispatch { if(core.scriptService.getMethod(itemPath,"","itemStats")!=null) itemStats = (Vector)core.scriptService.fetchStringVector(itemPath,"itemStats"); - if(core.scriptService.getMethod(itemPath,"","itemStats")!=null) + if(core.scriptService.getMethod(itemPath,"","itemSkillMods")!=null) itemSkillMods = (Vector)core.scriptService.fetchStringVector(itemPath,"itemSkillMods"); if(core.scriptService.getMethod(itemPath,"","biolink")!=null) @@ -358,6 +393,7 @@ public class LootService implements INetworkDispatch { if(core.scriptService.getMethod(itemPath,"","junkType")!=null) junkType = (byte)core.scriptService.fetchInteger(itemPath,"junkType"); + System.out.println("itemTemplate " + itemTemplate); TangibleObject droppedItem = createDroppedItem(itemTemplate,lootRollSession.getSessionPlanet()); @@ -365,7 +401,11 @@ public class LootService implements INetworkDispatch { droppedItem.setLootItem(true); droppedItem.setAttachment("LootItemName", itemName); - if (customName!=null) + if(core.scriptService.getMethod(itemPath,"","randomStatJewelry")!=null){ + customName = setRandomStatsJewelry(droppedItem, lootRollSession); + } + + if (!customName.isEmpty()) handleCustomDropName(droppedItem, customName); if (stackable!=-1){ @@ -417,8 +457,12 @@ public class LootService implements INetworkDispatch { droppedItem.setStringAttribute("required_faction", requiredFaction); } + if(core.scriptService.getMethod(itemPath,"","customSetup") != null) + core.scriptService.callScript(itemPath, "", "customSetup", droppedItem); + lootRollSession.addDroppedItem(droppedItem); + System.out.println("END REACHED"); } private void handleCustomDropName(TangibleObject droppedItem,String customName) { @@ -498,12 +542,21 @@ public class LootService implements INetworkDispatch { } - private void setCustomization(TangibleObject droppedItem,String itemName) { + public void setCustomization(TangibleObject droppedItem,String itemName) { // Example color crystal if (itemName.contains("colorcrystal")) { System.out.println("colorcrystal"); - droppedItem.setCustomizationVariable("/private/index_color_1", (byte) new Random().nextInt(11)); + + int crystalColor = new Random().nextInt(11); + + droppedItem.setCustomizationVariable("/private/index_color_1", (byte) crystalColor); + droppedItem.getAttributes().put("@obj_attr_n:condition", "100/100"); + droppedItem.getAttributes().put("@obj_attr_n:crystal_owner", "\\#D1F56F UNTUNED \\#FFFFFF "); + droppedItem.getAttributes().put("@obj_attr_n:color", resources.datatables.LightsaberColors.get(crystalColor)); + droppedItem.setAttachment("radial_filename", "item/tunable"); + //droppedItem.getAttributes().put("@obj_attr_n:color", "@jedi_spam:saber_color_" + crystalColor); // Commented out for now + } // Example power crystal @@ -523,7 +576,7 @@ public class LootService implements INetworkDispatch { // } } - private void handleSpecialItems(TangibleObject droppedItem,String itemName) { + public void handleSpecialItems(TangibleObject droppedItem,String itemName) { if (itemName.contains("kraytpearl")){ handleKraytPearl(droppedItem); } @@ -655,25 +708,25 @@ public class LootService implements INetworkDispatch { droppedItem.setDetailName("item_junk_imitation_pearl_01_01"); return; case "kraytpearl_poor": - qualityString="Poor"; + qualityString="@jedi_spam:crystal_quality_0"; break; case "kraytpearl_fair": - qualityString="Fair"; + qualityString="@jedi_spam:crystal_quality_1"; break; case "kraytpearl_good": - qualityString="Good"; + qualityString="@jedi_spam:crystal_quality_2"; break; case "kraytpearl_quality": - qualityString="Quality"; + qualityString="@jedi_spam:crystal_quality_3"; break; case "kraytpearl_select": - qualityString="Select"; + qualityString="@jedi_spam:crystal_quality_4"; break; case "kraytpearl_premium": - qualityString="Premium"; + qualityString="@jedi_spam:crystal_quality_5"; break; case "kraytpearl_flawless": - qualityString="Flawless"; + qualityString="@jedi_spam:crystal_quality_6"; break; default: qualityString="Undetermined"; @@ -683,6 +736,7 @@ public class LootService implements INetworkDispatch { droppedItem.getAttributes().put("@obj_attr_n:crystal_owner", "\\#D1F56F UNTUNED \\#FFFFFF "); droppedItem.getAttributes().put("@obj_attr_n:crystal_quality", qualityString); droppedItem.setAttachment("radial_filename", "item/tunable"); + droppedItem.setAttachment("TuneType", "KraytPearl"); } private void handlePowerCrystal(TangibleObject droppedItem) { @@ -692,28 +746,28 @@ public class LootService implements INetworkDispatch { switch (itemName) { case "powercrystal_poor": - qualityString="Poor"; + qualityString="@jedi_spam:crystal_quality_0"; break; case "powercrystal_fair": - qualityString="Fair"; + qualityString="@jedi_spam:crystal_quality_1"; break; case "powercrystal_good": - qualityString="Good"; + qualityString="@jedi_spam:crystal_quality_2"; break; case "powercrystal_quality": - qualityString="Quality"; + qualityString="@jedi_spam:crystal_quality_3"; break; case "powercrystal_select": - qualityString="Select"; + qualityString="@jedi_spam:crystal_quality_4"; break; case "powercrystal_premium": - qualityString="Premium"; + qualityString="@jedi_spam:crystal_quality_5"; break; case "powercrystal_flawless": - qualityString="Flawless"; + qualityString="@jedi_spam:crystal_quality_6"; break; case "powercrystal_perfect": - qualityString="Perfect"; + qualityString="@jedi_spam:crystal_quality_7"; break; default: qualityString="Undetermined"; @@ -723,8 +777,129 @@ public class LootService implements INetworkDispatch { droppedItem.getAttributes().put("@obj_attr_n:crystal_owner", "\\#D1F56F UNTUNED \\#FFFFFF "); droppedItem.getAttributes().put("@obj_attr_n:crystal_quality", qualityString); droppedItem.setAttachment("radial_filename", "item/tunable"); + droppedItem.setAttachment("TuneType", "PowerCrystal"); } + public void tuneProcess(SWGObject tunableObject){ + + String objectType = (String) tunableObject.getAttachment("LootItemName"); + if (objectType==null || objectType.length()==0) + return; + + int finalMinDmg = 0; + int finalMaxDmg = 0; + @SuppressWarnings("unused") String tunableObjectName = ""; + + if (objectType.contains("powercrystal")){ + tunableObjectName = "Power Crystal"; + switch (objectType) { + case "powercrystal_poor": // Poor - Up to 3/4 damage + int minValue1 = 1; + int maxValue1 = 3; + finalMinDmg = minValue1+new Random().nextInt(maxValue1+1-minValue1); + finalMaxDmg = finalMinDmg+1; + break; + case "powercrystal_fair": // Fair - Up to 5/6 damage + minValue1 = 3; + maxValue1 = 5; + finalMinDmg = minValue1+new Random().nextInt(maxValue1+1-minValue1); + finalMaxDmg = finalMinDmg+1; + break; + case "powercrystal_good": // Good - Up to 10/11 damage + minValue1 = 6; + maxValue1 = 10; + finalMinDmg = minValue1+new Random().nextInt(maxValue1+1-minValue1); + finalMaxDmg = finalMinDmg+1; + break; + case "powercrystal_quality": // Quality - Up to 12/13 damage + minValue1 = 11; + maxValue1 = 12; + finalMinDmg = minValue1+new Random().nextInt(maxValue1+1-minValue1); + finalMaxDmg = finalMinDmg+1; + break; + case "powercrystal_select": // Select - Up to 14/15 damage + minValue1 = 13; + maxValue1 = 14; + finalMinDmg = minValue1+new Random().nextInt(maxValue1+1-minValue1); + finalMaxDmg = finalMinDmg+1; + break; + case "powercrystal_premium": // Premium - Up to 17/18 damage + minValue1 = 15; + maxValue1 = 17; + finalMinDmg = minValue1+new Random().nextInt(maxValue1+1-minValue1); + finalMaxDmg = finalMinDmg+1; + break; + case "powercrystal_flawless": // Flawless - 20-22 possibly more or less + finalMinDmg = 20; + finalMaxDmg = 22; + break; + case "powercrystal_perfect": // Perfect - Up to 23/25 damage + minValue1 = 21; + maxValue1 = 23; + finalMinDmg = minValue1+new Random().nextInt(maxValue1+1-minValue1); + finalMaxDmg = finalMinDmg+1; + break; + } + } + + if (objectType.contains("kraytpearl")){ + tunableObjectName = "Krayt Dragon Pearl"; + switch (objectType) { + case "kraytpearl_poor": // Poor - Up to 3/4 damage + int minValue1 = 1; + int maxValue1 = 3; + finalMinDmg = minValue1+new Random().nextInt(maxValue1+1-minValue1); + finalMaxDmg = finalMinDmg+1; + break; + case "kraytpearl_fair": // Fair - Up to 5/6 damage + minValue1 = 3; + maxValue1 = 5; + finalMinDmg = minValue1+new Random().nextInt(maxValue1+1-minValue1); + finalMaxDmg = finalMinDmg+1; + break; + case "kraytpearl_good": // Good - Up to 10/11 damage + minValue1 = 6; + maxValue1 = 10; + finalMinDmg = minValue1+new Random().nextInt(maxValue1+1-minValue1); + finalMaxDmg = finalMinDmg+1; + break; + case "kraytpearl_quality": // Quality - Up to 12/13 damage + minValue1 = 11; + maxValue1 = 12; + finalMinDmg = minValue1+new Random().nextInt(maxValue1+1-minValue1); + finalMaxDmg = finalMinDmg+1; + break; + case "kraytpearl_select": // Select - Up to 14/15 damage + minValue1 = 13; + maxValue1 = 14; + finalMinDmg = minValue1+new Random().nextInt(maxValue1+1-minValue1); + finalMaxDmg = finalMinDmg+1; + break; + case "kraytpearl_premium": // Premium - Up to 18/19 damage + minValue1 = 15; + maxValue1 = 17; + finalMinDmg = minValue1+new Random().nextInt(maxValue1+1-minValue1); + finalMaxDmg = finalMinDmg+1; + break; + case "kraytpearl_flawless": // Flawless - 19/20 damage + finalMinDmg = 19; + finalMaxDmg = 20; + break; + case "kraytpearl_ancient": // Ancient - 20/22 damage + finalMinDmg = 20; + finalMaxDmg = 22; + break; + } + } + + tunableObject.getAttributes().remove("@obj_attr_n:crystal_quality"); +// tunableObject.setIntAttribute("@obj_attr_n:componentbonuslow", finalMinDmg); +// tunableObject.setIntAttribute("@obj_attr_n:componentbonushigh", finalMaxDmg); + tunableObject.setIntAttribute("@obj_attr_n:mindamage", finalMinDmg); + tunableObject.setIntAttribute("@obj_attr_n:maxdamage", finalMaxDmg); + //((TangibleObject) tunableObject).setCustomName2(tunableObjectName + " (tuned)"); + } + private void setWeaponStat(WeaponObject weapon, String statName, String minValue, String maxValue){ // weapon.setConditionDamage(100); shows 1000/926 ??!! @@ -861,10 +1036,277 @@ public class LootService implements INetworkDispatch { float qz= 1.06535322E9F; Point3D effectorPosition = new Point3D(0,y,0); Quaternion effectorOrientation = new Quaternion(0,0,0,qz); - PlayClientEffectObjectTransformMessage lmsg = new PlayClientEffectObjectTransformMessage("",lootedObject.getObjectID(),"",effectorPosition,effectorOrientation); + //PlayClientEffectObjectTransformMessage lmsg = new PlayClientEffectObjectTransformMessage("",lootedObject.getObjectID(),"",effectorPosition,effectorOrientation); //((CreatureObject) requester).getClient().getSession().write(lmsg.serialize()); } + private String setRandomStatsJewelry(TangibleObject droppedItem, LootRollSession lootRollSession){ + + //determine number of stats #20 yt + int statNumber = 1; + int levelOfDrop = lootRollSession.getLootedObjectLevel(); + int difficultyLevel = lootRollSession.getLootedObjectDifficulty(); // better for calculation + //difficultyLevel++; // better for calculation + +// if (levelOfDrop>70 && levelOfDrop<90 && difficultyLevel==1) +// statNumber = 2; +// +// if (levelOfDrop>=90 && difficultyLevel==1) +// statNumber = 2; +// int statRoll = new Random().nextInt(100); +// if (statRoll<30) +// statNumber = 3; +// +// if (levelOfDrop>=90 && difficultyLevel>=2){ +// statNumber = 2; +// statRoll = new Random().nextInt(100); +// if (statRoll<8) +// statNumber = 4; +// else if (statRoll<50) +// statNumber = 3; +// } + + int statRoll = new Random().nextInt(100); + int difficultyBonus = 0; + + // stage 1 + if (difficultyLevel==1) + difficultyBonus = 60; + if (difficultyLevel>=2) + difficultyBonus = 75; + + if (statRoll<20+difficultyBonus) // diff 3 95% diff 2 70 diff1 20 + statNumber++; + + // stage 2 + difficultyBonus = 0; + if (difficultyLevel==1) + difficultyBonus = 20; + if (difficultyLevel>=2) + difficultyBonus = 60; + + if (statRoll<10+difficultyBonus) // diff 3 70% diff 2 30 diff1 10 + statNumber++; + + // stage 3 + difficultyBonus = 0; + if (difficultyLevel==1) + difficultyBonus = 3; + if (difficultyLevel>=2) + difficultyBonus = 5; + + if (statRoll<1+difficultyBonus) + statNumber++; + + + int primaryAttribute = new Random().nextInt(7); // 0-6 + int maxValue = (int) (levelOfDrop*25/90); + int minValue = (int) (0.75*maxValue); + minValue = Math.max(1, minValue); + maxValue = Math.max(2, maxValue); + droppedItem.setIntAttribute(getAttributeSTF(primaryAttribute), getStatValue(minValue,maxValue)); + maxValue -= 2; //secondary attributes must have less maxValue + minValue = (int) (0.75*maxValue); + minValue = Math.max(1, minValue); + maxValue = Math.max(2, maxValue); + String prefix = getJewelryPrefix(droppedItem); + String suffix = getJewelrySuffix(primaryAttribute, statNumber); + String itemName = prefix + suffix; + Vector alreadyUsedStats = new Vector(); + alreadyUsedStats.add(primaryAttribute); + int attribute = primaryAttribute; + + +// for (int i=0;i statList = new ArrayList(); + for (int i=0;i<7;i++) + statList.add(i); + statList.remove(primaryAttribute); + + for (int i=0;i> scheduleList = new ArrayList>(); + scheduleList.add(scheduler.scheduleAtFixedRate(() -> { ServerTimeMessage time = new ServerTimeMessage(core.getGalacticTime() / 1000); IoBuffer packet = time.serialize(); creature.getClient().getSession().write(packet); }, 45, 45, TimeUnit.SECONDS)); + scheduleList.add(scheduler.scheduleAtFixedRate(() -> { + if (creature.isInStealth() && !creature.getOption(Options.INVULNERABLE) && ((PlayerObject) creature.getSlottedObject("ghost")).getGodLevel() == 0) { + List objects = core.simulationService.get(creature.getPlanet(), creature.getPosition().x, creature.getPosition().z, 64); + + for (SWGObject object : objects) { + if (object == null) { + continue; + } + + if (!(object instanceof CreatureObject)) { + continue; + } + + CreatureObject observer = (CreatureObject) object; + + int camoflauge = creature.getSkillModBase("camoflauge") - observer.getSkillModBase("detectcamo"); + camoflauge -= (64 - creature.getPosition().getDistance(observer.getPosition())); + + if (new Random(camoflauge).nextInt() == camoflauge) { + creature.setInStealth(false); + } + } + } + }, 15, 15, TimeUnit.SECONDS)); + scheduleList.add(scheduler.scheduleAtFixedRate(() -> { PlayerObject player = (PlayerObject) creature.getSlottedObject("ghost"); player.setTotalPlayTime((int) (player.getTotalPlayTime() + ((System.currentTimeMillis() - player.getLastPlayTimeUpdate()) / 1000))); @@ -133,7 +160,7 @@ public class PlayerService implements INetworkDispatch { scheduleList.add(scheduler.scheduleAtFixedRate(() -> { if(creature.getAction() < creature.getMaxAction() && creature.getPosture() != 14) { - if(creature.getCombatFlag() == 0) + if(!creature.isInCombat()) creature.setAction(creature.getAction() + (15 + creature.getLevel() * 5)); else creature.setAction(creature.getAction() + ((15 + creature.getLevel() * 5) / 2)); @@ -141,10 +168,11 @@ public class PlayerService implements INetworkDispatch { }, 0, 1000, TimeUnit.MILLISECONDS)); scheduleList.add(scheduler.scheduleAtFixedRate(() -> { - if(creature.getHealth() < creature.getMaxHealth() && creature.getCombatFlag() == 0 && creature.getPosture() != 13 && creature.getPosture() != 14) + if(creature.getHealth() < creature.getMaxHealth() && !creature.isInCombat() && creature.getPosture() != 13 && creature.getPosture() != 14) creature.setHealth(creature.getHealth() + (36 + creature.getLevel() * 4)); }, 0, 1000, TimeUnit.MILLISECONDS)); schedulers.put(creature.getObjectID(), scheduleList); + /*final PlayerObject ghost = (PlayerObject) creature.getSlottedObject("ghost"); scheduler.schedule(new Runnable() { @@ -157,7 +185,6 @@ public class PlayerService implements INetworkDispatch { } }, 1, TimeUnit.SECONDS);*/ - } @Override @@ -461,15 +488,15 @@ public class PlayerService implements INetworkDispatch { SWGObject preDesignatedCloner = null; - if(creature.getAttachment("preDesignatedCloner") != null) { - preDesignatedCloner = core.objectService.getObject((long) creature.getAttachment("preDesignatedCloner")); + if(creature.getPlayerObject().getBindLocation() != 0) { + preDesignatedCloner = core.objectService.getObject((long) creature.getPlayerObject().getBindLocation()); if(preDesignatedCloner != null) - cloneData.put(preDesignatedCloner.getObjectID(), core.mapService.getClosestCityName(preDesignatedCloner) /*+ " (" + String.valueOf(position.getDistance2D(cloner.getPosition())) + "m)"*/); + cloneData.put(preDesignatedCloner.getObjectID(), "@base_player:clone_location_registered_select_begin " + core.mapService.getClosestCityName(preDesignatedCloner) + " @base_player:clone_location_registered_select_end"); } final long preDesignatedObjectId = (preDesignatedCloner != null) ? preDesignatedCloner.getObjectID() : 0; cloners.stream().filter(c -> c.getObjectID() != preDesignatedObjectId).forEach(c -> cloneData.put(c.getObjectID(), core.mapService.getClosestCityName(c))); - final SUIWindow window = core.suiService.createListBox(ListBoxType.LIST_BOX_OK_CANCEL, "@base_player:revive_title", "Select the desired option and click OK.", + final SUIWindow window = core.suiService.createListBox(ListBoxType.LIST_BOX_OK_CANCEL, "@base_player:revive_title", "@base_player:clone_prompt_header", cloneData, creature, null, 0); Vector returnList = new Vector(); returnList.add("List.lstList:SelectedRow"); @@ -526,7 +553,7 @@ public class PlayerService implements INetworkDispatch { } creature.setFactionStatus(0); - core.buffService.addBuffToCreature(creature, "cloning_sickness"); + core.buffService.addBuffToCreature(creature, "cloning_sickness", creature); } @@ -546,12 +573,37 @@ public class PlayerService implements INetworkDispatch { return; } - player.setProfession(profession); - String xpType = ((profession.contains("entertainer")) ? "entertainer" : ((profession.contains("trader")) ? "crafting" : "combat_general")); - int experience = player.getXp(xpType); + // Remove old profession abilties + + try { + String[] skills; + + DatatableVisitor skillTemplate = ClientFileManager.loadFile("datatables/skill_template/skill_template.iff", DatatableVisitor.class); + + for (int s = 0; s < skillTemplate.getRowCount(); s++) { + if (skillTemplate.getObject(s, 0) != null) { + if (((String) skillTemplate.getObject(s, 0)).equals(player.getProfession())) { + skills = ((String) skillTemplate.getObject(s, 4)).split(","); + + for (String skill : skills) { + core.skillService.removeSkill(creature, skill); + } + + break; + } + } + } + } catch (InstantiationException | IllegalAccessException e) { + e.printStackTrace(); + } + + core.skillService.resetExpertise(creature); + + player.setProfession(profession); + try { experienceTable = ClientFileManager.loadFile("datatables/player/player_level.iff", DatatableVisitor.class); @@ -577,25 +629,27 @@ public class PlayerService implements INetworkDispatch { public void resetLevel(CreatureObject creature) { PlayerObject player = (PlayerObject) creature.getSlottedObject("ghost"); - try - { - for (SWGObject equipment : new ArrayList(creature.getEquipmentList())) { - if (equipment == null) { - continue; - } - - switch (equipment.getTemplate()) { - case "object/tangible/inventory/shared_character_inventory.iff": - case "object/tangible/inventory/shared_appearance_inventory.iff": - case "object/tangible/datapad/shared_character_datapad.iff": - case "object/tangible/bank/shared_character_bank.iff": - case "object/tangible/mission_bag/shared_mission_bag.iff": - case "object/weapon/creature/shared_creature_default_weapon.iff": - continue; - default: - core.equipmentService.unequip(creature, equipment); - } + try { + for (Long equipmentId : new ArrayList(creature.getEquipmentList())) { + + SWGObject equipment = core.objectService.getObject(equipmentId); + + if (equipment == null) { + continue; } + + switch (equipment.getTemplate()) { + case "object/tangible/inventory/shared_character_inventory.iff": + case "object/tangible/inventory/shared_appearance_inventory.iff": + case "object/tangible/datapad/shared_character_datapad.iff": + case "object/tangible/bank/shared_character_bank.iff": + case "object/tangible/mission_bag/shared_mission_bag.iff": + case "object/weapon/creature/shared_creature_default_weapon.iff": + continue; + default: + core.equipmentService.unequip(creature, equipment); + } + } } catch (Exception e) { e.printStackTrace(); } @@ -738,18 +792,20 @@ public class PlayerService implements INetworkDispatch { int arrayLength = items.length; - if (wookieeItems.length > 0 && creature.getStfName().contains("wookiee")) + if (wookieeItems.length > 0 && creature.getStfName().contains("wookiee")) { arrayLength = wookieeItems.length; - else if (ithorianItems.length > 0 && creature.getStfName().contains("ithorian")) + } else if (ithorianItems.length > 0 && creature.getStfName().contains("ithorian")) { arrayLength = ithorianItems.length; - + } + for (int n = 0; n < arrayLength; n++) { String item = items[n]; - if (creature.getStfName().contains("wookiee")) + if (creature.getStfName().contains("wookiee")) { item = wookieeItems[n]; - else if (creature.getStfName().contains("ithorian")) + } else if (creature.getStfName().contains("ithorian")) { item = ithorianItems[n]; + } try { String customServerTemplate = null; @@ -769,8 +825,7 @@ public class PlayerService implements INetworkDispatch { } catch (Exception e) { e.printStackTrace(); } - } - + } } } } @@ -847,194 +902,195 @@ public class PlayerService implements INetworkDispatch { return; } - //synchronized(objectMutex) { - try { - experienceTable = ClientFileManager.loadFile("datatables/player/player_level.iff", DatatableVisitor.class); - - // Cannot gain more than half of the XP needed for the next level in one go - // Do check - - int experienceBonus = creature.getSkillModBase("flush_with_success"); - - experience += ((experience * experienceBonus) / 100); - - // 1. Add the experience. - if (experience > 0 && !creature.isStationary()) { - creature.showFlyText(OutOfBand.ProsePackage("@base_player:prose_flytext_xp", experience), 2.5f, new RGB(180, 60, 240), 1, true); - } - - String xpType = ((player.getProfession().contains("entertainer")) ? "entertainer" : ((player.getProfession().contains("trader")) ? "crafting" : "combat_general")); - - if (player.getXpList().containsKey(xpType)) { - experience += player.getXp(xpType); - } - - player.setXp(xpType, experience); - - // 2. See if they need to level up. - for (int i = 0; i < experienceTable.getRowCount(); i++) { - if (experienceTable.getObject(i, 0) != null) { - if (experience >= ((Integer) experienceTable.getObject(i, 1))) { - if (creature.getLevel() < (Integer) experienceTable.getObject(i, 0)) { - creature.playEffectObject("clienteffect/level_granted.cef", ""); - creature.getClient().getSession().write((new ClientMfdStatusUpdateMessage((float) ((creature.getLevel() == 90) ? 90 : (creature.getLevel() + 1)), "/GroundHUD.MFDStatus.vsp.role.targetLevel")).serialize()); - creature.setLevel(((Integer) experienceTable.getObject(i, 0)).shortValue()); - core.scriptService.callScript("scripts/collections/", "master_" + player.getProfession(), "addMasterBadge", core, creature); - - // 3. Add the relevant health/action and expertise points. - float luck = (((((float) (core.scriptService.getMethod("scripts/roadmap/", player.getProfession(), "getLuck").__call__().asInt()) + (core.scriptService.getMethod("scripts/roadmap/", creature.getStfName(), "getLuck").__call__().asInt())) / ((float) 90)) * ((float) creature.getLevel())) - ((float) creature.getSkillModBase("luck"))); - float precision = (((((float) (core.scriptService.getMethod("scripts/roadmap/", player.getProfession(), "getPrecision").__call__().asInt()) + (core.scriptService.getMethod("scripts/roadmap/", creature.getStfName(), "getPrecision").__call__().asInt())) / ((float) 90)) * ((float) creature.getLevel())) - ((float) creature.getSkillModBase("precision"))); - float strength = (((((float) (core.scriptService.getMethod("scripts/roadmap/", player.getProfession(), "getStrength").__call__().asInt()) + (core.scriptService.getMethod("scripts/roadmap/", creature.getStfName(), "getStrength").__call__().asInt())) / ((float) 90)) * ((float) creature.getLevel())) - ((float) creature.getSkillModBase("strength"))); - float constitution = (((((float) (core.scriptService.getMethod("scripts/roadmap/", player.getProfession(), "getConstitution").__call__().asInt()) + (core.scriptService.getMethod("scripts/roadmap/", creature.getStfName(), "getConstitution").__call__().asInt())) / ((float) 90)) * ((float) creature.getLevel())) - ((float) creature.getSkillModBase("constitution"))); - float stamina = (((((float) (core.scriptService.getMethod("scripts/roadmap/", player.getProfession(), "getStamina").__call__().asInt()) + (core.scriptService.getMethod("scripts/roadmap/", creature.getStfName(), "getStamina").__call__().asInt())) / ((float) 90)) * ((float) creature.getLevel())) - ((float) creature.getSkillModBase("stamina"))); - float agility = (((((float) (core.scriptService.getMethod("scripts/roadmap/", player.getProfession(), "getAgility").__call__().asInt()) + (core.scriptService.getMethod("scripts/roadmap/", creature.getStfName(), "getAgility").__call__().asInt())) / ((float) 90)) * ((float) creature.getLevel())) - ((float) creature.getSkillModBase("agility"))); - float health = 100; - float action = 75; - - int healthGranted = ((Integer) experienceTable.getObject(i, 4)); - - if (luck >= 1) { - core.skillModService.addSkillMod(creature, "luck", (int) luck); - creature.sendSystemMessage(OutOfBand.ProsePackage("@spam:level_up_stat_gain_0", (int) luck), DisplayType.Broadcast); - } - - if (precision >= 1) { - core.skillModService.addSkillMod(creature, "precision", (int) precision); - creature.sendSystemMessage(OutOfBand.ProsePackage("@spam:level_up_stat_gain_1", (int) precision), DisplayType.Broadcast); - } - - if (strength >= 1) { - core.skillModService.addSkillMod(creature, "strength", (int) strength); - creature.sendSystemMessage(OutOfBand.ProsePackage("@spam:level_up_stat_gain_2", (int) strength), DisplayType.Broadcast); - } - - if (constitution >= 1) { - core.skillModService.addSkillMod(creature, "constitution", (int) constitution); - creature.sendSystemMessage(OutOfBand.ProsePackage("@spam:level_up_stat_gain_3", (int) constitution), DisplayType.Broadcast); - } - - if (stamina >= 1) { - core.skillModService.addSkillMod(creature, "stamina", (int) stamina); - creature.sendSystemMessage(OutOfBand.ProsePackage("@spam:level_up_stat_gain_4", (int) stamina), DisplayType.Broadcast); - } - - if (agility >= 1) { - core.skillModService.addSkillMod(creature, "agility", (int) agility); - creature.sendSystemMessage(OutOfBand.ProsePackage("@spam:level_up_stat_gain_5", (int) agility), DisplayType.Broadcast); - } - - if (health >= 1) { - creature.setMaxHealth((creature.getMaxHealth() + (int) health + (healthGranted - creature.getGrantedHealth()))); - creature.setHealth(creature.getMaxHealth()); - creature.sendSystemMessage(OutOfBand.ProsePackage("@spam:level_up_stat_gain_6", (((int) health) + (((int) constitution) * 8) + (((int) stamina) * 2))), DisplayType.Broadcast); - } - - if (action >= 1) { - creature.setMaxAction((creature.getMaxAction() + (int) action)); - creature.setAction(creature.getMaxAction()); - creature.sendSystemMessage(OutOfBand.ProsePackage("@spam:level_up_stat_gain_7", (((int) action) + (((int) stamina) * 8) + (((int) constitution) * 2))), DisplayType.Broadcast); - } - - creature.setGrantedHealth(((Integer) experienceTable.getObject(i, 4))); - // -> Expertise point added automatically by client - creature.showFlyText(OutOfBand.ProsePackage("@cbt_spam:level_up"), 2.5f, new RGB(100, 149, 237), 0, true); - - // 4. Adds roadmap rewards - int level = creature.getLevel(); - - if ((level == 4 || level == 7 || level == 10) || ((level > 10) && (((creature.getLevel() - 10) % 4) == 0))) { - int skill = ((level <= 10) ? ((level - 1) / 3) : ((((level - 10) / 4)) + 3)); - String roadmapSkillName = ""; - DatatableVisitor skillTemplate, roadmap; - - try { - skillTemplate = ClientFileManager.loadFile("datatables/skill_template/skill_template.iff", DatatableVisitor.class); - - for (int s = 0; s < skillTemplate.getRowCount(); s++) { - if (skillTemplate.getObject(s, 0) != null) { - if (((String) skillTemplate.getObject(s, 0)).equals(player.getProfession())) { - String[] skillArray = ((String) skillTemplate.getObject(s, 4)).split(","); - roadmapSkillName = skillArray[skill]; - break; - } - } - } - - creature.showFlyText(OutOfBand.ProsePackage("@cbt_spam:skill_up"), 2.5f, new RGB(154, 205, 50), 0, true); - creature.playEffectObject("clienteffect/skill_granted.cef", ""); - creature.playMusic("sound/music_acq_bountyhunter.snd"); - core.skillService.addSkill(creature, roadmapSkillName); - player.setProfessionWheelPosition(roadmapSkillName); - } catch (InstantiationException | IllegalAccessException e) { - e.printStackTrace(); - } - - try { - roadmap = ClientFileManager.loadFile("datatables/roadmap/item_rewards.iff", DatatableVisitor.class); - - Vector rewards = new Vector(); - - for (int s = 0; s < roadmap.getRowCount(); s++) { - if (roadmap.getObject(s, 0) != null) { - if (((String) roadmap.getObject(s, 1)).equals(roadmapSkillName)) { - String[] apts = ((String) roadmap.getObject(s, 2)).split(","); - String[] items = ((String) roadmap.getObject(s, 4)).split(","); - String[] wookieeItems = ((String) roadmap.getObject(s, 5)).split(","); - String[] ithorianItems = ((String) roadmap.getObject(s, 6)).split(","); - - for (int n = 0; n < items.length; n++) { - String item = items[n]; - - if (wookieeItems[0].length() > 0 && creature.getStfName().contains("wookiee")) { - item = wookieeItems[n]; - } else if (ithorianItems[0].length() > 0 && creature.getStfName().contains("ithorian")) { - item = ithorianItems[n]; - } - - try { - String customServerTemplate = null; - - if (item.contains("/")) { - item = (item.substring(0, (item.lastIndexOf("/") + 1)) + "shared_" + item.substring((item.lastIndexOf("/") + 1))); - } else { - customServerTemplate = item; - item = core.scriptService.callScript("scripts/roadmap/", player.getProfession(), "getRewards", item).asString(); - } - - if (item != null && item != "") { - SWGObject itemObj = core.objectService.createObject(item, 0, creature.getPlanet(), new Point3D(0, 0, 0), new Quaternion(1, 0, 0, 0), customServerTemplate); - rewards.add(itemObj); - } else { - //System.out.println("Can't find template: " + item); - } - } catch (Exception e) { - e.printStackTrace(); - } - } - - } - } - } - - if (rewards != null && !rewards.isEmpty()) { - giveItems(creature, rewards); - } - - } catch (InstantiationException | IllegalAccessException e) { - e.printStackTrace(); - } - } - } - } - } - } - } catch (InstantiationException | IllegalAccessException e) { - e.printStackTrace(); + try { + experienceTable = ClientFileManager.loadFile("datatables/player/player_level.iff", DatatableVisitor.class); + + // Cannot gain more than half of the XP needed for the next level in one go + // TODO: Do check + + int experienceBonus = creature.getSkillModBase("flush_with_success"); + + experience += ((experience * experienceBonus) / 100); + + // 1. Add the experience. + if (experience > 0 && !creature.isStationary()) { + creature.showFlyText(OutOfBand.ProsePackage("@base_player:prose_flytext_xp", experience), 2.5f, new RGB(180, 60, 240), 1, true); } - if(player.getProfession().equals("entertainer_1a") && creature.getLevel() == (short) 90 && creature.getEntertainerExperience() != null) - creature.getEntertainerExperience().cancel(true); - //} + String xpType = ((player.getProfession().contains("entertainer")) ? "entertainer" : ((player.getProfession().contains("trader")) ? "crafting" : "combat_general")); + + if (player.getXpList().containsKey(xpType)) { + experience += player.getXp(xpType); + } + + player.setXp(xpType, experience); + + // 2. See if they need to level up. + for (int i = 0; i < experienceTable.getRowCount(); i++) { + if (experienceTable.getObject(i, 0) != null) { + if (experience >= ((Integer) experienceTable.getObject(i, 1))) { + if (creature.getLevel() < (Integer) experienceTable.getObject(i, 0)) { + creature.playEffectObject("clienteffect/level_granted.cef", ""); + creature.getClient().getSession().write((new ClientMfdStatusUpdateMessage((float) ((creature.getLevel() == 90) ? 90 : (creature.getLevel() + 1)), "/GroundHUD.MFDStatus.vsp.role.targetLevel")).serialize()); + creature.setLevel(((Integer) experienceTable.getObject(i, 0)).shortValue()); + core.scriptService.callScript("scripts/collections/", "master_" + player.getProfession(), "addMasterBadge", core, creature); + + // 3. Add the relevant health/action and expertise points. + float luck = (((((float) (core.scriptService.getMethod("scripts/roadmap/", player.getProfession(), "getLuck").__call__().asInt()) + (core.scriptService.getMethod("scripts/roadmap/", creature.getStfName(), "getLuck").__call__().asInt())) / ((float) 90)) * ((float) creature.getLevel())) - ((float) creature.getSkillModBase("luck"))); + float precision = (((((float) (core.scriptService.getMethod("scripts/roadmap/", player.getProfession(), "getPrecision").__call__().asInt()) + (core.scriptService.getMethod("scripts/roadmap/", creature.getStfName(), "getPrecision").__call__().asInt())) / ((float) 90)) * ((float) creature.getLevel())) - ((float) creature.getSkillModBase("precision"))); + float strength = (((((float) (core.scriptService.getMethod("scripts/roadmap/", player.getProfession(), "getStrength").__call__().asInt()) + (core.scriptService.getMethod("scripts/roadmap/", creature.getStfName(), "getStrength").__call__().asInt())) / ((float) 90)) * ((float) creature.getLevel())) - ((float) creature.getSkillModBase("strength"))); + float constitution = (((((float) (core.scriptService.getMethod("scripts/roadmap/", player.getProfession(), "getConstitution").__call__().asInt()) + (core.scriptService.getMethod("scripts/roadmap/", creature.getStfName(), "getConstitution").__call__().asInt())) / ((float) 90)) * ((float) creature.getLevel())) - ((float) creature.getSkillModBase("constitution"))); + float stamina = (((((float) (core.scriptService.getMethod("scripts/roadmap/", player.getProfession(), "getStamina").__call__().asInt()) + (core.scriptService.getMethod("scripts/roadmap/", creature.getStfName(), "getStamina").__call__().asInt())) / ((float) 90)) * ((float) creature.getLevel())) - ((float) creature.getSkillModBase("stamina"))); + float agility = (((((float) (core.scriptService.getMethod("scripts/roadmap/", player.getProfession(), "getAgility").__call__().asInt()) + (core.scriptService.getMethod("scripts/roadmap/", creature.getStfName(), "getAgility").__call__().asInt())) / ((float) 90)) * ((float) creature.getLevel())) - ((float) creature.getSkillModBase("agility"))); + float health = 100; + float action = 75; + + int healthGranted = ((Integer) experienceTable.getObject(i, 4)); + + if (luck >= 1) { + core.skillModService.addSkillMod(creature, "luck", (int) luck); + creature.sendSystemMessage(OutOfBand.ProsePackage("@spam:level_up_stat_gain_0", (int) luck), DisplayType.Broadcast); + } + + if (precision >= 1) { + core.skillModService.addSkillMod(creature, "precision", (int) precision); + creature.sendSystemMessage(OutOfBand.ProsePackage("@spam:level_up_stat_gain_1", (int) precision), DisplayType.Broadcast); + } + + if (strength >= 1) { + core.skillModService.addSkillMod(creature, "strength", (int) strength); + creature.sendSystemMessage(OutOfBand.ProsePackage("@spam:level_up_stat_gain_2", (int) strength), DisplayType.Broadcast); + } + + if (constitution >= 1) { + core.skillModService.addSkillMod(creature, "constitution", (int) constitution); + creature.sendSystemMessage(OutOfBand.ProsePackage("@spam:level_up_stat_gain_3", (int) constitution), DisplayType.Broadcast); + } + + if (stamina >= 1) { + core.skillModService.addSkillMod(creature, "stamina", (int) stamina); + creature.sendSystemMessage(OutOfBand.ProsePackage("@spam:level_up_stat_gain_4", (int) stamina), DisplayType.Broadcast); + } + + if (agility >= 1) { + core.skillModService.addSkillMod(creature, "agility", (int) agility); + creature.sendSystemMessage(OutOfBand.ProsePackage("@spam:level_up_stat_gain_5", (int) agility), DisplayType.Broadcast); + } + + if (health >= 1) { + creature.setMaxHealth((creature.getMaxHealth() + (int) health + (healthGranted - creature.getGrantedHealth()))); + creature.setHealth(creature.getMaxHealth()); + creature.sendSystemMessage(OutOfBand.ProsePackage("@spam:level_up_stat_gain_6", (((int) health) + (((int) constitution) * 8) + (((int) stamina) * 2))), DisplayType.Broadcast); + } + + if (action >= 1) { + creature.setMaxAction((creature.getMaxAction() + (int) action)); + creature.setAction(creature.getMaxAction()); + creature.sendSystemMessage(OutOfBand.ProsePackage("@spam:level_up_stat_gain_7", (((int) action) + (((int) stamina) * 8) + (((int) constitution) * 2))), DisplayType.Broadcast); + } + + creature.setGrantedHealth(((Integer) experienceTable.getObject(i, 4))); + // -> Expertise point added automatically by client + creature.showFlyText(OutOfBand.ProsePackage("@cbt_spam:level_up"), 2.5f, new RGB(100, 149, 237), 0, true); + + // 4. Adds roadmap rewards + int level = creature.getLevel(); + + if ((level == 4 || level == 7 || level == 10) || ((level > 10) && (((creature.getLevel() - 10) % 4) == 0))) { + int skill = ((level <= 10) ? ((level - 1) / 3) : ((((level - 10) / 4)) + 3)); + String roadmapSkillName = ""; + DatatableVisitor skillTemplate, roadmap; + + try { + skillTemplate = ClientFileManager.loadFile("datatables/skill_template/skill_template.iff", DatatableVisitor.class); + + for (int s = 0; s < skillTemplate.getRowCount(); s++) { + if (skillTemplate.getObject(s, 0) != null) { + if (((String) skillTemplate.getObject(s, 0)).equals(player.getProfession())) { + String[] skillArray = ((String) skillTemplate.getObject(s, 4)).split(","); + roadmapSkillName = skillArray[skill]; + break; + } + } + } + + creature.showFlyText(OutOfBand.ProsePackage("@cbt_spam:skill_up"), 2.5f, new RGB(154, 205, 50), 0, true); + creature.playEffectObject("clienteffect/skill_granted.cef", ""); + creature.playMusic("sound/music_acq_bountyhunter.snd"); + core.skillService.addSkill(creature, roadmapSkillName); + player.setProfessionWheelPosition(roadmapSkillName); + } catch (InstantiationException | IllegalAccessException e) { + e.printStackTrace(); + } + + try { + roadmap = ClientFileManager.loadFile("datatables/roadmap/item_rewards.iff", DatatableVisitor.class); + + Vector rewards = new Vector(); + + for (int s = 0; s < roadmap.getRowCount(); s++) { + if (roadmap.getObject(s, 0) != null) { + if (((String) roadmap.getObject(s, 1)).equals(roadmapSkillName)) { + String[] apts = ((String) roadmap.getObject(s, 2)).split(","); + String[] items = ((String) roadmap.getObject(s, 4)).split(","); + String[] wookieeItems = ((String) roadmap.getObject(s, 5)).split(","); + String[] ithorianItems = ((String) roadmap.getObject(s, 6)).split(","); + + int arrayLength = items.length; + + if (wookieeItems.length > 0 && creature.getStfName().contains("wookiee")) { + arrayLength = wookieeItems.length; + } else if (ithorianItems.length > 0 && creature.getStfName().contains("ithorian")) { + arrayLength = ithorianItems.length; + } + + for (int n = 0; n < arrayLength; n++) { + String item = items[n]; + + if (creature.getStfName().contains("wookiee")) { + item = wookieeItems[n]; + } else if (creature.getStfName().contains("ithorian")) { + item = ithorianItems[n]; + } + + try { + String customServerTemplate = null; + + if (item.contains("/")) { + item = (item.substring(0, (item.lastIndexOf("/") + 1)) + "shared_" + item.substring((item.lastIndexOf("/") + 1))); + } else { + customServerTemplate = item; + item = core.scriptService.callScript("scripts/roadmap/", player.getProfession(), "getRewards", item).asString(); + } + + if (item != null && item != "") { + SWGObject itemObj = core.objectService.createObject(item, 0, creature.getPlanet(), new Point3D(0, 0, 0), new Quaternion(1, 0, 0, 0), customServerTemplate); + } else { + //System.out.println("Can't find template: " + item); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + } + } + } + + if (rewards != null && !rewards.isEmpty()) { + giveItems(creature, rewards); + } + + } catch (InstantiationException | IllegalAccessException e) { + e.printStackTrace(); + } + } + } + } + } + } + } catch (InstantiationException | IllegalAccessException e) { + e.printStackTrace(); + } } public void addPlayerTitle(PlayerObject player, String title) { @@ -1182,7 +1238,7 @@ public class PlayerService implements INetworkDispatch { // need to set a unity attachment. ringList.get(0).setAttachment("unity", (Boolean) true); - if(!acceptor.getEquipmentList().contains(ringList.get(0))) + if(!acceptor.getEquipmentList().contains(ringList.get(0).getObjectId())) core.equipmentService.equip(acceptor, ringList.get(0)); aGhost.setSpouseName(proposer.getCustomName()); @@ -1217,7 +1273,7 @@ public class PlayerService implements INetworkDispatch { SWGObject selectedRing = core.objectService.getObject(ringWindow.getObjectIdByIndex(index)); selectedRing.setAttachment("unity", (Boolean) true); - if(!actor.getEquipmentList().contains(selectedRing)) + if(!actor.getEquipmentList().contains(selectedRing.getObjectId())) core.equipmentService.equip(actor, selectedRing); PlayerObject aGhost = (PlayerObject) actor.getSlottedObject("ghost"); @@ -1242,8 +1298,9 @@ public class PlayerService implements INetworkDispatch { actor.sendSystemMessage("@unity:decline", (byte) 0); proposer.sendSystemMessage("@unity:declined", (byte) 0); actor.setAttachment("proposer", null); - for(SWGObject obj : proposer.getEquipmentList()) { - if(obj.getAttachment("unity") != null) { + for(Long objId : proposer.getEquipmentList()) { + SWGObject obj = core.objectService.getObject(objId); + if(obj != null && obj.getAttachment("unity") != null) { obj.setAttachment("unity", null); break; } @@ -1253,6 +1310,65 @@ public class PlayerService implements INetworkDispatch { core.suiService.openSUIWindow(ringWindow); } + public void sendSetBountyWindow(final CreatureObject victim, final CreatureObject attacker) { + SUIWindow bountyWindow = core.suiService.createInputBox(InputBoxType.INPUT_BOX_OK_CANCEL, "@bounty_hunter:setbounty_title", "@bounty_hunter:setbounty_prompt1 " + attacker.getCustomName() + "?" + "\n@bounty_hunter:setbounty_prompt2 " + + String.valueOf(victim.getBankCredits() + victim.getCashCredits()), victim, null, (float) 10, new SUICallback() { + + @Override + public void process(SWGObject owner, int eventType, Vector returnList) { + if (eventType == 0 && returnList.get(0) != null) { + int bounty = Integer.parseInt(returnList.get(0)); + int totalFunds = victim.getBankCredits() + victim.getCashCredits(); + + if (bounty > totalFunds) { + victim.sendSystemMessage("@bounty_hunter:setbounty_too_much", DisplayType.Broadcast); + sendSetBountyWindow(victim, attacker); + return; + } + + if (bounty < 20000) { + victim.sendSystemMessage("@bounty_hunter:setbounty_too_little", DisplayType.Broadcast); + sendSetBountyWindow(victim, attacker); + return; + } else if (bounty > 1000000) { + victim.sendSystemMessage("@bounty_hunter:setbounty_cap", DisplayType.Broadcast); + bounty = 1000000; + } + + if (core.getBountiesODB().contains(attacker.getObjectID())) { + if (((BountyListItem) core.getBountiesODB().get(attacker.getObjectID())).getCreditReward() >= 20000000) { + victim.sendSystemMessage("@bounty_hunter:max_bounty", DisplayType.Broadcast); + return; + } + } + + // Try removing bounty amount from the bank first then cash. Remove amount accordingly if bank/cash is less than placed bounty. + if (bounty > victim.getBankCredits()) { + int difference = bounty - victim.getBankCredits(); + + victim.setCashCredits(victim.getCashCredits() - difference); + victim.setBankCredits(0); + } else if (bounty > victim.getCashCredits()) { + int difference = bounty - victim.getCashCredits(); + + victim.setBankCredits(victim.getBankCredits() - difference); + victim.setCashCredits(0); + } else { victim.setBankCredits(victim.getBankCredits() - bounty); } + + if (!core.missionService.addToExistingBounty(attacker.getObjectID(), victim.getObjectID(), bounty)) + core.missionService.createNewBounty(attacker, victim.getObjectID(), bounty); + + victim.sendSystemMessage("You have placed a bounty for " + bounty + " credits on the head of " + attacker.getCustomName(), (byte) 0); + } + } + + }); + bountyWindow.setProperty("txtInput:NumericInteger", "true"); + bountyWindow.setProperty("txtInput:MaxLength", "7"); + bountyWindow.setProperty("inputBox:Size", "306,306"); + core.suiService.openSUIWindow(bountyWindow); + } + public String getFormalProfessionName(String template) { String formalName = ""; diff --git a/src/services/SimulationService.java b/src/services/SimulationService.java index 0b941eb6..1eb8ede6 100644 --- a/src/services/SimulationService.java +++ b/src/services/SimulationService.java @@ -34,6 +34,7 @@ import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicBoolean; import main.NGECore; @@ -51,8 +52,10 @@ import engine.clientdata.visitors.PortalVisitor.Cell; import engine.clients.Client; import engine.resources.common.Event; import engine.resources.common.Mesh3DTriangle; +import engine.resources.common.RGB; import engine.resources.common.Ray; import engine.resources.container.Traverser; +import engine.resources.database.ODBCursor; import engine.resources.objects.SWGObject; import engine.resources.scene.Planet; import engine.resources.scene.Point3D; @@ -76,6 +79,7 @@ import resources.objects.building.BuildingObject; import resources.objects.cell.CellObject; import resources.objects.creature.CreatureObject; import resources.objects.group.GroupObject; +import resources.objects.harvester.HarvesterObject; import resources.objects.player.PlayerObject; import resources.objects.tangible.TangibleObject; import resources.common.*; @@ -186,13 +190,11 @@ public class SimulationService implements INetworkDispatch { } public void insertPersistentBuildings() { - EntityCursor cursor = core.getBuildingODB().getCursor(Long.class, BuildingObject.class); + ODBCursor cursor = core.getSWGObjectODB().getCursor(); - Iterator it = cursor.iterator(); - - while(it.hasNext()) { - final BuildingObject building = (BuildingObject) core.objectService.getObject(it.next().getObjectID()); - if(building == null) + while(cursor.hasNext()) { + SWGObject building = core.objectService.getObject(((SWGObject) cursor.next()).getObjectID()); + if(building == null || (!(building instanceof BuildingObject) && !(building instanceof HarvesterObject))) continue; if(building.getAttachment("hasLoadedServerTemplate") == null) core.objectService.loadServerTemplate(building); @@ -214,22 +216,23 @@ public class SimulationService implements INetworkDispatch { return collidableQuadTrees.get(planet.getName()).get(x, y, range); } - public boolean add(SWGObject object, float x, float y) { - return add(object, x, y, false); + public boolean add(SWGObject object, float x, float z) { + return add(object, x, z, false); } - public boolean add(SWGObject object, float x, float y, boolean notifyObservers) { + public boolean add(SWGObject object, float x, float z, boolean notifyObservers) { object.setIsInQuadtree(true); - boolean success = quadTrees.get(object.getPlanet().getName()).put(x, y, object); + boolean success = quadTrees.get(object.getPlanet().getName()).put(x, z, object); if(success) { @SuppressWarnings("unchecked") Vector childObjects = (Vector) object.getAttachment("childObjects"); if(childObjects != null) { addChildObjects(object, childObjects); object.setAttachment("childObjects", null); } + if(notifyObservers) { - Point3D pos = new Point3D(x, 0, y); - Collection newAwareObjects = get(object.getPlanet(), x, y, 512); + Point3D pos = new Point3D(x, 0, z); + Collection newAwareObjects = get(object.getPlanet(), x, z, 512); for(Iterator it = newAwareObjects.iterator(); it.hasNext();) { SWGObject obj = it.next(); if((obj.getAttachment("bigSpawnRange") == null && obj.getWorldPosition().getDistance2D(pos) > 200) || obj == object) @@ -263,39 +266,39 @@ public class SimulationService implements INetworkDispatch { } - public boolean move(SWGObject object, int oldX, int oldY, int newX, int newY) { - if(quadTrees.get(object.getPlanet().getName()).remove(oldX, oldY, object)) { - return quadTrees.get(object.getPlanet().getName()).put(newX, newY, object); + public boolean move(SWGObject object, int oldX, int oldZ, int newX, int newZ) { + if(quadTrees.get(object.getPlanet().getName()).remove(oldX, oldZ, object)) { + return quadTrees.get(object.getPlanet().getName()).put(newX, newZ, object); } return false; } - public boolean move(SWGObject object, float oldX, float oldY, float newX, float newY) { + public boolean move(SWGObject object, float oldX, float oldZ, float newX, float newZ) { long startTime = System.nanoTime(); - if(quadTrees.get(object.getPlanet().getName()).remove(oldX, oldY, object)) { - boolean success = quadTrees.get(object.getPlanet().getName()).put(newX, newY, object); + if(quadTrees.get(object.getPlanet().getName()).remove(oldX, oldZ, object)) { + boolean success = quadTrees.get(object.getPlanet().getName()).put(newX, newZ, object); return success; } System.out.println("Move failed."); return false; } - public List get(Planet planet, float x, float y, int range) { - List list = quadTrees.get(planet.getName()).get((int)x, (int)y, range); + public List get(Planet planet, float x, float z, int range) { + List list = quadTrees.get(planet.getName()).get((int)x, (int)z, range); return list; } - public boolean remove(SWGObject object, float x, float y) { - return remove(object, x, y, false); + public boolean remove(SWGObject object, float x, float z) { + return remove(object, x, z, false); } - public boolean remove(SWGObject object, float x, float y, boolean notifyObservers) { + public boolean remove(SWGObject object, float x, float z, boolean notifyObservers) { if (object == null || !object.isInQuadtree()) { return false; } - boolean success = quadTrees.get(object.getPlanet().getName()).remove(x, y, object); + boolean success = quadTrees.get(object.getPlanet().getName()).remove(x, z, object); object.setIsInQuadtree(success); if(success && notifyObservers) { HashSet oldObservers = new HashSet(object.getObservers()); @@ -789,10 +792,14 @@ public class SimulationService implements INetworkDispatch { ScheduledFuture disconnectTask = scheduler.schedule(new Runnable() { @Override public void run() { - if(core.objectService.getObject(objectId).getAttachment("disconnectTask") != null) - core.connectionService.disconnect(client); + SWGObject object = core.objectService.getObject(objectId); + + if (object.getAttachment("disconnectTask") != null) { + //core.connectionService.disconnect(client); + core.simulationService.remove(object, object.getPosition().x, object.getPosition().z, true); + } } - }, 1, TimeUnit.MINUTES); + }, 120, TimeUnit.SECONDS); core.removeClient(session); object.setAttachment("disconnectTask", disconnectTask); @@ -904,7 +911,7 @@ public class SimulationService implements INetworkDispatch { HeartBeatMessage heartBeat = new HeartBeatMessage(); session.write(heartBeat.serialize()); - CmdStartScene startScene = new CmdStartScene((byte) 0, object.getObjectID(), object.getPlanet().getPath(), object.getTemplate(), newPos.x, newPos.y, newPos.z, System.currentTimeMillis() / 1000, object.getRadians()); + CmdStartScene startScene = new CmdStartScene((byte) 0, object.getObjectID(), object.getPlanet().getPath(), object.getTemplate(), newPos.x, newPos.y, newPos.z, core.getGalacticTime() / 1000, object.getRadians()); session.write(startScene.serialize()); handleZoneIn(client); @@ -916,10 +923,10 @@ public class SimulationService implements INetworkDispatch { if(container.getPermissions().canView(requester, container)) { OpenedContainerMessage opm = new OpenedContainerMessage(container.getObjectID()); - if(requester.getClient() != null && requester.getClient().getSession() != null && !(container instanceof CreatureObject)) + if(requester.getClient() != null && requester.getClient().getSession() != null && !(container instanceof CreatureObject)){ requester.getClient().getSession().write(opm.serialize()); - } - + } + } } public void transform(TangibleObject obj, Point3D position) @@ -940,6 +947,36 @@ public class SimulationService implements INetworkDispatch { teleport(obj, obj.getPosition(), newRotation, obj.getParentId()); } + public void rotateToFaceTarget(SWGObject object, SWGObject target) { + float radians = (float) (((float) Math.atan2(target.getPosition().z - object.getPosition().z, target.getPosition().x - object.getPosition().x)) - object.getRadians()); + transform(object, radians, object.getPosition()); + } + + public void faceTarget(SWGObject object, SWGObject target) { + float direction = (float) Math.atan2(target.getWorldPosition().x - object.getWorldPosition().x, target.getWorldPosition().z - object.getWorldPosition().z); + + if (direction < 0) { + direction = (float) (2 * Math.PI + direction); + } + + if (Math.abs(direction - object.getRadians()) < 0.05) { + return; + } + + Quaternion quaternion = new Quaternion((float) Math.cos(direction / 2), 0, (float) Math.sin(direction / 2), 0); + + if (quaternion.y < 0.0f && quaternion.w > 0.0f) { + quaternion.y *= -1; + quaternion.w *= -1; + } + + if (object.getContainer() instanceof CellObject) { + NGECore.getInstance().simulationService.moveObject(object, object.getPosition(), quaternion, object.getMovementCounter(), 0, (CellObject) object.getContainer()); + } else { + NGECore.getInstance().simulationService.moveObject(object, object.getPosition(), quaternion, object.getMovementCounter(), 0, null); + } + } + public void teleport(SWGObject obj, Point3D position, Quaternion orientation, long cellId) { if(cellId == 0) { @@ -983,6 +1020,10 @@ public class SimulationService implements INetworkDispatch { float heightOrigin = 1.f; float heightDirection = 1.f; + if (obj2.getTemplate().equals("object/tangible/inventory/shared_character_inventory.iff")){ + obj2 = obj2.getContainer(); // LOS message fix on corpse + } + if(obj1 instanceof CreatureObject) heightOrigin = getHeightOrigin((CreatureObject) obj1); @@ -1195,8 +1236,8 @@ public class SimulationService implements INetworkDispatch { float height = (float) (creature.getHeight()/* - 0.3*/); - if(creature.getPosture() == 2 || creature.getPosture() == 13) - height = 0.3f; + if(creature.getPosture() == 2 || creature.getPosture() == 13 || creature.getPosture() == 14) + height = 0.45f; else if(creature.getPosture() == 1) height /= 2.f; diff --git a/src/services/SkillModService.java b/src/services/SkillModService.java index c0a4de48..042e7bc9 100644 --- a/src/services/SkillModService.java +++ b/src/services/SkillModService.java @@ -25,8 +25,8 @@ import java.util.HashMap; import java.util.Map; import resources.common.FileUtilities; -import resources.objects.SkillMod; import resources.objects.creature.CreatureObject; +import resources.skills.SkillMod; import main.NGECore; import engine.clientdata.ClientFileManager; import engine.clientdata.visitors.DatatableVisitor; diff --git a/src/services/SkillService.java b/src/services/SkillService.java index a61116b3..6396581f 100644 --- a/src/services/SkillService.java +++ b/src/services/SkillService.java @@ -399,6 +399,8 @@ public class SkillService implements INetworkDispatch { public void resetExpertise(CreatureObject creature) { List skills = new ArrayList(creature.getSkills()); skills.stream().filter(s -> s.contains("expertise")).forEach(s -> removeSkill(creature, s)); + + creature.getBuffList().stream().forEach(buff -> creature.removeBuff(buff)); } public void sendRespecWindow(CreatureObject creature) { diff --git a/src/services/StaticService.java b/src/services/StaticService.java index 7dbe7d97..11b9dee8 100644 --- a/src/services/StaticService.java +++ b/src/services/StaticService.java @@ -21,16 +21,26 @@ ******************************************************************************/ package services; +import java.io.IOException; +import java.nio.file.FileVisitResult; +import java.nio.file.FileVisitor; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.SimpleFileVisitor; +import java.nio.file.attribute.BasicFileAttributes; import java.util.ArrayList; import java.util.List; import java.util.Map; +import resources.common.FileUtilities; import resources.objects.building.BuildingObject; -import resources.objects.creature.CreatureObject; -import resources.objects.tangible.TangibleObject; - +import resources.objects.cell.CellObject; +import services.ai.AIActor; +import services.spawn.MobileTemplate; import main.NGECore; - +import engine.clientdata.ClientFileManager; +import engine.clientdata.visitors.PortalVisitor; import engine.resources.objects.SWGObject; import engine.resources.scene.Planet; import engine.resources.scene.Point3D; @@ -47,72 +57,134 @@ public class StaticService implements INetworkDispatch { } public void spawnStatics() { - for (SWGObject object : core.objectService.getObjectList().values()) { - if (object instanceof CreatureObject && ((CreatureObject) object).getStaticNPC()) { - ((TangibleObject) object).setRespawnTime(0); - core.objectService.destroyObject(object); + for (Planet planet : core.terrainService.getPlanetList()) { + if (FileUtilities.doesFileExist("scripts/static_spawns/" + planet.getName())) { + Path p = Paths.get("scripts/static_spawns/" + planet.getName()); + + FileVisitor fv = new SimpleFileVisitor() { + @Override + public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { + if (file.getFileName().toString().endsWith(".py")) { + core.scriptService.callScript("scripts/static_spawns/" + planet.getName() + "/", file.getFileName().toString().replace(".py", ""), "addPlanetSpawns", core, planet); + } + + return FileVisitResult.CONTINUE; + } + }; + + try { + Files.walkFileTree(p, fv); + } catch (IOException e) { + e.printStackTrace(); + } } + + if (FileUtilities.doesFileExist("scripts/static_spawns/" + planet.getName() + ".py")) { + //core.scriptService.callScript("scripts/static_spawns/", planet.getName(), "addPlanetSpawns", core, planet); + } + + System.out.println("Loaded static objects for " + planet.getName()); } - - spawnObjects("rori"); - spawnObjects("naboo"); - spawnObjects("tatooine"); - spawnObjects("lok"); - //spawnObjects("kaas"); // Keep commented out unless you possess the latest build of Kaas! - } - - public void spawnObjects(String planetName) { - Planet planet = (Planet) core.terrainService.getPlanetByName(planetName); - core.scriptService.callScript("scripts/static_spawns/", planet.getName(), "addPlanetSpawns", core, planet); - System.out.println("Loaded static objects for " + planet.getName()); } public SWGObject spawnObject(String template, String planetName, long cellId, float x, float y, float z, float qY, float qW) { return spawnObject(template, planetName, cellId, x, y, z, qW, 0, qY, 0); } - public SWGObject spawnObject(String template, String planetName, long cellId, float x, float y, float z, float qW, float qX, float qY, float qZ) { - return spawnObject(template, 0, planetName, cellId, x, y, z, qW, qX, qY, qZ); + public SWGObject spawnObject(String template, String planetName, SWGObject cell, float x, float y, float z, float qW, float qX, float qY, float qZ) { + return spawnObject(template, planetName, ((cell == null) ? 0L : cell.getObjectID()), x, y, z, qW, qX, qY, qZ); } - public SWGObject spawnObject(String template, long objectId, String planetName, long cellId, float x, float y, float z, float qW, float qX, float qY, float qZ) { + public SWGObject spawnObject(String template, String planetName, long cellId, float x, float y, float z, float qW, float qX, float qY, float qZ) { + return spawnObject(template, planetName, cellId, x, y, z, qW, qX, qY, qZ, -1); + } + + + public SWGObject spawnObject(String template, String planetName, long cellId, float x, float y, float z, float qW, float qX, float qY, float qZ, int respawnTime) { Planet planet = core.terrainService.getPlanetByName(planetName); if (planet == null) { - System.out.println("StaticService: Can't spawn static object because planet is null."); + System.err.println("StaticService: Can't spawn static object because planet is null."); return null; } - SWGObject object = core.objectService.createObject(template, objectId, planet, new Point3D(x, y, z), new Quaternion(qW, qX, qY, qZ)); + long buildingId = 0; + int cellNumber = 0; + + SWGObject cell = core.objectService.getObject(cellId); + + if (cell != null && cell.getContainer() != null && cell.getContainer() instanceof BuildingObject) { + buildingId = cell.getContainer().getObjectId(); + cellNumber = ((BuildingObject) cell.getContainer()).getCellNumberByObjectId(cellId); + } + + long objectId = core.objectService.getDOId(planetName, template, 0, buildingId, cellNumber, x, y, z); + + SWGObject object = null; + MobileTemplate mobileTemplate = core.spawnService.getMobileTemplate(template); + + if (mobileTemplate != null) { + if(respawnTime > 0) { + try { + MobileTemplate clone = (MobileTemplate) mobileTemplate.clone(); + object = core.spawnService.spawnCreature(template, objectId, planetName, cellId, x, y, z, qW, qX, qY, qZ, (short) -1); + clone.setRespawnTime(respawnTime); + ((AIActor) object.getAttachment("AI")).setMobileTemplate(clone); + } catch (CloneNotSupportedException e) { + e.printStackTrace(); + } + } else { + object = core.spawnService.spawnCreature(template, objectId, planetName, cellId, x, y, z, qW, qX, qY, qZ, (short) -1); + } + } else { + object = core.objectService.createObject(template, objectId, planet, new Point3D(x, y, z), new Quaternion(qW, qX, qY, qZ), null, true, true); + } if (object == null) { - System.out.println("Static object is null with id " + objectId + " and template " + template + "."); + System.err.println("Static object is null with id " + objectId + " and template " + template + "."); return null; } if (objectId != 0 && object.getObjectID() != objectId) { - System.out.println("StaticService: ObjectId " + objectId + " was taken for object with template " + object.getTemplate() + ". Replacement: " + object.getObjectID()); + System.err.println("StaticService: ObjectId " + objectId + " was taken for object with template " + object.getTemplate() + ". Replacement: " + object.getObjectID()); } - if (object instanceof CreatureObject) { - ((CreatureObject) object).setStaticNPC(true); + boolean checkCells = false; // shouldn't be needed; for debugging + + if (object instanceof BuildingObject && checkCells) { + BuildingObject building = (BuildingObject) object; + + Map attributes = building.getTemplateData().getAttributes(); + + if (building.getCells().size() == 0 && attributes.containsKey("portalLayoutFilename") && ((String) attributes.get("portalLayoutFilename")).length() > 0) { + String portalLayoutFilename = (String) attributes.get("portalLayoutFilename"); + + try { + PortalVisitor portal = ClientFileManager.loadFile(portalLayoutFilename, PortalVisitor.class); + + for (int i = 1; i <= portal.cellCount; i++) { + long cellObjectId = core.objectService.getDOId(planetName, "object/cell/shared_cell.iff", 0, object.getObjectID(), i, x, y, z); + CellObject childCell = (CellObject) core.objectService.createObject("object/cell/shared_cell.iff", cellObjectId, core.terrainService.getPlanetByName(planetName), new Point3D(0, 0, 0), new Quaternion(1, 0, 0, 0), null, true, true); + childCell.setCellNumber(i); + building.add(childCell); + } + } catch (InstantiationException | IllegalAccessException e) { + e.printStackTrace(); + } + } } if (cellId == 0) { - boolean add = core.simulationService.add(object, (float) x, (float) z, true); - - if (!add) { - System.out.println("StaticService: Quadtree insert failed for: " + template); + if (!core.simulationService.add(object, (float) x, (float) z, true)) { + System.err.println("StaticService: Quadtree insert failed for: " + template); } } else { - SWGObject parent = core.objectService.getObject(cellId); - - if (parent == null) { - System.out.println("StaticService: Cell not found"); + if (cell == null) { + System.err.println("StaticService: Cell not found for: " + template); return object; } - parent.add(object); + cell.add(object); } return object; @@ -128,8 +200,8 @@ public class StaticService implements INetworkDispatch { cloners.add(obj); } } - return cloners; + return cloners; } @Override diff --git a/src/services/SurveyService.java b/src/services/SurveyService.java index 39b75519..fddea8b1 100644 --- a/src/services/SurveyService.java +++ b/src/services/SurveyService.java @@ -174,7 +174,7 @@ public class SurveyService implements INetworkDispatch { containerObject.initializeStats(sampleResource); containerObject.setProprietor(crafter); SWGObject crafterInventory = crafter.getSlottedObject("inventory"); - container.setStackCount(stackCount,crafter); + containerObject.setStackCount(stackCount,crafter); crafterInventory.add(containerObject); player.setRecentContainer(containerObject); } @@ -338,7 +338,7 @@ public class SurveyService implements INetworkDispatch { if (crafter.getPosture()==13) return; // QA - if (crafter.getCombatFlag()!=0){ // QA + if (crafter.isInCombat()){ // QA crafter.sendSystemMessage("@survey:sample_cancel_attack", (byte) 0); return; } @@ -422,7 +422,7 @@ public class SurveyService implements INetworkDispatch { surveyTool.setCurrentlyCoolingDown(false); CreatureObject crafter = (CreatureObject) NGECore.getInstance().objectService.getObject(surveyTool.getUserID()); - PlayerObject player = (PlayerObject) crafter.getSlottedObject("ghost"); + if (crafter.getPosture()!=1){ crafter.sendSystemMessage("@survey:sample_cancel", (byte) 0); surveyTool.setExceptionalState(false); @@ -433,7 +433,7 @@ public class SurveyService implements INetworkDispatch { if (crafter.getPosture()==13) return; - if (crafter.getCombatFlag()!=0){ + if (crafter.isInCombat()){ crafter.sendSystemMessage("@survey:sample_cancel_attack", (byte) 0); return; } @@ -665,7 +665,6 @@ public class SurveyService implements INetworkDispatch { Vector returnList = new Vector(); returnList.add("List.lstList:SelectedRow"); - final SurveyTool outerSurveyTool = (SurveyTool)target; window.addHandler(0, "", Trigger.TRIGGER_OK, returnList, new SUICallback() { @Override diff --git a/src/services/ai/AIActor.java b/src/services/ai/AIActor.java index c34ed1fc..81db67c8 100644 --- a/src/services/ai/AIActor.java +++ b/src/services/ai/AIActor.java @@ -25,13 +25,16 @@ import java.util.Map; import java.util.Vector; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledFuture; import java.util.concurrent.TimeUnit; import main.NGECore; import net.engio.mbassy.listener.Handler; +import engine.clients.Client; import engine.resources.objects.SWGObject; import engine.resources.scene.Point3D; import engine.resources.scene.Quaternion; +import resources.datatables.Options; import resources.objects.cell.CellObject; import resources.objects.creature.CreatureObject; import resources.objects.tangible.TangibleObject; @@ -43,6 +46,7 @@ import services.ai.states.IdleState; import services.ai.states.RetreatState; import services.combat.CombatEvents.DamageTaken; import services.spawn.MobileTemplate; +import java.util.Random; public class AIActor { @@ -56,13 +60,39 @@ public class AIActor { private Map damageMap = new ConcurrentHashMap(); private volatile boolean hasReachedPosition; private long lastAttackTimestamp; - + private ScheduledFuture regenTask; + private ScheduledFuture aggroCheckTask; + private boolean isStalking = false; + private byte milkState = 0; + private boolean hasBeenHarvested = false; + public AIActor(CreatureObject creature, Point3D spawnPosition, ScheduledExecutorService scheduler) { this.creature = creature; this.spawnPosition = spawnPosition; this.scheduler = scheduler; creature.getEventBus().subscribe(this); this.currentState = new IdleState(); + regenTask = scheduler.scheduleAtFixedRate(() -> { + if(creature.getHealth() < creature.getMaxHealth() && !creature.isInCombat() && creature.getPosture() != 13 && creature.getPosture() != 14) + creature.setHealth(creature.getHealth() + (36 + creature.getLevel() * 4)); + }, 0, 1000, TimeUnit.MILLISECONDS); + if(creature.getOption(Options.AGGRESSIVE)) { + aggroCheckTask = scheduler.scheduleAtFixedRate(() -> { + if(creature == null || creature.getObservers().isEmpty() || creature.isInCombat() || isStalking) + return; + creature.getObservers().stream().map(Client::getParent).filter(obj -> obj.inRange(creature.getWorldPosition(), 10)).forEach((obj) -> { + if(new Random().nextFloat() <= 0.33 || creature.isInCombat() || isStalking) { + /*if(mobileTemplate.isStalker()) { + setFollowObject((CreatureObject) obj); + setCurrentState(new StalkState()); + } else */ + addDefender((CreatureObject) obj); + + } + }); + }, 0, 5000, TimeUnit.MILLISECONDS); + + } } public CreatureObject getCreature() { @@ -80,12 +110,25 @@ public class AIActor { public void setSpawnPosition(Point3D spawnPosition) { this.spawnPosition = spawnPosition; } - + public void addDefender(CreatureObject defender) { + addDefender(defender, false); + } + + + public void addDefender(CreatureObject defender, boolean isAssisting) { creature.addDefender(defender); if(followObject == null) setFollowObject(defender); setCurrentState(new AttackState()); + if(!isAssisting) { + NGECore.getInstance().simulationService.get(creature.getPlanet(), creature.getWorldPosition().x, creature.getWorldPosition().z, 30).stream().filter((obj) -> + obj instanceof CreatureObject && + obj.getAttachment("AI") != null && + ((AIActor) obj.getAttachment("AI")).getMobileTemplate().getSocialGroup().equals(getMobileTemplate().getSocialGroup()) && + obj.inRange(creature.getWorldPosition(), ((AIActor) obj.getAttachment("AI")).getMobileTemplate().getAssistRange()) + ).forEach((obj) -> ((AIActor) obj.getAttachment("AI")).addDefender(defender, true)); + } } public void removeDefender(CreatureObject defender) { @@ -229,7 +272,7 @@ public class AIActor { } public void doStateAction(byte result) { - + switch(result) { case StateResult.DEAD: @@ -249,6 +292,8 @@ public class AIActor { public void scheduleDespawn() { scheduler.schedule(() -> { + aggroCheckTask.cancel(true); + regenTask.cancel(true); damageMap.clear(); followObject = null; creature.setAttachment("AI", null); @@ -256,5 +301,45 @@ public class AIActor { }, 30000, TimeUnit.MILLISECONDS); } + + public ScheduledFuture getRegenTask() { + return regenTask; + } + + public void setRegenTask(ScheduledFuture regenTask) { + this.regenTask = regenTask; + } + + public boolean isStalking() { + return isStalking; + } + + public void setStalking(boolean isStalking) { + this.isStalking = isStalking; + } + + public byte getMilkState() { + synchronized(creature.getMutex()) { + return milkState; + } + } + + public void setMilkState(byte milkState) { + synchronized(creature.getMutex()) { + this.milkState = milkState; + } + } + + public boolean hasBeenHarvested() { + synchronized(creature.getMutex()) { + return hasBeenHarvested; + } + } + + public void setHasBeenHarvested(boolean hasBeenHarvested) { + synchronized(creature.getMutex()) { + this.hasBeenHarvested = hasBeenHarvested; + } + } } diff --git a/src/services/ai/LairActor.java b/src/services/ai/LairActor.java index 778de963..80472ef9 100644 --- a/src/services/ai/LairActor.java +++ b/src/services/ai/LairActor.java @@ -87,7 +87,7 @@ public class LairActor { return; int currentCondition = lairObject.getConditionDamage(); - int maxCondition = lairObject.getMaxDamage(); + int maxCondition = lairObject.getMaximumCondition(); switch(spawnWave) { // TODO: play damage effect @@ -146,7 +146,7 @@ public class LairActor { int healAmount = 0; for(AIActor ai : creatures) { - healAmount += lairObject.getMaxDamage() / 100; + healAmount += lairObject.getMaximumCondition() / 100; } lairObject.setConditionDamage(lairObject.getConditionDamage() - healAmount); diff --git a/src/services/ai/states/AttackState.java b/src/services/ai/states/AttackState.java index dbc0a54d..3b16a857 100644 --- a/src/services/ai/states/AttackState.java +++ b/src/services/ai/states/AttackState.java @@ -37,7 +37,7 @@ public class AttackState extends AIState { CreatureObject creature = actor.getCreature(); if(creature.getPosture() == 14) return StateResult.DEAD; - if(creature.getCombatFlag() == 0 || creature.getDefendersList().size() == 0 || actor.getFollowObject() == null) + if(!creature.isInCombat() || creature.getDefendersList().size() == 0 || actor.getFollowObject() == null) return StateResult.FINISHED; actor.scheduleMovement(); actor.scheduleRecovery(); @@ -115,7 +115,7 @@ public class AttackState extends AIState { NGECore core = NGECore.getInstance(); if(creature.getPosture() == 14) return StateResult.DEAD; - if(creature.getCombatFlag() == 0 || creature.getDefendersList().size() == 0 || actor.getFollowObject() == null) + if(!creature.isInCombat() || creature.getDefendersList().size() == 0 || actor.getFollowObject() == null) { creature.setLookAtTarget(0); creature.setIntendedTarget(0); diff --git a/src/services/ai/states/DeathState.java b/src/services/ai/states/DeathState.java index 3e9ea1a0..926d60f8 100644 --- a/src/services/ai/states/DeathState.java +++ b/src/services/ai/states/DeathState.java @@ -32,7 +32,8 @@ public class DeathState extends AIState { public byte onEnter(AIActor actor) { NGECore.getInstance().aiService.awardExperience(actor); actor.getCreature().setAttachment("radial_filename", "npc/corpse"); - NGECore.getInstance().lootService.DropLoot((CreatureObject)(actor.getCreature().getKiller()),(TangibleObject)(actor.getCreature())); + //NGECore.getInstance().scriptService.callScript("scripts/radial/npc/corpse", "", "createRadial", NGECore.getInstance(), actor.getCreature().getKiller(), actor.getCreature(), new Vector()); + NGECore.getInstance().lootService.DropLoot((CreatureObject)(actor.getCreature().getKiller()),(TangibleObject)(actor.getCreature())); actor.scheduleDespawn(); return 0; } diff --git a/src/resources/common/Cooldown.java b/src/services/ai/states/StalkState.java similarity index 58% rename from src/resources/common/Cooldown.java rename to src/services/ai/states/StalkState.java index 2c7e2240..b7d2384a 100644 --- a/src/resources/common/Cooldown.java +++ b/src/services/ai/states/StalkState.java @@ -19,42 +19,37 @@ * 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.common; +package services.ai.states; -import java.util.concurrent.ScheduledFuture; +import services.ai.AIActor; -public class Cooldown { - private long startTimestamp; - private long endTimestamp; - - private ScheduledFuture removalTask; +public class StalkState extends AIState { - public Cooldown(long end) { - startTimestamp = System.currentTimeMillis(); - endTimestamp = startTimestamp + end; + @Override + public byte onEnter(AIActor actor) throws Exception { + actor.setStalking(true); + return StateResult.UNFINISHED; } - public long getStartTimestamp() { - return startTimestamp; + @Override + public byte onExit(AIActor actor) throws Exception { + actor.setStalking(false); + return StateResult.UNFINISHED; } - public void setStartTimestamp(long startTimestamp) { - this.startTimestamp = startTimestamp; + @Override + public byte move(AIActor actor) throws Exception { + if(!actor.isStalking() || actor.getFollowObject() == null) + return StateResult.FINISHED; + return StateResult.UNFINISHED; + } - public long getEndTimestamp() { - return endTimestamp; + @Override + public byte recover(AIActor actor) throws Exception { + if(!actor.isStalking() || actor.getFollowObject() == null) + return StateResult.FINISHED; + return StateResult.UNFINISHED; } - public void setEndTimestamp(long endTimestamp) { - this.endTimestamp = endTimestamp; - } - - public ScheduledFuture getRemovalTask() { - return removalTask; - } - - public void setRemovalTask(ScheduledFuture removalTask) { - this.removalTask = removalTask; - } } diff --git a/src/services/bazaar/AuctionItem.java b/src/services/bazaar/AuctionItem.java index 92e1e41f..4e0d2fca 100644 --- a/src/services/bazaar/AuctionItem.java +++ b/src/services/bazaar/AuctionItem.java @@ -21,18 +21,18 @@ ******************************************************************************/ package services.bazaar; -import com.sleepycat.je.Environment; -import com.sleepycat.je.Transaction; +import java.io.Serializable; + import com.sleepycat.persist.model.Entity; -import com.sleepycat.persist.model.NotPersistent; import com.sleepycat.persist.model.PrimaryKey; -import engine.resources.objects.IPersistent; import engine.resources.objects.SWGObject; @Entity(version=1) -public class AuctionItem implements IPersistent, Comparable { +public class AuctionItem implements Comparable, Serializable { + private static final long serialVersionUID = 1L; + @PrimaryKey private long objectId; private SWGObject item; @@ -62,10 +62,7 @@ public class AuctionItem implements IPersistent, Comparable { public final static int EXPIRED = 4; public final static int OFFERED = 5; public final static int RETRIEVED = 6; - - @NotPersistent - private Transaction txn; - + public AuctionItem() { } @@ -256,16 +253,6 @@ public class AuctionItem implements IPersistent, Comparable { this.auctionOptions = auctionOptions; } - @Override - public void createTransaction(Environment env) { - txn = env.beginTransaction(null, null); - } - - @Override - public Transaction getTransaction() { - return txn; - } - public SWGObject getItem() { return item; } diff --git a/src/services/bazaar/BazaarService.java b/src/services/bazaar/BazaarService.java index 52f77554..dfd59f9f 100644 --- a/src/services/bazaar/BazaarService.java +++ b/src/services/bazaar/BazaarService.java @@ -22,22 +22,15 @@ package services.bazaar; import java.nio.ByteOrder; -import java.util.ArrayList; import java.util.Iterator; -import java.util.List; import java.util.Map; import java.util.Set; -import java.util.Vector; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentSkipListSet; -import java.util.function.BiFunction; -import java.util.function.Function; - -import com.sleepycat.je.Transaction; -import com.sleepycat.persist.EntityCursor; import main.NGECore; import engine.clients.Client; +import engine.resources.database.ODBCursor; import engine.resources.objects.SWGObject; import engine.resources.scene.Planet; import engine.resources.scene.Point3D; @@ -80,17 +73,24 @@ public class BazaarService implements INetworkDispatch { public BazaarService(NGECore core) { this.core = core; + core.commandService.registerCommand("createvendor"); loadAuctionItems(); - Runtime.getRuntime().addShutdownHook(new Thread(() -> { - System.out.println("Saving auction items..."); - auctionItems.forEach(item -> core.objectService.persistObject(item, Long.class, AuctionItem.class, core.getAuctionODB())); - })); + } + + public void saveAllItems() { + System.out.println("Saving auction items..."); + auctionItems.forEach(item -> core.objectService.persistObject(item.getObjectId(), item, core.getAuctionODB())); } private void loadAuctionItems() { - EntityCursor cursor = core.getAuctionODB().getCursor(Long.class, AuctionItem.class); - Iterator it = cursor.iterator(); - it.forEachRemaining(this::addAuctionItem); + ODBCursor cursor = core.getAuctionODB().getCursor(); + while(cursor.hasNext()) { + addAuctionItem((AuctionItem) cursor.next()); + } + auctionItems.stream().map(AuctionItem::getItem).forEach(obj -> { + obj.initAfterDBLoad(); + obj.viewChildren(obj, true, true, obj2 -> obj2.initAfterDBLoad()); + }); cursor.close(); } @@ -134,9 +134,11 @@ public class BazaarService implements INetworkDispatch { SWGObject terminal = core.objectService.getObject(terminalId); if(terminal == null) return; + int permission = 2; + if(terminal.getAttachment("isVendor") != null && (Boolean) terminal.getAttachment("isVendor")) + permission = (long) terminal.getAttachment("vendorOwner") == player.getObjectID() ? 0 : 1; Point3D pos = terminal.getWorldPosition(); - session.write(new IsVendorOwnerResponseMessage(2, 0, terminalId, getVendorUID((TangibleObject) terminal)).serialize()); - + session.write(new IsVendorOwnerResponseMessage(permission, 0, terminalId, getVendorUID((TangibleObject) terminal)).serialize()); }); @@ -412,7 +414,7 @@ public class BazaarService implements INetworkDispatch { if(seller == null) { seller = core.objectService.getCreatureFromDB(item.getOwnerId()); seller.setBankCredits(seller.getBankCredits() + item.getPrice()); - core.objectService.persistObject(seller, Long.class, CreatureObject.class, core.getAuctionODB()); + core.objectService.persistObject(seller.getObjectID(), seller, core.getSWGObjectODB()); } } @@ -471,6 +473,7 @@ public class BazaarService implements INetworkDispatch { else if(item.getItem() instanceof IntangibleObject) player.getSlottedObject("datapad").add(item.getItem()); + core.objectService.getObjectList().put(item.getObjectId(), item.getItem()); removeAuctionItem(item); player.getClient().getSession().write(response.serialize()); @@ -751,8 +754,8 @@ public class BazaarService implements INetworkDispatch { if(commodityLimit.get(auctionItem.getOwnerId()) != null) commodityNumber = commodityLimit.get(auctionItem.getOwnerId()); commodityLimit.put(auctionItem.getOwnerId(), commodityNumber + 1); - if(!core.getAuctionODB().contains(auctionItem.getObjectId(), Long.class, AuctionItem.class)) { - core.objectService.persistObject(auctionItem, Long.class, AuctionItem.class, core.getAuctionODB()); + if(!core.getAuctionODB().contains(auctionItem.getObjectId())) { + core.objectService.persistObject(auctionItem.getObjectId(), auctionItem, core.getAuctionODB()); } } @@ -762,7 +765,7 @@ public class BazaarService implements INetworkDispatch { if(commodityLimit.get(auctionItem.getOwnerId()) != null) commodityNumber = commodityLimit.get(auctionItem.getOwnerId()); commodityLimit.put(auctionItem.getOwnerId(), commodityNumber - 1); - core.objectService.deletePersistentObject(auctionItem, Long.class, AuctionItem.class, core.getAuctionODB(), auctionItem.getObjectId()); + core.objectService.deletePersistentObject(auctionItem.getObjectId(), core.getAuctionODB()); } } diff --git a/src/services/chat/ChatRoom.java b/src/services/chat/ChatRoom.java index 10f853c1..dd243d2d 100644 --- a/src/services/chat/ChatRoom.java +++ b/src/services/chat/ChatRoom.java @@ -21,15 +21,19 @@ ******************************************************************************/ package services.chat; +import java.io.Serializable; import java.util.Vector; + import com.sleepycat.persist.model.Entity; import com.sleepycat.persist.model.NotPersistent; import com.sleepycat.persist.model.PrimaryKey; @Entity(version=1) -public class ChatRoom { +public class ChatRoom implements Serializable { + + private static final long serialVersionUID = 1L; private String creator; // creator of the room (first name only, lowercase) private String description; // title @PrimaryKey @@ -39,7 +43,7 @@ public class ChatRoom { private Vector moderatorList = new Vector(); private Vector banList = new Vector(); @NotPersistent - private Vector userList = new Vector(); // current users + private transient Vector userList = new Vector(); // current users private boolean moderatorsOnly; private boolean privateRoom; diff --git a/src/services/chat/ChatService.java b/src/services/chat/ChatService.java index be4cbb43..251d125e 100644 --- a/src/services/chat/ChatService.java +++ b/src/services/chat/ChatService.java @@ -34,14 +34,12 @@ import java.util.concurrent.ConcurrentHashMap; import org.apache.mina.core.buffer.IoBuffer; import org.apache.mina.core.session.IoSession; -import com.sleepycat.je.Transaction; -import com.sleepycat.persist.EntityCursor; - import engine.clientdata.ClientFileManager; import engine.clientdata.visitors.DatatableVisitor; import engine.clients.Client; import engine.resources.config.Config; import engine.resources.config.DefaultConfig; +import engine.resources.database.ODBCursor; import engine.resources.database.ObjectDatabase; import engine.resources.objects.SWGObject; import engine.resources.scene.Planet; @@ -317,7 +315,7 @@ public class ChatService implements INetworkDispatch { return; SWGObject obj = client.getParent(); - Mail mail = mailODB.get(new Integer(packet.getMailId()), Integer.class, Mail.class); + Mail mail = (Mail) mailODB.get((long) packet.getMailId()); if(obj == null || mail == null) return; @@ -352,7 +350,7 @@ public class ChatService implements INetworkDispatch { return; SWGObject obj = client.getParent(); - Mail mail = mailODB.get(new Integer(packet.getMailId()), Integer.class, Mail.class); + Mail mail = (Mail) mailODB.get((long) packet.getMailId()); if(obj == null || mail == null) return; @@ -689,15 +687,11 @@ public class ChatService implements INetworkDispatch { public void storePersistentMessage(Mail mail) { - Transaction txn = mailODB.getEnvironment().beginTransaction(null, null); - mailODB.put(mail, Integer.class, Mail.class, txn); - txn.commitSync(); + mailODB.put((long) mail.getMailId(), mail); } public void deletePersistentMessage(Mail mail) { - Transaction txn = mailODB.getEnvironment().beginTransaction(null, null); - mailODB.delete(new Integer(mail.getMailId()), Integer.class, Mail.class, txn); - txn.commitSync(); + mailODB.remove((long) mail.getMailId()); } public void loadMailHeaders(Client client) { @@ -707,14 +701,18 @@ public class ChatService implements INetworkDispatch { if(obj == null || client.getSession() == null) return; - EntityCursor cursor = mailODB.getCursor(Integer.class, Mail.class); + ODBCursor cursor = mailODB.getCursor(); - for(Mail mail : cursor) { - + while(cursor.hasNext()) { + Mail mail = (Mail) cursor.next(); + if(mail == null) + continue; if(mail.getRecieverId() == obj.getObjectID()) { sendPersistentMessageHeader(client, mail); } + } + cursor.close(); } @@ -747,7 +745,7 @@ public class ChatService implements INetworkDispatch { int id = rand.nextInt(); - if(mailODB.contains(new Integer(id), Integer.class, Mail.class)) + if(mailODB.contains((long) id)) return generateMailId(); else return id; @@ -755,7 +753,7 @@ public class ChatService implements INetworkDispatch { public Mail getMailById(int mailId) { - Mail mail = mailODB.get(new Integer(mailId), Integer.class, Mail.class); + Mail mail = (Mail) mailODB.get((long) mailId); return mail; } @@ -776,7 +774,7 @@ public class ChatService implements INetworkDispatch { Random rand = new Random(); int id = rand.nextInt(); - if (chatRoomsODB.contains(new Integer(id), Integer.class, ChatRoom.class)) + if (chatRoomsODB.contains((long) id)) return generateChatRoomId(); else return id; @@ -819,11 +817,13 @@ public class ChatService implements INetworkDispatch { createChatRoom("Politician chat for this galaxy", "Politician", "system", true); //createChatRoom("Pilot chat for this galaxy", "Pilot", "system", true); - EntityCursor cursor = chatRoomsODB.getCursor(Integer.class, ChatRoom.class); - cursor.forEach(room -> { + ODBCursor cursor = chatRoomsODB.getCursor(); + + while(cursor.hasNext()) { + ChatRoom room = (ChatRoom) cursor.next(); if (!chatRooms.containsValue(room)) chatRooms.put(room.getRoomId(), room); - }); + } cursor.close(); List planets = core.terrainService.getPlanetList(); @@ -891,9 +891,7 @@ public class ChatService implements INetworkDispatch { chatRooms.put(room.getRoomId(), room); if(store){ - Transaction txn = chatRoomsODB.getEnvironment().beginTransaction(null, null); - chatRoomsODB.put(room, Integer.class, ChatRoom.class, txn); - txn.commitSync(); + chatRoomsODB.put((long) room.getRoomId(), room); } //Console.println("Created room " + address + " with ID " + room.getRoomId()); @@ -943,6 +941,7 @@ public class ChatService implements INetworkDispatch { } room.addUser(user.toLowerCase()); + ((CreatureObject) player).getPlayerObject().addChannel(roomId); return true; } return false; @@ -1003,10 +1002,6 @@ public class ChatService implements INetworkDispatch { }); } - public void handleGroupChat(SWGObject sender, String message) { - - } - public ConcurrentHashMap getChatRooms() { return chatRooms; } diff --git a/src/services/chat/Mail.java b/src/services/chat/Mail.java index 5709a059..48166af5 100644 --- a/src/services/chat/Mail.java +++ b/src/services/chat/Mail.java @@ -21,13 +21,18 @@ ******************************************************************************/ package services.chat; +import java.io.Serializable; +import java.util.ArrayList; import java.util.List; + import com.sleepycat.persist.model.Entity; import com.sleepycat.persist.model.PrimaryKey; @Entity(version=1) -public class Mail { +public class Mail implements Serializable { + private static final long serialVersionUID = 1L; + @PrimaryKey private int mailId; private String senderName; @@ -36,7 +41,7 @@ public class Mail { private String message; private byte status; private int timeStamp; - private List attachments; + private List attachments = new ArrayList(); public static final byte NEW = 0x4E; public static final byte READ = 0x52; diff --git a/src/services/chat/WaypointAttachment.java b/src/services/chat/WaypointAttachment.java index 314cb08f..1a3c2d84 100644 --- a/src/services/chat/WaypointAttachment.java +++ b/src/services/chat/WaypointAttachment.java @@ -21,11 +21,15 @@ ******************************************************************************/ package services.chat; +import java.io.Serializable; + import com.sleepycat.persist.model.Persistent; @Persistent -public class WaypointAttachment { +public class WaypointAttachment implements Serializable { + private static final long serialVersionUID = 1L; + public WaypointAttachment() { } public long cellID; diff --git a/src/services/collections/CollectionService.java b/src/services/collections/CollectionService.java index 4342ff12..8c5a4eaa 100644 --- a/src/services/collections/CollectionService.java +++ b/src/services/collections/CollectionService.java @@ -36,7 +36,9 @@ import resources.objects.creature.CreatureObject; import resources.objects.player.PlayerObject; import main.NGECore; import engine.clientdata.ClientFileManager; +import engine.clientdata.StfTable; import engine.clientdata.visitors.DatatableVisitor; +import engine.resources.common.Stf; import engine.resources.scene.Point3D; import engine.resources.service.INetworkDispatch; import engine.resources.service.INetworkRemoteEvent; @@ -142,7 +144,7 @@ public class CollectionService implements INetworkDispatch { int bits = 0; boolean noScriptOnModify = false; boolean clearOnComplete = false; - boolean noMessage = true; + boolean noMessage = false; boolean grantIfPreReqMet = true; boolean buddyCollection = false; int numAltTitles = 0; @@ -308,13 +310,21 @@ public class CollectionService implements INetworkDispatch { collections.set(beginSlotId); } - player.setCollections(collections.toByteArray()); - - if (!hidden && !noMessage) { - creature.sendSystemMessage(OutOfBand.ProsePackage("@collection_n:" + collection), DisplayType.Broadcast); + if (hidden && !(getCollection(creature, collectionName) > 0)) { + creature.sendSystemMessage(OutOfBand.ProsePackage("@collection:player_hidden_slot_added", "TO", new Stf("@collection_n:" + collectionName).getStfValue()), DisplayType.Broadcast); } - if (!music.equals("")) { + player.setCollections(collections.toByteArray()); + + if (!noMessage) { + if (!bookName.equals("crafting_book")) { + creature.sendSystemMessage(OutOfBand.ProsePackage("@collection:player_slot_added", "TU", new Stf("@collection_n:" + slotName).getStfValue(), "TO", new Stf("@collection_n:" + collectionName).getStfValue()), DisplayType.Broadcast); + } else { + creature.sendSystemMessage(OutOfBand.ProsePackage("@collection:player_slot_increment", "TU", new Stf("@collection_n:" + slotName).getStfValue(), "TO", new Stf("@collection_n:" + collectionName).getStfValue()), DisplayType.Broadcast); + } + } + + if (!music.equals("") && !music.equalsIgnoreCase("none")) { creature.playMusic(music); } @@ -346,8 +356,80 @@ public class CollectionService implements INetworkDispatch { } } - if (!isComplete(creature, collectionName)) { + if (isComplete(creature, collectionName)) { + creature.sendSystemMessage(OutOfBand.ProsePackage("@collection:player_collection_complete", "TO", new Stf("@collection_n:" + collectionName).getStfValue()), DisplayType.Broadcast); + if (!noReward) { + try { + StfTable stf = new StfTable("clientdata/string/en/collection_reward.stf"); + + for (int s = 1; s < stf.getRowCount(); s++) { + String key = stf.getStringById(s).getKey(); + + if (key != null && key.equals(collectionName)) { + String reward = stf.getStringById(s).getValue(); + + if (reward != null && reward.length() > 0) { + int xp = 0; + + // Give experience + + try { + DatatableVisitor experienceTable = ClientFileManager.loadFile("datatables/player/player_level.iff", DatatableVisitor.class); + + for (int i = 0; i < experienceTable.getRowCount(); i++) { + if (experienceTable.getObject(i, 0) != null) { + if (creature.getLevel() == (Integer) experienceTable.getObject(i, 0)) { + int nextLevelRequiredXp = (Integer) experienceTable.getObject((i + 1), 1); + int currentLevelRequiredXp = (Integer) experienceTable.getObject(i, 1); + xp = nextLevelRequiredXp - currentLevelRequiredXp; + } + } + } + } catch (Exception e) { + e.printStackTrace(); + } + + if (reward.contains("small amount of XP")) { + xp = 10 / 100 * xp; + } else if (reward.contains("medium amount of XP")) { + xp = 20 / 100 * xp; + } else if (reward.contains("large amount of XP")) { + xp = 30 / 100 * xp; + } else if (reward.contains("Space XP")) { + // TODO calculate space XP + } else if (reward.contains("XP")) { + String[] array = reward.split(" "); + + for (int i = 0; i < array.length; i++) { + if (array[i].equals("XP")) { + if (i == 0) { + xp = 20 / 100 * xp; + } else { + try { + xp = Integer.parseInt(array[i - 1]); + } catch (NumberFormatException e) { + xp = 20 / 100 * xp; + } + } + } + } + } + + if (xp > 0) { + if (key.contains("space")) { + // TODO add XP to space (not currently implemented) + } else { + core.playerService.giveExperience(creature, xp); + } + } + } + } + } + } catch (Exception e) { + e.printStackTrace(); + } + if (FileUtilities.doesFileExist("scripts/collections/" + collectionName + ".py")) { PyObject method = core.scriptService.getMethod("scripts/collections/", collectionName, "complete"); @@ -364,6 +446,7 @@ public class CollectionService implements INetworkDispatch { if (trackServerFirst) { if (core.guildService.getGuildObject().addServerFirst(collectionName, new ServerFirst(creature.getCustomName(), creature.getObjectId(), collectionName, System.currentTimeMillis()))) { addCollection(creature, "bdg_server_first_01"); + creature.sendSystemMessage(OutOfBand.ProsePackage("@collection:player_server_first", "TT", core.getGalaxyName(), "TO", new Stf("@collection_n:" + collectionName).getStfValue()), DisplayType.Broadcast); } } @@ -735,6 +818,10 @@ public class CollectionService implements INetworkDispatch { player.getTitleList().remove(slotName); } + if (collection.equals(collectionName)) { + creature.sendSystemMessage(OutOfBand.ProsePackage("@collection:player_collection_reset", "TO", new Stf("@collection_n:" + collectionName).getStfValue()), DisplayType.Broadcast); + } + continue; } } diff --git a/src/services/collections/ServerFirst.java b/src/services/collections/ServerFirst.java index 2b855fb4..3bbf0adc 100644 --- a/src/services/collections/ServerFirst.java +++ b/src/services/collections/ServerFirst.java @@ -21,15 +21,19 @@ ******************************************************************************/ package services.collections; -import org.apache.mina.core.buffer.IoBuffer; +import java.io.Serializable; -import resources.objects.Delta; +import org.apache.mina.core.buffer.IoBuffer; import com.sleepycat.persist.model.Persistent; +import engine.resources.objects.Delta; + @Persistent -public class ServerFirst extends Delta { +public class ServerFirst extends Delta implements Serializable { + private static final long serialVersionUID = 1L; + private String name; private String collection; private long time; diff --git a/src/services/combat/CombatService.java b/src/services/combat/CombatService.java index 1a265c8c..0db0d0e2 100644 --- a/src/services/combat/CombatService.java +++ b/src/services/combat/CombatService.java @@ -40,14 +40,18 @@ import protocol.swg.objectControllerObjects.CombatAction; import protocol.swg.objectControllerObjects.CombatSpam; import protocol.swg.objectControllerObjects.CommandEnqueueRemove; import protocol.swg.objectControllerObjects.StartTask; +import resources.buffs.Buff; +import resources.buffs.DamageOverTime; import resources.common.FileUtilities; +import resources.common.OutOfBand; +import resources.common.ProsePackage; +import resources.datatables.DisplayType; import resources.datatables.Options; import resources.datatables.Elemental; import resources.datatables.Posture; import resources.datatables.WeaponType; -import resources.objects.Buff; -import resources.objects.DamageOverTime; import resources.objects.creature.CreatureObject; +import resources.objects.mission.MissionObject; import resources.objects.player.PlayerObject; import resources.objects.tangible.TangibleObject; import resources.objects.waypoint.WaypointObject; @@ -201,7 +205,7 @@ public class CombatService implements INetworkDispatch { } else if(target instanceof TangibleObject) { - if(target.getConditionDamage() == target.getMaxDamage()) + if(target.getConditionDamage() == target.getMaximumCondition()) { for(TangibleObject defender : target.getDefendersList()) defender.removeDefender(target); core.objectService.destroyObject(target); @@ -292,6 +296,8 @@ public class CombatService implements INetworkDispatch { event.attacker = attacker; event.damage = damage; target.getEventBus().publish(event); + + attacker.setTefTime(300000); } private void doAreaCombat(CreatureObject attacker, CreatureObject target, WeaponObject weapon, CombatCommand command, int actionCounter) { @@ -503,7 +509,27 @@ public class CombatService implements INetworkDispatch { } private boolean attemptCombat(CreatureObject attacker, TangibleObject target) { - + + if (attacker.isInStealth()) { + attacker.setInStealth(false); + + if (attacker.getPlayerObject() != null && attacker.getPlayerObject().getProfession().equals("spy_1a")) { + attacker.setRadarVisible(true); + } + } + + if (attacker.getSlottedObject("ghost") != null) { + PlayerObject ghost = attacker.getPlayerObject(); + if (ghost.getBountyMissionId() != 0) { + MissionObject mission = (MissionObject) core.objectService.getObject(ghost.getBountyMissionId()); + if (mission != null && mission.getBountyMarkId() == target.getObjectID()) { + target.addDefender(attacker); + + target.updatePvpStatus(); + } + } + } + if(target.getDefendersList().contains(attacker) && attacker.getDefendersList().contains(target)) return true; @@ -523,7 +549,7 @@ public class CombatService implements INetworkDispatch { } else { attacker.addDefender(target); // See below comment } - + //attacker.addDefender(target); // Why do we need to add target to defender list twice? return true; @@ -777,10 +803,12 @@ public class CombatService implements INetworkDispatch { } synchronized(target.getMutex()) { + if(core.mountService.isMounted(target)) core.mountService.dismount(target, (CreatureObject) target.getContainer()); + target.setHealth(1); target.setPosture((byte) 13); target.setTurnRadius(0); - target.setSpeedMultiplierBase(0); + target.setSpeedMultiplierBase(0); } ScheduledFuture incapTask = scheduler.schedule(() -> { @@ -798,8 +826,10 @@ public class CombatService implements INetworkDispatch { }, target.getIncapTimer(), TimeUnit.SECONDS); target.setIncapTask(incapTask); core.buffService.addBuffToCreature(target, "incapWeaken", target); - if(target.getSlottedObject("ghost") != null) - attacker.sendSystemMessage("You incapacitate " + target.getCustomName() + ".", (byte) 0); + if(target.getSlottedObject("ghost") != null && attacker.getSlottedObject("ghost") != null) { + target.sendSystemMessage(new OutOfBand(new ProsePackage("base_player", "prose_victim_incap", attacker.getCustomName())), (byte) 0); + attacker.sendSystemMessage(new OutOfBand(new ProsePackage("base_player", "prose_target_incap", target.getCustomName())), (byte) 0); + } else {target.sendSystemMessage(new OutOfBand(new ProsePackage("base_player", "prose_victim_incap", "@" + attacker.getStfFilename() + ":" + attacker.getStfName())), (byte) 0); } return; } else if(target.getHealth() - damage <= 0 && target.getAttachment("AI") != null) { synchronized(target.getMutex()) { @@ -977,18 +1007,66 @@ public class CombatService implements INetworkDispatch { } public void deathblowPlayer(CreatureObject attacker, CreatureObject target) { - target.stopIncapTask(); target.setIncapTask(null); target.setPosture((byte) 14); - attacker.sendSystemMessage("You have killed " + target.getCustomName() + ".", (byte) 0); - target.sendSystemMessage("@base_player:victim_dead", (byte) 0); + + if (target.getSlottedObject("ghost") != null && attacker.getSlottedObject("ghost") != null) { + boolean bountyWindow = true; + + if (attacker.getPlayerObject().getBountyMissionId() != 0) { // Bounty Hunter is deathblowing (attacker) + bountyWindow = false; + MissionObject mission = (MissionObject) core.objectService.getObject(attacker.getPlayerObject().getBountyMissionId()); + + if (mission != null && mission.getBountyMarkId() == target.getObjectID()) { + + ProsePackage attackerPp = new ProsePackage("bounty_hunter", "bounty_success_hunter", target.getCustomName()); + attackerPp.setToCustomString("his"); // TODO: Genders + attackerPp.setDiInteger(mission.getCreditReward()); + attacker.sendSystemMessage(new OutOfBand(attackerPp), DisplayType.Broadcast); + + ProsePackage targetPp = new ProsePackage ("bounty_hunter", "bounty_success_hunter", attacker.getCustomName()); + targetPp.setDiInteger(mission.getCreditReward()); + target.sendSystemMessage(new OutOfBand(targetPp), DisplayType.Broadcast); + + core.missionService.handleMissionComplete(attacker, mission); + } + + } else if (target.getPlayerObject().getBountyMissionId() != 0) { // Bounty Hunter is being deathblown (They're the target) + bountyWindow = false; + MissionObject mission = (MissionObject) core.objectService.getObject(target.getPlayerObject().getBountyMissionId()); + + if (mission != null && mission.getBountyMarkId() == attacker.getObjectID()) { + + ProsePackage attackerPp = new ProsePackage("bounty_hunter", "bounty_failed_target", target.getCustomName()); + attackerPp.setToCustomString("his"); // TODO: Genders + attackerPp.setDiInteger(mission.getCreditReward()); + attacker.sendSystemMessage(new OutOfBand(attackerPp), DisplayType.Broadcast); + + ProsePackage targetPp = new ProsePackage ("bounty_hunter", "bounty_failed_hunter", attacker.getCustomName()); + target.sendSystemMessage(new OutOfBand(targetPp), DisplayType.Broadcast); + + core.missionService.handleMissionAbort(target, mission); + } + + } + + if(target.getDuelList().contains(attacker)) + bountyWindow = false; + handleEndDuel(target, attacker, false); + + if (bountyWindow) core.playerService.sendSetBountyWindow(target, attacker); + } else { attacker.sendSystemMessage("You have killed " + target.getCustomName() + ".", (byte) 0); } + attacker.removeDefender(target); target.removeDefender(attacker); target.setSpeedMultiplierBase(0); target.setTurnRadius(0); - if(target.getDuelList().contains(attacker)) handleEndDuel(target, attacker, false); + if (attacker.getSlottedObject("ghost") != null) + target.sendSystemMessage(new OutOfBand(new ProsePackage("base_player", "prose_victim_dead", attacker.getCustomName())), (byte) 0); + else + target.sendSystemMessage(new OutOfBand(new ProsePackage("base_player", "prose_victim_dead", "@" + attacker.getStfFilename() + ":" + attacker.getStfName())), (byte) 0); core.playerService.sendCloningWindow(target, attacker.getSlottedObject("ghost") != null); } diff --git a/src/services/command/BaseSWGCommand.java b/src/services/command/BaseSWGCommand.java index 9c2d639f..8ea09061 100644 --- a/src/services/command/BaseSWGCommand.java +++ b/src/services/command/BaseSWGCommand.java @@ -214,9 +214,9 @@ public class BaseSWGCommand implements Cloneable { this.commandCRC = commandCRC; } - public Object clone() throws CloneNotSupportedException { - return super.clone(); - } + public Object clone() throws CloneNotSupportedException { + return super.clone(); + } public boolean isGmCommand() { return (godLevel > 0); diff --git a/src/services/command/CommandService.java b/src/services/command/CommandService.java index cf14b35a..9435a0ea 100644 --- a/src/services/command/CommandService.java +++ b/src/services/command/CommandService.java @@ -38,6 +38,7 @@ import engine.clientdata.ClientFileManager; import engine.clientdata.visitors.DatatableVisitor; import engine.clients.Client; import engine.resources.common.CRC; +import engine.resources.common.RGB; import engine.resources.objects.SWGObject; import engine.resources.scene.Point3D; import engine.resources.service.INetworkDispatch; @@ -47,6 +48,7 @@ import protocol.swg.ObjControllerMessage; import protocol.swg.objectControllerObjects.CommandEnqueue; import protocol.swg.objectControllerObjects.CommandEnqueueRemove; import protocol.swg.objectControllerObjects.StartTask; +import resources.objects.cell.CellObject; import resources.objects.creature.CreatureObject; import resources.objects.tangible.TangibleObject; import resources.objects.weapon.WeaponObject; @@ -55,7 +57,7 @@ public class CommandService implements INetworkDispatch { private Vector commandLookup = new Vector(); private ConcurrentHashMap aliases = new ConcurrentHashMap(); - private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); + @SuppressWarnings("unused") private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); private NGECore core; public CommandService(NGECore core) { @@ -91,9 +93,9 @@ public class CommandService implements INetworkDispatch { return false; } - WeaponObject weapon = (WeaponObject) core.objectService.getObject(actor.getWeaponId()); + TangibleObject weapon = (TangibleObject) core.objectService.getObject(actor.getWeaponId()); - if (weapon != null && weapon.getWeaponType() == command.getInvalidWeapon()) { + if (weapon != null && weapon instanceof WeaponObject && ((WeaponObject) weapon).getWeaponType() == command.getInvalidWeapon()) { return false; } @@ -141,6 +143,11 @@ public class CommandService implements INetworkDispatch { return false; } + + if (!target.isInQuadtree() && (target.getContainer() == null || !(target.getContainer() instanceof CellObject))) { + break; + } + if (!core.simulationService.checkLineOfSight(actor, target)) { actor.showFlyText("@combat_effects:cant_see", 1.5f, new RGB(72, 209, 204), 1, true); return false; @@ -157,6 +164,11 @@ public class CommandService implements INetworkDispatch { if (target == actor) { target = null; } + + // It's possible they use c cmdString to indicate if it should always be on self + if (name.contains("c")) { + //target = actor; + } } break; @@ -170,6 +182,10 @@ public class CommandService implements INetworkDispatch { return false; } + if (!target.isInQuadtree() && (target.getContainer() == null || !(target.getContainer() instanceof CellObject))) { + break; + } + if (!core.simulationService.checkLineOfSight(actor, target)) { actor.showFlyText("@combat_effects:cant_see", 1.5f, new RGB(72, 209, 204), 1, true); return false; @@ -218,6 +234,10 @@ public class CommandService implements INetworkDispatch { return false; } + if (!target.isInQuadtree() && (target.getContainer() == null || !(target.getContainer() instanceof CellObject))) { + break; + } + if (!core.simulationService.checkLineOfSight(actor, target)) { actor.showFlyText("@combat_effects:cant_see", 1.5f, new RGB(72, 209, 204), 1, true); return false; @@ -537,6 +557,7 @@ public class CommandService implements INetworkDispatch { } @Override + @SuppressWarnings("unused") public void insertOpcodes(Map swgOpcodes, Map objControllerOpcodes) { objControllerOpcodes.put(ObjControllerOpcodes.COMMAND_QUEUE_ENQUEUE, new INetworkRemoteEvent() { diff --git a/src/services/equipment/BonusSetTemplate.java b/src/services/equipment/BonusSetTemplate.java index cee74c84..f712c290 100644 --- a/src/services/equipment/BonusSetTemplate.java +++ b/src/services/equipment/BonusSetTemplate.java @@ -55,8 +55,11 @@ public class BonusSetTemplate public int getWornTemplateCount(CreatureObject creature) { int wornItems = 0; - for (SWGObject item : creature.getEquipmentList().get()) + for (Long itemId : creature.getEquipmentList().get()) { + SWGObject item = NGECore.getInstance().objectService.getObject(itemId); + if(item == null) + continue; if(requiredWornItems.contains(item.getTemplate()) || requiredWornItems.contains(item.getStfName())) wornItems++; } return wornItems; diff --git a/src/services/gcw/FactionService.java b/src/services/gcw/FactionService.java index 4148f969..c5bafb16 100644 --- a/src/services/gcw/FactionService.java +++ b/src/services/gcw/FactionService.java @@ -24,6 +24,10 @@ package services.gcw; import java.util.Map; import java.util.Map.Entry; import java.util.TreeMap; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicReference; import main.NGECore; @@ -33,15 +37,16 @@ import org.python.core.Py; import org.python.core.PyObject; import protocol.swg.FactionResponseMessage; - import resources.common.FileUtilities; import resources.common.Opcodes; +import resources.datatables.DisplayType; import resources.datatables.FactionStatus; +import resources.datatables.Options; import resources.datatables.PvpStatus; import resources.objects.creature.CreatureObject; +import resources.objects.mission.MissionObject; import resources.objects.player.PlayerObject; import resources.objects.tangible.TangibleObject; - import engine.clientdata.StfTable; import engine.clients.Client; import engine.resources.common.CRC; @@ -54,6 +59,8 @@ public class FactionService implements INetworkDispatch { private Map factionMap = new TreeMap(); + private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); + public FactionService(NGECore core) { this.core = core; @@ -122,6 +129,26 @@ public class FactionService implements INetworkDispatch { player.modifyFactionStanding(faction, -factionStanding); } + public void delegateFactionPoints(CreatureObject actor, CreatureObject target, String faction, int points) { + if (actor == null || actor.getSlottedObject("ghost") == null) { + return; + } + + if (target == null || actor.getSlottedObject("ghost") == null) { + return; + } + + if (!isFaction(faction)) { + return; + } + + if (points <= 0) { + return; + } + + + } + public boolean isFaction(String faction) { if (factionMap.containsKey(faction)) { return true; @@ -131,27 +158,27 @@ public class FactionService implements INetworkDispatch { } /* - * Returns true if creature2 is an ally of creature1 + * Returns true if target is an ally of object * * Will be useful for NPC AI, so they know who to help and who to be indifferent to. */ - public boolean isFactionAlly(CreatureObject creature1, CreatureObject creature2) { - if (creature1 == null || creature2 == null) { + public boolean isFactionAlly(TangibleObject object, TangibleObject target) { + if (object == null || target == null) { return false; } - String faction1 = creature1.getFaction(); - String faction2 = creature2.getFaction(); + String objectFaction = object.getFaction(); + String targetFaction = target.getFaction(); - if (!isFaction(faction1) || !isFaction(faction2)) { + if (!isFaction(objectFaction) || !isFaction(targetFaction)) { return false; } - if (FileUtilities.doesFileExist("scripts/faction/" + faction1 + ".py")) { - PyObject method = core.scriptService.getMethod("scripts/faction/", faction1, "isAlly"); + if (FileUtilities.doesFileExist("scripts/faction/" + objectFaction + ".py")) { + PyObject method = core.scriptService.getMethod("scripts/faction/", objectFaction, "isAlly"); if (method != null && method.isCallable()) { - return ((method.__call__(Py.java2py(faction2)).asInt() == 1) ? true : false); + return ((method.__call__(Py.java2py(targetFaction)).asInt() == 1) ? true : false); } } @@ -159,27 +186,27 @@ public class FactionService implements INetworkDispatch { } /* - * Returns true if creature2 is an enemy of creature1 + * Returns true if target is an enemy of object * * Will be useful for NPC AI, so they know who to attack and who to be indifferent to. */ - public boolean isFactionEnemy(CreatureObject creature1, CreatureObject creature2) { - if (creature1 == null || creature2 == null) { + public boolean isFactionEnemy(TangibleObject object, TangibleObject target) { + if (object == null || target == null) { return false; } - String faction1 = creature1.getFaction(); - String faction2 = creature2.getFaction(); + String objectFaction = object.getFaction(); + String targetFaction = target.getFaction(); - if (!isFaction(faction1) || !isFaction(faction2)) { + if (!isFaction(objectFaction) || !isFaction(targetFaction)) { return false; } - if (FileUtilities.doesFileExist("scripts/faction/" + faction1 + ".py")) { - PyObject method = core.scriptService.getMethod("scripts/faction/", faction1, "isEnemy"); + if (FileUtilities.doesFileExist("scripts/faction/" + objectFaction + ".py")) { + PyObject method = core.scriptService.getMethod("scripts/faction/", objectFaction, "isEnemy"); if (method != null && method.isCallable()) { - return ((method.__call__(Py.java2py(faction2)).asInt() == 1) ? true : false); + return ((method.__call__(Py.java2py(targetFaction)).asInt() == 1) ? true : false); } } @@ -196,66 +223,137 @@ public class FactionService implements INetworkDispatch { * * This should be used instead of getPvPBitmask where possible, but * should not be used in setPvPBitmask. + * + * *** Updated this so it calculates if even a tangible object + * should see something as attackable (so it works for npcs and turrets). + * + * Also takes into account bounty targets and if it's a pet. */ - /*public int calculatePvpStatus(CreatureObject player, TangibleObject target) { - PlayerObject ghost = (PlayerObject) player.getSlottedObject("ghost"); + public int calculatePvpStatus(TangibleObject object, TangibleObject target) { + PlayerObject ghost = (PlayerObject) object.getSlottedObject("ghost"); - int pvpBitmask = target.getPvPBitmask(); + int pvpBitmask = 0; - // Seefo: Casting target to type CreatureObject as temporary fix. I am unsure whether or not we want to put a factionStatus member inside of TangibleObject. - if (((CreatureObject) target).getFactionStatus() == FactionStatus.Combatant) { - pvpBitmask |= PvpStatus.Enemy; - } - - if (((CreatureObject) target).getFactionStatus() == FactionStatus.SpecialForces) { - pvpBitmask |= PvpStatus.Overt; - - if (target.getSlottedObject("ghost") != null) { - pvpBitmask |= PvpStatus.Enemy; - } + if (object == target) { + pvpBitmask |= PvpStatus.Self; } if (target.getSlottedObject("ghost") != null) { pvpBitmask |= PvpStatus.Player; - - if ((!player.getFaction().equals(target.getFaction()) && - player.getFactionStatus() == FactionStatus.SpecialForces && - ((CreatureObject) target).getFactionStatus() == FactionStatus.SpecialForces) || - core.combatService.areInDuel(player, (CreatureObject) target)) { - pvpBitmask |= (PvpStatus.Attackable | PvpStatus.Aggressive); - } - - if (core.combatService.areInDuel(player, (CreatureObject) target)) { - //pvpBitmask |= PvpStatus.Dueling; - } - + } + + if (target instanceof CreatureObject && ((CreatureObject) target).getOwnerId() > 0) { + target = (TangibleObject) core.objectService.getObject(((CreatureObject) target).getOwnerId()); + } + + if ((target.getPvpBitmask() & PvpStatus.GoingCovert) == PvpStatus.GoingCovert) { + pvpBitmask |= PvpStatus.GoingCovert; + } + + if ((target.getPvpBitmask() & PvpStatus.GoingOvert) == PvpStatus.GoingOvert) { + pvpBitmask |= PvpStatus.GoingOvert; + } + + if (target.getFactionStatus() == FactionStatus.SpecialForces) { + pvpBitmask |= PvpStatus.Overt; + } + + // Everything below assumes target is potentially attackable. + if (!target.getOption(Options.ATTACKABLE) || target.getOption(Options.INVULNERABLE)) { return pvpBitmask; } - if (player.getFaction().equals(target.getFaction())) { + if (ghost != null && target.getSlottedObject("ghost") != null && + core.combatService.areInDuel((CreatureObject) object, (CreatureObject) target)) { + pvpBitmask |= (PvpStatus.Attackable | PvpStatus.Aggressive); + } + + if (object.getDefendersList().contains(target)) { + pvpBitmask |= (PvpStatus.Attackable | PvpStatus.Aggressive); + } + + AtomicReference ref = new AtomicReference(0); + + long targetId = target.getObjectID(); + + if (ghost != null && ghost.getBountyMissionId() != 0) { + if (((MissionObject) core.objectService.getObject(ghost.getBountyMissionId())).getBountyMarkId() == targetId) { + ref.set(PvpStatus.Attackable | PvpStatus.Aggressive); + } + } + + /*if (ghost != null && ghost.getProfession().contains("smuggler") && + target.getSlottedObject("datapad") != null) { + target.getSlottedObject("datapad").viewChildren(target, false, false, (mission) -> { + if (mission instanceof MissionObject && ((MissionObject) mission).getBountyMarkId() == object.getObjectID()) { + ref.set(PvpStatus.Attackable); + } + }); + }*/ + + pvpBitmask |= ref.get(); + + if (target instanceof CreatureObject && ((CreatureObject) target).getTefTime() > 0) { + //pvpBitmask |= PvpStatus.TEF; + } + + if (target.getFaction().length() > 0 && target.getFaction().equals(object.getFaction())) { return pvpBitmask; } - if (target.getOption(Options.ATTACKABLE)) { + if (target.getSlottedObject("ghost") == null && target.getFactionStatus() == FactionStatus.OnLeave) { pvpBitmask |= PvpStatus.Attackable; } if (target.getOption(Options.AGGRESSIVE)) { pvpBitmask |= PvpStatus.Aggressive; - } else { - Integer factionStanding = ghost.getFactionStandingMap().get(target.getFaction()); - - if (factionStanding != null) { - if (((TangibleObject) target).getOption(Options.ATTACKABLE) && factionStanding < 0) { - pvpBitmask |= PvpStatus.Aggressive; + } + + if (object.getFactionStatus() == FactionStatus.OnLeave) { + return pvpBitmask; + } + + if (target.getFactionStatus() >= FactionStatus.Combatant) { + if (ghost != null) { + if (target.getSlottedObject("ghost") == null) { + pvpBitmask |= PvpStatus.Enemy; + + Integer factionStanding = ghost.getFactionStandingMap().get(target.getFaction()); + + if (factionStanding != null) { + if (factionStanding < 0) { + pvpBitmask |= PvpStatus.Aggressive; + } else { + pvpBitmask |= PvpStatus.Attackable; + } + } else { + pvpBitmask |= PvpStatus.Attackable; + } + + return pvpBitmask; + } + } else { + if (isFactionEnemy(object, target)) { + pvpBitmask |= PvpStatus.Attackable | PvpStatus.Enemy; + } + + if (isFactionEnemy(target, object)) { + pvpBitmask |= PvpStatus.Aggressive | PvpStatus.Enemy; } } } + if (target.getFactionStatus() == FactionStatus.SpecialForces) { + if (object.getFactionStatus() == FactionStatus.SpecialForces) { + pvpBitmask |= (PvpStatus.Attackable | PvpStatus.Aggressive | PvpStatus.Enemy); + } + } + return pvpBitmask; - }*/ + } // temp fix until calculatePvpStatus is fixed + /* public int calculatePvpStatus(CreatureObject player, TangibleObject target) { if(target.getSlottedObject("ghost") != null) { @@ -275,6 +373,101 @@ public class FactionService implements INetworkDispatch { } } + */ + + public void changeFactionStatus(CreatureObject actor, int factionStatus) { + long time = 1; + String message = ""; + + if (factionStatus == actor.getFactionStatus()) { + return; + } + + if (actor.getPvpBitmask() == PvpStatus.GoingCovert) { + actor.sendSystemMessage("@faction_recruiter:pvp_status_changing", DisplayType.Broadcast); + return; + } + + if (actor.getPvpBitmask() == PvpStatus.GoingOvert) { + actor.sendSystemMessage("@faction_recruiter:pvp_status_changing", DisplayType.Broadcast); + return; + } + + switch (factionStatus) { + case FactionStatus.OnLeave: + actor.setPvpStatus(PvpStatus.GoingCovert, true); + actor.updatePvpStatus(); + time = 300; + message = "on_leave_complete"; + break; + case FactionStatus.Combatant: + actor.setPvpStatus(PvpStatus.GoingCovert, true); + actor.updatePvpStatus(); + + switch (actor.getFactionStatus()) { + case FactionStatus.OnLeave: + actor.sendSystemMessage("@faction_recruiter:on_leave_to_covert", DisplayType.Broadcast); + time = 30; + break; + case FactionStatus.SpecialForces: + actor.sendSystemMessage("@faction_recruiter:overt_to_covert", DisplayType.Broadcast); + time = 300; + break; + } + + message = "covert_complete"; + break; + case FactionStatus.SpecialForces: + actor.sendSystemMessage("@faction_recruiter:covert_to_overt", DisplayType.Broadcast); + actor.setPvpStatus(PvpStatus.GoingOvert, true); + time = 30; + message = "overt_complete"; + break; + } + + final String finalMessage = message; + + scheduler.schedule(() -> { + actor.setPvpBitmask(0); + actor.setFactionStatus(factionStatus); + actor.updatePvpStatus(); + actor.sendSystemMessage("@faction_recruiter:" + finalMessage, DisplayType.Broadcast); + }, time, TimeUnit.SECONDS); + } + + public void resign(CreatureObject actor) { + if (actor.getPvpBitmask() == PvpStatus.GoingCovert) { + actor.sendSystemMessage("@faction_recruiter:pvp_status_changing", DisplayType.Broadcast); + return; + } + + if (actor.getPvpBitmask() == PvpStatus.GoingOvert) { + actor.sendSystemMessage("@faction_recruiter:pvp_status_changing", DisplayType.Broadcast); + return; + } + + if (actor.getFactionStatus() == FactionStatus.OnLeave) { + actor.sendSystemMessage("@faction_recruiter:resign_on_leave", DisplayType.Broadcast); + return; + } + + long time = 1; + + if (actor.getFactionStatus() == FactionStatus.SpecialForces) { + actor.sendSystemMessage("@faction_recruiter:sui_resig_complete_in_5", DisplayType.Broadcast); + actor.setPvpStatus(PvpStatus.GoingCovert, true); + actor.updatePvpStatus(); + time = 300; + } + + scheduler.schedule(() -> { + actor.setPvpBitmask(0); + actor.setFactionStatus(FactionStatus.OnLeave); + actor.setFaction(""); + actor.updatePvpStatus(); + actor.sendSystemMessage("@faction_recruiter:resign_complete", DisplayType.Broadcast); + }, time, TimeUnit.SECONDS); + } public Map getFactionMap() { return factionMap; diff --git a/src/services/gcw/PvPZone.java b/src/services/gcw/PvPZone.java new file mode 100644 index 00000000..e418327b --- /dev/null +++ b/src/services/gcw/PvPZone.java @@ -0,0 +1,68 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package services.gcw; + +import net.engio.mbassy.listener.Handler; +import resources.common.collidables.AbstractCollidable; +import resources.common.collidables.AbstractCollidable.EnterEvent; +import resources.common.collidables.AbstractCollidable.ExitEvent; +import engine.resources.scene.Planet; + +public class PvPZone { + + private Planet planet; + private AbstractCollidable area; + + public PvPZone(Planet planet, AbstractCollidable area) { + this.planet = planet; + this.area = area; + area.getEventBus().subscribe(this); + } + + public Planet getPlanet() { + return planet; + } + + public void setPlanet(Planet planet) { + this.planet = planet; + } + + public AbstractCollidable getArea() { + return area; + } + + public void setArea(AbstractCollidable area) { + this.area = area; + } + + @Handler + public void onEnter(EnterEvent event) { + + } + + @Handler + public void onExit(ExitEvent event) { + + } + + +} diff --git a/src/services/housing/HouseTemplate.java b/src/services/housing/HouseTemplate.java index 3918cf55..78f7715f 100644 --- a/src/services/housing/HouseTemplate.java +++ b/src/services/housing/HouseTemplate.java @@ -6,65 +6,76 @@ import java.util.Vector; import engine.resources.scene.Point3D; -public class HouseTemplate -{ +public class HouseTemplate { + private String deedTemplate; private String buildingTemplate; private int lotCost; private int defaultItemLimit; + private int baseMaintenanceRate; private Vector placeablePlanets; private Map buildingSigns; - public HouseTemplate(String deedTemplate, String buildingTemplate, int lotCost) - { + public HouseTemplate(String deedTemplate, String buildingTemplate, int lotCost) { this.deedTemplate = deedTemplate; this.buildingTemplate = buildingTemplate; this.lotCost = lotCost; this.defaultItemLimit = 50; + this.baseMaintenanceRate = 8; this.placeablePlanets = new Vector(); this.buildingSigns = new HashMap(); } - public void addBuildingSign(String signTemplate, Point3D signPosition) - { + public void addBuildingSign(String signTemplate, Point3D signPosition) { buildingSigns.put(signTemplate, signPosition); } - public void addPlaceablePlanet(String planetName) - { + + public void addPlaceablePlanet(String planetName) { this.placeablePlanets.add(planetName); } - public void setDefaultItemLimit(int itemLimit) - { + + public void setDefaultItemLimit(int itemLimit) { this.defaultItemLimit = itemLimit; } - public String getDeedTemplate() - { - return this.deedTemplate; + public String getDeedTemplate() { + return deedTemplate; } - public String getBuildingTemplate() - { - return this.buildingTemplate; + + public String getBuildingTemplate() { + return buildingTemplate; } - public Map getBuildingSigns() - { - return this.buildingSigns; + + public Map getBuildingSigns() { + return buildingSigns; } - public Vector getPlaceablePlanets() - { - return this.placeablePlanets; + + public Vector getPlaceablePlanets() { + return placeablePlanets; } - public boolean canBePlacedOn(String planetName) - { - if(placeablePlanets.contains(planetName)) return true; + + public boolean canBePlacedOn(String planetName) { + if (placeablePlanets.contains(planetName)) { + return true; + } + return false; } - public int getLotCost() - { - return this.lotCost; + + public int getLotCost() { + return lotCost; } - public int getDefaultItemLimit() - { - return this.defaultItemLimit; + + public int getDefaultItemLimit() { + return defaultItemLimit; } + + public int getBaseMaintenanceRate() { + return baseMaintenanceRate; + } + + public void setBaseMaintenanceRate(int baseMaintenanceRate) { + this.baseMaintenanceRate = baseMaintenanceRate; + } + } diff --git a/src/services/housing/HousingService.java b/src/services/housing/HousingService.java index ff85019e..ce6d289e 100644 --- a/src/services/housing/HousingService.java +++ b/src/services/housing/HousingService.java @@ -39,7 +39,6 @@ import main.NGECore; import protocol.swg.EnterStructurePlacementModeMessage; import resources.objects.building.BuildingObject; import resources.objects.creature.CreatureObject; -import resources.objects.deed.Player_House_Deed; import resources.objects.player.PlayerObject; import resources.objects.tangible.TangibleObject; import services.playercities.PlayerCity; @@ -56,52 +55,60 @@ public class HousingService implements INetworkDispatch { private NGECore core; private Map housingTemplates = new ConcurrentHashMap(); - + private Map houseToDeed = new ConcurrentHashMap(); + public HousingService(NGECore core) { this.core = core; - core.commandService.registerCommand("placestructure"); - core.commandService.registerCommand("movefurniture"); - core.commandService.registerCommand("rotatefurniture"); + + Path p = Paths.get("scripts/houses/"); + + FileVisitor fv = new SimpleFileVisitor() { + @Override + public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { + core.scriptService.callScript("scripts/houses/", file.getFileName().toString().replace(".py", ""), "setup", housingTemplates); + return FileVisitResult.CONTINUE; + } + }; + + try { + Files.walkFileTree(p, fv); + } catch (IOException e) { + e.printStackTrace(); + } + + housingTemplates.values().forEach((houseTemplate) -> houseToDeed.put(houseTemplate.getBuildingTemplate(), houseTemplate.getDeedTemplate())); } - public void enterStructureMode(CreatureObject actor, TangibleObject deed) - { - if(!actor.getClient().isGM() && !core.terrainService.canBuildAtPosition(actor, actor.getWorldPosition().x, actor.getWorldPosition().z)) - { + public void enterStructureMode(CreatureObject actor, TangibleObject deed) { + if (!actor.getClient().isGM() && !core.terrainService.canBuildAtPosition(actor, actor.getWorldPosition().x, actor.getWorldPosition().z)) { actor.sendSystemMessage("You may not place a structure here.", (byte) 0); // should probably load this from an stf return; } - if(housingTemplates.containsKey(deed.getTemplate())) - { + if (housingTemplates.containsKey(deed.getTemplate())) { HouseTemplate houseTemplate = housingTemplates.get(deed.getTemplate()); EnterStructurePlacementModeMessage packet = new EnterStructurePlacementModeMessage(deed, houseTemplate.getBuildingTemplate()); actor.getClient().getSession().write(packet.serialize()); } } - public void placeStructure(final CreatureObject actor, TangibleObject deed, float positionX, float positionZ, float rotation) - { + public void placeStructure(final CreatureObject actor, TangibleObject deed, float positionX, float positionZ, float rotation) { HouseTemplate houseTemplate = housingTemplates.get(deed.getTemplate()); - Player_House_Deed playerHourseDeed = (Player_House_Deed)core.objectService.getObject(deed.getObjectID()); int structureLotCost = houseTemplate.getLotCost(); String structureTemplate = houseTemplate.getBuildingTemplate(); - if(!houseTemplate.canBePlacedOn(actor.getPlanet().getName())) - { + if (!houseTemplate.canBePlacedOn(actor.getPlanet().getName())) { actor.sendSystemMessage("You may not place this structure on this planet.", (byte) 0); // should probably load this from an stf return; } - if(!actor.getClient().isGM() && !core.terrainService.canBuildAtPosition(actor, positionX, positionZ)) - { + if(!actor.getClient().isGM() && !core.terrainService.canBuildAtPosition(actor, positionX, positionZ)) { actor.sendSystemMessage("You may not place a structure here.", (byte) 0); // should probably load this from an stf return; } // Lot stuff - if(!actor.getPlayerObject().deductLots(structureLotCost)) - { + if (!actor.getPlayerObject().deductLots(structureLotCost)) { actor.sendSystemMessage("You do not have enough available lots to place this structure.", (byte) 0); // should probably load this from an stf return; } @@ -120,10 +127,12 @@ public class HousingService implements INetworkDispatch { TangibleObject sign = (TangibleObject) building.getAttachment("structureSign"); String playerFirstName = actor.getCustomName().split(" ")[0]; - if (sign !=null) - sign.setCustomName2(playerFirstName + "'s House"); + if (sign != null) { + sign.setCustomName(playerFirstName + "'s House"); + } + //building.add(sign); - + core.objectService.destroyObject(deed); // Structure management @@ -133,8 +142,8 @@ public class HousingService implements INetworkDispatch { building.setAttachment("structureOwner", actor.getObjectID()); building.setAttachment("structureAdmins", admins); building.setDeedTemplate(deed.getTemplate()); - building.setBMR(playerHourseDeed.getBMR()); - building.setConditionDamage(100); + building.setMaintenanceAmount(houseTemplate.getBaseMaintenanceRate()); + building.setConditionDamage(100); // Ouch if (structureTemplate.contains("cityhall")){ PlayerCity newCity = core.playerCityService.addNewPlayerCity(actor); @@ -145,58 +154,44 @@ public class HousingService implements INetworkDispatch { // Check for city founders joining a new city PlayerCity cityActorIsIn = core.playerCityService.getCityObjectIsIn(actor); - actor.setAttachment("Has24HZoningFor",cityActorIsIn.getCityID()); // for testing - - int cityActorHasZoning = (int)actor.getAttachment("Has24HZoningFor"); - if (cityActorIsIn!=null && cityActorHasZoning==cityActorIsIn.getCityID()){ - if (! cityActorIsIn.getCitizens().contains(actor.getObjectID())){ - building.setAttachment("structureCity", cityActorIsIn.getCityID()); - // actor.setAttachment("residentCity", cityActorIsIn.getCityID()); He must do it manually - cityActorIsIn.addCitizen(actor.getObjectID()); - cityActorIsIn.addNewStructure(building.getObjectID()); + if (cityActorIsIn!=null){ + actor.setAttachment("Has24HZoningFor",cityActorIsIn.getCityID()); // for testing + + int cityActorHasZoning = (int)actor.getAttachment("Has24HZoningFor"); + if (cityActorIsIn!=null && cityActorHasZoning==cityActorIsIn.getCityID()){ + if (! cityActorIsIn.getCitizens().contains(actor.getObjectID())){ + building.setAttachment("structureCity", cityActorIsIn.getCityID()); + // actor.setAttachment("residentCity", cityActorIsIn.getCityID()); He must do it manually + cityActorIsIn.addCitizen(actor.getObjectID()); + cityActorIsIn.addNewStructure(building.getObjectID()); + } } } - // Save structure to DB - //building.createTransaction(core.getBuildingODB().getEnvironment()); - //core.getBuildingODB().put(building, Long.class, BuildingObject.class, building.getTransaction()); - //building.getTransaction().commitSync(); + core.objectService.persistObject(building.getObjectID(), building, core.getSWGObjectODB()); + + } + + public void saveBuildings() { + core.objectService.getObjectList() + .values().stream() + .filter(obj -> obj instanceof BuildingObject && obj.getAttachment("structureOwner") != null) + .forEach(building -> core.objectService.persistObject(building.getObjectID(), building, core.getSWGObjectODB())); } @SuppressWarnings("unchecked") - public boolean getPermissions(SWGObject player, SWGObject container) - { - if(((Vector) container.getContainer().getAttachment("structureAdmins")).contains(player.getObjectID())) return true; - return false; - } + public boolean getPermissions(SWGObject player, SWGObject container) { + if (((Vector) container.getContainer().getAttachment("structureAdmins")).contains(player.getObjectID())) { + return true; + } - public void addHousingTemplate(HouseTemplate houseTemplate) - { - housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate); - } - - public void loadHousingTemplates() { - Path p = Paths.get("scripts/houses/"); - FileVisitor fv = new SimpleFileVisitor() - { - @Override - public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException - { - System.out.println("Loading housing template " + file.getFileName()); - core.scriptService.callScript("scripts/houses/", file.getFileName().toString().replace(".py", ""), "setup", core); - return FileVisitResult.CONTINUE; - } - }; - try - { - Files.walkFileTree(p, fv); - } - catch (IOException e) { e.printStackTrace(); } + return false; } public void createDestroySUIPage(final SWGObject owner, final TangibleObject target) { - final BuildingObject building = (BuildingObject) target.getAttachment("housing_parentstruct"); + final BuildingObject building = (BuildingObject) target.getGrandparent(); + //final BuildingObject building = (BuildingObject) target.getAttachment("housing_parentstruct"); //final BuildingObject building = (BuildingObject) core.objectService.getObject(target.getParentId()); // harvester.getStfFilename(); installation_n .getTemplate(); @@ -253,7 +248,8 @@ public class HousingService implements INetworkDispatch { public void createCodeWindow(SWGObject owner, TangibleObject target) { - final BuildingObject building = (BuildingObject) target.getAttachment("housing_parentstruct"); + final BuildingObject building = (BuildingObject) target.getGrandparent(); + //final BuildingObject building = (BuildingObject) target.getAttachment("housing_parentstruct"); //final BuildingObject building = (BuildingObject)target; Random rnd = new Random(); final int confirmCode = 100000 + rnd.nextInt(900000); @@ -279,26 +275,27 @@ public class HousingService implements INetworkDispatch { if (returnList.get(0).equals(""+confirmCode)){ // handle creation of correct deed in player inventory PlayerObject player = (PlayerObject) crafter.getSlottedObject("ghost"); - String deedTemplate = building.getDeedTemplate(); - - Player_House_Deed deed = (Player_House_Deed)core.objectService.createObject(deedTemplate, owner.getPlanet()); - if(player.getLotsRemaining()+deed.getLotRequirement()>10){ + 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 crafter.sendSystemMessage("Structure can't be redeeded. Maximum lot count exceeded.",(byte)1); return; } - - deed.setStructureTemplate(building.getTemplate()); - deed.setSurplusMaintenance((int)building.getMaintenanceAmount()); - deed.setAttributes(); + + deed.setIntAttribute("@obj_attr_n:examine_maintenance_rate", houseTemplate.getBaseMaintenanceRate()); + deed.setIntAttribute("@obj_attr_n:examine_maintenance", (int) building.getMaintenanceAmount()); core.objectService.destroyObject(building.getObjectID()); SWGObject ownerInventory = owner.getSlottedObject("inventory"); ownerInventory.add(deed); - if(player.getLotsRemaining()+deed.getLotRequirement()<=10) - player.setLotsRemaining(player.getLotsRemaining()+deed.getLotRequirement()); + if (player.getLotsRemaining() + houseTemplate.getLotCost() <= 10) { + player.setLotsRemaining(player.getLotsRemaining() + houseTemplate.getLotCost()); + } crafter.sendSystemMessage("@player_structure:processing_destruction",(byte)1); crafter.sendSystemMessage("@player_structure:deed_reclaimed",(byte)1); @@ -320,7 +317,8 @@ public class HousingService implements INetworkDispatch { public void createPayMaintenanceSUIPage(SWGObject owner, TangibleObject target) { CreatureObject creature = (CreatureObject) owner; - final BuildingObject building = (BuildingObject) target.getAttachment("housing_parentstruct"); + final BuildingObject building = (BuildingObject) target.getGrandparent(); + //final BuildingObject building = (BuildingObject) target.getAttachment("housing_parentstruct"); final SUIWindow window = core.suiService.createSUIWindow("Script.transfer", owner, target, 10); window.setProperty("bg.caption.lblTitle:Text", "@player_structure:select_amount"); window.setProperty("Prompt.lblPrompt:Text", "@player_structure:select_maint_amount" + @@ -398,7 +396,8 @@ public class HousingService implements INetworkDispatch { } public void createStatusSUIPage(SWGObject owner, TangibleObject target) { - final BuildingObject building = (BuildingObject) target.getAttachment("housing_parentstruct"); + final BuildingObject building = (BuildingObject) target.getGrandparent(); + //final BuildingObject building = (BuildingObject) target.getAttachment("housing_parentstruct"); String displayname = "@installation_n:"+building.getStfName(); if (building.getCustomName()!=null) displayname = building.getCustomName(); @@ -450,7 +449,8 @@ public class HousingService implements INetworkDispatch { } public void declareResidency(SWGObject owner, TangibleObject target) { - final BuildingObject building = (BuildingObject) target.getAttachment("housing_parentstruct"); + final BuildingObject building = (BuildingObject) target.getGrandparent(); + //final BuildingObject building = (BuildingObject) target.getAttachment("housing_parentstruct"); building.setResidency((CreatureObject)owner); PlayerCity cityActorIsIn = core.playerCityService.getCityObjectIsIn(owner); owner.setAttachment("residentCity", cityActorIsIn.getCityID()); @@ -458,7 +458,8 @@ public class HousingService implements INetworkDispatch { } public void handleListAllItems(SWGObject owner, TangibleObject target) { - final BuildingObject building = (BuildingObject) target.getAttachment("housing_parentstruct"); + final BuildingObject building = (BuildingObject) target.getGrandparent(); + //final BuildingObject building = (BuildingObject) target.getAttachment("housing_parentstruct"); String displayname = "@installation_n:"+building.getStfName(); if (building.getCustomName()!=null) displayname = building.getCustomName(); @@ -469,7 +470,7 @@ public class HousingService implements INetworkDispatch { Vector itemList = building.getItemsList(); for (int i=0;i foundItems) { - final BuildingObject building = (BuildingObject) target.getAttachment("housing_parentstruct"); + final BuildingObject building = (BuildingObject) target.getGrandparent(); + //final BuildingObject building = (BuildingObject) target.getAttachment("housing_parentstruct"); final SUIWindow window = core.suiService.createSUIWindow("Script.listBox", owner, target, 0); window.setProperty("bg.caption.lblTitle:Text", "@player_structure:find_items_search_keyword_title"); window.setProperty("Prompt.lblPrompt:Text", "@player_structure:find_items_search_list_prompt"); @@ -707,13 +713,15 @@ public class HousingService implements INetworkDispatch { } public void handlePermissionEntry(CreatureObject owner, TangibleObject target) { - final BuildingObject building = (BuildingObject) target.getAttachment("housing_parentstruct"); + final BuildingObject building = (BuildingObject) target.getGrandparent(); + //final BuildingObject building = (BuildingObject) target.getAttachment("housing_parentstruct"); String listName = "ENTRY"; building.setPermissionEntry(listName,owner); } public void handlePermissionBan(CreatureObject owner, TangibleObject target) { - final BuildingObject building = (BuildingObject) target.getAttachment("housing_parentstruct"); + final BuildingObject building = (BuildingObject) target.getGrandparent(); + //final BuildingObject building = (BuildingObject) target.getAttachment("housing_parentstruct"); String listName = "BAN"; building.setPermissionBan(listName,owner); } @@ -754,8 +762,9 @@ public class HousingService implements INetworkDispatch { } public String fetchPrivacyString(TangibleObject object){ - final BuildingObject building = (BuildingObject) object.getAttachment("housing_parentstruct"); - return building.getPrivacyString(); + //final BuildingObject building = (BuildingObject) object.getAttachment("housing_parentstruct"); + //return building.getPrivacyString(); + return ((BuildingObject) object.getGrandparent()).getPrivacyString(); } diff --git a/src/services/mission/MissionObjective.java b/src/services/mission/MissionObjective.java index c81fcc0a..df07879a 100644 --- a/src/services/mission/MissionObjective.java +++ b/src/services/mission/MissionObjective.java @@ -21,13 +21,19 @@ ******************************************************************************/ package services.mission; +import java.io.Serializable; +import main.NGECore; + import com.sleepycat.persist.model.Persistent; +import resources.objects.creature.CreatureObject; import resources.objects.mission.MissionObject; @Persistent(version=0) -public abstract class MissionObjective { +public abstract class MissionObjective implements Serializable { + private static final long serialVersionUID = 1L; + protected long startTime; protected boolean activated; protected MissionObject parent; @@ -42,10 +48,10 @@ public abstract class MissionObjective { this.objectivePhase = 0; } - public abstract void activate(); - public abstract void complete(); - public abstract void abort(); - public abstract void update(); + public abstract void activate(NGECore core, CreatureObject player); + public abstract void complete(NGECore core, CreatureObject player); + public abstract void abort(NGECore core, CreatureObject player); + public abstract void update(NGECore core, CreatureObject player); public long getStartTime() { return startTime; } diff --git a/src/services/mission/MissionService.java b/src/services/mission/MissionService.java index 40b5abf0..967b01f3 100644 --- a/src/services/mission/MissionService.java +++ b/src/services/mission/MissionService.java @@ -24,8 +24,11 @@ package services.mission; import java.io.File; import java.io.IOException; import java.nio.ByteOrder; +import java.util.ArrayList; +import java.util.List; import java.util.Map; import java.util.Random; +import java.util.Vector; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; @@ -40,19 +43,26 @@ import protocol.swg.objectControllerObjects.MissionAbort; import protocol.swg.objectControllerObjects.MissionAcceptRequest; import protocol.swg.objectControllerObjects.MissionAcceptResponse; import protocol.swg.objectControllerObjects.MissionListRequest; +import resources.common.BountyListItem; import resources.common.SpawnPoint; import resources.common.ObjControllerOpcodes; +import resources.objectives.BountyMissionObjective; import resources.objectives.DeliveryMissionObjective; import resources.objectives.DestroyMissionObjective; +import resources.objectives.SurveyMissionObjective; import resources.objects.creature.CreatureObject; import resources.objects.mission.MissionObject; +import resources.objects.player.PlayerObject; +import resources.objects.resource.GalacticResource; +import resources.objects.resource.ResourceRoot; import resources.objects.tangible.TangibleObject; -import resources.objects.waypoint.WaypointObject; import engine.clientdata.StfTable; import engine.clients.Client; import engine.resources.common.CRC; import engine.resources.common.NameGen; import engine.resources.container.Traverser; +import engine.resources.database.ODBCursor; +import engine.resources.database.ObjectDatabase; import engine.resources.objects.SWGObject; import engine.resources.scene.Point3D; import engine.resources.service.INetworkDispatch; @@ -63,7 +73,9 @@ public class MissionService implements INetworkDispatch { private NGECore core; private NameGen nameGenerator; // Use a HashMap for obtaining number of entries so we aren't using a visitor all the time. - private ConcurrentHashMap entryCounts = new ConcurrentHashMap(); + private Map entryCounts = new ConcurrentHashMap(); + private Map bountyMap = new ConcurrentHashMap(); + private ObjectDatabase bountiesODB; private Random ran = new Random(); public MissionService(NGECore core) { @@ -73,6 +85,10 @@ public class MissionService implements INetworkDispatch { catch (IOException e) { e.printStackTrace(); } loadMissionEntryCounts(); + + bountiesODB = core.getBountiesODB(); + + cleanupBounties(); // delete any characters from the bounties odb if they no longer exist. } @Override @@ -118,7 +134,7 @@ public class MissionService implements INetworkDispatch { if(client == null || client.getSession() == null) return; - SWGObject object = client.getParent(); + CreatureObject object = (CreatureObject) client.getParent(); if(object == null) return; @@ -135,16 +151,25 @@ public class MissionService implements INetworkDispatch { int terminalType = (int) terminal.getAttachment("terminalType"); - if (terminalType == TerminalType.GENERIC) { - handleMissionListRequest(core.objectService.getObject(request.getObjectId()), request.getTickCount(), TerminalType.GENERIC); - } else if (terminalType == TerminalType.BOUNTYHUNTER) { + switch(terminalType) { + case TerminalType.GENERIC: + handleMissionListRequest(core.objectService.getObject(request.getObjectId()), request.getTickCount(), TerminalType.GENERIC); + break; + + case TerminalType.BOUNTY: + if (!object.hasSkill("class_bountyhunter_phase1_novice")) { object.sendSystemMessage("@mission/mission_generic:not_bounty_hunter_terminal", (byte) 0); } + else { handleMissionListRequest(core.objectService.getObject(request.getObjectId()), request.getTickCount(), TerminalType.BOUNTY); } + break; + + case TerminalType.ARTISAN: + //handleMissionListRequest(core.objectService.getObject(request.getObjectId()), request.getTickCount(), TerminalType.ARTISAN); + break; + + case TerminalType.ENTERTAINER: + //handleMissionListRequest(core.objectService.getObject(request.getObjectId()), request.getTickCount(), TerminalType.ENTERTAINER); + break; - } else if (terminalType == TerminalType.ENTERTAINER) { - - } else if (terminalType == TerminalType.ARTISAN) { - - } else { - //Console.println("ERROR: Unsupported terminal " + terminal.getObjectId()); + default: break; } } @@ -188,10 +213,14 @@ public class MissionService implements INetworkDispatch { } public void handleMissionAbort(CreatureObject creature, MissionObject mission) { + handleMissionAbort(creature, mission, false); + } + + public void handleMissionAbort(CreatureObject creature, MissionObject mission, boolean silent) { MissionObjective objective = mission.getObjective(); - if (objective != null) - objective.abort(); + if (objective != null && !silent) + objective.abort(core, creature); core.objectService.destroyObject(mission.getObjectId()); } @@ -200,7 +229,7 @@ public class MissionService implements INetworkDispatch { File missionFolder = new File("./clientdata/string/en/mission"); File[] missionFiles = missionFolder.listFiles(); - int missionStrings = 0; + //int missionStrings = 0; for (int i = 0; i < missionFiles.length; i++) { if (missionFiles[i].getName().contains("_easy") || missionFiles[i].getName().contains("_medium") || missionFiles[i].getName().contains("_hard")) { @@ -222,10 +251,10 @@ public class MissionService implements INetworkDispatch { continue; } } catch (Exception e) { e.printStackTrace(); } - missionStrings++; + //missionStrings++; } } - System.out.println("Loaded " + missionStrings + " mission entry counts."); + //System.out.println("Loaded " + missionStrings + " mission entry counts."); } @@ -262,16 +291,16 @@ public class MissionService implements INetworkDispatch { MissionObject mission = (MissionObject) obj; - if (typeOneCount.get() < 4) { + if (typeOneCount.get() < 5) { if (type == TerminalType.GENERIC) randomDeliveryMission(player, mission); - else if (type == TerminalType.BOUNTYHUNTER) + else if (type == TerminalType.BOUNTY) randomBountyMission(player, mission); else if (type == TerminalType.ARTISAN) - return; + randomSurveyMission(player, mission); else return; @@ -279,17 +308,17 @@ public class MissionService implements INetworkDispatch { mission.setRepeatCount(requestCounter); typeOneCount.incrementAndGet(); - } else if (typeTwoCount.get() < 4) { + } else if (typeTwoCount.get() < 5) { - if (type == TerminalType.GENERIC) - randomDestroyMission(player, mission); - - else if (type == TerminalType.BOUNTYHUNTER) + if (type == TerminalType.GENERIC) // destroy return; - else if (type == TerminalType.ARTISAN) + else if (type == TerminalType.ARTISAN) // crafting return; + else if (type == TerminalType.BOUNTY) + randomBountyMission(player, mission); + else return; @@ -300,6 +329,15 @@ public class MissionService implements INetworkDispatch { }); } + public void handleMissionComplete(CreatureObject creature, MissionObject mission) { + MissionObjective objective = mission.getObjective(); + + if (objective == null) + return; + + objective.complete(core, creature); + } + private boolean handleMissionAccept(CreatureObject creature, MissionObject mission) { SWGObject missionBag = creature.getSlottedObject("mission_bag"); @@ -326,19 +364,28 @@ public class MissionService implements INetworkDispatch { } }); - if (hasBountyMission.get() && mission.getMissionType().equals("bounty")) // Can only have 1 bounty mission - return false; + if (mission.getMissionType().equals("bounty")) { + if (hasBountyMission.get()) { + creature.sendSystemMessage("@bounty_hunter:already_have_target", (byte) 0); + return false; + } + } if (missionCount.get() == 2) { creature.sendSystemMessage("@mission/mission_generic:too_many_missions", (byte) 0); return false; } + missionBag.transferTo(creature, datapad, mission); createMissionObjective(creature, mission); return true; } - private void createMissionObjective(CreatureObject creature, MissionObject mission) { + private MissionObjective createMissionObjective(CreatureObject creature, MissionObject mission) { + return createMissionObjective(creature, mission, false); + } + + private MissionObjective createMissionObjective(CreatureObject creature, MissionObject mission, boolean silent) { switch(mission.getMissionType()) { case "deliver": @@ -346,21 +393,99 @@ public class MissionService implements INetworkDispatch { mission.setObjective(deliveryObjective); - deliveryObjective.activate(); - break; + if (!silent) + deliveryObjective.activate(core, creature); + + return deliveryObjective; case "destroy": DestroyMissionObjective destroyObjective = new DestroyMissionObjective(mission); mission.setObjective(destroyObjective); - destroyObjective.activate(); - break; + if (!silent) + destroyObjective.activate(core, creature); + + return destroyObjective; + + case "bounty": + BountyMissionObjective bountyObjective = new BountyMissionObjective(mission); + + mission.setObjective(bountyObjective); + + if (!silent) + bountyObjective.activate(core, creature); + + return bountyObjective; + + case "survey": + SurveyMissionObjective surveyObjective = new SurveyMissionObjective(mission); + + mission.setObjective(surveyObjective); + + if (!silent) + surveyObjective.activate(core, creature); + + return surveyObjective; default: - break; + return null; } } + private void randomSurveyMission(SWGObject player, MissionObject mission) { + + byte generalType = (byte) (ran.nextInt(3) == 0 ? 1 : 0); + + // TODO: Change way of getting resources for planet. Possibly a map, would solve future concurrency problems. + Vector resources = core.resourceService.getSpawnedResourcesByPlanetAndType(player.getPlanetId(), generalType); + if (resources == null || resources.size() == 0) + return; + + // The level and reward calculations are taken from EMU. Can hardly find anything related to survey missions from NGE. + int maxLevel = 50; + int minLevel = 50; + float surveySkill = core.skillModService.getSkillModValue((CreatureObject) player, "surveying"); + + if (surveySkill > 30) { maxLevel += 10; } + if (surveySkill > 50) { maxLevel += 10; } + if (surveySkill > 70) { maxLevel += 10; } + if (surveySkill > 90) { maxLevel += 10; } + if (surveySkill > 100) { maxLevel += 5; } //Max mission level is 95. + + int randNumber = (maxLevel == minLevel ? 0 : ran.nextInt(maxLevel - minLevel)); // prevent bound error (can't randomize 0) + int randLevel = minLevel + (5 * randNumber) / 5; + + if (randLevel > maxLevel) + randLevel = maxLevel; + + GalacticResource resource = resources.get(ran.nextInt(resources.size() - 1)); + + if (resource == null) + return; + + ResourceRoot family = resource.getResourceRoot(); + + mission.setMissionType("survey"); + + String missionStf = "mission/mission_npc_survey_neutral_easy"; + + mission.setMissionId(getRandomStringEntry(missionStf)); + mission.setMissionDescription(missionStf); + mission.setMissionTitle(missionStf); + + mission.setCreator(nameGenerator.compose(2) + " " + nameGenerator.compose(3)); + + mission.setMissionLevel(randLevel); + + mission.setStartLocation(player.getPosition(), player.getPlanet().name); + + mission.setCreditReward(400 + (randLevel - minLevel) * 20 + ran.nextInt(100)); + + mission.setMissionTemplateObject(CRC.StringtoCRC(ResourceRoot.CONTAINER_TYPE_IFF_SIGNIFIER[family.getContainerType()])); // This should be the resource container obj + mission.setMissionTargetName(family.getResourceType() + family.getResourceClass()); + + } + private void randomDeliveryMission(SWGObject player, MissionObject mission) { mission.setMissionType("deliver"); @@ -369,7 +494,7 @@ public class MissionService implements INetworkDispatch { String missionStf = "mission/mission_deliver_neutral_" + difficulties[ran.nextInt(difficulties.length)]; mission.setMissionId(getRandomStringEntry(missionStf)); - mission.setMissionDescription(missionStf); + mission.setMissionDescription(missionStf, "o"); mission.setMissionTitle(missionStf); mission.setCreator(nameGenerator.compose(2) + " " + nameGenerator.compose(3)); @@ -383,37 +508,169 @@ public class MissionService implements INetworkDispatch { mission.setStartLocation(startLocation, player.getPlanet().name); mission.setDestination(destination, player.getPlanet().name); - mission.setCreditReward((int) (50 + ((startLocation.getDistance2D(destination) / 10)))); + mission.setCreditReward((int) (200 + ((startLocation.getDistance2D(destination) / 10)))); mission.setMissionTemplateObject(CRC.StringtoCRC("object/tangible/mission/shared_mission_datadisk.iff")); mission.setMissionTargetName("Datadisk"); - - WaypointObject waypoint = (WaypointObject) core.objectService.createObject("object/waypoint/shared_waypoint.iff", player.getPlanet()); - if (waypoint == null) - return; - - waypoint.setColor(WaypointObject.ORANGE); - - } - - private void randomDestroyMission(SWGObject player, MissionObject mission) { - } private void randomBountyMission(SWGObject player, MissionObject mission) { + BountyListItem bountyTarget = null; + if (bountyMap.size() > 0) { + boolean gotBounty = false; + int attempts = 0; + while (!gotBounty && attempts < 5) { + bountyTarget = getRandomBounty(); + + if (bountyTarget == null || bountyTarget.getAssignedHunters().size() >= 3 || bountyTarget.getCreditReward() < 20000 || bountyTarget.getObjectID() == player.getObjectId()) { + attempts++; + continue; + } + else + gotBounty = true; + } + if (attempts >= 5 && !gotBounty) + return; + } + + mission.setMissionType("bounty"); + + String missionStf = "mission/mission_bounty_jedi"; + + if (!bountyTarget.getProfession().equals("")) { // TODO: Smuggler mission checks. + if (bountyTarget.getFaction().equals("neutral")) { // There were no neutral bounty missions. Remove this when done testing. + mission.setMissionTargetName("@mission/mission_bounty_jedi:neutral_jedi"); + mission.setMissionId(3); + mission.setCreator("Corporate Sector Authority"); + } + else if (bountyTarget.getFaction().equals("rebel")) { + mission.setMissionTargetName("Rebel Bounty"); + mission.setMissionId(2); + mission.setCreator("The Galactic Empire"); + } + else if (bountyTarget.getFaction().equals("imperial")) { + mission.setMissionTargetName("Imperial Bounty"); + mission.setMissionId(1); + mission.setCreator("The Alliance"); + } + mission.setMissionTitle(missionStf); + mission.setMissionDescription(missionStf); + } else { + // TODO: Dead code, but place-holder for implementation of smuggler missions. + if (bountyTarget.getFaction().equals("neutral")) { + mission.setMissionId(3); + } + else if (bountyTarget.getFaction().equals("rebel")) { + mission.setMissionId(2); + } + else if (bountyTarget.getFaction().equals("imperial")) { + mission.setMissionId(1); + } + mission.setMissionTitle(missionStf, "s"); + mission.setMissionDescription(missionStf, "s"); + } + + mission.setMissionLevel(95 + bountyTarget.getFailedAttempts()); + + mission.setCreditReward(bountyTarget.getCreditReward()); + + mission.setMissionTemplateObject(CRC.StringtoCRC("object/tangible/mission/shared_mission_bounty_jedi_target.iff")); + + mission.setBountyMarkId(bountyTarget.getObjectID()); } public enum TerminalType {; public static final int GENERIC = 1; - public static final int BOUNTYHUNTER = 2; + public static final int BOUNTY = 2; public static final int ENTERTAINER = 3; public static final int ARTISAN = 4; public static final int EXPLORER = 5; } + public Map getBountyMap() { + return this.bountyMap; + } + + public BountyListItem getRandomBounty() { + int bountyListId = ran.nextInt(bountyMap.size()); + List bounties = new ArrayList(bountyMap.keySet()); + + return bountyMap.get(bounties.get(bountyListId)); + } + + public BountyListItem getBountyListItem(long objectId) { + if (bountyMap.containsKey(objectId)) + return bountyMap.get(objectId); + else return null; + } + + public BountyListItem createNewBounty(CreatureObject bountyTarget, long placer, int reward) { + PlayerObject player = (PlayerObject) bountyTarget.getSlottedObject("ghost"); + if (player == null) + return null; + + if (getBountyListItem(bountyTarget.getObjectID()) != null) + return null; + + BountyListItem bounty = new BountyListItem(bountyTarget.getObjectID(), reward, core.playerService.getFormalProfessionName(player.getProfession()), bountyTarget.getFaction(), bountyTarget.getCustomName()); + + if (placer != 0) + bounty.getBountyPlacers().add(placer); + + bountiesODB.put(bountyTarget.getObjectID(), bounty); + + bountyMap.put(bountyTarget.getObjectID(), bounty); + + //System.out.println("Created bounty of " + reward + " to " + bounty.getName()); + return bounty; + } + + public boolean addToExistingBounty(long bountyTarget, long placer, int amountToAdd) { + + BountyListItem bounty = getBountyListItem(bountyTarget); + + if (bounty == null) + return false; + + bounty.addBounty(amountToAdd); + + if (placer != 0 && !bounty.getBountyPlacers().contains(placer)) + bounty.getBountyPlacers().add(placer); + + bountiesODB.put(bounty.getObjectID(), bounty); + + //System.out.println("Added bounty of " + amountToAdd + " to " + bounty.getName()); + return true; + } + + public boolean removeBounty(long bountyTarget, boolean listRemove) { + if (listRemove) + bountyMap.remove(bountiesODB.get(bountyTarget)); + bountiesODB.remove(bountyTarget); + return true; + } + + public boolean removeBounty(long bountyTarget) { + return removeBounty(bountyTarget, true); + } + + private void cleanupBounties() { + List bounties = new ArrayList(); + ODBCursor cursor = bountiesODB.getCursor(); + while(cursor.hasNext()) { + BountyListItem bounty = (BountyListItem) cursor.next(); + + if (bounty != null && !core.characterService.playerExists(bounty.getObjectID())) { + bounties.add(bounty); + } + } + bounties.stream().mapToLong(b -> b.getObjectID()).forEach(bountiesODB::remove); + if (bounties.size() != 0) + System.out.println("Removed " + bounties.size() + " bounties."); + } + @Override public void shutdown() { - } } diff --git a/src/services/object/DuplicateId.java b/src/services/object/DuplicateId.java index db618527..55b03ab6 100644 --- a/src/services/object/DuplicateId.java +++ b/src/services/object/DuplicateId.java @@ -21,12 +21,16 @@ ******************************************************************************/ package services.object; +import java.io.Serializable; + import com.sleepycat.persist.model.Entity; import com.sleepycat.persist.model.PrimaryKey; @Entity -public class DuplicateId { +public class DuplicateId implements Serializable { + private static final long serialVersionUID = 1L; + @PrimaryKey private String key; private long objectId; diff --git a/src/services/object/ObjectId.java b/src/services/object/ObjectId.java index 36df1736..1f8362fb 100644 --- a/src/services/object/ObjectId.java +++ b/src/services/object/ObjectId.java @@ -21,12 +21,16 @@ ******************************************************************************/ package services.object; +import java.io.Serializable; + import com.sleepycat.persist.model.Entity; import com.sleepycat.persist.model.PrimaryKey; @Entity -public class ObjectId { +public class ObjectId implements Serializable { + private static final long serialVersionUID = 1L; + @PrimaryKey public long objectId; diff --git a/src/services/object/ObjectService.java b/src/services/object/ObjectService.java index 8158ae15..50a4fcb3 100644 --- a/src/services/object/ObjectService.java +++ b/src/services/object/ObjectService.java @@ -88,7 +88,9 @@ import engine.resources.container.Traverser; import engine.resources.container.WorldCellPermissions; import engine.resources.container.WorldPermissions; import engine.resources.database.DatabaseConnection; +import engine.resources.database.ODBCursor; import engine.resources.database.ObjectDatabase; +import engine.resources.objects.Delta; import engine.resources.objects.IPersistent; import engine.resources.objects.SWGObject; import engine.resources.scene.Planet; @@ -97,13 +99,11 @@ import engine.resources.scene.Quaternion; import engine.resources.service.INetworkDispatch; import engine.resources.service.INetworkRemoteEvent; import main.NGECore; -import resources.objects.Delta; +import resources.objectives.BountyMissionObjective; import resources.objects.building.BuildingObject; import resources.objects.cell.CellObject; import resources.objects.craft.DraftSchematic; import resources.objects.creature.CreatureObject; -import resources.objects.deed.Harvester_Deed; -import resources.objects.deed.Player_House_Deed; import resources.objects.factorycrate.FactoryCrateObject; import resources.objects.group.GroupObject; import resources.objects.guild.GuildObject; @@ -121,13 +121,14 @@ import resources.objects.tangible.TangibleObject; import resources.objects.tool.SurveyTool; import resources.objects.waypoint.WaypointObject; import resources.objects.weapon.WeaponObject; +import services.EquipmentService; +import services.ai.AIActor; import services.command.BaseSWGCommand; import services.command.CombatCommand; import services.bazaar.AuctionItem; import services.chat.ChatRoom; @SuppressWarnings("unused") - public class ObjectService implements INetworkDispatch { private Map objectList = new ConcurrentHashMap(); @@ -147,7 +148,6 @@ public class ObjectService implements INetworkDispatch { Runtime.getRuntime().addShutdownHook(new Thread() { @Override public void run() { - core.getObjectIdODB().getEnvironment().flushLog(true); synchronized(objectList) { for(SWGObject obj : objectList.values()) { @@ -157,6 +157,10 @@ public class ObjectService implements INetworkDispatch { } } + core.bazaarService.saveAllItems(); + core.housingService.saveBuildings(); + core.harvesterService.saveHarvesters(); + core.closeODBs(); } }); @@ -175,25 +179,20 @@ public class ObjectService implements INetworkDispatch { } public void loadBuildings() { - EntityCursor cursor = core.getBuildingODB().getCursor(Long.class, BuildingObject.class); - - Iterator it = cursor.iterator(); - - while(it.hasNext()) { - final BuildingObject building = it.next(); + ODBCursor cursor = core.getSWGObjectODB().getCursor(); + + while(cursor.hasNext()) { + final SWGObject building = (SWGObject) cursor.next(); + if(!(building instanceof BuildingObject) || building == null) + continue; objectList.put(building.getObjectID(), building); Planet planet = core.terrainService.getPlanetByID(building.getPlanetId()); building.setPlanet(planet); - building.viewChildren(building, true, true, new Traverser() { - - @Override - public void process(SWGObject object) { - objectList.put(object.getObjectID(), object); - if(object.getParentId() != 0 && object.getContainer() == null) - object.setParent(building); - object.getContainerInfo(object.getTemplate()); - } - + building.viewChildren(building, true, true, (object) -> { + objectList.put(object.getObjectID(), object); + if(object.getParentId() != 0 && object.getContainer() == null) + object.setParent(building); + object.getContainerInfo(object.getTemplate()); }); } @@ -223,7 +222,9 @@ public class ObjectService implements INetworkDispatch { } catch (InstantiationException | IllegalAccessException e) { e.printStackTrace(); } + boolean isSnapshot = false; + if(objectID == 0) objectID = generateObjectID(); else @@ -239,33 +240,19 @@ public class ObjectService implements INetworkDispatch { } else if(Template.startsWith("object/tangible/survey_tool")) { - object = new SurveyTool(objectID, planet, Template, position, orientation); + object = new SurveyTool(objectID, planet, position, orientation, Template); - } else if(Template.startsWith("object/tangible/deed/harvester_deed") || Template.startsWith("object/tangible/deed/generator_deed")) { + } else if(Template.startsWith("object/tangible")) { - object = new Harvester_Deed(objectID, planet, Template, position, orientation); - - } else if(Template.startsWith("object/tangible/deed/player_house_deed") || Template.startsWith("object/tangible/deed/guild_deed") || Template.startsWith("object/tangible/deed/city_deed") || Template.startsWith("object/tangible/tcg/series3/shared_structure_deed_sith_meditation_room_deed.iff") || Template.startsWith("object/tangible/tcg/series5/shared_structure_deed_player_house_atat.iff") || Template.startsWith("object/tangible/tcg/series5/shared_structure_deed_player_house_hangar.iff") || Template.startsWith("object/tangible/tcg/series3/shared_structure_deed_jedi_meditation_room_deed.iff") || Template.startsWith("object/tangible/saga_system/rewards/shared_structure_deed_player_house_sandcrawler.iff")) { - - object = new Player_House_Deed(objectID, planet, Template, position, orientation); - - } -// else if(Template.startsWith("object/tangible/container/drum/shared_treasure_drum.iff")) { -// -// object = new CreatureObject(objectID, planet, position, orientation, Template); -// -// } - else if(Template.startsWith("object/tangible")) { - - object = new TangibleObject(objectID, planet, Template, position, orientation); + object = new TangibleObject(objectID, planet, position, orientation, Template); } else if(Template.startsWith("object/intangible")) { object = new IntangibleObject(objectID, planet, position, orientation,Template); - }else if(Template.startsWith("object/weapon")) { + } else if(Template.startsWith("object/weapon")) { - object = new WeaponObject(objectID, planet, Template, position, orientation); + object = new WeaponObject(objectID, planet, position, orientation, Template); } else if(Template.startsWith("object/building") || Template.startsWith("object/static/worldbuilding/structures") || Template.startsWith("object/static/structure")){ @@ -309,11 +296,11 @@ public class ObjectService implements INetworkDispatch { } else if(Template.startsWith("object/resource_container")) { - object = new ResourceContainerObject(objectID, planet, Template, position, orientation); + object = new ResourceContainerObject(objectID, planet, position, orientation, Template); } else if(Template.startsWith("object/factory/shared_factory_crate")) { - object = new FactoryCrateObject(objectID, planet, Template, position, orientation); + object = new FactoryCrateObject(objectID, planet, position, orientation, Template); } else if(Template.startsWith("object/draft_schematic")) { @@ -327,7 +314,7 @@ public class ObjectService implements INetworkDispatch { float positionY = core.terrainService.getHeight(planet.getID(), position.x, position.z)-1f; Point3D newpoint = new Point3D(position.x,positionY,position.z); - object = new InstallationObject(objectID, planet, Template, newpoint, orientation); + object = new InstallationObject(objectID, planet, newpoint, orientation, Template); } else if(Template.startsWith("object/installation/mining_ore") || Template.startsWith("object/installation/mining_liquid") || Template.startsWith("object/installation/mining_gas") || Template.startsWith("object/installation/mining_organic") || @@ -335,7 +322,7 @@ public class ObjectService implements INetworkDispatch { float positionY = core.terrainService.getHeight(planet.getID(), position.x, position.z)-1f; Point3D newpoint = new Point3D(position.x,positionY,position.z); - object = new HarvesterObject(objectID, planet, Template, newpoint, orientation); + object = new HarvesterObject(objectID, planet, newpoint, orientation, Template); } else { return null; @@ -346,18 +333,10 @@ public class ObjectService implements INetworkDispatch { object.setAttachment("customServerTemplate", customServerTemplate); object.setisInSnapshot(isSnapshot); - if(!core.getObjectIdODB().contains(objectID, Long.class, ObjectId.class)) { - core.getObjectIdODB().put(new ObjectId(objectID), Long.class, ObjectId.class); + synchronized(objectMutex) { + if(!core.getObjectIdODB().contains(objectID)) + core.getObjectIdODB().put(objectID, new ObjectId(objectID)); } - if(loadServerTemplate) - loadServerTemplate(object); - else { - final SWGObject pointer = object; - loadServerTemplateTasks.add(() -> loadServerTemplate(pointer)); - } - - objectList.put(objectID, object); - // Set Options - easier to set them across the board here // because we'll be spawning them despite most of them being unscripted. // Any such settings can be completely reset with setOptionsBitmask @@ -392,6 +371,15 @@ public class ObjectService implements INetworkDispatch { } } + if(loadServerTemplate) + loadServerTemplate(object); + else { + final SWGObject pointer = object; + loadServerTemplateTasks.add(() -> loadServerTemplate(pointer)); + } + + objectList.put(objectID, object); + return object; } @@ -469,22 +457,23 @@ public class ObjectService implements INetworkDispatch { return; } - if (object instanceof TangibleObject && - ((TangibleObject) object).getRespawnTime() > 0) { + if (object.getAttachment("AI") != null && object.getAttachment("AI") instanceof AIActor && ((AIActor) object.getAttachment("AI")).getMobileTemplate().getRespawnTime() > 0) { final long objectId = object.getObjectID(); final String Template = object.getTemplate(); final Planet planet = object.getPlanet(); final Point3D position = object.getPosition(); final Quaternion orientation = object.getOrientation(); + final long cellId = ((object.getContainer() == null) ? 0L : object.getContainer().getObjectID()); + final short level = ((object instanceof CreatureObject) ? ((CreatureObject) object).getLevel() : (short) 0); scheduler.schedule(new Runnable() { @Override public void run() { - createObject(Template, objectId, planet, position, orientation); + NGECore.getInstance().spawnService.spawnCreature(Template, objectId, planet.getName(), cellId, position.x, position.y, position.z, orientation.w, orientation.x, orientation.y, orientation.z, level); } - }, ((TangibleObject) object).getRespawnTime(), TimeUnit.SECONDS); + }, ((AIActor) object.getAttachment("AI")).getMobileTemplate().getRespawnTime(), TimeUnit.SECONDS); } String filePath = "scripts/" + object.getTemplate().split("shared_" , 2)[0].replace("shared_", "") + object.getTemplate().split("shared_" , 2)[1].replace(".iff", "") + ".py"; @@ -512,6 +501,8 @@ public class ObjectService implements INetworkDispatch { if(parent != null) { if(parent instanceof CreatureObject) { + core.equipmentService.unequip((CreatureObject) parent, object); + ((CreatureObject) parent).removeObjectFromEquipList(object); ((CreatureObject) parent).removeObjectFromAppearanceEquipList(object); } @@ -534,6 +525,9 @@ public class ObjectService implements INetworkDispatch { } public SWGObject getObjectByCustomName(String customName) { + if (customName == null) { + return null; + } synchronized(objectList) { @@ -546,24 +540,32 @@ public class ObjectService implements INetworkDispatch { } - EntityCursor cursor = core.getCreatureODB().getCursor(Long.class, CreatureObject.class); + ODBCursor cursor = core.getSWGObjectODB().getCursor(); - Iterator it = cursor.iterator(); - - while(it.hasNext()) { - if(it.next().getCustomName().equals(customName)) - return it.next(); + while (cursor.hasNext()) { + SWGObject object = (SWGObject) cursor.next(); + + if (object == null) { + continue; + } + + if (object.getCustomName() != null && customName.length() > 0 && object.getCustomName().equals(customName)) { + return object; + } } - + return null; - } public SWGObject getObjectByFirstName(String customName) { + if (customName == null) { + return null; + } synchronized(objectList) { - for(SWGObject obj : objectList.values()) { + if(obj == null) + continue; if(obj.getCustomName() == null) continue; if(obj.getCustomName().startsWith(customName)) @@ -572,35 +574,33 @@ public class ObjectService implements INetworkDispatch { } - EntityCursor cursor = core.getCreatureODB().getCursor(Long.class, CreatureObject.class); + ODBCursor cursor = core.getSWGObjectODB().getCursor(); - Iterator it = cursor.iterator(); - - while(it.hasNext()) { - if(it.next().getCustomName().startsWith(customName)) - return it.next(); + while (cursor.hasNext()) { + SWGObject object = (SWGObject) cursor.next(); + + if (object == null) { + continue; + } + + if (object.getCustomName() != null && customName.length() > 0 && object.getCustomName().startsWith(customName)) { + return object; + } } - + cursor.close(); return null; - } public CreatureObject getCreatureFromDB(long objectId) { - CreatureObject object = core.getCreatureODB().get(new Long(objectId), Long.class, CreatureObject.class); - + SWGObject object = (SWGObject) core.getSWGObjectODB().get(objectId); + if(!(object instanceof CreatureObject)) + return null; if (object != null && getObject(object.getObjectID()) == null) { loadServerTemplate(object); - - object.viewChildren(object, true, true, new Traverser() { - - public void process(SWGObject child) { - loadServerTemplate(child); - } - - }); + object.viewChildren(object, true, true, (child) -> loadServerTemplate(child)); } - return object; + return (CreatureObject) object; } public long generateObjectID() { @@ -619,35 +619,53 @@ public class ObjectService implements INetworkDispatch { long newId = 0; boolean found = false; // stack overflow when using recursion - while(!found) { - synchronized(objectMutex) { + synchronized(objectMutex) { + while(!found) { newId = highestId.incrementAndGet(); + PreparedStatement ps2; + try { + ps2 = databaseConnection.preparedStatement("UPDATE highestid SET id=" + newId + " WHERE id=(SELECT MAX(id) FROM highestid)"); + ps2.executeUpdate(); + ps2.close(); + } catch (SQLException e) { + e.printStackTrace(); + } + if(objectList.containsKey(newId) || core.getObjectIdODB().contains(newId)) + found = false; + else + found = true; } - - PreparedStatement ps2; - - try { - ps2 = databaseConnection.preparedStatement("UPDATE highestid SET id=" + newId + " WHERE id=" + (newId-1)); - ps2.executeUpdate(); - ps2.close(); - } catch (SQLException e) { - e.printStackTrace(); - } - if(getObject(newId) != null || core.getObjectIdODB().contains(newId, Long.class, ObjectId.class)) - found = false; - else - found = true; } return newId; } + public long getDOId(String planet, String template, int type, long containerId, int cellNumber, float x1, float y, float z1) { + SWGObject container = getObject(containerId); + float x = ((container == null) ? x1 : container.getPosition().x + x1); + float z = ((container == null) ? z1 : container.getPosition().z + z1); + String key = "" + CRC.StringtoCRC(planet) + CRC.StringtoCRC(template) + type + containerId + cellNumber + x + y + z; + + long objectId = 0; + + if (core.getDuplicateIdODB().contains(key)) { + objectId = ((DuplicateId) core.getDuplicateIdODB().get(key)).getObjectId(); + } else { + objectId = generateObjectID(); + core.getDuplicateIdODB().put(key, new DuplicateId(key, objectId)); + } + + return objectId; + } + public void useObject(CreatureObject creature, SWGObject object) { if (creature == null || object == null) { return; } + creature.setUseTarget(object); + int reuse_time; try { @@ -656,41 +674,39 @@ public class ObjectService implements INetworkDispatch { reuse_time = 0; } - if (reuse_time > 0) { - try { - DatatableVisitor visitor = ClientFileManager.loadFile("datatables/timer/template_command_mapping.iff", DatatableVisitor.class); - - for (int i = 0; i < visitor.getRowCount(); i++) { - if (visitor.getObject(i, 0) != null && ((String) (visitor.getObject(i, 0))).equalsIgnoreCase(object.getTemplate())) { - String commandName = (String) visitor.getObject(i, 1); - String cooldownGroup = (String) visitor.getObject(i, 2); - String animation = (String) visitor.getObject(i, 3); + try { + DatatableVisitor visitor = ClientFileManager.loadFile("datatables/timer/template_command_mapping.iff", DatatableVisitor.class); + + for (int i = 0; i < visitor.getRowCount(); i++) { + if (visitor.getObject(i, 0) != null && ((String) (visitor.getObject(i, 0))).equalsIgnoreCase(object.getTemplate())) { + String commandName = (String) visitor.getObject(i, 1); + String cooldownGroup = (String) visitor.getObject(i, 2); + String animation = (String) visitor.getObject(i, 3); + + if (commandName.length() > 0) { + BaseSWGCommand command = core.commandService.getCommandByName(commandName); - if (commandName.length() > 0) { - BaseSWGCommand command = core.commandService.getCommandByName(commandName); - - if (command instanceof CombatCommand && animation.length() > 0) { - ((CombatCommand) command).setDefaultAnimations(new String[] { animation }); - } - - if (core.commandService.callCommand(creature, object, command, 0, "")) { - core.commandService.removeCommand(creature, 0, command); - return; - } - } else if (cooldownGroup.length() > 0) { - if (creature.hasCooldown(cooldownGroup)) { - return; - } - - creature.addCooldown(cooldownGroup, object.getIntAttribute("reuse_time")); + if (command instanceof CombatCommand && animation.length() > 0) { + ((CombatCommand) command).setDefaultAnimations(new String[] { animation }); } - break; + if (core.commandService.callCommand(creature, object, command, 0, "")) { + core.commandService.removeCommand(creature, 0, command); + return; + } + } else if (cooldownGroup.length() > 0) { + if (creature.hasCooldown(cooldownGroup)) { + return; + } + + creature.addCooldown(cooldownGroup, object.getIntAttribute("reuse_time")); } + + break; } - } catch (Exception e) { - e.printStackTrace(); } + } catch (Exception e) { + e.printStackTrace(); } if (object instanceof TangibleObject) { @@ -789,26 +805,18 @@ public class ObjectService implements INetworkDispatch { objectList.put(creature.getObjectID(), creature); - creature.viewChildren(creature, true, true, new Traverser() { - - @Override - public void process(SWGObject object) { - objectList.put(object.getObjectID(), object); - } - + creature.viewChildren(creature, true, true, (object) -> { + objectList.put(object.getObjectID(), object); }); - creature.viewChildren(creature, true, true, new Traverser() { - - @Override - public void process(SWGObject object) { - if(object.getParentId() != 0 && object.getContainer() == null) - object.setParent(getObject(object.getParentId())); - object.getContainerInfo(object.getTemplate()); - if(getObject(object.getObjectID()) == null) - objectList.put(object.getObjectID(), object); - } - + creature.viewChildren(creature, true, true, (object) -> { + if(object.getMutex() == null) + object.initAfterDBLoad(); + if(object.getParentId() != 0 && object.getContainer() == null) + object.setParent(getObject(object.getParentId())); + object.getContainerInfo(object.getTemplate()); + if(getObject(object.getObjectID()) == null) + objectList.put(object.getObjectID(), object); }); if(creature.getParentId() != 0) { @@ -832,9 +840,9 @@ public class ObjectService implements INetworkDispatch { core.buffService.clearBuffs(creature); - CmdStartScene startScene = new CmdStartScene((byte) 0, objectId, creature.getPlanet().getPath(), creature.getTemplate(), position.x, position.y, position.z, core.getGalacticTime(), 0); + CmdStartScene startScene = new CmdStartScene((byte) 0, objectId, creature.getPlanet().getPath(), creature.getTemplate(), position.x, position.y, position.z, core.getGalacticTime() / 1000, 0); session.write(startScene.serialize()); - + ChatServerStatus chatServerStatus = new ChatServerStatus(); client.getSession().write(chatServerStatus.serialize()); @@ -897,6 +905,24 @@ public class ObjectService implements INetworkDispatch { if(!core.getConfig().getString("MOTD").equals("")) creature.sendSystemMessage(core.getConfig().getString("MOTD"), (byte) 2); + if (core.getBountiesODB().contains(creature.getObjectID())) + core.missionService.getBountyMap().put(creature.getObjectID(), (BountyListItem) core.getBountiesODB().get(creature.getObjectID())); + + if (creature.getSlottedObject("datapad") != null) { + creature.getSlottedObject("datapad").viewChildren(creature, true, false, new Traverser() { + + @Override + public void process(SWGObject obj) { + if (obj instanceof MissionObject) { + MissionObject mission = (MissionObject) obj; + if (mission.getMissionType().equals("bounty")) { + ((BountyMissionObjective) mission.getObjective()).checkBountyActiveStatus(core); + } + } + } + }); + } + core.playerService.postZoneIn(creature); } @@ -1081,21 +1107,22 @@ public class ObjectService implements INetworkDispatch { if (duplicate.containsKey(containerId)) { containerId = duplicate.get(containerId); } + String planetName = planet.getName(); + + // TODO needs to a way to work for mustafar and kashyyyk which both have instances if (objectId != 0 && getObject(objectId) != null && (planetName.contains("dungeon") || planetName.contains("adventure"))) { SWGObject container = getObject(containerId); - int x = ((int) (px + ((container == null) ? x1 : container.getPosition().x))); - int z = ((int) (pz + ((container == null) ? z1 : container.getPosition().z))); + float x = (px + ((container == null) ? x1 : container.getPosition().x)); + float z = (pz + ((container == null) ? z1 : container.getPosition().z)); String key = "" + CRC.StringtoCRC(planet.getName()) + CRC.StringtoCRC(template) + type + containerId + cellIndex + x + py + z; long newObjectId = 0; - if (core.getDuplicateIdODB().contains(key, String.class, DuplicateId.class)) { - newObjectId = core.getDuplicateIdODB().get(key, String.class, DuplicateId.class).getObjectId(); + if (core.getDuplicateIdODB().contains(key)) { + newObjectId = ((DuplicateId) core.getDuplicateIdODB().get(key)).getObjectId(); } else { newObjectId = generateObjectID(); - Transaction txn = core.getDuplicateIdODB().getEnvironment().beginTransaction(null, null); - core.getDuplicateIdODB().put(new DuplicateId(key, newObjectId), String.class, DuplicateId.class, txn); - txn.commitSync(); + core.getDuplicateIdODB().put(key, new DuplicateId(key, newObjectId)); } duplicate.put(objectId, newObjectId); @@ -1106,11 +1133,12 @@ public class ObjectService implements INetworkDispatch { SWGObject object; if(objectId != 0 && containerId == 0) { if(portalCRC != 0) { - if (core.getBuildingODB().contains(objectId, Long.class, BuildingObject.class) && !duplicate.containsValue(objectId)) + if (core.getSWGObjectODB().contains(objectId) && !duplicate.containsValue(objectId)) continue; containers.add(objectId); object = createObject(template, objectId, planet, new Point3D(px + x1, py, pz + z1), new Quaternion(qw, qx, qy, qz), null, true, false); object.setAttachment("childObjects", null); + /*if (!duplicate.containsValue(objectId)) { ((BuildingObject) object).createTransaction(core.getBuildingODB().getEnvironment()); core.getBuildingODB().put((BuildingObject) object, Long.class, BuildingObject.class, ((BuildingObject) object).getTransaction()); @@ -1149,6 +1177,10 @@ public class ObjectService implements INetworkDispatch { object.setContainerPermissions(WorldPermissions.WORLD_PERMISSIONS); } + if (object != null && object instanceof TangibleObject && !(object instanceof CreatureObject)) { + ((TangibleObject) object).setStaticObject(true); + } + //System.out.println("Spawning: " + template + " at: X:" + object.getPosition().x + " Y: " + object.getPosition().y + " Z: " + object.getPosition().z); if(object != null) object.setAttachment("isBuildout", new Boolean(true)); @@ -1158,9 +1190,7 @@ public class ObjectService implements INetworkDispatch { } for(BuildingObject building : persistentBuildings) { - building.createTransaction(core.getBuildingODB().getEnvironment()); - core.getBuildingODB().put(building, Long.class, BuildingObject.class, building.getTransaction()); - building.getTransaction().commitSync(); + core.getSWGObjectODB().put(building.getObjectID(), building); destroyObject(building); } @@ -1187,16 +1217,12 @@ public class ObjectService implements INetworkDispatch { return count.get(); } - public void persistObject(IPersistent object, Class keyClass, Class valueClass, ObjectDatabase odb) { - object.createTransaction(odb.getEnvironment()); - core.getAuctionODB().put(object, keyClass, valueClass, object.getTransaction()); - object.getTransaction().commitSync(); + public void persistObject(long key, Object value, ObjectDatabase odb) { + odb.put(key, value); } - public void deletePersistentObject(IPersistent object, Class keyClass, Class valueClass, ObjectDatabase odb, Object key) { - object.createTransaction(odb.getEnvironment()); - core.getAuctionODB().delete(key, keyClass, valueClass, object.getTransaction()); - object.getTransaction().commitSync(); + public void deletePersistentObject(long key, ObjectDatabase odb) { + odb.remove(key); } } diff --git a/src/services/object/ObjectTransactionManager.java b/src/services/object/ObjectTransactionManager.java deleted file mode 100644 index f4fcfc6a..00000000 --- a/src/services/object/ObjectTransactionManager.java +++ /dev/null @@ -1,98 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2013 - * - * This File is part of NGECore2. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see . - * - * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. - * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. - ******************************************************************************/ -package services.object; - -import java.util.Collection; -import java.util.Iterator; - -import com.sleepycat.je.Transaction; - -import engine.resources.objects.IPersistent; -import engine.resources.objects.SWGObject; - - -/** - * This Class is used to periodically save all Objects using transactions to disk. - * Remember that you still need commit transactions manually whenever an object using transactions is removed from zone i.e. when a player logs out. - * @author Light - */ -public class ObjectTransactionManager implements Runnable { - - private ObjectService objService; - private int cycleTime; - - /** - * - * @param objService ObjectService - * @param cycleTime Time between each full object save in ms. - */ - public ObjectTransactionManager(ObjectService objService, int cycleTime) { - - this.objService = objService; - this.cycleTime = cycleTime; - - } - - - @Override - public void run() { - - try { - - Thread.sleep(cycleTime); - - Collection swgObjects = objService.getObjectList().values(); - - synchronized(swgObjects) { - - Iterator it = swgObjects.iterator(); - - while(it.hasNext()) { - - SWGObject obj = it.next(); - - if(obj instanceof IPersistent && !obj.isInSnapshot() && obj.isPersistent()) { - - if(((IPersistent) obj).getTransaction() == null) - continue; - - if(!((IPersistent) obj).getTransaction().isValid()) - continue; - - Transaction txn = ((IPersistent) obj).getTransaction(); - txn.commitSync(); - - } - - } - - } - - } catch (InterruptedException e) { - e.printStackTrace(); - } - - } - -} - - diff --git a/src/services/pet/MountService.java b/src/services/pet/MountService.java index a8094945..c1d836d5 100644 --- a/src/services/pet/MountService.java +++ b/src/services/pet/MountService.java @@ -33,7 +33,6 @@ import resources.datatables.DisplayType; import resources.datatables.Options; import resources.datatables.Posture; import resources.datatables.State; -import resources.datatables.StateStatus; import resources.objects.building.BuildingObject; import resources.objects.creature.CreatureObject; import resources.objects.player.PlayerObject; @@ -64,7 +63,7 @@ public class MountService implements INetworkDispatch { } if (actor.getSlottedObject("ghost") == null) { - actor.sendSystemMessage(OutOfBand.ProsePackage("@pet_menu:failed_to_call_vehicle"), DisplayType.Broadcast); + actor.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:failed_to_call_vehicle"), DisplayType.Broadcast); return; } @@ -76,12 +75,12 @@ public class MountService implements INetworkDispatch { // Unsure if these are the right attributes. It doesn't generate the vehicle if the datapad has max # of vehicles. //if (datapad.getIntAttribute("data_size") >= datapad.getIntAttribute("datapad_slots")) { - //actor.sendSystemMessage(OutOfBand.ProsePackage("@pet_menu:has_max_vehicle"), DisplayType.Broadcast); + //actor.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:has_max_vehicle"), DisplayType.Broadcast); //return; //} if (actor.getTefTime() > 0){ - actor.sendSystemMessage(OutOfBand.ProsePackage("@pet_menu:prose_cant_generate_yet", actor.getTefTime()), DisplayType.Broadcast); + actor.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:prose_cant_generate_yet", actor.getTefTime()), DisplayType.Broadcast); return; } @@ -115,7 +114,7 @@ public class MountService implements INetworkDispatch { core.objectService.destroyObject(deed); } - actor.sendSystemMessage(OutOfBand.ProsePackage("@pet_menu:device_added"), DisplayType.Broadcast); + actor.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:device_added"), DisplayType.Broadcast); call(actor, pcd); } @@ -130,38 +129,38 @@ public class MountService implements INetworkDispatch { } if (pcd == null) { - actor.sendSystemMessage(OutOfBand.ProsePackage("@pet_menu:cant_call"), DisplayType.Broadcast); + actor.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:cant_call"), DisplayType.Broadcast); return; } if (isMounted(actor)) { - actor.sendSystemMessage(OutOfBand.ProsePackage("@pet_menu:cannot_call_another_rideable"), DisplayType.Broadcast); + actor.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:cannot_call_another_rideable"), DisplayType.Broadcast); return; } - if (actor.getCombatFlag() == 1) { - actor.sendSystemMessage(OutOfBand.ProsePackage("@pet_menu:cannot_call_in_combat"), DisplayType.Broadcast); + if (actor.isInCombat()) { + actor.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:cannot_call_in_combat"), DisplayType.Broadcast); return; } if (actor.getContainer() != null) { - actor.sendSystemMessage(OutOfBand.ProsePackage("@pet_menu:cannot_call_indoors"), DisplayType.Broadcast); + actor.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:cannot_call_indoors"), DisplayType.Broadcast); return; } if (actor.getPosture() == Posture.Dead) { - actor.sendSystemMessage(OutOfBand.ProsePackage("@pet_menu:cannot_call_while_dead"), DisplayType.Broadcast); + actor.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:cannot_call_while_dead"), DisplayType.Broadcast); return; } if (pcd.getSlottedObject("inventory") == null) { - actor.sendSystemMessage(OutOfBand.ProsePackage("@pet_menu:cant_call"), DisplayType.Broadcast); + actor.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:cant_call"), DisplayType.Broadcast); return; } if (pcd.getStringAttribute("required_faction") != null && pcd.getStringAttribute("required_faction").length() > 0) { if (!actor.getFaction().equals(pcd.getStringAttribute("required_faction"))) { - actor.sendSystemMessage(OutOfBand.ProsePackage("@pet_menu:officer_faction"), DisplayType.Broadcast); + actor.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:officer_faction"), DisplayType.Broadcast); return; } } @@ -176,7 +175,7 @@ public class MountService implements INetworkDispatch { if (mount == null) { // Somehow the vehicle object has got lost - actor.sendSystemMessage(OutOfBand.ProsePackage("@pet_menu:cant_call"), DisplayType.Broadcast); + actor.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:cant_call"), DisplayType.Broadcast); return; } @@ -184,6 +183,7 @@ public class MountService implements INetworkDispatch { mount.setFaction(actor.getFaction()); mount.setFactionStatus(actor.getFactionStatus()); + mount.setOwnerId(actor.getObjectID()); if (pcd.getTemplate().contains("vehicle")) { callVehicle(actor, pcd, player, mount); @@ -194,24 +194,24 @@ public class MountService implements INetworkDispatch { private void callVehicle(CreatureObject actor, SWGObject pcd, PlayerObject player, CreatureObject mount) { if ((mount.getLevel() - actor.getLevel()) > 5) { - actor.sendSystemMessage(OutOfBand.ProsePackage("@pet_menu:cant_call_level"), DisplayType.Broadcast); + actor.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:cant_call_level"), DisplayType.Broadcast); return; } // FIXME Movement skillmod should always be used instead of CREO4 speed vars directly. Movement skillmod should NEVER be 0 unless rooted. Currently it is, which is wrong. //if (actor.getSkillModBase("movement") == 0) { - //actor.sendSystemMessage(OutOfBand.ProsePackage("@pet_menu:cant_call_vehicle_rooted"), DisplayType.Broadcast); + //actor.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:cant_call_vehicle_rooted"), DisplayType.Broadcast); //return; //} if (actor.getPlanet().getName().contains("kashyyyk") && !actor.getPlanet().getName().contains("_main")) { - actor.sendSystemMessage(OutOfBand.ProsePackage("@pet_menu:vehicle_restricted_scene"), DisplayType.Broadcast); + actor.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:vehicle_restricted_scene"), DisplayType.Broadcast); //mount_restricted_scene for creature mounts return; } if (player.isCallingCompanion()) { - actor.sendSystemMessage(OutOfBand.ProsePackage("@pet_menu:cant_call_1sec"), DisplayType.Broadcast); + actor.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:cant_call_1sec"), DisplayType.Broadcast); return; } @@ -220,7 +220,7 @@ public class MountService implements INetworkDispatch { player.setCallingCompanion(true); if (actor.getTefTime() > 0) { - actor.sendSystemMessage(OutOfBand.ProsePackage("@pet_menu:call_vehicle_delay", actor.getTefTime()), DisplayType.Broadcast); + actor.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:call_vehicle_delay", actor.getTefTime()), DisplayType.Broadcast); } try { @@ -284,7 +284,7 @@ public class MountService implements INetworkDispatch { return; } - if (mount.getConditionDamage() >= mount.getMaxDamage()) { + if (mount.getConditionDamage() >= mount.getMaximumCondition()) { disable(mount); } } @@ -303,7 +303,7 @@ public class MountService implements INetworkDispatch { dismount(rider, mount); - rider.sendSystemMessage(OutOfBand.ProsePackage("@pet_menu:veh_disabled"), DisplayType.Broadcast); + rider.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:veh_disabled"), DisplayType.Broadcast); } }); @@ -361,12 +361,12 @@ public class MountService implements INetworkDispatch { } if (mount.getOption(Options.DISABLED)) { - repairer.sendSystemMessage(OutOfBand.ProsePackage("@pet_menu:cannot_repair_disabled"), DisplayType.Broadcast); + repairer.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:cannot_repair_disabled"), DisplayType.Broadcast); return; } if (mount.getConditionDamage() == 0) { - repairer.sendSystemMessage(OutOfBand.ProsePackage("@pet_menu:undamaged_vehicle"), DisplayType.Broadcast); + repairer.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:undamaged_vehicle"), DisplayType.Broadcast); return; } @@ -374,14 +374,14 @@ public class MountService implements INetworkDispatch { // But at the moment it's not important. if (!canRepair(repairer, mount)) { - repairer.sendSystemMessage(OutOfBand.ProsePackage("@pet_menu:repair_unrecognized_garages"), DisplayType.Broadcast); + repairer.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:repair_unrecognized_garages"), DisplayType.Broadcast); return; } int cost = mount.getConditionDamage(); if (repairer.getCashCredits() < cost) { - repairer.sendSystemMessage(OutOfBand.ProsePackage("@pet_menu:repair_failed_due_to_funds"), DisplayType.Broadcast); + repairer.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:repair_failed_due_to_funds"), DisplayType.Broadcast); return; } @@ -389,7 +389,7 @@ public class MountService implements INetworkDispatch { mount.setOptions(Options.DISABLED, false); - repairer.sendSystemMessage(OutOfBand.ProsePackage("@pet_menu:repaired_to_max"), DisplayType.Broadcast); + repairer.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:repaired_to_max"), DisplayType.Broadcast); } public void mount(CreatureObject rider, CreatureObject mount) { @@ -408,35 +408,33 @@ public class MountService implements INetworkDispatch { } if (mount.getOption(Options.DISABLED)) { - rider.sendSystemMessage(OutOfBand.ProsePackage("@pet_menu:cant_mount_veh_disabled"), DisplayType.Broadcast); + rider.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:cant_mount_veh_disabled"), DisplayType.Broadcast); return; } if (rider.isInStealth()) { - rider.sendSystemMessage(OutOfBand.ProsePackage("@pet_menu:no_mount_stealth"), DisplayType.Broadcast); + rider.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:no_mount_stealth"), DisplayType.Broadcast); return; } if (!canMount(rider, mount)) { - rider.sendSystemMessage(OutOfBand.ProsePackage("@pet_menu:cant_mount"), DisplayType.Broadcast); + rider.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:cant_mount"), DisplayType.Broadcast); return; } - // Put rider into mount mount._add(rider); - - // Set mount states and stuff - mount.setStateBitmask(mount.getStateBitmask() | State.MountedCreature); - mount.setState(State.MountedCreature, true); - rider.setPosture((mount.getTemplate().contains("vehicle")) ? Posture.DrivingVehicle : Posture.RidingCreature); - - // Set rider states and stuff - rider.setStateBitmask(rider.getStateBitmask() | State.RidingMount); - rider.setState(State.RidingMount, true); - - // Notify observers and update quadtree mount.notifyObservers(new UpdateContainmentMessage(rider.getObjectID(), mount.getObjectID(), 4), true); core.simulationService.remove(rider, rider.getWorldPosition().x, rider.getWorldPosition().z, false); + + rider.setState(State.RidingMount, true); + mount.setState(State.MountedCreature, true); + + // For some reason SOE decided the mount would need the following posture to be set for the character to have the driving or riding animation. + mount.setPosture((mount.getTemplate().contains("vehicle")) ? Posture.DrivingVehicle : Posture.RidingCreature); + + if (!mount.getSlotNameForObject(rider).equals("rider1")) { + core.buffService.addBuffToCreature(rider, "vehicle_passenger", mount); + } } public CreatureObject getMount(SWGObject pcd) { @@ -553,7 +551,11 @@ public class MountService implements INetworkDispatch { LongAdder adder = new LongAdder(); - mount.getSlottedObject("inventory").viewChildren(mount, false, false, (obj) -> adder.increment()); + try { + mount.viewChildren(mount, false, false, (object) -> adder.increment()); + } catch(Exception ex) { + + } int passengers = adder.intValue(); @@ -591,8 +593,7 @@ public class MountService implements INetworkDispatch { } public void dismount(CreatureObject rider, CreatureObject mount) { - // Check if mount is currently mounted // Not necessary since nobody'll be dismounted if so - + if (rider == null || mount == null) { return; } @@ -607,12 +608,12 @@ public class MountService implements INetworkDispatch { // Dismount all passengers if (rider.getObjectID() == mount.getOwnerId()) { - CreatureObject owner = rider; - mount.viewChildren(owner, false, false, new Traverser() { - - public void process(SWGObject passenger) { - if (passenger != owner) dismount(rider, mount); + mount.viewChildren(mount, false, false, new Traverser() + { + public void process(SWGObject passenger) + { + if (passenger.getObjectId() != mount.getOwnerId()) dismount((CreatureObject) passenger, mount); } }); @@ -637,6 +638,9 @@ public class MountService implements INetworkDispatch { core.simulationService.teleport(rider, mount.getWorldPosition(), mount.getOrientation(), 0); core.simulationService.add(rider, mount.getWorldPosition().x, mount.getWorldPosition().z, false); + core.buffService.clearBuffs(mount); + core.buffService.removeBuffFromCreature(rider, rider.getBuffByName("vehicle_passenger")); + // Store mount if it's a creature if (!mount.getTemplate().contains("vehicle") && rider.getObjectID() == mount.getOwnerId()) { store(rider, mount); @@ -665,17 +669,17 @@ public class MountService implements INetworkDispatch { PlayerObject player = (PlayerObject) owner.getSlottedObject("ghost"); if (player.isCallingCompanion()) { - storer.sendSystemMessage(OutOfBand.ProsePackage("@pet_menu:cant_store_1sec"), DisplayType.Broadcast); + storer.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:cant_store_1sec"), DisplayType.Broadcast); return; } if (isMounted(owner, mount)) { - storer.sendSystemMessage(OutOfBand.ProsePackage("@pet_menu:must_dismount"), DisplayType.Broadcast); + storer.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:must_dismount"), DisplayType.Broadcast); return; } if (owner.getTefTime() > 0) { - owner.sendSystemMessage(OutOfBand.ProsePackage("@pet_menu:prose_cant_store_yet", owner.getTefTime()), DisplayType.Broadcast); + owner.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:prose_cant_store_yet", owner.getTefTime()), DisplayType.Broadcast); return; } @@ -763,9 +767,9 @@ public class MountService implements INetworkDispatch { core.objectService.destroyObject(pcd); if (type.contains("vehicle")) { - destroyer.sendSystemMessage(OutOfBand.ProsePackage("@pet_menu:vehicle_released"), DisplayType.Broadcast); + destroyer.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:vehicle_released"), DisplayType.Broadcast); } else { - destroyer.sendSystemMessage(OutOfBand.ProsePackage("@pet_menu:pet_released"), DisplayType.Broadcast); + destroyer.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:pet_released"), DisplayType.Broadcast); } } diff --git a/src/services/playercities/PlayerCity.java b/src/services/playercities/PlayerCity.java index 34afeef9..64af777d 100644 --- a/src/services/playercities/PlayerCity.java +++ b/src/services/playercities/PlayerCity.java @@ -21,6 +21,7 @@ ******************************************************************************/ package services.playercities; +import java.io.Serializable; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; @@ -40,9 +41,12 @@ import engine.resources.scene.Point3D; * @author Charon */ -public class PlayerCity { +public class PlayerCity implements Serializable { + + private static final long serialVersionUID = 1L; public static final int DESERTED = 0; + public static final int NEWCITY = 0; public static final int OUTPOST = 1; public static final int VILLAGE = 2; public static final int TOWNSHIP = 3; @@ -106,8 +110,11 @@ public class PlayerCity { private boolean registered = false; private boolean zoningEnabled = false; - private final long cityUpdateSpan = 7*86400*1000; - private final long legislationPeriod = 21*86400*1000; + //private final long cityUpdateSpan = 7*86400*1000; + private final long cityUpdateSpan = 100*1000; + + //private final long legislationPeriod = 21*86400*1000; + private final long legislationPeriod = 100*1000; private Vector placedStructures = new Vector(); private Vector citizens = new Vector(); @@ -129,6 +136,7 @@ public class PlayerCity { setNextElectionDate(foundationTime+legislationPeriod); citizens.add(founder.getObjectID()); this.cityID = cityID; + setMayorID(founder.getObjectID()); } public void handleGrantZoning() { @@ -156,36 +164,67 @@ public class PlayerCity { public void processCityUpdate() { // has something changed? System.out.println("processCityUpdate"); - int censusResult = citizens.size(); - // ToDo: Consider 1 rank per update changes - if (censusResult<5){ - setRank(DESERTED); // City is technically not a city anymore - setCityRadius(0); - } + int censusResult = citizens.size(); + int currentRank = getRank(); - if (censusResult>=5 && censusResult<10){ - setRank(OUTPOST); - setCityRadius(150); - } + switch (currentRank) { + case NEWCITY : if (censusResult>=5){ + setRank(++currentRank); // Expand to Outpost + sendCityExpandMailAll(); + } + + if (censusResult<5){ + // kill city + } + break; + + case OUTPOST : if (censusResult>=10){ + setRank(++currentRank); // Expand to Village + sendCityExpandMailAll(); + } + if (censusResult<5){ + setRank(--currentRank); // Contract to Deserted + sendCityContractMailAll(); + } + break; + + case VILLAGE : if (censusResult>=15){ + setRank(++currentRank); // Expand to Township + sendCityExpandMailAll(); + } + if (censusResult<10){ + setRank(--currentRank); // Contract to Outpost + sendCityContractMailAll(); + } + break; + + case TOWNSHIP : if (censusResult>=30){ + setRank(++currentRank); // Expand to City + sendCityExpandMailAll(); + } + if (censusResult<15){ + setRank(--currentRank); // Contract to Village + sendCityContractMailAll(); + } + break; + + case CITY : if (censusResult>=40){ + setRank(++currentRank); // Expand to Metropolis + sendCityExpandMailAll(); + } + if (censusResult<15){ + setRank(--currentRank); // Contract to Township + sendCityContractMailAll(); + } + break; + + case METROPOLIS : if (censusResult<40){ + setRank(--currentRank); // Contract to City + sendCityContractMailAll(); + } + break; + - if (censusResult>=10 && censusResult<15){ - setRank(VILLAGE); - setCityRadius(200); - } - - if (censusResult>=15 && censusResult<30){ - setRank(TOWNSHIP); - setCityRadius(300); - } - - if (censusResult>=30 && censusResult<40){ - setRank(CITY); - setCityRadius(400); - } - - if (censusResult>=40){ - setRank(METROPOLIS); - setCityRadius(450); } // collect taxes @@ -212,6 +251,10 @@ public class PlayerCity { setNextCityUpdate(System.currentTimeMillis()+cityUpdateSpan); } + public void cityFixUp(){ + + } + public void demolishHighRankStructures() { // Check if there are any structures in the city // that require a higher rank than the current one @@ -263,8 +306,10 @@ public class PlayerCity { if (citizenList.contains(founderId) && (long)citizenObject.getAttachment("residentCity")==this.getCityID()) founderCitizenCount++; } - if (founderCitizenCount==founders.size()) - return true; // All founders are citizens now + if (founderCitizenCount==founders.size()){ + return true; // All founders are citizens now + + } return false; } @@ -415,6 +460,14 @@ public class PlayerCity { electionVotes.add(vote); } + public void addToTreasury(int amountToAdd) { + cityTreasury += amountToAdd; + } + + public void removeFromTreasury(int amountToDeduct) { + cityTreasury -= amountToDeduct; + } + // Stalinesque method :D public void setElectionVotes(Vector electionVotes) { this.electionVotes = electionVotes; @@ -475,6 +528,7 @@ public class PlayerCity { public void setCityName(String cityName) { this.cityName = cityName; sendNameChangeMail(cityName); + return; } public int getCityID() { @@ -548,6 +602,20 @@ public class PlayerCity { public void setZoningEnabled(boolean zoningEnabled) { this.zoningEnabled = zoningEnabled; } + + public boolean isMilitiaMember(long actor){ + if (getMilitiaList().contains(actor)) + return true; + + return false; + } + + public boolean hasCitizen(long actor){ + if (getCitizens().contains(actor)) + return true; + + return false; + } public static String[] getSpecialisationSTFNames() { return specialisationSTFNames; @@ -562,7 +630,7 @@ public class PlayerCity { // city_version_update_body_4 Vector citizenList = getCitizens(); for (long citizen : citizenList){ - CreatureObject citizenObject = (CreatureObject) NGECore.getInstance().objectService.getObject(citizen); +// CreatureObject citizenObject = (CreatureObject) NGECore.getInstance().objectService.getObject(citizen); Mail actorMail = new Mail(); actorMail.setMailId(NGECore.getInstance().chatService.generateMailId()); actorMail.setRecieverId(citizen); @@ -695,5 +763,95 @@ public class PlayerCity { } } + + public void sendCityExpandMailAll() { + Vector citizenList = getCitizens(); + for (long citizen : citizenList){ + CreatureObject citizenObject = (CreatureObject) NGECore.getInstance().objectService.getObject(citizen); + Mail actorMail = new Mail(); + actorMail.setMailId(NGECore.getInstance().chatService.generateMailId()); + actorMail.setRecieverId(citizen); + actorMail.setStatus(Mail.NEW); + actorMail.setTimeStamp((int) (new Date().getTime() / 1000)); + actorMail.setMessage("@city/city:city_expand_body"); + actorMail.setSubject("@city/city:city_expand_subject"); + actorMail.setSenderName("City " + this.cityName); + + List attachments = new ArrayList(); + WaypointObject constructionWaypoint = (WaypointObject)NGECore.getInstance().objectService.createObject("object/waypoint/shared_world_waypoint_blue.iff", citizenObject.getPlanet(), citizenObject.getPosition().x, 0 ,citizenObject.getPosition().z); + WaypointAttachment attachment = new WaypointAttachment(); + attachment.active = false; + attachment.cellID = constructionWaypoint.getCellId(); + attachment.color = (byte)1; + attachment.name = "City"; + attachment.planetCRC = engine.resources.common.CRC.StringtoCRC(citizenObject.getPlanet().getName()); + attachment.positionX = citizenObject.getPosition().x; + attachment.positionY = 0; + attachment.positionZ = citizenObject.getPosition().z; + attachments.add(attachment); + actorMail.setAttachments(attachments); + + NGECore.getInstance().chatService.storePersistentMessage(actorMail); + + } + } + + public void sendCityContractMailAll() { + + Vector citizenList = getCitizens(); + for (long citizen : citizenList){ + CreatureObject citizenObject = (CreatureObject) NGECore.getInstance().objectService.getObject(citizen); + Mail actorMail = new Mail(); + actorMail.setMailId(NGECore.getInstance().chatService.generateMailId()); + actorMail.setRecieverId(citizen); + actorMail.setStatus(Mail.NEW); + actorMail.setTimeStamp((int) (new Date().getTime() / 1000)); + actorMail.setMessage("@city/city:city_contract_body"); + actorMail.setSubject("@city/city:city_contract_subject"); + actorMail.setSenderName("City " + this.cityName); + + List attachments = new ArrayList(); + WaypointObject constructionWaypoint = (WaypointObject)NGECore.getInstance().objectService.createObject("object/waypoint/shared_world_waypoint_blue.iff", citizenObject.getPlanet(), citizenObject.getPosition().x, 0 ,citizenObject.getPosition().z); + WaypointAttachment attachment = new WaypointAttachment(); + attachment.active = false; + attachment.cellID = constructionWaypoint.getCellId(); + attachment.color = (byte)1; + attachment.name = "City"; + attachment.planetCRC = engine.resources.common.CRC.StringtoCRC(citizenObject.getPlanet().getName()); + attachment.positionX = citizenObject.getPosition().x; + attachment.positionY = 0; + attachment.positionZ = citizenObject.getPosition().z; + attachments.add(attachment); + actorMail.setAttachments(attachments); + + NGECore.getInstance().chatService.storePersistentMessage(actorMail); + } + } + + + + + // Test method to be deleted later + public void Add10MoreCitizens() { + synchronized(citizens){ + for (int i=0;i<10;i++){ + this.citizens.add(this.getMayorID()); + } + + } + } + + + // Test method to be deleted later + public void Deduct10Citizens() { + int citizenCount = this.getCitizens().size(); + synchronized(citizens){ + this.citizens.clear(); + + for (int i=0;i playerCities = new Vector(); private int cityID = 0; // This must be persisted or handled via objectservice somehow + // static helper variable to be deleted later + public static boolean sandboxCityBuilt = false; + public PlayerCityService(NGECore core) { this.core = core; @@ -95,7 +102,8 @@ public class PlayerCityService implements INetworkDispatch { synchronized(playerCities){ for (PlayerCity city : playerCities){ int radius = city.getCityRadius(); - if (object.getPosition().getDistance2D(city.getCityCenterPosition()) returnList = new Vector(); + returnList.add("txtInput:LocalText"); + window.addHandler(0, "", Trigger.TRIGGER_OK, returnList, new SUICallback() { + @Override + public void process(SWGObject owner, int eventType, Vector returnList) { + if (returnList.size()==0) + return; + PlayerCity playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity((CreatureObject) owner); + playerCity.setCityName(returnList.get(0)); + //owner.sendSystemMessage("@city/city:name_changed", 0); + core.suiService.closeSUIWindow(owner, 0); + newCitySUI2((CreatureObject) owner, playerCity); + } + }); + core.suiService.openSUIWindow(window); + } + + public void newCitySUI2(CreatureObject citizen, final PlayerCity newCity) { final SUIWindow window = core.suiService.createSUIWindow("Script.messageBox", citizen, citizen, 0); window.setProperty("bg.caption.lblTitle:Text", "@city/city:rank0"); window.setProperty("Prompt.lblPrompt:Text", "@city/city:new_city_body"); @@ -135,6 +163,99 @@ public class PlayerCityService implements INetworkDispatch { }); core.suiService.openSUIWindow(window); } + + + // Test method to be deleted later + public void buildSandboxTestCity(CreatureObject founder) { + + if (sandboxCityBuilt) + return; + + float positionX = 2170.0F; + float positionY = 1.0F; + float positionZ = -4659.0F; + + String structureTemplate = "object/building/player/city/shared_cityhall_tatooine.iff"; + + BuildingObject cityHall = (BuildingObject) core.objectService.createObject(structureTemplate, 0, founder.getPlanet(), new Point3D(positionX, positionY, positionZ), founder.getOrientation()); + core.simulationService.add(cityHall, cityHall.getPosition().x, cityHall.getPosition().z, true); + + SWGObject sign = core.objectService.createChildObject((SWGObject)cityHall, "object/tangible/sign/player/shared_house_address.iff", -7.39F, 2.36F, 2, -1, 0, -1); + cityHall.setAttachment("structureSign", sign); + + PlayerCity sandboxCity = null; + synchronized(playerCities){ + sandboxCity = new PlayerCity(founder,cityID++); + sandboxCity.setCityName("Sandbox City"); + playerCities.add(sandboxCity); + } + + cityHall.setAttachment("structureCity", sandboxCity.getCityID()); + founder.setAttachment("residentCity", sandboxCity.getCityID()); + // Name the sign +// TangibleObject sign = (TangibleObject) cityHall.getAttachment("structureSign"); +// String playerFirstName = founder.getCustomName().split(" ")[0]; +// +// if (sign !=null) +// sign.setCustomName2(playerFirstName + "'s House"); + + + + // Structure management + Vector admins = new Vector<>(); + admins.add(founder.getObjectID()); + + cityHall.setAttachment("structureOwner", founder.getObjectID()); + cityHall.setAttachment("structureAdmins", admins); + cityHall.setDeedTemplate("object/tangible/deed/city_deed/shared_cityhall_tatooine_deed.iff"); + cityHall.setBMR(325); + cityHall.setConditionDamage(100); + + + positionY = core.terrainService.getHeight(founder.getPlanetId(), positionX, positionZ); + founder.setPosition(new Point3D(positionX,positionY,positionZ+50)); + core.simulationService.teleport(founder, new Point3D(positionX,positionY,positionZ+50), founder.getOrientation(), 0); + + TangibleObject swoopDeed = (TangibleObject) core.objectService.createObject("object/tangible/deed/vehicle_deed/shared_speederbike_swoop_deed.iff", founder.getPlanet()); + SWGObject inventory = founder.getSlottedObject("inventory"); + inventory.add(swoopDeed); + + TangibleObject shuttleportDeed = (TangibleObject) core.objectService.createObject("object/tangible/deed/city_deed/shared_shuttleport_tatooine_deed.iff", founder.getPlanet()); + inventory.add(shuttleportDeed); + + TangibleObject garden1 = (TangibleObject) core.objectService.createObject("object/tangible/deed/city_deed/shared_garden_tatooine_sml_01_deed.iff", founder.getPlanet()); + inventory.add(garden1); + + + //structureTemplate = "object/building/player/city/shared_shuttleport_tatooine.iff"; + structureTemplate = "object/building/tatooine/shared_shuttleport_tatooine.iff"; + positionX = 2170.0F; + positionY = 1.0F; + positionZ = -4559.0F; + positionY = core.terrainService.getHeight(founder.getPlanetId(), positionX, positionZ); + + //StructureObject shuttlePort = (StructureObject) core.objectService.createObject(structureTemplate, 0, founder.getPlanet(), new Point3D(positionX, positionY, positionZ), founder.getOrientation()); + //BuildingObject shuttlePort = (BuildingObject) core.objectService.createObject(structureTemplate, 0, founder.getPlanet(), new Point3D(positionX, positionY, positionZ), founder.getOrientation()); + //shuttlePort.setAttachment("cellsSorted", new Boolean(true)); + //"bigSpawnRange" + + //core.simulationService.add(shuttlePort, shuttlePort.getPosition().x, shuttlePort.getPosition().z, true); +// sign = core.objectService.createChildObject((SWGObject)shuttlePort, "object/tangible/sign/player/shared_house_address.iff", -7.39F, 2.36F, 2, -1, 0, -1); +// shuttlePort.setAttachment("structureSign", sign); + + // Structure management + admins = new Vector<>(); + admins.add(founder.getObjectID()); + +// shuttlePort.setAttachment("structureOwner", founder.getObjectID()); +// shuttlePort.setAttachment("structureAdmins", admins); +// shuttlePort.setDeedTemplate("object/tangible/deed/city_deed/shared_cityhall_tatooine_deed.iff"); +// shuttlePort.setBMR(12); +// shuttlePort.setConditionDamage(100); + + sandboxCityBuilt = true; + } + @Override public void insertOpcodes(Map arg0, diff --git a/src/services/resources/HarvesterService.java b/src/services/resources/HarvesterService.java index 7dd955eb..5055431f 100644 --- a/src/services/resources/HarvesterService.java +++ b/src/services/resources/HarvesterService.java @@ -47,14 +47,15 @@ import main.NGECore; import engine.clients.Client; import engine.resources.common.CRC; import engine.resources.container.Traverser; +import engine.resources.database.ODBCursor; import engine.resources.objects.SWGObject; +import engine.resources.scene.Planet; import engine.resources.scene.Point3D; import engine.resources.scene.Quaternion; import engine.resources.service.INetworkDispatch; import engine.resources.service.INetworkRemoteEvent; import resources.common.ObjControllerOpcodes; import resources.objects.creature.CreatureObject; -import resources.objects.deed.Harvester_Deed; import resources.objects.harvester.HarvesterMessageBuilder; import resources.objects.harvester.HarvesterObject; import resources.objects.installation.InstallationObject; @@ -83,7 +84,7 @@ public class HarvesterService implements INetworkDispatch { private Vector allConstructors = new Vector(); public HarvesterService(NGECore core) { - this.core = core; + this.core = core; //core.commandService.registerCommand("permissionlistmodify"); //core.commandService.registerCommand("harvesterselectresource"); //core.commandService.registerCommand("harvesteractivate"); @@ -96,6 +97,35 @@ public class HarvesterService implements INetworkDispatch { scheduleHarvesterService(); } + public void loadHarvesters() { + ODBCursor cursor = core.getSWGObjectODB().getCursor(); + + while(cursor.hasNext()) { + final SWGObject harvester = (SWGObject) cursor.next(); + if(!(harvester instanceof HarvesterObject) || harvester == null) + continue; + core.objectService.getObjectList().put(harvester.getObjectID(), harvester); + Planet planet = core.terrainService.getPlanetByID(harvester.getPlanetId()); + harvester.setPlanet(planet); + harvester.viewChildren(harvester, true, true, (object) -> { + core.objectService.getObjectList().put(object.getObjectID(), object); + if(object.getParentId() != 0 && object.getContainer() == null) + object.setParent(harvester); + object.getContainerInfo(object.getTemplate()); + }); + allHarvesters.add((HarvesterObject) harvester); + } + + cursor.close(); + } + + public void saveHarvesters() { + for(HarvesterObject harvester : allHarvesters) { + core.objectService.persistObject(harvester.getObjectID(), harvester, core.getSWGObjectODB()); + } + } + + @Override public void insertOpcodes(Map swgOpcodes, Map objControllerOpcodes) { @@ -332,8 +362,7 @@ public class HarvesterService implements INetworkDispatch { }); window.addHandler(1, "", Trigger.TRIGGER_CANCEL, returnList, new SUICallback() { @Override - public void process(SWGObject owner, int eventType, Vector returnList) { - CreatureObject crafter = (CreatureObject)owner; + public void process(SWGObject owner, int eventType, Vector returnList) { core.suiService.closeSUIWindow(owner, 0); } }); @@ -439,19 +468,26 @@ public class HarvesterService implements INetworkDispatch { // handle creation of correct deed in player inventory PlayerObject player = (PlayerObject) crafter.getSlottedObject("ghost"); String deedTemplate = harvester.getDeedTemplate(); - Harvester_Deed deed = (Harvester_Deed)core.objectService.createObject(deedTemplate, owner.getPlanet()); - if(player.getLotsRemaining()+deed.getLotRequirement()>10){ + TangibleObject deed = (TangibleObject) core.objectService.createObject(deedTemplate, owner.getPlanet()); + + if (player.getLotsRemaining() + (Integer) deed.getAttachment("LotRequirement") > 10) { // Something went wrong or hacking attempt crafter.sendSystemMessage("Structure can't be redeeded. Maximum lot count exceeded.",(byte)1); return; } - deed.setStructureTemplate(harvester.getTemplate()); - deed.setOutputHopperCapacity(harvester.getOutputHopperCapacity()); - deed.setBER(harvester.getBER()); - deed.setSurplusMaintenance((int)harvester.getMaintenanceAmount()); - deed.setSurplusPower((int)harvester.getPowerLevel()); - deed.setAttributes(); + deed.setAttachment("StructureTemplate", harvester.getTemplate()); + + if (harvester.getMaintenanceAmount() > 0) { + deed.setIntAttribute("examine_maintenance", (int) harvester.getMaintenanceAmount()); + } + + if (harvester.getPowerLevel() > 0) { + deed.setIntAttribute("examine_power", (int) harvester.getPowerLevel()); + } + + deed.setIntAttribute("examine_hoppersize", harvester.getOutputHopperCapacity()); + deed.setIntAttribute("examine_extractionrate", harvester.getBER()); removeHarvester(harvester); core.objectService.destroyObject(harvester.getObjectID()); @@ -459,8 +495,9 @@ public class HarvesterService implements INetworkDispatch { SWGObject crafterInventory = owner.getSlottedObject("inventory"); crafterInventory.add(deed); - if(player.getLotsRemaining()+deed.getLotRequirement()<=10) - player.setLotsRemaining(player.getLotsRemaining()+deed.getLotRequirement()); + if (player.getLotsRemaining() + (Integer) deed.getAttachment("LotRequirement") <= 10) { + player.setLotsRemaining(player.getLotsRemaining() + (Integer) deed.getAttachment("LotRequirement")); + } crafter.sendSystemMessage("@player_structure:processing_destruction",(byte)1); crafter.sendSystemMessage("@player_structure:deed_reclaimed",(byte)1); @@ -651,7 +688,7 @@ public class HarvesterService implements INetworkDispatch { } return 0; } - } + } public void handlePermissionAdmin(CreatureObject owner, TangibleObject target) { @@ -814,11 +851,9 @@ public class HarvesterService implements INetworkDispatch { ResourceContainerObject containerObject = (ResourceContainerObject) core.objectService.createObject(resourceContainerIFF, owner.getPlanet()); containerObject.initializeStats(sampleResource); containerObject.setProprietor(owner); - containerObject.setStackCount(stackcount,owner); - int resCRC = CRC.StringtoCRC(resourceContainerIFF); + containerObject.setStackCount(stackcount,owner); containerObject.setIffFileName(resourceContainerIFF); - long objectId = containerObject.getObjectID(); SWGObject crafterInventory = owner.getSlottedObject("inventory"); // SceneCreateObjectByCrc createObjectMsg = new SceneCreateObjectByCrc(objectId, owner.getOrientation().x, owner.getOrientation().y, owner.getOrientation().z, owner.getOrientation().w, owner.getPosition().x, owner.getPosition().y, owner.getPosition().z, resCRC, (byte) 0); @@ -927,11 +962,9 @@ public class HarvesterService implements INetworkDispatch { return container; } - - public void constructionSite(CreatureObject actor,SWGObject target, long objectId, float posX, float posZ, float dir){ - - SWGObject usedDeed = (SWGObject)actor.getAttachment("LastUsedDeed"); - String constructorTemplate = ((Harvester_Deed)usedDeed).getConstructorTemplate(); + public void constructionSite(CreatureObject actor, SWGObject target, long objectId, float posX, float posZ, float dir){ + SWGObject usedDeed = actor.getUseTarget(); //(SWGObject)actor.getAttachment("LastUsedDeed"); + String constructorTemplate = (String) usedDeed.getAttachment("ConstructorTemplate"); //String structureTemplate = "object/installation/mining_ore/construction/shared_construction_mining_ore_harvester_style_1.iff"; float positionY = core.terrainService.getHeight(actor.getPlanetId(), posX, posZ) + 2f; @@ -939,35 +972,48 @@ public class HarvesterService implements INetworkDispatch { quaternion = resources.common.MathUtilities.rotateQuaternion(quaternion, (float)((Math.PI/2) * dir), new Point3D(0, 1, 0)); InstallationObject installation = (InstallationObject) core.objectService.createObject(constructorTemplate, 0, actor.getPlanet(), new Point3D(posX, positionY, posZ), quaternion); + if (!usedDeed.getAttributes().containsKey("examine_extractionrate")) { + usedDeed.setIntAttribute("examine_extractionrate", 0); + } + + if (!usedDeed.getAttributes().containsKey("examine_hoppersize")) { + usedDeed.setIntAttribute("examine_hoppersize", 0); + } + + if (!usedDeed.getAttributes().containsKey("examine_maintenance")) { + usedDeed.setIntAttribute("examine_maintenance", 0); + } + + if (!usedDeed.getAttributes().containsKey("examine_power")) { + usedDeed.setIntAttribute("examine_power", 0); + } installation.setAttachment("ConstructionStart", System.currentTimeMillis()); - installation.setAttachment("Owner", actor); - installation.setAttachment("Deed_StructureTemplate", ((Harvester_Deed)usedDeed).getStructureTemplate()); - installation.setAttachment("Deed_DeedTemplate", ((Harvester_Deed)usedDeed).getTemplate()); - installation.setAttachment("Deed_BER", ((Harvester_Deed)usedDeed).getBER()); - installation.setAttachment("Deed_Capacity", ((Harvester_Deed)usedDeed).getOutputHopperCapacity()); - installation.setAttachment("Deed_DeedLots", ((Harvester_Deed)usedDeed).getLotRequirement()); - installation.setAttachment("Deed_SurplusMaintenance", ((Harvester_Deed)usedDeed).getSurplusMaintenance()); - installation.setAttachment("Deed_SurplusPower", ((Harvester_Deed)usedDeed).getSurplusPower()); + installation.setAttachment("ownerId", actor.getObjectID()); + installation.setAttachment("StructureTemplate", usedDeed.getAttachment("StructureTemplate")); + installation.setAttachment("Deed_DeedTemplate", usedDeed.getTemplate()); + installation.setAttachment("Deed_BER", usedDeed.getIntAttribute("examine_extractionrate")); + installation.setAttachment("Deed_Capacity", usedDeed.getIntAttribute("examine_hoppersize")); + installation.setAttachment("Deed_DeedLots", usedDeed.getAttachment("LotRequirement")); + installation.setAttachment("Deed_SurplusMaintenance", usedDeed.getIntAttribute("examine_maintenance")); + installation.setAttachment("Deed_SurplusPower", usedDeed.getIntAttribute("examine_power")); // destroy deed - TangibleObject playerInventory = (TangibleObject) actor.getSlottedObject("inventory"); - playerInventory.remove(usedDeed); + core.objectService.destroyObject(usedDeed); core.simulationService.add(installation, posX, posZ, true); PlayerObject player = (PlayerObject) actor.getSlottedObject("ghost"); - player.setLotsRemaining(player.getLotsRemaining()-(int)((Harvester_Deed)usedDeed).getLotRequirement()); + player.setLotsRemaining(player.getLotsRemaining() - (int) usedDeed.getAttachment("LotRequirement")); synchronized(allConstructors){ allConstructors.add(installation); } } public void placeHarvester(SWGObject object) { - CreatureObject actor = (CreatureObject) object.getAttachment("Owner"); - String structureTemplate = (String)object.getAttachment("Deed_StructureTemplate"); + CreatureObject actor = (CreatureObject) NGECore.getInstance().objectService.getObject((Long) object.getAttachment("ownerId")); + String structureTemplate = (String) object.getAttachment("StructureTemplate"); HarvesterObject harvester = (HarvesterObject) NGECore.getInstance().objectService.createObject(structureTemplate, actor.getPlanet()); - long objectId = harvester.getObjectID(); Vector adminList = harvester.getAdminList(); //String[] fullName = ((CreatureObject)actor).getCustomName().split(" "); adminList.add(actor.getCustomName()); @@ -1036,10 +1082,11 @@ public class HarvesterService implements INetworkDispatch { //NGECore.getInstance().chatService.sendPersistentMessage(actor.getClient(), constructionNotificationMail); NGECore.getInstance().chatService.storePersistentMessage(constructionNotificationMail); NGECore.getInstance().chatService.sendPersistentMessageHeader(actor.getClient(), constructionNotificationMail); + //core.objectService.persistObject(harvester.getObjectID(), harvester, core.getSWGObjectODB()); } - public void enterStructurePlacementMode(SWGObject object, CreatureObject actor){ + public void enterStructurePlacementMode(CreatureObject actor, SWGObject object){ if (!actor.getClient().isGM() && !core.terrainService.canBuildAtPosition(actor,actor.getPosition().x,actor.getPosition().z)){ actor.sendSystemMessage("@player_structure:not_permitted", (byte) 0); @@ -1047,13 +1094,12 @@ public class HarvesterService implements INetworkDispatch { } PlayerObject player = (PlayerObject) actor.getSlottedObject("ghost"); - if (((Harvester_Deed)object).getLotRequirement()>player.getLotsRemaining()){ + if (((Integer) object.getAttachment("LotRequirement")) > player.getLotsRemaining()){ actor.sendSystemMessage("@player_structure:not_enough_lots", (byte) 0); return; } - actor.setAttachment("LastUsedDeed", object); - String structureTemplate = ((Harvester_Deed)object).getStructureTemplate(); + String structureTemplate = (String) object.getAttachment("StructureTemplate"); //String temp = "object/installation/mining_ore/shared_mining_ore_harvester_style_1.iff"; EnterStructurePlacementModeMessage placementMsg = new EnterStructurePlacementModeMessage(actor,structureTemplate); actor.getClient().getSession().write(placementMsg.serialize()); @@ -1085,11 +1131,11 @@ public class HarvesterService implements INetworkDispatch { public void createExampleDeed(CreatureObject actor){ String templateString="object/tangible/deed/harvester_deed/shared_harvester_ore_s1_deed.iff"; - Harvester_Deed deed = (Harvester_Deed)core.objectService.createObject(templateString, actor.getPlanet()); - deed.setName("Example Harvester Deed"); - deed.setStructureTemplate("object/installation/mining_ore/shared_mining_ore_harvester_style_1.iff"); - deed.setOutputHopperCapacity(27344); - deed.setBER(15); + TangibleObject deed = (TangibleObject) core.objectService.createObject(templateString, actor.getPlanet()); + deed.setCustomName("Example Harvester Deed"); + deed.setAttachment("StructureTemplate", "object/installation/mining_ore/shared_mining_ore_harvester_style_1.iff"); + deed.setIntAttribute("examine_hoppersize", 27344); + deed.setIntAttribute("examine_extractionrate", 15); TangibleObject playerInventory = (TangibleObject) actor.getSlottedObject("inventory"); playerInventory.add(deed); diff --git a/src/services/resources/ResourceService.java b/src/services/resources/ResourceService.java index 0cb2cab1..78612dd9 100644 --- a/src/services/resources/ResourceService.java +++ b/src/services/resources/ResourceService.java @@ -22,28 +22,28 @@ package services.resources; import java.util.Hashtable; -import java.util.Iterator; import java.util.Map; import java.util.Random; import java.util.Vector; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; - -import com.sleepycat.persist.EntityCursor; +import java.util.concurrent.TimeUnit; import main.NGECore; -import engine.resources.common.CRC; +import engine.resources.database.ODBCursor; import engine.resources.objects.SWGObject; import engine.resources.scene.Planet; import engine.resources.scene.Point3D; import engine.resources.scene.Quaternion; import engine.resources.service.INetworkDispatch; import engine.resources.service.INetworkRemoteEvent; +import resources.datatables.MilkState; import resources.objects.creature.CreatureObject; import resources.objects.harvester.HarvesterObject; import resources.objects.resource.GalacticResource; import resources.objects.resource.ResourceContainerObject; import resources.objects.resource.ResourceRoot; +import services.ai.AIActor; /** * @author Charon @@ -114,15 +114,15 @@ public class ResourceService implements INetworkDispatch { // createCollections2(); // createCollections3(); // } else { - EntityCursor cursor = core.getResourceRootsODB().getCursor(Integer.class, ResourceRoot.class); - Iterator it = cursor.iterator(); - if(!it.hasNext()) { + ODBCursor cursor = core.getResourceRootsODB().getCursor(); + if(!cursor.hasNext()) { createCollections(); createCollections2(); createCollections3(); } // } - + core.commandService.registerCommand("harvestcorpse"); + core.commandService.registerCommand("milkcreature"); core.commandService.registerCommand("resourcecontainersplit"); core.commandService.registerCommand("resourcecontainertransfer"); core.commandService.registerCommand("factorycratesplit"); @@ -133,12 +133,11 @@ public class ResourceService implements INetworkDispatch { // loads the resource roots at server start public void loadResourceRoots() { - EntityCursor cursor = core.getResourceRootsODB().getCursor(Integer.class, ResourceRoot.class); - Iterator it = cursor.iterator(); + ODBCursor cursor = core.getResourceRootsODB().getCursor(); int loadedResourceRootsCounter = 0; System.out.println("Loading resource roots..."); - while(it.hasNext()) { - final ResourceRoot resourceRoot = it.next(); + while(cursor.hasNext()) { + final ResourceRoot resourceRoot = (ResourceRoot) cursor.next(); System.err.println("resourceRoot loaded ID: " + resourceRoot.getResourceRootID() + " " + resourceRoot.getResourceFileName()); core.resourceService.add_resourceRoot(resourceRoot); loadedResourceRootsCounter++; @@ -154,12 +153,11 @@ public class ResourceService implements INetworkDispatch { // loads the currently spawned resources at server start public void loadResources() { - EntityCursor cursor = core.getResourcesODB().getCursor(Long.class, GalacticResource.class); - Iterator it = cursor.iterator(); + ODBCursor cursor = core.getResourcesODB().getCursor(); int loadedResourceCounter = 0; System.out.println("Loading resources..."); - while(it.hasNext()) { - final GalacticResource resource = it.next(); + while(cursor.hasNext()) { + final GalacticResource resource = (GalacticResource) cursor.next(); System.err.println("resource " + resource.getName() + " rootID " + resource.getResourceRootID()); core.objectService.getObjectList().put(resource.getId(), resource); @@ -7246,7 +7244,7 @@ public class ResourceService implements INetworkDispatch { resourceRoot = new ResourceRoot(); resourceRoot.setResourceFileName("meat_carnivore_corellia"); - resourceRoot.setResourceClass("Canivore Meat"); + resourceRoot.setResourceClass("Carnivore Meat"); resourceRoot.setResourceType("Corellian"); resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); @@ -7262,7 +7260,7 @@ public class ResourceService implements INetworkDispatch { resourceRoot = new ResourceRoot(); resourceRoot.setResourceFileName("meat_carnivore_dantooine"); - resourceRoot.setResourceClass("Canivore Meat"); + resourceRoot.setResourceClass("Carnivore Meat"); resourceRoot.setResourceType("Dantooine"); resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); @@ -7277,7 +7275,7 @@ public class ResourceService implements INetworkDispatch { resourceRoot = new ResourceRoot(); resourceRoot.setResourceFileName("meat_carnivore_dathomir"); - resourceRoot.setResourceClass("Canivore Meat"); + resourceRoot.setResourceClass("Carnivore Meat"); resourceRoot.setResourceType("Dathomirian"); resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); @@ -7292,7 +7290,7 @@ public class ResourceService implements INetworkDispatch { resourceRoot = new ResourceRoot(); resourceRoot.setResourceFileName("meat_carnivore_endor"); - resourceRoot.setResourceClass("Canivore Meat"); + resourceRoot.setResourceClass("Carnivore Meat"); resourceRoot.setResourceType("Endorian"); resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); @@ -7307,7 +7305,7 @@ public class ResourceService implements INetworkDispatch { resourceRoot = new ResourceRoot(); resourceRoot.setResourceFileName("meat_carnivore_lok"); - resourceRoot.setResourceClass("Canivore Meat"); + resourceRoot.setResourceClass("Carnivore Meat"); resourceRoot.setResourceType("Lokian"); resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); @@ -7322,7 +7320,7 @@ public class ResourceService implements INetworkDispatch { resourceRoot = new ResourceRoot(); resourceRoot.setResourceFileName("meat_carnivore_naboo"); - resourceRoot.setResourceClass("Canivore Meat"); + resourceRoot.setResourceClass("Carnivore Meat"); resourceRoot.setResourceType("Nabooian"); resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); @@ -7337,7 +7335,7 @@ public class ResourceService implements INetworkDispatch { resourceRoot = new ResourceRoot(); resourceRoot.setResourceFileName("meat_carnivore_rori"); - resourceRoot.setResourceClass("Canivore Meat"); + resourceRoot.setResourceClass("Carnivore Meat"); resourceRoot.setResourceType("Rori"); resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); @@ -7352,7 +7350,7 @@ public class ResourceService implements INetworkDispatch { resourceRoot = new ResourceRoot(); resourceRoot.setResourceFileName("meat_carnivore_talus"); - resourceRoot.setResourceClass("Canivore Meat"); + resourceRoot.setResourceClass("Carnivore Meat"); resourceRoot.setResourceType("Talusian"); resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); @@ -7367,7 +7365,7 @@ public class ResourceService implements INetworkDispatch { resourceRoot = new ResourceRoot(); resourceRoot.setResourceFileName("meat_carnivore_tatooine"); - resourceRoot.setResourceClass("Canivore Meat"); + resourceRoot.setResourceClass("Carnivore Meat"); resourceRoot.setResourceType("Tatooinian"); resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); @@ -7382,7 +7380,7 @@ public class ResourceService implements INetworkDispatch { resourceRoot = new ResourceRoot(); resourceRoot.setResourceFileName("meat_carnivore_yavin4"); - resourceRoot.setResourceClass("Canivore Meat"); + resourceRoot.setResourceClass("Carnivore Meat"); resourceRoot.setResourceType("Yavinian"); resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); @@ -9326,7 +9324,7 @@ public class ResourceService implements INetworkDispatch { resourceRoot = new ResourceRoot(); resourceRoot.setResourceFileName("meat_carnivore_kashyyyk"); - resourceRoot.setResourceClass("Herbivore Meat"); + resourceRoot.setResourceClass("Carnivore Meat"); resourceRoot.setResourceType("Kashyyykian"); resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); @@ -10800,9 +10798,7 @@ public class ResourceService implements INetworkDispatch { for (int i=0;i getCompleteResourceNameHistory() { - return completeResourceNameHistory; + } + + public boolean canMilk(CreatureObject actor, CreatureObject target) { + + if(target.getPosture() == 14 || !actor.inRange(target.getWorldPosition(), 5) || actor.isInCombat() || target.isInCombat()) + return false; + + AIActor ai = (AIActor) target.getAttachment("AI"); + + if(ai.getMobileTemplate().getMilkAmount() <= 0 || ai.getMobileTemplate().getMilkType() == null || ai.getMilkState() == MilkState.MILKED || ai.getMilkState() == MilkState.MILKINGINPROGRESS) + return false; + + return true; + + } + + public boolean canHarvest(CreatureObject actor, CreatureObject target) { + + if(target.getPosture() != 14) + return false; + + AIActor ai = (AIActor) target.getAttachment("AI"); + + if(ai.getMobileTemplate().getMeatAmount() <= 0 && ai.getMobileTemplate().getBoneAmount() <= 0 && ai.getMobileTemplate().getHideAmount() <= 0) + return false; + + if(target.getKiller() != actor && !(actor.getGroupId() == target.getGroupId() && actor.getGroupId() != 0)) + return false; + + return true; + + } + + public void doHarvest(CreatureObject actor, CreatureObject target, String type) { + + AIActor ai = (AIActor) target.getAttachment("AI"); + + if(!actor.inRange(target.getWorldPosition(), 7)) { + actor.sendSystemMessage("You are too far away to harvest the creature.", (byte) 0); + return; } + + if(ai.hasBeenHarvested()) { + actor.sendSystemMessage("@skl_use:nothing_to_harvest", (byte) 0); + return; + } + + ai.setHasBeenHarvested(true); + + String resType = ""; + int resAmount = 0; + + switch(type) { + + case "hide": + resType = ai.getMobileTemplate().getHideType(); + resAmount = ai.getMobileTemplate().getHideAmount(); + break; + case "meat": + resType = ai.getMobileTemplate().getMeatType(); + resAmount = ai.getMobileTemplate().getMeatAmount(); + break; + case "bone": + resType = ai.getMobileTemplate().getBoneType(); + resAmount = ai.getMobileTemplate().getBoneAmount(); + break; + + } + + resAmount += (resAmount * (actor.getSkillModBase("creature_harvesting") / 100)); + GalacticResource res = grabResourceByClass(resType, target.getPlanetId()); + + if(res == null) { + actor.sendSystemMessage("@skl_use:nothing_to_harvest", (byte) 0); + ai.setHasBeenHarvested(false); + return; + } + + float density = res.deliverConcentrationForSurvey(target.getPlanetId(), target.getWorldPosition().x, target.getWorldPosition().z); + + if(density >= 0.8f) { + resAmount *= 1.25f; + } else if(density >= 0.6f) { + resAmount *= 1.f; + } else if(density >= 0.4f) { + resAmount *= 0.75f; + } else { + resAmount *= 0.5f; + } + + giveResource(actor, res, resAmount); + actor.sendSystemMessage("@skl_use:corpse_harvest_success", (byte) 0); + + } + + public void doMilk(CreatureObject actor, CreatureObject target) { + + AIActor ai = (AIActor) target.getAttachment("AI"); + ai.setMilkState(MilkState.MILKINGINPROGRESS); + actor.sendSystemMessage("@skl_use:milk_begin", (byte) 0); + + scheduler.schedule(() -> { + + if(actor.getInventoryItemCount() >= 80) { + actor.sendSystemMessage("@skl_use:milk_inventory_full", (byte) 0); + ai.setMilkState(MilkState.NOTYETMILKED); + return; + } + + if(target.getPosture() == 14) { + actor.sendSystemMessage("@skl_use:milk_cant_milk_the_dead", (byte) 0); + ai.setMilkState(MilkState.NOTYETMILKED); + return; + } + + if(!actor.inRange(target.getWorldPosition(), 5)) { + actor.sendSystemMessage("@skl_use:milk_too_far", (byte) 0); + ai.setMilkState(MilkState.NOTYETMILKED); + return; + } + + if(actor.isInCombat()) { + actor.sendSystemMessage("@skl_use:milk_combat", (byte) 0); + ai.setMilkState(MilkState.NOTYETMILKED); + return; + } + + if(new Random().nextFloat() <= 0.05f) { + actor.sendSystemMessage("@skl_use:milk_not_hidden", (byte) 0); + ai.setMilkState(MilkState.NOTYETMILKED); + ai.addDefender(actor); + return; + } + + giveMilk(actor, target); + + }, 10000, TimeUnit.MILLISECONDS); + + } + + public void giveMilk(CreatureObject actor, CreatureObject target) { + + AIActor ai = (AIActor) target.getAttachment("AI"); + String milkType = ai.getMobileTemplate().getMilkType(); + int milkAmount = ai.getMobileTemplate().getMilkAmount(); + + GalacticResource res = grabResourceByClass(milkType, target.getPlanetId()); + + if(res == null) { + actor.sendSystemMessage("Can't find milk resource.", (byte) 0); + ai.setMilkState(MilkState.NOTYETMILKED); + return; + } + + float density = res.deliverConcentrationForSurvey(target.getPlanetId(), target.getWorldPosition().x, target.getWorldPosition().z); + + if(density >= 0.8f) { + milkAmount *= 1.25f; + } else if(density >= 0.6f) { + milkAmount *= 1.f; + } else if(density >= 0.4f) { + milkAmount *= 0.75f; + } else { + milkAmount *= 0.5f; + } + + giveResource(actor, res, milkAmount); + ai.setMilkState(MilkState.MILKED); + actor.sendSystemMessage("@skl_use:milk_success", (byte) 0); + + } + + public Vector getCompleteResourceNameHistory() { + return completeResourceNameHistory; + } } diff --git a/src/services/spawn/DynamicSpawnArea.java b/src/services/spawn/DynamicSpawnArea.java index e588e4cd..f45e7196 100644 --- a/src/services/spawn/DynamicSpawnArea.java +++ b/src/services/spawn/DynamicSpawnArea.java @@ -21,28 +21,288 @@ ******************************************************************************/ package services.spawn; +import java.util.Collections; +import java.util.Random; +import java.util.Vector; + +import resources.datatables.Posture; +import main.NGECore; import net.engio.mbassy.listener.Handler; import resources.common.collidables.AbstractCollidable; import resources.common.collidables.AbstractCollidable.EnterEvent; import resources.common.collidables.AbstractCollidable.ExitEvent; +import resources.objects.creature.CreatureObject; +import services.TerrainService; +import services.SimulationService.MoveEvent; +import engine.resources.objects.SWGObject; import engine.resources.scene.Planet; +import engine.resources.scene.Point3D; public class DynamicSpawnArea extends SpawnArea { - public DynamicSpawnArea(Planet planet, AbstractCollidable area) { + private DynamicSpawnGroup spawnGroup; + private Vector spawnGroups; + private Vector mobiles = new Vector(); + + public DynamicSpawnArea(Planet planet, AbstractCollidable area, DynamicSpawnGroup spawnGroup) { super(planet, area); + this.spawnGroup = spawnGroup; + } + + public DynamicSpawnArea(Planet planet, AbstractCollidable area, Vector spawnGroups) { + super(planet, area); + this.spawnGroups = spawnGroups; } @Override @Handler public void onEnter(EnterEvent event) { + + SWGObject object = event.object; + if(object == null || !(object instanceof CreatureObject)) + return; + + CreatureObject creature = (CreatureObject) object; + + if(creature.getSlottedObject("ghost") == null) + return; + + creature.getEventBus().subscribe(this); + // spawn some creatures + if (spawnGroups==null){ + if (spawnGroup.getGroupMembersNumber()==-1){ + for(int i = 0; i < 5; i++) + spawnCreature(creature); + } else { + Vector groupMembers = new Vector(); + Point3D randomGroupPosition = getRandomPosition(creature.getWorldPosition(), 32, 100); + for(int i = 0; i < spawnGroup.getGroupMembersNumber(); i++) {// A group with a specified number of members + CreatureObject spawnedCreature = spawnCreatureMember(creature, groupMembers, randomGroupPosition, i); + if (spawnedCreature!=null) + groupMembers.add(spawnedCreature); + } + } + } else { + // select randomly one of the spawngroups -> minimizes number of collidables for areas with multiple different NPC groups + // One spawnarea -> many NPC groups + int index = new Random().nextInt(spawnGroups.size()); + this.spawnGroup = spawnGroups.get(index); + Vector groupMembers = new Vector(); + Point3D randomGroupPosition = getRandomPosition(creature.getWorldPosition(), 32, 100); + int spawnCount = spawnGroup.getGroupMembersNumber(); + if (spawnCount<0) + spawnCount = Math.abs(spawnCount) + new Random().nextInt(spawnGroup.getMobiles().size()-Math.abs(spawnCount)); + for(int i = 0; i < spawnCount; i++) {// A group with a specified or random number of members + CreatureObject spawnedCreature = spawnCreatureMember(creature, groupMembers, randomGroupPosition, i); + if (spawnedCreature!=null) + groupMembers.add(spawnedCreature); + } + } + } @Override @Handler public void onExit(ExitEvent event) { + SWGObject object = event.object; + + if(object == null || !(object instanceof CreatureObject)) + return; + + CreatureObject creature = (CreatureObject) object; + + if(creature.getSlottedObject("ghost") == null) + return; + + creature.getEventBus().unsubscribe(this); + + } + + @Handler + public void onMove(MoveEvent event) { + + SWGObject object = event.object; + + if(object == null || !(object instanceof CreatureObject) || object.getContainer() != null) + return; + + CreatureObject creature = (CreatureObject) object; + + if(creature.getSlottedObject("ghost") == null) + return; + + if (spawnGroups==null){ + if (spawnGroup.getGroupMembersNumber()==-1){ + if(new Random().nextFloat() <= 0.25) + spawnCreature(creature); + } else + { + Vector groupMembers = new Vector(); + Point3D randomGroupPosition = getRandomPosition(creature.getWorldPosition(), 32, 100); + for(int i = 0; i < spawnGroup.getGroupMembersNumber(); i++) {// A group with a specified number of members + CreatureObject spawnedCreature = spawnCreatureMember(creature, groupMembers, randomGroupPosition, i); + if (spawnedCreature!=null) + groupMembers.add(spawnedCreature); + } + } + } else { + // select randomly one of the spawngroups -> minimizes number of collidables for areas with multiple different NPC groups + // One spawnarea -> many NPC groups + int index = new Random().nextInt(spawnGroups.size()); + this.spawnGroup = spawnGroups.get(index); + Vector groupMembers = new Vector(); + Point3D randomGroupPosition = getRandomPosition(creature.getWorldPosition(), 32, 100); + int spawnCount = spawnGroup.getGroupMembersNumber(); + if (spawnCount<0) + spawnCount = Math.abs(spawnCount) + new Random().nextInt(spawnGroup.getMobiles().size()-Math.abs(spawnCount)); + for(int i = 0; i < spawnCount; i++) {// A group with a specified or random number of members + CreatureObject spawnedCreature = spawnCreatureMember(creature, groupMembers, randomGroupPosition, i); + if (spawnedCreature!=null) + groupMembers.add(spawnedCreature); + } + } + } + + private void spawnCreature(CreatureObject creature) { + + NGECore core = NGECore.getInstance(); + +// Iterator it = mobiles.iterator(); // This stops further execution of this method for some reason +// it.forEachRemaining(mobile -> { +// if(mobile.getPosture() == Posture.Dead) +// it.remove(); +// }); + + mobiles.removeAll(Collections.singleton(null)); + Vector removers = new Vector(); + for (CreatureObject ob : mobiles){ + if (ob.getPosture() == Posture.Dead) + removers.add(ob); + } + mobiles.removeAll(removers); + + if(mobiles.size() >= spawnGroup.getMaxSpawns()) + return; + + boolean foundPos = false; + int tries = 0; + Point3D randomPosition = null; + + while(!foundPos && ++tries < 10) { + + randomPosition = getRandomPosition(creature.getWorldPosition(), 32.f, 200.f); + + if(randomPosition == null) + return; + + TerrainService terrainSvc = core.terrainService; + + float height = terrainSvc.getHeight(getPlanet().getID(), randomPosition.x, randomPosition.z); + randomPosition.y = height; + + if (mobiles.size()>0){ // Fix, mobiles must be filled first, before doing this check + for(CreatureObject mobile : mobiles) { + if(mobile.getWorldPosition().getDistance(randomPosition) > spawnGroup.getMinSpawnDistance()) + foundPos = true; + } + } else {foundPos = true;} + + if(!terrainSvc.canBuildAtPosition(creature, randomPosition.x, randomPosition.z)) + foundPos = false; + + } + + if(!foundPos) + return; + + Random random = new Random(); + + String mobileTemplate = spawnGroup.getMobiles().get(random.nextInt(spawnGroup.getMobiles().size())); + CreatureObject spawnedCreature = core.spawnService.spawnCreature(mobileTemplate, getPlanet().getName(), 0, randomPosition.x, randomPosition.y, randomPosition.z); + if(spawnedCreature != null){ + mobiles.add(spawnedCreature); + } + + } + + + private CreatureObject spawnCreatureMember(CreatureObject creature, Vector groupMembers, Point3D randomGroupPosition, int spawnIndex) { + + NGECore core = NGECore.getInstance(); + +// Iterator it = mobiles.iterator(); // This stops further execution of this method for some reason +// it.forEachRemaining(mobile -> { +// if(mobile.getPosture() == Posture.Dead) +// it.remove(); +// }); + + mobiles.removeAll(Collections.singleton(null)); + Vector removers = new Vector(); + for (CreatureObject ob : mobiles){ + if (ob.getPosture() == Posture.Dead) + removers.add(ob); + } + mobiles.removeAll(removers); + +// if(mobiles.size() >= spawnGroup.getMaxSpawns()) +// return; + + boolean foundPos = false; + int tries = 0; + Point3D randomPosition = null; + String template = spawnGroup.getMobiles().get(spawnIndex); + MobileTemplate mobileTemplate = NGECore.getInstance().spawnService.getMobileTemplate(template); + if (mobileTemplate==null){ + System.out.println("mobileTemplate==null"); + return null; + } + + while(!foundPos && ++tries < 30) { + + randomPosition = getRandomPosition(randomGroupPosition, mobileTemplate.getMinSpawnDistance(), mobileTemplate.getMaxSpawnDistance()); + + if(randomPosition == null){ + System.out.println("randomPosition == null"); + return null; + } + + TerrainService terrainSvc = core.terrainService; + + float height = terrainSvc.getHeight(getPlanet().getID(), randomPosition.x, randomPosition.z); + randomPosition.y = height; + + if (mobiles.size()>0){ // Fix, mobiles must be filled first, before doing this check + boolean minDistViolated = false; + for(CreatureObject mobile : mobiles) { + if(mobile.getWorldPosition().getDistance(randomPosition) < spawnGroup.getMinSpawnDistance() && ! groupMembers.contains(mobile)){ + minDistViolated = true; // Distance to other nearby groups + } + } + if (minDistViolated) + foundPos = false; + else + foundPos = true; + } else {foundPos = true;} + + if(!terrainSvc.canBuildAtPosition(creature, randomPosition.x, randomPosition.z)) + foundPos = false; + + } + + if(!foundPos){ + return null; + } + + + CreatureObject spawnedCreature = core.spawnService.spawnCreature(template, getPlanet().getName(), 0, randomPosition.x, randomPosition.y, randomPosition.z); + if(spawnedCreature != null){ + mobiles.add(spawnedCreature); + } + + return spawnedCreature; + } } diff --git a/src/resources/common/UString.java b/src/services/spawn/DynamicSpawnGroup.java similarity index 54% rename from src/resources/common/UString.java rename to src/services/spawn/DynamicSpawnGroup.java index dec215af..da3df12e 100644 --- a/src/resources/common/UString.java +++ b/src/services/spawn/DynamicSpawnGroup.java @@ -19,54 +19,56 @@ * 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.common; +package services.spawn; -import java.io.UnsupportedEncodingException; +import java.util.Vector; -import com.sleepycat.persist.model.Persistent; +public class DynamicSpawnGroup { -import resources.objects.Delta; + private Vector mobiles; + private String name; + private int maxSpawns; + private int minSpawnDistance; + private int groupMembersNumber = -1; -@Persistent -public final class UString extends Delta { - - private String string; - - public UString() { - string = ""; + public Vector getMobiles() { + return mobiles; } - - public UString(String string) { - this.string = ((string == null) ? "" : string); + + public void setMobiles(Vector mobiles) { + this.mobiles = mobiles; } - - public String get() { - synchronized(objectMutex) { - return string; - } + + public String getName() { + return name; } - - public void set(String string) { - synchronized(objectMutex) { - this.string = string; - } + + public void setName(String name) { + this.name = name; } - - public int length() { - synchronized(objectMutex) { - return string.length(); - } + + public int getMaxSpawns() { + return maxSpawns; } - - public byte[] getBytes() { - synchronized(objectMutex) { - try { - return createBuffer(4 + (string.length() * 2)).putInt(string.length()).put(string.getBytes("UTF-16LE")).flip().array(); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - return new byte[] { 0x00, 0x00, 0x00, 0x00 }; - } - } + + public void setMaxSpawns(int maxSpawns) { + this.maxSpawns = maxSpawns; + } + + public int getMinSpawnDistance() { + return minSpawnDistance; + } + + public void setMinSpawnDistance(int minSpawnDistance) { + this.minSpawnDistance = minSpawnDistance; + } + + public int getGroupMembersNumber() { + return groupMembersNumber; + } + + public void setGroupMembersNumber(int groupMembersNumber) { + this.groupMembersNumber = groupMembersNumber; } } diff --git a/src/services/spawn/LairSpawnArea.java b/src/services/spawn/LairSpawnArea.java index 026268cd..a4f29896 100644 --- a/src/services/spawn/LairSpawnArea.java +++ b/src/services/spawn/LairSpawnArea.java @@ -79,7 +79,7 @@ public class LairSpawnArea extends SpawnArea { randomPosition.y = height; for(LairActor otherLair : lairs) { - if(otherLair.getLairObject().getWorldPosition().getDistance(randomPosition) < 10) + if(otherLair.getLairObject().getWorldPosition().getDistance(randomPosition) < 30) return; } diff --git a/src/services/spawn/MobileTemplate.java b/src/services/spawn/MobileTemplate.java index 92f19f75..18505f7d 100644 --- a/src/services/spawn/MobileTemplate.java +++ b/src/services/spawn/MobileTemplate.java @@ -21,17 +21,21 @@ ******************************************************************************/ package services.spawn; +import java.util.List; import java.util.Vector; import resources.datatables.Options; import resources.datatables.PvpStatus; +import resources.loot.LootGroup; -public class MobileTemplate { +public class MobileTemplate implements Cloneable { private Vector templates; private int optionBitmask = Options.ATTACKABLE; private int pvpBitmask = PvpStatus.Attackable; private short level; + private short minLevel; + private short maxLevel; private Vector attacks; private String defaultAttack; private int minDamage = 0; @@ -46,7 +50,18 @@ public class MobileTemplate { private int attackRange; private Vector weaponTemplates = new Vector(); private Vector weaponTemplateVector = new Vector(); + private int minSpawnDistance = 0; + private int maxSpawnDistance = 0; + private boolean deathblow = false; + private String socialGroup = ""; // see prima guide + private int assistRange; // use prima guide for ranges + private boolean isStalker = false; + private String meatType, milkType, boneType, hideType; + private int meatAmount, milkAmount, boneAmount, hideAmount; + private int respawnTime = 0; + private List lootGroups; + public Vector getTemplates() { return templates; } @@ -190,4 +205,159 @@ public class MobileTemplate { public void setWeaponTemplateVector(Vector weaponTemplateVector) { this.weaponTemplateVector = weaponTemplateVector; } + + public int getMinSpawnDistance() { + return minSpawnDistance; + } + + public void setMinSpawnDistance(int minSpawnDistance) { + this.minSpawnDistance = minSpawnDistance; + } + + public int getMaxSpawnDistance() { + return maxSpawnDistance; + } + + public void setMaxSpawnDistance(int maxSpawnDistance) { + this.maxSpawnDistance = maxSpawnDistance; + } + + public short getMinLevel() { + return minLevel; + } + + public void setMinLevel(short minLevel) { + this.minLevel = minLevel; + } + + public short getMaxLevel() { + return maxLevel; + } + + public void setMaxLevel(short maxLevel) { + this.maxLevel = maxLevel; + } + + public boolean isDeathblow() { + return deathblow; + } + + public void setDeathblow(boolean deathblow) { + this.deathblow = deathblow; + } + + public String getSocialGroup() { + return socialGroup; + } + + public void setSocialGroup(String socialGroup) { + this.socialGroup = socialGroup; + } + + public int getAssistRange() { + return assistRange; + } + + public void setAssistRange(int assistRange) { + this.assistRange = assistRange; + } + + public boolean isStalker() { + return isStalker; + } + + public void setStalker(boolean isStalker) { + this.isStalker = isStalker; + } + + public String getMeatType() { + return meatType; + } + + public void setMeatType(String meatType) { + this.meatType = meatType; + } + + public String getMilkType() { + return milkType; + } + + public void setMilkType(String milkType) { + this.milkType = milkType; + } + + public String getBoneType() { + return boneType; + } + + public void setBoneType(String boneType) { + this.boneType = boneType; + } + + public String getHideType() { + return hideType; + } + + public void setHideType(String hideType) { + this.hideType = hideType; + } + + public int getMeatAmount() { + return meatAmount; + } + + public void setMeatAmount(int meatAmount) { + this.meatAmount = meatAmount; + } + + public int getMilkAmount() { + return milkAmount; + } + + public void setMilkAmount(int milkAmount) { + this.milkAmount = milkAmount; + } + + public int getBoneAmount() { + return boneAmount; + } + + public void setBoneAmount(int boneAmount) { + this.boneAmount = boneAmount; + } + + public int getHideAmount() { + return hideAmount; + } + + public void setHideAmount(int hideAmount) { + this.hideAmount = hideAmount; + } + + public int getRespawnTime() { + return respawnTime; + } + + public void setRespawnTime(int respawnTime) { + this.respawnTime = respawnTime; + } + + public List getLootGroups() { + return lootGroups; + } + + public void setLootGroups(List lootGroups) { + this.lootGroups = lootGroups; + } + + public void addToLootGroups(String[] lootPoolNames, double[] lootPoolChances, double lootGroupChance) { + //System.out.println("lootPoolNames[0] " + lootPoolNames[0]); + LootGroup lootGroup = new LootGroup(lootPoolNames, lootPoolChances, lootGroupChance); + this.lootGroups.add(lootGroup); + } + + public Object clone() throws CloneNotSupportedException { + return super.clone(); + } + } diff --git a/src/services/spawn/SpawnService.java b/src/services/spawn/SpawnService.java index dcde2707..96645cbb 100644 --- a/src/services/spawn/SpawnService.java +++ b/src/services/spawn/SpawnService.java @@ -61,6 +61,7 @@ public class SpawnService { private Map lairGroupTemplates = new ConcurrentHashMap(); private Map lairTemplates = new ConcurrentHashMap(); private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(4); + private Map dynamicGroupTemplates = new ConcurrentHashMap(); public SpawnService(NGECore core) { this.core = core; @@ -69,7 +70,7 @@ public class SpawnService { } } - public CreatureObject spawnCreature(String template, String planetName, long cellId, float x, float y, float z, float qW, float qX, float qY, float qZ, short level) { + public CreatureObject spawnCreature(String template, long objectId, String planetName, long cellId, float x, float y, float z, float qW, float qX, float qY, float qZ, short level) { Planet planet = core.terrainService.getPlanetByName(planetName); MobileTemplate mobileTemplate = mobileTemplates.get(template); @@ -84,7 +85,7 @@ public class SpawnService { return null; } - CreatureObject creature = (CreatureObject) core.objectService.createObject(mobileTemplate.getTemplates().get(new Random().nextInt(mobileTemplate.getTemplates().size())), 0, planet, new Point3D(x, y, z), new Quaternion(qW, qX, qY, qZ)); + CreatureObject creature = (CreatureObject) core.objectService.createObject(mobileTemplate.getTemplates().get(new Random().nextInt(mobileTemplate.getTemplates().size())), objectId, planet, new Point3D(x, y, z), new Quaternion(qW, qX, qY, qZ), null, (objectId > 0), true); if(creature == null) return null; @@ -99,17 +100,29 @@ public class SpawnService { creature.setWeaponId(mobileTemplate.getCustomWeapon().getObjectID()); }*/ + if(mobileTemplate.getLootGroups() != null) + creature.setLootGroups(mobileTemplate.getLootGroups()); + creature.setOptionsBitmask(mobileTemplate.getOptionBitmask()); - creature.setPvPBitmask(mobileTemplate.getPvpBitmask()); + creature.setPvpBitmask(mobileTemplate.getPvpBitmask()); creature.setStfFilename("mob/creature_names"); // TODO: set other STFs for NPCs other than creatures creature.setStfName(mobileTemplate.getCreatureName()); creature.setHeight(mobileTemplate.getScale()); int difficulty = mobileTemplate.getDifficulty(); creature.setDifficulty((byte) difficulty); + if(level != -1) creature.setLevel(level); - else - creature.setLevel(mobileTemplate.getLevel()); + else { + creature.setLevel(mobileTemplate.getLevel()); + level = mobileTemplate.getLevel(); + } + + if (mobileTemplate.getMinLevel()!=0 && mobileTemplate.getMaxLevel()!=0){ + level = (short) (mobileTemplate.getMinLevel() + (new Random().nextInt(mobileTemplate.getMaxLevel()-mobileTemplate.getMinLevel()))); + creature.setLevel(level); + } + //WeaponObject defaultWeapon = (mobileTemplate.getWeaponTemplates().size() > 0) ? (WeaponObject) core.objectService.createObject(mobileTemplate.getWeaponTemplates().get(new Random().nextInt(mobileTemplate.getWeaponTemplates().size())), creature.getPlanet()) : (WeaponObject) core.objectService.createObject("object/weapon/creature/shared_creature_default_weapon.iff", creature.getPlanet()); @@ -171,6 +184,7 @@ public class SpawnService { creature.setMaxAction((int) (400 + level * 134)); creature.setAction((int) (400 + level * 134)); } else { + System.out.println("HERE"); creature.setMaxHealth(customHealth); creature.setHealth(customHealth); creature.setMaxAction((int) (level * 128)); @@ -186,6 +200,7 @@ public class SpawnService { AIActor actor = new AIActor(creature, creature.getPosition(), scheduler); creature.setAttachment("AI", actor); + creature.setAttachment("radial_filename", "npc/mobile"); actor.setMobileTemplate(mobileTemplate); @@ -199,6 +214,10 @@ public class SpawnService { return creature; } + public CreatureObject spawnCreature(String template, String planetName, long cellId, float x, float y, float z, float qW, float qX, float qY, float qZ, short level) { + return spawnCreature(template, 0L, planetName, cellId, x, y, z, qW, qX, qY, qZ, level); + } + public CreatureObject spawnCreature(String mobileTemplate, String planetName, long cellId, float x, float y, float z, float qW, float qX, float qY, float qZ, int level) { return spawnCreature(mobileTemplate, planetName, cellId, x, y, z, 1, 0, 0, 0, (short) level); } @@ -233,8 +252,8 @@ public class SpawnService { return null; lairObject.setOptionsBitmask(Options.ATTACKABLE); - lairObject.setPvPBitmask(PvpStatus.Attackable); - lairObject.setMaxDamage(1000 * level); + lairObject.setPvpBitmask(PvpStatus.Attackable); + lairObject.setMaximumCondition(1000 * level); LairActor lairActor = new LairActor(lairObject, lairTemplate.getMobileName(), 10, level); lairObject.setAttachment("AI", lairActor); @@ -251,7 +270,8 @@ public class SpawnService { FileVisitor fv = new SimpleFileVisitor() { @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { - if(!file.toString().contains("lairs") && !file.toString().contains("spawnareas") && !file.toString().contains("lairgroups")) + if(!file.toString().contains("lairs") && !file.toString().contains("spawnareas") + && !file.toString().contains("lairgroups") && !file.toString().contains("dynamicgroups")) core.scriptService.callScript(file.toString().replace(file.getFileName().toString(), ""), file.getFileName().toString().replace(".py", ""), "addTemplate", core); return FileVisitResult.CONTINUE; } @@ -304,6 +324,26 @@ public class SpawnService { } } + public void loadDynamicGroups() { + Path p = Paths.get("scripts/mobiles/dynamicgroups"); + FileVisitor fv = new SimpleFileVisitor() { + @Override + public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { + core.scriptService.callScript("scripts/mobiles/dynamicgroups/", file.getFileName().toString().replace(".py", ""), "addDynamicGroup", core); + return FileVisitResult.CONTINUE; + } + }; + try { + Files.walkFileTree(p, fv); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public void addDynamicGroup(String name, DynamicSpawnGroup dynamicSpawnGroup) { + dynamicGroupTemplates.put(name, dynamicSpawnGroup); + } + public void addLairGroup(String name, Vector lairSpawnTemplates) { lairGroupTemplates.put(name, new LairGroupTemplate(name, lairSpawnTemplates)); } @@ -334,6 +374,43 @@ public class SpawnService { spawnAreas.get(planet).add(lairSpawnArea); core.simulationService.addCollidable(collidableCircle, x, z); } + + public void addDynamicSpawnArea(String dynamicGroup, float x, float z, float radius, String planetName) { + DynamicSpawnGroup dynamicGroupTemplate = dynamicGroupTemplates.get(dynamicGroup); + Planet planet = core.terrainService.getPlanetByName(planetName); + if(dynamicGroupTemplate == null || planet == null) + return; + CollidableCircle collidableCircle = new CollidableCircle(new Point3D(x, 0, z), radius, planet); + DynamicSpawnArea dynamicSpawnArea = new DynamicSpawnArea(planet, collidableCircle, dynamicGroupTemplate); + spawnAreas.get(planet).add(dynamicSpawnArea); + core.simulationService.addCollidable(collidableCircle, x, z); + } + + public void addDynamicSpawnArea(Vector dynamicGroups, float x, float z, float radius, String planetName) { + Vector dynamicSpawnGroups = new Vector(); + for (String template : dynamicGroups){ + if (dynamicGroupTemplates.get(template)==null){ + System.err.println("Dynamic Group template " + template +" not found in spawnservice collection!"); + return; + } + dynamicSpawnGroups.add(dynamicGroupTemplates.get(template)); + } + + Planet planet = core.terrainService.getPlanetByName(planetName); + if(dynamicSpawnGroups == null || dynamicSpawnGroups.size() == 0 || planet == null) + return; + CollidableCircle collidableCircle = new CollidableCircle(new Point3D(x, 0, z), radius, planet); + DynamicSpawnArea dynamicSpawnArea = new DynamicSpawnArea(planet, collidableCircle, dynamicSpawnGroups); + spawnAreas.get(planet).add(dynamicSpawnArea); + core.simulationService.addCollidable(collidableCircle, x, z); + } + public Map getMobileTemplates() { + return mobileTemplates; + } + + public MobileTemplate getMobileTemplate(String template) { + return mobileTemplates.get(template); + } } diff --git a/src/services/sui/SUIService.java b/src/services/sui/SUIService.java index 546fc3d2..2ebbe982 100644 --- a/src/services/sui/SUIService.java +++ b/src/services/sui/SUIService.java @@ -46,9 +46,9 @@ import resources.common.FileUtilities; import resources.common.ObjControllerOpcodes; import resources.common.Opcodes; import resources.common.RadialOptions; +import resources.loot.LootRollSession; import resources.objects.creature.CreatureObject; import resources.objects.harvester.HarvesterObject; -import resources.objects.loot.LootRollSession; import services.sui.SUIWindow.SUICallback; import services.sui.SUIWindow.Trigger; import engine.clients.Client; @@ -77,7 +77,7 @@ public class SUIService implements INetworkDispatch { ObjectMenuRequest request = new ObjectMenuRequest(); request.deserialize(data); - + SWGObject target = core.objectService.getObject(request.getTargetId()); SWGObject owner = core.objectService.getObject(request.getCharacterId()); @@ -107,6 +107,7 @@ public class SUIService implements INetworkDispatch { } if (target instanceof CreatureObject){ + //System.out.println("SUI target is creatureobject"); CreatureObject creature = (CreatureObject) target; if (!creature.isPlayer() && creature.isLootLock()){ LootRollSession lootRollSession = (LootRollSession )creature.getAttachment("LootSession"); @@ -114,12 +115,28 @@ public class SUIService implements INetworkDispatch { if (lootRollSession.getRequester()!=owner){ // ToDo: RADIALS MUST BE DISABLED HERE FOR THE CORPSE, BUT HOW? - core.scriptService.callScript("scripts/radial/", "npc/noloot", "createRadial", core, owner, target, request.getRadialOptions()); + target.setAttachment("radial_filename", "npc/noloot"); + core.scriptService.callScript("scripts/radial/npc/noloot", "", "createRadial", core, owner, target, request.getRadialOptions()); sendRadial(owner, target, request.getRadialOptions(), request.getRadialCount()); return; + } else { + // Note: Bugged NPC corpses never make it through here, they are not sent from client at all it seems + target.setAttachment("radial_filename", "npc/corpse"); + core.scriptService.callScript("scripts/radial/npc/corpse", "", "createRadial", core, owner, target, request.getRadialOptions()); + sendRadial(owner, target, request.getRadialOptions(), request.getRadialCount()); + //((CreatureObject)owner).sendSystemMessage("Radial set from suiservice", (byte)0); + return; } } } + } else { + //System.out.println("SUI target is NOT creatureobject " + target.getTemplate()); + } + + if(target.getAttachment("isVendor") != null && (Boolean) target.getAttachment("isVendor") && ((CreatureObject) owner).getPlayerObject().getOwnedVendors().contains(target.getObjectID())) { + core.scriptService.callScript("scripts/radial/", "terminal/vendor", "createRadial", core, owner, target, request.getRadialOptions()); + sendRadial(owner, target, request.getRadialOptions(), request.getRadialCount()); + return; } if(target.getGrandparent() != null && target.getGrandparent().getAttachment("structureAdmins") != null) @@ -307,7 +324,7 @@ public class SUIService implements INetworkDispatch { window.clearDataSource("List.dataList"); - cloneData.entrySet().forEach(e -> window.addListBoxMenuItem(e.getValue(), e.getKey())); + cloneData.entrySet().forEach(e -> window.addListBoxMenuItem(e.getValue(), (long) e.getKey())); return window; diff --git a/src/services/trade/TradeService.java b/src/services/trade/TradeService.java index 08201aab..2b18e7b9 100644 --- a/src/services/trade/TradeService.java +++ b/src/services/trade/TradeService.java @@ -99,7 +99,7 @@ public class TradeService implements INetworkDispatch{ // creates a new trade session for the user who sent the request. It's given the objectID // that the player wants to trade with. - if (senderObject.getCombatFlag() == 0 && recieverObject.getCombatFlag() == 0) { + if (!senderObject.isInCombat() && !recieverObject.isInCombat()) { senderClient.getSession().setAttribute("tradeSession", recieverID); recieverObject.sendSystemMessage(senderObject.getCustomName() + " wants to trade with you.", (byte) 0); diff --git a/src/services/travel/TravelService.java b/src/services/travel/TravelService.java index addfbfe1..74310bf3 100644 --- a/src/services/travel/TravelService.java +++ b/src/services/travel/TravelService.java @@ -27,9 +27,6 @@ import java.util.List; import java.util.Map; import java.util.Vector; import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.Executors; -import java.util.concurrent.ScheduledExecutorService; - import org.apache.commons.lang3.text.WordUtils; import org.apache.mina.core.buffer.IoBuffer; import org.apache.mina.core.session.IoSession; @@ -52,6 +49,7 @@ import resources.common.Opcodes; import resources.common.SpawnPoint; import resources.objects.creature.CreatureObject; import resources.objects.tangible.TangibleObject; +import services.playercities.PlayerCity; import services.sui.SUIService.ListBoxType; import services.sui.SUIService.MessageBoxType; import services.sui.SUIWindow.SUICallback; @@ -63,7 +61,6 @@ public class TravelService implements INetworkDispatch { private NGECore core; private Map> travelMap = new ConcurrentHashMap>(); private Map> fareMap = new ConcurrentHashMap>(); - private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); public TravelService(NGECore core) { this.core = core; @@ -255,9 +252,13 @@ public class TravelService implements INetworkDispatch { public void purchaseTravelTicket(SWGObject player, String departurePlanet, String departureLoc, String arrivalPlanet, String arrivalLoc, String roundTrip) { CreatureObject creatureObj = (CreatureObject) player; int fare = fareMap.get(player.getPlanet()).get(arrivalPlanet); + int tax = 0; if (roundTrip.equals("1")) { fare += fareMap.get(player.getPlanet()).get(arrivalPlanet); } + PlayerCity city = core.playerCityService.getCityObjectIsIn(player); + if (city != null && city.getTravelTax() != 0) { tax = city.getTravelTax(); fare += tax;} + int playerBankCredits = creatureObj.getBankCredits(); if (playerBankCredits < fare) { int cashDifference = fare - playerBankCredits; @@ -271,9 +272,12 @@ public class TravelService implements INetworkDispatch { creatureObj.setBankCredits(0); creatureObj.setCashCredits(creatureObj.getCashCredits() - cashDifference); + } else { creatureObj.setBankCredits(playerBankCredits - fare); + } + if (tax != 0) { city.addToTreasury(tax);} if (roundTrip.equals("1")) { SWGObject tripTicket = createTravelTicket(arrivalPlanet, arrivalLoc, departurePlanet, departureLoc);