mirror of
https://github.com/mangosfour/server.git
synced 2025-12-14 16:37:01 +00:00
[7280] Implement 287 SPELL_AURA_DEFLECT_SPELLS aura
Signed-off-by: DiSlord <dislord@nomail.com>
This commit is contained in:
parent
b049b4ee54
commit
56e97b4d9e
4 changed files with 36 additions and 5 deletions
|
|
@ -326,7 +326,11 @@ enum AuraType
|
||||||
SPELL_AURA_MOD_HONOR_GAIN = 281,
|
SPELL_AURA_MOD_HONOR_GAIN = 281,
|
||||||
SPELL_AURA_MOD_BASE_HEALTH_PCT = 282,
|
SPELL_AURA_MOD_BASE_HEALTH_PCT = 282,
|
||||||
SPELL_AURA_MOD_HEALING_RECEIVED = 283, // Possibly only for some spell family class spells
|
SPELL_AURA_MOD_HEALING_RECEIVED = 283, // Possibly only for some spell family class spells
|
||||||
TOTAL_AURAS = 284
|
SPELL_AURA_284,
|
||||||
|
SPELL_AURA_285,
|
||||||
|
SPELL_AURA_286,
|
||||||
|
SPELL_AURA_DEFLECT_SPELLS,
|
||||||
|
TOTAL_AURAS = 288
|
||||||
};
|
};
|
||||||
|
|
||||||
enum AreaAuraType
|
enum AreaAuraType
|
||||||
|
|
|
||||||
|
|
@ -333,7 +333,11 @@ pAuraHandler AuraHandler[TOTAL_AURAS]=
|
||||||
&Aura::HandleNULL, //280 SPELL_AURA_MOD_TARGET_ARMOR_PCT
|
&Aura::HandleNULL, //280 SPELL_AURA_MOD_TARGET_ARMOR_PCT
|
||||||
&Aura::HandleNULL, //281 SPELL_AURA_MOD_HONOR_GAIN
|
&Aura::HandleNULL, //281 SPELL_AURA_MOD_HONOR_GAIN
|
||||||
&Aura::HandleAuraIncreaseBaseHealthPercent, //282 SPELL_AURA_INCREASE_BASE_HEALTH_PERCENT
|
&Aura::HandleAuraIncreaseBaseHealthPercent, //282 SPELL_AURA_INCREASE_BASE_HEALTH_PERCENT
|
||||||
&Aura::HandleNoImmediateEffect //283 SPELL_AURA_MOD_HEALING_RECEIVED implemented in Unit::SpellHealingBonus
|
&Aura::HandleNoImmediateEffect, //283 SPELL_AURA_MOD_HEALING_RECEIVED implemented in Unit::SpellHealingBonus
|
||||||
|
&Aura::HandleNULL, //284
|
||||||
|
&Aura::HandleNULL, //285
|
||||||
|
&Aura::HandleNULL, //286
|
||||||
|
&Aura::HandleNULL, //287 SPELL_AURA_DEFLECT_SPELLS implemented in Unit::MagicSpellHitResult and Unit::MeleeSpellHitResult
|
||||||
};
|
};
|
||||||
|
|
||||||
Aura::Aura(SpellEntry const* spellproto, uint32 eff, int32 *currentBasePoints, Unit *target, Unit *caster, Item* castItem) :
|
Aura::Aura(SpellEntry const* spellproto, uint32 eff, int32 *currentBasePoints, Unit *target, Unit *caster, Item* castItem) :
|
||||||
|
|
|
||||||
|
|
@ -2390,9 +2390,19 @@ SpellMissInfo Unit::MeleeSpellHitResult(Unit *pVictim, SpellEntry const *spell)
|
||||||
if (spell->Attributes & SPELL_ATTR_IMPOSSIBLE_DODGE_PARRY_BLOCK)
|
if (spell->Attributes & SPELL_ATTR_IMPOSSIBLE_DODGE_PARRY_BLOCK)
|
||||||
return SPELL_MISS_NONE;
|
return SPELL_MISS_NONE;
|
||||||
|
|
||||||
// Ranged attack cannot be parry/dodge
|
// Ranged attack cannot be parry/dodge only deflect
|
||||||
if (attType == RANGED_ATTACK)
|
if (attType == RANGED_ATTACK)
|
||||||
|
{
|
||||||
|
// only if in front
|
||||||
|
if (pVictim->HasInArc(M_PI,this))
|
||||||
|
{
|
||||||
|
int32 deflect_chance = pVictim->GetTotalAuraModifier(SPELL_AURA_DEFLECT_SPELLS)*100;
|
||||||
|
tmp+=deflect_chance;
|
||||||
|
if (roll < tmp)
|
||||||
|
return SPELL_MISS_DEFLECT;
|
||||||
|
}
|
||||||
return SPELL_MISS_NONE;
|
return SPELL_MISS_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
// Check for attack from behind
|
// Check for attack from behind
|
||||||
if (!pVictim->HasInArc(M_PI,this))
|
if (!pVictim->HasInArc(M_PI,this))
|
||||||
|
|
@ -2524,9 +2534,22 @@ SpellMissInfo Unit::MagicSpellHitResult(Unit *pVictim, SpellEntry const *spell)
|
||||||
if (HitChance < 100) HitChance = 100;
|
if (HitChance < 100) HitChance = 100;
|
||||||
if (HitChance > 9900) HitChance = 9900;
|
if (HitChance > 9900) HitChance = 9900;
|
||||||
|
|
||||||
|
int32 tmp = 10000 - HitChance;
|
||||||
|
|
||||||
uint32 rand = urand(0,10000);
|
uint32 rand = urand(0,10000);
|
||||||
if (rand > HitChance)
|
|
||||||
|
if (rand < tmp)
|
||||||
return SPELL_MISS_RESIST;
|
return SPELL_MISS_RESIST;
|
||||||
|
|
||||||
|
// cast by caster in front of victim
|
||||||
|
if (pVictim->HasInArc(M_PI,this))
|
||||||
|
{
|
||||||
|
int32 deflect_chance = pVictim->GetTotalAuraModifier(SPELL_AURA_DEFLECT_SPELLS)*100;
|
||||||
|
tmp+=deflect_chance;
|
||||||
|
if (rand < tmp)
|
||||||
|
return SPELL_MISS_DEFLECT;
|
||||||
|
}
|
||||||
|
|
||||||
return SPELL_MISS_NONE;
|
return SPELL_MISS_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
#ifndef __REVISION_NR_H__
|
#ifndef __REVISION_NR_H__
|
||||||
#define __REVISION_NR_H__
|
#define __REVISION_NR_H__
|
||||||
#define REVISION_NR "7279"
|
#define REVISION_NR "7280"
|
||||||
#endif // __REVISION_NR_H__
|
#endif // __REVISION_NR_H__
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue