aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/updates/world/3.3.5/2025_07_22_01_world.sql15
-rw-r--r--src/server/scripts/Spells/spell_generic.cpp44
2 files changed, 59 insertions, 0 deletions
diff --git a/sql/updates/world/3.3.5/2025_07_22_01_world.sql b/sql/updates/world/3.3.5/2025_07_22_01_world.sql
new file mode 100644
index 00000000000..091648e3571
--- /dev/null
+++ b/sql/updates/world/3.3.5/2025_07_22_01_world.sql
@@ -0,0 +1,15 @@
+--
+DELETE FROM `spell_script_names` WHERE `ScriptName` IN (
+'spell_gen_knock_away_threat_reduction_100',
+'spell_gen_knock_away_threat_reduction_50',
+'spell_gen_knock_away_threat_reduction_25');
+INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
+(10101, 'spell_gen_knock_away_threat_reduction_100'),
+(18670, 'spell_gen_knock_away_threat_reduction_50'),
+(18945, 'spell_gen_knock_away_threat_reduction_50'),
+(18813, 'spell_gen_knock_away_threat_reduction_25'),
+(25778, 'spell_gen_knock_away_threat_reduction_25');
+
+DELETE FROM `spell_script_names` WHERE `ScriptName` = 'spell_gen_revive_self';
+INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
+(32343, 'spell_gen_revive_self');
diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp
index e019cb9cc8e..ab852ecba75 100644
--- a/src/server/scripts/Spells/spell_generic.cpp
+++ b/src/server/scripts/Spells/spell_generic.cpp
@@ -2171,6 +2171,29 @@ class spell_gen_injured : public SpellScript
}
};
+// To be added: 19633, 20686, 23382, 31389, 32959
+class spell_gen_knock_away_threat_reduction : public SpellScript
+{
+ PrepareSpellScript(spell_gen_knock_away_threat_reduction);
+
+public:
+ explicit spell_gen_knock_away_threat_reduction(int32 threatPercent) : _threatPercent(threatPercent) { }
+
+private:
+ int32 _threatPercent;
+
+ void HandleScript(SpellEffIndex /*effIndex*/)
+ {
+ if (GetCaster()->CanHaveThreatList())
+ GetCaster()->GetThreatManager().ModifyThreatByPercent(GetHitUnit(), -_threatPercent);
+ }
+
+ void Register() override
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_gen_knock_away_threat_reduction::HandleScript, EFFECT_2, SPELL_EFFECT_SCRIPT_EFFECT);
+ }
+};
+
class spell_gen_lifeblood : public AuraScript
{
PrepareAuraScript(spell_gen_lifeblood);
@@ -3322,6 +3345,23 @@ class spell_gen_replenishment_aura : public AuraScript
}
};
+// 32343 - Revive Self
+class spell_gen_revive_self : public SpellScript
+{
+ PrepareSpellScript(spell_gen_revive_self);
+
+ void HandleDummy(SpellEffIndex /*effIndex*/)
+ {
+ GetCaster()->SetFullHealth();
+ GetCaster()->SetFullPower(POWER_MANA);
+ }
+
+ void Register() override
+ {
+ OnEffectHit += SpellEffectFn(spell_gen_revive_self::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
+ }
+};
+
enum SeaforiumSpells
{
SPELL_PLANT_CHARGES_CREDIT_ACHIEVEMENT = 60937
@@ -4718,6 +4758,9 @@ void AddSC_generic_spell_scripts()
RegisterSpellScript(spell_gen_hate_to_50);
RegisterSpellScript(spell_gen_hate_to_75);
RegisterSpellScript(spell_gen_injured);
+ RegisterSpellScriptWithArgs(spell_gen_knock_away_threat_reduction, "spell_gen_knock_away_threat_reduction_100", 100); // 10101
+ RegisterSpellScriptWithArgs(spell_gen_knock_away_threat_reduction, "spell_gen_knock_away_threat_reduction_50", 50); // 18670, 18945
+ RegisterSpellScriptWithArgs(spell_gen_knock_away_threat_reduction, "spell_gen_knock_away_threat_reduction_25", 25); // 18813, 25778
RegisterSpellScript(spell_gen_lifeblood);
RegisterSpellScriptWithArgs(spell_gen_lifebloom, "spell_hexlord_lifebloom", SPELL_HEXLORD_MALACRASS_LIFEBLOOM_FINAL_HEAL);
RegisterSpellScriptWithArgs(spell_gen_lifebloom, "spell_tur_ragepaw_lifebloom", SPELL_TUR_RAGEPAW_LIFEBLOOM_FINAL_HEAL);
@@ -4763,6 +4806,7 @@ void AddSC_generic_spell_scripts()
RegisterSpellScript(spell_gen_remove_on_health_pct);
RegisterSpellScript(spell_gen_remove_on_full_health);
RegisterSpellScript(spell_gen_remove_on_full_health_pct);
+ RegisterSpellScript(spell_gen_revive_self);
RegisterSpellScript(spell_gen_seaforium_blast);
RegisterSpellScript(spell_gen_spectator_cheer_trigger);
RegisterSpellScript(spell_gen_spirit_healer_res);