|
Отвергнутые патчи Патчи, отвергнутые от приёма в GIT |
|
Опции темы | Поиск в этой теме | Опции просмотра |
23.04.2010, 14:01 | #1 |
Ученый
Регистрация: 15.03.2010
Сообщений: 261
Сказал(а) спасибо: 84
Поблагодарили 257 раз(а) в 96 сообщениях
|
[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; Последний раз редактировалось Insider42; 24.04.2010 в 20:54. |
4 пользователя(ей) сказали cпасибо: | Feel the Power (23.04.2010), PSZ (23.04.2010) |
23.04.2010, 16:55 | #2 |
Ученый
Регистрация: 15.03.2010
Сообщений: 261
Сказал(а) спасибо: 84
Поблагодарили 257 раз(а) в 96 сообщениях
|
добавил проверку "есть ли вообще" цель. Патч обновлен
|
Пользователь сказал cпасибо: |
23.04.2010, 20:11 | #3 | ||
MaNGOS Dev
Регистрация: 09.02.2010
Сообщений: 594
Сказал(а) спасибо: 315
Поблагодарили 438 раз(а) в 181 сообщениях
|
Цитата:
Цитата:
Конечно это все в чистом мангосе.
__________________
Так как устал объяснять знайте ICQ не пользуюсь |
||
23.04.2010, 20:33 | #4 |
Ученый
Регистрация: 15.03.2010
Сообщений: 261
Сказал(а) спасибо: 84
Поблагодарили 257 раз(а) в 96 сообщениях
|
Но ведь этот краш происходит и на чистом мангосе ... где-то явно бага закопалась
Как можно отследить? |
23.04.2010, 23:11 | #5 |
MaNGOS Dev
Регистрация: 09.02.2010
Сообщений: 594
Сказал(а) спасибо: 315
Поблагодарили 438 раз(а) в 181 сообщениях
|
ну как всегда - поймать в отладчике и отследить причину если получится...
__________________
Так как устал объяснять знайте ICQ не пользуюсь |
24.04.2010, 14:02 | #6 |
Пользователь
Регистрация: 08.03.2010
Сообщений: 43
Сказал(а) спасибо: 1
Поблагодарили 1 раз в 1 сообщении
|
Может одна проверка на 11 аур меньше грузит ядро чем 11 проверок на 11 аур?
Так же можно попробовать и с проверками Код:
Unit *pCaster = GetCaster(); if(!pCaster) return; Код:
+ case SPELL_AURA_POWER_BURN_MANA: Последний раз редактировалось Mr.Grom; 24.04.2010 в 14:30. |
24.04.2010, 14:23 | #7 |
Ученый
Регистрация: 15.03.2010
Сообщений: 261
Сказал(а) спасибо: 84
Поблагодарили 257 раз(а) в 96 сообщениях
|
|
24.04.2010, 20:42 | #8 |
MaNGOS Dev
Регистрация: 09.02.2010
Сообщений: 594
Сказал(а) спасибо: 315
Поблагодарили 438 раз(а) в 181 сообщениях
|
у вас 2 раза select - что не одно тоже что один - что медленнее (хотя этот и не сильная разница), но что более неприятно - можно забыть добавить проверку когда будет добавляться новый вариант в отсновной выбор.
__________________
Так как устал объяснять знайте ICQ не пользуюсь |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
[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 |