Core/SAI: allow creatures to handle gameobject spellhit SAI events.
Port From (https://github.com/TrinityCore/TrinityCore/commit/83a9222c390110ae082512ed858a5580a958aa21)
This commit is contained in:
@@ -662,11 +662,21 @@ namespace Game.AI
|
|||||||
GetScript().ProcessEventsFor(SmartEvents.SpellHit, caster, 0, 0, false, spellInfo);
|
GetScript().ProcessEventsFor(SmartEvents.SpellHit, caster, 0, 0, false, spellInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void SpellHitByGameObject(GameObject obj, SpellInfo spellInfo)
|
||||||
|
{
|
||||||
|
GetScript().ProcessEventsFor(SmartEvents.SpellHit, null, 0, 0, false, spellInfo, obj);
|
||||||
|
}
|
||||||
|
|
||||||
public override void SpellHitTarget(Unit target, SpellInfo spellInfo)
|
public override void SpellHitTarget(Unit target, SpellInfo spellInfo)
|
||||||
{
|
{
|
||||||
GetScript().ProcessEventsFor(SmartEvents.SpellHitTarget, target, 0, 0, false, spellInfo);
|
GetScript().ProcessEventsFor(SmartEvents.SpellHitTarget, target, 0, 0, false, spellInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void SpellHitTargetGameObject(GameObject target, SpellInfo spellInfo)
|
||||||
|
{
|
||||||
|
GetScript().ProcessEventsFor(SmartEvents.SpellHitTarget, null, 0, 0, false, spellInfo, target);
|
||||||
|
}
|
||||||
|
|
||||||
public override void DamageTaken(Unit attacker, ref uint damage)
|
public override void DamageTaken(Unit attacker, ref uint damage)
|
||||||
{
|
{
|
||||||
GetScript().ProcessEventsFor(SmartEvents.Damaged, attacker, damage);
|
GetScript().ProcessEventsFor(SmartEvents.Damaged, attacker, damage);
|
||||||
|
|||||||
@@ -7862,9 +7862,8 @@ namespace Game.Spells
|
|||||||
// Get original caster (if exist) and calculate damage/healing from him data
|
// Get original caster (if exist) and calculate damage/healing from him data
|
||||||
// Skip if m_originalCaster not available
|
// Skip if m_originalCaster not available
|
||||||
Unit caster = spell.GetOriginalCaster() ? spell.GetOriginalCaster() : spell.GetCaster().ToUnit();
|
Unit caster = spell.GetOriginalCaster() ? spell.GetOriginalCaster() : spell.GetCaster().ToUnit();
|
||||||
if (caster == null)
|
if (caster != null)
|
||||||
return;
|
{
|
||||||
|
|
||||||
// Fill base trigger info
|
// Fill base trigger info
|
||||||
ProcFlags procAttacker = spell.m_procAttacker;
|
ProcFlags procAttacker = spell.m_procAttacker;
|
||||||
ProcFlags procVictim = spell.m_procVictim;
|
ProcFlags procVictim = spell.m_procVictim;
|
||||||
@@ -7883,7 +7882,7 @@ namespace Game.Spells
|
|||||||
positive = false;
|
positive = false;
|
||||||
else if (spell.m_healing == 0)
|
else if (spell.m_healing == 0)
|
||||||
{
|
{
|
||||||
for (uint i = 0; i < SpellConst.MaxEffects; ++i)
|
for (uint i = 0; i < spell.m_spellInfo.GetEffects().Count; ++i)
|
||||||
{
|
{
|
||||||
// in case of immunity, check all effects to choose correct procFlags, as none has technically hit
|
// in case of immunity, check all effects to choose correct procFlags, as none has technically hit
|
||||||
if (EffectMask != 0 && (EffectMask & (1 << (int)i)) == 0)
|
if (EffectMask != 0 && (EffectMask & (1 << (int)i)) == 0)
|
||||||
@@ -8048,6 +8047,7 @@ namespace Game.Spells
|
|||||||
// Check for SPELL_ATTR7_INTERRUPT_ONLY_NONPLAYER
|
// Check for SPELL_ATTR7_INTERRUPT_ONLY_NONPLAYER
|
||||||
if (MissCondition == SpellMissInfo.None && spell.m_spellInfo.HasAttribute(SpellAttr7.InterruptOnlyNonplayer) && !unit.IsPlayer())
|
if (MissCondition == SpellMissInfo.None && spell.m_spellInfo.HasAttribute(SpellAttr7.InterruptOnlyNonplayer) && !unit.IsPlayer())
|
||||||
caster.CastSpell(unit, 32747, new CastSpellExtraArgs(TriggerCastFlags.FullMask).SetOriginalCastId(spell.m_castId));
|
caster.CastSpell(unit, 32747, new CastSpellExtraArgs(TriggerCastFlags.FullMask).SetOriginalCastId(spell.m_castId));
|
||||||
|
}
|
||||||
|
|
||||||
if (_spellHitTarget)
|
if (_spellHitTarget)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user