mirror of
https://github.com/mangosfour/server.git
synced 2025-12-12 19:37:03 +00:00
[10703] Check SPELL_ATTR_IMPOSSIBLE_DODGE_PARRY_BLOCK for special attacks.
Signed-off-by: VladimirMangos <vladimir@getmangos.com>
This commit is contained in:
parent
5bc0ba05e3
commit
71b50e6e42
2 changed files with 33 additions and 25 deletions
|
|
@ -2789,33 +2789,41 @@ void Unit::SendMeleeAttackStop(Unit* victim)
|
||||||
((Creature*)victim)->AI().EnterEvadeMode(this);*/
|
((Creature*)victim)->AI().EnterEvadeMode(this);*/
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Unit::IsSpellBlocked(Unit *pCaster, SpellEntry const * /*spellProto*/, WeaponAttackType attackType)
|
bool Unit::IsSpellBlocked(Unit *pCaster, SpellEntry const *spellEntry, WeaponAttackType attackType)
|
||||||
{
|
{
|
||||||
if (HasInArc(M_PI_F,pCaster))
|
if (!HasInArc(M_PI_F, pCaster))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (spellEntry)
|
||||||
{
|
{
|
||||||
/* Currently not exist spells with ignore block
|
// Some spells cannot be blocked
|
||||||
// Ignore combat result aura (parry/dodge check on prepare)
|
if (spellEntry->Attributes & SPELL_ATTR_IMPOSSIBLE_DODGE_PARRY_BLOCK)
|
||||||
AuraList const& ignore = GetAurasByType(SPELL_AURA_IGNORE_COMBAT_RESULT);
|
return false;
|
||||||
for(AuraList::const_iterator i = ignore.begin(); i != ignore.end(); ++i)
|
|
||||||
{
|
|
||||||
if (!(*i)->isAffectedOnSpell(spellProto))
|
|
||||||
continue;
|
|
||||||
if ((*i)->GetModifier()->m_miscvalue == )
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Check creatures flags_extra for disable block
|
|
||||||
if(GetTypeId()==TYPEID_UNIT &&
|
|
||||||
((Creature*)this)->GetCreatureInfo()->flags_extra & CREATURE_FLAG_EXTRA_NO_BLOCK )
|
|
||||||
return false;
|
|
||||||
|
|
||||||
float blockChance = GetUnitBlockChance();
|
|
||||||
blockChance += (int32(pCaster->GetWeaponSkillValue(attackType)) - int32(GetMaxSkillValueForLevel()))*0.04f;
|
|
||||||
if (roll_chance_f(blockChance))
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
return false;
|
|
||||||
|
/*
|
||||||
|
// Ignore combat result aura (parry/dodge check on prepare)
|
||||||
|
AuraList const& ignore = GetAurasByType(SPELL_AURA_IGNORE_COMBAT_RESULT);
|
||||||
|
for(AuraList::const_iterator i = ignore.begin(); i != ignore.end(); ++i)
|
||||||
|
{
|
||||||
|
if (!(*i)->isAffectedOnSpell(spellProto))
|
||||||
|
continue;
|
||||||
|
if ((*i)->GetModifier()->m_miscvalue == )
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Check creatures flags_extra for disable block
|
||||||
|
if (GetTypeId() == TYPEID_UNIT)
|
||||||
|
{
|
||||||
|
if (((Creature*)this)->GetCreatureInfo()->flags_extra & CREATURE_FLAG_EXTRA_NO_BLOCK)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
float blockChance = GetUnitBlockChance();
|
||||||
|
blockChance += (int32(pCaster->GetWeaponSkillValue(attackType)) - int32(GetMaxSkillValueForLevel()))*0.04f;
|
||||||
|
|
||||||
|
return roll_chance_f(blockChance);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Melee based spells can be miss, parry or dodge on this step
|
// Melee based spells can be miss, parry or dodge on this step
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
#ifndef __REVISION_NR_H__
|
#ifndef __REVISION_NR_H__
|
||||||
#define __REVISION_NR_H__
|
#define __REVISION_NR_H__
|
||||||
#define REVISION_NR "10702"
|
#define REVISION_NR "10703"
|
||||||
#endif // __REVISION_NR_H__
|
#endif // __REVISION_NR_H__
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue