aboutsummaryrefslogtreecommitdiff
path: root/src/server/scripts/Spells
diff options
context:
space:
mode:
authorMeji <alvaromegias_46@hotmail.com>2021-12-25 15:27:58 +0100
committerGitHub <noreply@github.com>2021-12-25 15:27:58 +0100
commit924182f692bde38d8fed85d5dbe7531a09790501 (patch)
treeec5b5c5842315ad391d1da9cd236952159a03fd4 /src/server/scripts/Spells
parent8ac0388870519a085115454783dafed873c1535f (diff)
Core/BattlePets: Misc fixes (#27446)
* Added script for "Summon Battle Pet" spell (118301). * Set the saved display of the battle pet when summoning it. * If a summon has SummonPropertiesFlags::SummonFromBattlePetJournal it will remove NpcFlag UNIT_NPC_FLAG_WILD_BATTLE_PET (Wild battle pets). * When a creature is summoned with SummonTitle::Companion, it will check to see if it has SummonPropertiesFlags::SummonFromBattlePetJournal before updating the battle pet's update fields. (If you have a summoned battle pet and summon a creature with that SummonTitle, it will incorrectly update the battle pet's update fields with the summoned battle pet's data). * Implemented SummonPropertiesFlags::UseCreatureLevel. If a summon has this flag, it will use the owner's level (If the summon doesn't have SummonProperties it will always use the selected level).
Diffstat (limited to 'src/server/scripts/Spells')
-rw-r--r--src/server/scripts/Spells/spell_generic.cpp30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp
index 70a41f04a98..b0d1593e4f3 100644
--- a/src/server/scripts/Spells/spell_generic.cpp
+++ b/src/server/scripts/Spells/spell_generic.cpp
@@ -34,6 +34,7 @@
#include "LFGMgr.h"
#include "Log.h"
#include "NPCPackets.h"
+#include "ObjectMgr.h"
#include "Pet.h"
#include "ReputationMgr.h"
#include "SkillDiscovery.h"
@@ -4586,6 +4587,34 @@ class spell_defender_of_azeroth_speak_with_mograine : public SpellScript
}
};
+// 118301 - Summon Battle Pet
+class spell_summon_battle_pet : public SpellScript
+{
+ PrepareSpellScript(spell_summon_battle_pet);
+
+ void HandleSummon(SpellEffIndex effIndex)
+ {
+ uint32 creatureId = uint32(GetSpellValue()->EffectBasePoints[effIndex]);
+ if (sObjectMgr->GetCreatureTemplate(creatureId))
+ {
+ PreventHitDefaultEffect(effIndex);
+
+ Unit* caster = GetCaster();
+ SummonPropertiesEntry const* properties = sSummonPropertiesStore.LookupEntry(uint32(GetEffectInfo().MiscValueB));
+ uint32 duration = uint32(GetSpellInfo()->CalcDuration(caster));
+ Position pos = GetHitDest()->GetPosition();
+
+ if (Creature* summon = caster->GetMap()->SummonCreature(creatureId, pos, properties, duration, caster, GetSpellInfo()->Id))
+ summon->SetImmuneToAll(true);
+ }
+ }
+
+ void Register() override
+ {
+ OnEffectHit += SpellEffectFn(spell_summon_battle_pet::HandleSummon, EFFECT_0, SPELL_EFFECT_SUMMON);
+ }
+};
+
void AddSC_generic_spell_scripts()
{
RegisterAuraScript(spell_gen_absorb0_hitlimit1);
@@ -4722,4 +4751,5 @@ void AddSC_generic_spell_scripts()
RegisterAuraScript(spell_gen_impatient_mind);
RegisterSpellScript(spell_defender_of_azeroth_death_gate_selector);
RegisterSpellScript(spell_defender_of_azeroth_speak_with_mograine);
+ RegisterSpellScript(spell_summon_battle_pet);
}