aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/base/world_database.sql1
-rw-r--r--sql/updates/9529_world_spell_script_names.sql2
-rw-r--r--src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp4
-rw-r--r--src/server/game/Spells/SpellEffects.cpp32
-rw-r--r--src/server/scripts/Spells/spell_generic.cpp96
5 files changed, 85 insertions, 50 deletions
diff --git a/sql/base/world_database.sql b/sql/base/world_database.sql
index ce6b967bb17..6188fcd3752 100644
--- a/sql/base/world_database.sql
+++ b/sql/base/world_database.sql
@@ -14747,6 +14747,7 @@ LOCK TABLES `spell_script_names` WRITE;
INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES
-- generic
( 58601, 'spell_gen_remove_flight_auras'),
+( 6962, 'spell_gen_pet_summoned'),
-- instances
( 69057, 'spell_marrowgar_bone_spike_graveyard'),
( 69140, 'spell_marrowgar_coldflame'),
diff --git a/sql/updates/9529_world_spell_script_names.sql b/sql/updates/9529_world_spell_script_names.sql
new file mode 100644
index 00000000000..e312dd017ad
--- /dev/null
+++ b/sql/updates/9529_world_spell_script_names.sql
@@ -0,0 +1,2 @@
+DELETE FROM `spell_script_names` WHERE `spell_id`=6962 AND `ScriptName`='spell_gen_pet_summoned';
+INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES (6962, 'spell_gen_pet_summoned');
diff --git a/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp
index 138469477db..5afd4c04547 100644
--- a/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp
+++ b/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp
@@ -145,11 +145,11 @@ FleeingMovementGenerator<T>::_getPoint(T &owner, float &x, float &y, float &z)
distance /= 4;
break;
case 15:
- angle = i_cur_angle + static_cast<float>(M_PI*3/4.0f);
+ angle = i_cur_angle + static_cast<float>(M_PI*3/4);
distance /= 2;
break;
case 16:
- angle = i_cur_angle - static_cast<float>(M_PI*3/4.0f);
+ angle = i_cur_angle - static_cast<float>(M_PI*3/4);
distance /= 2;
break;
case 17:
diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp
index 6c14c46348b..a7d2dfbacf1 100644
--- a/src/server/game/Spells/SpellEffects.cpp
+++ b/src/server/game/Spells/SpellEffects.cpp
@@ -4624,38 +4624,6 @@ void Spell::EffectScriptEffect(uint32 effIndex)
{
switch(m_spellInfo->Id)
{
- case 6962:
- {
- if (m_caster->GetTypeId() != TYPEID_PLAYER)
- return;
-
- Player* plr = m_caster->ToPlayer();
- if (plr && plr->GetLastPetNumber())
- {
- PetType NewPetType = (plr->getClass() == CLASS_HUNTER) ? HUNTER_PET : SUMMON_PET;
- if (Pet* NewPet = new Pet(plr,NewPetType))
- {
- if (NewPet->LoadPetFromDB(plr, 0, plr->GetLastPetNumber(), true))
- {
- NewPet->SetHealth(NewPet->GetMaxHealth());
- NewPet->SetPower(NewPet->getPowerType(),NewPet->GetMaxPower(NewPet->getPowerType()));
-
- switch (NewPet->GetEntry())
- {
- case 11859:
- case 89:
- NewPet->SetEntry(416);
- break;
- default:
- break;
- }
- }
- else
- delete NewPet;
- }
- }
- return;
- }
// Glyph of Backstab
case 63975:
{
diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp
index 1cca347003a..53333bc8470 100644
--- a/src/server/scripts/Spells/spell_generic.cpp
+++ b/src/server/scripts/Spells/spell_generic.cpp
@@ -24,35 +24,99 @@
#include "ScriptPCH.h"
+enum NPCEntries
+{
+ NPC_DOOMGUARD = 11859,
+ NPC_INFERNAL = 89,
+ NPC_IMP = 416,
+};
+
class spell_gen_remove_flight_auras : public SpellHandlerScript
{
- public:
- spell_gen_remove_flight_auras() : SpellHandlerScript("spell_gen_remove_flight_auras") {}
+public:
+ spell_gen_remove_flight_auras() : SpellHandlerScript("spell_gen_remove_flight_auras") {}
- class spell_gen_remove_flight_auras_SpellScript : public SpellScript
+ class spell_gen_remove_flight_auras_SpellScript : public SpellScript
+ {
+ void HandleScript(SpellEffIndex effIndex)
{
- void HandleScript(SpellEffIndex effIndex)
- {
- Unit *target = GetHitUnit();
- if (!target)
- return;
- target->RemoveAurasByType(SPELL_AURA_FLY);
- target->RemoveAurasByType(SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED);
- }
+ Unit *target = GetHitUnit();
+ if (!target)
+ return;
+ target->RemoveAurasByType(SPELL_AURA_FLY);
+ target->RemoveAurasByType(SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED);
+ }
- void Register()
+ void Register()
+ {
+ EffectHandlers += EffectHandlerFn(spell_gen_remove_flight_auras_SpellScript::HandleScript, EFFECT_1, SPELL_EFFECT_SCRIPT_EFFECT);
+ }
+ };
+
+ SpellScript* GetSpellScript() const
+ {
+ return new spell_gen_remove_flight_auras_SpellScript;
+ }
+};
+
+class spell_gen_pet_summoned : public SpellHandlerScript
+{
+public:
+ spell_gen_pet_summoned() : SpellHandlerScript("spell_gen_pet_summoned") { }
+
+ class spell_gen_pet_summonedSpellScript : public SpellScript
+ {
+ void HandleScript(SpellEffIndex effIndex)
+ {
+ Unit *caster = GetCaster();
+ if (caster->GetTypeId() != TYPEID_PLAYER)
+ return;
+
+ Player* plr = caster->ToPlayer();
+ if (plr && plr->GetLastPetNumber())
{
- EffectHandlers += EffectHandlerFn(spell_gen_remove_flight_auras_SpellScript::HandleScript, EFFECT_1, SPELL_EFFECT_SCRIPT_EFFECT);
+ PetType NewPetType = (plr->getClass() == CLASS_HUNTER) ? HUNTER_PET : SUMMON_PET;
+ if (Pet* NewPet = new Pet(plr, NewPetType))
+ {
+ if (NewPet->LoadPetFromDB(plr, 0, plr->GetLastPetNumber(), true))
+ {
+ // revive the pet if it is dead
+ if (NewPet->getDeathState() == DEAD)
+ NewPet->setDeathState(ALIVE);
+
+ NewPet->SetHealth(NewPet->GetMaxHealth());
+ 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;
+ }
}
- };
+ }
- SpellScript* GetSpellScript() const
+ void Register()
{
- return new spell_gen_remove_flight_auras_SpellScript;
+ EffectHandlers += EffectHandlerFn(spell_gen_pet_summonedSpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
+ };
+
+ SpellScript* GetSpellScript() const
+ {
+ return new spell_gen_pet_summonedSpellScript;
+ }
};
void AddSC_generic_spell_scripts()
{
new spell_gen_remove_flight_auras;
+ new spell_gen_pet_summoned;
}