Core/Spells: Fix Shaman talent Nature's Guardian and rewrite fix for fc52f08. Fixes some spells not triggering.

This commit is contained in:
Machiavelli
2011-08-07 21:19:27 +02:00
parent e6eb85c586
commit 2d3f51e6e5
5 changed files with 41 additions and 68 deletions
+38
View File
@@ -8470,6 +8470,27 @@ bool Unit::HandleProcTriggerSpell(Unit* victim, uint32 damage, AuraEffect* trigg
target = victim;
break;
}
// Soul Preserver Trinket
case 60510:
{
switch (GetClass())
{
case CLASS_DRUID:
trigger_spell_id = 60512;
break;
case CLASS_PALADIN:
trigger_spell_id = 60513;
break;
case CLASS_PRIEST:
trigger_spell_id = 60514;
break;
case CLASS_SHAMAN:
trigger_spell_id = 60515;
break;
}
target = this;
}
default:
// Illumination
if (auraSpellInfo->SpellIconID == 241)
@@ -8538,6 +8559,23 @@ bool Unit::HandleProcTriggerSpell(Unit* victim, uint32 damage, AuraEffect* trigg
target = this;
break;
}
case 30881: // Nature's Guardian Rank 1
case 30883: // Nature's Guardian Rank 2
case 30884: // Nature's Guardian Rank 3
case 30885: // Nature's Guardian Rank 4
case 30886: // Nature's Guardian Rank 5
{
if (GetHealthPct() < 30)
{
basepoints0 = int32(auraSpellInfo->Effects[EFFECT_0].CalcValue() * GetMaxHealth() / 100.0f);
target = this;
trigger_spell_id = 31616;
// TODO: Threat part
}
else
return false;
break;
}
default:
{
// Lightning Shield (overwrite non existing triggered spell call in spell.dbc
@@ -1206,70 +1206,6 @@ class spell_gen_launch : public SpellScriptLoader
}
};
class spell_gen_soul_preserver : public SpellScriptLoader
{
enum Spells
{
SOUL_PRESERVER = 60510,
HEALING_TRANCE_DRUID = 60512,
HEALING_TRANCE_PALADIN = 60513,
HEALING_TRANCE_PRIEST = 60514,
HEALING_TRANCE_SHAMAN = 60515,
};
public:
spell_gen_soul_preserver() : SpellScriptLoader("spell_gen_soul_preserver") { }
class spell_gen_soul_preserver_SpellScript : public SpellScript
{
PrepareSpellScript(spell_gen_soul_preserver_SpellScript);
bool Load()
{
// 18350 is a common placeholder for trigered spells
// this script only applies to 60510
return GetTriggeringSpell()->Id == SOUL_PRESERVER;
}
void HandleScript(SpellEffIndex /*effIndex*/)
{
uint32 triggeredSpell = 0;
Player* caster = GetCaster()->ToPlayer();
if (!caster)
return;
switch (caster->getClass())
{
case CLASS_DRUID:
triggeredSpell = HEALING_TRANCE_DRUID;
break;
case CLASS_PALADIN:
triggeredSpell = HEALING_TRANCE_PALADIN;
break;
case CLASS_PRIEST:
triggeredSpell = HEALING_TRANCE_PRIEST;
break;
case CLASS_SHAMAN:
triggeredSpell = HEALING_TRANCE_SHAMAN;
break;
}
if (triggeredSpell)
caster->CastSpell(caster, triggeredSpell, true);
}
void Register()
{
OnEffect += SpellEffectFn(spell_gen_soul_preserver_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
SpellScript* GetSpellScript() const
{
return new spell_gen_soul_preserver_SpellScript();
}
};
class spell_gen_vehicle_scaling : public SpellScriptLoader
{
public:
@@ -1350,6 +1286,5 @@ void AddSC_generic_spell_scripts()
new spell_gen_magic_rooster();
new spell_gen_allow_cast_from_item_only();
new spell_gen_launch();
new spell_gen_soul_preserver();
new spell_gen_vehicle_scaling();
}