more updates
This commit is contained in:
@@ -4948,38 +4948,6 @@ void AuraEffect::HandleAuraDummy(AuraApplication const* aurApp, uint8 mode, bool
|
||||
target->SetEntry(apply ? 17654 : 17326);
|
||||
break;
|
||||
}
|
||||
//Summon Fire Elemental
|
||||
case 40133:
|
||||
{
|
||||
if (!caster)
|
||||
break;
|
||||
|
||||
Unit* owner = caster->GetOwner();
|
||||
if (owner && owner->GetTypeId() == TYPEID_PLAYER)
|
||||
{
|
||||
if (apply)
|
||||
owner->CastSpell(owner, 8985, true);
|
||||
else
|
||||
owner->ToPlayer()->RemovePet(NULL, PET_SAVE_NOT_IN_SLOT, true);
|
||||
}
|
||||
break;
|
||||
}
|
||||
//Summon Earth Elemental
|
||||
case 40132 :
|
||||
{
|
||||
if (!caster)
|
||||
break;
|
||||
|
||||
Unit* owner = caster->GetOwner();
|
||||
if (owner && owner->GetTypeId() == TYPEID_PLAYER)
|
||||
{
|
||||
if (apply)
|
||||
owner->CastSpell(owner, 19704, true);
|
||||
else
|
||||
owner->ToPlayer()->RemovePet(NULL, PET_SAVE_NOT_IN_SLOT, true);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 57819: // Argent Champion
|
||||
case 57820: // Ebon Champion
|
||||
case 57821: // Champion of the Kirin Tor
|
||||
@@ -5072,69 +5040,14 @@ void AuraEffect::HandleAuraDummy(AuraApplication const* aurApp, uint8 mode, bool
|
||||
}
|
||||
case SPELLFAMILY_DRUID:
|
||||
{
|
||||
if (!(mode & AURA_EFFECT_HANDLE_CHANGE_AMOUNT_MASK))
|
||||
break;
|
||||
switch (GetId())
|
||||
{
|
||||
case 52610: // Savage Roar
|
||||
{
|
||||
uint32 spellId = 62071;
|
||||
if (apply)
|
||||
{
|
||||
if (target->GetShapeshiftForm() != FORM_CAT)
|
||||
break;
|
||||
|
||||
target->CastSpell(target, spellId, true, NULL, NULL, GetCasterGUID());
|
||||
break;
|
||||
}
|
||||
target->RemoveAurasDueToSpell(spellId);
|
||||
break;
|
||||
}
|
||||
case 61336: // Survival Instincts
|
||||
{
|
||||
if (!(mode & AURA_EFFECT_HANDLE_REAL))
|
||||
break;
|
||||
|
||||
if (apply)
|
||||
{
|
||||
if (!target->IsInFeralForm())
|
||||
break;
|
||||
|
||||
int32 bp0 = int32(target->CountPctFromMaxHealth(GetAmount()));
|
||||
target->CastCustomSpell(target, 50322, &bp0, NULL, NULL, true);
|
||||
}
|
||||
else
|
||||
target->RemoveAurasDueToSpell(50322);
|
||||
break;
|
||||
}
|
||||
}
|
||||
// Predatory Strikes
|
||||
if (target->GetTypeId() == TYPEID_PLAYER && GetSpellInfo()->SpellIconID == 1563)
|
||||
{
|
||||
target->ToPlayer()->UpdateAttackPowerAndDamage();
|
||||
}
|
||||
//if (!(mode & AURA_EFFECT_HANDLE_REAL))
|
||||
//break;
|
||||
break;
|
||||
}
|
||||
case SPELLFAMILY_SHAMAN:
|
||||
{
|
||||
if (!(mode & AURA_EFFECT_HANDLE_REAL))
|
||||
break;
|
||||
// Sentry Totem
|
||||
if (GetId() == 6495 && caster && caster->GetTypeId() == TYPEID_PLAYER)
|
||||
{
|
||||
if (apply)
|
||||
{
|
||||
if (uint64 guid = caster->m_SummonSlot[4])
|
||||
{
|
||||
if (Creature* totem = caster->GetMap()->GetCreature(guid))
|
||||
if (totem->isTotem())
|
||||
caster->ToPlayer()->CastSpell(totem, 6277, true);
|
||||
}
|
||||
}
|
||||
else
|
||||
caster->ToPlayer()->StopCastingBindSight();
|
||||
return;
|
||||
}
|
||||
//if (!(mode & AURA_EFFECT_HANDLE_REAL))
|
||||
//break;
|
||||
break;
|
||||
}
|
||||
case SPELLFAMILY_PALADIN:
|
||||
@@ -6428,33 +6341,6 @@ void AuraEffect::HandlePeriodicManaLeechAuraTick(Unit* target, Unit* caster) con
|
||||
target->AddThreat(caster, float(gainedAmount) * 0.5f, GetSpellInfo()->GetSchoolMask(), GetSpellInfo());
|
||||
}
|
||||
|
||||
// spell-specific code
|
||||
switch (GetId())
|
||||
{
|
||||
case 31447: // Mark of Kaz'rogal
|
||||
if (target->GetPower(powerType) == 0)
|
||||
{
|
||||
target->CastSpell(target, 31463, true, 0, this);
|
||||
// Remove aura
|
||||
GetBase()->SetDuration(0);
|
||||
}
|
||||
break;
|
||||
case 32960: // Mark of Kazzak
|
||||
{
|
||||
int32 modifier = int32(target->GetPower(powerType) * 0.05f);
|
||||
target->ModifyPower(powerType, -modifier);
|
||||
|
||||
if (target->GetPower(powerType) == 0)
|
||||
{
|
||||
target->CastSpell(target, 32961, true, 0, this);
|
||||
// Remove aura
|
||||
GetBase()->SetDuration(0);
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
// Drain Mana
|
||||
if (m_spellInfo->SpellFamilyName == SPELLFAMILY_WARLOCK
|
||||
&& m_spellInfo->SpellFamilyFlags[0] & 0x00000010)
|
||||
|
||||
@@ -4960,20 +4960,6 @@ SpellCastResult Spell::CheckCast(bool strict)
|
||||
// for effects of spells that have only one target
|
||||
switch (m_spellInfo->Effects[i].Effect)
|
||||
{
|
||||
case SPELL_EFFECT_DUMMY:
|
||||
{
|
||||
if (m_spellInfo->Id == 31789) // Righteous Defense
|
||||
{
|
||||
if (m_caster->GetTypeId() != TYPEID_PLAYER)
|
||||
return SPELL_FAILED_DONT_REPORT;
|
||||
|
||||
Unit* target = m_targets.GetUnitTarget();
|
||||
if (!target || !target->IsFriendlyTo(m_caster) || target->getAttackers().empty())
|
||||
return SPELL_FAILED_BAD_TARGETS;
|
||||
|
||||
}
|
||||
break;
|
||||
}
|
||||
case SPELL_EFFECT_LEARN_SPELL:
|
||||
{
|
||||
if (m_caster->GetTypeId() != TYPEID_PLAYER)
|
||||
@@ -5320,35 +5306,6 @@ SpellCastResult Spell::CheckCast(bool strict)
|
||||
//custom check
|
||||
switch (m_spellInfo->Id)
|
||||
{
|
||||
case 61336:
|
||||
if (m_caster->GetTypeId() != TYPEID_PLAYER || !m_caster->ToPlayer()->IsInFeralForm())
|
||||
return SPELL_FAILED_ONLY_SHAPESHIFT;
|
||||
break;
|
||||
case 1515:
|
||||
{
|
||||
if (m_caster->GetTypeId() != TYPEID_PLAYER)
|
||||
return SPELL_FAILED_BAD_TARGETS;
|
||||
|
||||
if (!m_targets.GetUnitTarget() || m_targets.GetUnitTarget()->GetTypeId() == TYPEID_PLAYER)
|
||||
return SPELL_FAILED_BAD_IMPLICIT_TARGETS;
|
||||
|
||||
Creature* target = m_targets.GetUnitTarget()->ToCreature();
|
||||
|
||||
if (target->getLevel() > m_caster->getLevel())
|
||||
return SPELL_FAILED_HIGHLEVEL;
|
||||
|
||||
// use SMSG_PET_TAME_FAILURE?
|
||||
if (!target->GetCreatureTemplate()->isTameable (m_caster->ToPlayer()->CanTameExoticPets()))
|
||||
return SPELL_FAILED_BAD_TARGETS;
|
||||
|
||||
if (m_caster->GetPetGUID())
|
||||
return SPELL_FAILED_ALREADY_HAVE_SUMMON;
|
||||
|
||||
if (m_caster->GetCharmGUID())
|
||||
return SPELL_FAILED_ALREADY_HAVE_CHARM;
|
||||
|
||||
break;
|
||||
}
|
||||
case 44795: // Parachute
|
||||
{
|
||||
float x, y, z;
|
||||
|
||||
@@ -353,21 +353,6 @@ void Spell::EffectSchoolDMG(SpellEffIndex effIndex)
|
||||
return;
|
||||
break;
|
||||
}
|
||||
case 33671: // gruul's shatter
|
||||
case 50811: // krystallus shatter ( Normal )
|
||||
case 61547: // krystallus shatter ( Heroic )
|
||||
{
|
||||
// don't damage self and only players
|
||||
if (unitTarget->GetGUID() == m_caster->GetGUID() || unitTarget->GetTypeId() != TYPEID_PLAYER)
|
||||
return;
|
||||
|
||||
float radius = m_spellInfo->Effects[EFFECT_0].CalcRadius(m_caster);
|
||||
if (!radius)
|
||||
return;
|
||||
float distance = m_caster->GetDistance2d(unitTarget);
|
||||
damage = (distance > radius) ? 0 : int32(m_spellInfo->Effects[EFFECT_0].CalcValue(m_caster) * ((radius - distance)/radius));
|
||||
break;
|
||||
}
|
||||
// Gargoyle Strike
|
||||
case 51963:
|
||||
{
|
||||
@@ -3774,12 +3759,7 @@ void Spell::EffectScriptEffect(SpellEffIndex effIndex)
|
||||
if (!itemTarget && m_caster->GetTypeId() != TYPEID_PLAYER)
|
||||
return;
|
||||
|
||||
uint32 spell_id = 0;
|
||||
switch (urand(1, 5))
|
||||
{
|
||||
case 1: spell_id = 8854; break;
|
||||
default: spell_id = 8855; break;
|
||||
}
|
||||
uint32 spell_id = roll_chance_i(20) ? 8854 : 8855;
|
||||
|
||||
m_caster->CastSpell(m_caster, spell_id, true, NULL);
|
||||
return;
|
||||
@@ -3826,10 +3806,6 @@ void Spell::EffectScriptEffect(SpellEffIndex effIndex)
|
||||
unitTarget->HandleEmoteCommand(EMOTE_STATE_DANCE);
|
||||
return;
|
||||
}
|
||||
// Escape artist
|
||||
case 20589:
|
||||
m_caster->RemoveMovementImpairingAuras();
|
||||
return;
|
||||
// Decimate
|
||||
case 28374:
|
||||
case 54426:
|
||||
@@ -3860,15 +3836,8 @@ void Spell::EffectScriptEffect(SpellEffIndex effIndex)
|
||||
DoCreateItem(effIndex, item);
|
||||
break;
|
||||
}
|
||||
// Improved Sprint
|
||||
case 30918:
|
||||
{
|
||||
// Removes snares and roots.
|
||||
unitTarget->RemoveMovementImpairingAuras();
|
||||
break;
|
||||
}
|
||||
// Spirit Walk
|
||||
case 58876:
|
||||
case 20589: // Escape artist
|
||||
case 30918: // Improved Sprint
|
||||
{
|
||||
// Removes snares and roots.
|
||||
unitTarget->RemoveMovementImpairingAuras();
|
||||
@@ -3886,96 +3855,6 @@ void Spell::EffectScriptEffect(SpellEffIndex effIndex)
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 48025: // Headless Horseman's Mount
|
||||
{
|
||||
if (!unitTarget || unitTarget->GetTypeId() != TYPEID_PLAYER)
|
||||
return;
|
||||
|
||||
// Prevent stacking of mounts and client crashes upon dismounting
|
||||
unitTarget->RemoveAurasByType(SPELL_AURA_MOUNTED);
|
||||
|
||||
// Triggered spell id dependent on riding skill and zone
|
||||
bool canFly = true;
|
||||
uint32 v_map = GetVirtualMapForMapAndZone(unitTarget->GetMapId(), unitTarget->GetZoneId());
|
||||
if (v_map != 530 && v_map != 571)
|
||||
canFly = false;
|
||||
|
||||
if (canFly && v_map == 571 && !unitTarget->ToPlayer()->HasSpell(54197))
|
||||
canFly = false;
|
||||
|
||||
float x, y, z;
|
||||
unitTarget->GetPosition(x, y, z);
|
||||
uint32 areaFlag = unitTarget->GetBaseMap()->GetAreaFlag(x, y, z);
|
||||
AreaTableEntry const* pArea = sAreaStore.LookupEntry(areaFlag);
|
||||
if (!pArea || (canFly && (pArea->flags & AREA_FLAG_NO_FLY_ZONE)))
|
||||
canFly = false;
|
||||
|
||||
switch (unitTarget->ToPlayer()->GetBaseSkillValue(SKILL_RIDING))
|
||||
{
|
||||
case 75: unitTarget->CastSpell(unitTarget, 51621, true); break;
|
||||
case 150: unitTarget->CastSpell(unitTarget, 48024, true); break;
|
||||
case 225:
|
||||
{
|
||||
if (canFly)
|
||||
unitTarget->CastSpell(unitTarget, 51617, true);
|
||||
else
|
||||
unitTarget->CastSpell(unitTarget, 48024, true);
|
||||
}break;
|
||||
case 300:
|
||||
{
|
||||
if (canFly)
|
||||
unitTarget->CastSpell(unitTarget, 48023, true);
|
||||
else
|
||||
unitTarget->CastSpell(unitTarget, 48024, true);
|
||||
}break;
|
||||
}
|
||||
return;
|
||||
}
|
||||
case 47977: // Magic Broom
|
||||
{
|
||||
if (!unitTarget || unitTarget->GetTypeId() != TYPEID_PLAYER)
|
||||
return;
|
||||
|
||||
// Prevent stacking of mounts and client crashes upon dismounting
|
||||
unitTarget->RemoveAurasByType(SPELL_AURA_MOUNTED);
|
||||
|
||||
// Triggered spell id dependent on riding skill and zone
|
||||
bool canFly = true;
|
||||
uint32 v_map = GetVirtualMapForMapAndZone(unitTarget->GetMapId(), unitTarget->GetZoneId());
|
||||
if (v_map != 530 && v_map != 571)
|
||||
canFly = false;
|
||||
|
||||
if (canFly && v_map == 571 && !unitTarget->ToPlayer()->HasSpell(54197))
|
||||
canFly = false;
|
||||
|
||||
float x, y, z;
|
||||
unitTarget->GetPosition(x, y, z);
|
||||
uint32 areaFlag = unitTarget->GetBaseMap()->GetAreaFlag(x, y, z);
|
||||
AreaTableEntry const* pArea = sAreaStore.LookupEntry(areaFlag);
|
||||
if (!pArea || (canFly && (pArea->flags & AREA_FLAG_NO_FLY_ZONE)))
|
||||
canFly = false;
|
||||
|
||||
switch (unitTarget->ToPlayer()->GetBaseSkillValue(SKILL_RIDING))
|
||||
{
|
||||
case 75: unitTarget->CastSpell(unitTarget, 42680, true); break;
|
||||
case 150: unitTarget->CastSpell(unitTarget, 42683, true); break;
|
||||
case 225:
|
||||
{
|
||||
if (canFly)
|
||||
unitTarget->CastSpell(unitTarget, 42667, true);
|
||||
else
|
||||
unitTarget->CastSpell(unitTarget, 42683, true);
|
||||
}break;
|
||||
case 300:
|
||||
{
|
||||
if (canFly)
|
||||
unitTarget->CastSpell(unitTarget, 42668, true);
|
||||
else
|
||||
unitTarget->CastSpell(unitTarget, 42683, true);
|
||||
}break;
|
||||
}
|
||||
return;
|
||||
}
|
||||
// Mug Transformation
|
||||
case 41931:
|
||||
{
|
||||
@@ -4167,25 +4046,6 @@ void Spell::EffectScriptEffect(SpellEffIndex effIndex)
|
||||
if (unitTarget)
|
||||
unitTarget->CastSpell(m_caster, damage, true);
|
||||
return;
|
||||
// Winged Steed of the Ebon Blade
|
||||
case 54729:
|
||||
{
|
||||
if (!unitTarget || unitTarget->GetTypeId() != TYPEID_PLAYER)
|
||||
return;
|
||||
|
||||
// Prevent stacking of mounts and client crashes upon dismounting
|
||||
unitTarget->RemoveAurasByType(SPELL_AURA_MOUNTED);
|
||||
|
||||
// Triggered spell id dependent on riding skill
|
||||
if (uint16 skillval = unitTarget->ToPlayer()->GetSkillValue(SKILL_RIDING))
|
||||
{
|
||||
if (skillval >= 300)
|
||||
unitTarget->CastSpell(unitTarget, 54727, true);
|
||||
else
|
||||
unitTarget->CastSpell(unitTarget, 54726, true);
|
||||
}
|
||||
return;
|
||||
}
|
||||
case 57347: // Retrieving (Wintergrasp RP-GG pickup spell)
|
||||
{
|
||||
if (!unitTarget || unitTarget->GetTypeId() != TYPEID_UNIT || m_caster->GetTypeId() != TYPEID_PLAYER)
|
||||
@@ -4268,188 +4128,6 @@ void Spell::EffectScriptEffect(SpellEffIndex effIndex)
|
||||
m_caster->CastSpell(m_caster, 63919, true);
|
||||
return;
|
||||
}
|
||||
case 71342: // Big Love Rocket
|
||||
{
|
||||
if (!unitTarget || unitTarget->GetTypeId() != TYPEID_PLAYER)
|
||||
return;
|
||||
|
||||
// Prevent stacking of mounts and client crashes upon dismounting
|
||||
unitTarget->RemoveAurasByType(SPELL_AURA_MOUNTED);
|
||||
|
||||
// Triggered spell id dependent on riding skill and zone
|
||||
bool canFly = true;
|
||||
uint32 v_map = GetVirtualMapForMapAndZone(unitTarget->GetMapId(), unitTarget->GetZoneId());
|
||||
if (v_map != 530 && v_map != 571)
|
||||
canFly = false;
|
||||
|
||||
if (canFly && v_map == 571 && !unitTarget->ToPlayer()->HasSpell(54197))
|
||||
canFly = false;
|
||||
|
||||
float x, y, z;
|
||||
unitTarget->GetPosition(x, y, z);
|
||||
uint32 areaFlag = unitTarget->GetBaseMap()->GetAreaFlag(x, y, z);
|
||||
AreaTableEntry const* pArea = sAreaStore.LookupEntry(areaFlag);
|
||||
if (!pArea || (canFly && (pArea->flags & AREA_FLAG_NO_FLY_ZONE)))
|
||||
canFly = false;
|
||||
|
||||
switch (unitTarget->ToPlayer()->GetBaseSkillValue(SKILL_RIDING))
|
||||
{
|
||||
case 0: unitTarget->CastSpell(unitTarget, 71343, true); break;
|
||||
case 75: unitTarget->CastSpell(unitTarget, 71344, true); break;
|
||||
case 150: unitTarget->CastSpell(unitTarget, 71345, true); break;
|
||||
case 225:
|
||||
{
|
||||
if (canFly)
|
||||
unitTarget->CastSpell(unitTarget, 71346, true);
|
||||
else
|
||||
unitTarget->CastSpell(unitTarget, 71345, true);
|
||||
}break;
|
||||
case 300:
|
||||
{
|
||||
if (canFly)
|
||||
unitTarget->CastSpell(unitTarget, 71347, true);
|
||||
else
|
||||
unitTarget->CastSpell(unitTarget, 71345, true);
|
||||
}break;
|
||||
}
|
||||
return;
|
||||
}
|
||||
case 72286: // Invincible
|
||||
{
|
||||
if (!unitTarget || unitTarget->GetTypeId() != TYPEID_PLAYER)
|
||||
return;
|
||||
|
||||
// Prevent stacking of mounts and client crashes upon dismounting
|
||||
unitTarget->RemoveAurasByType(SPELL_AURA_MOUNTED);
|
||||
|
||||
// Triggered spell id dependent on riding skill and zone
|
||||
bool canFly = true;
|
||||
uint32 v_map = GetVirtualMapForMapAndZone(unitTarget->GetMapId(), unitTarget->GetZoneId());
|
||||
if (v_map != 530 && v_map != 571)
|
||||
canFly = false;
|
||||
|
||||
if (canFly && v_map == 571 && !unitTarget->ToPlayer()->HasSpell(54197))
|
||||
canFly = false;
|
||||
|
||||
float x, y, z;
|
||||
unitTarget->GetPosition(x, y, z);
|
||||
uint32 areaFlag = unitTarget->GetBaseMap()->GetAreaFlag(x, y, z);
|
||||
AreaTableEntry const* pArea = sAreaStore.LookupEntry(areaFlag);
|
||||
if (!pArea || (canFly && (pArea->flags & AREA_FLAG_NO_FLY_ZONE)))
|
||||
canFly = false;
|
||||
|
||||
switch (unitTarget->ToPlayer()->GetBaseSkillValue(SKILL_RIDING))
|
||||
{
|
||||
case 75: unitTarget->CastSpell(unitTarget, 72281, true); break;
|
||||
case 150: unitTarget->CastSpell(unitTarget, 72282, true); break;
|
||||
case 225:
|
||||
{
|
||||
if (canFly)
|
||||
unitTarget->CastSpell(unitTarget, 72283, true);
|
||||
else
|
||||
unitTarget->CastSpell(unitTarget, 72282, true);
|
||||
}break;
|
||||
case 300:
|
||||
{
|
||||
if (canFly)
|
||||
unitTarget->CastSpell(unitTarget, 72284, true);
|
||||
else
|
||||
unitTarget->CastSpell(unitTarget, 72282, true);
|
||||
}break;
|
||||
}
|
||||
return;
|
||||
}
|
||||
case 74856: // Blazing Hippogryph
|
||||
{
|
||||
if (!unitTarget || unitTarget->GetTypeId() != TYPEID_PLAYER)
|
||||
return;
|
||||
|
||||
// Prevent stacking of mounts and client crashes upon dismounting
|
||||
unitTarget->RemoveAurasByType(SPELL_AURA_MOUNTED);
|
||||
|
||||
// Triggered spell id dependent on riding skill
|
||||
if (uint16 skillval = unitTarget->ToPlayer()->GetSkillValue(SKILL_RIDING))
|
||||
{
|
||||
if (skillval >= 300)
|
||||
unitTarget->CastSpell(unitTarget, 74855, true);
|
||||
else
|
||||
unitTarget->CastSpell(unitTarget, 74854, true);
|
||||
}
|
||||
return;
|
||||
}
|
||||
case 75614: // Celestial Steed
|
||||
{
|
||||
if (!unitTarget || unitTarget->GetTypeId() != TYPEID_PLAYER)
|
||||
return;
|
||||
|
||||
// Prevent stacking of mounts and client crashes upon dismounting
|
||||
unitTarget->RemoveAurasByType(SPELL_AURA_MOUNTED);
|
||||
|
||||
// Triggered spell id dependent on riding skill and zone
|
||||
bool canFly = true;
|
||||
uint32 v_map = GetVirtualMapForMapAndZone(unitTarget->GetMapId(), unitTarget->GetZoneId());
|
||||
if (v_map != 530 && v_map != 571)
|
||||
canFly = false;
|
||||
|
||||
if (canFly && v_map == 571 && !unitTarget->ToPlayer()->HasSpell(54197))
|
||||
canFly = false;
|
||||
|
||||
float x, y, z;
|
||||
unitTarget->GetPosition(x, y, z);
|
||||
uint32 areaFlag = unitTarget->GetBaseMap()->GetAreaFlag(x, y, z);
|
||||
AreaTableEntry const* pArea = sAreaStore.LookupEntry(areaFlag);
|
||||
if (!pArea || (canFly && (pArea->flags & AREA_FLAG_NO_FLY_ZONE)))
|
||||
canFly = false;
|
||||
|
||||
switch (unitTarget->ToPlayer()->GetBaseSkillValue(SKILL_RIDING))
|
||||
{
|
||||
case 75: unitTarget->CastSpell(unitTarget, 75619, true); break;
|
||||
case 150: unitTarget->CastSpell(unitTarget, 75620, true); break;
|
||||
case 225:
|
||||
{
|
||||
if (canFly)
|
||||
unitTarget->CastSpell(unitTarget, 75617, true);
|
||||
else
|
||||
unitTarget->CastSpell(unitTarget, 75620, true);
|
||||
}break;
|
||||
case 300:
|
||||
{
|
||||
if (canFly)
|
||||
{
|
||||
if (unitTarget->ToPlayer()->Has310Flyer(false))
|
||||
unitTarget->CastSpell(unitTarget, 76153, true);
|
||||
else
|
||||
unitTarget->CastSpell(unitTarget, 75618, true);
|
||||
}
|
||||
else
|
||||
unitTarget->CastSpell(unitTarget, 75620, true);
|
||||
}break;
|
||||
}
|
||||
return;
|
||||
}
|
||||
case 75973: // X-53 Touring Rocket
|
||||
{
|
||||
if (!unitTarget || unitTarget->GetTypeId() != TYPEID_PLAYER)
|
||||
return;
|
||||
|
||||
// Prevent stacking of mounts
|
||||
unitTarget->RemoveAurasByType(SPELL_AURA_MOUNTED);
|
||||
|
||||
// Triggered spell id dependent on riding skill
|
||||
if (uint16 skillval = unitTarget->ToPlayer()->GetSkillValue(SKILL_RIDING))
|
||||
{
|
||||
if (skillval >= 300)
|
||||
{
|
||||
if (unitTarget->ToPlayer()->Has310Flyer(false))
|
||||
unitTarget->CastSpell(unitTarget, 76154, true);
|
||||
else
|
||||
unitTarget->CastSpell(unitTarget, 75972, true);
|
||||
}
|
||||
else
|
||||
unitTarget->CastSpell(unitTarget, 75957, true);
|
||||
}
|
||||
return;
|
||||
}
|
||||
case 59317: // Teleporting
|
||||
if (!unitTarget || unitTarget->GetTypeId() != TYPEID_PLAYER)
|
||||
return;
|
||||
@@ -5065,16 +4743,14 @@ void Spell::EffectDisEnchant(SpellEffIndex /*effIndex*/)
|
||||
if (effectHandleMode != SPELL_EFFECT_HANDLE_HIT_TARGET)
|
||||
return;
|
||||
|
||||
if (m_caster->GetTypeId() != TYPEID_PLAYER)
|
||||
return;
|
||||
|
||||
Player* p_caster = (Player*)m_caster;
|
||||
if (!itemTarget || !itemTarget->GetTemplate()->DisenchantID)
|
||||
return;
|
||||
|
||||
p_caster->UpdateCraftSkill(m_spellInfo->Id);
|
||||
|
||||
m_caster->ToPlayer()->SendLoot(itemTarget->GetGUID(), LOOT_DISENCHANTING);
|
||||
if (Player* caster = m_caster->ToPlayer())
|
||||
{
|
||||
caster->UpdateCraftSkill(m_spellInfo->Id);
|
||||
caster->SendLoot(itemTarget->GetGUID(), LOOT_DISENCHANTING);
|
||||
}
|
||||
|
||||
// item will be removed at disenchanting end
|
||||
}
|
||||
|
||||
@@ -15,13 +15,20 @@
|
||||
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "ScriptPCH.h"
|
||||
#include "ScriptMgr.h"
|
||||
#include "ScriptedCreature.h"
|
||||
#include "SpellAuraEffects.h"
|
||||
#include "SpellScript.h"
|
||||
#include "hyjal.h"
|
||||
#include "hyjal_trash.h"
|
||||
|
||||
#define SPELL_CLEAVE 31436
|
||||
#define SPELL_WARSTOMP 31480
|
||||
#define SPELL_MARK 31447
|
||||
enum Spells
|
||||
{
|
||||
SPELL_CLEAVE = 31436,
|
||||
SPELL_WARSTOMP = 31480,
|
||||
SPELL_MARK = 31447,
|
||||
SPELL_MARK_DAMAGE = 31463
|
||||
};
|
||||
|
||||
#define SOUND_ONDEATH 11018
|
||||
|
||||
@@ -162,22 +169,10 @@ public:
|
||||
WarStompTimer = 60000;
|
||||
} else WarStompTimer -= diff;
|
||||
|
||||
if (me->HasAura(SPELL_MARK))
|
||||
me->RemoveAurasDueToSpell(SPELL_MARK);
|
||||
if (MarkTimer <= diff)
|
||||
{
|
||||
//cast dummy, useful for bos addons
|
||||
me->CastCustomSpell(me, SPELL_MARK, NULL, NULL, NULL, false, NULL, NULL, me->GetGUID());
|
||||
DoCastAOE(SPELL_MARK);
|
||||
|
||||
std::list<HostileReference*> t_list = me->getThreatManager().getThreatList();
|
||||
for (std::list<HostileReference*>::const_iterator itr = t_list.begin(); itr!= t_list.end(); ++itr)
|
||||
{
|
||||
Unit* target = Unit::GetUnit(*me, (*itr)->getUnitGuid());
|
||||
if (target && target->GetTypeId() == TYPEID_PLAYER && target->getPowerType() == POWER_MANA)
|
||||
{
|
||||
target->CastSpell(target, SPELL_MARK, true);//only cast on mana users
|
||||
}
|
||||
}
|
||||
MarkTimerBase -= 5000;
|
||||
if (MarkTimerBase < 5500)
|
||||
MarkTimerBase = 5500;
|
||||
@@ -201,7 +196,80 @@ public:
|
||||
|
||||
};
|
||||
|
||||
class MarkTargetFilter
|
||||
{
|
||||
public:
|
||||
bool operator()(Unit* target) const
|
||||
{
|
||||
if (target->getPowerType() != POWER_MANA)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
class spell_mark_of_kazrogal : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_mark_of_kazrogal() : SpellScriptLoader("spell_mark_of_kazrogal") { }
|
||||
|
||||
class spell_mark_of_kazrogal_SpellScript : public SpellScript
|
||||
{
|
||||
PrepareSpellScript(spell_mark_of_kazrogal_SpellScript);
|
||||
|
||||
void FilterTargets(std::list<Unit*>& unitList)
|
||||
{
|
||||
unitList.remove_if(MarkTargetFilter());
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
OnUnitTargetSelect += SpellUnitTargetFn(spell_mark_of_kazrogal_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY);
|
||||
}
|
||||
};
|
||||
|
||||
class spell_mark_of_kazrogal_AuraScript : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_mark_of_kazrogal_AuraScript);
|
||||
|
||||
bool Validate(SpellInfo const* /*spell*/)
|
||||
{
|
||||
if (!sSpellMgr->GetSpellInfo(SPELL_MARK_DAMAGE))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void OnPeriodic(AuraEffect const* aurEff)
|
||||
{
|
||||
Unit* target = GetTarget();
|
||||
|
||||
if (target->GetPower(POWER_MANA) == 0)
|
||||
{
|
||||
target->CastSpell(target, SPELL_MARK_DAMAGE, true, NULL, aurEff);
|
||||
// Remove aura
|
||||
SetDuration(0);
|
||||
}
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
OnEffectPeriodic += AuraEffectPeriodicFn(spell_mark_of_kazrogal_AuraScript::OnPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_MANA_LEECH);
|
||||
}
|
||||
};
|
||||
|
||||
SpellScript* GetSpellScript() const
|
||||
{
|
||||
return new spell_mark_of_kazrogal_SpellScript();
|
||||
}
|
||||
|
||||
AuraScript* GetAuraScript() const
|
||||
{
|
||||
return new spell_mark_of_kazrogal_AuraScript();
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_boss_kazrogal()
|
||||
{
|
||||
new boss_kazrogal();
|
||||
new spell_mark_of_kazrogal();
|
||||
}
|
||||
|
||||
@@ -23,7 +23,9 @@ SDComment:
|
||||
SDCategory:
|
||||
Script Data End */
|
||||
|
||||
#include "ScriptPCH.h"
|
||||
#include "ScriptMgr.h"
|
||||
#include "ScriptedCreature.h"
|
||||
#include "SpellScript.h"
|
||||
#include "halls_of_stone.h"
|
||||
|
||||
enum Spells
|
||||
@@ -162,12 +164,7 @@ public:
|
||||
//this part should be in the core
|
||||
if (pSpell->Id == SPELL_SHATTER || pSpell->Id == H_SPELL_SHATTER)
|
||||
{
|
||||
//this spell must have custom handling in the core, dealing damage based on distance
|
||||
target->CastSpell(target, DUNGEON_MODE(SPELL_SHATTER_EFFECT, H_SPELL_SHATTER_EFFECT), true);
|
||||
|
||||
if (target->HasAura(SPELL_STONED))
|
||||
target->RemoveAurasDueToSpell(SPELL_STONED);
|
||||
|
||||
// todo: we need eventmap to kill this stuff
|
||||
//clear this, if we are still performing
|
||||
if (bIsSlam)
|
||||
{
|
||||
@@ -186,7 +183,74 @@ public:
|
||||
|
||||
};
|
||||
|
||||
class spell_krystallus_shatter : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_krystallus_shatter() : SpellScriptLoader("spell_krystallus_shatter") { }
|
||||
|
||||
class spell_krystallus_shatter_SpellScript : public SpellScript
|
||||
{
|
||||
PrepareSpellScript(spell_krystallus_shatter_SpellScript);
|
||||
|
||||
void HandleScript(SpellEffIndex /*effIndex*/)
|
||||
{
|
||||
if (Unit* target = GetHitUnit())
|
||||
{
|
||||
target->RemoveAurasDueToSpell(SPELL_STONED);
|
||||
target->CastSpell((Unit*)NULL, SPELL_SHATTER_EFFECT, true);
|
||||
}
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
OnEffectHitTarget += SpellEffectFn(spell_krystallus_shatter_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
|
||||
}
|
||||
};
|
||||
|
||||
SpellScript* GetSpellScript() const
|
||||
{
|
||||
return new spell_krystallus_shatter_SpellScript();
|
||||
}
|
||||
};
|
||||
|
||||
class spell_krystallus_shatter_effect : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_krystallus_shatter_effect() : SpellScriptLoader("spell_krystallus_shatter_effect") { }
|
||||
|
||||
class spell_krystallus_shatter_effect_SpellScript : public SpellScript
|
||||
{
|
||||
PrepareSpellScript(spell_krystallus_shatter_effect_SpellScript);
|
||||
|
||||
void CalculateDamage()
|
||||
{
|
||||
if (!GetHitUnit())
|
||||
return;
|
||||
|
||||
float radius = GetSpellInfo()->Effects[EFFECT_0].CalcRadius(GetCaster());
|
||||
if (!radius)
|
||||
return;
|
||||
|
||||
float distance = GetCaster()->GetDistance2d(GetHitUnit());
|
||||
if (distance > 1.0f)
|
||||
SetHitDamage(int32(GetHitDamage() * ((radius - distance) / radius)));
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
OnHit += SpellHitFn(spell_krystallus_shatter_effect_SpellScript::CalculateDamage);
|
||||
}
|
||||
};
|
||||
|
||||
SpellScript* GetSpellScript() const
|
||||
{
|
||||
return new spell_krystallus_shatter_effect_SpellScript();
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_boss_krystallus()
|
||||
{
|
||||
new boss_krystallus();
|
||||
new spell_krystallus_shatter();
|
||||
new spell_krystallus_shatter_effect();
|
||||
}
|
||||
|
||||
@@ -19,11 +19,13 @@
|
||||
/* ScriptData
|
||||
SDName: Boss_Gruul
|
||||
SD%Complete: 60
|
||||
SDComment: Ground Slam need further development (knock back effect and shatter effect must be added to the core)
|
||||
SDComment: Ground Slam need further development (knock back effect must be added to the core)
|
||||
SDCategory: Gruul's Lair
|
||||
EndScriptData */
|
||||
|
||||
#include "ScriptPCH.h"
|
||||
#include "ScriptMgr.h"
|
||||
#include "ScriptedCreature.h"
|
||||
#include "SpellScript.h"
|
||||
#include "gruuls_lair.h"
|
||||
|
||||
enum eEnums
|
||||
@@ -144,12 +146,7 @@ public:
|
||||
//this part should be in the core
|
||||
if (pSpell->Id == SPELL_SHATTER)
|
||||
{
|
||||
//this spell must have custom handling in the core, dealing damage based on distance
|
||||
target->CastSpell(target, SPELL_SHATTER_EFFECT, true);
|
||||
|
||||
if (target->HasAura(SPELL_STONED))
|
||||
target->RemoveAurasDueToSpell(SPELL_STONED);
|
||||
|
||||
// todo: use eventmap to kill this stuff
|
||||
//clear this, if we are still performing
|
||||
if (m_bPerformingGroundSlam)
|
||||
{
|
||||
@@ -258,7 +255,83 @@ public:
|
||||
|
||||
};
|
||||
|
||||
class spell_gruul_shatter : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_gruul_shatter() : SpellScriptLoader("spell_gruul_shatter") { }
|
||||
|
||||
class spell_gruul_shatter_SpellScript : public SpellScript
|
||||
{
|
||||
PrepareSpellScript(spell_gruul_shatter_SpellScript);
|
||||
|
||||
bool Validate(SpellInfo const* /*spell*/)
|
||||
{
|
||||
if (!sSpellMgr->GetSpellInfo(SPELL_STONED))
|
||||
return false;
|
||||
if (!sSpellMgr->GetSpellInfo(SPELL_SHATTER_EFFECT))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void HandleScript(SpellEffIndex /*effIndex*/)
|
||||
{
|
||||
if (Unit* target = GetHitUnit())
|
||||
{
|
||||
target->RemoveAurasDueToSpell(SPELL_STONED);
|
||||
target->CastSpell((Unit*)NULL, SPELL_SHATTER_EFFECT, true);
|
||||
}
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
OnEffectHitTarget += SpellEffectFn(spell_gruul_shatter_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
|
||||
}
|
||||
};
|
||||
|
||||
SpellScript* GetSpellScript() const
|
||||
{
|
||||
return new spell_gruul_shatter_SpellScript();
|
||||
}
|
||||
};
|
||||
|
||||
class spell_gruul_shatter_effect : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_gruul_shatter_effect() : SpellScriptLoader("spell_gruul_shatter_effect") { }
|
||||
|
||||
class spell_gruul_shatter_effect_SpellScript : public SpellScript
|
||||
{
|
||||
PrepareSpellScript(spell_gruul_shatter_effect_SpellScript);
|
||||
|
||||
void CalculateDamage()
|
||||
{
|
||||
if (!GetHitUnit())
|
||||
return;
|
||||
|
||||
float radius = GetSpellInfo()->Effects[EFFECT_0].CalcRadius(GetCaster());
|
||||
if (!radius)
|
||||
return;
|
||||
|
||||
float distance = GetCaster()->GetDistance2d(GetHitUnit());
|
||||
if (distance > 1.0f)
|
||||
SetHitDamage(int32(GetHitDamage() * ((radius - distance) / radius)));
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
OnHit += SpellHitFn(spell_gruul_shatter_effect_SpellScript::CalculateDamage);
|
||||
}
|
||||
};
|
||||
|
||||
SpellScript* GetSpellScript() const
|
||||
{
|
||||
return new spell_gruul_shatter_effect_SpellScript();
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_boss_gruul()
|
||||
{
|
||||
new boss_gruul();
|
||||
new spell_gruul_shatter();
|
||||
new spell_gruul_shatter_effect();
|
||||
}
|
||||
|
||||
@@ -16,7 +16,10 @@
|
||||
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "ScriptPCH.h"
|
||||
#include "ScriptMgr.h"
|
||||
#include "ScriptedCreature.h"
|
||||
#include "SpellAuraEffects.h"
|
||||
#include "SpellScript.h"
|
||||
|
||||
enum Texts
|
||||
{
|
||||
@@ -36,6 +39,7 @@ enum Spells
|
||||
SPELL_THUNDERCLAP = 36706,
|
||||
SPELL_VOID_BOLT = 39329,
|
||||
SPELL_MARK_OF_KAZZAK = 32960,
|
||||
SPELL_MARK_OF_KAZZAK_DAMAGE = 32961,
|
||||
SPELL_ENRAGE = 32964,
|
||||
SPELL_CAPTURE_SOUL = 32966,
|
||||
SPELL_TWISTED_REFLECTION = 21063,
|
||||
@@ -171,7 +175,55 @@ class boss_doomlord_kazzak : public CreatureScript
|
||||
}
|
||||
};
|
||||
|
||||
class spell_mark_of_kazzak : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_mark_of_kazzak() : SpellScriptLoader("spell_mark_of_kazzak") { }
|
||||
|
||||
class spell_mark_of_kazzak_AuraScript : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_mark_of_kazzak_AuraScript);
|
||||
|
||||
bool Validate(SpellInfo const* /*spell*/)
|
||||
{
|
||||
if (!sSpellMgr->GetSpellInfo(SPELL_MARK_OF_KAZZAK_DAMAGE))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void CalculateAmount(AuraEffect const* aurEff, int32& amount, bool& /*canBeRecalculated*/)
|
||||
{
|
||||
if (Unit* owner = GetUnitOwner())
|
||||
amount = CalculatePctU(owner->GetPower(POWER_MANA), 5);
|
||||
}
|
||||
|
||||
void OnPeriodic(AuraEffect const* aurEff)
|
||||
{
|
||||
Unit* target = GetTarget();
|
||||
|
||||
if (target->GetPower(POWER_MANA) == 0)
|
||||
{
|
||||
target->CastSpell(target, SPELL_MARK_OF_KAZZAK_DAMAGE, true, NULL, aurEff);
|
||||
// Remove aura
|
||||
SetDuration(0);
|
||||
}
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_mark_of_kazzak_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_PERIODIC_MANA_LEECH);
|
||||
OnEffectPeriodic += AuraEffectPeriodicFn(spell_mark_of_kazzak_AuraScript::OnPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_MANA_LEECH);
|
||||
}
|
||||
};
|
||||
|
||||
AuraScript* GetAuraScript() const
|
||||
{
|
||||
return new spell_mark_of_kazzak_AuraScript();
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_boss_doomlordkazzak()
|
||||
{
|
||||
new boss_doomlord_kazzak();
|
||||
new spell_mark_of_kazzak();
|
||||
}
|
||||
|
||||
@@ -730,17 +730,6 @@ class spell_dk_death_coil : public SpellScriptLoader
|
||||
return true;
|
||||
}
|
||||
|
||||
SpellCastResult CheckCast()
|
||||
{
|
||||
Unit* caster = GetCaster();
|
||||
if (Unit* target = GetExplTargetUnit())
|
||||
{
|
||||
if (target->IsFriendlyTo(caster) && target->GetCreatureType() != CREATURE_TYPE_UNDEAD)
|
||||
return SPELL_FAILED_BAD_TARGETS;
|
||||
}
|
||||
return SPELL_CAST_OK;
|
||||
}
|
||||
|
||||
void HandleDummy(SpellEffIndex /*effIndex*/)
|
||||
{
|
||||
int32 damage = GetEffectValue();
|
||||
|
||||
@@ -30,7 +30,9 @@ enum DruidSpells
|
||||
DRUID_INCREASED_MOONFIRE_DURATION = 38414,
|
||||
DRUID_NATURES_SPLENDOR = 57865,
|
||||
DRUID_LIFEBLOOM_FINAL_HEAL = 33778,
|
||||
DRUID_LIFEBLOOM_ENERGIZE = 64372
|
||||
DRUID_LIFEBLOOM_ENERGIZE = 64372,
|
||||
DRUID_SURVIVAL_INSTINCTS = 50322,
|
||||
DRUID_SAVAGE_ROAR = 62071
|
||||
};
|
||||
|
||||
// 54846 Glyph of Starfire
|
||||
@@ -481,6 +483,166 @@ class spell_dru_lifebloom : public SpellScriptLoader
|
||||
}
|
||||
};
|
||||
|
||||
class spell_dru_predatory_strikes : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_dru_predatory_strikes() : SpellScriptLoader("spell_dru_predatory_strikes") { }
|
||||
|
||||
class spell_dru_predatory_strikes_AuraScript : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_dru_predatory_strikes_AuraScript);
|
||||
|
||||
void UpdateAmount(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
|
||||
{
|
||||
if (Player* target = GetTarget()->ToPlayer())
|
||||
target->UpdateAttackPowerAndDamage();
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
AfterEffectApply += AuraEffectApplyFn(spell_dru_predatory_strikes_AuraScript::UpdateAmount, EFFECT_ALL, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_CHANGE_AMOUNT_MASK);
|
||||
AfterEffectRemove += AuraEffectRemoveFn(spell_dru_predatory_strikes_AuraScript::UpdateAmount, EFFECT_ALL, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_CHANGE_AMOUNT_MASK);
|
||||
}
|
||||
};
|
||||
|
||||
AuraScript* GetAuraScript() const
|
||||
{
|
||||
return new spell_dru_predatory_strikes_AuraScript();
|
||||
}
|
||||
};
|
||||
|
||||
class spell_dru_savage_roar : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_dru_savage_roar() : SpellScriptLoader("spell_dru_savage_roar") { }
|
||||
|
||||
class spell_dru_savage_roar_SpellScript : public SpellScript
|
||||
{
|
||||
PrepareSpellScript(spell_dru_savage_roar_SpellScript);
|
||||
|
||||
SpellCastResult CheckCast()
|
||||
{
|
||||
Unit* caster = GetCaster();
|
||||
if (caster->GetShapeshiftForm() != FORM_CAT)
|
||||
return SPELL_FAILED_ONLY_SHAPESHIFT;
|
||||
|
||||
return SPELL_CAST_OK;
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
OnCheckCast += SpellCheckCastFn(spell_dru_savage_roar_SpellScript::CheckCast);
|
||||
}
|
||||
};
|
||||
|
||||
class spell_dru_savage_roar_AuraScript : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_dru_savage_roar_AuraScript);
|
||||
|
||||
bool Validate(SpellInfo const* /*spell*/)
|
||||
{
|
||||
if (!sSpellMgr->GetSpellInfo(DRUID_SAVAGE_ROAR))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void AfterApply(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
|
||||
{
|
||||
Unit* target = GetTarget();
|
||||
int32 bp0 = aurEff->GetAmount(); // todo: check if needed
|
||||
target->CastCustomSpell(target, DRUID_SAVAGE_ROAR, &bp0, NULL, NULL, true, NULL, aurEff, GetCasterGUID());
|
||||
}
|
||||
|
||||
void AfterRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
|
||||
{
|
||||
GetTarget()->RemoveAurasDueToSpell(DRUID_SAVAGE_ROAR);
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
// todo: check AuraEffectHandleModes
|
||||
AfterEffectApply += AuraEffectApplyFn(spell_dru_savage_roar_AuraScript::AfterApply, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_CHANGE_AMOUNT_MASK);
|
||||
AfterEffectRemove += AuraEffectRemoveFn(spell_dru_savage_roar_AuraScript::AfterRemove, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_CHANGE_AMOUNT_MASK);
|
||||
}
|
||||
};
|
||||
|
||||
SpellScript* GetSpellScript() const
|
||||
{
|
||||
return new spell_dru_savage_roar_SpellScript();
|
||||
}
|
||||
|
||||
AuraScript* GetAuraScript() const
|
||||
{
|
||||
return new spell_dru_savage_roar_AuraScript();
|
||||
}
|
||||
};
|
||||
|
||||
class spell_dru_survival_instincts : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_dru_survival_instincts() : SpellScriptLoader("spell_dru_survival_instincts") { }
|
||||
|
||||
class spell_dru_survival_instincts_SpellScript : public SpellScript
|
||||
{
|
||||
PrepareSpellScript(spell_dru_survival_instincts_SpellScript);
|
||||
|
||||
SpellCastResult CheckCast()
|
||||
{
|
||||
Unit* caster = GetCaster();
|
||||
if (!caster->IsInFeralForm())
|
||||
return SPELL_FAILED_ONLY_SHAPESHIFT;
|
||||
|
||||
return SPELL_CAST_OK;
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
OnCheckCast += SpellCheckCastFn(spell_dru_survival_instincts_SpellScript::CheckCast);
|
||||
}
|
||||
};
|
||||
|
||||
class spell_dru_survival_instincts_AuraScript : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_dru_survival_instincts_AuraScript);
|
||||
|
||||
bool Validate(SpellInfo const* /*spell*/)
|
||||
{
|
||||
if (!sSpellMgr->GetSpellInfo(DRUID_SURVIVAL_INSTINCTS))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void AfterApply(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
|
||||
{
|
||||
Unit* target = GetTarget();
|
||||
int32 bp0 = target->CountPctFromMaxHealth(aurEff->GetAmount());
|
||||
target->CastCustomSpell(target, DRUID_SURVIVAL_INSTINCTS, &bp0, NULL, NULL, true);
|
||||
}
|
||||
|
||||
void AfterRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
|
||||
{
|
||||
GetTarget()->RemoveAurasDueToSpell(DRUID_SURVIVAL_INSTINCTS);
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
// todo: check AuraEffectHandleModes
|
||||
AfterEffectApply += AuraEffectApplyFn(spell_dru_survival_instincts_AuraScript::AfterApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_CHANGE_AMOUNT_MASK);
|
||||
AfterEffectRemove += AuraEffectRemoveFn(spell_dru_survival_instincts_AuraScript::AfterRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_CHANGE_AMOUNT_MASK);
|
||||
}
|
||||
};
|
||||
|
||||
SpellScript* GetSpellScript() const
|
||||
{
|
||||
return new spell_dru_survival_instincts_SpellScript();
|
||||
}
|
||||
|
||||
AuraScript* GetAuraScript() const
|
||||
{
|
||||
return new spell_dru_survival_instincts_AuraScript();
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_druid_spell_scripts()
|
||||
{
|
||||
new spell_dru_glyph_of_starfire();
|
||||
@@ -492,4 +654,7 @@ void AddSC_druid_spell_scripts()
|
||||
new spell_dru_swift_flight_passive();
|
||||
new spell_dru_starfall_dummy();
|
||||
new spell_dru_lifebloom();
|
||||
new spell_dru_predatory_strikes();
|
||||
new spell_dru_savage_roar();
|
||||
new spell_dru_survival_instincts();
|
||||
}
|
||||
|
||||
@@ -2802,6 +2802,238 @@ class spell_gen_lifebloom : public SpellScriptLoader
|
||||
uint32 _spellId;
|
||||
};
|
||||
|
||||
enum SummonElemental
|
||||
{
|
||||
SPELL_SUMMON_FIRE_ELEMENTAL = 8985,
|
||||
SPELL_SUMMON_EARTH_ELEMENTAL = 19704
|
||||
};
|
||||
|
||||
class spell_gen_summon_elemental : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_gen_summon_elemental(const char* name, uint32 spellId) : SpellScriptLoader(name), _spellId(spellId) { }
|
||||
|
||||
class spell_gen_summon_elemental_AuraScript : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_gen_summon_elemental_AuraScript);
|
||||
|
||||
public:
|
||||
spell_gen_summon_elemental_AuraScript(uint32 spellId) : AuraScript(), _spellId(spellId) { }
|
||||
|
||||
bool Validate(SpellInfo const* /*spell*/)
|
||||
{
|
||||
if (!sSpellMgr->GetSpellInfo(_spellId))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void AfterApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
|
||||
{
|
||||
if (GetCaster())
|
||||
if (Unit* owner = GetCaster()->GetOwner())
|
||||
if (owner->GetTypeId() == TYPEID_PLAYER) // todo: this check is maybe wrong
|
||||
owner->CastSpell(owner, _spellId, true);
|
||||
}
|
||||
|
||||
void AfterRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
|
||||
{
|
||||
if (GetCaster())
|
||||
if (Unit* owner = GetCaster()->GetOwner())
|
||||
if (owner->GetTypeId() == TYPEID_PLAYER) // todo: this check is maybe wrong
|
||||
owner->ToPlayer()->RemovePet(NULL, PET_SAVE_NOT_IN_SLOT, true);
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
AfterEffectApply += AuraEffectApplyFn(spell_gen_summon_elemental_AuraScript::AfterApply, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
|
||||
AfterEffectRemove += AuraEffectRemoveFn(spell_gen_summon_elemental_AuraScript::AfterRemove, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
|
||||
}
|
||||
|
||||
private:
|
||||
uint32 _spellId;
|
||||
};
|
||||
|
||||
AuraScript* GetAuraScript() const
|
||||
{
|
||||
return new spell_gen_summon_elemental_AuraScript(_spellId);
|
||||
}
|
||||
|
||||
private:
|
||||
uint32 _spellId;
|
||||
};
|
||||
|
||||
enum Mounts
|
||||
{
|
||||
// Magic Broom
|
||||
SPELL_MAGIC_BROOM_60 = 42680,
|
||||
SPELL_MAGIC_BROOM_100 = 42683,
|
||||
SPELL_MAGIC_BROOM_150 = 42667,
|
||||
SPELL_MAGIC_BROOM_280 = 42668,
|
||||
|
||||
// Headless Horseman's Mount
|
||||
SPELL_HEADLESS_HORSEMAN_MOUNT_60 = 51621,
|
||||
SPELL_HEADLESS_HORSEMAN_MOUNT_100 = 48024,
|
||||
SPELL_HEADLESS_HORSEMAN_MOUNT_150 = 51617,
|
||||
SPELL_HEADLESS_HORSEMAN_MOUNT_280 = 48023,
|
||||
|
||||
// Winged Steed of the Ebon Blade
|
||||
SPELL_WINGED_STEED_150 = 54726,
|
||||
SPELL_WINGED_STEED_280 = 54727,
|
||||
|
||||
// Big Love Rocket
|
||||
SPELL_BIG_LOVE_ROCKET_0 = 71343,
|
||||
SPELL_BIG_LOVE_ROCKET_60 = 71344,
|
||||
SPELL_BIG_LOVE_ROCKET_100 = 71345,
|
||||
SPELL_BIG_LOVE_ROCKET_150 = 71346,
|
||||
SPELL_BIG_LOVE_ROCKET_310 = 71347,
|
||||
|
||||
// Invincible
|
||||
SPELL_INVINCIBLE_60 = 72281,
|
||||
SPELL_INVINCIBLE_100 = 72282,
|
||||
SPELL_INVINCIBLE_150 = 72283,
|
||||
SPELL_INVINCIBLE_310 = 72284,
|
||||
|
||||
// Blazing Hippogryph
|
||||
SPELL_BLAZING_HIPPOGRYPH_150 = 74854,
|
||||
SPELL_BLAZING_HIPPOGRYPH_280 = 74855,
|
||||
|
||||
// Celestial Steed
|
||||
SPELL_CELESTIAL_STEED_60 = 75619,
|
||||
SPELL_CELESTIAL_STEED_100 = 75620,
|
||||
SPELL_CELESTIAL_STEED_150 = 75617,
|
||||
SPELL_CELESTIAL_STEED_280 = 75618,
|
||||
SPELL_CELESTIAL_STEED_310 = 76153,
|
||||
|
||||
// X-53 Touring Rocket
|
||||
SPELL_X53_TOURING_ROCKET_150 = 75957,
|
||||
SPELL_X53_TOURING_ROCKET_280 = 75972,
|
||||
SPELL_X53_TOURING_ROCKET_310 = 76154,
|
||||
};
|
||||
|
||||
class spell_gen_mount : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_gen_mount(const char* name, uint32 mount0 = 0, uint32 mount60 = 0, uint32 mount100 = 0, uint32 mount150 = 0, uint32 mount280 = 0, uint32 mount310 = 0) : SpellScriptLoader(name),
|
||||
_mount0(mount0), _mount60(mount60), _mount100(mount100), _mount150(mount150), _mount280(mount280), _mount310(mount310) { }
|
||||
|
||||
class spell_gen_mount_SpellScript : public SpellScript
|
||||
{
|
||||
PrepareSpellScript(spell_gen_mount_SpellScript);
|
||||
|
||||
public:
|
||||
spell_gen_mount_SpellScript(uint32 mount0, uint32 mount60, uint32 mount100, uint32 mount150, uint32 mount280, uint32 mount310) : SpellScript(),
|
||||
_mount0(mount0), _mount60(mount60), _mount100(mount100), _mount150(mount150), _mount280(mount280), _mount310(mount310) { }
|
||||
|
||||
bool Validate(SpellInfo const* /*spell*/)
|
||||
{
|
||||
if (_mount0 && !sSpellMgr->GetSpellInfo(_mount0))
|
||||
return false;
|
||||
if (_mount60 && !sSpellMgr->GetSpellInfo(_mount60))
|
||||
return false;
|
||||
if (_mount100 && !sSpellMgr->GetSpellInfo(_mount100))
|
||||
return false;
|
||||
if (_mount150 && !sSpellMgr->GetSpellInfo(_mount150))
|
||||
return false;
|
||||
if (_mount280 && !sSpellMgr->GetSpellInfo(_mount280))
|
||||
return false;
|
||||
if (_mount310 && !sSpellMgr->GetSpellInfo(_mount310))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void HandleMount(SpellEffIndex effIndex)
|
||||
{
|
||||
PreventHitDefaultEffect(effIndex);
|
||||
|
||||
if (Player* target = GetHitPlayer())
|
||||
{
|
||||
// Prevent stacking of mounts and client crashes upon dismounting
|
||||
target->RemoveAurasByType(SPELL_AURA_MOUNTED, 0, GetHitAura());
|
||||
|
||||
// Triggered spell id dependent on riding skill and zone
|
||||
bool canFly = false;
|
||||
uint32 vmap = GetVirtualMapForMapAndZone(target->GetMapId(), target->GetZoneId());
|
||||
if (vmap == 530 || (vmap == 571 && target->HasSpell(54197)))
|
||||
canFly = true;
|
||||
|
||||
float x, y, z;
|
||||
target->GetPosition(x, y, z);
|
||||
uint32 areaFlag = target->GetBaseMap()->GetAreaFlag(x, y, z);
|
||||
AreaTableEntry const* area = sAreaStore.LookupEntry(areaFlag);
|
||||
if (!area || (canFly && (area->flags & AREA_FLAG_NO_FLY_ZONE)))
|
||||
canFly = false;
|
||||
|
||||
uint32 mount = 0;
|
||||
switch (target->GetBaseSkillValue(SKILL_RIDING))
|
||||
{
|
||||
case 0:
|
||||
mount = _mount0;
|
||||
break;
|
||||
case 75:
|
||||
mount = _mount60;
|
||||
break;
|
||||
case 150:
|
||||
mount = _mount100;
|
||||
break;
|
||||
case 225:
|
||||
if (canFly)
|
||||
mount = _mount150;
|
||||
else
|
||||
mount = _mount100;
|
||||
break;
|
||||
case 300:
|
||||
if (canFly)
|
||||
{
|
||||
if (_mount310 && target->Has310Flyer(false))
|
||||
mount = _mount310;
|
||||
else
|
||||
mount = _mount280;
|
||||
}
|
||||
else
|
||||
mount = _mount100;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (mount)
|
||||
{
|
||||
// Prevent stacking of mounts and client crashes upon dismounting
|
||||
//target->RemoveAurasByType(SPELL_AURA_MOUNTED, 0, GetHitAura());
|
||||
|
||||
target->CastSpell(target, mount, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
OnEffectHitTarget += SpellEffectFn(spell_gen_mount_SpellScript::HandleMount, EFFECT_2, SPELL_EFFECT_SCRIPT_EFFECT);
|
||||
}
|
||||
|
||||
private:
|
||||
uint32 _mount0;
|
||||
uint32 _mount60;
|
||||
uint32 _mount100;
|
||||
uint32 _mount150;
|
||||
uint32 _mount280;
|
||||
uint32 _mount310;
|
||||
};
|
||||
|
||||
SpellScript* GetSpellScript() const
|
||||
{
|
||||
return new spell_gen_mount_SpellScript(_mount0, _mount60, _mount100, _mount150, _mount280, _mount310);
|
||||
}
|
||||
|
||||
private:
|
||||
uint32 _mount0;
|
||||
uint32 _mount60;
|
||||
uint32 _mount100;
|
||||
uint32 _mount150;
|
||||
uint32 _mount280;
|
||||
uint32 _mount310;
|
||||
};
|
||||
|
||||
void AddSC_generic_spell_scripts()
|
||||
{
|
||||
new spell_gen_absorb0_hitlimit1();
|
||||
@@ -2862,4 +3094,14 @@ void AddSC_generic_spell_scripts()
|
||||
new spell_gen_lifebloom("spell_cenarion_scout_lifebloom", SPELL_CENARION_SCOUT_LIFEBLOOM_FINAL_HEAL);
|
||||
new spell_gen_lifebloom("spell_twisted_visage_lifebloom", SPELL_TWISTED_VISAGE_LIFEBLOOM_FINAL_HEAL);
|
||||
new spell_gen_lifebloom("spell_faction_champion_dru_lifebloom", SPELL_FACTION_CHAMPIONS_DRU_LIFEBLOOM_FINAL_HEAL);
|
||||
new spell_gen_summon_elemental("spell_gen_summon_fire_elemental", SPELL_SUMMON_FIRE_ELEMENTAL);
|
||||
new spell_gen_summon_elemental("spell_gen_summon_earth_elemental", SPELL_SUMMON_EARTH_ELEMENTAL);
|
||||
new spell_gen_mount("spell_magic_broom", 0, SPELL_MAGIC_BROOM_60, SPELL_MAGIC_BROOM_100, SPELL_MAGIC_BROOM_150, SPELL_MAGIC_BROOM_280);
|
||||
new spell_gen_mount("spell_headless_horseman_mount", 0, SPELL_HEADLESS_HORSEMAN_MOUNT_60, SPELL_HEADLESS_HORSEMAN_MOUNT_100, SPELL_HEADLESS_HORSEMAN_MOUNT_150, SPELL_HEADLESS_HORSEMAN_MOUNT_280);
|
||||
new spell_gen_mount("spell_winged_steed_of_the_ebon_blade", 0, 0, 0, SPELL_WINGED_STEED_150, SPELL_WINGED_STEED_280);
|
||||
new spell_gen_mount("spell_big_love_rocket", SPELL_BIG_LOVE_ROCKET_0, SPELL_BIG_LOVE_ROCKET_60, SPELL_BIG_LOVE_ROCKET_100, SPELL_BIG_LOVE_ROCKET_150, SPELL_BIG_LOVE_ROCKET_310);
|
||||
new spell_gen_mount("spell_invincible", 0, SPELL_INVINCIBLE_60, SPELL_INVINCIBLE_100, SPELL_INVINCIBLE_150, SPELL_INVINCIBLE_310);
|
||||
new spell_gen_mount("spell_blazing_hippogryph", 0, 0, 0, SPELL_BLAZING_HIPPOGRYPH_150, SPELL_BLAZING_HIPPOGRYPH_280);
|
||||
new spell_gen_mount("spell_celestial_steed", 0, SPELL_CELESTIAL_STEED_60, SPELL_CELESTIAL_STEED_100, SPELL_CELESTIAL_STEED_150, SPELL_CELESTIAL_STEED_280, SPELL_CELESTIAL_STEED_310);
|
||||
new spell_gen_mount("spell_x53_touring_rocket", 0, 0, 0, SPELL_X53_TOURING_ROCKET_150, SPELL_X53_TOURING_ROCKET_280, SPELL_X53_TOURING_ROCKET_310);
|
||||
}
|
||||
|
||||
@@ -629,7 +629,8 @@ class spell_hun_disengage : public SpellScriptLoader
|
||||
|
||||
SpellCastResult CheckCast()
|
||||
{
|
||||
if (GetCaster()->GetTypeId() == TYPEID_PLAYER && !GetCaster()->isInCombat())
|
||||
Unit* caster = GetCaster();
|
||||
if (caster->GetTypeId() == TYPEID_PLAYER && !caster->isInCombat())
|
||||
return SPELL_FAILED_CANT_DO_THAT_RIGHT_NOW;
|
||||
|
||||
return SPELL_CAST_OK;
|
||||
@@ -647,6 +648,57 @@ class spell_hun_disengage : public SpellScriptLoader
|
||||
}
|
||||
};
|
||||
|
||||
class spell_hun_tame_beast : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_hun_tame_beast() : SpellScriptLoader("spell_hun_tame_beast") { }
|
||||
|
||||
class spell_hun_tame_beast_SpellScript : public SpellScript
|
||||
{
|
||||
PrepareSpellScript(spell_hun_tame_beast_SpellScript);
|
||||
|
||||
SpellCastResult CheckCast()
|
||||
{
|
||||
Unit* caster = GetCaster();
|
||||
if (caster->GetTypeId() != TYPEID_PLAYER)
|
||||
return SPELL_FAILED_DONT_REPORT;
|
||||
|
||||
if (!GetExplTargetUnit())
|
||||
return SPELL_FAILED_BAD_IMPLICIT_TARGETS;
|
||||
|
||||
if (Creature* target = GetExplTargetUnit()->ToCreature())
|
||||
{
|
||||
if (target->getLevel() > caster->getLevel())
|
||||
return SPELL_FAILED_HIGHLEVEL;
|
||||
|
||||
// use SMSG_PET_TAME_FAILURE?
|
||||
if (!target->GetCreatureTemplate()->isTameable(caster->ToPlayer()->CanTameExoticPets()))
|
||||
return SPELL_FAILED_BAD_TARGETS;
|
||||
|
||||
if (caster->GetPetGUID())
|
||||
return SPELL_FAILED_ALREADY_HAVE_SUMMON;
|
||||
|
||||
if (caster->GetCharmGUID())
|
||||
return SPELL_FAILED_ALREADY_HAVE_CHARM;
|
||||
}
|
||||
else
|
||||
return SPELL_FAILED_BAD_IMPLICIT_TARGETS;
|
||||
|
||||
return SPELL_CAST_OK;
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
OnCheckCast += SpellCheckCastFn(spell_hun_tame_beast_SpellScript::CheckCast);
|
||||
}
|
||||
};
|
||||
|
||||
SpellScript* GetSpellScript() const
|
||||
{
|
||||
return new spell_hun_tame_beast_SpellScript();
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_hunter_spell_scripts()
|
||||
{
|
||||
new spell_hun_aspect_of_the_beast();
|
||||
@@ -662,4 +714,5 @@ void AddSC_hunter_spell_scripts()
|
||||
new spell_hun_misdirection();
|
||||
new spell_hun_misdirection_proc();
|
||||
new spell_hun_disengage();
|
||||
new spell_hun_tame_beast();
|
||||
}
|
||||
|
||||
@@ -502,6 +502,44 @@ class spell_pal_lay_on_hands : public SpellScriptLoader
|
||||
}
|
||||
};
|
||||
|
||||
class spell_pal_righteous_defense : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_pal_righteous_defense() : SpellScriptLoader("spell_pal_righteous_defense") { }
|
||||
|
||||
class spell_pal_righteous_defense_SpellScript : public SpellScript
|
||||
{
|
||||
PrepareSpellScript(spell_pal_righteous_defense_SpellScript);
|
||||
|
||||
SpellCastResult CheckCast()
|
||||
{
|
||||
Unit* caster = GetCaster();
|
||||
if (caster->GetTypeId() != TYPEID_PLAYER)
|
||||
return SPELL_FAILED_DONT_REPORT;
|
||||
|
||||
if (Unit* target = GetExplTargetUnit())
|
||||
{
|
||||
if (!target->IsFriendlyTo(caster) || target->getAttackers().empty())
|
||||
return SPELL_FAILED_BAD_TARGETS;
|
||||
}
|
||||
else
|
||||
return SPELL_FAILED_BAD_TARGETS;
|
||||
|
||||
return SPELL_CAST_OK;
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
OnCheckCast += SpellCheckCastFn(spell_pal_righteous_defense_SpellScript::CheckCast);
|
||||
}
|
||||
};
|
||||
|
||||
SpellScript* GetSpellScript() const
|
||||
{
|
||||
return new spell_pal_righteous_defense_SpellScript();
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_paladin_spell_scripts()
|
||||
{
|
||||
new spell_pal_ardent_defender();
|
||||
@@ -513,4 +551,5 @@ void AddSC_paladin_spell_scripts()
|
||||
new spell_pal_divine_storm();
|
||||
new spell_pal_divine_storm_dummy();
|
||||
new spell_pal_lay_on_hands();
|
||||
new spell_pal_righteous_defense();
|
||||
}
|
||||
|
||||
@@ -43,6 +43,8 @@ enum ShamanSpells
|
||||
SHAMAN_TOTEM_SPELL_EARTHBIND_TOTEM = 6474,
|
||||
SHAMAN_TOTEM_SPELL_EARTHEN_POWER = 59566,
|
||||
|
||||
SHAMAN_BIND_SIGHT = 6277,
|
||||
|
||||
ICON_ID_SHAMAN_LAVA_FLOW = 3087,
|
||||
SHAMAN_LAVA_FLOWS_R1 = 51480,
|
||||
SHAMAN_LAVA_FLOWS_TRIGGERED_R1 = 64694,
|
||||
@@ -702,6 +704,52 @@ class spell_sha_flame_shock : public SpellScriptLoader
|
||||
}
|
||||
};
|
||||
|
||||
class spell_sha_sentry_totem : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_sha_sentry_totem() : SpellScriptLoader("spell_sha_sentry_totem") { }
|
||||
|
||||
class spell_sha_sentry_totem_AuraScript : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_sha_sentry_totem_AuraScript);
|
||||
|
||||
bool Validate(SpellInfo const* /*spellEntry*/)
|
||||
{
|
||||
if (!sSpellMgr->GetSpellInfo(SHAMAN_BIND_SIGHT))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void AfterApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
|
||||
{
|
||||
if (Unit* caster = GetCaster())
|
||||
{
|
||||
if (Creature* totem = caster->GetMap()->GetCreature(caster->m_SummonSlot[4]))
|
||||
if (totem->isTotem())
|
||||
caster->CastSpell(totem, SHAMAN_BIND_SIGHT, true);
|
||||
}
|
||||
}
|
||||
|
||||
void AfterRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
|
||||
{
|
||||
if (GetCaster)
|
||||
if (Player* caster = GetCaster()->ToPlayer())
|
||||
caster->StopCastingBindSight();
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
AfterEffectApply += AuraEffectApplyFn(spell_sha_sentry_totem_AuraScript::AfterApply, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
|
||||
AfterEffectRemove += AuraEffectRemoveFn(spell_sha_sentry_totem_AuraScript::AfterRemove, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
|
||||
}
|
||||
};
|
||||
|
||||
AuraScript* GetAuraScript() const
|
||||
{
|
||||
return new spell_sha_sentry_totem_AuraScript();
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_shaman_spell_scripts()
|
||||
{
|
||||
new spell_sha_astral_shift();
|
||||
@@ -718,4 +766,5 @@ void AddSC_shaman_spell_scripts()
|
||||
new spell_sha_lava_lash();
|
||||
new spell_sha_chain_heal();
|
||||
new spell_sha_flame_shock();
|
||||
new spell_sha_sentry_totem();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user