Core/Scripts: add checks to Master's Call script
This commit is contained in:
@@ -230,40 +230,58 @@ namespace Scripts.Spells.Hunter
|
|||||||
{
|
{
|
||||||
public override bool Validate(SpellInfo spellInfo)
|
public override bool Validate(SpellInfo spellInfo)
|
||||||
{
|
{
|
||||||
return ValidateSpellInfo(SpellIds.MastersCallTriggered, (uint)spellInfo.GetEffect(0).CalcValue());
|
return spellInfo.GetEffect(0) != null && ValidateSpellInfo(SpellIds.MastersCallTriggered, (uint)spellInfo.GetEffect(0).CalcValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool Load()
|
||||||
|
{
|
||||||
|
return GetCaster().IsPlayer();
|
||||||
|
}
|
||||||
|
|
||||||
|
SpellCastResult DoCheckCast()
|
||||||
|
{
|
||||||
|
Pet pet = GetCaster().ToPlayer().GetPet();
|
||||||
|
if (pet == null || !pet.IsAlive())
|
||||||
|
return SpellCastResult.CantDoThatRightNow;
|
||||||
|
|
||||||
|
// Do a mini Spell::CheckCasterAuras on the pet, no other way of doing this
|
||||||
|
SpellCastResult result = SpellCastResult.SpellCastOk;
|
||||||
|
UnitFlags unitflag = (UnitFlags)pet.GetUInt32Value(UnitFields.Flags);
|
||||||
|
if (!pet.GetCharmerGUID().IsEmpty())
|
||||||
|
result = SpellCastResult.Charmed;
|
||||||
|
else if (unitflag.HasAnyFlag(UnitFlags.Stunned))
|
||||||
|
result = SpellCastResult.Stunned;
|
||||||
|
else if (unitflag.HasAnyFlag(UnitFlags.Fleeing))
|
||||||
|
result = SpellCastResult.Fleeing;
|
||||||
|
else if (unitflag.HasAnyFlag(UnitFlags.Confused))
|
||||||
|
result = SpellCastResult.Confused;
|
||||||
|
|
||||||
|
if (result != SpellCastResult.SpellCastOk)
|
||||||
|
return result;
|
||||||
|
|
||||||
|
Unit target = GetExplTargetUnit();
|
||||||
|
if (!target)
|
||||||
|
return SpellCastResult.BadTargets;
|
||||||
|
|
||||||
|
if (!pet.IsWithinLOSInMap(target))
|
||||||
|
return SpellCastResult.LineOfSight;
|
||||||
|
|
||||||
|
return SpellCastResult.SpellCastOk;
|
||||||
}
|
}
|
||||||
|
|
||||||
void HandleDummy(uint effIndex)
|
void HandleDummy(uint effIndex)
|
||||||
{
|
{
|
||||||
Unit ally = GetHitUnit();
|
GetCaster().ToPlayer().GetPet().CastSpell(GetHitUnit(), (uint)GetEffectValue(), true);
|
||||||
if (ally)
|
|
||||||
{
|
|
||||||
Player caster = GetCaster().ToPlayer();
|
|
||||||
if (caster)
|
|
||||||
{
|
|
||||||
Pet target = caster.GetPet();
|
|
||||||
if (target)
|
|
||||||
{
|
|
||||||
TriggerCastFlags castMask = (TriggerCastFlags.FullMask & ~TriggerCastFlags.IgnoreCasterAurastate);
|
|
||||||
target.CastSpell(ally, (uint)GetEffectValue(), castMask);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void HandleScriptEffect(uint effIndex)
|
void HandleScriptEffect(uint effIndex)
|
||||||
{
|
{
|
||||||
Unit target = GetHitUnit();
|
GetHitUnit().CastSpell((Unit)null, SpellIds.MastersCallTriggered, true);
|
||||||
if (target)
|
|
||||||
{
|
|
||||||
// Cannot be processed while pet is dead
|
|
||||||
TriggerCastFlags castMask = (TriggerCastFlags.FullMask & ~TriggerCastFlags.IgnoreCasterAurastate);
|
|
||||||
target.CastSpell(target, SpellIds.MastersCallTriggered, castMask);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Register()
|
public override void Register()
|
||||||
{
|
{
|
||||||
|
OnCheckCast.Add(new CheckCastHandler(DoCheckCast));
|
||||||
OnEffectHitTarget.Add(new EffectHandler(HandleDummy, 0, SpellEffectName.Dummy));
|
OnEffectHitTarget.Add(new EffectHandler(HandleDummy, 0, SpellEffectName.Dummy));
|
||||||
OnEffectHitTarget.Add(new EffectHandler(HandleScriptEffect, 1, SpellEffectName.ScriptEffect));
|
OnEffectHitTarget.Add(new EffectHandler(HandleScriptEffect, 1, SpellEffectName.ScriptEffect));
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user