v3.1.0: fixed glyph of stone not accounting for various buffs/debuffs
This commit is contained in:
+43
-1
@@ -21,8 +21,17 @@
|
|||||||
|
|
||||||
package com.shatteredpixel.shatteredpixeldungeon.items.armor.glyphs;
|
package com.shatteredpixel.shatteredpixeldungeon.items.armor.glyphs;
|
||||||
|
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
|
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.AscensionChallenge;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Bless;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ChampionEnemy;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Daze;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Hex;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.HeroClass;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Talent;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.armor.Armor;
|
import com.shatteredpixel.shatteredpixeldungeon.items.armor.Armor;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.items.trinkets.FerretTuft;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSprite;
|
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSprite;
|
||||||
import com.watabou.utils.GameMath;
|
import com.watabou.utils.GameMath;
|
||||||
|
|
||||||
@@ -34,10 +43,43 @@ public class Stone extends Armor.Glyph {
|
|||||||
public int proc(Armor armor, Char attacker, Char defender, int damage) {
|
public int proc(Armor armor, Char attacker, Char defender, int damage) {
|
||||||
|
|
||||||
testing = true;
|
testing = true;
|
||||||
float evasion = defender.defenseSkill(attacker);
|
|
||||||
float accuracy = attacker.attackSkill(defender);
|
float accuracy = attacker.attackSkill(defender);
|
||||||
|
float evasion = defender.defenseSkill(attacker);
|
||||||
testing = false;
|
testing = false;
|
||||||
|
|
||||||
|
//FIXME this is duplicated here because these apply in hit(), not in attack/defenseskill
|
||||||
|
// the true solution is probably to refactor accuracy/evasion code a little bit
|
||||||
|
if (attacker.buff(Bless.class) != null) accuracy *= 1.25f;
|
||||||
|
if (attacker.buff( Hex.class) != null) accuracy *= 0.8f;
|
||||||
|
if (attacker.buff( Daze.class) != null) accuracy *= 0.5f;
|
||||||
|
for (ChampionEnemy buff : attacker.buffs(ChampionEnemy.class)){
|
||||||
|
accuracy *= buff.evasionAndAccuracyFactor();
|
||||||
|
}
|
||||||
|
accuracy *= AscensionChallenge.statModifier(attacker);
|
||||||
|
if (Dungeon.hero.heroClass != HeroClass.CLERIC
|
||||||
|
&& Dungeon.hero.hasTalent(Talent.BLESS)
|
||||||
|
&& attacker.alignment == Char.Alignment.ALLY){
|
||||||
|
// + 3%/5%
|
||||||
|
accuracy *= 1.01f + 0.02f*Dungeon.hero.pointsInTalent(Talent.BLESS);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (defender.buff(Bless.class) != null) evasion *= 1.25f;
|
||||||
|
if (defender.buff( Hex.class) != null) evasion *= 0.8f;
|
||||||
|
if (defender.buff( Daze.class) != null) evasion *= 0.5f;
|
||||||
|
for (ChampionEnemy buff : defender.buffs(ChampionEnemy.class)){
|
||||||
|
evasion *= buff.evasionAndAccuracyFactor();
|
||||||
|
}
|
||||||
|
evasion *= AscensionChallenge.statModifier(defender);
|
||||||
|
if (Dungeon.hero.heroClass != HeroClass.CLERIC
|
||||||
|
&& Dungeon.hero.hasTalent(Talent.BLESS)
|
||||||
|
&& defender.alignment == Char.Alignment.ALLY){
|
||||||
|
// + 3%/5%
|
||||||
|
evasion *= 1.01f + 0.02f*Dungeon.hero.pointsInTalent(Talent.BLESS);
|
||||||
|
}
|
||||||
|
evasion *= FerretTuft.evasionMultiplier();
|
||||||
|
|
||||||
|
// end of copy-pasta
|
||||||
|
|
||||||
evasion *= genericProcChanceMultiplier(defender);
|
evasion *= genericProcChanceMultiplier(defender);
|
||||||
|
|
||||||
float hitChance;
|
float hitChance;
|
||||||
|
|||||||
Reference in New Issue
Block a user