diff options
| author | QAston <qaston@gmail.com> | 2011-06-11 12:42:01 +0200 |
|---|---|---|
| committer | QAston <qaston@gmail.com> | 2011-06-11 12:42:01 +0200 |
| commit | 677cbbb93aee09602d8c13ab2070412259c6a2e0 (patch) | |
| tree | 86ead17cab4bb31fe5bb700e9c0e4ed5a468f99f /src/server/scripts/Spells | |
| parent | 252ac95e1b10bb266cb1639974fc3f42eaf4e901 (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.cpp | 7 | ||||
| -rw-r--r-- | src/server/scripts/Spells/spell_quest.cpp | 28 |
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; } } } |
