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
|
||||
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
|
||||
int durToReduce = Math.round(Random.IntRange(0, 10) * procChanceMultiplier(attacker));
|
||||
int currentDurability = durability;
|
||||
@@ -79,7 +84,7 @@ public class Explosive extends Weapon.Enchantment {
|
||||
|
||||
new ExplosiveCurseBomb().explode(explosionPos);
|
||||
|
||||
durability = 100;
|
||||
durability += 100;
|
||||
Item.updateQuickslot();
|
||||
|
||||
if (weapon instanceof MissileWeapon){
|
||||
@@ -91,15 +96,20 @@ public class Explosive extends Weapon.Enchantment {
|
||||
if (weapon instanceof MissileWeapon
|
||||
&& ((MissileWeapon)weapon).parent != null && ((MissileWeapon) weapon).parent.enchantment instanceof Explosive){
|
||||
((Explosive) ((MissileWeapon) weapon).parent.enchantment).durability = durability;
|
||||
durability = 100;
|
||||
}
|
||||
|
||||
return damage;
|
||||
}
|
||||
|
||||
public void merge(Explosive other){
|
||||
if (other.durability < durability){
|
||||
durability = other.durability;
|
||||
}
|
||||
int diff = 100 - other.durability;
|
||||
durability -= diff;
|
||||
//this can make durability negative, in which case many explosions can happen in succession.
|
||||
}
|
||||
|
||||
public void clear(){
|
||||
durability = 100;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -583,6 +583,11 @@ abstract public class MissileWeapon extends Weapon {
|
||||
m.durability = MAX_DURABILITY;
|
||||
m.parent = this;
|
||||
extraThrownLeft = m.extraThrownLeft = true;
|
||||
|
||||
//explosive durability is tracked only in the parent
|
||||
if (m.enchantment instanceof Explosive){
|
||||
((Explosive) m.enchantment).clear();
|
||||
}
|
||||
}
|
||||
|
||||
return split;
|
||||
|
||||
Reference in New Issue
Block a user