From 4dfe00ae335baff287ed346794d1f04c34b69577 Mon Sep 17 00:00:00 2001 From: SylvaniaCore deploy Date: Sun, 9 Aug 2026 20:03:51 +0000 Subject: [PATCH] Transcription ArgusCore lot 6 : fondations engine - Aura 373 (MOD_SPEED_NO_CONTROL) implementee dans UpdateSpeed : vitesse verrouillee des dash (Roulade moine x2.75/x3.75, Fel Rush) au lieu d un comportement non cape [aa54261d] - AuraScript::_Validate accepte SPELL_EFFECT_APPLY_AURA_ON_PET dans les 7 verifications d effets d aura [d308bf0b] Methodologie : 7 commits engine analyses, 5 N/A justifies (systemes absents ou deja presents chez nous). --- src/server/game/Entities/Unit/Unit.cpp | 10 +++++++++- src/server/game/Spells/Auras/SpellAuraDefines.h | 2 +- src/server/game/Spells/SpellScript.cpp | 14 +++++++------- 3 files changed, 17 insertions(+), 9 deletions(-) diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index e180b4c..ec5de6a 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -8783,8 +8783,16 @@ void Unit::UpdateSpeed(UnitMoveType mtype) if (mtype == MOVE_RUN) { + // aura 373 SPELL_AURA_MOD_SPEED_NO_CONTROL : deplacement force (charge/dash), + // remplace entierement la vitesse dirigee par le joueur (ne fait pas que la plancher). + // Montant en POURCENTAGE (cf. Roll moine 107427/109131 : 175/275 -> x2.75/x3.75), + // contrairement a l aura 437 dont le montant est une valeur absolue en yards/s. + // Prioritaire sur le plancher 437 (sinon rien ne capait l acceleration joueur + // pendant un dash type Fel Rush). [porte d ArgusCore aa54261d] + if (int32 lockedSpeedMod = GetMaxPositiveAuraModifier(SPELL_AURA_MOD_SPEED_NO_CONTROL)) + speed = 1.0f + lockedSpeedMod / 100.0f; // force minimum speed rate @ aura 437 SPELL_AURA_MOD_MINIMUM_SPEED_RATE - if (int32 minSpeedMod = GetMaxPositiveAuraModifier(SPELL_AURA_MOD_MINIMUM_SPEED_RATE)) + else if (int32 minSpeedMod = GetMaxPositiveAuraModifier(SPELL_AURA_MOD_MINIMUM_SPEED_RATE)) { float minSpeed = minSpeedMod / (IsControlledByPlayer() ? playerBaseMoveSpeed[mtype] : baseMoveSpeed[mtype]); if (speed < minSpeed) diff --git a/src/server/game/Spells/Auras/SpellAuraDefines.h b/src/server/game/Spells/Auras/SpellAuraDefines.h index 2860f44..51e6c7c 100644 --- a/src/server/game/Spells/Auras/SpellAuraDefines.h +++ b/src/server/game/Spells/Auras/SpellAuraDefines.h @@ -449,7 +449,7 @@ enum AuraType : uint32 SPELL_AURA_SET_FAIR_FAR_CLIP = 370, // Overrides client's View Distance setting to max("Fair", current_setting) SPELL_AURA_371 = 371, SPELL_AURA_MOUNTED_VISUAL = 372, - SPELL_AURA_MOD_SPEED_NO_CONTROL = 373, // NYI + SPELL_AURA_MOD_SPEED_NO_CONTROL = 373, SPELL_AURA_MODIFY_FALL_DAMAGE_PCT = 374, SPELL_AURA_375 = 375, // Not used in 7.3.5 SPELL_AURA_MOD_CURRENCY_GAIN_FROM_SOURCE = 376, // Not used in 7.3.5 diff --git a/src/server/game/Spells/SpellScript.cpp b/src/server/game/Spells/SpellScript.cpp index 8bf7e38..b78e0b9 100644 --- a/src/server/game/Spells/SpellScript.cpp +++ b/src/server/game/Spells/SpellScript.cpp @@ -754,15 +754,15 @@ SpellEffectInfo const* SpellScript::GetEffectInfo(SpellEffIndex effIndex) const bool AuraScript::_Validate(SpellInfo const* entry) { for (auto itr = DoCheckAreaTarget.begin(); itr != DoCheckAreaTarget.end(); ++itr) - if (!entry->HasAreaAuraEffect() && !entry->HasEffect(SPELL_EFFECT_PERSISTENT_AREA_AURA) && !entry->HasEffect(SPELL_EFFECT_APPLY_AURA)) + if (!entry->HasAreaAuraEffect() && !entry->HasEffect(SPELL_EFFECT_PERSISTENT_AREA_AURA) && !entry->HasEffect(SPELL_EFFECT_APPLY_AURA) && !entry->HasEffect(SPELL_EFFECT_APPLY_AURA_ON_PET)) TC_LOG_ERROR("scripts", "Spell `%u` of script `%s` does not have apply aura effect - handler bound to hook `DoCheckAreaTarget` of AuraScript won't be executed", entry->Id, m_scriptName->c_str()); for (auto itr = OnDispel.begin(); itr != OnDispel.end(); ++itr) - if (!entry->HasEffect(SPELL_EFFECT_APPLY_AURA) && !entry->HasAreaAuraEffect()) + if (!entry->HasEffect(SPELL_EFFECT_APPLY_AURA) && !entry->HasEffect(SPELL_EFFECT_APPLY_AURA_ON_PET) && !entry->HasAreaAuraEffect()) TC_LOG_ERROR("scripts", "Spell `%u` of script `%s` does not have apply aura effect - handler bound to hook `OnDispel` of AuraScript won't be executed", entry->Id, m_scriptName->c_str()); for (auto itr = AfterDispel.begin(); itr != AfterDispel.end(); ++itr) - if (!entry->HasEffect(SPELL_EFFECT_APPLY_AURA) && !entry->HasAreaAuraEffect()) + if (!entry->HasEffect(SPELL_EFFECT_APPLY_AURA) && !entry->HasEffect(SPELL_EFFECT_APPLY_AURA_ON_PET) && !entry->HasAreaAuraEffect()) TC_LOG_ERROR("scripts", "Spell `%u` of script `%s` does not have apply aura effect - handler bound to hook `AfterDispel` of AuraScript won't be executed", entry->Id, m_scriptName->c_str()); for (auto itr = OnEffectApply.begin(); itr != OnEffectApply.end(); ++itr) @@ -826,7 +826,7 @@ bool AuraScript::_Validate(SpellInfo const* entry) TC_LOG_ERROR("scripts", "Spell `%u` Effect `%s` of script `%s` did not match dbc effect data - handler bound to hook `OnEffectSplit` of AuraScript won't be executed", entry->Id, itr->ToString().c_str(), m_scriptName->c_str()); for (auto itr = DoCheckProc.begin(); itr != DoCheckProc.end(); ++itr) - if (!entry->HasEffect(SPELL_EFFECT_APPLY_AURA) && !entry->HasAreaAuraEffect()) + if (!entry->HasEffect(SPELL_EFFECT_APPLY_AURA) && !entry->HasEffect(SPELL_EFFECT_APPLY_AURA_ON_PET) && !entry->HasAreaAuraEffect()) TC_LOG_ERROR("scripts", "Spell `%u` of script `%s` does not have apply aura effect - handler bound to hook `DoCheckProc` of AuraScript won't be executed", entry->Id, m_scriptName->c_str()); for (auto itr = DoCheckEffectProc.begin(); itr != DoCheckEffectProc.end(); ++itr) @@ -834,15 +834,15 @@ bool AuraScript::_Validate(SpellInfo const* entry) TC_LOG_ERROR("scripts", "Spell `%u` Effect `%s` of script `%s` did not match dbc effect data - handler bound to hook `DoCheckEffectProc` of AuraScript won't be executed", entry->Id, itr->ToString().c_str(), m_scriptName->c_str()); for (auto itr = DoPrepareProc.begin(); itr != DoPrepareProc.end(); ++itr) - if (!entry->HasEffect(SPELL_EFFECT_APPLY_AURA) && !entry->HasAreaAuraEffect()) + if (!entry->HasEffect(SPELL_EFFECT_APPLY_AURA) && !entry->HasEffect(SPELL_EFFECT_APPLY_AURA_ON_PET) && !entry->HasAreaAuraEffect()) TC_LOG_ERROR("scripts", "Spell `%u` of script `%s` does not have apply aura effect - handler bound to hook `DoPrepareProc` of AuraScript won't be executed", entry->Id, m_scriptName->c_str()); for (auto itr = OnProc.begin(); itr != OnProc.end(); ++itr) - if (!entry->HasEffect(SPELL_EFFECT_APPLY_AURA) && !entry->HasAreaAuraEffect()) + if (!entry->HasEffect(SPELL_EFFECT_APPLY_AURA) && !entry->HasEffect(SPELL_EFFECT_APPLY_AURA_ON_PET) && !entry->HasAreaAuraEffect()) TC_LOG_ERROR("scripts", "Spell `%u` of script `%s` does not have apply aura effect - handler bound to hook `OnProc` of AuraScript won't be executed", entry->Id, m_scriptName->c_str()); for (auto itr = AfterProc.begin(); itr != AfterProc.end(); ++itr) - if (!entry->HasEffect(SPELL_EFFECT_APPLY_AURA) && !entry->HasAreaAuraEffect()) + if (!entry->HasEffect(SPELL_EFFECT_APPLY_AURA) && !entry->HasEffect(SPELL_EFFECT_APPLY_AURA_ON_PET) && !entry->HasAreaAuraEffect()) TC_LOG_ERROR("scripts", "Spell `%u` of script `%s` does not have apply aura effect - handler bound to hook `AfterProc` of AuraScript won't be executed", entry->Id, m_scriptName->c_str()); for (auto itr = OnEffectProc.begin(); itr != OnEffectProc.end(); ++itr)