Ru-MaNGOS

Ru-MaNGOS (http://mangos.ytdb.ru/index.php)
-   MaNGOS 0.12 (2.4.3) (http://mangos.ytdb.ru/forumdisplay.php?f=47)
-   -   [fix bug] Deserter (http://mangos.ytdb.ru/showthread.php?t=852)

Chipleo 27.04.2010 14:42

[fix bug] Deserter
 
Код:

@@ -915,11 +915,13 @@ void Spell::DoAllEffectOnTarget(TargetInfo *target)
    SpellMissInfo missInfo = target->missCondition;
    // Need init unitTarget by default unit (can changed in code on reflect)
    // Or on missInfo!=SPELL_MISS_NONE unitTarget undefined (but need in trigger subsystem)
    unitTarget = unit;
 
-    if (missInfo==SPELL_MISS_NONE)                          // In case spell hit target, do all effect on that target
+        if (m_spellInfo->Id == 26013)                                                        // kia cast deserter always
+                DoSpellHitOnUnit(unit, mask);
+        else if (missInfo==SPELL_MISS_NONE)                    // In case spell hit target, do all effect on that target
        DoSpellHitOnUnit(unit, mask);
    else if (missInfo == SPELL_MISS_REFLECT)                // In case spell reflect from target, do all effect on caster (if hit)
    {
        if (target->reflectResult == SPELL_MISS_NONE)      // If reflected spell hit caster -> do all effect on him
            DoSpellHitOnUnit(m_caster, mask);

Дезертир не вешался на паладинов в divne shield, теперь он вешается в любом случае.

Vladimir 19.12.2010 15:02

Баг подтверждаю, но конечно он должен исправляться не такими хаками.

Null 19.12.2010 17:18

Также есть баг с Ressurection Sickness. Он точно так же снимается льдом мага\и палладиновским баблом.
Код:

diff -r 8d276615bc3b -r 5b835cc5a456 src/server/game/Spells/SpellMgr.cpp
--- a/src/server/game/Spells/SpellMgr.cpp        Thu Sep 23 23:56:43 2010 +0700
+++ b/src/server/game/Spells/SpellMgr.cpp        Fri Sep 24 00:15:53 2010 +0700
@@ -751,6 +751,18 @@
    SpellEntry const *spellproto = sSpellStore.LookupEntry(spellId);
    if (!spellproto) return false;
 
+    switch(spellId)
+    {
+        // Deserter
+        case 26013:
+            return false;
+            break;
+        // Resurrection Sickness
+        case 15007:
+            return false;
+            break;
+    }
+
    // not found a single positive spell with this attribute
    if (spellproto->Attributes & SPELL_ATTR_NEGATIVE_1)
        return false;

Более верно. Возможно придется накатить руками.

Vladimir 19.12.2010 18:50

Это не помогает. Проблема не в deserter а в щите - в 3.x этот спел имеет флаги прерывания при смене карты, и к моменту наложения Deserter уже удален, а в 2/x таких флагов он не имеет. Делание из deserter негативного спела фактически только усугубляет дело, так как в проверке имунности игнорируется только случай когда _оба_ спела позитивные.

Это также значит что в mangos master тоже нет настоящего решения проблемы и только случайное сочетание позволяет накладываться deserter с divine shield. :(

zergtmn 19.12.2010 19:47

Null, break после return не имеет смысла.

Null 19.12.2010 21:38

Так deserter- частный случай. Именно он идёт как isPositive, но расчитывается в игре(по логике людской) как !isPositive. Как тогда, по вашему, можно особый случай задать, если не так?

Vladimir 19.12.2010 21:39

проблема не в позитивности deserter


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

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