aboutsummaryrefslogtreecommitdiff
path: root/src/server/scripts/Spells
diff options
context:
space:
mode:
authorQAston <qaston@gmail.com>2011-06-11 12:42:01 +0200
committerQAston <qaston@gmail.com>2011-06-11 12:42:01 +0200
commit677cbbb93aee09602d8c13ab2070412259c6a2e0 (patch)
tree86ead17cab4bb31fe5bb700e9c0e4ed5a468f99f /src/server/scripts/Spells
parent252ac95e1b10bb266cb1639974fc3f42eaf4e901 (diff)
Scripts: Fix some crashes occuring due to unsafe use of AuraScript::GetCaster() method.
There's "returns unit which casted the aura or NULL if not avalible" written in description of the method, but who cares...
Diffstat (limited to 'src/server/scripts/Spells')
-rw-r--r--src/server/scripts/Spells/spell_hunter.cpp7
-rw-r--r--src/server/scripts/Spells/spell_quest.cpp28
2 files changed, 19 insertions, 16 deletions
diff --git a/src/server/scripts/Spells/spell_hunter.cpp b/src/server/scripts/Spells/spell_hunter.cpp
index f30ced7b4b0..0b27375fcf3 100644
--- a/src/server/scripts/Spells/spell_hunter.cpp
+++ b/src/server/scripts/Spells/spell_hunter.cpp
@@ -363,12 +363,17 @@ public:
if (aurEff->GetAmount() > 0)
return;
+ Unit * caster = GetCaster();
+
+ if (!caster)
+ return;
+
uint32 spellId = SPELL_SNIPER_TRAINING_BUFF_R1 + GetId() - SPELL_SNIPER_TRAINING_R1;
Unit * pTarget = GetTarget();
if (!pTarget->HasAura(spellId))
{
SpellEntry const * triggeredSpellInfo = sSpellStore.LookupEntry(spellId);
- Unit* triggerCaster = GetTriggeredSpellCaster(triggeredSpellInfo, GetCaster(), pTarget);
+ Unit* triggerCaster = GetTriggeredSpellCaster(triggeredSpellInfo, caster, pTarget);
triggerCaster->CastSpell(pTarget, triggeredSpellInfo, true, 0, aurEff);
}
}
diff --git a/src/server/scripts/Spells/spell_quest.cpp b/src/server/scripts/Spells/spell_quest.cpp
index 7bb8426b35a..8c0f17d8d95 100644
--- a/src/server/scripts/Spells/spell_quest.cpp
+++ b/src/server/scripts/Spells/spell_quest.cpp
@@ -644,23 +644,21 @@ public:
{
if (Unit* caster = GetCaster())
{
- if (Unit* target = GetTarget())
+ Unit* target = GetTarget();
+ if (Player* player = caster->GetCharmerOrOwnerPlayerOrPlayerItself())
{
- if (Player* player = caster->GetCharmerOrOwnerPlayerOrPlayerItself())
+ switch(target->GetEntry())
{
- switch(target->GetEntry())
- {
- case NPC_FROSTWORG:
- target->CastSpell(player, SPELL_FROSTWORG_CREDIT, true);
- target->CastSpell(target, SPELL_IMMOLATION, true);
- target->CastSpell(target, SPELL_ABLAZE, true);
- break;
- case NPC_FROSTGIANT:
- target->CastSpell(player, SPELL_FROSTGIANT_CREDIT, true);
- target->CastSpell(target, SPELL_IMMOLATION, true);
- target->CastSpell(target, SPELL_ABLAZE, true);
- break;
- }
+ case NPC_FROSTWORG:
+ target->CastSpell(player, SPELL_FROSTWORG_CREDIT, true);
+ target->CastSpell(target, SPELL_IMMOLATION, true);
+ target->CastSpell(target, SPELL_ABLAZE, true);
+ break;
+ case NPC_FROSTGIANT:
+ target->CastSpell(player, SPELL_FROSTGIANT_CREDIT, true);
+ target->CastSpell(target, SPELL_IMMOLATION, true);
+ target->CastSpell(target, SPELL_ABLAZE, true);
+ break;
}
}
}