This commit is contained in:
Treeku
2014-05-03 17:37:43 +01:00
33 changed files with 927 additions and 40 deletions
Binary file not shown.
+40
View File
@@ -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){
+5
View File
@@ -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);
+11 -9
View File
@@ -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());
}
}
}
+1 -1
View File
@@ -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());
+167 -18
View File
@@ -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;
}
}
+45
View File
@@ -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;
}
}
+41 -5
View File
@@ -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);
}
}