v3.2.2: adjusted explosive durability merging to prevent exploits
This commit is contained in:
@@ -47,6 +47,11 @@ public class Explosive extends Weapon.Enchantment {
|
|||||||
@Override
|
@Override
|
||||||
public int proc( Weapon weapon, Char attacker, Char defender, int damage ) {
|
public int proc( Weapon weapon, Char attacker, Char defender, int damage ) {
|
||||||
|
|
||||||
|
if (weapon instanceof MissileWeapon
|
||||||
|
&& ((MissileWeapon)weapon).parent != null && ((MissileWeapon) weapon).parent.enchantment instanceof Explosive){
|
||||||
|
durability = ((Explosive) ((MissileWeapon) weapon).parent.enchantment).durability;
|
||||||
|
}
|
||||||
|
|
||||||
//average value of 5, or 20 hits to an explosion
|
//average value of 5, or 20 hits to an explosion
|
||||||
int durToReduce = Math.round(Random.IntRange(0, 10) * procChanceMultiplier(attacker));
|
int durToReduce = Math.round(Random.IntRange(0, 10) * procChanceMultiplier(attacker));
|
||||||
int currentDurability = durability;
|
int currentDurability = durability;
|
||||||
@@ -79,7 +84,7 @@ public class Explosive extends Weapon.Enchantment {
|
|||||||
|
|
||||||
new ExplosiveCurseBomb().explode(explosionPos);
|
new ExplosiveCurseBomb().explode(explosionPos);
|
||||||
|
|
||||||
durability = 100;
|
durability += 100;
|
||||||
Item.updateQuickslot();
|
Item.updateQuickslot();
|
||||||
|
|
||||||
if (weapon instanceof MissileWeapon){
|
if (weapon instanceof MissileWeapon){
|
||||||
@@ -91,15 +96,20 @@ public class Explosive extends Weapon.Enchantment {
|
|||||||
if (weapon instanceof MissileWeapon
|
if (weapon instanceof MissileWeapon
|
||||||
&& ((MissileWeapon)weapon).parent != null && ((MissileWeapon) weapon).parent.enchantment instanceof Explosive){
|
&& ((MissileWeapon)weapon).parent != null && ((MissileWeapon) weapon).parent.enchantment instanceof Explosive){
|
||||||
((Explosive) ((MissileWeapon) weapon).parent.enchantment).durability = durability;
|
((Explosive) ((MissileWeapon) weapon).parent.enchantment).durability = durability;
|
||||||
|
durability = 100;
|
||||||
}
|
}
|
||||||
|
|
||||||
return damage;
|
return damage;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void merge(Explosive other){
|
public void merge(Explosive other){
|
||||||
if (other.durability < durability){
|
int diff = 100 - other.durability;
|
||||||
durability = other.durability;
|
durability -= diff;
|
||||||
}
|
//this can make durability negative, in which case many explosions can happen in succession.
|
||||||
|
}
|
||||||
|
|
||||||
|
public void clear(){
|
||||||
|
durability = 100;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -583,6 +583,11 @@ abstract public class MissileWeapon extends Weapon {
|
|||||||
m.durability = MAX_DURABILITY;
|
m.durability = MAX_DURABILITY;
|
||||||
m.parent = this;
|
m.parent = this;
|
||||||
extraThrownLeft = m.extraThrownLeft = true;
|
extraThrownLeft = m.extraThrownLeft = true;
|
||||||
|
|
||||||
|
//explosive durability is tracked only in the parent
|
||||||
|
if (m.enchantment instanceof Explosive){
|
||||||
|
((Explosive) m.enchantment).clear();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return split;
|
return split;
|
||||||
|
|||||||
Reference in New Issue
Block a user