Core/Spells: Fixed ErrorCube spell missiles

Port From (https://github.com/TrinityCore/TrinityCore/commit/ce794f3978e853341b2dc0c782e7bda34303b3f8)
This commit is contained in:
hondacrx
2021-11-18 14:30:42 -05:00
parent 83f9cbe66f
commit 9268b931c8
10 changed files with 427 additions and 166 deletions
+6
View File
@@ -310,6 +310,9 @@ namespace Game.DataStorage
SpellShapeshiftFormStorage = ReadDB2<SpellShapeshiftFormRecord>("SpellShapeshiftForm.db2", HotfixStatements.SEL_SPELL_SHAPESHIFT_FORM, HotfixStatements.SEL_SPELL_SHAPESHIFT_FORM_LOCALE);
SpellTargetRestrictionsStorage = ReadDB2<SpellTargetRestrictionsRecord>("SpellTargetRestrictions.db2", HotfixStatements.SEL_SPELL_TARGET_RESTRICTIONS);
SpellTotemsStorage = ReadDB2<SpellTotemsRecord>("SpellTotems.db2", HotfixStatements.SEL_SPELL_TOTEMS);
SpellVisualStorage = ReadDB2<SpellVisualRecord>("SpellVisual.db2", HotfixStatements.SEL_SPELL_VISUAL);
SpellVisualEffectNameStorage = ReadDB2<SpellVisualEffectNameRecord>("SpellVisualEffectName.db2", HotfixStatements.SEL_SPELL_VISUAL_EFFECT_NAME);
SpellVisualMissileStorage = ReadDB2<SpellVisualMissileRecord>("SpellVisualMissile.db2", HotfixStatements.SEL_SPELL_VISUAL_MISSILE);
SpellVisualKitStorage = ReadDB2<SpellVisualKitRecord>("SpellVisualKit.db2", HotfixStatements.SEL_SPELL_VISUAL_KIT);
SpellXSpellVisualStorage = ReadDB2<SpellXSpellVisualRecord>("SpellXSpellVisual.db2", HotfixStatements.SEL_SPELL_X_SPELL_VISUAL);
SummonPropertiesStorage = ReadDB2<SummonPropertiesRecord>("SummonProperties.db2", HotfixStatements.SEL_SUMMON_PROPERTIES);
@@ -695,6 +698,9 @@ namespace Game.DataStorage
public static DB6Storage<SpellShapeshiftFormRecord> SpellShapeshiftFormStorage;
public static DB6Storage<SpellTargetRestrictionsRecord> SpellTargetRestrictionsStorage;
public static DB6Storage<SpellTotemsRecord> SpellTotemsStorage;
public static DB6Storage<SpellVisualRecord> SpellVisualStorage;
public static DB6Storage<SpellVisualEffectNameRecord> SpellVisualEffectNameStorage;
public static DB6Storage<SpellVisualMissileRecord> SpellVisualMissileStorage;
public static DB6Storage<SpellVisualKitRecord> SpellVisualKitStorage;
public static DB6Storage<SpellXSpellVisualRecord> SpellXSpellVisualStorage;
public static DB6Storage<SummonPropertiesRecord> SummonPropertiesStorage;
+9
View File
@@ -507,6 +507,9 @@ namespace Game.DataStorage
foreach (SpellProcsPerMinuteModRecord ppmMod in SpellProcsPerMinuteModStorage.Values)
_spellProcsPerMinuteMods.Add(ppmMod.SpellProcsPerMinuteID, ppmMod);
foreach (SpellVisualMissileRecord spellVisualMissile in SpellVisualMissileStorage.Values)
_spellVisualMissilesBySet.Add(spellVisualMissile.SpellVisualMissileSetID, spellVisualMissile);
for (var i = 0; i < (int)Class.Max; ++i)
{
_talentsByPosition[i] = new List<TalentRecord>[PlayerConst.MaxTalentTiers][];
@@ -2009,6 +2012,11 @@ namespace Game.DataStorage
return _spellProcsPerMinuteMods.LookupByKey(spellprocsPerMinuteId);
}
public List<SpellVisualMissileRecord> GetSpellVisualMissiles(int spellVisualMissileSetId)
{
return _spellVisualMissilesBySet.LookupByKey(spellVisualMissileSetId);
}
public List<TalentRecord> GetTalentsByPosition(Class class_, uint tier, uint column)
{
return _talentsByPosition[(int)class_][tier][column];
@@ -2409,6 +2417,7 @@ namespace Game.DataStorage
List<Tuple<int, uint>> _specsBySpecSet = new();
List<byte> _spellFamilyNames = new();
MultiMap<uint, SpellProcsPerMinuteModRecord> _spellProcsPerMinuteMods = new();
MultiMap<uint, SpellVisualMissileRecord> _spellVisualMissilesBySet = new();
List<TalentRecord>[][][] _talentsByPosition = new List<TalentRecord>[(int)Class.Max][][];
List<uint> _toys = new();
Dictionary<uint, TransmogIllusionRecord> _transmogIllusionsByEnchantmentId = new();
@@ -555,6 +555,69 @@ namespace Game.DataStorage
public uint[] Totem = new uint[SpellConst.MaxTotems];
}
public sealed class SpellVisualRecord
{
public uint Id;
public float[] MissileCastOffset = new float[3];
public float[] MissileImpactOffset = new float[3];
public uint AnimEventSoundID;
public int Flags;
public sbyte MissileAttachment;
public sbyte MissileDestinationAttachment;
public uint MissileCastPositionerID;
public uint MissileImpactPositionerID;
public int MissileTargetingKit;
public uint HostileSpellVisualID;
public uint CasterSpellVisualID;
public ushort SpellVisualMissileSetID;
public ushort DamageNumberDelay;
public uint LowViolenceSpellVisualID;
public uint RaidSpellVisualMissileSetID;
public int ReducedUnexpectedCameraMovementSpellVisualID;
}
public sealed class SpellVisualEffectNameRecord
{
public uint Id;
public int ModelFileDataID;
public float BaseMissileSpeed;
public float Scale;
public float MinAllowedScale;
public float MaxAllowedScale;
public float Alpha;
public uint Flags;
public int TextureFileDataID;
public float EffectRadius;
public uint Type;
public int GenericID;
public uint RibbonQualityID;
public int DissolveEffectID;
public int ModelPosition;
public sbyte Unknown901;
}
public sealed class SpellVisualMissileRecord
{
public float[] CastOffset = new float[3];
public float[] ImpactOffset = new float[3];
public uint Id;
public ushort SpellVisualEffectNameID;
public uint SoundEntriesID;
public sbyte Attachment;
public sbyte DestinationAttachment;
public ushort CastPositionerID;
public ushort ImpactPositionerID;
public int FollowGroundHeight;
public uint FollowGroundDropSpeed;
public ushort FollowGroundApproach;
public uint Flags;
public ushort SpellMissileMotionID;
public uint AnimKitID;
public sbyte ClutterLevel;
public int DecayTimeAfterImpact;
public uint SpellVisualMissileSetID;
}
public sealed class SpellVisualKitRecord
{
public uint Id;