diff options
| -rw-r--r-- | sql/base/world_database.sql | 1 | ||||
| -rw-r--r-- | sql/updates/9529_world_spell_script_names.sql | 2 | ||||
| -rw-r--r-- | src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp | 4 | ||||
| -rw-r--r-- | src/server/game/Spells/SpellEffects.cpp | 32 | ||||
| -rw-r--r-- | src/server/scripts/Spells/spell_generic.cpp | 96 |
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; } |
