From fff6687f50105e3d420e6e56bece714a10da4d2f Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Thu, 30 May 2019 18:22:40 -0400 Subject: [PATCH] v0.7.3b: fixed rare crash bugs caused by assuming hunger is present --- .../shatteredpixeldungeon/actors/hero/Hero.java | 6 +++--- .../shatteredpixeldungeon/actors/mobs/Mob.java | 2 +- .../items/armor/curses/Metabolism.java | 3 ++- .../shatteredpixeldungeon/items/artifacts/HornOfPlenty.java | 6 ++++-- .../items/artifacts/TimekeepersHourglass.java | 3 ++- .../shatteredpixeldungeon/items/food/Food.java | 2 +- .../items/potions/elixirs/ElixirOfHoneyedHealing.java | 2 +- 7 files changed, 14 insertions(+), 10 deletions(-) diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/Hero.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/Hero.java index 3f2b9d0c9..bb19b09e5 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/Hero.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/Hero.java @@ -1315,7 +1315,7 @@ public class Hero extends Char { } public boolean isStarving() { - return buff(Hunger.class) != null && ((Hunger)buff( Hunger.class )).isStarving(); + return Buff.affect(this, Hunger.class).isStarving(); } @Override @@ -1656,9 +1656,9 @@ public class Hero extends Char { if (!Dungeon.level.locked) { if (cursed) { GLog.n(Messages.get(this, "search_distracted")); - buff(Hunger.class).reduceHunger(TIME_TO_SEARCH - (2 * HUNGER_FOR_SEARCH)); + Buff.affect(this, Hunger.class).reduceHunger(TIME_TO_SEARCH - (2 * HUNGER_FOR_SEARCH)); } else { - buff(Hunger.class).reduceHunger(TIME_TO_SEARCH - HUNGER_FOR_SEARCH); + Buff.affect(this, Hunger.class).reduceHunger(TIME_TO_SEARCH - HUNGER_FOR_SEARCH); } } spendAndNext(TIME_TO_SEARCH); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Mob.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Mob.java index f0326b5d0..810af2780 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Mob.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Mob.java @@ -540,7 +540,7 @@ public abstract class Mob extends Char { if (buff(SoulMark.class) != null) { int restoration = Math.min(damage, HP); - Dungeon.hero.buff(Hunger.class).satisfy(restoration); + Buff.affect(Dungeon.hero, Hunger.class).satisfy(restoration); Dungeon.hero.HP = (int)Math.ceil(Math.min(Dungeon.hero.HT, Dungeon.hero.HP+(restoration*0.33f))); Dungeon.hero.sprite.emitter().burst( Speck.factory(Speck.HEALING), 1 ); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/armor/curses/Metabolism.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/armor/curses/Metabolism.java index 78bb47260..7a1891939 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/armor/curses/Metabolism.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/armor/curses/Metabolism.java @@ -22,6 +22,7 @@ package com.shatteredpixel.shatteredpixeldungeon.items.armor.curses; import com.shatteredpixel.shatteredpixeldungeon.actors.Char; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Hunger; import com.shatteredpixel.shatteredpixeldungeon.effects.Speck; import com.shatteredpixel.shatteredpixeldungeon.items.armor.Armor; @@ -46,7 +47,7 @@ public class Metabolism extends Glyph { if (healing > 0) { - Hunger hunger = defender.buff( Hunger.class ); + Hunger hunger = Buff.affect(defender, Hunger.class); if (hunger != null && !hunger.isStarving()) { diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/artifacts/HornOfPlenty.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/artifacts/HornOfPlenty.java index b98c1de1d..9558ef1b6 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/artifacts/HornOfPlenty.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/artifacts/HornOfPlenty.java @@ -25,6 +25,7 @@ import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.Badges; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.Statistics; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Hunger; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; import com.shatteredpixel.shatteredpixeldungeon.effects.SpellSprite; @@ -84,9 +85,10 @@ public class HornOfPlenty extends Artifact { else if (charge == 0) GLog.i( Messages.get(this, "no_food") ); else { //consume as much food as it takes to be full, to a minimum of 1 - int chargesToUse = Math.max( 1, hero.buff(Hunger.class).hunger() / (int)(Hunger.STARVING/10)); + Hunger hunger = Buff.affect(Dungeon.hero, Hunger.class); + int chargesToUse = Math.max( 1, hunger.hunger() / (int)(Hunger.STARVING/10)); if (chargesToUse > charge) chargesToUse = charge; - hero.buff(Hunger.class).satisfy((Hunger.STARVING/10) * chargesToUse); + hunger.satisfy((Hunger.STARVING/10) * chargesToUse); Food.foodProc( hero ); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/artifacts/TimekeepersHourglass.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/artifacts/TimekeepersHourglass.java index dbd556fb8..daa50f7e5 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/artifacts/TimekeepersHourglass.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/artifacts/TimekeepersHourglass.java @@ -24,6 +24,7 @@ package com.shatteredpixel.shatteredpixeldungeon.items.artifacts; import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.actors.Char; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Hunger; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.LockedFloor; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; @@ -250,7 +251,7 @@ public class TimekeepersHourglass extends Artifact { ((Hero) target).spendAndNext(5*usedCharge); //shouldn't punish the player for going into stasis frequently - Hunger hunger = target.buff(Hunger.class); + Hunger hunger = Buff.affect(target, Hunger.class); if (hunger != null && !hunger.isStarving()) hunger.satisfy(5*usedCharge); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/food/Food.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/food/Food.java index 956adc06e..65309f9f8 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/food/Food.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/food/Food.java @@ -90,7 +90,7 @@ public class Food extends Item { } protected void satisfy( Hero hero ){ - (hero.buff( Hunger.class )).satisfy( energy ); + Buff.affect(hero, Hunger.class).satisfy( energy ); } public static void foodProc( Hero hero ){ diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/potions/elixirs/ElixirOfHoneyedHealing.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/potions/elixirs/ElixirOfHoneyedHealing.java index e974a5878..def4ca9ba 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/potions/elixirs/ElixirOfHoneyedHealing.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/potions/elixirs/ElixirOfHoneyedHealing.java @@ -45,7 +45,7 @@ public class ElixirOfHoneyedHealing extends Elixir { public void apply(Hero hero) { Buff.affect( hero, Healing.class ).setHeal((int)(0.8f*hero.HT + 14), 0.25f, 0); PotionOfHealing.cure(hero); - hero.buff(Hunger.class).satisfy(Hunger.STARVING/5f); + Buff.affect(hero, Hunger.class).satisfy(Hunger.STARVING/5f); } @Override