Ru-MaNGOS

Ru-MaNGOS (http://mangos.ytdb.ru/index.php)
-   Development (http://mangos.ytdb.ru/forumdisplay.php?f=64)
-   -   Event stacking (http://mangos.ytdb.ru/showthread.php?t=6191)

Amaru 18.09.2012 10:03

Event stacking
 
1. Target mob
2. .cast self 64718
3. wait until there are over 9k events
4. .unaura all
5. events do not clean up


kid10 18.09.2012 14:15

(I don't know if the following has something to do with this)
but spell 64723 is also casted many many times at the argent tournament.

Amaru 18.09.2012 14:19

64723 is triggered by 64718

the source of problem seems to be channeling spells vs. event system

1day uptime = over 9k events (literally) = insane world update diff (lags)

schmoozerd 03.10.2012 04:49

thank you for the report. Sorry for the long delay in giving an answer, but this is a part of code i have never looked at. So i cannot say much, and need serious time to look into this :(

schmoozerd 23.11.2012 04:22

some observations:
the events are stacked for the triggered spell (64723)

The event-handling is this way: it is expected that the events are removed when the spells are finished casting.
as the triggered spells are channeled, and have infinity duration, they never finish casting. (so far so reasonable)

the problem is that the triggered channeled spells are cast triggered, and hence they are not "really" cast like channeled spells, and more important cannot be interrupted.

hence - even as there is only ever 1 triggered aura the triggered channeled spells stack up :(

possible that we should set triggered channeled spells to be set to be "finished" when they are cast, and then their events would get removed properly.

Edit
This will remove the triggered channeled spells instantly, however the channeled aura will not be removed, so it _might_ be possible that there are no serious side-effects!

Код:

diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp
index 7bfa06c..75e15d9 100644
--- a/src/game/Spell.cpp
+++ b/src/game/Spell.cpp
@@ -3594,7 +3594,8 @@ void Spell::handle_immediate()
    // start channeling if applicable (after _handle_immediate_phase for get pe
    if (IsChanneledSpell(m_spellInfo) && m_duration)
    {
-        m_spellState = SPELL_STATE_CASTING;
+        if (!m_IsTriggeredSpell)
+            m_spellState = SPELL_STATE_CASTING;
        SendChannelStart(m_duration);
    }



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

ru-mangos.ru - Русское сообщество MaNGOS