From 9616582b059e50d32f5c8325514e6403d00e4371 Mon Sep 17 00:00:00 2001 From: Ovahlord Date: Sat, 28 Aug 2021 14:59:16 +0200 Subject: [PATCH] Core/Spells: load BonusCoefficient into SpellInfo and use it for Goblin's Rocket Barrage Racial spell damage calculation --- .../world/4.3.4/2021_08_28_00_world.sql | 3 +++ src/server/game/DataStores/DBCStructure.h | 2 +- src/server/game/Spells/SpellInfo.cpp | 1 + src/server/game/Spells/SpellInfo.h | 1 + src/server/scripts/Spells/spell_generic.cpp | 19 +++++++++++++++++++ 5 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 sql/updates/world/4.3.4/2021_08_28_00_world.sql diff --git a/sql/updates/world/4.3.4/2021_08_28_00_world.sql b/sql/updates/world/4.3.4/2021_08_28_00_world.sql new file mode 100644 index 0000000000..0b702b29ca --- /dev/null +++ b/sql/updates/world/4.3.4/2021_08_28_00_world.sql @@ -0,0 +1,3 @@ +DELETE FROM `spell_script_names` WHERE `ScriptName`= 'spell_rocket_barrage'; +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(69041, 'spell_rocket_barrage'); diff --git a/src/server/game/DataStores/DBCStructure.h b/src/server/game/DataStores/DBCStructure.h index c2b62f8eaf..783871b2d0 100644 --- a/src/server/game/DataStores/DBCStructure.h +++ b/src/server/game/DataStores/DBCStructure.h @@ -2096,7 +2096,7 @@ struct SpellEntry //uint32 SpellMissileID; // 27 //uint32 DescriptionVariablesID; // 28 uint32 Difficulty; // 29 - float SpellCoef; // 30 + float BonusCoefficient; // 30 uint32 ScalingID; // 31 uint32 AuraOptionsID; // 32 uint32 AuraRestrictionsID; // 33 diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp index af485b4b63..d6c7dd50ae 100644 --- a/src/server/game/Spells/SpellInfo.cpp +++ b/src/server/game/Spells/SpellInfo.cpp @@ -906,6 +906,7 @@ SpellInfo::SpellInfo(SpellEntry const* spellEntry, SpellEffectEntry const** effe SchoolMask = spellEntry->SchoolMask; RuneCostID = spellEntry->RuneCostID; SpellDifficultyId = spellEntry->Difficulty; + BonusCoefficient = spellEntry->BonusCoefficient; SpellScalingId = spellEntry->ScalingID; SpellAuraOptionsId = spellEntry->AuraOptionsID; SpellAuraRestrictionsId = spellEntry->AuraRestrictionsID; diff --git a/src/server/game/Spells/SpellInfo.h b/src/server/game/Spells/SpellInfo.h index 777ab173a7..e870ded0e4 100644 --- a/src/server/game/Spells/SpellInfo.h +++ b/src/server/game/Spells/SpellInfo.h @@ -417,6 +417,7 @@ class TC_GAME_API SpellInfo int32 AreaGroupId; uint32 SchoolMask; uint32 SpellDifficultyId; + float BonusCoefficient; uint32 SpellScalingId; uint32 SpellAuraOptionsId; uint32 SpellAuraRestrictionsId; diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp index 2bf45010c5..604e640fa8 100644 --- a/src/server/scripts/Spells/spell_generic.cpp +++ b/src/server/scripts/Spells/spell_generic.cpp @@ -5349,6 +5349,24 @@ class spell_gen_wounded : public SpellScript } }; +// 69041 - Rocket Barrage (Racial) +class spell_rocket_barrage : public SpellScript +{ + void HandleDamage(SpellEffIndex effIndex) + { + Unit* caster = GetCaster(); + int32 basePoints = GetEffectValue() + caster->getLevel() * 2; + basePoints += caster->SpellBaseDamageBonusDone(GetSpellInfo()->GetSchoolMask()) * GetSpellInfo()->Effects[effIndex].BonusMultiplier; + basePoints += caster->GetTotalAttackPowerValue(caster->getClass() != CLASS_HUNTER ? BASE_ATTACK : RANGED_ATTACK) * GetSpellInfo()->BonusCoefficient; + SetEffectValue(basePoints); + } + + void Register() override + { + OnEffectLaunchTarget.Register(&spell_rocket_barrage::HandleDamage, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE); + } +}; + void AddSC_generic_spell_scripts() { new spell_gen_absorb0_hitlimit1(); @@ -5481,4 +5499,5 @@ void AddSC_generic_spell_scripts() RegisterSpellScript(spell_gen_ghost); RegisterSpellScript(spell_gen_zero_energy_zero_regen); RegisterSpellScript(spell_gen_wounded); + RegisterSpellScript(spell_rocket_barrage); }