v3.2.2: adjusted explosive durability merging to prevent exploits

This commit is contained in:
Evan Debenham
2025-08-25 13:20:19 -04:00
parent 035840fb32
commit 5bb6f72d58
2 changed files with 19 additions and 4 deletions

View File

@@ -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

View File

@@ -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;