Core/DataStores: Fixed db2 structures after 7.3.5

This commit is contained in:
hondacrx
2018-03-13 15:43:03 -04:00
parent 2199e07955
commit 0ab3b8e8cd
97 changed files with 3139 additions and 1707 deletions
+5 -5
View File
@@ -305,7 +305,7 @@ namespace Game.Spells
var powers = Global.DB2Mgr.GetSpellPowers(GetId(), caster ? caster.GetMap().GetDifficultyID() : Difficulty.None);
foreach (var power in powers)
if (power.ManaCostPerSecond != 0 || power.ManaCostPercentagePerSecond > 0.0f)
if (power.ManaPerSecond != 0 || power.PowerPctPerSecond > 0.0f)
m_periodicCosts.Add(power);
if (!m_periodicCosts.Empty())
@@ -653,14 +653,14 @@ namespace Game.Spells
foreach (SpellPowerRecord power in m_periodicCosts)
{
if (power.RequiredAura != 0 && !caster.HasAura(power.RequiredAura))
if (power.RequiredAuraSpellID != 0 && !caster.HasAura(power.RequiredAuraSpellID))
continue;
int manaPerSecond = (int)power.ManaCostPerSecond;
int manaPerSecond = (int)power.ManaPerSecond;
if (power.PowerType != PowerType.Health)
manaPerSecond += MathFunctions.CalculatePct(caster.GetMaxPower(power.PowerType), power.ManaCostPercentagePerSecond);
manaPerSecond += MathFunctions.CalculatePct(caster.GetMaxPower(power.PowerType), power.PowerPctPerSecond);
else
manaPerSecond += (int)MathFunctions.CalculatePct(caster.GetMaxHealth(), power.ManaCostPercentagePerSecond);
manaPerSecond += (int)MathFunctions.CalculatePct(caster.GetMaxHealth(), power.PowerPctPerSecond);
if (manaPerSecond != 0)
{
+8 -8
View File
@@ -105,7 +105,7 @@ namespace Game.Spells
{
for (int t = 0; t < ItemConst.MaxItemEnchantmentEffects; t++)
{
if (pEnchant.EffectSpellID[t] == m_spellInfo.Id)
if (pEnchant.EffectArg[t] == m_spellInfo.Id)
{
amount = (int)((item_rand_suffix.AllocationPct[k] * castItem.GetItemSuffixFactor()) / 10000);
break;
@@ -146,7 +146,7 @@ namespace Game.Spells
uint mountType = (uint)GetMiscValueB();
MountRecord mountEntry = Global.DB2Mgr.GetMount(GetId());
if (mountEntry != null)
mountType = mountEntry.MountTypeId;
mountType = mountEntry.MountTypeID;
var mountCapability = GetBase().GetUnitOwner().GetMountCapability(mountType);
if (mountCapability != null)
@@ -2197,7 +2197,7 @@ namespace Game.Spells
}).ToList();
if (!usableDisplays.Empty())
displayId = usableDisplays.SelectRandom().DisplayID;
displayId = usableDisplays.SelectRandom().CreatureDisplayInfoID;
}
}
// TODO: CREATE TABLE mount_vehicle (mountId, vehicleCreatureId) for future mounts that are vehicles (new mounts no longer have proper data in MiscValue)
@@ -2229,7 +2229,7 @@ namespace Game.Spells
{
var mountCapability = CliDB.MountCapabilityStorage.LookupByKey(GetAmount());
if (mountCapability != null)
target.CastSpell(target, mountCapability.SpeedModSpell, true);
target.CastSpell(target, mountCapability.ModSpellAuraID, true);
}
}
else
@@ -2245,7 +2245,7 @@ namespace Game.Spells
// remove speed aura
var mountCapability = CliDB.MountCapabilityStorage.LookupByKey(GetAmount());
if (mountCapability != null)
target.RemoveAurasDueToSpell(mountCapability.SpeedModSpell, target.GetGUID());
target.RemoveAurasDueToSpell(mountCapability.ModSpellAuraID, target.GetGUID());
}
}
}
@@ -3512,7 +3512,7 @@ namespace Game.Spells
return;
Unit target = aurApp.GetTarget();
if (target.GetPowerIndex((PowerType)powerDisplay.PowerType) == (int)PowerType.Max)
if (target.GetPowerIndex((PowerType)powerDisplay.ActualType) == (int)PowerType.Max)
return;
if (apply)
@@ -4693,7 +4693,7 @@ namespace Game.Spells
{
for (byte i = 0; i < SharedConst.MaxOverrideSpell; ++i)
{
uint spellId = overrideSpells.SpellID[i];
uint spellId = overrideSpells.Spells[i];
if (spellId != 0)
target.AddTemporarySpell(spellId);
}
@@ -4707,7 +4707,7 @@ namespace Game.Spells
{
for (byte i = 0; i < SharedConst.MaxOverrideSpell; ++i)
{
uint spellId = overrideSpells.SpellID[i];
uint spellId = overrideSpells.Spells[i];
if (spellId != 0)
target.RemoveTemporarySpell(spellId);
}
+5 -18
View File
@@ -3850,9 +3850,9 @@ namespace Game.Spells
ItemRecord itemEntry = CliDB.ItemStorage.LookupByKey(itemId);
if (itemEntry != null)
{
if (itemEntry.Class == ItemClass.Weapon)
if (itemEntry.ClassID == ItemClass.Weapon)
{
switch ((ItemSubClassWeapon)itemEntry.SubClass)
switch ((ItemSubClassWeapon)itemEntry.SubclassID)
{
case ItemSubClassWeapon.Thrown:
ammoDisplayID = Global.DB2Mgr.GetItemDisplayId(itemId, m_caster.GetVirtualItemAppearanceMod(i));
@@ -5065,7 +5065,7 @@ namespace Game.Spells
if (SummonProperties == null)
break;
switch (SummonProperties.Category)
switch (SummonProperties.Control)
{
case SummonCategory.Pet:
if (!m_spellInfo.HasAttribute(SpellAttr1.DismissPet) && !m_caster.GetPetGUID().IsEmpty())
@@ -6034,7 +6034,7 @@ namespace Game.Spells
ItemTemplate proto = targetItem.GetTemplate();
for (byte e = 0; e < proto.Effects.Count; ++e)
{
if (proto.Effects[e].SpellID != 0 && proto.Effects[e].Trigger == ItemSpelltriggerType.OnUse)
if (proto.Effects[e].SpellID != 0 && proto.Effects[e].TriggerType == ItemSpelltriggerType.OnUse)
{
isItemUsable = true;
break;
@@ -6115,7 +6115,7 @@ namespace Game.Spells
ItemDisenchantLootRecord itemDisenchantLoot = item.GetDisenchantLoot(m_caster.ToPlayer());
if (itemDisenchantLoot == null)
return SpellCastResult.CantBeDisenchanted;
if (itemDisenchantLoot.RequiredDisenchantSkill > player.GetSkillValue(SkillType.Enchanting))
if (itemDisenchantLoot.SkillRequired > player.GetSkillValue(SkillType.Enchanting))
return SpellCastResult.LowCastlevel;
break;
}
@@ -6716,19 +6716,6 @@ namespace Game.Spells
{
m_loadedScripts = Global.ScriptMgr.CreateSpellScripts(m_spellInfo.Id, this);
var holder = Global.SmartAIMgr.GetScript((int)GetSpellInfo().Id, SmartScriptType.Spell);
if (!holder.Empty())
{
var script = new SmartSpell();
script._Init("", GetSpellInfo().Id);
if (script._Load(this))
{
script._Register();
if (script._Validate(GetSpellInfo()))
m_loadedScripts.Add(script);
}
}
foreach (var script in m_loadedScripts)
{
Log.outDebug(LogFilter.Spells, "Spell.LoadScripts: Script `{0}` for spell `{1}` is loaded now", script._GetScriptName(), m_spellInfo.Id);
+4 -4
View File
@@ -1746,7 +1746,7 @@ namespace Game.Spells
break;
}
switch (properties.Category)
switch (properties.Control)
{
case SummonCategory.Wild:
case SummonCategory.Ally:
@@ -1756,7 +1756,7 @@ namespace Game.Spells
SummonGuardian(effIndex, entry, properties, numSummons);
break;
}
switch (properties.Type)
switch (properties.Title)
{
case SummonType.Pet:
case SummonType.Guardian:
@@ -1816,7 +1816,7 @@ namespace Game.Spells
if (summon == null)
continue;
if (properties.Category == SummonCategory.Ally)
if (properties.Control == SummonCategory.Ally)
{
summon.SetOwnerGUID(m_originalCaster.GetGUID());
summon.SetFaction(m_originalCaster.getFaction());
@@ -5073,7 +5073,7 @@ namespace Game.Spells
if (summon.HasUnitTypeMask(UnitTypeMask.Guardian))
((Guardian)summon).InitStatsForLevel(level);
if (properties != null && properties.Category == SummonCategory.Ally)
if (properties != null && properties.Control == SummonCategory.Ally)
summon.SetFaction(caster.getFaction());
if (summon.HasUnitTypeMask(UnitTypeMask.Minion) && m_targets.HasDst())
+3 -3
View File
@@ -869,9 +869,9 @@ namespace Game.Spells
{
if (itemEffect.SpellID == spellInfo.Id)
{
tmpCooldown = itemEffect.Cooldown;
tmpCategoryId = itemEffect.Category;
tmpCategoryCooldown = itemEffect.CategoryCooldown;
tmpCooldown = itemEffect.CoolDownMSec;
tmpCategoryId = itemEffect.SpellCategoryID;
tmpCategoryCooldown = itemEffect.CategoryCoolDownMSec;
break;
}
}
+49 -53
View File
@@ -59,20 +59,20 @@ namespace Game.Spells
SpellMiscRecord _misc = data.Misc;
if (_misc != null)
{
Attributes = (SpellAttr0)_misc.Attributes;
AttributesEx = (SpellAttr1)_misc.AttributesEx;
AttributesEx2 = (SpellAttr2)_misc.AttributesExB;
AttributesEx3 = (SpellAttr3)_misc.AttributesExC;
AttributesEx4 = (SpellAttr4)_misc.AttributesExD;
AttributesEx5 = (SpellAttr5)_misc.AttributesExE;
AttributesEx6 = (SpellAttr6)_misc.AttributesExF;
AttributesEx7 = (SpellAttr7)_misc.AttributesExG;
AttributesEx8 = (SpellAttr8)_misc.AttributesExH;
AttributesEx9 = (SpellAttr9)_misc.AttributesExI;
AttributesEx10 = (SpellAttr10)_misc.AttributesExJ;
AttributesEx11 = (SpellAttr11)_misc.AttributesExK;
AttributesEx12 = (SpellAttr12)_misc.AttributesExL;
AttributesEx13 = (SpellAttr13)_misc.AttributesExM;
Attributes = (SpellAttr0)_misc.Attributes[0];
AttributesEx = (SpellAttr1)_misc.Attributes[1];
AttributesEx2 = (SpellAttr2)_misc.Attributes[2];
AttributesEx3 = (SpellAttr3)_misc.Attributes[3];
AttributesEx4 = (SpellAttr4)_misc.Attributes[4];
AttributesEx5 = (SpellAttr5)_misc.Attributes[5];
AttributesEx6 = (SpellAttr6)_misc.Attributes[6];
AttributesEx7 = (SpellAttr7)_misc.Attributes[7];
AttributesEx8 = (SpellAttr8)_misc.Attributes[8];
AttributesEx9 = (SpellAttr9)_misc.Attributes[9];
AttributesEx10 = (SpellAttr10)_misc.Attributes[10];
AttributesEx11 = (SpellAttr11)_misc.Attributes[11];
AttributesEx12 = (SpellAttr12)_misc.Attributes[12];
AttributesEx13 = (SpellAttr13)_misc.Attributes[13];
CastTimeEntry = CliDB.SpellCastTimesStorage.LookupByKey(_misc.CastingTimeIndex);
DurationEntry = CliDB.SpellDurationStorage.LookupByKey(_misc.DurationIndex);
RangeIndex = _misc.RangeIndex;
@@ -81,7 +81,7 @@ namespace Game.Spells
SchoolMask = (SpellSchoolMask)_misc.SchoolMask;
AttributesCu = 0;
IconFileDataId = _misc.IconFileDataID;
IconFileDataId = _misc.SpellIconFileDataID;
ActiveIconFileDataId = _misc.ActiveIconFileDataID;
}
@@ -90,13 +90,13 @@ namespace Game.Spells
// sort all visuals so that the ones without a condition requirement are last on the list
foreach (var key in _visuals.Keys.ToList())
_visuals[key] = _visuals[key].OrderByDescending(x => x.PlayerConditionID).ToList();
_visuals[key] = _visuals[key].OrderByDescending(x => x.CasterPlayerConditionID).ToList();
// SpellScalingEntry
SpellScalingRecord _scaling = data.Scaling;
if (_scaling != null)
{
Scaling._Class = _scaling.ScalingClass;
Scaling._Class = _scaling.Class;
Scaling.MinScalingLevel = _scaling.MinScalingLevel;
Scaling.MaxScalingLevel = _scaling.MaxScalingLevel;
Scaling.ScalesFromItemLevel = _scaling.ScalesFromItemLevel;
@@ -179,8 +179,8 @@ namespace Game.Spells
if (_equipped != null)
{
EquippedItemClass = (ItemClass)_equipped.EquippedItemClass;
EquippedItemSubClassMask = _equipped.EquippedItemSubClassMask;
EquippedItemInventoryTypeMask = _equipped.EquippedItemInventoryTypeMask;
EquippedItemSubClassMask = _equipped.EquippedItemSubclass;
EquippedItemInventoryTypeMask = _equipped.EquippedItemInvTypes;
}
// SpellInterruptsEntry
@@ -226,10 +226,10 @@ namespace Game.Spells
if (_target != null)
{
targets = (SpellCastTargetFlags)_target.Targets;
ConeAngle = _target.ConeAngle;
ConeAngle = _target.ConeDegrees;
Width = _target.Width;
TargetCreatureType = _target.TargetCreatureType;
MaxAffectedTargets = _target.MaxAffectedTargets;
MaxAffectedTargets = _target.MaxTargets;
MaxTargetLevel = _target.MaxTargetLevel;
}
@@ -964,7 +964,7 @@ namespace Game.Spells
uint mountType = (uint)effect.MiscValueB;
MountRecord mountEntry = Global.DB2Mgr.GetMount(Id);
if (mountEntry != null)
mountType = mountEntry.MountTypeId;
mountType = mountEntry.MountTypeID;
if (mountType != 0 && player.GetMountCapability(mountType) == null)
return SpellCastResult.NotHere;
break;
@@ -1210,11 +1210,11 @@ namespace Game.Spells
var vehicleSeat = vehicle.GetSeatForPassenger(caster);
if (!HasAttribute(SpellAttr6.CastableWhileOnVehicle) && !HasAttribute(SpellAttr0.CastableWhileMounted)
&& (vehicleSeat.Flags[0] & (uint)checkMask) != (uint)checkMask)
&& (vehicleSeat.Flags & checkMask) != checkMask)
return SpellCastResult.CantDoThatRightNow;
// Can only summon uncontrolled minions/guardians when on controlled vehicle
if (vehicleSeat.Flags[0].HasAnyFlag((uint)(VehicleSeatFlags.CanControl | VehicleSeatFlags.Unk2)))
if (vehicleSeat.Flags.HasAnyFlag((VehicleSeatFlags.CanControl | VehicleSeatFlags.Unk2)))
{
foreach (SpellEffectInfo effect in GetEffectsForDifficulty(caster.GetMap().GetDifficultyID()))
{
@@ -1222,7 +1222,7 @@ namespace Game.Spells
continue;
var props = CliDB.SummonPropertiesStorage.LookupByKey(effect.MiscValueB);
if (props != null && props.Category != SummonCategory.Wild)
if (props != null && props.Control != SummonCategory.Wild)
return SpellCastResult.CantDoThatRightNow;
}
}
@@ -2529,20 +2529,16 @@ namespace Game.Spells
{
if (RangeEntry == null)
return 0.0f;
if (positive)
return RangeEntry.MinRangeFriend;
return RangeEntry.MinRangeHostile;
return RangeEntry.RangeMin[positive ? 1 : 0];
}
public float GetMaxRange(bool positive = false, Unit caster = null, Spell spell = null)
{
if (RangeEntry == null)
return 0.0f;
float range;
if (positive)
range = RangeEntry.MaxRangeFriend;
else
range = RangeEntry.MaxRangeHostile;
float range = RangeEntry.RangeMax[positive ? 1 : 0];
if (caster != null)
{
Player modOwner = caster.GetSpellModOwner();
@@ -2601,9 +2597,9 @@ namespace Game.Spells
if (calcLevel < 0)
calcLevel = 0;
castTime = (int)(CastTimeEntry.CastTime + CastTimeEntry.CastTimePerLevel * level);
if (castTime < CastTimeEntry.MinCastTime)
castTime = CastTimeEntry.MinCastTime;
castTime = (int)(CastTimeEntry.Base + CastTimeEntry.PerLevel * level);
if (castTime < CastTimeEntry.Minimum)
castTime = CastTimeEntry.Minimum;
}
if (castTime <= 0)
@@ -2669,7 +2665,7 @@ namespace Game.Spells
foreach (SpellPowerRecord power in powers)
{
if (power.RequiredAura != 0 && !caster.HasAura(power.RequiredAura))
if (power.RequiredAuraSpellID != 0 && !caster.HasAura(power.RequiredAuraSpellID))
continue;
// Spell drain all exist power on cast (Only paladin lay of Hands)
@@ -2696,23 +2692,23 @@ namespace Game.Spells
}
// Base powerCost
int powerCost = (int)power.ManaCost;
int powerCost = power.ManaCost;
// PCT cost from total amount
if (power.ManaCostPercentage != 0)
if (power.PowerCostPct != 0)
{
switch (power.PowerType)
{
// health as power used
case PowerType.Health:
powerCost += (int)MathFunctions.CalculatePct(caster.GetMaxHealth(), power.ManaCostPercentage);
powerCost += (int)MathFunctions.CalculatePct(caster.GetMaxHealth(), power.PowerCostPct);
break;
case PowerType.Mana:
powerCost += (int)MathFunctions.CalculatePct(caster.GetCreateMana(), power.ManaCostPercentage);
powerCost += (int)MathFunctions.CalculatePct(caster.GetCreateMana(), power.PowerCostPct);
break;
case PowerType.Rage:
case PowerType.Focus:
case PowerType.Energy:
powerCost += MathFunctions.CalculatePct(caster.GetMaxPower(power.PowerType), power.ManaCostPercentage);
powerCost += MathFunctions.CalculatePct(caster.GetMaxPower(power.PowerType), power.PowerCostPct);
break;
case PowerType.Runes:
case PowerType.RunicPower:
@@ -2724,8 +2720,8 @@ namespace Game.Spells
}
}
if (power.HealthCostPercentage != 0)
healthCost += (int)MathFunctions.CalculatePct(caster.GetMaxHealth(), power.HealthCostPercentage);
if (power.PowerCostMaxPct != 0)
healthCost += (int)MathFunctions.CalculatePct(caster.GetMaxHealth(), power.PowerCostMaxPct);
if (power.PowerType != PowerType.Health)
{
@@ -2766,13 +2762,13 @@ namespace Game.Spells
Player modOwner = caster.GetSpellModOwner();
if (modOwner)
{
if (power.PowerIndex == 0)
if (power.OrderIndex == 0)
modOwner.ApplySpellMod(Id, SpellModOp.Cost, ref powerCost);
else if (power.PowerIndex == 1)
else if (power.OrderIndex == 1)
modOwner.ApplySpellMod(Id, SpellModOp.SpellCost2, ref powerCost);
}
if (!caster.IsControlledByPlayer() && MathFunctions.fuzzyEq(power.ManaCostPercentage, 0.0f) && SpellLevel != 0)
if (!caster.IsControlledByPlayer() && MathFunctions.fuzzyEq(power.PowerCostPct, 0.0f) && SpellLevel != 0)
{
if (HasAttribute(SpellAttr0.LevelDamageCalculation))
{
@@ -3077,7 +3073,7 @@ namespace Game.Spells
{
foreach (SpellXSpellVisualRecord visual in visualList)
{
PlayerConditionRecord playerCondition = CliDB.PlayerConditionStorage.LookupByKey(visual.PlayerConditionID);
PlayerConditionRecord playerCondition = CliDB.PlayerConditionStorage.LookupByKey(visual.CasterPlayerConditionID);
if (playerCondition == null || (caster.IsTypeId(TypeId.Player) && ConditionManager.IsPlayerMeetingCondition(caster.ToPlayer(), playerCondition)))
return visual.Id;
}
@@ -3092,7 +3088,7 @@ namespace Game.Spells
{
foreach (var visual in defaultList)
{
PlayerConditionRecord playerCondition = CliDB.PlayerConditionStorage.LookupByKey(visual.PlayerConditionID);
PlayerConditionRecord playerCondition = CliDB.PlayerConditionStorage.LookupByKey(visual.CasterPlayerConditionID);
if (playerCondition == null || (caster && caster.IsTypeId(TypeId.Player) && ConditionManager.IsPlayerMeetingCondition(caster.ToPlayer(), playerCondition)))
return visual.Id;
}
@@ -3705,14 +3701,14 @@ namespace Game.Spells
Amplitude = _effect.EffectAmplitude;
ChainAmplitude = _effect.EffectChainAmplitude;
BonusCoefficient = _effect.EffectBonusCoefficient;
MiscValue = _effect.EffectMiscValue;
MiscValueB = _effect.EffectMiscValueB;
MiscValue = _effect.EffectMiscValue[0];
MiscValueB = _effect.EffectMiscValue[1];
Mechanic = (Mechanics)_effect.EffectMechanic;
PositionFacing = _effect.EffectPosFacing;
TargetA = new SpellImplicitTargetInfo((Targets)_effect.ImplicitTarget[0]);
TargetB = new SpellImplicitTargetInfo((Targets)_effect.ImplicitTarget[1]);
RadiusEntry = CliDB.SpellRadiusStorage.LookupByKey(_effect.EffectRadiusIndex);
MaxRadiusEntry = CliDB.SpellRadiusStorage.LookupByKey(_effect.EffectRadiusMaxIndex);
RadiusEntry = CliDB.SpellRadiusStorage.LookupByKey(_effect.EffectRadiusIndex[0]);
MaxRadiusEntry = CliDB.SpellRadiusStorage.LookupByKey(_effect.EffectRadiusIndex[1]);
ChainTargets = _effect.EffectChainTargets;
ItemType = _effect.EffectItemType;
TriggerSpell = _effect.EffectTriggerSpell;
+11 -11
View File
@@ -642,11 +642,11 @@ namespace Game.Entities
if (skillAbility.SupercedesSpell == 0)
continue;
if (!HasSpellInfo(skillAbility.SupercedesSpell) || !HasSpellInfo(skillAbility.SpellID))
if (!HasSpellInfo(skillAbility.SupercedesSpell) || !HasSpellInfo(skillAbility.Spell))
continue;
chains[skillAbility.SupercedesSpell] = skillAbility.SpellID;
hasPrev.Add(skillAbility.SpellID);
chains[skillAbility.SupercedesSpell] = skillAbility.Spell;
hasPrev.Add(skillAbility.Spell);
}
// each key in chains that isn't present in hasPrev is a first rank
@@ -1418,7 +1418,7 @@ namespace Game.Entities
mSkillLineAbilityMap.Clear();
foreach (var skill in CliDB.SkillLineAbilityStorage.Values)
mSkillLineAbilityMap.Add(skill.SpellID, skill);
mSkillLineAbilityMap.Add(skill.Spell, skill);
Log.outInfo(LogFilter.ServerLoading, "Loaded {0} SkillLineAbility MultiMap Data in {1} ms", mSkillLineAbilityMap.Count, Time.GetMSTimeDiffToNow(oldMSTime));
}
@@ -1627,7 +1627,7 @@ namespace Game.Entities
if (skillLine.AcquireMethod != AbilytyLearnType.OnSkillLearn)
continue;
SpellInfo spell = GetSpellInfo(skillLine.SpellID);
SpellInfo spell = GetSpellInfo(skillLine.Spell);
if (spell == null) // not exist or triggered or talent
continue;
@@ -2189,7 +2189,7 @@ namespace Game.Entities
if (enchant.Effect[s] != ItemEnchantmentType.CombatSpell)
continue;
SpellInfo procInfo = GetSpellInfo(enchant.EffectSpellID[s]);
SpellInfo procInfo = GetSpellInfo(enchant.EffectArg[s]);
if (procInfo == null)
continue;
@@ -2810,13 +2810,13 @@ namespace Game.Entities
SummonPropertiesRecord properties = CliDB.SummonPropertiesStorage.LookupByKey(121);
if (properties != null)
properties.Type = SummonType.Totem;
properties.Title = SummonType.Totem;
properties = CliDB.SummonPropertiesStorage.LookupByKey(647); // 52893
if (properties != null)
properties.Type = SummonType.Totem;
properties.Title = SummonType.Totem;
properties = CliDB.SummonPropertiesStorage.LookupByKey(628);
if (properties != null) // Hungry Plaguehound
properties.Category = SummonCategory.Pet;
properties.Control = SummonCategory.Pet;
Log.outInfo(LogFilter.ServerLoading, "Loaded SpellInfo corrections in {0} ms", Time.GetMSTimeDiffToNow(oldMSTime));
}
@@ -2874,11 +2874,11 @@ namespace Game.Entities
foreach (var skillLine in CliDB.SkillLineAbilityStorage.Values)
{
SpellInfo spellInfo = GetSpellInfo(skillLine.SpellID);
SpellInfo spellInfo = GetSpellInfo(skillLine.Spell);
if (spellInfo == null)
continue;
var levels = levelsBySpell.LookupByKey(skillLine.SpellID);
var levels = levelsBySpell.LookupByKey(skillLine.Spell);
if (levels != null && levels.SpellLevel != 0)
continue;