Ru-MaNGOS

Вернуться   Ru-MaNGOS > Ядро > Патчи > Отвергнутые патчи

Важная информация

Отвергнутые патчи Патчи, отвергнутые от приёма в GIT

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 23.04.2010, 14:01   #1
Insider42
Ученый
 
Регистрация: 15.03.2010
Сообщений: 261
Сказал(а) спасибо: 84
Поблагодарили 257 раз(а) в 96 сообщениях
Insider42 Как самоцвет среди гранитаInsider42 Как самоцвет среди гранитаInsider42 Как самоцвет среди гранита
По умолчанию [crash fix] Aura::PeriodicTick

Оригинальная тема тут http://getmangos.com/community/showthread.php?13636

Тут не проверяется есть ли цель в игре, по-моему более правильно ничего не делать с целью которая находится вне игры. По крайней мере ниразу не слышал от игроков с оффа чтобы что-то происходило с их персонажами когда они вышли из игры+их персонаж выгрузился из мира (как уже было обнаружено, на оффе персонаж ещё некоторое время стоит в игре после того как игрок уже вышел из игры. Возможно это происходит только если он был в бою).

Код:
diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp
index 59b037f..d9af2ae 100644
--- a/src/game/SpellAuras.cpp
+++ b/src/game/SpellAuras.cpp
@@ -7284,13 +7284,32 @@ void Aura::PeriodicTick()
 {
     switch(m_modifier.m_auraname)
     {
+        // don't do anything to target that isn't in world or dead, possible death persistent effects
         case SPELL_AURA_PERIODIC_DAMAGE:
         case SPELL_AURA_PERIODIC_DAMAGE_PERCENT:
-        {
-            // don't damage target if not alive, possible death persistent effects
-            if (!m_target->isAlive())
+        case SPELL_AURA_PERIODIC_LEECH:
+        case SPELL_AURA_PERIODIC_HEALTH_FUNNEL:
+        case SPELL_AURA_PERIODIC_HEAL:
+        case SPELL_AURA_OBS_MOD_HEALTH:
+        case SPELL_AURA_PERIODIC_MANA_LEECH:
+        case SPELL_AURA_POWER_BURN_MANA:
+        case SPELL_AURA_PERIODIC_ENERGIZE:
+        case SPELL_AURA_OBS_MOD_MANA:
+        case SPELL_AURA_MOD_REGEN:
+        case SPELL_AURA_MOD_POWER_REGEN:
+            if (!m_target || !m_target->IsInWorld() || !m_target->isAlive())
                 return;
+            break;
+        default:
+            break;
+    }
 
+    switch(m_modifier.m_auraname)
+    {
+        case SPELL_AURA_PERIODIC_DAMAGE:
+        case SPELL_AURA_PERIODIC_DAMAGE_PERCENT:
+        {
             Unit *pCaster = GetCaster();
             if(!pCaster)
                 return;
@@ -7427,10 +7446,6 @@ void Aura::PeriodicTick()
         case SPELL_AURA_PERIODIC_LEECH:
         case SPELL_AURA_PERIODIC_HEALTH_FUNNEL:
         {
-            // don't damage target if not alive, possible death persistent effects
-            if (!m_target->isAlive())
-                return;
-
             Unit *pCaster = GetCaster();
             if(!pCaster)
                 return;
@@ -7516,10 +7531,6 @@ void Aura::PeriodicTick()
         case SPELL_AURA_PERIODIC_HEAL:
         case SPELL_AURA_OBS_MOD_HEALTH:
         {
-            // don't heal target if not alive, mostly death persistent effects from items
-            if (!m_target->isAlive())
-                return;
-
             Unit *pCaster = GetCaster();
             if(!pCaster)
                 return;
@@ -7618,10 +7629,6 @@ void Aura::PeriodicTick()
         }
         case SPELL_AURA_PERIODIC_MANA_LEECH:
         {
-            // don't damage target if not alive, possible death persistent effects
-            if (!m_target->isAlive())
-                return;
-
             if(m_modifier.m_miscvalue < 0 || m_modifier.m_miscvalue >= MAX_POWERS)
                 return;
 
@@ -7695,10 +7702,6 @@ void Aura::PeriodicTick()
         }
         case SPELL_AURA_PERIODIC_ENERGIZE:
         {
-            // don't energize target if not alive, possible death persistent effects
-            if (!m_target->isAlive())
-                return;
-
             // ignore non positive values (can be result apply spellmods to aura damage
             uint32 pdamage = m_modifier.m_amount > 0 ? m_modifier.m_amount : 0;
 
@@ -7724,10 +7727,6 @@ void Aura::PeriodicTick()
         }
         case SPELL_AURA_OBS_MOD_MANA:
         {
-            // don't energize target if not alive, possible death persistent effects
-            if (!m_target->isAlive())
-                return;
-
             // ignore non positive values (can be result apply spellmods to aura damage
             uint32 amount = m_modifier.m_amount > 0 ? m_modifier.m_amount : 0;
 
@@ -7750,10 +7749,6 @@ void Aura::PeriodicTick()
         }
         case SPELL_AURA_POWER_BURN_MANA:
         {
-            // don't mana burn target if not alive, possible death persistent effects
-            if (!m_target->isAlive())
-                return;
-
             Unit *pCaster = GetCaster();
             if(!pCaster)
                 return;
@@ -7800,10 +7795,6 @@ void Aura::PeriodicTick()
         }
         case SPELL_AURA_MOD_REGEN:
         {
-            // don't heal target if not alive, possible death persistent effects
-            if (!m_target->isAlive())
-                return;
-
             int32 gain = m_target->ModifyHealth(m_modifier.m_amount);
             if (Unit *caster = GetCaster())
                 m_target->getHostileRefManager().threatAssist(caster, float(gain) * 0.5f, GetSpellProto());
@@ -7811,10 +7802,6 @@ void Aura::PeriodicTick()
         }
         case SPELL_AURA_MOD_POWER_REGEN:
         {
-            // don't energize target if not alive, possible death persistent effects
-            if (!m_target->isAlive())
-                return;
-
             Powers pt = m_target->getPowerType();
             if(int32(pt) != m_modifier.m_miscvalue)
                 return;
Вынес в отдельный switch для обобщения условия

Последний раз редактировалось Insider42; 24.04.2010 в 20:54.
Insider42 вне форума   Ответить с цитированием
4 пользователя(ей) сказали cпасибо:
Feel the Power (23.04.2010), PSZ (23.04.2010)
 


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[10996] Move set max original aura stack cases to aura holder creating newsbot CMaNGOS Commits 0 10.01.2011 16:03
[10584] Prevent lost aura connection with item at Aura::ReapplyAffectedPassiveAuras newsbot CMaNGOS Commits 0 07.10.2010 02:19
[10400] Fixed crash in .aura command for spell without auras. newsbot CMaNGOS Commits 0 22.08.2010 16:00
Crash с инстами ice74 Баг-репорты 12 20.05.2010 12:11
[Crash?] удаление GO zergtmn Баг-репорты 0 29.04.2010 22:31


Текущее время: 06:25. Часовой пояс GMT +3.


ru-mangos.ru - Русское сообщество MaNGOS
Главная цель проекта MaNGOS - обучающая, поэтому разрешается использовать исходный код и собранную программу только для образовательных целей.
Вы не можете использовать MaNGOS в коммерческих целях, а также не разрешается устанавливать публичные серверы на базе MaNGOS.
Любое копирование материалов, информации в любом виде без указания источника - форума Ru-MaNGOS будет считаться нарушением авторских прав и нарушением Уголовного Кодекса РФ, ст. 146 ст. 147.
Перевод vBulletin: zCarot