aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/base/auth_database.sql19
-rw-r--r--sql/updates/auth/master/2025_12_19_00_auth.sql23
-rw-r--r--sql/updates/world/master/2025_12_17_01_world.sql7
-rw-r--r--sql/updates/world/master/2025_12_18_00_world.sql3
-rw-r--r--src/server/scripts/Spells/spell_priest.cpp107
5 files changed, 142 insertions, 17 deletions
diff --git a/sql/base/auth_database.sql b/sql/base/auth_database.sql
index ec826ba5218..1c6d89839da 100644
--- a/sql/base/auth_database.sql
+++ b/sql/base/auth_database.sql
@@ -1362,7 +1362,14 @@ INSERT INTO `build_auth_key` VALUES
(64877,'Mac','x64','WoWC',0x01003F46907A168B2BDF036575802098),
(64877,'Win','A64','WoW',0x026ED07009997B857BB37DCBB5B11477),
(64877,'Win','x64','WoW',0x6AB7C89863A9D6CDA9C0FAE710FEB126),
-(64877,'Win','x64','WoWC',0xBD52F0D3F7C92642185E963CEA424BD3);
+(64877,'Win','x64','WoWC',0xBD52F0D3F7C92642185E963CEA424BD3),
+(64978,'Mac','A64','WoW',0x2D3D9A591D1750ACBFA38450225218E0),
+(64978,'Mac','A64','WoWC',0x0FA46AA62D9E1DEC723F01B16CE26442),
+(64978,'Mac','x64','WoW',0x8C4D1BA36574C6E68716DB455C3B73FD),
+(64978,'Mac','x64','WoWC',0xD1EE6F8E00507CC771F4AAD86B91F7AA),
+(64978,'Win','A64','WoW',0x04FB74A28B1A31D7A2A3126DD2B71AB7),
+(64978,'Win','x64','WoW',0x706BA57AEDD9816B5A58209FA6A3B728),
+(64978,'Win','x64','WoWC',0x96B417D4D1F12CF8B0C855A23C674C2C);
/*!40000 ALTER TABLE `build_auth_key` ENABLE KEYS */;
UNLOCK TABLES;
@@ -1780,7 +1787,8 @@ INSERT INTO `build_info` VALUES
(64395,11,2,5,NULL),
(64484,11,2,5,NULL),
(64502,11,2,5,NULL),
-(64877,11,2,7,NULL);
+(64877,11,2,7,NULL),
+(64978,11,2,7,NULL);
/*!40000 ALTER TABLE `build_info` ENABLE KEYS */;
UNLOCK TABLES;
@@ -3393,7 +3401,7 @@ CREATE TABLE `realmlist` (
`timezone` tinyint unsigned NOT NULL DEFAULT '0',
`allowedSecurityLevel` tinyint unsigned NOT NULL DEFAULT '0',
`population` float NOT NULL DEFAULT '0',
- `gamebuild` int unsigned NOT NULL DEFAULT '64877',
+ `gamebuild` int unsigned NOT NULL DEFAULT '64978',
`Region` tinyint unsigned NOT NULL DEFAULT '1',
`Battlegroup` tinyint unsigned NOT NULL DEFAULT '1',
PRIMARY KEY (`id`),
@@ -3408,7 +3416,7 @@ CREATE TABLE `realmlist` (
LOCK TABLES `realmlist` WRITE;
/*!40000 ALTER TABLE `realmlist` DISABLE KEYS */;
INSERT INTO `realmlist` VALUES
-(1,'Trinity','127.0.0.1','127.0.0.1',NULL,NULL,'255.255.255.0',8085,0,0,1,0,0,64877,1,1);
+(1,'Trinity','127.0.0.1','127.0.0.1',NULL,NULL,'255.255.255.0',8085,0,0,1,0,0,64978,1,1);
/*!40000 ALTER TABLE `realmlist` ENABLE KEYS */;
UNLOCK TABLES;
@@ -3939,7 +3947,8 @@ INSERT INTO `updates` VALUES
('2025_11_15_00_auth.sql','744E145E7EFBADDAF0BAC00F6FC84A1FE79EDFCA','RELEASED','2025-11-15 12:09:00',0),
('2025_11_18_00_auth.sql','AAE3FEB4363A16253C7ADF8CF5973E3694C5BC52','RELEASED','2025-11-18 20:09:47',0),
('2025_11_19_00_auth.sql','2E89C66714539C9713B9ADD3F7697730A426C795','RELEASED','2025-11-19 08:20:00',0),
-('2025_12_15_00_auth.sql','CA8ADF39030282B3D2627C15E751CC1D81618BAE','RELEASED','2025-12-15 15:39:58',0);
+('2025_12_15_00_auth.sql','CA8ADF39030282B3D2627C15E751CC1D81618BAE','RELEASED','2025-12-15 15:39:58',0),
+('2025_12_19_00_auth.sql','4011518915C83A60C50009949D687080019FA999','RELEASED','2025-12-19 00:48:17',0);
/*!40000 ALTER TABLE `updates` ENABLE KEYS */;
UNLOCK TABLES;
diff --git a/sql/updates/auth/master/2025_12_19_00_auth.sql b/sql/updates/auth/master/2025_12_19_00_auth.sql
new file mode 100644
index 00000000000..25e50f784dd
--- /dev/null
+++ b/sql/updates/auth/master/2025_12_19_00_auth.sql
@@ -0,0 +1,23 @@
+DELETE FROM `build_info` WHERE `build` IN (64978);
+INSERT INTO `build_info` (`build`,`majorVersion`,`minorVersion`,`bugfixVersion`,`hotfixVersion`) VALUES
+(64978,11,2,7,NULL);
+
+DELETE FROM `build_auth_key` WHERE `build`=64978 AND `platform`='Mac' AND `arch`='A64' AND `type`='WoW';
+DELETE FROM `build_auth_key` WHERE `build`=64978 AND `platform`='Mac' AND `arch`='A64' AND `type`='WoWC';
+DELETE FROM `build_auth_key` WHERE `build`=64978 AND `platform`='Mac' AND `arch`='x64' AND `type`='WoW';
+DELETE FROM `build_auth_key` WHERE `build`=64978 AND `platform`='Mac' AND `arch`='x64' AND `type`='WoWC';
+DELETE FROM `build_auth_key` WHERE `build`=64978 AND `platform`='Win' AND `arch`='A64' AND `type`='WoW';
+DELETE FROM `build_auth_key` WHERE `build`=64978 AND `platform`='Win' AND `arch`='x64' AND `type`='WoW';
+DELETE FROM `build_auth_key` WHERE `build`=64978 AND `platform`='Win' AND `arch`='x64' AND `type`='WoWC';
+INSERT INTO `build_auth_key` (`build`,`platform`,`arch`,`type`,`key`) VALUES
+(64978,'Mac','A64','WoW',0x2D3D9A591D1750ACBFA38450225218E0),
+(64978,'Mac','A64','WoWC',0x0FA46AA62D9E1DEC723F01B16CE26442),
+(64978,'Mac','x64','WoW',0x8C4D1BA36574C6E68716DB455C3B73FD),
+(64978,'Mac','x64','WoWC',0xD1EE6F8E00507CC771F4AAD86B91F7AA),
+(64978,'Win','A64','WoW',0x04FB74A28B1A31D7A2A3126DD2B71AB7),
+(64978,'Win','x64','WoW',0x706BA57AEDD9816B5A58209FA6A3B728),
+(64978,'Win','x64','WoWC',0x96B417D4D1F12CF8B0C855A23C674C2C);
+
+UPDATE `realmlist` SET `gamebuild`=64978 WHERE `gamebuild`=64877;
+
+ALTER TABLE `realmlist` CHANGE `gamebuild` `gamebuild` int unsigned NOT NULL DEFAULT '64978';
diff --git a/sql/updates/world/master/2025_12_17_01_world.sql b/sql/updates/world/master/2025_12_17_01_world.sql
new file mode 100644
index 00000000000..09a73684b48
--- /dev/null
+++ b/sql/updates/world/master/2025_12_17_01_world.sql
@@ -0,0 +1,7 @@
+DELETE FROM `spell_script_names` WHERE `ScriptName` IN ('spell_pri_divine_procession');
+INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
+(472361, 'spell_pri_divine_procession');
+
+DELETE FROM `spell_proc` WHERE `SpellId` IN (472361);
+INSERT INTO `spell_proc` (`SpellId`,`SchoolMask`,`SpellFamilyName`,`SpellFamilyMask0`,`SpellFamilyMask1`,`SpellFamilyMask2`,`SpellFamilyMask3`,`ProcFlags`,`ProcFlags2`,`SpellTypeMask`,`SpellPhaseMask`,`HitMask`,`AttributesMask`,`DisableEffectsMask`,`ProcsPerMinute`,`Chance`,`Cooldown`,`Charges`) VALUES
+(472361,0x00,6,0x00000080,0x00000000,0x00000000,0x00000000,0x0,0x0,0x1,0x2,0x403,0x0,0x0,0,0,0,0); -- Divine Procession
diff --git a/sql/updates/world/master/2025_12_18_00_world.sql b/sql/updates/world/master/2025_12_18_00_world.sql
new file mode 100644
index 00000000000..5874c17f3d6
--- /dev/null
+++ b/sql/updates/world/master/2025_12_18_00_world.sql
@@ -0,0 +1,3 @@
+DELETE FROM `spell_script_names` WHERE `ScriptName` IN ('spell_pri_empowered_renew_heal');
+INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
+(139, 'spell_pri_empowered_renew_heal');
diff --git a/src/server/scripts/Spells/spell_priest.cpp b/src/server/scripts/Spells/spell_priest.cpp
index 28e23a8ddcb..6100943eb12 100644
--- a/src/server/scripts/Spells/spell_priest.cpp
+++ b/src/server/scripts/Spells/spell_priest.cpp
@@ -85,7 +85,7 @@ enum PriestSpells
SPELL_PRIEST_DIVINE_STAR_SHADOW_DAMAGE = 390845,
SPELL_PRIEST_DIVINE_STAR_SHADOW_HEAL = 390981,
SPELL_PRIEST_DIVINE_WRATH = 40441,
- SPELL_PRIEST_EMPOWERED_RENEW_HEAL = 391359,
+ SPELL_PRIEST_EMPOWERED_RENEW = 391339,
SPELL_PRIEST_EPIPHANY = 414553,
SPELL_PRIEST_EPIPHANY_HIGHLIGHT = 414556,
SPELL_PRIEST_ESSENCE_DEVOURER = 415479,
@@ -1147,32 +1147,54 @@ private:
std::vector<ObjectGuid> _affectedUnits;
};
+struct spell_pri_holy_words_base
+{
+ static void ModifyCooldown(Unit* priest, SpellInfo const* spellInfo, Milliseconds cooldownMod)
+ {
+ priest->GetSpellHistory()->ModifyCooldown(spellInfo, cooldownMod, true);
+ }
+};
+
// 391339 - Empowered Renew
class spell_pri_empowered_renew : public AuraScript
{
bool Validate(SpellInfo const* /*spellInfo*/) override
{
- return ValidateSpellInfo({ SPELL_PRIEST_RENEW, SPELL_PRIEST_EMPOWERED_RENEW_HEAL })
+ return ValidateSpellInfo({ SPELL_PRIEST_RENEW, SPELL_PRIEST_HOLY_WORD_SANCTIFY })
&& ValidateSpellEffect({ { SPELL_PRIEST_RENEW, EFFECT_0 } })
&& sSpellMgr->AssertSpellInfo(SPELL_PRIEST_RENEW, DIFFICULTY_NONE)->GetEffect(EFFECT_0).IsAura(SPELL_AURA_PERIODIC_HEAL);
}
- void HandleProc(AuraEffect* aurEff, ProcEventInfo const& eventInfo) const
+ void HandleProc(AuraEffect const* aurEff, ProcEventInfo const& eventInfo) const
{
- Unit* caster = eventInfo.GetActor();
- Unit* target = eventInfo.GetProcTarget();
+ spell_pri_holy_words_base::ModifyCooldown(eventInfo.GetActor(), sSpellMgr->AssertSpellInfo(SPELL_PRIEST_HOLY_WORD_SANCTIFY, GetCastDifficulty()),
+ Milliseconds(-aurEff->GetAmount()));
+ }
- SpellInfo const* renewSpellInfo = sSpellMgr->AssertSpellInfo(SPELL_PRIEST_RENEW, GetCastDifficulty());
- SpellEffectInfo const& renewEffect = renewSpellInfo->GetEffect(EFFECT_0);
- int32 estimatedTotalHeal = AuraEffect::CalculateEstimatedfTotalPeriodicAmount(caster, target, renewSpellInfo, renewEffect, renewEffect.CalcValue(caster), 1);
- int32 healAmount = CalculatePct(estimatedTotalHeal, aurEff->GetAmount());
+ void Register() override
+ {
+ OnEffectProc += AuraEffectProcFn(spell_pri_empowered_renew::HandleProc, EFFECT_0, SPELL_AURA_DUMMY);
+ }
+};
- caster->CastSpell(target, SPELL_PRIEST_EMPOWERED_RENEW_HEAL, CastSpellExtraArgs(aurEff).AddSpellBP0(healAmount));
+// 139 - Renew
+class spell_pri_empowered_renew_heal : public AuraScript
+{
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellEffect({ { SPELL_PRIEST_EMPOWERED_RENEW, EFFECT_1 } });
+ }
+
+ void CalculateHealing(AuraEffect const* /*aurEff*/, Unit* /*victim*/, int32& /*healing*/, int32& /*flatMod*/, float& pctMod) const
+ {
+ if (Unit* caster = GetCaster())
+ if (AuraEffect const* empRenew = caster->GetAuraEffect(SPELL_PRIEST_EMPOWERED_RENEW, EFFECT_1))
+ AddPct(pctMod, empRenew->GetAmount());
}
void Register() override
{
- OnEffectProc += AuraEffectProcFn(spell_pri_empowered_renew::HandleProc, EFFECT_0, SPELL_AURA_DUMMY);
+ DoEffectCalcDamageAndHealing += AuraEffectCalcHealingFn(spell_pri_empowered_renew_heal::CalculateHealing, EFFECT_0, SPELL_AURA_PERIODIC_HEAL);
}
};
@@ -1481,7 +1503,7 @@ class spell_pri_holy_words : public AuraScript
SpellInfo const* targetSpellInfo = sSpellMgr->AssertSpellInfo(targetSpellId, GetCastDifficulty());
int32 cdReduction = targetSpellInfo->GetEffect(cdReductionEffIndex).CalcValue(GetTarget());
- GetTarget()->GetSpellHistory()->ModifyCooldown(targetSpellInfo, Seconds(-cdReduction), true);
+ spell_pri_holy_words_base::ModifyCooldown(GetTarget(), targetSpellInfo, Seconds(-cdReduction));
}
void Register() override
@@ -2248,6 +2270,65 @@ class spell_pri_divine_aegis : public AuraScript
}
};
+// 472361 - Divine Procession
+class spell_pri_divine_procession : public AuraScript
+{
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo({ SPELL_PRIEST_ATONEMENT, SPELL_PRIEST_ATONEMENT_EFFECT })
+ && ValidateSpellEffect({ { SPELL_PRIEST_ATONEMENT_EFFECT, EFFECT_2 } });
+ }
+
+ void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/) const
+ {
+ Unit* caster = GetTarget();
+
+ Aura const* atonementAura = caster->GetAura(SPELL_PRIEST_ATONEMENT);
+ if (!atonementAura)
+ return;
+
+ spell_pri_atonement const* atonementScript = atonementAura->GetScript<spell_pri_atonement>();
+ if (!atonementScript)
+ return;
+
+ std::vector<ObjectGuid> const& atonementTargets = atonementScript->GetAtonementTargets();
+ if (atonementTargets.empty())
+ return;
+
+ // smallest Atonement duration should get increased
+ auto it = std::ranges::min_element(atonementTargets, std::ranges::less(), [caster](ObjectGuid const& guidA)
+ {
+ Unit const* target = ObjectAccessor::GetUnit(*caster, guidA);
+ if (!target)
+ return std::numeric_limits<int32>::max();
+
+ Aura const* atonementEffect = target->GetAura(SPELL_PRIEST_ATONEMENT_EFFECT, caster->GetGUID());
+ if (!atonementEffect)
+ return std::numeric_limits<int32>::max();
+
+ return atonementEffect->GetDuration();
+ });
+
+ if (Unit const* target = ObjectAccessor::GetUnit(*caster, *it))
+ {
+ if (Aura* atonement = target->GetAura(SPELL_PRIEST_ATONEMENT_EFFECT, caster->GetGUID()))
+ {
+ if (atonement->GetDuration() < 30 * IN_MILLISECONDS)
+ {
+ int32 newDuration = atonement->GetDuration() + aurEff->GetAmount();
+ atonement->SetDuration(newDuration);
+ atonement->SetMaxDuration(newDuration);
+ }
+ }
+ }
+ }
+
+ void Register() override
+ {
+ OnEffectProc += AuraEffectProcFn(spell_pri_divine_procession::HandleProc, EFFECT_0, SPELL_AURA_DUMMY);
+ }
+};
+
// 129250 - Power Word: Solace
class spell_pri_power_word_solace : public SpellScript
{
@@ -3607,7 +3688,9 @@ void AddSC_priest_spell_scripts()
RegisterSpellScript(spell_pri_divine_service);
RegisterSpellScript(spell_pri_divine_star_shadow);
RegisterAreaTriggerAI(areatrigger_pri_divine_star);
+ RegisterSpellScript(spell_pri_divine_procession);
RegisterSpellScript(spell_pri_empowered_renew);
+ RegisterSpellScript(spell_pri_empowered_renew_heal);
RegisterSpellScript(spell_pri_epiphany);
RegisterSpellScript(spell_pri_essence_devourer_heal);
RegisterSpellScript(spell_pri_evangelism);