aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/updates/world/2013_07_17_04_world_spell_script_names.sql4
-rw-r--r--src/server/scripts/Spells/spell_generic.cpp3640
-rw-r--r--src/server/scripts/World/go_scripts.cpp74
3 files changed, 1854 insertions, 1864 deletions
diff --git a/sql/updates/world/2013_07_17_04_world_spell_script_names.sql b/sql/updates/world/2013_07_17_04_world_spell_script_names.sql
new file mode 100644
index 00000000000..acec312eb92
--- /dev/null
+++ b/sql/updates/world/2013_07_17_04_world_spell_script_names.sql
@@ -0,0 +1,4 @@
+UPDATE `spell_script_names` SET `ScriptName`='spell_gen_clone' WHERE `ScriptName`='spell_generic_clone';
+UPDATE `spell_script_names` SET `ScriptName`='spell_gen_clone_weapon' WHERE `ScriptName`='spell_generic_clone_weapon';
+UPDATE `spell_script_names` SET `ScriptName`='spell_gen_30pct_count_pct_from_max_hp' WHERE `ScriptName`='spell_gen_touch_the_nightmare';
+UPDATE `spell_script_names` SET `ScriptName`='spell_gen_creature_permanent_feign_death' WHERE `ScriptName`='spell_creature_permanent_feign_death';
diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp
index e1928060100..2356d5d27f4 100644
--- a/src/server/scripts/Spells/spell_generic.cpp
+++ b/src/server/scripts/Spells/spell_generic.cpp
@@ -62,7 +62,7 @@ class spell_gen_absorb0_hitlimit1 : public SpellScriptLoader
void Register() OVERRIDE
{
- OnEffectAbsorb += AuraEffectAbsorbFn(spell_gen_absorb0_hitlimit1_AuraScript::Absorb, EFFECT_0);
+ OnEffectAbsorb += AuraEffectAbsorbFn(spell_gen_absorb0_hitlimit1_AuraScript::Absorb, EFFECT_0);
}
};
@@ -163,962 +163,566 @@ class spell_gen_adaptive_warding : public SpellScriptLoader
}
};
-// 41337 Aura of Anger
-class spell_gen_aura_of_anger : public SpellScriptLoader
-{
- public:
- spell_gen_aura_of_anger() : SpellScriptLoader("spell_gen_aura_of_anger") { }
-
- class spell_gen_aura_of_anger_AuraScript : public AuraScript
- {
- PrepareAuraScript(spell_gen_aura_of_anger_AuraScript);
-
- void HandleEffectPeriodicUpdate(AuraEffect* aurEff)
- {
- if (AuraEffect* aurEff1 = aurEff->GetBase()->GetEffect(EFFECT_1))
- aurEff1->ChangeAmount(aurEff1->GetAmount() + 5);
- aurEff->SetAmount(100 * aurEff->GetTickNumber());
- }
-
- void Register() OVERRIDE
- {
- OnEffectUpdatePeriodic += AuraEffectUpdatePeriodicFn(spell_gen_aura_of_anger_AuraScript::HandleEffectPeriodicUpdate, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE);
- }
- };
-
- AuraScript* GetAuraScript() const OVERRIDE
- {
- return new spell_gen_aura_of_anger_AuraScript();
- }
-};
-
-class spell_gen_av_drekthar_presence : public SpellScriptLoader
-{
- public:
- spell_gen_av_drekthar_presence() : SpellScriptLoader("spell_gen_av_drekthar_presence") { }
-
- class spell_gen_av_drekthar_presence_AuraScript : public AuraScript
- {
- PrepareAuraScript(spell_gen_av_drekthar_presence_AuraScript);
-
- bool CheckAreaTarget(Unit* target)
- {
- switch (target->GetEntry())
- {
- // alliance
- case 14762: // Dun Baldar North Marshal
- case 14763: // Dun Baldar South Marshal
- case 14764: // Icewing Marshal
- case 14765: // Stonehearth Marshal
- case 11948: // Vandar Stormspike
- // horde
- case 14772: // East Frostwolf Warmaster
- case 14776: // Tower Point Warmaster
- case 14773: // Iceblood Warmaster
- case 14777: // West Frostwolf Warmaster
- case 11946: // Drek'thar
- return true;
- default:
- return false;
- break;
- }
- }
- void Register() OVERRIDE
- {
- DoCheckAreaTarget += AuraCheckAreaTargetFn(spell_gen_av_drekthar_presence_AuraScript::CheckAreaTarget);
- }
- };
-
- AuraScript* GetAuraScript() const OVERRIDE
- {
- return new spell_gen_av_drekthar_presence_AuraScript();
- }
-};
-
-// 46394 Brutallus Burn
-class spell_gen_burn_brutallus : public SpellScriptLoader
+class spell_gen_allow_cast_from_item_only : public SpellScriptLoader
{
public:
- spell_gen_burn_brutallus() : SpellScriptLoader("spell_gen_burn_brutallus") { }
+ spell_gen_allow_cast_from_item_only() : SpellScriptLoader("spell_gen_allow_cast_from_item_only") { }
- class spell_gen_burn_brutallus_AuraScript : public AuraScript
+ class spell_gen_allow_cast_from_item_only_SpellScript : public SpellScript
{
- PrepareAuraScript(spell_gen_burn_brutallus_AuraScript);
+ PrepareSpellScript(spell_gen_allow_cast_from_item_only_SpellScript);
- void HandleEffectPeriodicUpdate(AuraEffect* aurEff)
+ SpellCastResult CheckRequirement()
{
- if (aurEff->GetTickNumber() % 11 == 0)
- aurEff->SetAmount(aurEff->GetAmount() * 2);
+ if (!GetCastItem())
+ return SPELL_FAILED_CANT_DO_THAT_RIGHT_NOW;
+ return SPELL_CAST_OK;
}
void Register() OVERRIDE
{
- OnEffectUpdatePeriodic += AuraEffectUpdatePeriodicFn(spell_gen_burn_brutallus_AuraScript::HandleEffectPeriodicUpdate, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE);
+ OnCheckCast += SpellCheckCastFn(spell_gen_allow_cast_from_item_only_SpellScript::CheckRequirement);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ SpellScript* GetSpellScript() const OVERRIDE
{
- return new spell_gen_burn_brutallus_AuraScript();
+ return new spell_gen_allow_cast_from_item_only_SpellScript();
}
};
-enum CannibalizeSpells
+enum AnimalBloodPoolSpell
{
- SPELL_CANNIBALIZE_TRIGGERED = 20578,
+ SPELL_ANIMAL_BLOOD = 46221,
+ SPELL_SPAWN_BLOOD_POOL = 63471
};
-class spell_gen_cannibalize : public SpellScriptLoader
+class spell_gen_animal_blood : public SpellScriptLoader
{
public:
- spell_gen_cannibalize() : SpellScriptLoader("spell_gen_cannibalize") { }
+ spell_gen_animal_blood() : SpellScriptLoader("spell_gen_animal_blood") { }
- class spell_gen_cannibalize_SpellScript : public SpellScript
+ class spell_gen_animal_blood_AuraScript : public AuraScript
{
- PrepareSpellScript(spell_gen_cannibalize_SpellScript);
+ PrepareAuraScript(spell_gen_animal_blood_AuraScript);
- bool Validate(SpellInfo const* /*spellEntry*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
{
- if (!sSpellMgr->GetSpellInfo(SPELL_CANNIBALIZE_TRIGGERED))
+ if (!sSpellMgr->GetSpellInfo(SPELL_SPAWN_BLOOD_POOL))
return false;
return true;
}
- SpellCastResult CheckIfCorpseNear()
+ void OnApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
- Unit* caster = GetCaster();
- float max_range = GetSpellInfo()->GetMaxRange(false);
- WorldObject* result = NULL;
- // search for nearby enemy corpse in range
- Trinity::AnyDeadUnitSpellTargetInRangeCheck check(caster, max_range, GetSpellInfo(), TARGET_CHECK_ENEMY);
- Trinity::WorldObjectSearcher<Trinity::AnyDeadUnitSpellTargetInRangeCheck> searcher(caster, result, check);
- caster->GetMap()->VisitFirstFound(caster->m_positionX, caster->m_positionY, max_range, searcher);
- if (!result)
- return SPELL_FAILED_NO_EDIBLE_CORPSES;
- return SPELL_CAST_OK;
+ // Remove all auras with spell id 46221, except the one currently being applied
+ while (Aura* aur = GetUnitOwner()->GetOwnedAura(SPELL_ANIMAL_BLOOD, 0, 0, 0, GetAura()))
+ GetUnitOwner()->RemoveOwnedAura(aur);
}
- void HandleDummy(SpellEffIndex /*effIndex*/)
+ void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
- Unit* caster = GetCaster();
- caster->CastSpell(caster, SPELL_CANNIBALIZE_TRIGGERED, false);
+ if (Unit* owner = GetUnitOwner())
+ if (owner->IsInWater())
+ owner->CastSpell(owner, SPELL_SPAWN_BLOOD_POOL, true);
}
void Register() OVERRIDE
{
- OnEffectHit += SpellEffectFn(spell_gen_cannibalize_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
- OnCheckCast += SpellCheckCastFn(spell_gen_cannibalize_SpellScript::CheckIfCorpseNear);
+ AfterEffectApply += AuraEffectRemoveFn(spell_gen_animal_blood_AuraScript::OnApply, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL, AURA_EFFECT_HANDLE_REAL);
+ AfterEffectRemove += AuraEffectRemoveFn(spell_gen_animal_blood_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL, AURA_EFFECT_HANDLE_REAL);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ AuraScript* GetAuraScript() const OVERRIDE
{
- return new spell_gen_cannibalize_SpellScript();
+ return new spell_gen_animal_blood_AuraScript();
}
};
-// 63845 - Create Lance
-enum CreateLanceSpells
-{
- SPELL_CREATE_LANCE_ALLIANCE = 63914,
- SPELL_CREATE_LANCE_HORDE = 63919
-};
-
-class spell_gen_create_lance : public SpellScriptLoader
+// 41337 Aura of Anger
+class spell_gen_aura_of_anger : public SpellScriptLoader
{
public:
- spell_gen_create_lance() : SpellScriptLoader("spell_gen_create_lance") { }
+ spell_gen_aura_of_anger() : SpellScriptLoader("spell_gen_aura_of_anger") { }
- class spell_gen_create_lance_SpellScript : public SpellScript
+ class spell_gen_aura_of_anger_AuraScript : public AuraScript
{
- PrepareSpellScript(spell_gen_create_lance_SpellScript);
-
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
- {
- if (!sSpellMgr->GetSpellInfo(SPELL_CREATE_LANCE_ALLIANCE) || !sSpellMgr->GetSpellInfo(SPELL_CREATE_LANCE_HORDE))
- return false;
- return true;
- }
+ PrepareAuraScript(spell_gen_aura_of_anger_AuraScript);
- void HandleScript(SpellEffIndex effIndex)
+ void HandleEffectPeriodicUpdate(AuraEffect* aurEff)
{
- PreventHitDefaultEffect(effIndex);
-
- if (Player* target = GetHitPlayer())
- {
- if (target->GetTeam() == ALLIANCE)
- GetCaster()->CastSpell(target, SPELL_CREATE_LANCE_ALLIANCE, true);
- else
- GetCaster()->CastSpell(target, SPELL_CREATE_LANCE_HORDE, true);
- }
+ if (AuraEffect* aurEff1 = aurEff->GetBase()->GetEffect(EFFECT_1))
+ aurEff1->ChangeAmount(aurEff1->GetAmount() + 5);
+ aurEff->SetAmount(100 * aurEff->GetTickNumber());
}
void Register() OVERRIDE
{
- OnEffectHitTarget += SpellEffectFn(spell_gen_create_lance_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
+ OnEffectUpdatePeriodic += AuraEffectUpdatePeriodicFn(spell_gen_aura_of_anger_AuraScript::HandleEffectPeriodicUpdate, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ AuraScript* GetAuraScript() const OVERRIDE
{
- return new spell_gen_create_lance_SpellScript();
+ return new spell_gen_aura_of_anger_AuraScript();
}
};
-// 28702 - Netherbloom
-enum Netherbloom
+enum ServiceUniform
{
- SPELL_NETHERBLOOM_POLLEN_1 = 28703
+ // Spells
+ SPELL_SERVICE_UNIFORM = 71450,
+
+ // Models
+ MODEL_GOBLIN_MALE = 31002,
+ MODEL_GOBLIN_FEMALE = 31003
};
-class spell_gen_netherbloom : public SpellScriptLoader
+class spell_gen_aura_service_uniform : public SpellScriptLoader
{
public:
- spell_gen_netherbloom() : SpellScriptLoader("spell_gen_netherbloom") { }
+ spell_gen_aura_service_uniform() : SpellScriptLoader("spell_gen_aura_service_uniform") { }
- class spell_gen_netherbloom_SpellScript : public SpellScript
+ class spell_gen_aura_service_uniform_AuraScript : public AuraScript
{
- PrepareSpellScript(spell_gen_netherbloom_SpellScript);
+ PrepareAuraScript(spell_gen_aura_service_uniform_AuraScript);
bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
{
- for (uint8 i = 0; i < 5; ++i)
- if (!sSpellMgr->GetSpellInfo(SPELL_NETHERBLOOM_POLLEN_1 + i))
- return false;
+ if (!sSpellMgr->GetSpellInfo(SPELL_SERVICE_UNIFORM))
+ return false;
return true;
}
- void HandleScript(SpellEffIndex effIndex)
+ void OnApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
- PreventHitDefaultEffect(effIndex);
-
- if (Unit* target = GetHitUnit())
+ // Apply model goblin
+ Unit* target = GetTarget();
+ if (target->GetTypeId() == TYPEID_PLAYER)
{
- // 25% chance of casting a random buff
- if (roll_chance_i(75))
- return;
-
- // triggered spells are 28703 to 28707
- // Note: some sources say, that there was the possibility of
- // receiving a debuff. However, this seems to be removed by a patch.
-
- // don't overwrite an existing aura
- for (uint8 i = 0; i < 5; ++i)
- if (target->HasAura(SPELL_NETHERBLOOM_POLLEN_1 + i))
- return;
-
- target->CastSpell(target, SPELL_NETHERBLOOM_POLLEN_1 + urand(0, 4), true);
+ if (target->getGender() == GENDER_MALE)
+ target->SetDisplayId(MODEL_GOBLIN_MALE);
+ else
+ target->SetDisplayId(MODEL_GOBLIN_FEMALE);
}
}
- void Register() OVERRIDE
- {
- OnEffectHitTarget += SpellEffectFn(spell_gen_netherbloom_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
- }
- };
-
- SpellScript* GetSpellScript() const OVERRIDE
- {
- return new spell_gen_netherbloom_SpellScript();
- }
-};
-
-// 28720 - Nightmare Vine
-enum NightmareVine
-{
- SPELL_NIGHTMARE_POLLEN = 28721
-};
-
-class spell_gen_nightmare_vine : public SpellScriptLoader
-{
- public:
- spell_gen_nightmare_vine() : SpellScriptLoader("spell_gen_nightmare_vine") { }
-
- class spell_gen_nightmare_vine_SpellScript : public SpellScript
- {
- PrepareSpellScript(spell_gen_nightmare_vine_SpellScript);
-
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
- {
- if (!sSpellMgr->GetSpellInfo(SPELL_NIGHTMARE_POLLEN))
- return false;
- return true;
- }
-
- void HandleScript(SpellEffIndex effIndex)
+ void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
- PreventHitDefaultEffect(effIndex);
-
- if (Unit* target = GetHitUnit())
- {
- // 25% chance of casting Nightmare Pollen
- if (roll_chance_i(25))
- target->CastSpell(target, SPELL_NIGHTMARE_POLLEN, true);
- }
+ Unit* target = GetTarget();
+ if (target->GetTypeId() == TYPEID_PLAYER)
+ target->RestoreDisplayId();
}
void Register() OVERRIDE
{
- OnEffectHitTarget += SpellEffectFn(spell_gen_nightmare_vine_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
+ AfterEffectApply += AuraEffectRemoveFn(spell_gen_aura_service_uniform_AuraScript::OnApply, EFFECT_0, SPELL_AURA_TRANSFORM, AURA_EFFECT_HANDLE_REAL);
+ AfterEffectRemove += AuraEffectRemoveFn(spell_gen_aura_service_uniform_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_TRANSFORM, AURA_EFFECT_HANDLE_REAL);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ AuraScript* GetAuraScript() const OVERRIDE
{
- return new spell_gen_nightmare_vine_SpellScript();
+ return new spell_gen_aura_service_uniform_AuraScript();
}
};
-// 27539 - Obsidian Armor
-enum ObsidianArmor
-{
- SPELL_GEN_OBSIDIAN_ARMOR_HOLY = 27536,
- SPELL_GEN_OBSIDIAN_ARMOR_FIRE = 27533,
- SPELL_GEN_OBSIDIAN_ARMOR_NATURE = 27538,
- SPELL_GEN_OBSIDIAN_ARMOR_FROST = 27534,
- SPELL_GEN_OBSIDIAN_ARMOR_SHADOW = 27535,
- SPELL_GEN_OBSIDIAN_ARMOR_ARCANE = 27540
-};
-
-class spell_gen_obsidian_armor : public SpellScriptLoader
+class spell_gen_av_drekthar_presence : public SpellScriptLoader
{
public:
- spell_gen_obsidian_armor() : SpellScriptLoader("spell_gen_obsidian_armor") { }
+ spell_gen_av_drekthar_presence() : SpellScriptLoader("spell_gen_av_drekthar_presence") { }
- class spell_gen_obsidian_armor_AuraScript : public AuraScript
+ class spell_gen_av_drekthar_presence_AuraScript : public AuraScript
{
- PrepareAuraScript(spell_gen_obsidian_armor_AuraScript);
-
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
- {
- if (!sSpellMgr->GetSpellInfo(SPELL_GEN_OBSIDIAN_ARMOR_HOLY) ||
- !sSpellMgr->GetSpellInfo(SPELL_GEN_OBSIDIAN_ARMOR_FIRE) ||
- !sSpellMgr->GetSpellInfo(SPELL_GEN_OBSIDIAN_ARMOR_NATURE) ||
- !sSpellMgr->GetSpellInfo(SPELL_GEN_OBSIDIAN_ARMOR_FROST) ||
- !sSpellMgr->GetSpellInfo(SPELL_GEN_OBSIDIAN_ARMOR_SHADOW) ||
- !sSpellMgr->GetSpellInfo(SPELL_GEN_OBSIDIAN_ARMOR_ARCANE))
- return false;
- return true;
- }
-
- bool CheckProc(ProcEventInfo& eventInfo)
- {
- if (eventInfo.GetDamageInfo()->GetSpellInfo()) // eventInfo.GetSpellInfo()
- return false;
-
- if (GetFirstSchoolInMask(eventInfo.GetSchoolMask()) == SPELL_SCHOOL_NORMAL)
- return false;
-
- return true;
- }
+ PrepareAuraScript(spell_gen_av_drekthar_presence_AuraScript);
- void OnProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
+ bool CheckAreaTarget(Unit* target)
{
- PreventDefaultAction();
-
- uint32 spellId = 0;
- switch (GetFirstSchoolInMask(eventInfo.GetSchoolMask()))
+ switch (target->GetEntry())
{
- case SPELL_SCHOOL_HOLY:
- spellId = SPELL_GEN_OBSIDIAN_ARMOR_HOLY;
- break;
- case SPELL_SCHOOL_FIRE:
- spellId = SPELL_GEN_OBSIDIAN_ARMOR_FIRE;
- break;
- case SPELL_SCHOOL_NATURE:
- spellId = SPELL_GEN_OBSIDIAN_ARMOR_NATURE;
- break;
- case SPELL_SCHOOL_FROST:
- spellId = SPELL_GEN_OBSIDIAN_ARMOR_FROST;
- break;
- case SPELL_SCHOOL_SHADOW:
- spellId = SPELL_GEN_OBSIDIAN_ARMOR_SHADOW;
- break;
- case SPELL_SCHOOL_ARCANE:
- spellId = SPELL_GEN_OBSIDIAN_ARMOR_ARCANE;
- break;
+ // alliance
+ case 14762: // Dun Baldar North Marshal
+ case 14763: // Dun Baldar South Marshal
+ case 14764: // Icewing Marshal
+ case 14765: // Stonehearth Marshal
+ case 11948: // Vandar Stormspike
+ // horde
+ case 14772: // East Frostwolf Warmaster
+ case 14776: // Tower Point Warmaster
+ case 14773: // Iceblood Warmaster
+ case 14777: // West Frostwolf Warmaster
+ case 11946: // Drek'thar
+ return true;
default:
- return;
+ return false;
}
- GetTarget()->CastSpell(GetTarget(), spellId, true, NULL, aurEff);
}
void Register() OVERRIDE
{
- DoCheckProc += AuraCheckProcFn(spell_gen_obsidian_armor_AuraScript::CheckProc);
- OnEffectProc += AuraEffectProcFn(spell_gen_obsidian_armor_AuraScript::OnProc, EFFECT_0, SPELL_AURA_DUMMY);
+ DoCheckAreaTarget += AuraCheckAreaTargetFn(spell_gen_av_drekthar_presence_AuraScript::CheckAreaTarget);
}
};
AuraScript* GetAuraScript() const OVERRIDE
{
- return new spell_gen_obsidian_armor_AuraScript();
+ return new spell_gen_av_drekthar_presence_AuraScript();
}
};
-// 45472 Parachute
-enum ParachuteSpells
+enum GenericBandage
{
- SPELL_PARACHUTE = 45472,
- SPELL_PARACHUTE_BUFF = 44795,
+ SPELL_RECENTLY_BANDAGED = 11196
};
-class spell_gen_parachute : public SpellScriptLoader
+class spell_gen_bandage : public SpellScriptLoader
{
public:
- spell_gen_parachute() : SpellScriptLoader("spell_gen_parachute") { }
+ spell_gen_bandage() : SpellScriptLoader("spell_gen_bandage") { }
- class spell_gen_parachute_AuraScript : public AuraScript
+ class spell_gen_bandage_SpellScript : public SpellScript
{
- PrepareAuraScript(spell_gen_parachute_AuraScript);
+ PrepareSpellScript(spell_gen_bandage_SpellScript);
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
{
- if (!sSpellMgr->GetSpellInfo(SPELL_PARACHUTE) || !sSpellMgr->GetSpellInfo(SPELL_PARACHUTE_BUFF))
+ if (!sSpellMgr->GetSpellInfo(SPELL_RECENTLY_BANDAGED))
return false;
return true;
}
- void HandleEffectPeriodic(AuraEffect const* /*aurEff*/)
- {
- if (Player* target = GetTarget()->ToPlayer())
- if (target->IsFalling())
- {
- target->RemoveAurasDueToSpell(SPELL_PARACHUTE);
- target->CastSpell(target, SPELL_PARACHUTE_BUFF, true);
- }
- }
-
- void Register() OVERRIDE
- {
- OnEffectPeriodic += AuraEffectPeriodicFn(spell_gen_parachute_AuraScript::HandleEffectPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY);
- }
- };
-
- AuraScript* GetAuraScript() const OVERRIDE
- {
- return new spell_gen_parachute_AuraScript();
- }
-};
-
-enum NPCEntries
-{
- NPC_DOOMGUARD = 11859,
- NPC_INFERNAL = 89,
- NPC_IMP = 416,
-};
-
-class spell_gen_pet_summoned : public SpellScriptLoader
-{
- public:
- spell_gen_pet_summoned() : SpellScriptLoader("spell_gen_pet_summoned") { }
-
- class spell_gen_pet_summoned_SpellScript : public SpellScript
- {
- PrepareSpellScript(spell_gen_pet_summoned_SpellScript);
-
- bool Load() OVERRIDE
- {
- return GetCaster()->GetTypeId() == TYPEID_PLAYER;
- }
-
- void HandleScript(SpellEffIndex /*effIndex*/)
+ SpellCastResult CheckCast()
{
- Player* player = GetCaster()->ToPlayer();
- if (player->GetLastPetNumber())
+ if (Unit* target = GetExplTargetUnit())
{
- PetType newPetType = (player->getClass() == CLASS_HUNTER) ? HUNTER_PET : SUMMON_PET;
- if (Pet* newPet = new Pet(player, newPetType))
- {
- if (newPet->LoadPetFromDB(player, 0, player->GetLastPetNumber(), true))
- {
- // revive the pet if it is dead
- if (newPet->getDeathState() == DEAD)
- newPet->setDeathState(ALIVE);
-
- newPet->SetFullHealth();
- newPet->SetPower(newPet->getPowerType(), newPet->GetMaxPower(newPet->getPowerType()));
-
- switch (newPet->GetEntry())
- {
- case NPC_DOOMGUARD:
- case NPC_INFERNAL:
- newPet->SetEntry(NPC_IMP);
- break;
- default:
- break;
- }
- }
- else
- delete newPet;
- }
+ if (target->HasAura(SPELL_RECENTLY_BANDAGED))
+ return SPELL_FAILED_TARGET_AURASTATE;
}
+ return SPELL_CAST_OK;
}
- void Register() OVERRIDE
- {
- OnEffectHitTarget += SpellEffectFn(spell_gen_pet_summoned_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
- }
- };
-
- SpellScript* GetSpellScript() const OVERRIDE
- {
- return new spell_gen_pet_summoned_SpellScript();
- }
-};
-
-class spell_gen_remove_flight_auras : public SpellScriptLoader
-{
- public:
- spell_gen_remove_flight_auras() : SpellScriptLoader("spell_gen_remove_flight_auras") {}
-
- class spell_gen_remove_flight_auras_SpellScript : public SpellScript
- {
- PrepareSpellScript(spell_gen_remove_flight_auras_SpellScript);
-
- void HandleScript(SpellEffIndex /*effIndex*/)
+ void HandleScript()
{
if (Unit* target = GetHitUnit())
- {
- target->RemoveAurasByType(SPELL_AURA_FLY);
- target->RemoveAurasByType(SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED);
- }
+ GetCaster()->CastSpell(target, SPELL_RECENTLY_BANDAGED, true);
}
void Register() OVERRIDE
{
- OnEffectHitTarget += SpellEffectFn(spell_gen_remove_flight_auras_SpellScript::HandleScript, EFFECT_1, SPELL_EFFECT_SCRIPT_EFFECT);
+ OnCheckCast += SpellCheckCastFn(spell_gen_bandage_SpellScript::CheckCast);
+ AfterHit += SpellHitFn(spell_gen_bandage_SpellScript::HandleScript);
}
};
SpellScript* GetSpellScript() const OVERRIDE
{
- return new spell_gen_remove_flight_auras_SpellScript();
+ return new spell_gen_bandage_SpellScript();
}
};
-enum EluneCandle
+enum Bonked
{
- NPC_OMEN = 15467,
-
- SPELL_ELUNE_CANDLE_OMEN_HEAD = 26622,
- SPELL_ELUNE_CANDLE_OMEN_CHEST = 26624,
- SPELL_ELUNE_CANDLE_OMEN_HAND_R = 26625,
- SPELL_ELUNE_CANDLE_OMEN_HAND_L = 26649,
- SPELL_ELUNE_CANDLE_NORMAL = 26636,
+ SPELL_BONKED = 62991,
+ SPELL_FOAM_SWORD_DEFEAT = 62994,
+ SPELL_ON_GUARD = 62972
};
-class spell_gen_elune_candle : public SpellScriptLoader
+class spell_gen_bonked : public SpellScriptLoader
{
public:
- spell_gen_elune_candle() : SpellScriptLoader("spell_gen_elune_candle") {}
+ spell_gen_bonked() : SpellScriptLoader("spell_gen_bonked") { }
- class spell_gen_elune_candle_SpellScript : public SpellScript
+ class spell_gen_bonked_SpellScript : public SpellScript
{
- PrepareSpellScript(spell_gen_elune_candle_SpellScript);
- bool Validate(SpellInfo const* /*spellEntry*/) OVERRIDE
- {
- if (!sSpellMgr->GetSpellInfo(SPELL_ELUNE_CANDLE_OMEN_HEAD))
- return false;
- if (!sSpellMgr->GetSpellInfo(SPELL_ELUNE_CANDLE_OMEN_CHEST))
- return false;
- if (!sSpellMgr->GetSpellInfo(SPELL_ELUNE_CANDLE_OMEN_HAND_R))
- return false;
- if (!sSpellMgr->GetSpellInfo(SPELL_ELUNE_CANDLE_OMEN_HAND_L))
- return false;
- if (!sSpellMgr->GetSpellInfo(SPELL_ELUNE_CANDLE_NORMAL))
- return false;
- return true;
- }
+ PrepareSpellScript(spell_gen_bonked_SpellScript);
void HandleScript(SpellEffIndex /*effIndex*/)
{
- uint32 spellId = 0;
-
- if (GetHitUnit()->GetEntry() == NPC_OMEN)
+ if (Player* target = GetHitPlayer())
{
- switch (urand(0, 3))
+ Aura const* aura = GetHitAura();
+ if (!(aura && aura->GetStackAmount() == 3))
+ return;
+
+ target->CastSpell(target, SPELL_FOAM_SWORD_DEFEAT, true);
+ target->RemoveAurasDueToSpell(SPELL_BONKED);
+
+ if (Aura const* aura = target->GetAura(SPELL_ON_GUARD))
{
- case 0: spellId = SPELL_ELUNE_CANDLE_OMEN_HEAD; break;
- case 1: spellId = SPELL_ELUNE_CANDLE_OMEN_CHEST; break;
- case 2: spellId = SPELL_ELUNE_CANDLE_OMEN_HAND_R; break;
- case 3: spellId = SPELL_ELUNE_CANDLE_OMEN_HAND_L; break;
+ if (Item* item = target->GetItemByGuid(aura->GetCastItemGUID()))
+ target->DestroyItemCount(item->GetEntry(), 1, true);
}
}
- else
- spellId = SPELL_ELUNE_CANDLE_NORMAL;
-
- GetCaster()->CastSpell(GetHitUnit(), spellId, true, NULL);
}
void Register() OVERRIDE
{
- OnEffectHitTarget += SpellEffectFn(spell_gen_elune_candle_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_DUMMY);
+ OnEffectHitTarget += SpellEffectFn(spell_gen_bonked_SpellScript::HandleScript, EFFECT_1, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
SpellScript* GetSpellScript() const OVERRIDE
{
- return new spell_gen_elune_candle_SpellScript();
+ return new spell_gen_bonked_SpellScript();
}
};
-class spell_creature_permanent_feign_death : public SpellScriptLoader
-{
- public:
- spell_creature_permanent_feign_death() : SpellScriptLoader("spell_creature_permanent_feign_death") { }
-
- class spell_creature_permanent_feign_death_AuraScript : public AuraScript
- {
- PrepareAuraScript(spell_creature_permanent_feign_death_AuraScript);
-
- void HandleEffectApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
- {
- Unit* target = GetTarget();
- target->SetFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_DEAD);
- target->SetFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FEIGN_DEATH);
-
- if (target->GetTypeId() == TYPEID_UNIT)
- target->ToCreature()->SetReactState(REACT_PASSIVE);
- }
+/* DOCUMENTATION: Break-Shield spells
+ Break-Shield spells can be classified in three groups:
- void Register() OVERRIDE
- {
- OnEffectApply += AuraEffectApplyFn(spell_creature_permanent_feign_death_AuraScript::HandleEffectApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
- }
- };
+ - Spells on vehicle bar used by players:
+ + EFFECT_0: SCRIPT_EFFECT
+ + EFFECT_1: NONE
+ + EFFECT_2: NONE
+ - Spells casted by players triggered by script:
+ + EFFECT_0: SCHOOL_DAMAGE
+ + EFFECT_1: SCRIPT_EFFECT
+ + EFFECT_2: FORCE_CAST
+ - Spells casted by NPCs on players:
+ + EFFECT_0: SCHOOL_DAMAGE
+ + EFFECT_1: SCRIPT_EFFECT
+ + EFFECT_2: NONE
- AuraScript* GetAuraScript() const OVERRIDE
- {
- return new spell_creature_permanent_feign_death_AuraScript();
- }
-};
+ In the following script we handle the SCRIPT_EFFECT for effIndex EFFECT_0 and EFFECT_1.
+ - When handling EFFECT_0 we're in the "Spells on vehicle bar used by players" case
+ and we'll trigger "Spells casted by players triggered by script"
+ - When handling EFFECT_1 we're in the "Spells casted by players triggered by script"
+ or "Spells casted by NPCs on players" so we'll search for the first defend layer and drop it.
+*/
-enum PvPTrinketTriggeredSpells
+enum BreakShieldSpells
{
- SPELL_WILL_OF_THE_FORSAKEN_COOLDOWN_TRIGGER = 72752,
- SPELL_WILL_OF_THE_FORSAKEN_COOLDOWN_TRIGGER_WOTF = 72757,
+ SPELL_BREAK_SHIELD_DAMAGE_2K = 62626,
+ SPELL_BREAK_SHIELD_DAMAGE_10K = 64590,
+
+ SPELL_BREAK_SHIELD_TRIGGER_FACTION_MOUNTS = 62575, // Also on ToC5 mounts
+ SPELL_BREAK_SHIELD_TRIGGER_CAMPAING_WARHORSE = 64595,
+ SPELL_BREAK_SHIELD_TRIGGER_UNK = 66480
};
-class spell_pvp_trinket_wotf_shared_cd : public SpellScriptLoader
+class spell_gen_break_shield: public SpellScriptLoader
{
public:
- spell_pvp_trinket_wotf_shared_cd() : SpellScriptLoader("spell_pvp_trinket_wotf_shared_cd") {}
+ spell_gen_break_shield(const char* name) : SpellScriptLoader(name) { }
- class spell_pvp_trinket_wotf_shared_cd_SpellScript : public SpellScript
+ class spell_gen_break_shield_SpellScript : public SpellScript
{
- PrepareSpellScript(spell_pvp_trinket_wotf_shared_cd_SpellScript);
+ PrepareSpellScript(spell_gen_break_shield_SpellScript)
- bool Load() OVERRIDE
+ void HandleScriptEffect(SpellEffIndex effIndex)
{
- return GetCaster()->GetTypeId() == TYPEID_PLAYER;
- }
+ Unit* target = GetHitUnit();
- bool Validate(SpellInfo const* /*spellEntry*/) OVERRIDE
- {
- if (!sSpellMgr->GetSpellInfo(SPELL_WILL_OF_THE_FORSAKEN_COOLDOWN_TRIGGER) || !sSpellMgr->GetSpellInfo(SPELL_WILL_OF_THE_FORSAKEN_COOLDOWN_TRIGGER_WOTF))
- return false;
- return true;
- }
+ switch (effIndex)
+ {
+ case EFFECT_0: // On spells wich trigger the damaging spell (and also the visual)
+ {
+ uint32 spellId;
- void HandleScript()
- {
- // This is only needed because spells cast from spell_linked_spell are triggered by default
- // Spell::SendSpellCooldown() skips all spells with TRIGGERED_IGNORE_SPELL_AND_CATEGORY_CD
- GetCaster()->ToPlayer()->AddSpellAndCategoryCooldowns(GetSpellInfo(), GetCastItem() ? GetCastItem()->GetEntry() : 0, GetSpell());
+ switch (GetSpellInfo()->Id)
+ {
+ case SPELL_BREAK_SHIELD_TRIGGER_UNK:
+ case SPELL_BREAK_SHIELD_TRIGGER_CAMPAING_WARHORSE:
+ spellId = SPELL_BREAK_SHIELD_DAMAGE_10K;
+ break;
+ case SPELL_BREAK_SHIELD_TRIGGER_FACTION_MOUNTS:
+ spellId = SPELL_BREAK_SHIELD_DAMAGE_2K;
+ break;
+ default:
+ return;
+ }
+
+ if (Unit* rider = GetCaster()->GetCharmer())
+ rider->CastSpell(target, spellId, false);
+ else
+ GetCaster()->CastSpell(target, spellId, false);
+ break;
+ }
+ case EFFECT_1: // On damaging spells, for removing a defend layer
+ {
+ Unit::AuraApplicationMap const& auras = target->GetAppliedAuras();
+ for (Unit::AuraApplicationMap::const_iterator itr = auras.begin(); itr != auras.end(); ++itr)
+ {
+ if (Aura* aura = itr->second->GetBase())
+ {
+ SpellInfo const* auraInfo = aura->GetSpellInfo();
+ if (auraInfo && auraInfo->SpellIconID == 2007 && aura->HasEffectType(SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN))
+ {
+ aura->ModStackAmount(-1, AURA_REMOVE_BY_ENEMY_SPELL);
+ // Remove dummys from rider (Necessary for updating visual shields)
+ if (Unit* rider = target->GetCharmer())
+ if (Aura* defend = rider->GetAura(aura->GetId()))
+ defend->ModStackAmount(-1, AURA_REMOVE_BY_ENEMY_SPELL);
+ break;
+ }
+ }
+ }
+ break;
+ }
+ default:
+ break;
+ }
}
void Register() OVERRIDE
{
- AfterCast += SpellCastFn(spell_pvp_trinket_wotf_shared_cd_SpellScript::HandleScript);
+ OnEffectHitTarget += SpellEffectFn(spell_gen_break_shield_SpellScript::HandleScriptEffect, EFFECT_FIRST_FOUND, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
SpellScript* GetSpellScript() const OVERRIDE
{
- return new spell_pvp_trinket_wotf_shared_cd_SpellScript();
+ return new spell_gen_break_shield_SpellScript();
}
};
-enum AnimalBloodPoolSpell
-{
- SPELL_ANIMAL_BLOOD = 46221,
- SPELL_SPAWN_BLOOD_POOL = 63471,
-};
-
-class spell_gen_animal_blood : public SpellScriptLoader
+// 46394 Brutallus Burn
+class spell_gen_burn_brutallus : public SpellScriptLoader
{
public:
- spell_gen_animal_blood() : SpellScriptLoader("spell_gen_animal_blood") { }
+ spell_gen_burn_brutallus() : SpellScriptLoader("spell_gen_burn_brutallus") { }
- class spell_gen_animal_blood_AuraScript : public AuraScript
+ class spell_gen_burn_brutallus_AuraScript : public AuraScript
{
- PrepareAuraScript(spell_gen_animal_blood_AuraScript);
-
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
- {
- if (!sSpellMgr->GetSpellInfo(SPELL_SPAWN_BLOOD_POOL))
- return false;
- return true;
- }
-
- void OnApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
- {
- // Remove all auras with spell id 46221, except the one currently being applied
- while (Aura* aur = GetUnitOwner()->GetOwnedAura(SPELL_ANIMAL_BLOOD, 0, 0, 0, GetAura()))
- GetUnitOwner()->RemoveOwnedAura(aur);
- }
+ PrepareAuraScript(spell_gen_burn_brutallus_AuraScript);
- void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
+ void HandleEffectPeriodicUpdate(AuraEffect* aurEff)
{
- if (Unit* owner = GetUnitOwner())
- if (owner->IsInWater())
- owner->CastSpell(owner, SPELL_SPAWN_BLOOD_POOL, true);
+ if (aurEff->GetTickNumber() % 11 == 0)
+ aurEff->SetAmount(aurEff->GetAmount() * 2);
}
void Register() OVERRIDE
{
- AfterEffectApply += AuraEffectRemoveFn(spell_gen_animal_blood_AuraScript::OnApply, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL, AURA_EFFECT_HANDLE_REAL);
- AfterEffectRemove += AuraEffectRemoveFn(spell_gen_animal_blood_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL, AURA_EFFECT_HANDLE_REAL);
+ OnEffectUpdatePeriodic += AuraEffectUpdatePeriodicFn(spell_gen_burn_brutallus_AuraScript::HandleEffectPeriodicUpdate, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE);
}
};
AuraScript* GetAuraScript() const OVERRIDE
{
- return new spell_gen_animal_blood_AuraScript();
+ return new spell_gen_burn_brutallus_AuraScript();
}
};
-enum DivineStormSpell
+enum CannibalizeSpells
{
- SPELL_DIVINE_STORM = 53385,
+ SPELL_CANNIBALIZE_TRIGGERED = 20578
};
-// 70769 Divine Storm!
-class spell_gen_divine_storm_cd_reset : public SpellScriptLoader
+class spell_gen_cannibalize : public SpellScriptLoader
{
public:
- spell_gen_divine_storm_cd_reset() : SpellScriptLoader("spell_gen_divine_storm_cd_reset") {}
+ spell_gen_cannibalize() : SpellScriptLoader("spell_gen_cannibalize") { }
- class spell_gen_divine_storm_cd_reset_SpellScript : public SpellScript
+ class spell_gen_cannibalize_SpellScript : public SpellScript
{
- PrepareSpellScript(spell_gen_divine_storm_cd_reset_SpellScript);
-
- bool Load() OVERRIDE
- {
- return GetCaster()->GetTypeId() == TYPEID_PLAYER;
- }
+ PrepareSpellScript(spell_gen_cannibalize_SpellScript);
bool Validate(SpellInfo const* /*spellEntry*/) OVERRIDE
{
- if (!sSpellMgr->GetSpellInfo(SPELL_DIVINE_STORM))
+ if (!sSpellMgr->GetSpellInfo(SPELL_CANNIBALIZE_TRIGGERED))
return false;
return true;
}
- void HandleScript(SpellEffIndex /*effIndex*/)
- {
- Player* caster = GetCaster()->ToPlayer();
- if (caster->HasSpellCooldown(SPELL_DIVINE_STORM))
- caster->RemoveSpellCooldown(SPELL_DIVINE_STORM, true);
- }
-
- void Register() OVERRIDE
- {
- OnEffectHitTarget += SpellEffectFn(spell_gen_divine_storm_cd_reset_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_DUMMY);
- }
- };
-
- SpellScript* GetSpellScript() const OVERRIDE
- {
- return new spell_gen_divine_storm_cd_reset_SpellScript();
- }
-};
-
-class spell_gen_gunship_portal : public SpellScriptLoader
-{
- public:
- spell_gen_gunship_portal() : SpellScriptLoader("spell_gen_gunship_portal") { }
-
- class spell_gen_gunship_portal_SpellScript : public SpellScript
- {
- PrepareSpellScript(spell_gen_gunship_portal_SpellScript);
-
- bool Load() OVERRIDE
+ SpellCastResult CheckIfCorpseNear()
{
- return GetCaster()->GetTypeId() == TYPEID_PLAYER;
+ Unit* caster = GetCaster();
+ float max_range = GetSpellInfo()->GetMaxRange(false);
+ WorldObject* result = NULL;
+ // search for nearby enemy corpse in range
+ Trinity::AnyDeadUnitSpellTargetInRangeCheck check(caster, max_range, GetSpellInfo(), TARGET_CHECK_ENEMY);
+ Trinity::WorldObjectSearcher<Trinity::AnyDeadUnitSpellTargetInRangeCheck> searcher(caster, result, check);
+ caster->GetMap()->VisitFirstFound(caster->m_positionX, caster->m_positionY, max_range, searcher);
+ if (!result)
+ return SPELL_FAILED_NO_EDIBLE_CORPSES;
+ return SPELL_CAST_OK;
}
- void HandleScript(SpellEffIndex /*effIndex*/)
+ void HandleDummy(SpellEffIndex /*effIndex*/)
{
- Player* caster = GetCaster()->ToPlayer();
- if (Battleground* bg = caster->GetBattleground())
- if (bg->GetTypeID(true) == BATTLEGROUND_IC)
- bg->DoAction(1, caster->GetGUID());
+ GetCaster()->CastSpell(GetCaster(), SPELL_CANNIBALIZE_TRIGGERED, false);
}
void Register() OVERRIDE
{
- OnEffectHitTarget += SpellEffectFn(spell_gen_gunship_portal_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
+ OnEffectHit += SpellEffectFn(spell_gen_cannibalize_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
+ OnCheckCast += SpellCheckCastFn(spell_gen_cannibalize_SpellScript::CheckIfCorpseNear);
}
};
SpellScript* GetSpellScript() const OVERRIDE
{
- return new spell_gen_gunship_portal_SpellScript();
+ return new spell_gen_cannibalize_SpellScript();
}
};
-enum parachuteIC
-{
- SPELL_PARACHUTE_IC = 66657,
-};
-
-class spell_gen_parachute_ic : public SpellScriptLoader
+enum ChaosBlast
{
- public:
- spell_gen_parachute_ic() : SpellScriptLoader("spell_gen_parachute_ic") { }
-
- class spell_gen_parachute_ic_AuraScript : public AuraScript
- {
- PrepareAuraScript(spell_gen_parachute_ic_AuraScript)
-
- void HandleTriggerSpell(AuraEffect const* /*aurEff*/)
- {
- if (Player* target = GetTarget()->ToPlayer())
- if (target->m_movementInfo.fallTime > 2000)
- target->CastSpell(target, SPELL_PARACHUTE_IC, true);
- }
-
- void Register() OVERRIDE
- {
- OnEffectPeriodic += AuraEffectPeriodicFn(spell_gen_parachute_ic_AuraScript::HandleTriggerSpell, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL);
- }
- };
-
- AuraScript* GetAuraScript() const OVERRIDE
- {
- return new spell_gen_parachute_ic_AuraScript();
- }
+ SPELL_CHAOS_BLAST = 37675
};
-class spell_gen_dungeon_credit : public SpellScriptLoader
+class spell_gen_chaos_blast : public SpellScriptLoader
{
public:
- spell_gen_dungeon_credit() : SpellScriptLoader("spell_gen_dungeon_credit") { }
+ spell_gen_chaos_blast() : SpellScriptLoader("spell_gen_chaos_blast") { }
- class spell_gen_dungeon_credit_SpellScript : public SpellScript
+ class spell_gen_chaos_blast_SpellScript : public SpellScript
{
- PrepareSpellScript(spell_gen_dungeon_credit_SpellScript);
+ PrepareSpellScript(spell_gen_chaos_blast_SpellScript)
- bool Load() OVERRIDE
+ bool Validate(SpellInfo const* /*SpellEntry*/) OVERRIDE
{
- _handled = false;
- return GetCaster()->GetTypeId() == TYPEID_UNIT;
+ if (!sSpellMgr->GetSpellInfo(SPELL_CHAOS_BLAST))
+ return false;
+ return true;
}
-
- void CreditEncounter()
+ void HandleDummy(SpellEffIndex /* effIndex */)
{
- // This hook is executed for every target, make sure we only credit instance once
- if (_handled)
- return;
-
- _handled = true;
+ int32 basepoints0 = 100;
Unit* caster = GetCaster();
- if (InstanceScript* instance = caster->GetInstanceScript())
- instance->UpdateEncounterState(ENCOUNTER_CREDIT_CAST_SPELL, GetSpellInfo()->Id, caster);
- }
-
- void Register() OVERRIDE
- {
- AfterHit += SpellHitFn(spell_gen_dungeon_credit_SpellScript::CreditEncounter);
- }
-
- bool _handled;
- };
-
- SpellScript* GetSpellScript() const OVERRIDE
- {
- return new spell_gen_dungeon_credit_SpellScript();
- }
-};
-
-class spell_gen_profession_research : public SpellScriptLoader
-{
- public:
- spell_gen_profession_research() : SpellScriptLoader("spell_gen_profession_research") {}
-
- class spell_gen_profession_research_SpellScript : public SpellScript
- {
- PrepareSpellScript(spell_gen_profession_research_SpellScript);
-
- bool Load() OVERRIDE
- {
- return GetCaster()->GetTypeId() == TYPEID_PLAYER;
- }
-
- SpellCastResult CheckRequirement()
- {
- if (HasDiscoveredAllSpells(GetSpellInfo()->Id, GetCaster()->ToPlayer()))
- {
- SetCustomCastResultMessage(SPELL_CUSTOM_ERROR_NOTHING_TO_DISCOVER);
- return SPELL_FAILED_CUSTOM_ERROR;
- }
-
- return SPELL_CAST_OK;
- }
-
- void HandleScript(SpellEffIndex /*effIndex*/)
- {
- Player* caster = GetCaster()->ToPlayer();
- uint32 spellId = GetSpellInfo()->Id;
-
- // learn random explicit discovery recipe (if any)
- if (uint32 discoveredSpellId = GetExplicitDiscoverySpell(spellId, caster))
- caster->learnSpell(discoveredSpellId, false);
-
- caster->UpdateCraftSkill(spellId);
+ if (Unit* target = GetHitUnit())
+ caster->CastCustomSpell(target, SPELL_CHAOS_BLAST, &basepoints0, NULL, NULL, true);
}
void Register() OVERRIDE
{
- OnCheckCast += SpellCheckCastFn(spell_gen_profession_research_SpellScript::CheckRequirement);
- OnEffectHitTarget += SpellEffectFn(spell_gen_profession_research_SpellScript::HandleScript, EFFECT_1, SPELL_EFFECT_SCRIPT_EFFECT);
+ OnEffectHitTarget += SpellEffectFn(spell_gen_chaos_blast_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
SpellScript* GetSpellScript() const OVERRIDE
{
- return new spell_gen_profession_research_SpellScript();
+ return new spell_gen_chaos_blast_SpellScript();
}
};
-class spell_generic_clone : public SpellScriptLoader
+class spell_gen_clone : public SpellScriptLoader
{
public:
- spell_generic_clone() : SpellScriptLoader("spell_generic_clone") { }
+ spell_gen_clone() : SpellScriptLoader("spell_gen_clone") { }
- class spell_generic_clone_SpellScript : public SpellScript
+ class spell_gen_clone_SpellScript : public SpellScript
{
- PrepareSpellScript(spell_generic_clone_SpellScript);
+ PrepareSpellScript(spell_gen_clone_SpellScript);
void HandleScriptEffect(SpellEffIndex effIndex)
{
PreventHitDefaultEffect(effIndex);
- uint32 spellId = uint32(GetSpellInfo()->Effects[effIndex].CalcValue());
- GetHitUnit()->CastSpell(GetCaster(), spellId, true);
+ GetHitUnit()->CastSpell(GetCaster(), GetEffectValue(), true);
}
void Register() OVERRIDE
{
- OnEffectHitTarget += SpellEffectFn(spell_generic_clone_SpellScript::HandleScriptEffect, EFFECT_1, SPELL_EFFECT_SCRIPT_EFFECT);
- OnEffectHitTarget += SpellEffectFn(spell_generic_clone_SpellScript::HandleScriptEffect, EFFECT_2, SPELL_EFFECT_SCRIPT_EFFECT);
+ OnEffectHitTarget += SpellEffectFn(spell_gen_clone_SpellScript::HandleScriptEffect, EFFECT_1, SPELL_EFFECT_SCRIPT_EFFECT);
+ OnEffectHitTarget += SpellEffectFn(spell_gen_clone_SpellScript::HandleScriptEffect, EFFECT_2, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
SpellScript* GetSpellScript() const OVERRIDE
{
- return new spell_generic_clone_SpellScript();
+ return new spell_gen_clone_SpellScript();
}
};
@@ -1134,14 +738,14 @@ enum CloneWeaponSpells
SPELL_COPY_RANGED_AURA = 57594
};
-class spell_generic_clone_weapon : public SpellScriptLoader
+class spell_gen_clone_weapon : public SpellScriptLoader
{
public:
- spell_generic_clone_weapon() : SpellScriptLoader("spell_generic_clone_weapon") { }
+ spell_gen_clone_weapon() : SpellScriptLoader("spell_gen_clone_weapon") { }
- class spell_generic_clone_weapon_SpellScript : public SpellScript
+ class spell_gen_clone_weapon_SpellScript : public SpellScript
{
- PrepareSpellScript(spell_generic_clone_weapon_SpellScript);
+ PrepareSpellScript(spell_gen_clone_weapon_SpellScript);
void HandleScriptEffect(SpellEffIndex effIndex)
{
@@ -1149,22 +753,18 @@ class spell_generic_clone_weapon : public SpellScriptLoader
Unit* caster = GetCaster();
if (Unit* target = GetHitUnit())
- {
-
- uint32 spellId = uint32(GetSpellInfo()->Effects[EFFECT_0].CalcValue());
- caster->CastSpell(target, spellId, true);
- }
+ caster->CastSpell(target, GetEffectValue(), true);
}
void Register() OVERRIDE
{
- OnEffectHitTarget += SpellEffectFn(spell_generic_clone_weapon_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
+ OnEffectHitTarget += SpellEffectFn(spell_gen_clone_weapon_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
SpellScript* GetSpellScript() const OVERRIDE
{
- return new spell_generic_clone_weapon_SpellScript();
+ return new spell_gen_clone_weapon_SpellScript();
}
};
@@ -1181,8 +781,12 @@ class spell_gen_clone_weapon_aura : public SpellScriptLoader
bool Validate(SpellInfo const* /*spellEntry*/) OVERRIDE
{
- if (!sSpellMgr->GetSpellInfo(SPELL_COPY_WEAPON_AURA) || !sSpellMgr->GetSpellInfo(SPELL_COPY_WEAPON_2_AURA) || !sSpellMgr->GetSpellInfo(SPELL_COPY_WEAPON_3_AURA)
- || !sSpellMgr->GetSpellInfo(SPELL_COPY_OFFHAND_AURA) || !sSpellMgr->GetSpellInfo(SPELL_COPY_OFFHAND_2_AURA) || !sSpellMgr->GetSpellInfo(SPELL_COPY_RANGED_AURA))
+ if (!sSpellMgr->GetSpellInfo(SPELL_COPY_WEAPON_AURA) ||
+ !sSpellMgr->GetSpellInfo(SPELL_COPY_WEAPON_2_AURA) ||
+ !sSpellMgr->GetSpellInfo(SPELL_COPY_WEAPON_3_AURA) ||
+ !sSpellMgr->GetSpellInfo(SPELL_COPY_OFFHAND_AURA) ||
+ !sSpellMgr->GetSpellInfo(SPELL_COPY_OFFHAND_2_AURA) ||
+ !sSpellMgr->GetSpellInfo(SPELL_COPY_RANGED_AURA))
return false;
return true;
}
@@ -1191,7 +795,6 @@ class spell_gen_clone_weapon_aura : public SpellScriptLoader
{
Unit* caster = GetCaster();
Unit* target = GetTarget();
-
if (!caster)
return;
@@ -1253,21 +856,15 @@ class spell_gen_clone_weapon_aura : public SpellScriptLoader
case SPELL_COPY_WEAPON_AURA:
case SPELL_COPY_WEAPON_2_AURA:
case SPELL_COPY_WEAPON_3_AURA:
- {
target->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID, prevItem);
break;
- }
case SPELL_COPY_OFFHAND_AURA:
case SPELL_COPY_OFFHAND_2_AURA:
- {
target->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 1, prevItem);
break;
- }
case SPELL_COPY_RANGED_AURA:
- {
target->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 2, prevItem);
break;
- }
default:
break;
}
@@ -1287,430 +884,489 @@ class spell_gen_clone_weapon_aura : public SpellScriptLoader
}
};
-enum SeaforiumSpells
-{
- SPELL_PLANT_CHARGES_CREDIT_ACHIEVEMENT = 60937,
-};
-
-class spell_gen_seaforium_blast : public SpellScriptLoader
+class spell_gen_count_pct_from_max_hp : public SpellScriptLoader
{
public:
- spell_gen_seaforium_blast() : SpellScriptLoader("spell_gen_seaforium_blast") {}
+ spell_gen_count_pct_from_max_hp(char const* name, int32 damagePct = 0) : SpellScriptLoader(name), _damagePct(damagePct) { }
- class spell_gen_seaforium_blast_SpellScript : public SpellScript
+ class spell_gen_count_pct_from_max_hp_SpellScript : public SpellScript
{
- PrepareSpellScript(spell_gen_seaforium_blast_SpellScript);
+ PrepareSpellScript(spell_gen_count_pct_from_max_hp_SpellScript)
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
- {
- if (!sSpellMgr->GetSpellInfo(SPELL_PLANT_CHARGES_CREDIT_ACHIEVEMENT))
- return false;
- return true;
- }
+ public:
+ spell_gen_count_pct_from_max_hp_SpellScript(int32 damagePct) : SpellScript(), _damagePct(damagePct) { }
- bool Load() OVERRIDE
+ void RecalculateDamage()
{
- // OriginalCaster is always available in Spell::prepare
- return GetOriginalCaster()->GetTypeId() == TYPEID_PLAYER;
- }
+ if (!_damagePct)
+ _damagePct = GetHitDamage();
- void AchievementCredit(SpellEffIndex /*effIndex*/)
- {
- // but in effect handling OriginalCaster can become NULL
- if (Unit* originalCaster = GetOriginalCaster())
- if (GameObject* go = GetHitGObj())
- if (go->GetGOInfo()->type == GAMEOBJECT_TYPE_DESTRUCTIBLE_BUILDING)
- originalCaster->CastSpell(originalCaster, SPELL_PLANT_CHARGES_CREDIT_ACHIEVEMENT, true);
+ SetHitDamage(GetHitUnit()->CountPctFromMaxHealth(_damagePct));
}
void Register() OVERRIDE
{
- OnEffectHitTarget += SpellEffectFn(spell_gen_seaforium_blast_SpellScript::AchievementCredit, EFFECT_1, SPELL_EFFECT_GAMEOBJECT_DAMAGE);
+ OnHit += SpellHitFn(spell_gen_count_pct_from_max_hp_SpellScript::RecalculateDamage);
}
+
+ private:
+ int32 _damagePct;
};
SpellScript* GetSpellScript() const OVERRIDE
{
- return new spell_gen_seaforium_blast_SpellScript();
+ return new spell_gen_count_pct_from_max_hp_SpellScript(_damagePct);
}
+
+ private:
+ int32 _damagePct;
};
-enum FriendOrFowl
+// 63845 - Create Lance
+enum CreateLanceSpells
{
- SPELL_TURKEY_VENGEANCE = 25285,
+ SPELL_CREATE_LANCE_ALLIANCE = 63914,
+ SPELL_CREATE_LANCE_HORDE = 63919
};
-class spell_gen_turkey_marker : public SpellScriptLoader
+class spell_gen_create_lance : public SpellScriptLoader
{
public:
- spell_gen_turkey_marker() : SpellScriptLoader("spell_gen_turkey_marker") { }
+ spell_gen_create_lance() : SpellScriptLoader("spell_gen_create_lance") { }
- class spell_gen_turkey_marker_AuraScript : public AuraScript
+ class spell_gen_create_lance_SpellScript : public SpellScript
{
- PrepareAuraScript(spell_gen_turkey_marker_AuraScript);
+ PrepareSpellScript(spell_gen_create_lance_SpellScript);
- void OnApply(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
+ bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
{
- // store stack apply times, so we can pop them while they expire
- _applyTimes.push_back(getMSTime());
- Unit* target = GetTarget();
-
- // on stack 15 cast the achievement crediting spell
- if (GetStackAmount() >= 15)
- target->CastSpell(target, SPELL_TURKEY_VENGEANCE, true, NULL, aurEff, GetCasterGUID());
+ if (!sSpellMgr->GetSpellInfo(SPELL_CREATE_LANCE_ALLIANCE) ||
+ !sSpellMgr->GetSpellInfo(SPELL_CREATE_LANCE_HORDE))
+ return false;
+ return true;
}
- void OnPeriodic(AuraEffect const* /*aurEff*/)
+ void HandleScript(SpellEffIndex effIndex)
{
- if (_applyTimes.empty())
- return;
+ PreventHitDefaultEffect(effIndex);
- // pop stack if it expired for us
- if (_applyTimes.front() + GetMaxDuration() < getMSTime())
- ModStackAmount(-1, AURA_REMOVE_BY_EXPIRE);
+ if (Player* target = GetHitPlayer())
+ {
+ if (target->GetTeam() == ALLIANCE)
+ GetCaster()->CastSpell(target, SPELL_CREATE_LANCE_ALLIANCE, true);
+ else
+ GetCaster()->CastSpell(target, SPELL_CREATE_LANCE_HORDE, true);
+ }
}
void Register() OVERRIDE
{
- AfterEffectApply += AuraEffectApplyFn(spell_gen_turkey_marker_AuraScript::OnApply, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY, AURA_EFFECT_HANDLE_REAL);
- OnEffectPeriodic += AuraEffectPeriodicFn(spell_gen_turkey_marker_AuraScript::OnPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY);
+ OnEffectHitTarget += SpellEffectFn(spell_gen_create_lance_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
-
- std::list<uint32> _applyTimes;
};
- AuraScript* GetAuraScript() const OVERRIDE
+ SpellScript* GetSpellScript() const OVERRIDE
{
- return new spell_gen_turkey_marker_AuraScript();
+ return new spell_gen_create_lance_SpellScript();
}
};
-class spell_gen_lifeblood : public SpellScriptLoader
+class spell_gen_creature_permanent_feign_death : public SpellScriptLoader
{
public:
- spell_gen_lifeblood() : SpellScriptLoader("spell_gen_lifeblood") { }
+ spell_gen_creature_permanent_feign_death() : SpellScriptLoader("spell_gen_creature_permanent_feign_death") { }
- class spell_gen_lifeblood_AuraScript : public AuraScript
+ class spell_gen_creature_permanent_feign_death_AuraScript : public AuraScript
{
- PrepareAuraScript(spell_gen_lifeblood_AuraScript);
+ PrepareAuraScript(spell_gen_creature_permanent_feign_death_AuraScript);
- void CalculateAmount(AuraEffect const* aurEff, int32& amount, bool& /*canBeRecalculated*/)
+ void HandleEffectApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
- if (Unit* owner = GetUnitOwner())
- amount += int32(CalculatePct(owner->GetMaxHealth(), 1.5f / aurEff->GetTotalTicks()));
+ Unit* target = GetTarget();
+ target->SetFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_DEAD);
+ target->SetFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FEIGN_DEATH);
+
+ if (target->GetTypeId() == TYPEID_UNIT)
+ target->ToCreature()->SetReactState(REACT_PASSIVE);
}
void Register() OVERRIDE
{
- DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_gen_lifeblood_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_PERIODIC_HEAL);
+ OnEffectApply += AuraEffectApplyFn(spell_gen_creature_permanent_feign_death_AuraScript::HandleEffectApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
}
};
AuraScript* GetAuraScript() const OVERRIDE
{
- return new spell_gen_lifeblood_AuraScript();
+ return new spell_gen_creature_permanent_feign_death_AuraScript();
}
};
-enum MagicRoosterSpells
+enum DalaranDisguiseSpells
{
- SPELL_MAGIC_ROOSTER_NORMAL = 66122,
- SPELL_MAGIC_ROOSTER_DRAENEI_MALE = 66123,
- SPELL_MAGIC_ROOSTER_TAUREN_MALE = 66124,
+ SPELL_SUNREAVER_DISGUISE_TRIGGER = 69672,
+ SPELL_SUNREAVER_DISGUISE_FEMALE = 70973,
+ SPELL_SUNREAVER_DISGUISE_MALE = 70974,
+
+ SPELL_SILVER_COVENANT_DISGUISE_TRIGGER = 69673,
+ SPELL_SILVER_COVENANT_DISGUISE_FEMALE = 70971,
+ SPELL_SILVER_COVENANT_DISGUISE_MALE = 70972
};
-class spell_gen_magic_rooster : public SpellScriptLoader
+class spell_gen_dalaran_disguise : public SpellScriptLoader
{
public:
- spell_gen_magic_rooster() : SpellScriptLoader("spell_gen_magic_rooster") { }
+ spell_gen_dalaran_disguise(const char* name) : SpellScriptLoader(name) { }
- class spell_gen_magic_rooster_SpellScript : public SpellScript
+ class spell_gen_dalaran_disguise_SpellScript : public SpellScript
{
- PrepareSpellScript(spell_gen_magic_rooster_SpellScript);
+ PrepareSpellScript(spell_gen_dalaran_disguise_SpellScript);
+ bool Validate(SpellInfo const* spellEntry) OVERRIDE
+ {
+ switch (spellEntry->Id)
+ {
+ case SPELL_SUNREAVER_DISGUISE_TRIGGER:
+ if (!sSpellMgr->GetSpellInfo(SPELL_SUNREAVER_DISGUISE_FEMALE) ||
+ !sSpellMgr->GetSpellInfo(SPELL_SUNREAVER_DISGUISE_MALE))
+ return false;
+ break;
+ case SPELL_SILVER_COVENANT_DISGUISE_TRIGGER:
+ if (!sSpellMgr->GetSpellInfo(SPELL_SILVER_COVENANT_DISGUISE_FEMALE) ||
+ !sSpellMgr->GetSpellInfo(SPELL_SILVER_COVENANT_DISGUISE_MALE))
+ return false;
+ break;
+ }
+ return true;
+ }
- void HandleScript(SpellEffIndex effIndex)
+ void HandleScript(SpellEffIndex /*effIndex*/)
{
- PreventHitDefaultEffect(effIndex);
- if (Player* target = GetHitPlayer())
+ if (Player* player = GetHitPlayer())
{
- // prevent client crashes from stacking mounts
- target->RemoveAurasByType(SPELL_AURA_MOUNTED);
+ uint8 gender = player->getGender();
- uint32 spellId = SPELL_MAGIC_ROOSTER_NORMAL;
- switch (target->getRace())
+ uint32 spellId = GetSpellInfo()->Id;
+
+ switch (spellId)
{
- case RACE_DRAENEI:
- if (target->getGender() == GENDER_MALE)
- spellId = SPELL_MAGIC_ROOSTER_DRAENEI_MALE;
+ case SPELL_SUNREAVER_DISGUISE_TRIGGER:
+ spellId = gender ? SPELL_SUNREAVER_DISGUISE_FEMALE : SPELL_SUNREAVER_DISGUISE_MALE;
break;
- case RACE_TAUREN:
- if (target->getGender() == GENDER_MALE)
- spellId = SPELL_MAGIC_ROOSTER_TAUREN_MALE;
+ case SPELL_SILVER_COVENANT_DISGUISE_TRIGGER:
+ spellId = gender ? SPELL_SILVER_COVENANT_DISGUISE_FEMALE : SPELL_SILVER_COVENANT_DISGUISE_MALE;
break;
default:
break;
}
- target->CastSpell(target, spellId, true);
+ GetCaster()->CastSpell(player, spellId, true);
}
}
void Register() OVERRIDE
{
- OnEffectHitTarget += SpellEffectFn(spell_gen_magic_rooster_SpellScript::HandleScript, EFFECT_2, SPELL_EFFECT_SCRIPT_EFFECT);
+ OnEffectHitTarget += SpellEffectFn(spell_gen_dalaran_disguise_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
SpellScript* GetSpellScript() const OVERRIDE
{
- return new spell_gen_magic_rooster_SpellScript();
+ return new spell_gen_dalaran_disguise_SpellScript();
}
};
-class spell_gen_allow_cast_from_item_only : public SpellScriptLoader
+enum DamageReductionAura
+{
+ SPELL_BLESSING_OF_SANCTUARY = 20911,
+ SPELL_GREATER_BLESSING_OF_SANCTUARY = 25899,
+ SPELL_RENEWED_HOPE = 63944,
+ SPELL_VIGILANCE = 50720,
+ SPELL_DAMAGE_REDUCTION_AURA = 68066
+};
+
+class spell_gen_damage_reduction_aura : public SpellScriptLoader
{
public:
- spell_gen_allow_cast_from_item_only() : SpellScriptLoader("spell_gen_allow_cast_from_item_only") { }
+ spell_gen_damage_reduction_aura() : SpellScriptLoader("spell_gen_damage_reduction_aura") { }
- class spell_gen_allow_cast_from_item_only_SpellScript : public SpellScript
+ class spell_gen_damage_reduction_AuraScript : public AuraScript
{
- PrepareSpellScript(spell_gen_allow_cast_from_item_only_SpellScript);
+ PrepareAuraScript(spell_gen_damage_reduction_AuraScript);
- SpellCastResult CheckRequirement()
+ bool Validate(SpellInfo const* /*SpellEntry*/) OVERRIDE
{
- if (!GetCastItem())
- return SPELL_FAILED_CANT_DO_THAT_RIGHT_NOW;
- return SPELL_CAST_OK;
+ if (!sSpellMgr->GetSpellInfo(SPELL_DAMAGE_REDUCTION_AURA))
+ return false;
+ return true;
+ }
+
+ void OnApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
+ {
+ Unit* target = GetTarget();
+ target->CastSpell(target, SPELL_DAMAGE_REDUCTION_AURA, true);
+ }
+
+ void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
+ {
+ Unit* target = GetTarget();
+ if (target->HasAura(SPELL_DAMAGE_REDUCTION_AURA) && !(target->HasAura(SPELL_BLESSING_OF_SANCTUARY) ||
+ target->HasAura(SPELL_GREATER_BLESSING_OF_SANCTUARY) ||
+ target->HasAura(SPELL_RENEWED_HOPE) ||
+ target->HasAura(SPELL_VIGILANCE)))
+ {
+ target->RemoveAurasDueToSpell(SPELL_DAMAGE_REDUCTION_AURA);
+ }
}
void Register() OVERRIDE
{
- OnCheckCast += SpellCheckCastFn(spell_gen_allow_cast_from_item_only_SpellScript::CheckRequirement);
+ OnEffectApply += AuraEffectApplyFn(spell_gen_damage_reduction_AuraScript::OnApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
+ OnEffectRemove += AuraEffectRemoveFn(spell_gen_damage_reduction_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
}
+
};
- SpellScript* GetSpellScript() const OVERRIDE
+ AuraScript* GetAuraScript() const OVERRIDE
{
- return new spell_gen_allow_cast_from_item_only_SpellScript();
+ return new spell_gen_damage_reduction_AuraScript();
}
};
-enum Launch
+enum DefendVisuals
{
- SPELL_LAUNCH_NO_FALLING_DAMAGE = 66251
+ SPELL_VISUAL_SHIELD_1 = 63130,
+ SPELL_VISUAL_SHIELD_2 = 63131,
+ SPELL_VISUAL_SHIELD_3 = 63132
};
-class spell_gen_launch : public SpellScriptLoader
+class spell_gen_defend : public SpellScriptLoader
{
public:
- spell_gen_launch() : SpellScriptLoader("spell_gen_launch") {}
+ spell_gen_defend() : SpellScriptLoader("spell_gen_defend") { }
- class spell_gen_launch_SpellScript : public SpellScript
+ class spell_gen_defend_AuraScript : public AuraScript
{
- PrepareSpellScript(spell_gen_launch_SpellScript);
+ PrepareAuraScript(spell_gen_defend_AuraScript);
- void HandleScript(SpellEffIndex /*effIndex*/)
+ bool Validate(SpellInfo const* /*spellEntry*/) OVERRIDE
{
- if (Player* player = GetHitPlayer())
- player->AddAura(SPELL_LAUNCH_NO_FALLING_DAMAGE, player); // prevents falling damage
+ if (!sSpellMgr->GetSpellInfo(SPELL_VISUAL_SHIELD_1))
+ return false;
+ if (!sSpellMgr->GetSpellInfo(SPELL_VISUAL_SHIELD_2))
+ return false;
+ if (!sSpellMgr->GetSpellInfo(SPELL_VISUAL_SHIELD_3))
+ return false;
+ return true;
}
- void Launch()
+ void RefreshVisualShields(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
{
- WorldLocation const* const position = GetExplTargetDest();
-
- if (Player* player = GetHitPlayer())
+ if (GetCaster())
{
- player->ExitVehicle();
-
- // A better research is needed
- // There is no spell for this, the following calculation was based on void Spell::CalculateJumpSpeeds
+ Unit* target = GetTarget();
- float speedZ = 10.0f;
- float dist = position->GetExactDist2d(player->GetPositionX(), player->GetPositionY());
- float speedXY = dist;
+ for (uint8 i = 0; i < GetSpellInfo()->StackAmount; ++i)
+ target->RemoveAurasDueToSpell(SPELL_VISUAL_SHIELD_1 + i);
- player->GetMotionMaster()->MoveJump(position->GetPositionX(), position->GetPositionY(), position->GetPositionZ(), speedXY, speedZ);
+ target->CastSpell(target, SPELL_VISUAL_SHIELD_1 + GetAura()->GetStackAmount() - 1, true, NULL, aurEff);
}
+ else
+ GetTarget()->RemoveAurasDueToSpell(GetId());
+ }
+
+ void RemoveVisualShields(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
+ {
+ for (uint8 i = 0; i < GetSpellInfo()->StackAmount; ++i)
+ GetTarget()->RemoveAurasDueToSpell(SPELL_VISUAL_SHIELD_1 + i);
+ }
+
+ void RemoveDummyFromDriver(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
+ {
+ if (Unit* caster = GetCaster())
+ if (TempSummon* vehicle = caster->ToTempSummon())
+ if (Unit* rider = vehicle->GetSummoner())
+ rider->RemoveAurasDueToSpell(GetId());
}
void Register() OVERRIDE
{
- OnEffectHitTarget += SpellEffectFn(spell_gen_launch_SpellScript::HandleScript, EFFECT_1, SPELL_EFFECT_FORCE_CAST);
- AfterHit += SpellHitFn(spell_gen_launch_SpellScript::Launch);
+ SpellInfo const* spell = sSpellMgr->GetSpellInfo(m_scriptSpellId);
+
+ // Defend spells casted by NPCs (add visuals)
+ if (spell->Effects[EFFECT_0].ApplyAuraName == SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN)
+ {
+ AfterEffectApply += AuraEffectApplyFn(spell_gen_defend_AuraScript::RefreshVisualShields, EFFECT_0, SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
+ OnEffectRemove += AuraEffectRemoveFn(spell_gen_defend_AuraScript::RemoveVisualShields, EFFECT_0, SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN, AURA_EFFECT_HANDLE_CHANGE_AMOUNT_MASK);
+ }
+
+ // Remove Defend spell from player when he dismounts
+ if (spell->Effects[EFFECT_2].ApplyAuraName == SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN)
+ OnEffectRemove += AuraEffectRemoveFn(spell_gen_defend_AuraScript::RemoveDummyFromDriver, EFFECT_2, SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN, AURA_EFFECT_HANDLE_REAL);
+
+ // Defend spells casted by players (add/remove visuals)
+ if (spell->Effects[EFFECT_1].ApplyAuraName == SPELL_AURA_DUMMY)
+ {
+ AfterEffectApply += AuraEffectApplyFn(spell_gen_defend_AuraScript::RefreshVisualShields, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
+ OnEffectRemove += AuraEffectRemoveFn(spell_gen_defend_AuraScript::RemoveVisualShields, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_CHANGE_AMOUNT_MASK);
+ }
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ AuraScript* GetAuraScript() const OVERRIDE
{
- return new spell_gen_launch_SpellScript();
+ return new spell_gen_defend_AuraScript();
}
};
-enum VehicleScaling
-{
- SPELL_GEAR_SCALING = 66668,
-};
-
-class spell_gen_vehicle_scaling : public SpellScriptLoader
+class spell_gen_despawn_self : public SpellScriptLoader
{
public:
- spell_gen_vehicle_scaling() : SpellScriptLoader("spell_gen_vehicle_scaling") { }
+ spell_gen_despawn_self() : SpellScriptLoader("spell_gen_despawn_self") { }
- class spell_gen_vehicle_scaling_AuraScript : public AuraScript
+ class spell_gen_despawn_self_SpellScript : public SpellScript
{
- PrepareAuraScript(spell_gen_vehicle_scaling_AuraScript);
+ PrepareSpellScript(spell_gen_despawn_self_SpellScript);
bool Load() OVERRIDE
{
- return GetCaster() && GetCaster()->GetTypeId() == TYPEID_PLAYER;
+ return GetCaster()->GetTypeId() == TYPEID_UNIT;
}
- void CalculateAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/)
+ void HandleDummy(SpellEffIndex effIndex)
{
- Unit* caster = GetCaster();
- float factor;
- uint16 baseItemLevel;
-
- /// @todo Reserach coeffs for different vehicles
- switch (GetId())
- {
- case SPELL_GEAR_SCALING:
- factor = 1.0f;
- baseItemLevel = 205;
- break;
- default:
- factor = 1.0f;
- baseItemLevel = 170;
- break;
- }
-
- float avgILvl = caster->ToPlayer()->GetAverageItemLevel();
- if (avgILvl < baseItemLevel)
- return; /// @todo Research possibility of scaling down
-
- amount = uint16((avgILvl - baseItemLevel) * factor);
+ if (GetSpellInfo()->Effects[effIndex].Effect == SPELL_EFFECT_DUMMY || GetSpellInfo()->Effects[effIndex].Effect == SPELL_EFFECT_SCRIPT_EFFECT)
+ GetCaster()->ToCreature()->DespawnOrUnsummon();
}
void Register() OVERRIDE
{
- DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_gen_vehicle_scaling_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_MOD_HEALING_PCT);
- DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_gen_vehicle_scaling_AuraScript::CalculateAmount, EFFECT_1, SPELL_AURA_MOD_DAMAGE_PERCENT_DONE);
- DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_gen_vehicle_scaling_AuraScript::CalculateAmount, EFFECT_2, SPELL_AURA_MOD_INCREASE_HEALTH_PERCENT);
+ OnEffectHitTarget += SpellEffectFn(spell_gen_despawn_self_SpellScript::HandleDummy, EFFECT_ALL, SPELL_EFFECT_ANY);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ SpellScript* GetSpellScript() const OVERRIDE
{
- return new spell_gen_vehicle_scaling_AuraScript();
+ return new spell_gen_despawn_self_SpellScript();
}
};
+enum DivineStormSpell
+{
+ SPELL_DIVINE_STORM = 53385,
+};
-class spell_gen_oracle_wolvar_reputation : public SpellScriptLoader
+// 70769 Divine Storm!
+class spell_gen_divine_storm_cd_reset : public SpellScriptLoader
{
public:
- spell_gen_oracle_wolvar_reputation() : SpellScriptLoader("spell_gen_oracle_wolvar_reputation") { }
+ spell_gen_divine_storm_cd_reset() : SpellScriptLoader("spell_gen_divine_storm_cd_reset") { }
- class spell_gen_oracle_wolvar_reputation_SpellScript : public SpellScript
+ class spell_gen_divine_storm_cd_reset_SpellScript : public SpellScript
{
- PrepareSpellScript(spell_gen_oracle_wolvar_reputation_SpellScript);
+ PrepareSpellScript(spell_gen_divine_storm_cd_reset_SpellScript);
bool Load() OVERRIDE
{
return GetCaster()->GetTypeId() == TYPEID_PLAYER;
}
- void HandleDummy(SpellEffIndex effIndex)
+ bool Validate(SpellInfo const* /*spellEntry*/) OVERRIDE
{
- Player* player = GetCaster()->ToPlayer();
- uint32 factionId = GetSpellInfo()->Effects[effIndex].CalcValue();
- int32 repChange = GetSpellInfo()->Effects[EFFECT_1].CalcValue();
-
- FactionEntry const* factionEntry = sFactionStore.LookupEntry(factionId);
-
- if (!factionEntry)
- return;
-
- // Set rep to baserep + basepoints (expecting spillover for oposite faction -> become hated)
- // Not when player already has equal or higher rep with this faction
- if (player->GetReputationMgr().GetBaseReputation(factionEntry) < repChange)
- player->GetReputationMgr().SetReputation(factionEntry, repChange);
+ if (!sSpellMgr->GetSpellInfo(SPELL_DIVINE_STORM))
+ return false;
+ return true;
+ }
- // EFFECT_INDEX_2 most likely update at war state, we already handle this in SetReputation
+ void HandleScript(SpellEffIndex /*effIndex*/)
+ {
+ Player* caster = GetCaster()->ToPlayer();
+ if (caster->HasSpellCooldown(SPELL_DIVINE_STORM))
+ caster->RemoveSpellCooldown(SPELL_DIVINE_STORM, true);
}
void Register() OVERRIDE
{
- OnEffectHit += SpellEffectFn(spell_gen_oracle_wolvar_reputation_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
+ OnEffectHitTarget += SpellEffectFn(spell_gen_divine_storm_cd_reset_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
SpellScript* GetSpellScript() const OVERRIDE
{
- return new spell_gen_oracle_wolvar_reputation_SpellScript();
+ return new spell_gen_divine_storm_cd_reset_SpellScript();
}
};
-enum DamageReductionAura
-{
- SPELL_BLESSING_OF_SANCTUARY = 20911,
- SPELL_GREATER_BLESSING_OF_SANCTUARY = 25899,
- SPELL_RENEWED_HOPE = 63944,
- SPELL_VIGILANCE = 50720,
- SPELL_DAMAGE_REDUCTION_AURA = 68066,
-};
-
-class spell_gen_damage_reduction_aura : public SpellScriptLoader
+class spell_gen_dream_funnel: public SpellScriptLoader
{
public:
- spell_gen_damage_reduction_aura() : SpellScriptLoader("spell_gen_damage_reduction_aura") { }
+ spell_gen_dream_funnel() : SpellScriptLoader("spell_gen_dream_funnel") { }
- class spell_gen_damage_reduction_AuraScript : public AuraScript
+ class spell_gen_dream_funnel_AuraScript : public AuraScript
{
- PrepareAuraScript(spell_gen_damage_reduction_AuraScript);
+ PrepareAuraScript(spell_gen_dream_funnel_AuraScript);
- bool Validate(SpellInfo const* /*SpellEntry*/) OVERRIDE
+ void HandleEffectCalcAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& canBeRecalculated)
{
- if (!sSpellMgr->GetSpellInfo(SPELL_DAMAGE_REDUCTION_AURA))
- return false;
- return true;
+ if (GetCaster())
+ amount = GetCaster()->GetMaxHealth() * 0.05f;
+
+ canBeRecalculated = false;
}
- void OnApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
+ void Register() OVERRIDE
{
- Unit* target = GetTarget();
- target->CastSpell(target, SPELL_DAMAGE_REDUCTION_AURA, true);
+ DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_gen_dream_funnel_AuraScript::HandleEffectCalcAmount, EFFECT_0, SPELL_AURA_PERIODIC_HEAL);
+ DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_gen_dream_funnel_AuraScript::HandleEffectCalcAmount, EFFECT_2, SPELL_AURA_PERIODIC_DAMAGE);
}
+ };
- void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
+ AuraScript* GetAuraScript() const OVERRIDE
+ {
+ return new spell_gen_dream_funnel_AuraScript();
+ }
+};
+
+class spell_gen_ds_flush_knockback : public SpellScriptLoader
+{
+ public:
+ spell_gen_ds_flush_knockback() : SpellScriptLoader("spell_gen_ds_flush_knockback") { }
+
+ class spell_gen_ds_flush_knockback_SpellScript : public SpellScript
+ {
+ PrepareSpellScript(spell_gen_ds_flush_knockback_SpellScript);
+
+ void HandleScript(SpellEffIndex /*effIndex*/)
{
- Unit* target = GetTarget();
- if (target->HasAura(SPELL_DAMAGE_REDUCTION_AURA) && !(target->HasAura(SPELL_BLESSING_OF_SANCTUARY) ||
- target->HasAura(SPELL_GREATER_BLESSING_OF_SANCTUARY) ||
- target->HasAura(SPELL_RENEWED_HOPE) ||
- target->HasAura(SPELL_VIGILANCE)))
- target->RemoveAurasDueToSpell(SPELL_DAMAGE_REDUCTION_AURA);
+ // Here the target is the water spout and determines the position where the player is knocked from
+ if (Unit* target = GetHitUnit())
+ {
+ if (Player* player = GetCaster()->ToPlayer())
+ {
+ float horizontalSpeed = 20.0f + (40.0f - GetCaster()->GetDistance(target));
+ float verticalSpeed = 8.0f;
+ // This method relies on the Dalaran Sewer map disposition and Water Spout position
+ // What we do is knock the player from a position exactly behind him and at the end of the pipe
+ player->KnockbackFrom(target->GetPositionX(), player->GetPositionY(), horizontalSpeed, verticalSpeed);
+ }
+ }
}
void Register() OVERRIDE
{
- OnEffectApply += AuraEffectApplyFn(spell_gen_damage_reduction_AuraScript::OnApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
- OnEffectRemove += AuraEffectRemoveFn(spell_gen_damage_reduction_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
+ OnEffectHitTarget += SpellEffectFn(spell_gen_ds_flush_knockback_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_DUMMY);
}
-
};
- AuraScript* GetAuraScript() const OVERRIDE
+ SpellScript* GetSpellScript() const OVERRIDE
{
- return new spell_gen_damage_reduction_AuraScript();
+ return new spell_gen_ds_flush_knockback_SpellScript();
}
};
enum DummyTrigger
{
SPELL_PERSISTANT_SHIELD_TRIGGERED = 26470,
- SPELL_PERSISTANT_SHIELD = 26467,
+ SPELL_PERSISTANT_SHIELD = 26467
};
class spell_gen_dummy_trigger : public SpellScriptLoader
@@ -1724,7 +1380,8 @@ class spell_gen_dummy_trigger : public SpellScriptLoader
bool Validate(SpellInfo const* /*SpellEntry*/) OVERRIDE
{
- if (!sSpellMgr->GetSpellInfo(SPELL_PERSISTANT_SHIELD_TRIGGERED) || !sSpellMgr->GetSpellInfo(SPELL_PERSISTANT_SHIELD))
+ if (!sSpellMgr->GetSpellInfo(SPELL_PERSISTANT_SHIELD_TRIGGERED) ||
+ !sSpellMgr->GetSpellInfo(SPELL_PERSISTANT_SHIELD))
return false;
return true;
}
@@ -1749,43 +1406,119 @@ class spell_gen_dummy_trigger : public SpellScriptLoader
{
return new spell_gen_dummy_trigger_SpellScript();
}
-
};
-class spell_gen_spirit_healer_res : public SpellScriptLoader
+class spell_gen_dungeon_credit : public SpellScriptLoader
{
public:
- spell_gen_spirit_healer_res(): SpellScriptLoader("spell_gen_spirit_healer_res") { }
+ spell_gen_dungeon_credit() : SpellScriptLoader("spell_gen_dungeon_credit") { }
- class spell_gen_spirit_healer_res_SpellScript : public SpellScript
+ class spell_gen_dungeon_credit_SpellScript : public SpellScript
{
- PrepareSpellScript(spell_gen_spirit_healer_res_SpellScript);
+ PrepareSpellScript(spell_gen_dungeon_credit_SpellScript);
bool Load() OVERRIDE
{
- return GetOriginalCaster() && GetOriginalCaster()->GetTypeId() == TYPEID_PLAYER;
+ _handled = false;
+ return GetCaster()->GetTypeId() == TYPEID_UNIT;
}
- void HandleDummy(SpellEffIndex /* effIndex */)
+ void CreditEncounter()
{
- Player* originalCaster = GetOriginalCaster()->ToPlayer();
- if (Unit* target = GetHitUnit())
+ // This hook is executed for every target, make sure we only credit instance once
+ if (_handled)
+ return;
+
+ _handled = true;
+ Unit* caster = GetCaster();
+ if (InstanceScript* instance = caster->GetInstanceScript())
+ instance->UpdateEncounterState(ENCOUNTER_CREDIT_CAST_SPELL, GetSpellInfo()->Id, caster);
+ }
+
+ void Register() OVERRIDE
+ {
+ AfterHit += SpellHitFn(spell_gen_dungeon_credit_SpellScript::CreditEncounter);
+ }
+
+ private:
+ bool _handled;
+ };
+
+ SpellScript* GetSpellScript() const OVERRIDE
+ {
+ return new spell_gen_dungeon_credit_SpellScript();
+ }
+};
+
+enum EluneCandle
+{
+ // Creatures
+ NPC_OMEN = 15467,
+
+ // Spells
+ SPELL_ELUNE_CANDLE_OMEN_HEAD = 26622,
+ SPELL_ELUNE_CANDLE_OMEN_CHEST = 26624,
+ SPELL_ELUNE_CANDLE_OMEN_HAND_R = 26625,
+ SPELL_ELUNE_CANDLE_OMEN_HAND_L = 26649,
+ SPELL_ELUNE_CANDLE_NORMAL = 26636
+};
+
+class spell_gen_elune_candle : public SpellScriptLoader
+{
+ public:
+ spell_gen_elune_candle() : SpellScriptLoader("spell_gen_elune_candle") { }
+
+ class spell_gen_elune_candle_SpellScript : public SpellScript
+ {
+ PrepareSpellScript(spell_gen_elune_candle_SpellScript);
+ bool Validate(SpellInfo const* /*spellEntry*/) OVERRIDE
+ {
+ if (!sSpellMgr->GetSpellInfo(SPELL_ELUNE_CANDLE_OMEN_HEAD) ||
+ !sSpellMgr->GetSpellInfo(SPELL_ELUNE_CANDLE_OMEN_CHEST) ||
+ !sSpellMgr->GetSpellInfo(SPELL_ELUNE_CANDLE_OMEN_HAND_R) ||
+ !sSpellMgr->GetSpellInfo(SPELL_ELUNE_CANDLE_OMEN_HAND_L) ||
+ !sSpellMgr->GetSpellInfo(SPELL_ELUNE_CANDLE_NORMAL))
+ return false;
+ return true;
+ }
+
+ void HandleScript(SpellEffIndex /*effIndex*/)
+ {
+ uint32 spellId = 0;
+
+ if (GetHitUnit()->GetEntry() == NPC_OMEN)
{
- WorldPacket data(SMSG_SPIRIT_HEALER_CONFIRM, 8);
- data << uint64(target->GetGUID());
- originalCaster->GetSession()->SendPacket(&data);
+ switch (urand(0, 3))
+ {
+ case 0:
+ spellId = SPELL_ELUNE_CANDLE_OMEN_HEAD;
+ break;
+ case 1:
+ spellId = SPELL_ELUNE_CANDLE_OMEN_CHEST;
+ break;
+ case 2:
+ spellId = SPELL_ELUNE_CANDLE_OMEN_HAND_R;
+ break;
+ case 3:
+ spellId = SPELL_ELUNE_CANDLE_OMEN_HAND_L;
+ break;
+ }
}
+ else
+ spellId = SPELL_ELUNE_CANDLE_NORMAL;
+
+ GetCaster()->CastSpell(GetHitUnit(), spellId, true, NULL);
}
void Register() OVERRIDE
{
- OnEffectHitTarget += SpellEffectFn(spell_gen_spirit_healer_res_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
+ OnEffectHitTarget += SpellEffectFn(spell_gen_elune_candle_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
SpellScript* GetSpellScript() const OVERRIDE
{
- return new spell_gen_spirit_healer_res_SpellScript();
+ return new spell_gen_elune_candle_SpellScript();
}
};
@@ -1793,7 +1526,7 @@ enum TransporterBackfires
{
SPELL_TRANSPORTER_MALFUNCTION_POLYMORPH = 23444,
SPELL_TRANSPORTER_EVIL_TWIN = 23445,
- SPELL_TRANSPORTER_MALFUNCTION_MISS = 36902,
+ SPELL_TRANSPORTER_MALFUNCTION_MISS = 36902
};
class spell_gen_gadgetzan_transporter_backfire : public SpellScriptLoader
@@ -1807,8 +1540,9 @@ class spell_gen_gadgetzan_transporter_backfire : public SpellScriptLoader
bool Validate(SpellInfo const* /*SpellEntry*/) OVERRIDE
{
- if (!sSpellMgr->GetSpellInfo(SPELL_TRANSPORTER_MALFUNCTION_POLYMORPH) || !sSpellMgr->GetSpellInfo(SPELL_TRANSPORTER_EVIL_TWIN)
- || !sSpellMgr->GetSpellInfo(SPELL_TRANSPORTER_MALFUNCTION_MISS))
+ if (!sSpellMgr->GetSpellInfo(SPELL_TRANSPORTER_MALFUNCTION_POLYMORPH) ||
+ !sSpellMgr->GetSpellInfo(SPELL_TRANSPORTER_EVIL_TWIN) ||
+ !sSpellMgr->GetSpellInfo(SPELL_TRANSPORTER_MALFUNCTION_MISS))
return false;
return true;
}
@@ -1837,10 +1571,63 @@ class spell_gen_gadgetzan_transporter_backfire : public SpellScriptLoader
}
};
+
+class spell_gen_gift_of_naaru : public SpellScriptLoader
+{
+ public:
+ spell_gen_gift_of_naaru() : SpellScriptLoader("spell_gen_gift_of_naaru") { }
+
+ class spell_gen_gift_of_naaru_AuraScript : public AuraScript
+ {
+ PrepareAuraScript(spell_gen_gift_of_naaru_AuraScript);
+
+ void CalculateAmount(AuraEffect const* aurEff, int32& amount, bool& /*canBeRecalculated*/)
+ {
+ if (!GetCaster())
+ return;
+
+ float heal = 0.0f;
+ switch (GetSpellInfo()->SpellFamilyName)
+ {
+ case SPELLFAMILY_MAGE:
+ case SPELLFAMILY_WARLOCK:
+ case SPELLFAMILY_PRIEST:
+ heal = 1.885f * float(GetCaster()->SpellBaseDamageBonusDone(GetSpellInfo()->GetSchoolMask()));
+ break;
+ case SPELLFAMILY_PALADIN:
+ case SPELLFAMILY_SHAMAN:
+ heal = std::max(1.885f * float(GetCaster()->SpellBaseDamageBonusDone(GetSpellInfo()->GetSchoolMask())), 1.1f * float(GetCaster()->GetTotalAttackPowerValue(BASE_ATTACK)));
+ break;
+ case SPELLFAMILY_WARRIOR:
+ case SPELLFAMILY_HUNTER:
+ case SPELLFAMILY_DEATHKNIGHT:
+ heal = 1.1f * float(std::max(GetCaster()->GetTotalAttackPowerValue(BASE_ATTACK), GetCaster()->GetTotalAttackPowerValue(RANGED_ATTACK)));
+ break;
+ case SPELLFAMILY_GENERIC:
+ default:
+ break;
+ }
+
+ int32 healTick = floor(heal / aurEff->GetTotalTicks());
+ amount += int32(std::max(healTick, 0));
+ }
+
+ void Register() OVERRIDE
+ {
+ DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_gen_gift_of_naaru_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_PERIODIC_HEAL);
+ }
+ };
+
+ AuraScript* GetAuraScript() const OVERRIDE
+ {
+ return new spell_gen_gift_of_naaru_AuraScript();
+ }
+};
+
enum GnomishTransporter
{
SPELL_TRANSPORTER_SUCCESS = 23441,
- SPELL_TRANSPORTER_FAILURE = 23446,
+ SPELL_TRANSPORTER_FAILURE = 23446
};
class spell_gen_gnomish_transporter : public SpellScriptLoader
@@ -1854,15 +1641,15 @@ class spell_gen_gnomish_transporter : public SpellScriptLoader
bool Validate(SpellInfo const* /*SpellEntry*/) OVERRIDE
{
- if (!sSpellMgr->GetSpellInfo(SPELL_TRANSPORTER_SUCCESS) || !sSpellMgr->GetSpellInfo(SPELL_TRANSPORTER_FAILURE))
+ if (!sSpellMgr->GetSpellInfo(SPELL_TRANSPORTER_SUCCESS) ||
+ !sSpellMgr->GetSpellInfo(SPELL_TRANSPORTER_FAILURE))
return false;
return true;
}
void HandleDummy(SpellEffIndex /* effIndex */)
{
- Unit* caster = GetCaster();
- caster->CastSpell(caster, roll_chance_i(50) ? SPELL_TRANSPORTER_SUCCESS : SPELL_TRANSPORTER_FAILURE, true);
+ GetCaster()->CastSpell(GetCaster(), roll_chance_i(50) ? SPELL_TRANSPORTER_SUCCESS : SPELL_TRANSPORTER_FAILURE, true);
}
void Register() OVERRIDE
@@ -1877,183 +1664,401 @@ class spell_gen_gnomish_transporter : public SpellScriptLoader
}
};
-enum DalaranDisguiseSpells
+class spell_gen_gunship_portal : public SpellScriptLoader
{
- SPELL_SUNREAVER_DISGUISE_TRIGGER = 69672,
- SPELL_SUNREAVER_DISGUISE_FEMALE = 70973,
- SPELL_SUNREAVER_DISGUISE_MALE = 70974,
+ public:
+ spell_gen_gunship_portal() : SpellScriptLoader("spell_gen_gunship_portal") { }
- SPELL_SILVER_COVENANT_DISGUISE_TRIGGER = 69673,
- SPELL_SILVER_COVENANT_DISGUISE_FEMALE = 70971,
- SPELL_SILVER_COVENANT_DISGUISE_MALE = 70972,
+ class spell_gen_gunship_portal_SpellScript : public SpellScript
+ {
+ PrepareSpellScript(spell_gen_gunship_portal_SpellScript);
+
+ bool Load() OVERRIDE
+ {
+ return GetCaster()->GetTypeId() == TYPEID_PLAYER;
+ }
+
+ void HandleScript(SpellEffIndex /*effIndex*/)
+ {
+ Player* caster = GetCaster()->ToPlayer();
+ if (Battleground* bg = caster->GetBattleground())
+ if (bg->GetTypeID(true) == BATTLEGROUND_IC)
+ bg->DoAction(1, caster->GetGUID());
+ }
+
+ void Register() OVERRIDE
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_gen_gunship_portal_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
+ }
+ };
+
+ SpellScript* GetSpellScript() const OVERRIDE
+ {
+ return new spell_gen_gunship_portal_SpellScript();
+ }
};
-class spell_gen_dalaran_disguise : public SpellScriptLoader
+enum Launch
+{
+ SPELL_LAUNCH_NO_FALLING_DAMAGE = 66251
+};
+
+class spell_gen_launch : public SpellScriptLoader
{
public:
- spell_gen_dalaran_disguise(const char* name) : SpellScriptLoader(name) {}
+ spell_gen_launch() : SpellScriptLoader("spell_gen_launch") { }
- class spell_gen_dalaran_disguise_SpellScript : public SpellScript
+ class spell_gen_launch_SpellScript : public SpellScript
{
- PrepareSpellScript(spell_gen_dalaran_disguise_SpellScript);
- bool Validate(SpellInfo const* spellEntry) OVERRIDE
+ PrepareSpellScript(spell_gen_launch_SpellScript);
+
+ void HandleScript(SpellEffIndex /*effIndex*/)
{
- switch (spellEntry->Id)
+ if (Player* player = GetHitPlayer())
+ player->AddAura(SPELL_LAUNCH_NO_FALLING_DAMAGE, player); // prevents falling damage
+ }
+
+ void Launch()
+ {
+ WorldLocation const* const position = GetExplTargetDest();
+
+ if (Player* player = GetHitPlayer())
{
- case SPELL_SUNREAVER_DISGUISE_TRIGGER:
- if (!sSpellMgr->GetSpellInfo(SPELL_SUNREAVER_DISGUISE_FEMALE) || !sSpellMgr->GetSpellInfo(SPELL_SUNREAVER_DISGUISE_MALE))
- return false;
- break;
- case SPELL_SILVER_COVENANT_DISGUISE_TRIGGER:
- if (!sSpellMgr->GetSpellInfo(SPELL_SILVER_COVENANT_DISGUISE_FEMALE) || !sSpellMgr->GetSpellInfo(SPELL_SILVER_COVENANT_DISGUISE_MALE))
- return false;
- break;
+ player->ExitVehicle();
+
+ // A better research is needed
+ // There is no spell for this, the following calculation was based on void Spell::CalculateJumpSpeeds
+
+ float speedZ = 10.0f;
+ float dist = position->GetExactDist2d(player->GetPositionX(), player->GetPositionY());
+ float speedXY = dist;
+
+ player->GetMotionMaster()->MoveJump(position->GetPositionX(), position->GetPositionY(), position->GetPositionZ(), speedXY, speedZ);
}
+ }
+
+ void Register() OVERRIDE
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_gen_launch_SpellScript::HandleScript, EFFECT_1, SPELL_EFFECT_FORCE_CAST);
+ AfterHit += SpellHitFn(spell_gen_launch_SpellScript::Launch);
+ }
+ };
+
+ SpellScript* GetSpellScript() const OVERRIDE
+ {
+ return new spell_gen_launch_SpellScript();
+ }
+};
+
+
+class spell_gen_lifeblood : public SpellScriptLoader
+{
+ public:
+ spell_gen_lifeblood() : SpellScriptLoader("spell_gen_lifeblood") { }
+
+ class spell_gen_lifeblood_AuraScript : public AuraScript
+ {
+ PrepareAuraScript(spell_gen_lifeblood_AuraScript);
+
+ void CalculateAmount(AuraEffect const* aurEff, int32& amount, bool& /*canBeRecalculated*/)
+ {
+ if (Unit* owner = GetUnitOwner())
+ amount += int32(CalculatePct(owner->GetMaxHealth(), 1.5f / aurEff->GetTotalTicks()));
+ }
+
+ void Register() OVERRIDE
+ {
+ DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_gen_lifeblood_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_PERIODIC_HEAL);
+ }
+ };
+
+ AuraScript* GetAuraScript() const OVERRIDE
+ {
+ return new spell_gen_lifeblood_AuraScript();
+ }
+};
+
+enum GenericLifebloom
+{
+ SPELL_HEXLORD_MALACRASS_LIFEBLOOM_FINAL_HEAL = 43422,
+ SPELL_TUR_RAGEPAW_LIFEBLOOM_FINAL_HEAL = 52552,
+ SPELL_CENARION_SCOUT_LIFEBLOOM_FINAL_HEAL = 53692,
+ SPELL_TWISTED_VISAGE_LIFEBLOOM_FINAL_HEAL = 57763,
+ SPELL_FACTION_CHAMPIONS_DRU_LIFEBLOOM_FINAL_HEAL = 66094
+};
+
+class spell_gen_lifebloom : public SpellScriptLoader
+{
+ public:
+ spell_gen_lifebloom(const char* name, uint32 spellId) : SpellScriptLoader(name), _spellId(spellId) { }
+
+ class spell_gen_lifebloom_AuraScript : public AuraScript
+ {
+ PrepareAuraScript(spell_gen_lifebloom_AuraScript);
+
+ public:
+ spell_gen_lifebloom_AuraScript(uint32 spellId) : AuraScript(), _spellId(spellId) { }
+
+ bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ {
+ if (!sSpellMgr->GetSpellInfo(_spellId))
+ return false;
return true;
}
- void HandleScript(SpellEffIndex /*effIndex*/)
+ void AfterRemove(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
{
- if (Player* player = GetHitPlayer())
- {
- uint8 gender = player->getGender();
+ // Final heal only on duration end
+ if (GetTargetApplication()->GetRemoveMode() != AURA_REMOVE_BY_EXPIRE && GetTargetApplication()->GetRemoveMode() != AURA_REMOVE_BY_ENEMY_SPELL)
+ return;
- uint32 spellId = GetSpellInfo()->Id;
+ // final heal
+ GetTarget()->CastSpell(GetTarget(), _spellId, true, NULL, aurEff, GetCasterGUID());
+ }
- switch (spellId)
+ void Register() OVERRIDE
+ {
+ AfterEffectRemove += AuraEffectRemoveFn(spell_gen_lifebloom_AuraScript::AfterRemove, EFFECT_0, SPELL_AURA_PERIODIC_HEAL, AURA_EFFECT_HANDLE_REAL);
+ }
+
+ private:
+ uint32 _spellId;
+ };
+
+ AuraScript* GetAuraScript() const OVERRIDE
+ {
+ return new spell_gen_lifebloom_AuraScript(_spellId);
+ }
+
+ private:
+ uint32 _spellId;
+};
+
+enum MagicRoosterSpells
+{
+ SPELL_MAGIC_ROOSTER_NORMAL = 66122,
+ SPELL_MAGIC_ROOSTER_DRAENEI_MALE = 66123,
+ SPELL_MAGIC_ROOSTER_TAUREN_MALE = 66124
+};
+
+class spell_gen_magic_rooster : public SpellScriptLoader
+{
+ public:
+ spell_gen_magic_rooster() : SpellScriptLoader("spell_gen_magic_rooster") { }
+
+ class spell_gen_magic_rooster_SpellScript : public SpellScript
+ {
+ PrepareSpellScript(spell_gen_magic_rooster_SpellScript);
+
+ void HandleScript(SpellEffIndex effIndex)
+ {
+ PreventHitDefaultEffect(effIndex);
+ if (Player* target = GetHitPlayer())
+ {
+ // prevent client crashes from stacking mounts
+ target->RemoveAurasByType(SPELL_AURA_MOUNTED);
+
+ uint32 spellId = SPELL_MAGIC_ROOSTER_NORMAL;
+ switch (target->getRace())
{
- case SPELL_SUNREAVER_DISGUISE_TRIGGER:
- spellId = gender ? SPELL_SUNREAVER_DISGUISE_FEMALE : SPELL_SUNREAVER_DISGUISE_MALE;
+ case RACE_DRAENEI:
+ if (target->getGender() == GENDER_MALE)
+ spellId = SPELL_MAGIC_ROOSTER_DRAENEI_MALE;
break;
- case SPELL_SILVER_COVENANT_DISGUISE_TRIGGER:
- spellId = gender ? SPELL_SILVER_COVENANT_DISGUISE_FEMALE : SPELL_SILVER_COVENANT_DISGUISE_MALE;
+ case RACE_TAUREN:
+ if (target->getGender() == GENDER_MALE)
+ spellId = SPELL_MAGIC_ROOSTER_TAUREN_MALE;
break;
default:
break;
}
- GetCaster()->CastSpell(player, spellId, true);
+
+ target->CastSpell(target, spellId, true);
}
}
void Register() OVERRIDE
{
- OnEffectHitTarget += SpellEffectFn(spell_gen_dalaran_disguise_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
+ OnEffectHitTarget += SpellEffectFn(spell_gen_magic_rooster_SpellScript::HandleScript, EFFECT_2, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
SpellScript* GetSpellScript() const OVERRIDE
{
- return new spell_gen_dalaran_disguise_SpellScript();
+ return new spell_gen_magic_rooster_SpellScript();
}
};
-/* DOCUMENTATION: Break-Shield spells
- Break-Shield spells can be classified in three groups:
+enum Mounts
+{
+ SPELL_COLD_WEATHER_FLYING = 54197,
- - Spells on vehicle bar used by players:
- + EFFECT_0: SCRIPT_EFFECT
- + EFFECT_1: NONE
- + EFFECT_2: NONE
- - Spells casted by players triggered by script:
- + EFFECT_0: SCHOOL_DAMAGE
- + EFFECT_1: SCRIPT_EFFECT
- + EFFECT_2: FORCE_CAST
- - Spells casted by NPCs on players:
- + EFFECT_0: SCHOOL_DAMAGE
- + EFFECT_1: SCRIPT_EFFECT
- + EFFECT_2: NONE
+ // Magic Broom
+ SPELL_MAGIC_BROOM_60 = 42680,
+ SPELL_MAGIC_BROOM_100 = 42683,
+ SPELL_MAGIC_BROOM_150 = 42667,
+ SPELL_MAGIC_BROOM_280 = 42668,
- In the following script we handle the SCRIPT_EFFECT for effIndex EFFECT_0 and EFFECT_1.
- - When handling EFFECT_0 we're in the "Spells on vehicle bar used by players" case
- and we'll trigger "Spells casted by players triggered by script"
- - When handling EFFECT_1 we're in the "Spells casted by players triggered by script"
- or "Spells casted by NPCs on players" so we'll search for the first defend layer and drop it.
-*/
+ // 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,
-enum BreakShieldSpells
-{
- SPELL_BREAK_SHIELD_DAMAGE_2K = 62626,
- SPELL_BREAK_SHIELD_DAMAGE_10K = 64590,
+ // Winged Steed of the Ebon Blade
+ SPELL_WINGED_STEED_150 = 54726,
+ SPELL_WINGED_STEED_280 = 54727,
- SPELL_BREAK_SHIELD_TRIGGER_FACTION_MOUNTS = 62575, // Also on ToC5 mounts
- SPELL_BREAK_SHIELD_TRIGGER_CAMPAING_WARHORSE = 64595,
- SPELL_BREAK_SHIELD_TRIGGER_UNK = 66480,
+ // 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_break_shield: public SpellScriptLoader
+class spell_gen_mount : public SpellScriptLoader
{
public:
- spell_gen_break_shield(const char* name) : SpellScriptLoader(name) {}
+ 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_break_shield_SpellScript : public SpellScript
+ class spell_gen_mount_SpellScript : public SpellScript
{
- PrepareSpellScript(spell_gen_break_shield_SpellScript)
+ PrepareSpellScript(spell_gen_mount_SpellScript);
- void HandleScriptEffect(SpellEffIndex effIndex)
+ 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* /*spellInfo*/) OVERRIDE
{
- Unit* target = GetHitUnit();
+ 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;
+ }
- switch (effIndex)
+ void HandleMount(SpellEffIndex effIndex)
+ {
+ PreventHitDefaultEffect(effIndex);
+
+ if (Player* target = GetHitPlayer())
{
- case EFFECT_0: // On spells wich trigger the damaging spell (and also the visual)
- {
- uint32 spellId;
+ // Prevent stacking of mounts and client crashes upon dismounting
+ target->RemoveAurasByType(SPELL_AURA_MOUNTED, 0, GetHitAura());
- switch (GetSpellInfo()->Id)
- {
- case SPELL_BREAK_SHIELD_TRIGGER_UNK:
- case SPELL_BREAK_SHIELD_TRIGGER_CAMPAING_WARHORSE:
- spellId = SPELL_BREAK_SHIELD_DAMAGE_10K;
- break;
- case SPELL_BREAK_SHIELD_TRIGGER_FACTION_MOUNTS:
- spellId = SPELL_BREAK_SHIELD_DAMAGE_2K;
- break;
- default:
- return;
- }
+ // Triggered spell id dependent on riding skill and zone
+ bool canFly = false;
+ uint32 map = GetVirtualMapForMapAndZone(target->GetMapId(), target->GetZoneId());
+ if (map == 530 || (map == 571 && target->HasSpell(SPELL_COLD_WEATHER_FLYING)))
+ canFly = true;
- if (Unit* rider = GetCaster()->GetCharmer())
- rider->CastSpell(target, spellId, false);
- else
- GetCaster()->CastSpell(target, spellId, false);
- break;
- }
- case EFFECT_1: // On damaging spells, for removing a defend layer
+ 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))
{
- Unit::AuraApplicationMap const& auras = target->GetAppliedAuras();
- for (Unit::AuraApplicationMap::const_iterator itr = auras.begin(); itr != auras.end(); ++itr)
- {
- if (Aura* aura = itr->second->GetBase())
+ 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)
{
- SpellInfo const* auraInfo = aura->GetSpellInfo();
- if (auraInfo && auraInfo->SpellIconID == 2007 && aura->HasEffectType(SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN))
- {
- aura->ModStackAmount(-1, AURA_REMOVE_BY_ENEMY_SPELL);
- // Remove dummys from rider (Necessary for updating visual shields)
- if (Unit* rider = target->GetCharmer())
- if (Aura* defend = rider->GetAura(aura->GetId()))
- defend->ModStackAmount(-1, AURA_REMOVE_BY_ENEMY_SPELL);
- break;
- }
+ if (_mount310 && target->Has310Flyer(false))
+ mount = _mount310;
+ else
+ mount = _mount280;
}
- }
- break;
+ else
+ mount = _mount100;
+ break;
+ default:
+ break;
+ }
+
+ if (mount)
+ {
+ PreventHitAura();
+ target->CastSpell(target, mount, true);
}
- default:
- break;
}
}
void Register() OVERRIDE
{
- OnEffectHitTarget += SpellEffectFn(spell_gen_break_shield_SpellScript::HandleScriptEffect, EFFECT_FIRST_FOUND, SPELL_EFFECT_SCRIPT_EFFECT);
+ 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 OVERRIDE
{
- return new spell_gen_break_shield_SpellScript();
+ 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;
};
/* DOCUMENTATION: Charge spells
@@ -2217,285 +2222,290 @@ class spell_gen_mounted_charge: public SpellScriptLoader
}
};
-enum DefendVisuals
+enum Netherbloom
{
- SPELL_VISUAL_SHIELD_1 = 63130,
- SPELL_VISUAL_SHIELD_2 = 63131,
- SPELL_VISUAL_SHIELD_3 = 63132,
+ SPELL_NETHERBLOOM_POLLEN_1 = 28703
};
-class spell_gen_defend : public SpellScriptLoader
+// 28702 - Netherbloom
+class spell_gen_netherbloom : public SpellScriptLoader
{
public:
- spell_gen_defend() : SpellScriptLoader("spell_gen_defend") { }
+ spell_gen_netherbloom() : SpellScriptLoader("spell_gen_netherbloom") { }
- class spell_gen_defend_AuraScript : public AuraScript
+ class spell_gen_netherbloom_SpellScript : public SpellScript
{
- PrepareAuraScript(spell_gen_defend_AuraScript);
+ PrepareSpellScript(spell_gen_netherbloom_SpellScript);
- bool Validate(SpellInfo const* /*spellEntry*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
{
- if (!sSpellMgr->GetSpellInfo(SPELL_VISUAL_SHIELD_1))
- return false;
- if (!sSpellMgr->GetSpellInfo(SPELL_VISUAL_SHIELD_2))
- return false;
- if (!sSpellMgr->GetSpellInfo(SPELL_VISUAL_SHIELD_3))
- return false;
+ for (uint8 i = 0; i < 5; ++i)
+ if (!sSpellMgr->GetSpellInfo(SPELL_NETHERBLOOM_POLLEN_1 + i))
+ return false;
return true;
}
- void RefreshVisualShields(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
+ void HandleScript(SpellEffIndex effIndex)
{
- if (GetCaster())
- {
- Unit* target = GetTarget();
+ PreventHitDefaultEffect(effIndex);
- for (uint8 i = 0; i < GetSpellInfo()->StackAmount; ++i)
- target->RemoveAurasDueToSpell(SPELL_VISUAL_SHIELD_1 + i);
+ if (Unit* target = GetHitUnit())
+ {
+ // 25% chance of casting a random buff
+ if (roll_chance_i(75))
+ return;
- target->CastSpell(target, SPELL_VISUAL_SHIELD_1 + GetAura()->GetStackAmount() - 1, true, NULL, aurEff);
- }
- else
- GetTarget()->RemoveAurasDueToSpell(GetId());
- }
+ // triggered spells are 28703 to 28707
+ // Note: some sources say, that there was the possibility of
+ // receiving a debuff. However, this seems to be removed by a patch.
- void RemoveVisualShields(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
- {
- for (uint8 i = 0; i < GetSpellInfo()->StackAmount; ++i)
- GetTarget()->RemoveAurasDueToSpell(SPELL_VISUAL_SHIELD_1 + i);
- }
+ // don't overwrite an existing aura
+ for (uint8 i = 0; i < 5; ++i)
+ if (target->HasAura(SPELL_NETHERBLOOM_POLLEN_1 + i))
+ return;
- void RemoveDummyFromDriver(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
- {
- if (Unit* caster = GetCaster())
- if (TempSummon* vehicle = caster->ToTempSummon())
- if (Unit* rider = vehicle->GetSummoner())
- rider->RemoveAurasDueToSpell(GetId());
+ target->CastSpell(target, SPELL_NETHERBLOOM_POLLEN_1 + urand(0, 4), true);
+ }
}
void Register() OVERRIDE
{
- SpellInfo const* spell = sSpellMgr->GetSpellInfo(m_scriptSpellId);
-
- // Defend spells casted by NPCs (add visuals)
- if (spell->Effects[EFFECT_0].ApplyAuraName == SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN)
- {
- AfterEffectApply += AuraEffectApplyFn(spell_gen_defend_AuraScript::RefreshVisualShields, EFFECT_0, SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
- OnEffectRemove += AuraEffectRemoveFn(spell_gen_defend_AuraScript::RemoveVisualShields, EFFECT_0, SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN, AURA_EFFECT_HANDLE_CHANGE_AMOUNT_MASK);
- }
-
- // Remove Defend spell from player when he dismounts
- if (spell->Effects[EFFECT_2].ApplyAuraName == SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN)
- OnEffectRemove += AuraEffectRemoveFn(spell_gen_defend_AuraScript::RemoveDummyFromDriver, EFFECT_2, SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN, AURA_EFFECT_HANDLE_REAL);
-
- // Defend spells casted by players (add/remove visuals)
- if (spell->Effects[EFFECT_1].ApplyAuraName == SPELL_AURA_DUMMY)
- {
- AfterEffectApply += AuraEffectApplyFn(spell_gen_defend_AuraScript::RefreshVisualShields, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
- OnEffectRemove += AuraEffectRemoveFn(spell_gen_defend_AuraScript::RemoveVisualShields, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_CHANGE_AMOUNT_MASK);
- }
+ OnEffectHitTarget += SpellEffectFn(spell_gen_netherbloom_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ SpellScript* GetSpellScript() const OVERRIDE
{
- return new spell_gen_defend_AuraScript();
+ return new spell_gen_netherbloom_SpellScript();
}
};
-enum MountedDuelSpells
+enum NightmareVine
{
- SPELL_ON_TOURNAMENT_MOUNT = 63034,
- SPELL_MOUNTED_DUEL = 62875,
+ SPELL_NIGHTMARE_POLLEN = 28721
};
-class spell_gen_tournament_duel : public SpellScriptLoader
+// 28720 - Nightmare Vine
+class spell_gen_nightmare_vine : public SpellScriptLoader
{
public:
- spell_gen_tournament_duel() : SpellScriptLoader("spell_gen_tournament_duel") { }
+ spell_gen_nightmare_vine() : SpellScriptLoader("spell_gen_nightmare_vine") { }
- class spell_gen_tournament_duel_SpellScript : public SpellScript
+ class spell_gen_nightmare_vine_SpellScript : public SpellScript
{
- PrepareSpellScript(spell_gen_tournament_duel_SpellScript);
+ PrepareSpellScript(spell_gen_nightmare_vine_SpellScript);
- bool Validate(SpellInfo const* /*spellEntry*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
{
- if (!sSpellMgr->GetSpellInfo(SPELL_ON_TOURNAMENT_MOUNT))
- return false;
- if (!sSpellMgr->GetSpellInfo(SPELL_MOUNTED_DUEL))
+ if (!sSpellMgr->GetSpellInfo(SPELL_NIGHTMARE_POLLEN))
return false;
return true;
}
- void HandleScriptEffect(SpellEffIndex /*effIndex*/)
+ void HandleScript(SpellEffIndex effIndex)
{
- if (Unit* rider = GetCaster()->GetCharmer())
+ PreventHitDefaultEffect(effIndex);
+
+ if (Unit* target = GetHitUnit())
{
- if (Player* plrTarget = GetHitPlayer())
- {
- if (plrTarget->HasAura(SPELL_ON_TOURNAMENT_MOUNT) && plrTarget->GetVehicleBase())
- rider->CastSpell(plrTarget, SPELL_MOUNTED_DUEL, true);
- }
- else if (Unit* unitTarget = GetHitUnit())
- {
- if (unitTarget->GetCharmer() && unitTarget->GetCharmer()->GetTypeId() == TYPEID_PLAYER && unitTarget->GetCharmer()->HasAura(SPELL_ON_TOURNAMENT_MOUNT))
- rider->CastSpell(unitTarget->GetCharmer(), SPELL_MOUNTED_DUEL, true);
- }
+ // 25% chance of casting Nightmare Pollen
+ if (roll_chance_i(25))
+ target->CastSpell(target, SPELL_NIGHTMARE_POLLEN, true);
}
}
void Register() OVERRIDE
{
- OnEffectHitTarget += SpellEffectFn(spell_gen_tournament_duel_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
+ OnEffectHitTarget += SpellEffectFn(spell_gen_nightmare_vine_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
SpellScript* GetSpellScript() const OVERRIDE
{
- return new spell_gen_tournament_duel_SpellScript();
+ return new spell_gen_nightmare_vine_SpellScript();
}
};
-enum TournamentMountsSpells
+enum ObsidianArmor
{
- SPELL_LANCE_EQUIPPED = 62853,
+ SPELL_GEN_OBSIDIAN_ARMOR_HOLY = 27536,
+ SPELL_GEN_OBSIDIAN_ARMOR_FIRE = 27533,
+ SPELL_GEN_OBSIDIAN_ARMOR_NATURE = 27538,
+ SPELL_GEN_OBSIDIAN_ARMOR_FROST = 27534,
+ SPELL_GEN_OBSIDIAN_ARMOR_SHADOW = 27535,
+ SPELL_GEN_OBSIDIAN_ARMOR_ARCANE = 27540
};
-class spell_gen_summon_tournament_mount : public SpellScriptLoader
+// 27539 - Obsidian Armor
+class spell_gen_obsidian_armor : public SpellScriptLoader
{
public:
- spell_gen_summon_tournament_mount() : SpellScriptLoader("spell_gen_summon_tournament_mount") { }
+ spell_gen_obsidian_armor() : SpellScriptLoader("spell_gen_obsidian_armor") { }
- class spell_gen_summon_tournament_mount_SpellScript : public SpellScript
+ class spell_gen_obsidian_armor_AuraScript : public AuraScript
{
- PrepareSpellScript(spell_gen_summon_tournament_mount_SpellScript);
+ PrepareAuraScript(spell_gen_obsidian_armor_AuraScript);
- bool Validate(SpellInfo const* /*spellEntry*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
{
- if (!sSpellMgr->GetSpellInfo(SPELL_LANCE_EQUIPPED))
+ if (!sSpellMgr->GetSpellInfo(SPELL_GEN_OBSIDIAN_ARMOR_HOLY) ||
+ !sSpellMgr->GetSpellInfo(SPELL_GEN_OBSIDIAN_ARMOR_FIRE) ||
+ !sSpellMgr->GetSpellInfo(SPELL_GEN_OBSIDIAN_ARMOR_NATURE) ||
+ !sSpellMgr->GetSpellInfo(SPELL_GEN_OBSIDIAN_ARMOR_FROST) ||
+ !sSpellMgr->GetSpellInfo(SPELL_GEN_OBSIDIAN_ARMOR_SHADOW) ||
+ !sSpellMgr->GetSpellInfo(SPELL_GEN_OBSIDIAN_ARMOR_ARCANE))
return false;
return true;
}
- SpellCastResult CheckIfLanceEquiped()
+ bool CheckProc(ProcEventInfo& eventInfo)
{
- if (GetCaster()->IsInDisallowedMountForm())
- GetCaster()->RemoveAurasByType(SPELL_AURA_MOD_SHAPESHIFT);
+ if (eventInfo.GetDamageInfo()->GetSpellInfo()) // eventInfo.GetSpellInfo()
+ return false;
- if (!GetCaster()->HasAura(SPELL_LANCE_EQUIPPED))
+ if (GetFirstSchoolInMask(eventInfo.GetSchoolMask()) == SPELL_SCHOOL_NORMAL)
+ return false;
+
+ return true;
+ }
+
+ void OnProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
+ {
+ PreventDefaultAction();
+
+ uint32 spellId = 0;
+ switch (GetFirstSchoolInMask(eventInfo.GetSchoolMask()))
{
- SetCustomCastResultMessage(SPELL_CUSTOM_ERROR_MUST_HAVE_LANCE_EQUIPPED);
- return SPELL_FAILED_CUSTOM_ERROR;
+ case SPELL_SCHOOL_HOLY:
+ spellId = SPELL_GEN_OBSIDIAN_ARMOR_HOLY;
+ break;
+ case SPELL_SCHOOL_FIRE:
+ spellId = SPELL_GEN_OBSIDIAN_ARMOR_FIRE;
+ break;
+ case SPELL_SCHOOL_NATURE:
+ spellId = SPELL_GEN_OBSIDIAN_ARMOR_NATURE;
+ break;
+ case SPELL_SCHOOL_FROST:
+ spellId = SPELL_GEN_OBSIDIAN_ARMOR_FROST;
+ break;
+ case SPELL_SCHOOL_SHADOW:
+ spellId = SPELL_GEN_OBSIDIAN_ARMOR_SHADOW;
+ break;
+ case SPELL_SCHOOL_ARCANE:
+ spellId = SPELL_GEN_OBSIDIAN_ARMOR_ARCANE;
+ break;
+ default:
+ return;
}
-
- return SPELL_CAST_OK;
+ GetTarget()->CastSpell(GetTarget(), spellId, true, NULL, aurEff);
}
void Register() OVERRIDE
{
- OnCheckCast += SpellCheckCastFn(spell_gen_summon_tournament_mount_SpellScript::CheckIfLanceEquiped);
+ DoCheckProc += AuraCheckProcFn(spell_gen_obsidian_armor_AuraScript::CheckProc);
+ OnEffectProc += AuraEffectProcFn(spell_gen_obsidian_armor_AuraScript::OnProc, EFFECT_0, SPELL_AURA_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ AuraScript* GetAuraScript() const OVERRIDE
{
- return new spell_gen_summon_tournament_mount_SpellScript();
+ return new spell_gen_obsidian_armor_AuraScript();
}
};
enum TournamentPennantSpells
{
- SPELL_PENNANT_STORMWIND_ASPIRANT = 62595,
- SPELL_PENNANT_STORMWIND_VALIANT = 62596,
- SPELL_PENNANT_STORMWIND_CHAMPION = 62594,
- SPELL_PENNANT_GNOMEREGAN_ASPIRANT = 63394,
- SPELL_PENNANT_GNOMEREGAN_VALIANT = 63395,
- SPELL_PENNANT_GNOMEREGAN_CHAMPION = 63396,
- SPELL_PENNANT_SEN_JIN_ASPIRANT = 63397,
- SPELL_PENNANT_SEN_JIN_VALIANT = 63398,
- SPELL_PENNANT_SEN_JIN_CHAMPION = 63399,
- SPELL_PENNANT_SILVERMOON_ASPIRANT = 63401,
- SPELL_PENNANT_SILVERMOON_VALIANT = 63402,
- SPELL_PENNANT_SILVERMOON_CHAMPION = 63403,
- SPELL_PENNANT_DARNASSUS_ASPIRANT = 63404,
- SPELL_PENNANT_DARNASSUS_VALIANT = 63405,
- SPELL_PENNANT_DARNASSUS_CHAMPION = 63406,
- SPELL_PENNANT_EXODAR_ASPIRANT = 63421,
- SPELL_PENNANT_EXODAR_VALIANT = 63422,
- SPELL_PENNANT_EXODAR_CHAMPION = 63423,
- SPELL_PENNANT_IRONFORGE_ASPIRANT = 63425,
- SPELL_PENNANT_IRONFORGE_VALIANT = 63426,
- SPELL_PENNANT_IRONFORGE_CHAMPION = 63427,
- SPELL_PENNANT_UNDERCITY_ASPIRANT = 63428,
- SPELL_PENNANT_UNDERCITY_VALIANT = 63429,
- SPELL_PENNANT_UNDERCITY_CHAMPION = 63430,
- SPELL_PENNANT_ORGRIMMAR_ASPIRANT = 63431,
- SPELL_PENNANT_ORGRIMMAR_VALIANT = 63432,
- SPELL_PENNANT_ORGRIMMAR_CHAMPION = 63433,
- SPELL_PENNANT_THUNDER_BLUFF_ASPIRANT = 63434,
- SPELL_PENNANT_THUNDER_BLUFF_VALIANT = 63435,
- SPELL_PENNANT_THUNDER_BLUFF_CHAMPION = 63436,
- SPELL_PENNANT_ARGENT_CRUSADE_ASPIRANT = 63606,
- SPELL_PENNANT_ARGENT_CRUSADE_VALIANT = 63500,
- SPELL_PENNANT_ARGENT_CRUSADE_CHAMPION = 63501,
- SPELL_PENNANT_EBON_BLADE_ASPIRANT = 63607,
- SPELL_PENNANT_EBON_BLADE_VALIANT = 63608,
- SPELL_PENNANT_EBON_BLADE_CHAMPION = 63609,
+ SPELL_PENNANT_STORMWIND_ASPIRANT = 62595,
+ SPELL_PENNANT_STORMWIND_VALIANT = 62596,
+ SPELL_PENNANT_STORMWIND_CHAMPION = 62594,
+ SPELL_PENNANT_GNOMEREGAN_ASPIRANT = 63394,
+ SPELL_PENNANT_GNOMEREGAN_VALIANT = 63395,
+ SPELL_PENNANT_GNOMEREGAN_CHAMPION = 63396,
+ SPELL_PENNANT_SEN_JIN_ASPIRANT = 63397,
+ SPELL_PENNANT_SEN_JIN_VALIANT = 63398,
+ SPELL_PENNANT_SEN_JIN_CHAMPION = 63399,
+ SPELL_PENNANT_SILVERMOON_ASPIRANT = 63401,
+ SPELL_PENNANT_SILVERMOON_VALIANT = 63402,
+ SPELL_PENNANT_SILVERMOON_CHAMPION = 63403,
+ SPELL_PENNANT_DARNASSUS_ASPIRANT = 63404,
+ SPELL_PENNANT_DARNASSUS_VALIANT = 63405,
+ SPELL_PENNANT_DARNASSUS_CHAMPION = 63406,
+ SPELL_PENNANT_EXODAR_ASPIRANT = 63421,
+ SPELL_PENNANT_EXODAR_VALIANT = 63422,
+ SPELL_PENNANT_EXODAR_CHAMPION = 63423,
+ SPELL_PENNANT_IRONFORGE_ASPIRANT = 63425,
+ SPELL_PENNANT_IRONFORGE_VALIANT = 63426,
+ SPELL_PENNANT_IRONFORGE_CHAMPION = 63427,
+ SPELL_PENNANT_UNDERCITY_ASPIRANT = 63428,
+ SPELL_PENNANT_UNDERCITY_VALIANT = 63429,
+ SPELL_PENNANT_UNDERCITY_CHAMPION = 63430,
+ SPELL_PENNANT_ORGRIMMAR_ASPIRANT = 63431,
+ SPELL_PENNANT_ORGRIMMAR_VALIANT = 63432,
+ SPELL_PENNANT_ORGRIMMAR_CHAMPION = 63433,
+ SPELL_PENNANT_THUNDER_BLUFF_ASPIRANT = 63434,
+ SPELL_PENNANT_THUNDER_BLUFF_VALIANT = 63435,
+ SPELL_PENNANT_THUNDER_BLUFF_CHAMPION = 63436,
+ SPELL_PENNANT_ARGENT_CRUSADE_ASPIRANT = 63606,
+ SPELL_PENNANT_ARGENT_CRUSADE_VALIANT = 63500,
+ SPELL_PENNANT_ARGENT_CRUSADE_CHAMPION = 63501,
+ SPELL_PENNANT_EBON_BLADE_ASPIRANT = 63607,
+ SPELL_PENNANT_EBON_BLADE_VALIANT = 63608,
+ SPELL_PENNANT_EBON_BLADE_CHAMPION = 63609
};
enum TournamentMounts
{
- NPC_STORMWIND_STEED = 33217,
- NPC_IRONFORGE_RAM = 33316,
- NPC_GNOMEREGAN_MECHANOSTRIDER = 33317,
- NPC_EXODAR_ELEKK = 33318,
- NPC_DARNASSIAN_NIGHTSABER = 33319,
- NPC_ORGRIMMAR_WOLF = 33320,
- NPC_DARK_SPEAR_RAPTOR = 33321,
- NPC_THUNDER_BLUFF_KODO = 33322,
- NPC_SILVERMOON_HAWKSTRIDER = 33323,
- NPC_FORSAKEN_WARHORSE = 33324,
- NPC_ARGENT_WARHORSE = 33782,
- NPC_ARGENT_STEED_ASPIRANT = 33845,
- NPC_ARGENT_HAWKSTRIDER_ASPIRANT = 33844,
+ NPC_STORMWIND_STEED = 33217,
+ NPC_IRONFORGE_RAM = 33316,
+ NPC_GNOMEREGAN_MECHANOSTRIDER = 33317,
+ NPC_EXODAR_ELEKK = 33318,
+ NPC_DARNASSIAN_NIGHTSABER = 33319,
+ NPC_ORGRIMMAR_WOLF = 33320,
+ NPC_DARK_SPEAR_RAPTOR = 33321,
+ NPC_THUNDER_BLUFF_KODO = 33322,
+ NPC_SILVERMOON_HAWKSTRIDER = 33323,
+ NPC_FORSAKEN_WARHORSE = 33324,
+ NPC_ARGENT_WARHORSE = 33782,
+ NPC_ARGENT_STEED_ASPIRANT = 33845,
+ NPC_ARGENT_HAWKSTRIDER_ASPIRANT = 33844
};
enum TournamentQuestsAchievements
{
- ACHIEVEMENT_CHAMPION_STORMWIND = 2781,
- ACHIEVEMENT_CHAMPION_DARNASSUS = 2777,
- ACHIEVEMENT_CHAMPION_IRONFORGE = 2780,
- ACHIEVEMENT_CHAMPION_GNOMEREGAN = 2779,
- ACHIEVEMENT_CHAMPION_THE_EXODAR = 2778,
- ACHIEVEMENT_CHAMPION_ORGRIMMAR = 2783,
- ACHIEVEMENT_CHAMPION_SEN_JIN = 2784,
- ACHIEVEMENT_CHAMPION_THUNDER_BLUFF = 2786,
- ACHIEVEMENT_CHAMPION_UNDERCITY = 2787,
- ACHIEVEMENT_CHAMPION_SILVERMOON = 2785,
- ACHIEVEMENT_ARGENT_VALOR = 2758,
- ACHIEVEMENT_CHAMPION_ALLIANCE = 2782,
- ACHIEVEMENT_CHAMPION_HORDE = 2788,
-
- QUEST_VALIANT_OF_STORMWIND = 13593,
- QUEST_A_VALIANT_OF_STORMWIND = 13684,
- QUEST_VALIANT_OF_DARNASSUS = 13706,
- QUEST_A_VALIANT_OF_DARNASSUS = 13689,
- QUEST_VALIANT_OF_IRONFORGE = 13703,
- QUEST_A_VALIANT_OF_IRONFORGE = 13685,
- QUEST_VALIANT_OF_GNOMEREGAN = 13704,
- QUEST_A_VALIANT_OF_GNOMEREGAN = 13688,
- QUEST_VALIANT_OF_THE_EXODAR = 13705,
- QUEST_A_VALIANT_OF_THE_EXODAR = 13690,
- QUEST_VALIANT_OF_ORGRIMMAR = 13707,
- QUEST_A_VALIANT_OF_ORGRIMMAR = 13691,
- QUEST_VALIANT_OF_SEN_JIN = 13708,
- QUEST_A_VALIANT_OF_SEN_JIN = 13693,
- QUEST_VALIANT_OF_THUNDER_BLUFF = 13709,
- QUEST_A_VALIANT_OF_THUNDER_BLUFF = 13694,
- QUEST_VALIANT_OF_UNDERCITY = 13710,
- QUEST_A_VALIANT_OF_UNDERCITY = 13695,
- QUEST_VALIANT_OF_SILVERMOON = 13711,
- QUEST_A_VALIANT_OF_SILVERMOON = 13696,
+ ACHIEVEMENT_CHAMPION_STORMWIND = 2781,
+ ACHIEVEMENT_CHAMPION_DARNASSUS = 2777,
+ ACHIEVEMENT_CHAMPION_IRONFORGE = 2780,
+ ACHIEVEMENT_CHAMPION_GNOMEREGAN = 2779,
+ ACHIEVEMENT_CHAMPION_THE_EXODAR = 2778,
+ ACHIEVEMENT_CHAMPION_ORGRIMMAR = 2783,
+ ACHIEVEMENT_CHAMPION_SEN_JIN = 2784,
+ ACHIEVEMENT_CHAMPION_THUNDER_BLUFF = 2786,
+ ACHIEVEMENT_CHAMPION_UNDERCITY = 2787,
+ ACHIEVEMENT_CHAMPION_SILVERMOON = 2785,
+ ACHIEVEMENT_ARGENT_VALOR = 2758,
+ ACHIEVEMENT_CHAMPION_ALLIANCE = 2782,
+ ACHIEVEMENT_CHAMPION_HORDE = 2788,
+
+ QUEST_VALIANT_OF_STORMWIND = 13593,
+ QUEST_A_VALIANT_OF_STORMWIND = 13684,
+ QUEST_VALIANT_OF_DARNASSUS = 13706,
+ QUEST_A_VALIANT_OF_DARNASSUS = 13689,
+ QUEST_VALIANT_OF_IRONFORGE = 13703,
+ QUEST_A_VALIANT_OF_IRONFORGE = 13685,
+ QUEST_VALIANT_OF_GNOMEREGAN = 13704,
+ QUEST_A_VALIANT_OF_GNOMEREGAN = 13688,
+ QUEST_VALIANT_OF_THE_EXODAR = 13705,
+ QUEST_A_VALIANT_OF_THE_EXODAR = 13690,
+ QUEST_VALIANT_OF_ORGRIMMAR = 13707,
+ QUEST_A_VALIANT_OF_ORGRIMMAR = 13691,
+ QUEST_VALIANT_OF_SEN_JIN = 13708,
+ QUEST_A_VALIANT_OF_SEN_JIN = 13693,
+ QUEST_VALIANT_OF_THUNDER_BLUFF = 13709,
+ QUEST_A_VALIANT_OF_THUNDER_BLUFF = 13694,
+ QUEST_VALIANT_OF_UNDERCITY = 13710,
+ QUEST_A_VALIANT_OF_UNDERCITY = 13695,
+ QUEST_VALIANT_OF_SILVERMOON = 13711,
+ QUEST_A_VALIANT_OF_SILVERMOON = 13696
};
class spell_gen_on_tournament_mount : public SpellScriptLoader
@@ -2656,376 +2666,499 @@ class spell_gen_on_tournament_mount : public SpellScriptLoader
}
};
-class spell_gen_tournament_pennant : public SpellScriptLoader
+class spell_gen_oracle_wolvar_reputation : public SpellScriptLoader
{
public:
- spell_gen_tournament_pennant() : SpellScriptLoader("spell_gen_tournament_pennant") { }
+ spell_gen_oracle_wolvar_reputation() : SpellScriptLoader("spell_gen_oracle_wolvar_reputation") { }
- class spell_gen_tournament_pennant_AuraScript : public AuraScript
+ class spell_gen_oracle_wolvar_reputation_SpellScript : public SpellScript
{
- PrepareAuraScript(spell_gen_tournament_pennant_AuraScript);
+ PrepareSpellScript(spell_gen_oracle_wolvar_reputation_SpellScript);
bool Load() OVERRIDE
{
- return GetCaster() && GetCaster()->GetTypeId() == TYPEID_PLAYER;
+ return GetCaster()->GetTypeId() == TYPEID_PLAYER;
}
- void HandleApplyEffect(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
+ void HandleDummy(SpellEffIndex effIndex)
{
- if (Unit* caster = GetCaster())
- if (!caster->GetVehicleBase())
- caster->RemoveAurasDueToSpell(GetId());
+ Player* player = GetCaster()->ToPlayer();
+ uint32 factionId = GetSpellInfo()->Effects[effIndex].CalcValue();
+ int32 repChange = GetSpellInfo()->Effects[EFFECT_1].CalcValue();
+
+ FactionEntry const* factionEntry = sFactionStore.LookupEntry(factionId);
+
+ if (!factionEntry)
+ return;
+
+ // Set rep to baserep + basepoints (expecting spillover for oposite faction -> become hated)
+ // Not when player already has equal or higher rep with this faction
+ if (player->GetReputationMgr().GetBaseReputation(factionEntry) < repChange)
+ player->GetReputationMgr().SetReputation(factionEntry, repChange);
+
+ // EFFECT_INDEX_2 most likely update at war state, we already handle this in SetReputation
}
void Register() OVERRIDE
{
- OnEffectApply += AuraEffectApplyFn(spell_gen_tournament_pennant_AuraScript::HandleApplyEffect, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
+ OnEffectHit += SpellEffectFn(spell_gen_oracle_wolvar_reputation_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ SpellScript* GetSpellScript() const OVERRIDE
{
- return new spell_gen_tournament_pennant_AuraScript();
+ return new spell_gen_oracle_wolvar_reputation_SpellScript();
}
};
-enum ChaosBlast
+enum OrcDisguiseSpells
{
- SPELL_CHAOS_BLAST = 37675,
+ SPELL_ORC_DISGUISE_TRIGGER = 45759,
+ SPELL_ORC_DISGUISE_MALE = 45760,
+ SPELL_ORC_DISGUISE_FEMALE = 45762
};
-class spell_gen_chaos_blast : public SpellScriptLoader
+class spell_gen_orc_disguise : public SpellScriptLoader
{
public:
- spell_gen_chaos_blast() : SpellScriptLoader("spell_gen_chaos_blast") { }
+ spell_gen_orc_disguise() : SpellScriptLoader("spell_gen_orc_disguise") { }
- class spell_gen_chaos_blast_SpellScript : public SpellScript
+ class spell_gen_orc_disguise_SpellScript : public SpellScript
{
- PrepareSpellScript(spell_gen_chaos_blast_SpellScript)
+ PrepareSpellScript(spell_gen_orc_disguise_SpellScript);
- bool Validate(SpellInfo const* /*SpellEntry*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
{
- if (!sSpellMgr->GetSpellInfo(SPELL_CHAOS_BLAST))
+ if (!sSpellMgr->GetSpellInfo(SPELL_ORC_DISGUISE_TRIGGER) ||
+ !sSpellMgr->GetSpellInfo(SPELL_ORC_DISGUISE_MALE) ||
+ !sSpellMgr->GetSpellInfo(SPELL_ORC_DISGUISE_FEMALE))
return false;
return true;
}
- void HandleDummy(SpellEffIndex /* effIndex */)
+
+ void HandleScript(SpellEffIndex /*effIndex*/)
{
- int32 basepoints0 = 100;
Unit* caster = GetCaster();
- if (Unit* target = GetHitUnit())
- caster->CastCustomSpell(target, SPELL_CHAOS_BLAST, &basepoints0, NULL, NULL, true);
+ if (Player* target = GetHitPlayer())
+ {
+ uint8 gender = target->getGender();
+ if (!gender)
+ caster->CastSpell(target, SPELL_ORC_DISGUISE_MALE, true);
+ else
+ caster->CastSpell(target, SPELL_ORC_DISGUISE_FEMALE, true);
+ }
}
void Register() OVERRIDE
{
- OnEffectHitTarget += SpellEffectFn(spell_gen_chaos_blast_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
+ OnEffectHitTarget += SpellEffectFn(spell_gen_orc_disguise_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
SpellScript* GetSpellScript() const OVERRIDE
{
- return new spell_gen_chaos_blast_SpellScript();
+ return new spell_gen_orc_disguise_SpellScript();
}
+};
+enum ParachuteSpells
+{
+ SPELL_PARACHUTE = 45472,
+ SPELL_PARACHUTE_BUFF = 44795,
};
-class spell_gen_ds_flush_knockback : public SpellScriptLoader
+// 45472 Parachute
+class spell_gen_parachute : public SpellScriptLoader
{
public:
- spell_gen_ds_flush_knockback() : SpellScriptLoader("spell_gen_ds_flush_knockback") {}
+ spell_gen_parachute() : SpellScriptLoader("spell_gen_parachute") { }
- class spell_gen_ds_flush_knockback_SpellScript : public SpellScript
+ class spell_gen_parachute_AuraScript : public AuraScript
{
- PrepareSpellScript(spell_gen_ds_flush_knockback_SpellScript);
+ PrepareAuraScript(spell_gen_parachute_AuraScript);
- void HandleScript(SpellEffIndex /*effIndex*/)
+ bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
{
- // Here the target is the water spout and determines the position where the player is knocked from
- if (Unit* target = GetHitUnit())
- {
- if (Player* player = GetCaster()->ToPlayer())
+ if (!sSpellMgr->GetSpellInfo(SPELL_PARACHUTE) ||
+ !sSpellMgr->GetSpellInfo(SPELL_PARACHUTE_BUFF))
+ return false;
+ return true;
+ }
+
+ void HandleEffectPeriodic(AuraEffect const* /*aurEff*/)
+ {
+ if (Player* target = GetTarget()->ToPlayer())
+ if (target->IsFalling())
{
- float horizontalSpeed = 20.0f + (40.0f - GetCaster()->GetDistance(target));
- float verticalSpeed = 8.0f;
- // This method relies on the Dalaran Sewer map disposition and Water Spout position
- // What we do is knock the player from a position exactly behind him and at the end of the pipe
- player->KnockbackFrom(target->GetPositionX(), player->GetPositionY(), horizontalSpeed, verticalSpeed);
+ target->RemoveAurasDueToSpell(SPELL_PARACHUTE);
+ target->CastSpell(target, SPELL_PARACHUTE_BUFF, true);
}
- }
}
void Register() OVERRIDE
{
- OnEffectHitTarget += SpellEffectFn(spell_gen_ds_flush_knockback_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_DUMMY);
+ OnEffectPeriodic += AuraEffectPeriodicFn(spell_gen_parachute_AuraScript::HandleEffectPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ AuraScript* GetAuraScript() const OVERRIDE
{
- return new spell_gen_ds_flush_knockback_SpellScript();
+ return new spell_gen_parachute_AuraScript();
}
};
-class spell_gen_wg_water : public SpellScriptLoader
+enum ParachuteIC
+{
+ SPELL_PARACHUTE_IC = 66657
+};
+
+class spell_gen_parachute_ic : public SpellScriptLoader
{
public:
- spell_gen_wg_water() : SpellScriptLoader("spell_gen_wg_water") {}
+ spell_gen_parachute_ic() : SpellScriptLoader("spell_gen_parachute_ic") { }
- class spell_gen_wg_water_SpellScript : public SpellScript
+ class spell_gen_parachute_ic_AuraScript : public AuraScript
{
- PrepareSpellScript(spell_gen_wg_water_SpellScript);
+ PrepareAuraScript(spell_gen_parachute_ic_AuraScript)
- SpellCastResult CheckCast()
+ void HandleTriggerSpell(AuraEffect const* /*aurEff*/)
{
- if (!GetSpellInfo()->CheckTargetCreatureType(GetCaster()))
- return SPELL_FAILED_DONT_REPORT;
- return SPELL_CAST_OK;
+ if (Player* target = GetTarget()->ToPlayer())
+ if (target->m_movementInfo.fallTime > 2000)
+ target->CastSpell(target, SPELL_PARACHUTE_IC, true);
}
void Register() OVERRIDE
{
- OnCheckCast += SpellCheckCastFn(spell_gen_wg_water_SpellScript::CheckCast);
+ OnEffectPeriodic += AuraEffectPeriodicFn(spell_gen_parachute_ic_AuraScript::HandleTriggerSpell, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ AuraScript* GetAuraScript() const OVERRIDE
{
- return new spell_gen_wg_water_SpellScript();
+ return new spell_gen_parachute_ic_AuraScript();
}
};
-class spell_gen_count_pct_from_max_hp : public SpellScriptLoader
+enum PetSummoned
+{
+ NPC_DOOMGUARD = 11859,
+ NPC_INFERNAL = 89,
+ NPC_IMP = 416
+};
+
+class spell_gen_pet_summoned : public SpellScriptLoader
{
public:
- spell_gen_count_pct_from_max_hp(char const* name, int32 damagePct = 0) : SpellScriptLoader(name), _damagePct(damagePct) { }
+ spell_gen_pet_summoned() : SpellScriptLoader("spell_gen_pet_summoned") { }
- class spell_gen_count_pct_from_max_hp_SpellScript : public SpellScript
+ class spell_gen_pet_summoned_SpellScript : public SpellScript
{
- PrepareSpellScript(spell_gen_count_pct_from_max_hp_SpellScript)
+ PrepareSpellScript(spell_gen_pet_summoned_SpellScript);
- public:
- spell_gen_count_pct_from_max_hp_SpellScript(int32 damagePct) : SpellScript(), _damagePct(damagePct) { }
+ bool Load() OVERRIDE
+ {
+ return GetCaster()->GetTypeId() == TYPEID_PLAYER;
+ }
- void RecalculateDamage()
+ void HandleScript(SpellEffIndex /*effIndex*/)
{
- if (!_damagePct)
- _damagePct = GetHitDamage();
+ Player* player = GetCaster()->ToPlayer();
+ if (player->GetLastPetNumber())
+ {
+ PetType newPetType = (player->getClass() == CLASS_HUNTER) ? HUNTER_PET : SUMMON_PET;
+ if (Pet* newPet = new Pet(player, newPetType))
+ {
+ if (newPet->LoadPetFromDB(player, 0, player->GetLastPetNumber(), true))
+ {
+ // revive the pet if it is dead
+ if (newPet->getDeathState() == DEAD)
+ newPet->setDeathState(ALIVE);
- SetHitDamage(GetHitUnit()->CountPctFromMaxHealth(_damagePct));
+ newPet->SetFullHealth();
+ newPet->SetPower(newPet->getPowerType(), newPet->GetMaxPower(newPet->getPowerType()));
+
+ switch (newPet->GetEntry())
+ {
+ case NPC_DOOMGUARD:
+ case NPC_INFERNAL:
+ newPet->SetEntry(NPC_IMP);
+ break;
+ default:
+ break;
+ }
+ }
+ else
+ delete newPet;
+ }
+ }
}
void Register() OVERRIDE
{
- OnHit += SpellHitFn(spell_gen_count_pct_from_max_hp_SpellScript::RecalculateDamage);
+ OnEffectHitTarget += SpellEffectFn(spell_gen_pet_summoned_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
-
- private:
- int32 _damagePct;
};
SpellScript* GetSpellScript() const OVERRIDE
{
- return new spell_gen_count_pct_from_max_hp_SpellScript(_damagePct);
+ return new spell_gen_pet_summoned_SpellScript();
}
-
- private:
- int32 _damagePct;
};
-class spell_gen_despawn_self : public SpellScriptLoader
+class spell_gen_profession_research : public SpellScriptLoader
{
-public:
- spell_gen_despawn_self() : SpellScriptLoader("spell_gen_despawn_self") { }
-
- class spell_gen_despawn_self_SpellScript : public SpellScript
- {
- PrepareSpellScript(spell_gen_despawn_self_SpellScript);
+ public:
+ spell_gen_profession_research() : SpellScriptLoader("spell_gen_profession_research") { }
- bool Load() OVERRIDE
+ class spell_gen_profession_research_SpellScript : public SpellScript
{
- return GetCaster()->GetTypeId() == TYPEID_UNIT;
- }
+ PrepareSpellScript(spell_gen_profession_research_SpellScript);
- void HandleDummy(SpellEffIndex effIndex)
- {
- if (GetSpellInfo()->Effects[effIndex].Effect == SPELL_EFFECT_DUMMY || GetSpellInfo()->Effects[effIndex].Effect == SPELL_EFFECT_SCRIPT_EFFECT)
- GetCaster()->ToCreature()->DespawnOrUnsummon();
- }
+ bool Load() OVERRIDE
+ {
+ return GetCaster()->GetTypeId() == TYPEID_PLAYER;
+ }
- void Register() OVERRIDE
+ SpellCastResult CheckRequirement()
+ {
+ if (HasDiscoveredAllSpells(GetSpellInfo()->Id, GetCaster()->ToPlayer()))
+ {
+ SetCustomCastResultMessage(SPELL_CUSTOM_ERROR_NOTHING_TO_DISCOVER);
+ return SPELL_FAILED_CUSTOM_ERROR;
+ }
+
+ return SPELL_CAST_OK;
+ }
+
+ void HandleScript(SpellEffIndex /*effIndex*/)
+ {
+ Player* caster = GetCaster()->ToPlayer();
+ uint32 spellId = GetSpellInfo()->Id;
+
+ // learn random explicit discovery recipe (if any)
+ if (uint32 discoveredSpellId = GetExplicitDiscoverySpell(spellId, caster))
+ caster->learnSpell(discoveredSpellId, false);
+
+ caster->UpdateCraftSkill(spellId);
+ }
+
+ void Register() OVERRIDE
+ {
+ OnCheckCast += SpellCheckCastFn(spell_gen_profession_research_SpellScript::CheckRequirement);
+ OnEffectHitTarget += SpellEffectFn(spell_gen_profession_research_SpellScript::HandleScript, EFFECT_1, SPELL_EFFECT_SCRIPT_EFFECT);
+ }
+ };
+
+ SpellScript* GetSpellScript() const OVERRIDE
{
- OnEffectHitTarget += SpellEffectFn(spell_gen_despawn_self_SpellScript::HandleDummy, EFFECT_ALL, SPELL_EFFECT_ANY);
+ return new spell_gen_profession_research_SpellScript();
}
- };
-
- SpellScript* GetSpellScript() const OVERRIDE
- {
- return new spell_gen_despawn_self_SpellScript();
- }
};
-class spell_gen_touch_the_nightmare : public SpellScriptLoader
+class spell_gen_remove_flight_auras : public SpellScriptLoader
{
-public:
- spell_gen_touch_the_nightmare() : SpellScriptLoader("spell_gen_touch_the_nightmare") { }
-
- class spell_gen_touch_the_nightmare_SpellScript : public SpellScript
- {
- PrepareSpellScript(spell_gen_touch_the_nightmare_SpellScript);
+ public:
+ spell_gen_remove_flight_auras() : SpellScriptLoader("spell_gen_remove_flight_auras") { }
- void HandleDamageCalc(SpellEffIndex /*effIndex*/)
+ class spell_gen_remove_flight_auras_SpellScript : public SpellScript
{
- uint32 bp = GetCaster()->GetMaxHealth() * 0.3f;
- SetHitDamage(bp);
- }
+ PrepareSpellScript(spell_gen_remove_flight_auras_SpellScript);
+
+ void HandleScript(SpellEffIndex /*effIndex*/)
+ {
+ if (Unit* target = GetHitUnit())
+ {
+ target->RemoveAurasByType(SPELL_AURA_FLY);
+ target->RemoveAurasByType(SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED);
+ }
+ }
- void Register() OVERRIDE
+ void Register() OVERRIDE
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_gen_remove_flight_auras_SpellScript::HandleScript, EFFECT_1, SPELL_EFFECT_SCRIPT_EFFECT);
+ }
+ };
+
+ SpellScript* GetSpellScript() const OVERRIDE
{
- OnEffectHitTarget += SpellEffectFn(spell_gen_touch_the_nightmare_SpellScript::HandleDamageCalc, EFFECT_2, SPELL_EFFECT_SCHOOL_DAMAGE);
+ return new spell_gen_remove_flight_auras_SpellScript();
}
- };
-
- SpellScript* GetSpellScript() const OVERRIDE
- {
- return new spell_gen_touch_the_nightmare_SpellScript();
- }
};
-class spell_gen_dream_funnel: public SpellScriptLoader
+enum Replenishment
{
-public:
- spell_gen_dream_funnel() : SpellScriptLoader("spell_gen_dream_funnel") { }
+ SPELL_REPLENISHMENT = 57669,
+ SPELL_INFINITE_REPLENISHMENT = 61782
+};
- class spell_gen_dream_funnel_AuraScript : public AuraScript
- {
- PrepareAuraScript(spell_gen_dream_funnel_AuraScript);
+class spell_gen_replenishment : public SpellScriptLoader
+{
+ public:
+ spell_gen_replenishment() : SpellScriptLoader("spell_gen_replenishment") { }
- void HandleEffectCalcAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& canBeRecalculated)
+ class spell_gen_replenishment_AuraScript : public AuraScript
{
- if (GetCaster())
- amount = GetCaster()->GetMaxHealth() * 0.05f;
+ PrepareAuraScript(spell_gen_replenishment_AuraScript);
- canBeRecalculated = false;
- }
+ bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
+ {
+ if (!sSpellMgr->GetSpellInfo(SPELL_REPLENISHMENT) ||
+ !sSpellMgr->GetSpellInfo(SPELL_INFINITE_REPLENISHMENT))
+ return false;
+ return true;
+ }
+
+ bool Load() OVERRIDE
+ {
+ return GetUnitOwner()->GetPower(POWER_MANA);
+ }
+
+ void CalculateAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/)
+ {
+ switch (GetSpellInfo()->Id)
+ {
+ case SPELL_REPLENISHMENT:
+ amount = GetUnitOwner()->GetMaxPower(POWER_MANA) * 0.002f;
+ break;
+ case SPELL_INFINITE_REPLENISHMENT:
+ amount = GetUnitOwner()->GetMaxPower(POWER_MANA) * 0.0025f;
+ break;
+ default:
+ break;
+ }
+ }
+
+ void Register() OVERRIDE
+ {
+ DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_gen_replenishment_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_PERIODIC_ENERGIZE);
+ }
+ };
- void Register() OVERRIDE
+ AuraScript* GetAuraScript() const OVERRIDE
{
- DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_gen_dream_funnel_AuraScript::HandleEffectCalcAmount, EFFECT_0, SPELL_AURA_PERIODIC_HEAL);
- DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_gen_dream_funnel_AuraScript::HandleEffectCalcAmount, EFFECT_2, SPELL_AURA_PERIODIC_DAMAGE);
+ return new spell_gen_replenishment_AuraScript();
}
- };
-
- AuraScript* GetAuraScript() const OVERRIDE
- {
- return new spell_gen_dream_funnel_AuraScript();
- }
};
-enum GenericBandage
+enum SeaforiumSpells
{
- SPELL_RECENTLY_BANDAGED = 11196,
+ SPELL_PLANT_CHARGES_CREDIT_ACHIEVEMENT = 60937
};
-class spell_gen_bandage : public SpellScriptLoader
+class spell_gen_seaforium_blast : public SpellScriptLoader
{
public:
- spell_gen_bandage() : SpellScriptLoader("spell_gen_bandage") { }
+ spell_gen_seaforium_blast() : SpellScriptLoader("spell_gen_seaforium_blast") { }
- class spell_gen_bandage_SpellScript : public SpellScript
+ class spell_gen_seaforium_blast_SpellScript : public SpellScript
{
- PrepareSpellScript(spell_gen_bandage_SpellScript);
+ PrepareSpellScript(spell_gen_seaforium_blast_SpellScript);
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
{
- if (!sSpellMgr->GetSpellInfo(SPELL_RECENTLY_BANDAGED))
+ if (!sSpellMgr->GetSpellInfo(SPELL_PLANT_CHARGES_CREDIT_ACHIEVEMENT))
return false;
return true;
}
- SpellCastResult CheckCast()
+ bool Load() OVERRIDE
{
- if (Unit* target = GetExplTargetUnit())
- {
- if (target->HasAura(SPELL_RECENTLY_BANDAGED))
- return SPELL_FAILED_TARGET_AURASTATE;
- }
- return SPELL_CAST_OK;
+ // OriginalCaster is always available in Spell::prepare
+ return GetOriginalCaster()->GetTypeId() == TYPEID_PLAYER;
}
- void HandleScript()
+ void AchievementCredit(SpellEffIndex /*effIndex*/)
{
- if (Unit* target = GetHitUnit())
- GetCaster()->CastSpell(target, SPELL_RECENTLY_BANDAGED, true);
+ // but in effect handling OriginalCaster can become NULL
+ if (Unit* originalCaster = GetOriginalCaster())
+ if (GameObject* go = GetHitGObj())
+ if (go->GetGOInfo()->type == GAMEOBJECT_TYPE_DESTRUCTIBLE_BUILDING)
+ originalCaster->CastSpell(originalCaster, SPELL_PLANT_CHARGES_CREDIT_ACHIEVEMENT, true);
}
void Register() OVERRIDE
{
- OnCheckCast += SpellCheckCastFn(spell_gen_bandage_SpellScript::CheckCast);
- AfterHit += SpellHitFn(spell_gen_bandage_SpellScript::HandleScript);
+ OnEffectHitTarget += SpellEffectFn(spell_gen_seaforium_blast_SpellScript::AchievementCredit, EFFECT_1, SPELL_EFFECT_GAMEOBJECT_DAMAGE);
}
};
SpellScript* GetSpellScript() const OVERRIDE
{
- return new spell_gen_bandage_SpellScript();
+ return new spell_gen_seaforium_blast_SpellScript();
}
};
-enum GenericLifebloom
+enum SpectatorCheerTrigger
{
- SPELL_HEXLORD_MALACRASS_LIFEBLOOM_FINAL_HEAL = 43422,
- SPELL_TUR_RAGEPAW_LIFEBLOOM_FINAL_HEAL = 52552,
- SPELL_CENARION_SCOUT_LIFEBLOOM_FINAL_HEAL = 53692,
- SPELL_TWISTED_VISAGE_LIFEBLOOM_FINAL_HEAL = 57763,
- SPELL_FACTION_CHAMPIONS_DRU_LIFEBLOOM_FINAL_HEAL = 66094,
+ EMOTE_ONE_SHOT_CHEER = 4,
+ EMOTE_ONE_SHOT_EXCLAMATION = 5,
+ EMOTE_ONE_SHOT_APPLAUD = 21
};
-class spell_gen_lifebloom : public SpellScriptLoader
+uint8 const EmoteArray[3] = { EMOTE_ONE_SHOT_CHEER, EMOTE_ONE_SHOT_EXCLAMATION, EMOTE_ONE_SHOT_APPLAUD };
+
+class spell_gen_spectator_cheer_trigger : public SpellScriptLoader
{
public:
- spell_gen_lifebloom(const char* name, uint32 spellId) : SpellScriptLoader(name), _spellId(spellId) { }
+ spell_gen_spectator_cheer_trigger() : SpellScriptLoader("spell_gen_spectator_cheer_trigger") { }
- class spell_gen_lifebloom_AuraScript : public AuraScript
+ class spell_gen_spectator_cheer_trigger_SpellScript : public SpellScript
{
- PrepareAuraScript(spell_gen_lifebloom_AuraScript);
+ PrepareSpellScript(spell_gen_spectator_cheer_trigger_SpellScript)
- public:
- spell_gen_lifebloom_AuraScript(uint32 spellId) : AuraScript(), _spellId(spellId) { }
+ void HandleDummy(SpellEffIndex /*effIndex*/)
+ {
+ GetCaster()->HandleEmoteCommand(EmoteArray[urand(0, 2)]);
+ }
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ void Register() OVERRIDE
{
- if (!sSpellMgr->GetSpellInfo(_spellId))
- return false;
- return true;
+ OnEffectHitTarget += SpellEffectFn(spell_gen_spectator_cheer_trigger_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
+ };
- void AfterRemove(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
+ SpellScript* GetSpellScript() const OVERRIDE
+ {
+ return new spell_gen_spectator_cheer_trigger_SpellScript();
+ }
+};
+
+class spell_gen_spirit_healer_res : public SpellScriptLoader
+{
+ public:
+ spell_gen_spirit_healer_res(): SpellScriptLoader("spell_gen_spirit_healer_res") { }
+
+ class spell_gen_spirit_healer_res_SpellScript : public SpellScript
+ {
+ PrepareSpellScript(spell_gen_spirit_healer_res_SpellScript);
+
+ bool Load() OVERRIDE
{
- // Final heal only on duration end
- if (GetTargetApplication()->GetRemoveMode() != AURA_REMOVE_BY_EXPIRE && GetTargetApplication()->GetRemoveMode() != AURA_REMOVE_BY_ENEMY_SPELL)
- return;
+ return GetOriginalCaster() && GetOriginalCaster()->GetTypeId() == TYPEID_PLAYER;
+ }
- // final heal
- GetTarget()->CastSpell(GetTarget(), _spellId, true, NULL, aurEff, GetCasterGUID());
+ void HandleDummy(SpellEffIndex /* effIndex */)
+ {
+ Player* originalCaster = GetOriginalCaster()->ToPlayer();
+ if (Unit* target = GetHitUnit())
+ {
+ WorldPacket data(SMSG_SPIRIT_HEALER_CONFIRM, 8);
+ data << uint64(target->GetGUID());
+ originalCaster->GetSession()->SendPacket(&data);
+ }
}
void Register() OVERRIDE
{
- AfterEffectRemove += AuraEffectRemoveFn(spell_gen_lifebloom_AuraScript::AfterRemove, EFFECT_0, SPELL_AURA_PERIODIC_HEAL, AURA_EFFECT_HANDLE_REAL);
+ OnEffectHitTarget += SpellEffectFn(spell_gen_spirit_healer_res_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
-
- private:
- uint32 _spellId;
};
- AuraScript* GetAuraScript() const OVERRIDE
+ SpellScript* GetSpellScript() const OVERRIDE
{
- return new spell_gen_lifebloom_AuraScript(_spellId);
+ return new spell_gen_spirit_healer_res_SpellScript();
}
-
- private:
- uint32 _spellId;
};
enum SummonElemental
@@ -3046,7 +3179,7 @@ class spell_gen_summon_elemental : public SpellScriptLoader
public:
spell_gen_summon_elemental_AuraScript(uint32 spellId) : AuraScript(), _spellId(spellId) { }
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
{
if (!sSpellMgr->GetSpellInfo(_spellId))
return false;
@@ -3087,658 +3220,492 @@ class spell_gen_summon_elemental : public SpellScriptLoader
uint32 _spellId;
};
-enum Mounts
+enum TournamentMountsSpells
{
- SPELL_COLD_WEATHER_FLYING = 54197,
-
- // 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,
+ SPELL_LANCE_EQUIPPED = 62853
};
-class spell_gen_mount : public SpellScriptLoader
+class spell_gen_summon_tournament_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) { }
+ spell_gen_summon_tournament_mount() : SpellScriptLoader("spell_gen_summon_tournament_mount") { }
- class spell_gen_mount_SpellScript : public SpellScript
+ class spell_gen_summon_tournament_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) { }
+ PrepareSpellScript(spell_gen_summon_tournament_mount_SpellScript);
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Validate(SpellInfo const* /*spellEntry*/) OVERRIDE
{
- 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))
+ if (!sSpellMgr->GetSpellInfo(SPELL_LANCE_EQUIPPED))
return false;
return true;
}
- void HandleMount(SpellEffIndex effIndex)
+ SpellCastResult CheckIfLanceEquiped()
{
- PreventHitDefaultEffect(effIndex);
+ if (GetCaster()->IsInDisallowedMountForm())
+ GetCaster()->RemoveAurasByType(SPELL_AURA_MOD_SHAPESHIFT);
- if (Player* target = GetHitPlayer())
+ if (!GetCaster()->HasAura(SPELL_LANCE_EQUIPPED))
{
- // 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 map = GetVirtualMapForMapAndZone(target->GetMapId(), target->GetZoneId());
- if (map == 530 || (map == 571 && target->HasSpell(SPELL_COLD_WEATHER_FLYING)))
- 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)
- {
- PreventHitAura();
- target->CastSpell(target, mount, true);
- }
+ SetCustomCastResultMessage(SPELL_CUSTOM_ERROR_MUST_HAVE_LANCE_EQUIPPED);
+ return SPELL_FAILED_CUSTOM_ERROR;
}
+
+ return SPELL_CAST_OK;
}
void Register() OVERRIDE
{
- OnEffectHitTarget += SpellEffectFn(spell_gen_mount_SpellScript::HandleMount, EFFECT_2, SPELL_EFFECT_SCRIPT_EFFECT);
+ OnCheckCast += SpellCheckCastFn(spell_gen_summon_tournament_mount_SpellScript::CheckIfLanceEquiped);
}
-
- private:
- uint32 _mount0;
- uint32 _mount60;
- uint32 _mount100;
- uint32 _mount150;
- uint32 _mount280;
- uint32 _mount310;
};
SpellScript* GetSpellScript() const OVERRIDE
{
- return new spell_gen_mount_SpellScript(_mount0, _mount60, _mount100, _mount150, _mount280, _mount310);
+ return new spell_gen_summon_tournament_mount_SpellScript();
}
-
- private:
- uint32 _mount0;
- uint32 _mount60;
- uint32 _mount100;
- uint32 _mount150;
- uint32 _mount280;
- uint32 _mount310;
};
-enum FoamSword
-{
- ITEM_FOAM_SWORD_GREEN = 45061,
- ITEM_FOAM_SWORD_PINK = 45176,
- ITEM_FOAM_SWORD_BLUE = 45177,
- ITEM_FOAM_SWORD_RED = 45178,
- ITEM_FOAM_SWORD_YELLOW = 45179,
- SPELL_BONKED = 62991,
- SPELL_FOAM_SWORD_DEFEAT = 62994,
- SPELL_ON_GUARD = 62972,
+enum MountedDuelSpells
+{
+ SPELL_ON_TOURNAMENT_MOUNT = 63034,
+ SPELL_MOUNTED_DUEL = 62875
};
-class spell_gen_upper_deck_create_foam_sword : public SpellScriptLoader
+class spell_gen_tournament_duel : public SpellScriptLoader
{
public:
- spell_gen_upper_deck_create_foam_sword() : SpellScriptLoader("spell_gen_upper_deck_create_foam_sword") { }
+ spell_gen_tournament_duel() : SpellScriptLoader("spell_gen_tournament_duel") { }
- class spell_gen_upper_deck_create_foam_sword_SpellScript : public SpellScript
+ class spell_gen_tournament_duel_SpellScript : public SpellScript
{
- PrepareSpellScript(spell_gen_upper_deck_create_foam_sword_SpellScript);
+ PrepareSpellScript(spell_gen_tournament_duel_SpellScript);
- void HandleScript(SpellEffIndex effIndex)
+ bool Validate(SpellInfo const* /*spellEntry*/) OVERRIDE
{
- if (Player* player = GetHitPlayer())
+ if (!sSpellMgr->GetSpellInfo(SPELL_ON_TOURNAMENT_MOUNT) ||
+ !sSpellMgr->GetSpellInfo(SPELL_MOUNTED_DUEL))
+ return false;
+ return true;
+ }
+
+ void HandleScriptEffect(SpellEffIndex /*effIndex*/)
+ {
+ if (Unit* rider = GetCaster()->GetCharmer())
{
- static uint32 const itemId[5] = { ITEM_FOAM_SWORD_GREEN, ITEM_FOAM_SWORD_PINK, ITEM_FOAM_SWORD_BLUE, ITEM_FOAM_SWORD_RED, ITEM_FOAM_SWORD_YELLOW };
- // player can only have one of these items
- for (uint8 i = 0; i < 5; ++i)
+ if (Player* playerTarget = GetHitPlayer())
{
- if (player->HasItemCount(itemId[i], 1, true))
- return;
+ if (playerTarget->HasAura(SPELL_ON_TOURNAMENT_MOUNT) && playerTarget->GetVehicleBase())
+ rider->CastSpell(playerTarget, SPELL_MOUNTED_DUEL, true);
+ }
+ else if (Unit* unitTarget = GetHitUnit())
+ {
+ if (unitTarget->GetCharmer() && unitTarget->GetCharmer()->GetTypeId() == TYPEID_PLAYER && unitTarget->GetCharmer()->HasAura(SPELL_ON_TOURNAMENT_MOUNT))
+ rider->CastSpell(unitTarget->GetCharmer(), SPELL_MOUNTED_DUEL, true);
}
-
- CreateItem(effIndex, itemId[urand(0, 4)]);
}
}
void Register() OVERRIDE
{
- OnEffectHitTarget += SpellEffectFn(spell_gen_upper_deck_create_foam_sword_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
+ OnEffectHitTarget += SpellEffectFn(spell_gen_tournament_duel_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
SpellScript* GetSpellScript() const OVERRIDE
{
- return new spell_gen_upper_deck_create_foam_sword_SpellScript();
+ return new spell_gen_tournament_duel_SpellScript();
}
};
-class spell_gen_bonked : public SpellScriptLoader
+class spell_gen_tournament_pennant : public SpellScriptLoader
{
public:
- spell_gen_bonked() : SpellScriptLoader("spell_gen_bonked") { }
+ spell_gen_tournament_pennant() : SpellScriptLoader("spell_gen_tournament_pennant") { }
- class spell_gen_bonked_SpellScript : public SpellScript
+ class spell_gen_tournament_pennant_AuraScript : public AuraScript
{
- PrepareSpellScript(spell_gen_bonked_SpellScript);
+ PrepareAuraScript(spell_gen_tournament_pennant_AuraScript);
- void HandleScript(SpellEffIndex /*effIndex*/)
+ bool Load() OVERRIDE
{
- if (Player* target = GetHitPlayer())
- {
- Aura const* aura = GetHitAura();
- if (!(aura && aura->GetStackAmount() == 3))
- return;
-
- target->CastSpell(target, SPELL_FOAM_SWORD_DEFEAT, true);
- target->RemoveAurasDueToSpell(SPELL_BONKED);
+ return GetCaster() && GetCaster()->GetTypeId() == TYPEID_PLAYER;
+ }
- if (Aura const* aura = target->GetAura(SPELL_ON_GUARD))
- {
- if (Item* item = target->GetItemByGuid(aura->GetCastItemGUID()))
- target->DestroyItemCount(item->GetEntry(), 1, true);
- }
- }
+ void HandleApplyEffect(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
+ {
+ if (Unit* caster = GetCaster())
+ if (!caster->GetVehicleBase())
+ caster->RemoveAurasDueToSpell(GetId());
}
void Register() OVERRIDE
{
- OnEffectHitTarget += SpellEffectFn(spell_gen_bonked_SpellScript::HandleScript, EFFECT_1, SPELL_EFFECT_SCRIPT_EFFECT);
+ OnEffectApply += AuraEffectApplyFn(spell_gen_tournament_pennant_AuraScript::HandleApplyEffect, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ AuraScript* GetAuraScript() const OVERRIDE
{
- return new spell_gen_bonked_SpellScript();
+ return new spell_gen_tournament_pennant_AuraScript();
}
};
-class spell_gen_gift_of_naaru : public SpellScriptLoader
+
+
+enum PvPTrinketTriggeredSpells
+{
+ SPELL_WILL_OF_THE_FORSAKEN_COOLDOWN_TRIGGER = 72752,
+ SPELL_WILL_OF_THE_FORSAKEN_COOLDOWN_TRIGGER_WOTF = 72757
+};
+
+class spell_pvp_trinket_wotf_shared_cd : public SpellScriptLoader
{
public:
- spell_gen_gift_of_naaru() : SpellScriptLoader("spell_gen_gift_of_naaru") { }
+ spell_pvp_trinket_wotf_shared_cd() : SpellScriptLoader("spell_pvp_trinket_wotf_shared_cd") { }
- class spell_gen_gift_of_naaru_AuraScript : public AuraScript
+ class spell_pvp_trinket_wotf_shared_cd_SpellScript : public SpellScript
{
- PrepareAuraScript(spell_gen_gift_of_naaru_AuraScript);
+ PrepareSpellScript(spell_pvp_trinket_wotf_shared_cd_SpellScript);
- void CalculateAmount(AuraEffect const* aurEff, int32& amount, bool& /*canBeRecalculated*/)
+ bool Load() OVERRIDE
{
- if (!GetCaster())
- return;
+ return GetCaster()->GetTypeId() == TYPEID_PLAYER;
+ }
- float heal = 0.0f;
- switch (GetSpellInfo()->SpellFamilyName)
- {
- case SPELLFAMILY_MAGE:
- case SPELLFAMILY_WARLOCK:
- case SPELLFAMILY_PRIEST:
- heal = 1.885f * float(GetCaster()->SpellBaseDamageBonusDone(GetSpellInfo()->GetSchoolMask()));
- break;
- case SPELLFAMILY_PALADIN:
- case SPELLFAMILY_SHAMAN:
- heal = std::max(1.885f * float(GetCaster()->SpellBaseDamageBonusDone(GetSpellInfo()->GetSchoolMask())), 1.1f * float(GetCaster()->GetTotalAttackPowerValue(BASE_ATTACK)));
- break;
- case SPELLFAMILY_WARRIOR:
- case SPELLFAMILY_HUNTER:
- case SPELLFAMILY_DEATHKNIGHT:
- heal = 1.1f * float(std::max(GetCaster()->GetTotalAttackPowerValue(BASE_ATTACK), GetCaster()->GetTotalAttackPowerValue(RANGED_ATTACK)));
- break;
- case SPELLFAMILY_GENERIC:
- default:
- break;
- }
+ bool Validate(SpellInfo const* /*spellEntry*/) OVERRIDE
+ {
+ if (!sSpellMgr->GetSpellInfo(SPELL_WILL_OF_THE_FORSAKEN_COOLDOWN_TRIGGER) ||
+ !sSpellMgr->GetSpellInfo(SPELL_WILL_OF_THE_FORSAKEN_COOLDOWN_TRIGGER_WOTF))
+ return false;
+ return true;
+ }
- int32 healTick = floor(heal / aurEff->GetTotalTicks());
- amount += int32(std::max(healTick, 0));
+ void HandleScript()
+ {
+ // This is only needed because spells cast from spell_linked_spell are triggered by default
+ // Spell::SendSpellCooldown() skips all spells with TRIGGERED_IGNORE_SPELL_AND_CATEGORY_CD
+ GetCaster()->ToPlayer()->AddSpellAndCategoryCooldowns(GetSpellInfo(), GetCastItem() ? GetCastItem()->GetEntry() : 0, GetSpell());
}
void Register() OVERRIDE
{
- DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_gen_gift_of_naaru_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_PERIODIC_HEAL);
+ AfterCast += SpellCastFn(spell_pvp_trinket_wotf_shared_cd_SpellScript::HandleScript);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ SpellScript* GetSpellScript() const OVERRIDE
{
- return new spell_gen_gift_of_naaru_AuraScript();
+ return new spell_pvp_trinket_wotf_shared_cd_SpellScript();
}
};
-enum Replenishment
+enum FriendOrFowl
{
- SPELL_REPLENISHMENT = 57669,
- SPELL_INFINITE_REPLENISHMENT = 61782
+ SPELL_TURKEY_VENGEANCE = 25285
};
-class spell_gen_replenishment : public SpellScriptLoader
+class spell_gen_turkey_marker : public SpellScriptLoader
{
public:
- spell_gen_replenishment() : SpellScriptLoader("spell_gen_replenishment") { }
+ spell_gen_turkey_marker() : SpellScriptLoader("spell_gen_turkey_marker") { }
- class spell_gen_replenishment_AuraScript : public AuraScript
+ class spell_gen_turkey_marker_AuraScript : public AuraScript
{
- PrepareAuraScript(spell_gen_replenishment_AuraScript);
+ PrepareAuraScript(spell_gen_turkey_marker_AuraScript);
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ void OnApply(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
{
- if (!sSpellMgr->GetSpellInfo(SPELL_REPLENISHMENT) ||
- !sSpellMgr->GetSpellInfo(SPELL_INFINITE_REPLENISHMENT))
- return false;
- return true;
- }
+ // store stack apply times, so we can pop them while they expire
+ _applyTimes.push_back(getMSTime());
+ Unit* target = GetTarget();
- bool Load() OVERRIDE
- {
- return GetUnitOwner()->GetPower(POWER_MANA);
+ // on stack 15 cast the achievement crediting spell
+ if (GetStackAmount() >= 15)
+ target->CastSpell(target, SPELL_TURKEY_VENGEANCE, true, NULL, aurEff, GetCasterGUID());
}
- void CalculateAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/)
+ void OnPeriodic(AuraEffect const* /*aurEff*/)
{
- switch (GetSpellInfo()->Id)
- {
- case SPELL_REPLENISHMENT:
- amount = GetUnitOwner()->GetMaxPower(POWER_MANA) * 0.002f;
- break;
- case SPELL_INFINITE_REPLENISHMENT:
- amount = GetUnitOwner()->GetMaxPower(POWER_MANA) * 0.0025f;
- break;
- default:
- break;
- }
+ if (_applyTimes.empty())
+ return;
+
+ // pop stack if it expired for us
+ if (_applyTimes.front() + GetMaxDuration() < getMSTime())
+ ModStackAmount(-1, AURA_REMOVE_BY_EXPIRE);
}
void Register() OVERRIDE
{
- DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_gen_replenishment_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_PERIODIC_ENERGIZE);
+ AfterEffectApply += AuraEffectApplyFn(spell_gen_turkey_marker_AuraScript::OnApply, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY, AURA_EFFECT_HANDLE_REAL);
+ OnEffectPeriodic += AuraEffectPeriodicFn(spell_gen_turkey_marker_AuraScript::OnPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY);
}
+
+ std::list<uint32> _applyTimes;
};
AuraScript* GetAuraScript() const OVERRIDE
{
- return new spell_gen_replenishment_AuraScript();
+ return new spell_gen_turkey_marker_AuraScript();
}
};
-enum ServiceUniform
+enum FoamSword
{
- SPELL_SERVICE_UNIFORM = 71450,
-
- MODEL_GOBLIN_MALE = 31002,
- MODEL_GOBLIN_FEMALE = 31003,
+ ITEM_FOAM_SWORD_GREEN = 45061,
+ ITEM_FOAM_SWORD_PINK = 45176,
+ ITEM_FOAM_SWORD_BLUE = 45177,
+ ITEM_FOAM_SWORD_RED = 45178,
+ ITEM_FOAM_SWORD_YELLOW = 45179
};
-class spell_gen_aura_service_uniform : public SpellScriptLoader
+class spell_gen_upper_deck_create_foam_sword : public SpellScriptLoader
{
public:
- spell_gen_aura_service_uniform() : SpellScriptLoader("spell_gen_aura_service_uniform") { }
+ spell_gen_upper_deck_create_foam_sword() : SpellScriptLoader("spell_gen_upper_deck_create_foam_sword") { }
- class spell_gen_aura_service_uniform_AuraScript : public AuraScript
+ class spell_gen_upper_deck_create_foam_sword_SpellScript : public SpellScript
{
- PrepareAuraScript(spell_gen_aura_service_uniform_AuraScript);
-
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
- {
- if (!sSpellMgr->GetSpellInfo(SPELL_SERVICE_UNIFORM))
- return false;
- return true;
- }
+ PrepareSpellScript(spell_gen_upper_deck_create_foam_sword_SpellScript);
- void OnApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
+ void HandleScript(SpellEffIndex effIndex)
{
- // Apply model goblin
- Unit* target = GetTarget();
- if (target->GetTypeId() == TYPEID_PLAYER)
+ if (Player* player = GetHitPlayer())
{
- if (target->getGender() == GENDER_MALE)
- target->SetDisplayId(MODEL_GOBLIN_MALE);
- else
- target->SetDisplayId(MODEL_GOBLIN_FEMALE);
- }
- }
+ static uint32 const itemId[5] = { ITEM_FOAM_SWORD_GREEN, ITEM_FOAM_SWORD_PINK, ITEM_FOAM_SWORD_BLUE, ITEM_FOAM_SWORD_RED, ITEM_FOAM_SWORD_YELLOW };
+ // player can only have one of these items
+ for (uint8 i = 0; i < 5; ++i)
+ {
+ if (player->HasItemCount(itemId[i], 1, true))
+ return;
+ }
- void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
- {
- Unit* target = GetTarget();
- if (target->GetTypeId() == TYPEID_PLAYER)
- target->RestoreDisplayId();
+ CreateItem(effIndex, itemId[urand(0, 4)]);
+ }
}
void Register() OVERRIDE
{
- AfterEffectApply += AuraEffectRemoveFn(spell_gen_aura_service_uniform_AuraScript::OnApply, EFFECT_0, SPELL_AURA_TRANSFORM, AURA_EFFECT_HANDLE_REAL);
- AfterEffectRemove += AuraEffectRemoveFn(spell_gen_aura_service_uniform_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_TRANSFORM, AURA_EFFECT_HANDLE_REAL);
+ OnEffectHitTarget += SpellEffectFn(spell_gen_upper_deck_create_foam_sword_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ SpellScript* GetSpellScript() const OVERRIDE
{
- return new spell_gen_aura_service_uniform_AuraScript();
+ return new spell_gen_upper_deck_create_foam_sword_SpellScript();
}
};
-enum OrcDisguiseSpells
+enum VehicleScaling
{
- SPELL_ORC_DISGUISE_TRIGGER = 45759,
- SPELL_ORC_DISGUISE_MALE = 45760,
- SPELL_ORC_DISGUISE_FEMALE = 45762,
+ SPELL_GEAR_SCALING = 66668
};
-class spell_gen_orc_disguise : public SpellScriptLoader
+class spell_gen_vehicle_scaling : public SpellScriptLoader
{
public:
- spell_gen_orc_disguise() : SpellScriptLoader("spell_gen_orc_disguise") { }
+ spell_gen_vehicle_scaling() : SpellScriptLoader("spell_gen_vehicle_scaling") { }
- class spell_gen_orc_disguise_SpellScript : public SpellScript
+ class spell_gen_vehicle_scaling_AuraScript : public AuraScript
{
- PrepareSpellScript(spell_gen_orc_disguise_SpellScript);
+ PrepareAuraScript(spell_gen_vehicle_scaling_AuraScript);
- bool Validate(SpellInfo const* /*spell*/) OVERRIDE
+ bool Load() OVERRIDE
{
- if (!sSpellMgr->GetSpellInfo(SPELL_ORC_DISGUISE_TRIGGER) || !sSpellMgr->GetSpellInfo(SPELL_ORC_DISGUISE_MALE) ||
- !sSpellMgr->GetSpellInfo(SPELL_ORC_DISGUISE_FEMALE))
- return false;
- return true;
+ return GetCaster() && GetCaster()->GetTypeId() == TYPEID_PLAYER;
}
- void HandleScript(SpellEffIndex /*effIndex*/)
+ void CalculateAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/)
{
Unit* caster = GetCaster();
- if (Player* target = GetHitPlayer())
+ float factor;
+ uint16 baseItemLevel;
+
+ /// @todo Reserach coeffs for different vehicles
+ switch (GetId())
{
- uint8 gender = target->getGender();
- if (!gender)
- caster->CastSpell(target, SPELL_ORC_DISGUISE_MALE, true);
- else
- caster->CastSpell(target, SPELL_ORC_DISGUISE_FEMALE, true);
+ case SPELL_GEAR_SCALING:
+ factor = 1.0f;
+ baseItemLevel = 205;
+ break;
+ default:
+ factor = 1.0f;
+ baseItemLevel = 170;
+ break;
}
+
+ float avgILvl = caster->ToPlayer()->GetAverageItemLevel();
+ if (avgILvl < baseItemLevel)
+ return; /// @todo Research possibility of scaling down
+
+ amount = uint16((avgILvl - baseItemLevel) * factor);
}
void Register() OVERRIDE
{
- OnEffectHitTarget += SpellEffectFn(spell_gen_orc_disguise_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
+ DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_gen_vehicle_scaling_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_MOD_HEALING_PCT);
+ DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_gen_vehicle_scaling_AuraScript::CalculateAmount, EFFECT_1, SPELL_AURA_MOD_DAMAGE_PERCENT_DONE);
+ DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_gen_vehicle_scaling_AuraScript::CalculateAmount, EFFECT_2, SPELL_AURA_MOD_INCREASE_HEALTH_PERCENT);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ AuraScript* GetAuraScript() const OVERRIDE
{
- return new spell_gen_orc_disguise_SpellScript();
+ return new spell_gen_vehicle_scaling_AuraScript();
}
};
-enum WhisperGulchYoggSaronWhisper
+enum VendorBarkTrigger
{
- SPELL_YOGG_SARON_WHISPER_DUMMY = 29072
+ NPC_AMPHITHEATER_VENDOR = 30098,
+ SAY_AMPHITHEATER_VENDOR = 0
};
-class spell_gen_whisper_gulch_yogg_saron_whisper : public SpellScriptLoader
+class spell_gen_vendor_bark_trigger : public SpellScriptLoader
{
public:
- spell_gen_whisper_gulch_yogg_saron_whisper() : SpellScriptLoader("spell_gen_whisper_gulch_yogg_saron_whisper") { }
+ spell_gen_vendor_bark_trigger() : SpellScriptLoader("spell_gen_vendor_bark_trigger") { }
- class spell_gen_whisper_gulch_yogg_saron_whisper_AuraScript : public AuraScript
+ class spell_gen_vendor_bark_trigger_SpellScript : public SpellScript
{
- PrepareAuraScript(spell_gen_whisper_gulch_yogg_saron_whisper_AuraScript);
-
- bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
- {
- if (!sSpellMgr->GetSpellInfo(SPELL_YOGG_SARON_WHISPER_DUMMY))
- return false;
- return true;
- }
+ PrepareSpellScript(spell_gen_vendor_bark_trigger_SpellScript)
- void HandleEffectPeriodic(AuraEffect const* /*aurEff*/)
+ void HandleDummy(SpellEffIndex /* effIndex */)
{
- PreventDefaultAction();
- GetTarget()->CastSpell((Unit*)NULL, SPELL_YOGG_SARON_WHISPER_DUMMY, true);
+ if (Creature* vendor = GetCaster()->ToCreature())
+ if (vendor->GetEntry() == NPC_AMPHITHEATER_VENDOR)
+ vendor->AI()->Talk(SAY_AMPHITHEATER_VENDOR);
}
void Register() OVERRIDE
{
- OnEffectPeriodic += AuraEffectPeriodicFn(spell_gen_whisper_gulch_yogg_saron_whisper_AuraScript::HandleEffectPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY);
+ OnEffectHitTarget += SpellEffectFn(spell_gen_vendor_bark_trigger_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
- AuraScript* GetAuraScript() const OVERRIDE
+ SpellScript* GetSpellScript() const OVERRIDE
{
- return new spell_gen_whisper_gulch_yogg_saron_whisper_AuraScript();
+ return new spell_gen_vendor_bark_trigger_SpellScript();
}
-};
-enum SpectatorCheerTrigger
-{
- EMOTE_ONE_SHOT_CHEER = 4,
- EMOTE_ONE_SHOT_EXCLAMATION = 5,
- EMOTE_ONE_SHOT_APPLAUD = 21
};
-uint8 const EmoteArray[3] = { EMOTE_ONE_SHOT_CHEER, EMOTE_ONE_SHOT_EXCLAMATION, EMOTE_ONE_SHOT_APPLAUD };
-
-class spell_gen_spectator_cheer_trigger : public SpellScriptLoader
+class spell_gen_wg_water : public SpellScriptLoader
{
public:
- spell_gen_spectator_cheer_trigger() : SpellScriptLoader("spell_gen_spectator_cheer_trigger") { }
+ spell_gen_wg_water() : SpellScriptLoader("spell_gen_wg_water") { }
- class spell_gen_spectator_cheer_trigger_SpellScript : public SpellScript
+ class spell_gen_wg_water_SpellScript : public SpellScript
{
- PrepareSpellScript(spell_gen_spectator_cheer_trigger_SpellScript)
+ PrepareSpellScript(spell_gen_wg_water_SpellScript);
- void HandleDummy(SpellEffIndex /*effIndex*/)
+ SpellCastResult CheckCast()
{
- GetCaster()->HandleEmoteCommand(EmoteArray[urand(0, 2)]);
+ if (!GetSpellInfo()->CheckTargetCreatureType(GetCaster()))
+ return SPELL_FAILED_DONT_REPORT;
+ return SPELL_CAST_OK;
}
void Register() OVERRIDE
{
- OnEffectHitTarget += SpellEffectFn(spell_gen_spectator_cheer_trigger_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
+ OnCheckCast += SpellCheckCastFn(spell_gen_wg_water_SpellScript::CheckCast);
}
};
SpellScript* GetSpellScript() const OVERRIDE
{
- return new spell_gen_spectator_cheer_trigger_SpellScript();
+ return new spell_gen_wg_water_SpellScript();
}
-
};
-enum VendorBarkTrigger
-
+enum WhisperGulchYoggSaronWhisper
{
- NPC_AMPHITHEATER_VENDOR = 30098,
- SAY_AMPHITHEATER_VENDOR = 0
+ SPELL_YOGG_SARON_WHISPER_DUMMY = 29072
};
-class spell_gen_vendor_bark_trigger : public SpellScriptLoader
+class spell_gen_whisper_gulch_yogg_saron_whisper : public SpellScriptLoader
{
public:
- spell_gen_vendor_bark_trigger() : SpellScriptLoader("spell_gen_vendor_bark_trigger") { }
+ spell_gen_whisper_gulch_yogg_saron_whisper() : SpellScriptLoader("spell_gen_whisper_gulch_yogg_saron_whisper") { }
- class spell_gen_vendor_bark_trigger_SpellScript : public SpellScript
+ class spell_gen_whisper_gulch_yogg_saron_whisper_AuraScript : public AuraScript
{
- PrepareSpellScript(spell_gen_vendor_bark_trigger_SpellScript)
+ PrepareAuraScript(spell_gen_whisper_gulch_yogg_saron_whisper_AuraScript);
- void HandleDummy(SpellEffIndex /* effIndex */)
+ bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
{
- if (Creature* vendor = GetCaster()->ToCreature())
- if (vendor->GetEntry() == NPC_AMPHITHEATER_VENDOR)
- vendor->AI()->Talk(SAY_AMPHITHEATER_VENDOR);
+ if (!sSpellMgr->GetSpellInfo(SPELL_YOGG_SARON_WHISPER_DUMMY))
+ return false;
+ return true;
+ }
+
+ void HandleEffectPeriodic(AuraEffect const* /*aurEff*/)
+ {
+ PreventDefaultAction();
+ GetTarget()->CastSpell((Unit*)NULL, SPELL_YOGG_SARON_WHISPER_DUMMY, true);
}
void Register() OVERRIDE
{
- OnEffectHitTarget += SpellEffectFn(spell_gen_vendor_bark_trigger_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
+ OnEffectPeriodic += AuraEffectPeriodicFn(spell_gen_whisper_gulch_yogg_saron_whisper_AuraScript::HandleEffectPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY);
}
};
- SpellScript* GetSpellScript() const OVERRIDE
+ AuraScript* GetAuraScript() const OVERRIDE
{
- return new spell_gen_vendor_bark_trigger_SpellScript();
+ return new spell_gen_whisper_gulch_yogg_saron_whisper_AuraScript();
}
-
};
void AddSC_generic_spell_scripts()
{
new spell_gen_absorb0_hitlimit1();
new spell_gen_adaptive_warding();
+ new spell_gen_allow_cast_from_item_only();
+ new spell_gen_animal_blood();
new spell_gen_aura_of_anger();
+ new spell_gen_aura_service_uniform();
new spell_gen_av_drekthar_presence();
+ new spell_gen_bandage();
+ new spell_gen_bonked();
+ new spell_gen_break_shield("spell_gen_break_shield");
+ new spell_gen_break_shield("spell_gen_tournament_counterattack");
new spell_gen_burn_brutallus();
new spell_gen_cannibalize();
- new spell_gen_create_lance();
- new spell_gen_netherbloom();
- new spell_gen_nightmare_vine();
- new spell_gen_obsidian_armor();
- new spell_gen_parachute();
- new spell_gen_pet_summoned();
- new spell_gen_remove_flight_auras();
- new spell_creature_permanent_feign_death();
- new spell_pvp_trinket_wotf_shared_cd();
- new spell_gen_animal_blood();
- new spell_gen_divine_storm_cd_reset();
- new spell_gen_parachute_ic();
- new spell_gen_gunship_portal();
- new spell_gen_dungeon_credit();
- new spell_gen_profession_research();
- new spell_generic_clone();
- new spell_generic_clone_weapon();
+ new spell_gen_chaos_blast();
+ new spell_gen_clone();
+ new spell_gen_clone_weapon();
new spell_gen_clone_weapon_aura();
- new spell_gen_seaforium_blast();
- new spell_gen_turkey_marker();
- new spell_gen_lifeblood();
- new spell_gen_magic_rooster();
- new spell_gen_allow_cast_from_item_only();
- new spell_gen_launch();
- new spell_gen_vehicle_scaling();
- new spell_gen_oracle_wolvar_reputation();
- new spell_gen_damage_reduction_aura();
- new spell_gen_dummy_trigger();
- new spell_gen_spirit_healer_res();
- new spell_gen_gadgetzan_transporter_backfire();
- new spell_gen_gnomish_transporter();
+ new spell_gen_count_pct_from_max_hp("spell_gen_default_count_pct_from_max_hp");
+ new spell_gen_count_pct_from_max_hp("spell_gen_50pct_count_pct_from_max_hp", 50);
+ new spell_gen_count_pct_from_max_hp("spell_gen_30pct_count_pct_from_max_hp", 30);
+ new spell_gen_create_lance();
+ new spell_gen_creature_permanent_feign_death();
new spell_gen_dalaran_disguise("spell_gen_sunreaver_disguise");
new spell_gen_dalaran_disguise("spell_gen_silver_covenant_disguise");
- new spell_gen_elune_candle();
- new spell_gen_break_shield("spell_gen_break_shield");
- new spell_gen_break_shield("spell_gen_tournament_counterattack");
- new spell_gen_mounted_charge();
+ new spell_gen_damage_reduction_aura();
new spell_gen_defend();
- new spell_gen_tournament_duel();
- new spell_gen_summon_tournament_mount();
- new spell_gen_on_tournament_mount();
- new spell_gen_tournament_pennant();
- new spell_gen_chaos_blast();
- new spell_gen_ds_flush_knockback();
- new spell_gen_wg_water();
- new spell_gen_count_pct_from_max_hp("spell_gen_default_count_pct_from_max_hp");
- new spell_gen_count_pct_from_max_hp("spell_gen_50pct_count_pct_from_max_hp", 50);
new spell_gen_despawn_self();
- new spell_gen_touch_the_nightmare();
+ new spell_gen_divine_storm_cd_reset();
new spell_gen_dream_funnel();
- new spell_gen_bandage();
+ new spell_gen_ds_flush_knockback();
+ new spell_gen_dummy_trigger();
+ new spell_gen_dungeon_credit();
+ new spell_gen_elune_candle();
+ new spell_gen_gadgetzan_transporter_backfire();
+ new spell_gen_gift_of_naaru();
+ new spell_gen_gnomish_transporter();
+ new spell_gen_gunship_portal();
+ new spell_gen_launch();
+ new spell_gen_lifeblood();
new spell_gen_lifebloom("spell_hexlord_lifebloom", SPELL_HEXLORD_MALACRASS_LIFEBLOOM_FINAL_HEAL);
new spell_gen_lifebloom("spell_tur_ragepaw_lifebloom", SPELL_TUR_RAGEPAW_LIFEBLOOM_FINAL_HEAL);
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_magic_rooster();
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);
@@ -3747,13 +3714,32 @@ void AddSC_generic_spell_scripts()
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);
- new spell_gen_upper_deck_create_foam_sword();
- new spell_gen_bonked();
- new spell_gen_gift_of_naaru();
- new spell_gen_replenishment();
- new spell_gen_aura_service_uniform();
+ new spell_gen_mounted_charge();
+ new spell_gen_netherbloom();
+ new spell_gen_nightmare_vine();
+ new spell_gen_obsidian_armor();
+ new spell_gen_on_tournament_mount();
+ new spell_gen_oracle_wolvar_reputation();
new spell_gen_orc_disguise();
- new spell_gen_whisper_gulch_yogg_saron_whisper();
+ new spell_gen_parachute();
+ new spell_gen_parachute_ic();
+ new spell_gen_pet_summoned();
+ new spell_gen_profession_research();
+ new spell_gen_remove_flight_auras();
+ new spell_gen_replenishment();
+ new spell_gen_seaforium_blast();
new spell_gen_spectator_cheer_trigger();
+ new spell_gen_spirit_healer_res();
+ 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_summon_tournament_mount();
+ new spell_gen_tournament_duel();
+ new spell_gen_tournament_pennant();
+ new spell_pvp_trinket_wotf_shared_cd();
+ new spell_gen_turkey_marker();
+ new spell_gen_upper_deck_create_foam_sword();
+ new spell_gen_vehicle_scaling();
new spell_gen_vendor_bark_trigger();
+ new spell_gen_wg_water();
+ new spell_gen_whisper_gulch_yogg_saron_whisper();
}
diff --git a/src/server/scripts/World/go_scripts.cpp b/src/server/scripts/World/go_scripts.cpp
index 779308954d0..87533fbe47d 100644
--- a/src/server/scripts/World/go_scripts.cpp
+++ b/src/server/scripts/World/go_scripts.cpp
@@ -1309,41 +1309,41 @@ public:
void AddSC_go_scripts()
{
- new go_cat_figurine;
- new go_barov_journal;
- new go_field_repair_bot_74A;
- new go_gilded_brazier;
- new go_orb_of_command;
- new go_shrine_of_the_birds;
- new go_southfury_moonstone;
- new go_tablet_of_madness;
- new go_tablet_of_the_seven;
- new go_jump_a_tron;
- new go_ethereum_prison;
- new go_ethereum_stasis;
- new go_resonite_cask;
- new go_sacred_fire_of_life;
- new go_tele_to_dalaran_crystal;
- new go_tele_to_violet_stand;
- new go_fel_crystalforge;
- new go_bashir_crystalforge;
- new go_matrix_punchograph;
- new go_scourge_cage;
- new go_arcane_prison;
- new go_blood_filled_orb;
- new go_jotunheim_cage;
- new go_table_theka;
- new go_inconspicuous_landmark;
- new go_ethereal_teleport_pad;
- new go_soulwell;
- new go_tadpole_cage;
- new go_dragonflayer_cage;
- new go_amberpine_outhouse;
- new go_hive_pod;
- new go_massive_seaforium_charge;
- new go_gjalerbron_cage;
- new go_large_gjalerbron_cage;
- new go_veil_skith_cage;
- new go_frostblade_shrine;
- new go_midsummer_bonfire;
+ new go_cat_figurine();
+ new go_barov_journal();
+ new go_field_repair_bot_74A();
+ new go_gilded_brazier();
+ new go_orb_of_command();
+ new go_shrine_of_the_birds();
+ new go_southfury_moonstone();
+ new go_tablet_of_madness();
+ new go_tablet_of_the_seven();
+ new go_jump_a_tron();
+ new go_ethereum_prison();
+ new go_ethereum_stasis();
+ new go_resonite_cask();
+ new go_sacred_fire_of_life();
+ new go_tele_to_dalaran_crystal();
+ new go_tele_to_violet_stand();
+ new go_fel_crystalforge();
+ new go_bashir_crystalforge();
+ new go_matrix_punchograph();
+ new go_scourge_cage();
+ new go_arcane_prison();
+ new go_blood_filled_orb();
+ new go_jotunheim_cage();
+ new go_table_theka();
+ new go_inconspicuous_landmark();
+ new go_ethereal_teleport_pad();
+ new go_soulwell();
+ new go_tadpole_cage();
+ new go_dragonflayer_cage();
+ new go_amberpine_outhouse();
+ new go_hive_pod();
+ new go_massive_seaforium_charge();
+ new go_gjalerbron_cage();
+ new go_large_gjalerbron_cage();
+ new go_veil_skith_cage();
+ new go_frostblade_shrine();
+ new go_midsummer_bonfire();
}