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

View File

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