diff --git a/options.cfg b/options.cfg index c35edf74..6b6462d7 100644 --- a/options.cfg +++ b/options.cfg @@ -1 +1 @@ -LOAD.SNAPSHOT_OBJECTS=0 +LOAD.SNAPSHOT_OBJECTS=1 diff --git a/scripts/demo.py b/scripts/demo.py index f030192a..b99ad9bd 100644 --- a/scripts/demo.py +++ b/scripts/demo.py @@ -5,9 +5,13 @@ def CreateStartingCharacter(core, object): testObject = core.objectService.createObject('object/weapon/ranged/rifle/shared_rifle_t21.iff', object.getPlanet()) testObject.setCustomName('This is a Jython Rifle') testObject.setStringAttribute('crafter', 'Light') - testObject.setStringAttribute('cat_wpn_damage.wpn_damage_type', '@obj_attr_n:armor_eff_energy') - testObject.setIntAttribute('cat_wpn_damage.wpn_damage_min', 425) - testObject.setIntAttribute('cat_wpn_damage.wpn_damage_max', 1140) + testObject.setDamageType('@obj_attr_n:armor_eff_energy') + testObject.setElementalType('@obj_attr_n:elemental_cold') + testObject.setStringAttribute('cat_wpn_damage.damage', '0-0') + testObject.setMinDamage(425) + testObject.setMaxDamage(1150) + testObject.setElementalDamage(50) + testObject.setIntAttribute('cat_wpn_damage.weapon_dps', testObject.getDamagePerSecond()) object.addSkillMod('constitution_modified' , 350) object.addSkillMod('strength_modified' , 350) object.addSkillMod('precision_modified' , 350) @@ -142,9 +146,13 @@ def addProfessionAbilities(core, object, profession): testObject = core.objectService.createObject('object/weapon/melee/2h_sword/crafted_saber/shared_sword_lightsaber_two_handed_gcw_s01_gen5.iff', object.getPlanet()) testObject.setCustomName('Lightsaber') testObject.setStringAttribute('crafter', 'Light') - testObject.setStringAttribute('cat_wpn_damage.wpn_damage_type', '@obj_attr_n:armor_eff_energy') - testObject.setIntAttribute('cat_wpn_damage.wpn_damage_min', 600) - testObject.setIntAttribute('cat_wpn_damage.wpn_damage_max', 1300) + testObject.setDamageType('@obj_attr_n:armor_eff_energy') + testObject.setElementalType('@obj_attr_n:elemental_cold') + testObject.setStringAttribute('cat_wpn_damage.damage', '0-0') + testObject.setMinDamage(600) + testObject.setMaxDamage(1190) + testObject.setElementalDamage(72) + testObject.setIntAttribute('cat_wpn_damage.weapon_dps', testObject.getDamagePerSecond()) inventory = object.getSlottedObject('inventory') inventory.add(testObject) diff --git a/src/resources/objects/weapon/WeaponMessageBuilder.java b/src/resources/objects/weapon/WeaponMessageBuilder.java index 6f3a3a1f..b4264408 100644 --- a/src/resources/objects/weapon/WeaponMessageBuilder.java +++ b/src/resources/objects/weapon/WeaponMessageBuilder.java @@ -59,7 +59,7 @@ public class WeaponMessageBuilder extends ObjectMessageBuilder { buffer.putInt(weapon.getOptionsBitmask()); buffer.putInt(weapon.getIncapTimer()); buffer.putInt(weapon.getConditionDamage()); - buffer.putInt(weapon.getMaxDamage()); + buffer.putInt(0); buffer.putInt(0); buffer.putInt(0x64); buffer.put((byte) (weapon.isStaticObject() ? 1 : 0)); diff --git a/src/resources/objects/weapon/WeaponObject.java b/src/resources/objects/weapon/WeaponObject.java index 90319eac..2d568386 100644 --- a/src/resources/objects/weapon/WeaponObject.java +++ b/src/resources/objects/weapon/WeaponObject.java @@ -33,7 +33,7 @@ import engine.resources.scene.Planet; import engine.resources.scene.Point3D; import engine.resources.scene.Quaternion; -@Persistent +@Persistent(version=1) public class WeaponObject extends SWGObject { // TODO: Thread safety @@ -44,7 +44,6 @@ public class WeaponObject extends SWGObject { private byte[] customization; private List componentCustomizations = new ArrayList(); private int optionsBitmask = 0; - private int maxDamage = 0; private boolean staticObject = true; @NotPersistent private WeaponMessageBuilder messageBuilder; @@ -135,11 +134,47 @@ public class WeaponObject extends SWGObject { } public int getMaxDamage() { - return maxDamage; + return Integer.parseInt(getStringAttribute("cat_wpn_damage.damage").split("-")[1]); } public void setMaxDamage(int maxDamage) { - this.maxDamage = maxDamage; + setStringAttribute("cat_wpn_damage.damage", String.valueOf(getMinDamage()) + "-" + String.valueOf(maxDamage)); + } + + public int getMinDamage() { + return Integer.parseInt(getStringAttribute("cat_wpn_damage.damage").split("-")[0]); + } + + public void setMinDamage(int minDamage) { + setStringAttribute("cat_wpn_damage.damage", String.valueOf(minDamage) + "-" + String.valueOf(getMaxDamage())); + } + + public int getElementalDamage() { + return getIntAttribute("cat_wpn_damage.wpn_elemental_value"); + } + + public void setElementalDamage(int elementalDamage) { + setIntAttribute("cat_wpn_damage.wpn_elemental_value", elementalDamage); + } + + public String getElementalType() { + return getStringAttribute("cat_wpn_damage.wpn_elemental_type"); + } + + public void setElementalType(String elementalType) { + setStringAttribute("cat_wpn_damage.wpn_elemental_type", elementalType); + } + + public String getDamageType() { + return getStringAttribute("cat_wpn_damage.wpn_damage_type"); + } + + public void setDamageType(String damageType) { + setStringAttribute("cat_wpn_damage.wpn_damage_type", damageType); + } + + public int getDamagePerSecond() { + return (int) (((getMaxDamage() + getElementalDamage() + getMinDamage() + getElementalDamage()) / 2 + getElementalDamage()) * (1 / getAttackSpeed())); } public boolean isStaticObject() { diff --git a/src/services/combat/CombatService.java b/src/services/combat/CombatService.java index 8f67abfe..8fc759a2 100644 --- a/src/services/combat/CombatService.java +++ b/src/services/combat/CombatService.java @@ -540,8 +540,8 @@ public class CombatService implements INetworkDispatch { if(command.getPercentFromWeapon() > 0 && weapon != attacker.getSlottedObject("default_weapon")) { - float weaponMinDmg = weapon.getIntAttribute("cat_wpn_damage.wpn_damage_min"); - float weaponMaxDmg = weapon.getIntAttribute("cat_wpn_damage.wpn_damage_max"); + float weaponMinDmg = weapon.getMinDamage(); + float weaponMaxDmg = weapon.getMaxDamage(); float weaponDmg = new Random().nextInt((int) (weaponMaxDmg - weaponMinDmg + 1)) + weaponMinDmg; weaponDmg *= command.getPercentFromWeapon();