Показать сообщение отдельно
Старый 22.03.2010, 13:54   #27
xmolex
Пользователь
 
Регистрация: 07.03.2010
Сообщений: 79
Сказал(а) спасибо: 3
Поблагодарили 10 раз(а) в 8 сообщениях
xmolex На верном пути
По умолчанию

Цитата:
Сообщение от 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). Скорость высталяется пропорционально скиллам.
xmolex вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
ANTOMA (22.03.2010)