diff --git a/scripts/loot/lootItems/armor/composite_armor_bicep_left.py b/scripts/loot/lootItems/armor/composite_armor_bicep_left.py new file mode 100644 index 00000000..01dae7ed --- /dev/null +++ b/scripts/loot/lootItems/armor/composite_armor_bicep_left.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/composite/shared_armor_composite_bicep_l.iff'] + +def customItemName(): + + return '' + +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_right.py b/scripts/loot/lootItems/armor/composite_armor_bicep_right.py new file mode 100644 index 00000000..d0520ca7 --- /dev/null +++ b/scripts/loot/lootItems/armor/composite_armor_bicep_right.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/composite/shared_armor_composite_bicep_r.iff'] + +def customItemName(): + + return '' + +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_boots.py b/scripts/loot/lootItems/armor/composite_armor_boots.py new file mode 100644 index 00000000..f82eba8c --- /dev/null +++ b/scripts/loot/lootItems/armor/composite_armor_boots.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/composite/shared_armor_composite_boots.iff'] + +def customItemName(): + + return '' + +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_bracer_left.py b/scripts/loot/lootItems/armor/composite_armor_bracer_left.py new file mode 100644 index 00000000..9c5bfb48 --- /dev/null +++ b/scripts/loot/lootItems/armor/composite_armor_bracer_left.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/composite/shared_armor_composite_bracer_l.iff'] + +def customItemName(): + + return '' + +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_bracer_right.py b/scripts/loot/lootItems/armor/composite_armor_bracer_right.py new file mode 100644 index 00000000..2c177745 --- /dev/null +++ b/scripts/loot/lootItems/armor/composite_armor_bracer_right.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/composite/shared_armor_composite_bracer_r.iff'] + +def customItemName(): + + return '' + +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_chestplate.py b/scripts/loot/lootItems/armor/composite_armor_chestplate.py new file mode 100644 index 00000000..9d5687b1 --- /dev/null +++ b/scripts/loot/lootItems/armor/composite_armor_chestplate.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/composite/shared_armor_composite_chest_plate.iff'] + +def customItemName(): + + return '' + +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_gloves.py b/scripts/loot/lootItems/armor/composite_armor_gloves.py new file mode 100644 index 00000000..c99e4081 --- /dev/null +++ b/scripts/loot/lootItems/armor/composite_armor_gloves.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/composite/shared_armor_composite_gloves.iff'] + +def customItemName(): + + return '' + +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_helmet.py b/scripts/loot/lootItems/armor/composite_armor_helmet.py new file mode 100644 index 00000000..e29f9e11 --- /dev/null +++ b/scripts/loot/lootItems/armor/composite_armor_helmet.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/composite/shared_armor_composite_helmet.iff'] + +def customItemName(): + + return '' + +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_leggings.py b/scripts/loot/lootItems/armor/composite_armor_leggings.py new file mode 100644 index 00000000..9111c640 --- /dev/null +++ b/scripts/loot/lootItems/armor/composite_armor_leggings.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/composite/shared_armor_composite_leggings.iff'] + +def customItemName(): + + return '' + +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/placeholder.py b/scripts/loot/lootItems/armor/placeholder.py deleted file mode 100644 index e69de29b..00000000 diff --git a/scripts/loot/lootPools/composite_armor.py b/scripts/loot/lootPools/composite_armor.py new file mode 100644 index 00000000..747a2995 --- /dev/null +++ b/scripts/loot/lootPools/composite_armor.py @@ -0,0 +1,10 @@ + +def itemNames(): + + items = ['composite_armor_bicep_left','composite_armor_bicep_right','composite_armor_bracer_left','composite_armor_bracer_right'] + items += ['composite_armor_chestplate','composite_armor_helmet','composite_armor_leggings','composite_armor_boots','composite_armor_gloves'] + return items + +def itemChances(): + + return [11,11,11,11,11,11,11,11,12] # = 100% \ No newline at end of file diff --git a/scripts/mobiles/canon/jedi_master.py b/scripts/mobiles/canon/jedi_master.py index d2b65aaf..afc80223 100644 --- a/scripts/mobiles/canon/jedi_master.py +++ b/scripts/mobiles/canon/jedi_master.py @@ -1,5 +1,6 @@ import sys from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate from java.util import Vector def addTemplate(core): @@ -9,6 +10,8 @@ def addTemplate(core): mobileTemplate.setLevel(90) mobileTemplate.setDifficulty(2) mobileTemplate.setAttackRange(6) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(9) templates = Vector() templates.add('object/mobile/shared_dressed_dark_jedi_master_female_twk_01.iff') @@ -22,10 +25,13 @@ def addTemplate(core): mobileTemplate.setTemplates(templates) weaponTemplates = Vector() - weaponTemplates.add('object/weapon/melee/sword/crafted_saber/shared_sword_lightsaber_one_handed_gen5.iff') - weaponTemplates.add('object/weapon/melee/2h_sword/crafted_saber/shared_sword_lightsaber_two_handed_gen5.iff') - weaponTemplates.add('object/weapon/melee/polearm/crafted_saber/shared_sword_lightsaber_polearm_gen5.iff') - mobileTemplate.setWeaponTemplates(weaponTemplates) + 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') diff --git a/scripts/mobiles/canon/stormtrooper.py b/scripts/mobiles/canon/stormtrooper.py index 90da938f..a7a49123 100644 --- a/scripts/mobiles/canon/stormtrooper.py +++ b/scripts/mobiles/canon/stormtrooper.py @@ -1,5 +1,6 @@ import sys from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate from java.util import Vector def addTemplate(core): @@ -9,15 +10,20 @@ def addTemplate(core): mobileTemplate.setLevel(90) mobileTemplate.setDifficulty(0) mobileTemplate.setAttackRange(24) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) templates = Vector() templates.add('object/mobile/shared_dressed_stormtrooper_m.iff') mobileTemplate.setTemplates(templates) - + weaponTemplates = Vector() - weaponTemplates.add('object/weapon/ranged/rifle/shared_rifle_e11.iff') - weaponTemplates.add('object/weapon/ranged/rifle/shared_rifle_t21.iff') - mobileTemplate.setWeaponTemplates(weaponTemplates) + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_e11.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_t21.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + attacks = Vector() mobileTemplate.setDefaultAttack('rangedShot') diff --git a/scripts/mobiles/tatooine/tusken_raider.py b/scripts/mobiles/tatooine/tusken_raider.py index 48007d7c..41542293 100644 --- a/scripts/mobiles/tatooine/tusken_raider.py +++ b/scripts/mobiles/tatooine/tusken_raider.py @@ -1,5 +1,6 @@ import sys from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate from java.util import Vector def addTemplate(core): @@ -15,8 +16,9 @@ def addTemplate(core): mobileTemplate.setTemplates(templates) weaponTemplates = Vector() - weaponTemplates.add('object/weapon/ranged/rifle/shared_rifle_tusken.iff') - mobileTemplate.setWeaponTemplates(weaponTemplates) + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_tusken.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) attacks = Vector() mobileTemplate.setDefaultAttack('rangedShot') diff --git a/scripts/object/mobile/dressed_stormtrooper_m.py b/scripts/object/mobile/dressed_stormtrooper_m.py index a4b0d784..6e1e28ee 100644 --- a/scripts/object/mobile/dressed_stormtrooper_m.py +++ b/scripts/object/mobile/dressed_stormtrooper_m.py @@ -2,14 +2,19 @@ import sys def setup(core, object): - lootPoolNames_1 = ['Junk','Rifles'] - lootPoolChances_1 = [90,70] + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] lootGroupChance_1 = 90 object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) - lootPoolNames_2 = ['Colorcrystals'] - lootPoolChances_2 = [100] + lootPoolNames_2 = ['composite_armor','random_loot_rifles'] + lootPoolChances_2 = [50,50] lootGroupChance_2 = 20 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) return \ No newline at end of file diff --git a/src/services/LootService.java b/src/services/LootService.java index 013bd385..e678aae2 100644 --- a/src/services/LootService.java +++ b/src/services/LootService.java @@ -320,8 +320,10 @@ public class LootService implements INetworkDispatch { } handleStats(droppedItem, itemStats); } - if (customizationValues!=null) - setCustomization(droppedItem, itemName); +// if (customizationValues!=null) +// setCustomization(droppedItem, itemName); + + setCustomization(droppedItem, itemName); // for now handleSpecialItems(droppedItem, itemName); @@ -663,13 +665,50 @@ public class LootService implements INetworkDispatch { } private void setArmorStat(SWGObject armor, String statName, String minValue, String maxValue){ - // Armor not yet implemented -// if (statName.equals("armor")){ -// int minimalValue = (int) Integer.parseInt(minValue); -// int maximalValue = (int) Integer.parseInt(maxValue); -// int randomValue = minimalValue + new Random().nextInt(maximalValue-minimalValue); -// armor.setArmor(randomValue); -// } + // Armor is not represented with its own class, + // so we gotta create the attributes here + + if (statName.equals("armor_efficiency_kinetic")){ + int minimalValue = (int) Integer.parseInt(minValue); + int maximalValue = (int) Integer.parseInt(maxValue); + int randomValue = minimalValue + new Random().nextInt(maximalValue-minimalValue); + armor.setIntAttribute("cat_armor_standard_protection.armor_eff_kinetic", randomValue); + } + + if (statName.equals("armor_efficiency_energy")){ + int minimalValue = (int) Integer.parseInt(minValue); + int maximalValue = (int) Integer.parseInt(maxValue); + int randomValue = minimalValue + new Random().nextInt(maximalValue-minimalValue); + armor.setIntAttribute("cat_armor_standard_protection.armor_eff_energy", randomValue); + } + + if (statName.equals("special_protection_heat")){ + int minimalValue = (int) Integer.parseInt(minValue); + int maximalValue = (int) Integer.parseInt(maxValue); + int randomValue = minimalValue + new Random().nextInt(maximalValue-minimalValue); + armor.setIntAttribute("cat_armor_special_protection.special_protection_type_heat", randomValue); + } + + if (statName.equals("special_protection_cold")){ + int minimalValue = (int) Integer.parseInt(minValue); + int maximalValue = (int) Integer.parseInt(maxValue); + int randomValue = minimalValue + new Random().nextInt(maximalValue-minimalValue); + armor.setIntAttribute("cat_armor_special_protection.special_protection_type_cold", randomValue); + } + + if (statName.equals("special_protection_acid")){ + int minimalValue = (int) Integer.parseInt(minValue); + int maximalValue = (int) Integer.parseInt(maxValue); + int randomValue = minimalValue + new Random().nextInt(maximalValue-minimalValue); + armor.setIntAttribute("cat_armor_special_protection.special_protection_type_acid", randomValue); + } + + if (statName.equals("special_protection_electricity")){ + int minimalValue = (int) Integer.parseInt(minValue); + int maximalValue = (int) Integer.parseInt(maxValue); + int randomValue = minimalValue + new Random().nextInt(maximalValue-minimalValue); + armor.setIntAttribute("cat_armor_special_protection.special_protection_type_electricity", randomValue); + } } /* diff --git a/src/services/spawn/MobileTemplate.java b/src/services/spawn/MobileTemplate.java index 78664aa2..92f19f75 100644 --- a/src/services/spawn/MobileTemplate.java +++ b/src/services/spawn/MobileTemplate.java @@ -36,6 +36,8 @@ public class MobileTemplate { private String defaultAttack; private int minDamage = 0; private int maxDamage = 0; + private float attackSpeed = 0; + private int weaponType = 0; private int difficulty = 0; private int health, action; private String creatureName; @@ -43,6 +45,7 @@ public class MobileTemplate { // this is a custom attack Range setting to use for large mobs like krayts private int attackRange; private Vector weaponTemplates = new Vector(); + private Vector weaponTemplateVector = new Vector(); public Vector getTemplates() { return templates; @@ -163,4 +166,28 @@ public class MobileTemplate { public void setWeaponTemplates(Vector weaponTemplates) { this.weaponTemplates = weaponTemplates; } + + public float getAttackSpeed() { + return attackSpeed; + } + + public void setAttackSpeed(float attackSpeed) { + this.attackSpeed = attackSpeed; + } + + public int getWeaponType() { + return weaponType; + } + + public void setWeaponType(int weaponType) { + this.weaponType = weaponType; + } + + public Vector getWeaponTemplateVector() { + return weaponTemplateVector; + } + + public void setWeaponTemplateVector(Vector weaponTemplateVector) { + this.weaponTemplateVector = weaponTemplateVector; + } } diff --git a/src/services/spawn/SpawnService.java b/src/services/spawn/SpawnService.java index d25ec70c..dcde2707 100644 --- a/src/services/spawn/SpawnService.java +++ b/src/services/spawn/SpawnService.java @@ -110,8 +110,31 @@ public class SpawnService { creature.setLevel(level); else creature.setLevel(mobileTemplate.getLevel()); - 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()); - //defaultWeapon.setAttackSpeed(2); + + //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()); + + WeaponObject defaultWeapon = null; + Vector weaponTemplates = mobileTemplate.getWeaponTemplateVector(); + if (weaponTemplates.size()==0){ + defaultWeapon = (WeaponObject) core.objectService.createObject("object/weapon/creature/shared_creature_default_weapon.iff", creature.getPlanet()); + defaultWeapon.setAttackSpeed(1.0F); + defaultWeapon.setWeaponType(6); + } else { + int rnd = new Random().nextInt(weaponTemplates.size()); + defaultWeapon = (WeaponObject) core.objectService.createObject(weaponTemplates.get(rnd).getTemplate(), creature.getPlanet()); + defaultWeapon.setAttackSpeed(weaponTemplates.get(rnd).getAttackSpeed()); + defaultWeapon.setWeaponType(weaponTemplates.get(rnd).getWeaponType()); + } + + + // QA + if (mobileTemplate.getAttackSpeed()==0) + System.err.println("Error in mobile spawn template for " + mobileTemplate.getCreatureName() + ". Missing attackspeed parameter"); + if (mobileTemplate.getAttackRange()==0) + System.err.println("Error in mobile spawn template for " + mobileTemplate.getCreatureName() + ". Missing attackrange parameter"); + + defaultWeapon.setAttackSpeed(mobileTemplate.getAttackSpeed()); + defaultWeapon.setWeaponType(mobileTemplate.getWeaponType()); defaultWeapon.setDamageType("@obj_attr_n:armor_eff_kinetic"); defaultWeapon.setStringAttribute("cat_wpn_damage.damage", "0-0"); if(mobileTemplate.getAttackRange() > 0) diff --git a/src/services/spawn/WeaponTemplate.java b/src/services/spawn/WeaponTemplate.java new file mode 100644 index 00000000..6e35498b --- /dev/null +++ b/src/services/spawn/WeaponTemplate.java @@ -0,0 +1,42 @@ +package services.spawn; + +public class WeaponTemplate { + + private String template=""; + private float attackSpeed=0; + private int weaponType=0; + + public WeaponTemplate(){ + + } + + public WeaponTemplate(String template, int weaponType, float attackSpeed){ + this.template = template; + this.weaponType = weaponType; + this.attackSpeed = attackSpeed; + } + + public String getTemplate() { + return template; + } + + public void setTemplate(String template) { + this.template = template; + } + + public float getAttackSpeed() { + return attackSpeed; + } + + public void setAttackSpeed(float attackSpeed) { + this.attackSpeed = attackSpeed; + } + + public int getWeaponType() { + return weaponType; + } + + public void setWeaponType(int weaponType) { + this.weaponType = weaponType; + } +}