*Implement attribute flag SPELL_ATTR_EX3_BLOCKABLE_SPELL - now spells: Gouge, Kick, Wing Clip, Rake, Hamstring are blocable - by thenecromancer.
--HG-- branch : trunk
This commit is contained in:
@@ -1689,7 +1689,7 @@ struct TRINITY_DLL_DECL npc_mirror_image : SpellAI
|
|||||||
{
|
{
|
||||||
DoCast(spellId);
|
DoCast(spellId);
|
||||||
uint32 casttime = me->GetCurrentSpellCastTime(spellId);
|
uint32 casttime = me->GetCurrentSpellCastTime(spellId);
|
||||||
events.ScheduleEvent(spellId, casttime ? casttime : 500 + GetAISpellInfo(spellId)->cooldown);
|
events.ScheduleEvent(spellId, (casttime ? casttime : 500) + GetAISpellInfo(spellId)->cooldown);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -321,7 +321,7 @@ enum SpellCategory
|
|||||||
#define SPELL_ATTR_EX3_UNK0 0x00000001 // 0
|
#define SPELL_ATTR_EX3_UNK0 0x00000001 // 0
|
||||||
#define SPELL_ATTR_EX3_UNK1 0x00000002 // 1
|
#define SPELL_ATTR_EX3_UNK1 0x00000002 // 1
|
||||||
#define SPELL_ATTR_EX3_UNK2 0x00000004 // 2
|
#define SPELL_ATTR_EX3_UNK2 0x00000004 // 2
|
||||||
#define SPELL_ATTR_EX3_UNK3 0x00000008 // 3
|
#define SPELL_ATTR_EX3_BLOCKABLE_SPELL 0x00000008 // 3 Only dmg class melee in 3.1.3
|
||||||
#define SPELL_ATTR_EX3_UNK4 0x00000010 // 4 Druid Rebirth only this spell have this flag
|
#define SPELL_ATTR_EX3_UNK4 0x00000010 // 4 Druid Rebirth only this spell have this flag
|
||||||
#define SPELL_ATTR_EX3_UNK5 0x00000020 // 5
|
#define SPELL_ATTR_EX3_UNK5 0x00000020 // 5
|
||||||
#define SPELL_ATTR_EX3_UNK6 0x00000040 // 6
|
#define SPELL_ATTR_EX3_UNK6 0x00000040 // 6
|
||||||
|
|||||||
+17
-3
@@ -2769,6 +2769,7 @@ SpellMissInfo Unit::MeleeSpellHitResult(Unit *pVictim, SpellEntry const *spell)
|
|||||||
|
|
||||||
bool canDodge = true;
|
bool canDodge = true;
|
||||||
bool canParry = true;
|
bool canParry = true;
|
||||||
|
bool canBlock = spell->AttributesEx3 & SPELL_ATTR_EX3_BLOCKABLE_SPELL;
|
||||||
|
|
||||||
// Same spells cannot be parry/dodge
|
// Same spells cannot be parry/dodge
|
||||||
if (spell->Attributes & SPELL_ATTR_IMPOSSIBLE_DODGE_PARRY_BLOCK)
|
if (spell->Attributes & SPELL_ATTR_IMPOSSIBLE_DODGE_PARRY_BLOCK)
|
||||||
@@ -2798,10 +2799,11 @@ SpellMissInfo Unit::MeleeSpellHitResult(Unit *pVictim, SpellEntry const *spell)
|
|||||||
if (!pVictim->HasInArc(M_PI,this))
|
if (!pVictim->HasInArc(M_PI,this))
|
||||||
{
|
{
|
||||||
// Can`t dodge from behind in PvP (but its possible in PvE)
|
// Can`t dodge from behind in PvP (but its possible in PvE)
|
||||||
if (GetTypeId() == TYPEID_PLAYER && pVictim->GetTypeId() == TYPEID_PLAYER)
|
if (pVictim->GetTypeId() == TYPEID_PLAYER)
|
||||||
canDodge = false;
|
canDodge = false;
|
||||||
// Can`t parry
|
// Can`t parry or block
|
||||||
canParry = false;
|
canParry = false;
|
||||||
|
canBlock = false;
|
||||||
}
|
}
|
||||||
// Check creatures flags_extra for disable parry
|
// Check creatures flags_extra for disable parry
|
||||||
if(pVictim->GetTypeId()==TYPEID_UNIT)
|
if(pVictim->GetTypeId()==TYPEID_UNIT)
|
||||||
@@ -2809,6 +2811,9 @@ SpellMissInfo Unit::MeleeSpellHitResult(Unit *pVictim, SpellEntry const *spell)
|
|||||||
uint32 flagEx = ((Creature*)pVictim)->GetCreatureInfo()->flags_extra;
|
uint32 flagEx = ((Creature*)pVictim)->GetCreatureInfo()->flags_extra;
|
||||||
if( flagEx & CREATURE_FLAG_EXTRA_NO_PARRY )
|
if( flagEx & CREATURE_FLAG_EXTRA_NO_PARRY )
|
||||||
canParry = false;
|
canParry = false;
|
||||||
|
// Check creatures flags_extra for disable block
|
||||||
|
if( flagEx & CREATURE_FLAG_EXTRA_NO_BLOCK )
|
||||||
|
canBlock = false;
|
||||||
}
|
}
|
||||||
// Ignore combat result aura
|
// Ignore combat result aura
|
||||||
AuraEffectList const& ignore = GetAurasByType(SPELL_AURA_IGNORE_COMBAT_RESULT);
|
AuraEffectList const& ignore = GetAurasByType(SPELL_AURA_IGNORE_COMBAT_RESULT);
|
||||||
@@ -2819,7 +2824,7 @@ SpellMissInfo Unit::MeleeSpellHitResult(Unit *pVictim, SpellEntry const *spell)
|
|||||||
switch((*i)->GetMiscValue())
|
switch((*i)->GetMiscValue())
|
||||||
{
|
{
|
||||||
case MELEE_HIT_DODGE: canDodge = false; break;
|
case MELEE_HIT_DODGE: canDodge = false; break;
|
||||||
case MELEE_HIT_BLOCK: break; // Block check in hit step
|
case MELEE_HIT_BLOCK: canBlock = false; break;
|
||||||
case MELEE_HIT_PARRY: canParry = false; break;
|
case MELEE_HIT_PARRY: canParry = false; break;
|
||||||
default:
|
default:
|
||||||
DEBUG_LOG("Spell %u SPELL_AURA_IGNORE_COMBAT_RESULT have unhandled state %d", (*i)->GetId(), (*i)->GetMiscValue());
|
DEBUG_LOG("Spell %u SPELL_AURA_IGNORE_COMBAT_RESULT have unhandled state %d", (*i)->GetId(), (*i)->GetMiscValue());
|
||||||
@@ -2860,6 +2865,15 @@ SpellMissInfo Unit::MeleeSpellHitResult(Unit *pVictim, SpellEntry const *spell)
|
|||||||
return SPELL_MISS_PARRY;
|
return SPELL_MISS_PARRY;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (canBlock)
|
||||||
|
{
|
||||||
|
int32 blockChance = int32(pVictim->GetUnitBlockChance()*100.0f) - skillDiff * 4;
|
||||||
|
tmp += blockChance;
|
||||||
|
|
||||||
|
if (roll < tmp)
|
||||||
|
return SPELL_MISS_BLOCK;
|
||||||
|
}
|
||||||
|
|
||||||
return SPELL_MISS_NONE;
|
return SPELL_MISS_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user