mirror of
https://github.com/ProjectSWGCore/NGECore2.git
synced 2026-10-12 02:13:48 -04:00
Merge branch 'master' of https://github.com/ProjectSWGCore/NGECore2
This commit is contained in:
Binary file not shown.
@@ -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('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)
|
||||
|
||||
|
||||
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)
|
||||
|
||||
@@ -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('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(9)
|
||||
mobileTemplate.setMinSpawnDistance(2)
|
||||
mobileTemplate.setMaxSpawnDistance(4)
|
||||
mobileTemplate.setDeathblow(True)
|
||||
|
||||
templates = Vector()
|
||||
templates.add('object/mobile/shared_dressed_dark_force_crystal_hunter.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_force_crystal_hunter', mobileTemplate)
|
||||
|
||||
@@ -0,0 +1,62 @@
|
||||
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)
|
||||
|
||||
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)
|
||||
|
||||
@@ -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('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)
|
||||
|
||||
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)
|
||||
|
||||
@@ -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('eow_dark_side_savage')
|
||||
mobileTemplate.setLevel(85)
|
||||
mobileTemplate.setDifficulty(0)
|
||||
mobileTemplate.setAttackRange(6)
|
||||
mobileTemplate.setAttackSpeed(1.0)
|
||||
mobileTemplate.setWeaponType(9)
|
||||
mobileTemplate.setMinSpawnDistance(2)
|
||||
mobileTemplate.setMaxSpawnDistance(4)
|
||||
mobileTemplate.setDeathblow(False)
|
||||
|
||||
templates = Vector()
|
||||
templates.add('object/mobile/shared_dressed_dark_side_savage.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_side_savage', mobileTemplate)
|
||||
|
||||
@@ -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('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(9)
|
||||
mobileTemplate.setMinSpawnDistance(3)
|
||||
mobileTemplate.setMaxSpawnDistance(5)
|
||||
mobileTemplate.setDeathblow(False)
|
||||
|
||||
templates = Vector()
|
||||
templates.add('object/mobile/shared_dressed_force_sensitive_crypt_crawler.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('force_sensitive_crypt_crawler', mobileTemplate)
|
||||
|
||||
@@ -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('force_sensitive_renegade')
|
||||
mobileTemplate.setLevel(90)
|
||||
mobileTemplate.setMinLevel(61)
|
||||
mobileTemplate.setMaxLevel(69)
|
||||
mobileTemplate.setDifficulty(0)
|
||||
mobileTemplate.setAttackRange(6)
|
||||
mobileTemplate.setAttackSpeed(1.0)
|
||||
mobileTemplate.setWeaponType(9)
|
||||
mobileTemplate.setMinSpawnDistance(4)
|
||||
mobileTemplate.setMaxSpawnDistance(7)
|
||||
mobileTemplate.setDeathblow(False)
|
||||
|
||||
templates = Vector()
|
||||
templates.add('object/mobile/shared_dressed_force_sensitive_renegade.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('force_sensitive_renegade', mobileTemplate)
|
||||
|
||||
@@ -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('eow_forsaken_force_drifter')
|
||||
mobileTemplate.setLevel(74)
|
||||
mobileTemplate.setDifficulty(0)
|
||||
mobileTemplate.setAttackRange(6)
|
||||
mobileTemplate.setAttackSpeed(1.0)
|
||||
mobileTemplate.setWeaponType(9)
|
||||
mobileTemplate.setMinSpawnDistance(3)
|
||||
mobileTemplate.setMaxSpawnDistance(6)
|
||||
mobileTemplate.setDeathblow(False)
|
||||
|
||||
templates = Vector()
|
||||
templates.add('object/mobile/shared_dressed_forsaken_force_drifter.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('forsaken_force_drifter', mobileTemplate)
|
||||
|
||||
@@ -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('novice_force_mystic')
|
||||
mobileTemplate.setLevel(63)
|
||||
mobileTemplate.setDifficulty(0)
|
||||
mobileTemplate.setAttackRange(6)
|
||||
mobileTemplate.setAttackSpeed(1.0)
|
||||
mobileTemplate.setWeaponType(9)
|
||||
mobileTemplate.setMinSpawnDistance(4)
|
||||
mobileTemplate.setMaxSpawnDistance(7)
|
||||
mobileTemplate.setDeathblow(False)
|
||||
|
||||
templates = Vector()
|
||||
templates.add('object/mobile/shared_dressed_novice_force_mystic.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('novice_force_mystic', mobileTemplate)
|
||||
|
||||
@@ -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('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(9)
|
||||
mobileTemplate.setMinSpawnDistance(4)
|
||||
mobileTemplate.setMaxSpawnDistance(6)
|
||||
mobileTemplate.setDeathblow(False)
|
||||
|
||||
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/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('untrained_wielder_of_the_dark_side', mobileTemplate)
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -0,0 +1,5 @@
|
||||
import sys
|
||||
|
||||
def addSpawnArea(core):
|
||||
core.spawnService.addDynamicSpawnArea('tuskens_wild_1', 4310, -4786, 250, 'tatooine')
|
||||
return
|
||||
@@ -1,4 +1,27 @@
|
||||
import sys
|
||||
|
||||
def setup(core, object):
|
||||
return
|
||||
|
||||
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 = ['sithholocrons']
|
||||
lootPoolChances_4 = [100]
|
||||
lootGroupChance_4 = 1
|
||||
object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4)
|
||||
|
||||
|
||||
|
||||
return
|
||||
@@ -1,4 +1,21 @@
|
||||
import sys
|
||||
|
||||
def setup(core, object):
|
||||
return
|
||||
|
||||
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
|
||||
@@ -1,4 +1,27 @@
|
||||
import sys
|
||||
|
||||
def setup(core, object):
|
||||
return
|
||||
|
||||
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
|
||||
@@ -1,4 +1,27 @@
|
||||
import sys
|
||||
|
||||
def setup(core, object):
|
||||
return
|
||||
|
||||
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
|
||||
@@ -1,4 +1,27 @@
|
||||
import sys
|
||||
|
||||
def setup(core, object):
|
||||
return
|
||||
|
||||
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
|
||||
@@ -1,4 +1,27 @@
|
||||
import sys
|
||||
|
||||
def setup(core, object):
|
||||
return
|
||||
|
||||
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
|
||||
@@ -1,4 +1,27 @@
|
||||
import sys
|
||||
|
||||
def setup(core, object):
|
||||
return
|
||||
|
||||
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 = ['sithholocrons']
|
||||
lootPoolChances_4 = [100]
|
||||
lootGroupChance_4 = 1
|
||||
object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4)
|
||||
|
||||
|
||||
|
||||
return
|
||||
@@ -210,6 +210,10 @@ public class CreatureObject extends TangibleObject implements Serializable {
|
||||
@Override
|
||||
public void initAfterDBLoad() {
|
||||
super.init();
|
||||
duelList = Collections.synchronizedList(new ArrayList<CreatureObject>());
|
||||
cooldowns = new ConcurrentHashMap<String, Long>();
|
||||
performanceAudience = new Vector<CreatureObject>();
|
||||
tefTime = System.currentTimeMillis();
|
||||
messageBuilder = new CreatureMessageBuilder(this);
|
||||
}
|
||||
|
||||
|
||||
@@ -163,6 +163,7 @@ public class PlayerObject extends IntangibleObject implements Serializable {
|
||||
@Override
|
||||
public void initAfterDBLoad() {
|
||||
super.init();
|
||||
lastPlayTimeUpdate = System.currentTimeMillis();
|
||||
messageBuilder = new PlayerMessageBuilder(this);
|
||||
}
|
||||
|
||||
|
||||
@@ -147,6 +147,7 @@ public class GalacticResource extends SWGObject implements Serializable {
|
||||
|
||||
@Override
|
||||
public void initAfterDBLoad() {
|
||||
init();
|
||||
}
|
||||
|
||||
public GalacticResource(String name, String fileName, String category){
|
||||
|
||||
@@ -90,6 +90,7 @@ public class DevService implements INetworkDispatch {
|
||||
if(creature.getClient().isGM()) suiOptions.put((long) 125, "Crafting Tools");
|
||||
if(creature.getClient().isGM()) suiOptions.put((long) 130, "Vehicle Deeds");
|
||||
if(creature.getClient().isGM()) suiOptions.put((long) 121, "Sandbox City");
|
||||
if(creature.getClient().isGM()) suiOptions.put((long) 122, "Jedi Ruins");
|
||||
|
||||
break;
|
||||
case 3: // [Items] Weapons
|
||||
@@ -1167,6 +1168,10 @@ public class DevService implements INetworkDispatch {
|
||||
|
||||
case 121:
|
||||
NGECore.getInstance().playerCityService.buildSandboxTestCity(player);
|
||||
|
||||
case 122:
|
||||
Point3D position = new Point3D(4086,15,5554);
|
||||
core.simulationService.transferToPlanet(player, core.terrainService.getPlanetByName("dantooine"), position, player.getOrientation(), null);
|
||||
|
||||
case 125:
|
||||
TangibleObject genericCraftingTool = (TangibleObject) core.objectService.createObject("object/tangible/crafting/station/shared_generic_tool.iff", planet);
|
||||
|
||||
@@ -154,15 +154,17 @@ 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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -180,7 +180,7 @@ public class ObjectService implements INetworkDispatch {
|
||||
|
||||
while(cursor.hasNext()) {
|
||||
final SWGObject building = (SWGObject) cursor.next();
|
||||
if(!(building instanceof BuildingObject))
|
||||
if(!(building instanceof BuildingObject) || building == null)
|
||||
continue;
|
||||
objectList.put(building.getObjectID(), building);
|
||||
Planet planet = core.terrainService.getPlanetByID(building.getPlanetId());
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
******************************************************************************/
|
||||
package services.spawn;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.Iterator;
|
||||
import java.util.Random;
|
||||
import java.util.Vector;
|
||||
@@ -42,17 +43,23 @@ import engine.resources.scene.Point3D;
|
||||
public class DynamicSpawnArea extends SpawnArea {
|
||||
|
||||
private DynamicSpawnGroup spawnGroup;
|
||||
private Vector<DynamicSpawnGroup> spawnGroups;
|
||||
private Vector<CreatureObject> mobiles = new Vector<CreatureObject>();
|
||||
|
||||
public DynamicSpawnArea(Planet planet, AbstractCollidable area, DynamicSpawnGroup spawnGroup) {
|
||||
super(planet, area);
|
||||
this.spawnGroup = spawnGroup;
|
||||
}
|
||||
|
||||
public DynamicSpawnArea(Planet planet, AbstractCollidable area, Vector<DynamicSpawnGroup> spawnGroups) {
|
||||
super(planet, area);
|
||||
this.spawnGroups = spawnGroups;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Handler
|
||||
public void onEnter(EnterEvent event) {
|
||||
|
||||
|
||||
SWGObject object = event.object;
|
||||
|
||||
if(object == null || !(object instanceof CreatureObject))
|
||||
@@ -65,8 +72,35 @@ public class DynamicSpawnArea extends SpawnArea {
|
||||
|
||||
creature.getEventBus().subscribe(this);
|
||||
// spawn some creatures
|
||||
for(int i = 0; i < 5; i++)
|
||||
spawnCreature(creature);
|
||||
if (spawnGroups==null){
|
||||
if (spawnGroup.getGroupMembersNumber()==-1){
|
||||
for(int i = 0; i < 5; i++)
|
||||
spawnCreature(creature);
|
||||
} else {
|
||||
Vector<CreatureObject> groupMembers = new Vector<CreatureObject>();
|
||||
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<CreatureObject> groupMembers = new Vector<CreatureObject>();
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -100,26 +134,62 @@ public class DynamicSpawnArea extends SpawnArea {
|
||||
|
||||
if(creature.getSlottedObject("ghost") == null)
|
||||
return;
|
||||
|
||||
if(new Random().nextFloat() <= 0.25)
|
||||
spawnCreature(creature);
|
||||
|
||||
if (spawnGroups==null){
|
||||
if (spawnGroup.getGroupMembersNumber()==-1){
|
||||
if(new Random().nextFloat() <= 0.25)
|
||||
spawnCreature(creature);
|
||||
} else
|
||||
{
|
||||
Vector<CreatureObject> groupMembers = new Vector<CreatureObject>();
|
||||
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<CreatureObject> groupMembers = new Vector<CreatureObject>();
|
||||
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<CreatureObject> it = mobiles.iterator();
|
||||
it.forEachRemaining(mobile -> {
|
||||
if(mobile.getPosture() == Posture.Dead)
|
||||
it.remove();
|
||||
});
|
||||
// Iterator<CreatureObject> 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<CreatureObject> removers = new Vector<CreatureObject>();
|
||||
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;
|
||||
@@ -136,10 +206,12 @@ public class DynamicSpawnArea extends SpawnArea {
|
||||
float height = terrainSvc.getHeight(getPlanet().getID(), randomPosition.x, randomPosition.z);
|
||||
randomPosition.y = height;
|
||||
|
||||
for(CreatureObject mobile : mobiles) {
|
||||
if(mobile.getWorldPosition().getDistance(randomPosition) > spawnGroup.getMinSpawnDistance())
|
||||
foundPos = true;
|
||||
}
|
||||
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;
|
||||
@@ -153,9 +225,86 @@ public class DynamicSpawnArea extends SpawnArea {
|
||||
|
||||
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)
|
||||
if(spawnedCreature != null){
|
||||
mobiles.add(spawnedCreature);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
private CreatureObject spawnCreatureMember(CreatureObject creature, Vector<CreatureObject> groupMembers, Point3D randomGroupPosition, int spawnIndex) {
|
||||
|
||||
NGECore core = NGECore.getInstance();
|
||||
|
||||
// Iterator<CreatureObject> 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<CreatureObject> removers = new Vector<CreatureObject>();
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,6 +29,7 @@ public class DynamicSpawnGroup {
|
||||
private String name;
|
||||
private int maxSpawns;
|
||||
private int minSpawnDistance;
|
||||
private int groupMembersNumber = -1;
|
||||
|
||||
public Vector<String> getMobiles() {
|
||||
return mobiles;
|
||||
@@ -61,5 +62,13 @@ public class DynamicSpawnGroup {
|
||||
public void setMinSpawnDistance(int minSpawnDistance) {
|
||||
this.minSpawnDistance = minSpawnDistance;
|
||||
}
|
||||
|
||||
public int getGroupMembersNumber() {
|
||||
return groupMembersNumber;
|
||||
}
|
||||
|
||||
public void setGroupMembersNumber(int groupMembersNumber) {
|
||||
this.groupMembersNumber = groupMembersNumber;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -32,6 +32,8 @@ public class MobileTemplate {
|
||||
private int optionBitmask = Options.ATTACKABLE;
|
||||
private int pvpBitmask = PvpStatus.Attackable;
|
||||
private short level;
|
||||
private short minLevel;
|
||||
private short maxLevel;
|
||||
private Vector<String> attacks;
|
||||
private String defaultAttack;
|
||||
private int minDamage = 0;
|
||||
@@ -46,6 +48,9 @@ public class MobileTemplate {
|
||||
private int attackRange;
|
||||
private Vector<String> weaponTemplates = new Vector<String>();
|
||||
private Vector<WeaponTemplate> weaponTemplateVector = new Vector<WeaponTemplate>();
|
||||
private int minSpawnDistance = 0;
|
||||
private int maxSpawnDistance = 0;
|
||||
private boolean deathblow = false;
|
||||
|
||||
public Vector<String> getTemplates() {
|
||||
return templates;
|
||||
@@ -190,4 +195,44 @@ public class MobileTemplate {
|
||||
public void setWeaponTemplateVector(Vector<WeaponTemplate> 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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -107,10 +107,19 @@ public class SpawnService {
|
||||
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());
|
||||
|
||||
@@ -172,6 +181,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));
|
||||
@@ -252,7 +262,8 @@ public class SpawnService {
|
||||
FileVisitor<Path> fv = new SimpleFileVisitor<Path>() {
|
||||
@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;
|
||||
}
|
||||
@@ -357,7 +368,7 @@ public class SpawnService {
|
||||
}
|
||||
|
||||
public void addDynamicSpawnArea(String dynamicGroup, float x, float z, float radius, String planetName) {
|
||||
DynamicSpawnGroup dynamicGroupTemplate = dynamicGroupTemplates .get(dynamicGroup);
|
||||
DynamicSpawnGroup dynamicGroupTemplate = dynamicGroupTemplates.get(dynamicGroup);
|
||||
Planet planet = core.terrainService.getPlanetByName(planetName);
|
||||
if(dynamicGroupTemplate == null || planet == null)
|
||||
return;
|
||||
@@ -366,7 +377,32 @@ public class SpawnService {
|
||||
spawnAreas.get(planet).add(dynamicSpawnArea);
|
||||
core.simulationService.addCollidable(collidableCircle, x, z);
|
||||
}
|
||||
|
||||
public void addDynamicSpawnArea(Vector<String> dynamicGroups, float x, float z, float radius, String planetName) {
|
||||
Vector<DynamicSpawnGroup> dynamicSpawnGroups = new Vector<DynamicSpawnGroup>();
|
||||
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<String, MobileTemplate> getMobileTemplates() {
|
||||
return mobileTemplates;
|
||||
}
|
||||
|
||||
public MobileTemplate getMobileTemplate(String template) {
|
||||
return mobileTemplates.get(template);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user