Core/Spells: Implement using different difficulty data from all spell related db2s, not just SpellEffect and SpellPower
Port From (https://github.com/TrinityCore/TrinityCore/commit/c7306439e7004288fb85890d6a5f730cf1761d71)
This commit is contained in:
@@ -335,73 +335,6 @@ namespace Game.Scripting
|
||||
public void FillSpellSummary()
|
||||
{
|
||||
UnitAI.FillAISpellInfo();
|
||||
|
||||
SpellInfo pTempSpell;
|
||||
var spellStorage = Global.SpellMgr.GetSpellInfoStorage();
|
||||
foreach (var i in spellStorage.Keys)
|
||||
{
|
||||
spellSummaryStorage[i] = new SpellSummary();
|
||||
|
||||
pTempSpell = spellStorage.LookupByKey(i);
|
||||
// This spell doesn't exist.
|
||||
if (pTempSpell == null)
|
||||
continue;
|
||||
|
||||
foreach (SpellEffectInfo effect in pTempSpell.GetEffectsForDifficulty(Difficulty.None))
|
||||
{
|
||||
if (effect == null)
|
||||
continue;
|
||||
|
||||
// Spell targets self.
|
||||
if (effect.TargetA.GetTarget() == Targets.UnitCaster)
|
||||
spellSummaryStorage[i].Targets |= 1 << ((int)SelectTargetType.Self - 1);
|
||||
|
||||
// Spell targets a single enemy.
|
||||
if (effect.TargetA.GetTarget() == Targets.UnitEnemy || effect.TargetA.GetTarget() == Targets.DestEnemy)
|
||||
spellSummaryStorage[i].Targets |= 1 << ((int)SelectTargetType.SingleEnemy - 1);
|
||||
|
||||
// Spell targets AoE at enemy.
|
||||
if (effect.TargetA.GetTarget() == Targets.UnitSrcAreaEnemy || effect.TargetA.GetTarget() == Targets.UnitDestAreaEnemy ||
|
||||
effect.TargetA.GetTarget() == Targets.SrcCaster || effect.TargetA.GetTarget() == Targets.DestDynobjEnemy)
|
||||
spellSummaryStorage[i].Targets |= 1 << ((int)SelectTargetType.AoeEnemy - 1);
|
||||
|
||||
// Spell targets an enemy.
|
||||
if (effect.TargetA.GetTarget() == Targets.UnitEnemy || effect.TargetA.GetTarget() == Targets.DestEnemy ||
|
||||
effect.TargetA.GetTarget() == Targets.UnitSrcAreaEnemy || effect.TargetA.GetTarget() == Targets.UnitDestAreaEnemy ||
|
||||
effect.TargetA.GetTarget() == Targets.SrcCaster || effect.TargetA.GetTarget() == Targets.DestDynobjEnemy)
|
||||
spellSummaryStorage[i].Targets |= 1 << ((int)SelectTargetType.AnyEnemy - 1);
|
||||
|
||||
// Spell targets a single friend (or self).
|
||||
if (effect.TargetA.GetTarget() == Targets.UnitCaster || effect.TargetA.GetTarget() == Targets.UnitAlly ||
|
||||
effect.TargetA.GetTarget() == Targets.UnitParty)
|
||||
spellSummaryStorage[i].Targets |= 1 << ((int)SelectTargetType.SingleFriend - 1);
|
||||
|
||||
// Spell targets AoE friends.
|
||||
if (effect.TargetA.GetTarget() == Targets.UnitCasterAreaParty || effect.TargetA.GetTarget() == Targets.UnitLastAreaParty ||
|
||||
effect.TargetA.GetTarget() == Targets.SrcCaster)
|
||||
spellSummaryStorage[i].Targets |= 1 << ((int)SelectTargetType.AoeFriend - 1);
|
||||
|
||||
// Spell targets any friend (or self).
|
||||
if (effect.TargetA.GetTarget() == Targets.UnitCaster || effect.TargetA.GetTarget() == Targets.UnitAlly ||
|
||||
effect.TargetA.GetTarget() == Targets.UnitParty || effect.TargetA.GetTarget() == Targets.UnitCasterAreaParty ||
|
||||
effect.TargetA.GetTarget() == Targets.UnitLastAreaParty || effect.TargetA.GetTarget() == Targets.SrcCaster)
|
||||
spellSummaryStorage[i].Targets |= 1 << ((int)SelectTargetType.AnyFriend - 1);
|
||||
|
||||
// Make sure that this spell includes a damage effect.
|
||||
if (effect.Effect == SpellEffectName.SchoolDamage || effect.Effect == SpellEffectName.Instakill ||
|
||||
effect.Effect == SpellEffectName.EnvironmentalDamage || effect.Effect == SpellEffectName.HealthLeech)
|
||||
spellSummaryStorage[i].Effects |= 1 << ((int)SelectEffect.Damage - 1);
|
||||
|
||||
// Make sure that this spell includes a healing effect (or an apply aura with a periodic heal).
|
||||
if (effect.Effect == SpellEffectName.Heal || effect.Effect == SpellEffectName.HealMaxHealth ||
|
||||
effect.Effect == SpellEffectName.HealMechanical || (effect.Effect == SpellEffectName.ApplyAura && effect.ApplyAuraName == AuraType.PeriodicHeal))
|
||||
spellSummaryStorage[i].Effects |= 1 << ((int)SelectEffect.Healing - 1);
|
||||
|
||||
// Make sure that this spell applies an aura.
|
||||
if (effect.Effect == SpellEffectName.ApplyAura)
|
||||
spellSummaryStorage[i].Effects |= 1 << ((int)SelectEffect.Aura - 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public List<SplineChainLink> GetSplineChain(Creature who, ushort chainId)
|
||||
|
||||
@@ -48,7 +48,7 @@ namespace Game.Scripting
|
||||
bool allValid = true;
|
||||
foreach (uint spellId in spellIds)
|
||||
{
|
||||
if (!Global.SpellMgr.HasSpellInfo(spellId))
|
||||
if (!Global.SpellMgr.HasSpellInfo(spellId, Difficulty.None))
|
||||
{
|
||||
Log.outError(LogFilter.Scripts, "BaseSpellScript.ValidateSpellInfo: Spell {0} does not exist.", spellId);
|
||||
allValid = false;
|
||||
@@ -494,11 +494,12 @@ namespace Game.Scripting
|
||||
public Unit GetCaster() { return m_spell.GetCaster(); }
|
||||
public Unit GetOriginalCaster() { return m_spell.GetOriginalCaster(); }
|
||||
public SpellInfo GetSpellInfo() { return m_spell.GetSpellInfo(); }
|
||||
public Difficulty GetCastDifficulty() { return m_spell.GetCastDifficulty(); }
|
||||
public SpellValue GetSpellValue() { return m_spell.m_spellValue; }
|
||||
|
||||
public SpellEffectInfo GetEffectInfo(uint effIndex)
|
||||
{
|
||||
return m_spell.GetEffect(effIndex);
|
||||
return GetSpellInfo().GetEffect(effIndex);
|
||||
}
|
||||
|
||||
// methods useable after spell is prepared
|
||||
@@ -773,7 +774,7 @@ namespace Game.Scripting
|
||||
public delegate void AuraEffectAbsorbDelegate(AuraEffect aura, DamageInfo damageInfo, ref uint absorbAmount);
|
||||
public delegate void AuraEffectSplitDelegate(AuraEffect aura, DamageInfo damageInfo, uint splitAmount);
|
||||
public delegate bool AuraCheckProcDelegate(ProcEventInfo info);
|
||||
public delegate bool AuraCheckEffectProcDelegate(AuraEffect aura , ProcEventInfo info);
|
||||
public delegate bool AuraCheckEffectProcDelegate(AuraEffect aura, ProcEventInfo info);
|
||||
public delegate void AuraProcDelegate(ProcEventInfo info);
|
||||
public delegate void AuraEffectProcDelegate(AuraEffect aura, ProcEventInfo info);
|
||||
|
||||
@@ -1422,5 +1423,10 @@ namespace Game.Scripting
|
||||
}
|
||||
// returns AuraApplication object of currently processed target
|
||||
public AuraApplication GetTargetApplication() { return m_auraApplication; }
|
||||
|
||||
public Difficulty GetCastDifficulty()
|
||||
{
|
||||
return GetAura().GetCastDifficulty();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user