diff options
-rw-r--r-- | sql/updates/world/cata_classic/2025_01_26_03_world_2025_01_23_00_world.sql | 14 | ||||
-rw-r--r-- | src/server/game/Spells/SpellMgr.cpp | 135 |
2 files changed, 82 insertions, 67 deletions
diff --git a/sql/updates/world/cata_classic/2025_01_26_03_world_2025_01_23_00_world.sql b/sql/updates/world/cata_classic/2025_01_26_03_world_2025_01_23_00_world.sql new file mode 100644 index 00000000000..6728b966a65 --- /dev/null +++ b/sql/updates/world/cata_classic/2025_01_26_03_world_2025_01_23_00_world.sql @@ -0,0 +1,14 @@ +DELIMITER ;; +CREATE PROCEDURE serverside_spell_2025_01_23_00() BEGIN + IF NOT EXISTS (SELECT * FROM `information_schema`.`columns` WHERE `table_schema`=SCHEMA() AND `table_name`='serverside_spell' AND `column_name`='AttributesEx15') THEN + + ALTER TABLE `serverside_spell` + ADD COLUMN `AttributesEx15` int unsigned NOT NULL DEFAULT '0' AFTER `AttributesEx14`; + + END IF; +END;; + +DELIMITER ; +CALL serverside_spell_2025_01_23_00(); + +DROP PROCEDURE IF EXISTS serverside_spell_2025_01_23_00; diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp index a3e3b4cee58..6f6e68511ab 100644 --- a/src/server/game/Spells/SpellMgr.cpp +++ b/src/server/game/Spells/SpellMgr.cpp @@ -2967,21 +2967,21 @@ void SpellMgr::LoadSpellInfoServerside() QueryResult spellsResult = WorldDatabase.Query("SELECT Id, DifficultyID, CategoryId, Dispel, Mechanic, Attributes, AttributesEx, AttributesEx2, AttributesEx3, " // 9 10 11 12 13 14 15 16 17 18 "AttributesEx4, AttributesEx5, AttributesEx6, AttributesEx7, AttributesEx8, AttributesEx9, AttributesEx10, AttributesEx11, AttributesEx12, AttributesEx13, " - // 19 20 21 22 23 24 25 26 27 - "AttributesEx14, Stances, StancesNot, Targets, TargetCreatureType, RequiresSpellFocus, FacingCasterFlags, CasterAuraState, TargetAuraState, " - // 28 29 30 31 32 33 + // 19 20 21 22 23 24 25 26 27 28 + "AttributesEx14, AttributesEx15, Stances, StancesNot, Targets, TargetCreatureType, RequiresSpellFocus, FacingCasterFlags, CasterAuraState, TargetAuraState, " + // 29 30 31 32 33 34 "ExcludeCasterAuraState, ExcludeTargetAuraState, CasterAuraSpell, TargetAuraSpell, ExcludeCasterAuraSpell, ExcludeTargetAuraSpell, " - // 34 35 36 37 38 + // 35 36 37 38 39 "CasterAuraType, TargetAuraType, ExcludeCasterAuraType, ExcludeTargetAuraType, CastingTimeIndex, " - // 39 40 41 42 43 44 45 + // 40 41 42 43 44 45 46 "RecoveryTime, CategoryRecoveryTime, StartRecoveryCategory, StartRecoveryTime, InterruptFlags, AuraInterruptFlags1, AuraInterruptFlags2, " - // 46 47 48 49 50 51 52 53 54 55 56 + // 47 48 49 50 51 52 53 54 55 56 57 "ChannelInterruptFlags1, ChannelInterruptFlags2, ProcFlags, ProcFlags2, ProcChance, ProcCharges, ProcCooldown, ProcBasePPM, MaxLevel, BaseLevel, SpellLevel, " - // 57 58 59 60 61 62 63 64 65 + // 58 59 60 61 62 63 64 65 66 "DurationIndex, RangeIndex, Speed, LaunchDelay, StackAmount, EquippedItemClass, EquippedItemSubClassMask, EquippedItemInventoryTypeMask, ContentTuningId, " - // 66 67 68 69 70 71 72 73 74 75 + // 67 68 69 70 71 72 73 74 75 76 "SpellName, ConeAngle, ConeWidth, MaxTargetLevel, MaxAffectedTargets, SpellFamilyName, SpellFamilyFlags1, SpellFamilyFlags2, SpellFamilyFlags3, SpellFamilyFlags4, " - // 76 77 78 79 80 + // 77 78 79 80 81 "DmgClass, PreventionType, AreaGroupId, SchoolMask, ChargeCategoryId FROM serverside_spell"); if (spellsResult) { @@ -2999,7 +2999,7 @@ void SpellMgr::LoadSpellInfoServerside() continue; } - mServersideSpellNames.emplace_back(spellId, fields[66].GetString()); + mServersideSpellNames.emplace_back(spellId, fields[67].GetString()); SpellInfo& spellInfo = const_cast<SpellInfo&>(*mSpellInfoMap.emplace(&mServersideSpellNames.back().Name, difficulty, spellEffects[{ spellId, difficulty }]).first); spellInfo.CategoryId = fields[2].GetUInt32(); @@ -3020,63 +3020,64 @@ void SpellMgr::LoadSpellInfoServerside() spellInfo.AttributesEx12 = fields[17].GetUInt32(); spellInfo.AttributesEx13 = fields[18].GetUInt32(); spellInfo.AttributesEx14 = fields[19].GetUInt32(); - spellInfo.Stances = fields[20].GetUInt64(); - spellInfo.StancesNot = fields[21].GetUInt64(); - spellInfo.Targets = fields[22].GetUInt32(); - spellInfo.TargetCreatureType = fields[23].GetUInt32(); - spellInfo.RequiresSpellFocus = fields[24].GetUInt32(); - spellInfo.FacingCasterFlags = fields[25].GetUInt32(); - spellInfo.CasterAuraState = fields[26].GetUInt32(); - spellInfo.TargetAuraState = fields[27].GetUInt32(); - spellInfo.ExcludeCasterAuraState = fields[28].GetUInt32(); - spellInfo.ExcludeTargetAuraState = fields[29].GetUInt32(); - spellInfo.CasterAuraSpell = fields[30].GetUInt32(); - spellInfo.TargetAuraSpell = fields[31].GetUInt32(); - spellInfo.ExcludeCasterAuraSpell = fields[32].GetUInt32(); - spellInfo.ExcludeTargetAuraSpell = fields[33].GetUInt32(); - // spellInfo.CasterAuraType = AuraType(fields[34].GetInt32()); - // spellInfo.TargetAuraType = AuraType(fields[35].GetInt32()); - // spellInfo.ExcludeCasterAuraType = AuraType(fields[36].GetInt32()); - // spellInfo.ExcludeTargetAuraType = AuraType(fields[37].GetInt32()); - spellInfo.CastTimeEntry = sSpellCastTimesStore.LookupEntry(fields[38].GetUInt32()); - spellInfo.RecoveryTime = fields[39].GetUInt32(); - spellInfo.CategoryRecoveryTime = fields[40].GetUInt32(); - spellInfo.StartRecoveryCategory = fields[41].GetUInt32(); - spellInfo.StartRecoveryTime = fields[42].GetUInt32(); - spellInfo.InterruptFlags = SpellInterruptFlags(fields[43].GetUInt32()); - spellInfo.AuraInterruptFlags = SpellAuraInterruptFlags(fields[44].GetUInt32()); - spellInfo.AuraInterruptFlags2 = SpellAuraInterruptFlags2(fields[45].GetUInt32()); - spellInfo.ChannelInterruptFlags = SpellAuraInterruptFlags(fields[46].GetUInt32()); - spellInfo.ChannelInterruptFlags2 = SpellAuraInterruptFlags2(fields[47].GetUInt32()); - spellInfo.ProcFlags[0] = fields[48].GetUInt32(); - spellInfo.ProcFlags[1] = fields[49].GetUInt32(); - spellInfo.ProcChance = fields[50].GetUInt32(); - spellInfo.ProcCharges = fields[51].GetUInt32(); - spellInfo.ProcCooldown = fields[52].GetUInt32(); - spellInfo.ProcBasePPM = fields[53].GetFloat(); - spellInfo.MaxLevel = fields[54].GetUInt32(); - spellInfo.BaseLevel = fields[55].GetUInt32(); - spellInfo.SpellLevel = fields[56].GetUInt32(); - spellInfo.DurationEntry = sSpellDurationStore.LookupEntry(fields[57].GetUInt32()); - spellInfo.RangeEntry = sSpellRangeStore.LookupEntry(fields[58].GetUInt32()); - spellInfo.Speed = fields[59].GetFloat(); - spellInfo.LaunchDelay = fields[60].GetFloat(); - spellInfo.StackAmount = fields[61].GetUInt32(); - spellInfo.EquippedItemClass = fields[62].GetInt32(); - spellInfo.EquippedItemSubClassMask = fields[63].GetInt32(); - spellInfo.EquippedItemInventoryTypeMask = fields[64].GetInt32(); - spellInfo.ContentTuningId = fields[65].GetUInt32(); - spellInfo.ConeAngle = fields[67].GetFloat(); - spellInfo.Width = fields[68].GetFloat(); - spellInfo.MaxTargetLevel = fields[69].GetUInt32(); - spellInfo.MaxAffectedTargets = fields[70].GetUInt32(); - spellInfo.SpellFamilyName = fields[71].GetUInt32(); - spellInfo.SpellFamilyFlags = flag128(fields[72].GetUInt32(), fields[73].GetUInt32(), fields[74].GetUInt32(), fields[75].GetUInt32()); - spellInfo.DmgClass = fields[76].GetUInt32(); - spellInfo.PreventionType = fields[77].GetUInt32(); - spellInfo.RequiredAreasID = fields[78].GetInt32(); - spellInfo.SchoolMask = fields[79].GetUInt32(); - spellInfo.ChargeCategoryId = fields[80].GetUInt32(); + spellInfo.AttributesEx15 = fields[20].GetUInt32(); + spellInfo.Stances = fields[21].GetUInt64(); + spellInfo.StancesNot = fields[22].GetUInt64(); + spellInfo.Targets = fields[23].GetUInt32(); + spellInfo.TargetCreatureType = fields[24].GetUInt32(); + spellInfo.RequiresSpellFocus = fields[25].GetUInt32(); + spellInfo.FacingCasterFlags = fields[26].GetUInt32(); + spellInfo.CasterAuraState = fields[27].GetUInt32(); + spellInfo.TargetAuraState = fields[28].GetUInt32(); + spellInfo.ExcludeCasterAuraState = fields[29].GetUInt32(); + spellInfo.ExcludeTargetAuraState = fields[30].GetUInt32(); + spellInfo.CasterAuraSpell = fields[31].GetUInt32(); + spellInfo.TargetAuraSpell = fields[32].GetUInt32(); + spellInfo.ExcludeCasterAuraSpell = fields[33].GetUInt32(); + spellInfo.ExcludeTargetAuraSpell = fields[34].GetUInt32(); + // spellInfo.CasterAuraType = AuraType(fields[35].GetInt32()); + // spellInfo.TargetAuraType = AuraType(fields[36].GetInt32()); + // spellInfo.ExcludeCasterAuraType = AuraType(fields[37].GetInt32()); + // spellInfo.ExcludeTargetAuraType = AuraType(fields[38].GetInt32()); + spellInfo.CastTimeEntry = sSpellCastTimesStore.LookupEntry(fields[39].GetUInt32()); + spellInfo.RecoveryTime = fields[40].GetUInt32(); + spellInfo.CategoryRecoveryTime = fields[41].GetUInt32(); + spellInfo.StartRecoveryCategory = fields[42].GetUInt32(); + spellInfo.StartRecoveryTime = fields[43].GetUInt32(); + spellInfo.InterruptFlags = SpellInterruptFlags(fields[44].GetUInt32()); + spellInfo.AuraInterruptFlags = SpellAuraInterruptFlags(fields[45].GetUInt32()); + spellInfo.AuraInterruptFlags2 = SpellAuraInterruptFlags2(fields[46].GetUInt32()); + spellInfo.ChannelInterruptFlags = SpellAuraInterruptFlags(fields[47].GetUInt32()); + spellInfo.ChannelInterruptFlags2 = SpellAuraInterruptFlags2(fields[48].GetUInt32()); + spellInfo.ProcFlags[0] = fields[49].GetUInt32(); + spellInfo.ProcFlags[1] = fields[50].GetUInt32(); + spellInfo.ProcChance = fields[51].GetUInt32(); + spellInfo.ProcCharges = fields[52].GetUInt32(); + spellInfo.ProcCooldown = fields[53].GetUInt32(); + spellInfo.ProcBasePPM = fields[54].GetFloat(); + spellInfo.MaxLevel = fields[55].GetUInt32(); + spellInfo.BaseLevel = fields[56].GetUInt32(); + spellInfo.SpellLevel = fields[57].GetUInt32(); + spellInfo.DurationEntry = sSpellDurationStore.LookupEntry(fields[58].GetUInt32()); + spellInfo.RangeEntry = sSpellRangeStore.LookupEntry(fields[59].GetUInt32()); + spellInfo.Speed = fields[60].GetFloat(); + spellInfo.LaunchDelay = fields[61].GetFloat(); + spellInfo.StackAmount = fields[62].GetUInt32(); + spellInfo.EquippedItemClass = fields[63].GetInt32(); + spellInfo.EquippedItemSubClassMask = fields[64].GetInt32(); + spellInfo.EquippedItemInventoryTypeMask = fields[65].GetInt32(); + spellInfo.ContentTuningId = fields[66].GetUInt32(); + spellInfo.ConeAngle = fields[68].GetFloat(); + spellInfo.Width = fields[69].GetFloat(); + spellInfo.MaxTargetLevel = fields[70].GetUInt32(); + spellInfo.MaxAffectedTargets = fields[71].GetUInt32(); + spellInfo.SpellFamilyName = fields[72].GetUInt32(); + spellInfo.SpellFamilyFlags = flag128(fields[73].GetUInt32(), fields[74].GetUInt32(), fields[75].GetUInt32(), fields[76].GetUInt32()); + spellInfo.DmgClass = fields[77].GetUInt32(); + spellInfo.PreventionType = fields[78].GetUInt32(); + spellInfo.RequiredAreasID = fields[79].GetInt32(); + spellInfo.SchoolMask = fields[80].GetUInt32(); + spellInfo.ChargeCategoryId = fields[81].GetUInt32(); } while (spellsResult->NextRow()); } |