Цитата:
Сообщение от tempura
...
|
Ваше пожелание учтено. По вашим словам если патчи будут вида, как ниже, то их не будут динамить. Я вас правильно понял?
Код:
diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp
index 3ee1892..87e3787 100644
--- a/src/game/SpellAuras.cpp
+++ b/src/game/SpellAuras.cpp
@@ -256,7 +256,7 @@ pAuraHandler AuraHandler[TOTAL_AURAS]=
&Aura::HandleNoImmediateEffect, //203 SPELL_AURA_MOD_ATTACKER_MELEE_CRIT_DAMAGE implemented in Unit::CalculateMeleeDamage and Unit::SpellC
&Aura::HandleNoImmediateEffect, //204 SPELL_AURA_MOD_ATTACKER_RANGED_CRIT_DAMAGE implemented in Unit::CalculateMeleeDamage and Unit::SpellC
&Aura::HandleNoImmediateEffect, //205 SPELL_AURA_MOD_ATTACKER_SPELL_CRIT_DAMAGE implemented in Unit::SpellCriticalDamageBonus
- &Aura::HandleNULL, //206 SPELL_AURA_MOD_SPEED_MOUNTED
+ &Aura::HandleAuraModIncreaseFlightSpeed, //206 SPELL_AURA_MOD_SPEED_MOUNTED
&Aura::HandleAuraModIncreaseFlightSpeed, //207 SPELL_AURA_MOD_INCREASE_FLIGHT_SPEED
&Aura::HandleAuraModIncreaseFlightSpeed, //208 SPELL_AURA_MOD_SPEED_FLIGHT, used only in spell: Flight Form (Passive)
&Aura::HandleAuraModIncreaseFlightSpeed, //209 SPELL_AURA_MOD_FLIGHT_SPEED_ALWAYS
diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp
index b9af5d0..451b6a2 100644
--- a/src/game/Unit.cpp
+++ b/src/game/Unit.cpp
@@ -10781,7 +10781,12 @@ void Unit::UpdateSpeed(UnitMoveType mtype, bool forced, float ratio)
if (IsMounted()) // Use on mount auras
main_speed_mod = GetMaxPositiveAuraModifier(SPELL_AURA_MOD_INCREASE_FLIGHT_SPEED);
else // Use not mount (shapeshift for example) auras (should stack)
- main_speed_mod = GetTotalAuraModifier(SPELL_AURA_MOD_SPEED_FLIGHT);
+ {
+ if (Unit::HasAuraType(SPELL_AURA_MOD_SPEED_MOUNTED)) // shapeshift
+ main_speed_mod = GetTotalAuraModifier(SPELL_AURA_MOD_SPEED_MOUNTED);
+ else
+ main_speed_mod = GetTotalAuraModifier(SPELL_AURA_MOD_SPEED_FLIGHT);
+ }
stack_bonus = GetTotalAuraMultiplier(SPELL_AURA_MOD_FLIGHT_SPEED_ALWAYS);
non_stack_bonus = (100.0f + GetMaxPositiveAuraModifier(SPELL_AURA_MOD_FLIGHT_SPEED_NOT_STACK))/100.0f;
break;
Цитата:
В SpellAuras.cpp указываем что ауру SPELL_AURA_MOD_SPEED_MOUNTED нужно обрабатывать в Aura::HandleAuraModIncreaseFlightSpeed
В Unit.cpp определяемся со скоростью. Из Aura::HandleAuraModIncreaseFlightSpeed мы получили mtype MOVE_FLIGHT для функции Unit::UpdateSpeed. Соответственно, если этот mtype, то выполняем блок. В блоке два условия, если мы примонтированы и нет. При shapeshift мы не монтируемся, поэтому попадаем в блок else. Ну и теперь мы смотрим, если у нас есть аура SPELL_AURA_MOD_SPEED_MOUNTED (if (Unit::HasAuraType(SPELL_AURA_MOD_SPEED_MOUNTED))) , то мы получаем для нее скорость. Если нет, то работаем как и работали ранее.
Патч работает корректно, протестировал Облик стремительной птицы (http://ru.wowhead.com/?spell=40120) и Облик птицы (http://ru.wowhead.com/?spell=33943). Скорость высталяется пропорционально скиллам.
|