mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-16 15:40:45 +01:00
Core/Spells: Implement using different difficulty data from all spell related db2s, not just SpellEffect and SpellPower
This commit is contained in:
@@ -1131,7 +1131,7 @@ ScriptMgr* ScriptMgr::instance()
|
||||
|
||||
void ScriptMgr::Initialize()
|
||||
{
|
||||
ASSERT(sSpellMgr->GetSpellInfo(SPELL_HOTSWAP_VISUAL_SPELL_EFFECT)
|
||||
ASSERT(sSpellMgr->GetSpellInfo(SPELL_HOTSWAP_VISUAL_SPELL_EFFECT, DIFFICULTY_NONE)
|
||||
&& "Reload hotswap spell effect for creatures isn't valid!");
|
||||
|
||||
uint32 oldMSTime = getMSTime();
|
||||
@@ -1228,8 +1228,7 @@ void ScriptMgr::Unload()
|
||||
{
|
||||
sScriptRegistryCompositum->Unload();
|
||||
|
||||
delete[] SpellSummary;
|
||||
delete[] UnitAI::AISpellInfo;
|
||||
UnitAI::AISpellInfo.clear();
|
||||
}
|
||||
|
||||
void ScriptMgr::LoadDatabase()
|
||||
@@ -1241,91 +1240,6 @@ void ScriptMgr::LoadDatabase()
|
||||
void ScriptMgr::FillSpellSummary()
|
||||
{
|
||||
UnitAI::FillAISpellInfo();
|
||||
|
||||
SpellSummary = new TSpellSummary[sSpellMgr->GetSpellInfoStoreSize()];
|
||||
|
||||
SpellInfo const* pTempSpell;
|
||||
|
||||
for (uint32 i = 0; i < sSpellMgr->GetSpellInfoStoreSize(); ++i)
|
||||
{
|
||||
SpellSummary[i].Effects = 0;
|
||||
SpellSummary[i].Targets = 0;
|
||||
|
||||
pTempSpell = sSpellMgr->GetSpellInfo(i);
|
||||
// This spell doesn't exist.
|
||||
if (!pTempSpell)
|
||||
continue;
|
||||
|
||||
for (SpellEffectInfo const* effect : pTempSpell->GetEffectsForDifficulty(DIFFICULTY_NONE))
|
||||
{
|
||||
if (!effect)
|
||||
continue;
|
||||
|
||||
// Spell targets self.
|
||||
if (effect->TargetA.GetTarget() == TARGET_UNIT_CASTER)
|
||||
SpellSummary[i].Targets |= 1 << (SELECT_TARGET_SELF-1);
|
||||
|
||||
// Spell targets a single enemy.
|
||||
if (effect->TargetA.GetTarget() == TARGET_UNIT_TARGET_ENEMY ||
|
||||
effect->TargetA.GetTarget() == TARGET_DEST_TARGET_ENEMY)
|
||||
SpellSummary[i].Targets |= 1 << (SELECT_TARGET_SINGLE_ENEMY-1);
|
||||
|
||||
// Spell targets AoE at enemy.
|
||||
if (effect->TargetA.GetTarget() == TARGET_UNIT_SRC_AREA_ENEMY ||
|
||||
effect->TargetA.GetTarget() == TARGET_UNIT_DEST_AREA_ENEMY ||
|
||||
effect->TargetA.GetTarget() == TARGET_SRC_CASTER ||
|
||||
effect->TargetA.GetTarget() == TARGET_DEST_DYNOBJ_ENEMY)
|
||||
SpellSummary[i].Targets |= 1 << (SELECT_TARGET_AOE_ENEMY-1);
|
||||
|
||||
// Spell targets an enemy.
|
||||
if (effect->TargetA.GetTarget() == TARGET_UNIT_TARGET_ENEMY ||
|
||||
effect->TargetA.GetTarget() == TARGET_DEST_TARGET_ENEMY ||
|
||||
effect->TargetA.GetTarget() == TARGET_UNIT_SRC_AREA_ENEMY ||
|
||||
effect->TargetA.GetTarget() == TARGET_UNIT_DEST_AREA_ENEMY ||
|
||||
effect->TargetA.GetTarget() == TARGET_SRC_CASTER ||
|
||||
effect->TargetA.GetTarget() == TARGET_DEST_DYNOBJ_ENEMY)
|
||||
SpellSummary[i].Targets |= 1 << (SELECT_TARGET_ANY_ENEMY-1);
|
||||
|
||||
// Spell targets a single friend (or self).
|
||||
if (effect->TargetA.GetTarget() == TARGET_UNIT_CASTER ||
|
||||
effect->TargetA.GetTarget() == TARGET_UNIT_TARGET_ALLY ||
|
||||
effect->TargetA.GetTarget() == TARGET_UNIT_TARGET_PARTY)
|
||||
SpellSummary[i].Targets |= 1 << (SELECT_TARGET_SINGLE_FRIEND-1);
|
||||
|
||||
// Spell targets AoE friends.
|
||||
if (effect->TargetA.GetTarget() == TARGET_UNIT_CASTER_AREA_PARTY ||
|
||||
effect->TargetA.GetTarget() == TARGET_UNIT_LASTTARGET_AREA_PARTY ||
|
||||
effect->TargetA.GetTarget() == TARGET_SRC_CASTER)
|
||||
SpellSummary[i].Targets |= 1 << (SELECT_TARGET_AOE_FRIEND-1);
|
||||
|
||||
// Spell targets any friend (or self).
|
||||
if (effect->TargetA.GetTarget() == TARGET_UNIT_CASTER ||
|
||||
effect->TargetA.GetTarget() == TARGET_UNIT_TARGET_ALLY ||
|
||||
effect->TargetA.GetTarget() == TARGET_UNIT_TARGET_PARTY ||
|
||||
effect->TargetA.GetTarget() == TARGET_UNIT_CASTER_AREA_PARTY ||
|
||||
effect->TargetA.GetTarget() == TARGET_UNIT_LASTTARGET_AREA_PARTY ||
|
||||
effect->TargetA.GetTarget() == TARGET_SRC_CASTER)
|
||||
SpellSummary[i].Targets |= 1 << (SELECT_TARGET_ANY_FRIEND-1);
|
||||
|
||||
// Make sure that this spell includes a damage effect.
|
||||
if (effect->Effect == SPELL_EFFECT_SCHOOL_DAMAGE ||
|
||||
effect->Effect == SPELL_EFFECT_INSTAKILL ||
|
||||
effect->Effect == SPELL_EFFECT_ENVIRONMENTAL_DAMAGE ||
|
||||
effect->Effect == SPELL_EFFECT_HEALTH_LEECH)
|
||||
SpellSummary[i].Effects |= 1 << (SELECT_EFFECT_DAMAGE-1);
|
||||
|
||||
// Make sure that this spell includes a healing effect (or an apply aura with a periodic heal).
|
||||
if (effect->Effect == SPELL_EFFECT_HEAL ||
|
||||
effect->Effect == SPELL_EFFECT_HEAL_MAX_HEALTH ||
|
||||
effect->Effect == SPELL_EFFECT_HEAL_MECHANICAL ||
|
||||
(effect->Effect == SPELL_EFFECT_APPLY_AURA && effect->ApplyAuraName == 8))
|
||||
SpellSummary[i].Effects |= 1 << (SELECT_EFFECT_HEALING-1);
|
||||
|
||||
// Make sure that this spell applies an aura.
|
||||
if (effect->Effect == SPELL_EFFECT_APPLY_AURA)
|
||||
SpellSummary[i].Effects |= 1 << (SELECT_EFFECT_AURA-1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
template<typename T, typename F, typename O>
|
||||
|
||||
Reference in New Issue
Block a user