Projekt

Allgemein

Profil

Aktionen

Fehler #6766

geschlossen

[Zauber][Priester] Gedankenkontrolle - geteilter Diminishing Return bei gegenseitigem Cast

Von 1337 vor mehr als 11 Jahren hinzugefügt. Vor 9 Monaten aktualisiert.

Status:
Live
Priorität:
Normal
Zugewiesen an:
-
Kategorie:
Zauber
Zielversion:
Beginn:
07.08.2013
Update Text Deutsch:

Zwei Priester, die sich gegenseitig mit [spell=605] angreifen teilen sich nun nicht länger den Diminishing Return.


Beschreibung

http://db.rising-gods.de/?spell=605
Priest A castet 2x MC auf Priest B. Dadurch sollte nun beim dritten MC die Dauer durch Diminishing Returns auf 2.5s sinken. Dies funktioniert auch, allerdings in beide Richtungen. Wenn nach den zwei MC von A aus also B einen MC auf A castet, dann wird dieser nur 2.5s halten. Die beiden Priester teilen sich hier einen DR, das sollte nicht so sein.

Aktionen #1

Von karn vor etwa 11 Jahren aktualisiert

  • Status wurde von Bestätigt zu Testbereit geändert
Aktionen #2

Von Corrius vor etwa 11 Jahren aktualisiert

  • Status wurde von Testbereit zu Pending geändert

Priest A macht 2 MC auf Priester B, nun macht Priester B MC auf Priester A. Effekt: Volle 10 Sekunden MC.

Aktionen #3

Von Daejiv vor etwa 11 Jahren aktualisiert

  • Status wurde von Pending zu Live geändert
Aktionen #4

Von karn vor fast 11 Jahren aktualisiert

  • Status wurde von Live zu In Bearbeitung geändert
  • Zugewiesen an wurde auf karn gesetzt

commit reverted

Aktionen #5

Von karn vor fast 11 Jahren aktualisiert

  • Status wurde von In Bearbeitung zu Bestätigt geändert
  • Zugewiesen an karn wurde gelöscht
Aktionen #6

Von Rushor vor fast 9 Jahren aktualisiert

https://github.com/TrinityCore/TrinityCore/issues/15088

diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp
index aed7c0d..ce70eb2 100644
--- a/src/server/game/Spells/Spell.cpp
+++ b/src/server/game/Spells/Spell.cpp
@@ -612,6 +612,8 @@ m_caster((info->HasAttribute(SPELL_ATTR6_CAST_BY_CHARMER) && caster->GetCharmerO

     m_channelTargetEffectMask = 0;

+    m_spellFlags = SPELL_FLAG_NORMAL;
+
     // Determine if spell can be reflected back to the caster
     // Patch 1.2 notes: Spell Reflection no longer reflects abilities
     m_canReflect = m_spellInfo->DmgClass == SPELL_DAMAGE_CLASS_MAGIC && !m_spellInfo->HasAttribute(SPELL_ATTR0_ABILITY)
@@ -746,7 +748,10 @@ void Spell::SelectExplicitTargets()
                     break;
             }
             if (redirect && (redirect != target))
+            {
                 m_targets.SetUnitTarget(redirect);
+                m_spellFlags |= SPELL_FLAG_REDIRECTED;
+            }
         }
     }
 }
@@ -2104,6 +2109,8 @@ void Spell::AddUnitTarget(Unit* target, uint32 effectMask, bool checkIfValid /*=

         // Increase time interval for reflected spells by 1.5
         targetInfo.timeDelay += targetInfo.timeDelay >> 1;
+
+        m_spellFlags |= SPELL_FLAG_REFLECTED;
     }
     else
         targetInfo.reflectResult = SPELL_MISS_NONE;
@@ -2546,10 +2553,15 @@ SpellMissInfo Spell::DoSpellHitOnUnit(Unit* unit, uint32 effectMask, bool scaleA
         if (effectMask & (1 << i) && m_spellInfo->Effects[i].IsUnitOwnedAuraEffect())
             aura_effmask |= 1 << i;

+    Unit * originalCaster = GetOriginalCaster();
+    if (!originalCaster)
+        originalCaster = m_caster;
+    
     // Get Data Needed for Diminishing Returns, some effects may have multiple auras, so this must be done on spell hit, not aura add
-    m_diminishGroup = GetDiminishingReturnsGroupForSpell(m_spellInfo, m_triggeredByAuraSpell != nullptr);
-    if (m_diminishGroup && aura_effmask)
+    // Diminishing must not affect spells, casted on self
+    if ((originalCaster && aura_effmask && originalCaster != unit) || (m_spellFlags & SPELL_FLAG_REFLECTED))
     {
+        m_diminishGroup = GetDiminishingReturnsGroupForSpell(m_spellInfo, m_triggeredByAuraSpell);
         m_diminishLevel = unit->GetDiminishing(m_diminishGroup);
         DiminishingReturnsType type = GetDiminishingReturnsGroupType(m_diminishGroup);
         // Increase Diminishing on unit, current informations for actually casts will use values above
@@ -4835,7 +4847,7 @@ SpellCastResult Spell::CheckCast(bool strict)
                     if (DynamicObject* dynObj = m_caster->GetDynObject(m_triggeredByAuraSpell->Id))
                         losTarget = dynObj;

-                if (!m_spellInfo->HasAttribute(SPELL_ATTR2_CAN_TARGET_NOT_IN_LOS) && !DisableMgr::IsDisabledFor(DISABLE_TYPE_SPELL, m_spellInfo->Id, NULL, SPELL_DISABLE_LOS) && !target->IsWithinLOSInMap(losTarget))
+                if (!m_spellInfo->HasAttribute(SPELL_ATTR2_CAN_TARGET_NOT_IN_LOS) && !DisableMgr::IsDisabledFor(DISABLE_TYPE_SPELL, m_spellInfo->Id, NULL, SPELL_DISABLE_LOS) && !target->IsWithinLOSInMap(losTarget) && !(m_spellFlags & SPELL_FLAG_REDIRECTED))
                     return SPELL_FAILED_LINE_OF_SIGHT;
             }
         }
@@ -6520,7 +6532,7 @@ bool Spell::CheckEffectTarget(Unit const* target, uint32 eff, Position const* lo
                     caster = m_caster->GetMap()->GetGameObject(m_originalCasterGUID);
                 if (!caster)
                     caster = m_caster;
-                if (target != m_caster && !target->IsWithinLOSInMap(caster))
+                if (target != m_caster && !target->IsWithinLOSInMap(caster) && !(m_spellFlags & SPELL_FLAG_REDIRECTED))
                     return false;
             }
             break;
diff --git a/src/server/game/Spells/Spell.h b/src/server/game/Spells/Spell.h
index e9fde23..d80c72e 100644
--- a/src/server/game/Spells/Spell.h
+++ b/src/server/game/Spells/Spell.h
@@ -73,6 +73,14 @@ enum SpellCastFlags
     CAST_FLAG_UNKNOWN_32         = 0x80000000
 };

+enum SpellFlags
+{
+    SPELL_FLAG_NORMAL = 0x00,
+    SPELL_FLAG_REFLECTED = 0x01,        // reflected spell
+    SPELL_FLAG_REDIRECTED = 0x02        // redirected spell
+};
+
+
 enum SpellRangeFlag
 {
     SPELL_RANGE_DEFAULT             = 0,
@@ -523,6 +531,7 @@ class Spell
         int32 m_casttime;                                   // Calculated spell cast time initialized only in Spell::prepare
         int32 m_channeledDuration;                          // Calculated channeled spell duration in order to calculate correct pushback.
         bool m_canReflect;                                  // can reflect this spell?
+        uint8 m_spellFlags;                                 // for spells whose target was changed in cast i.e. due to reflect
         bool m_autoRepeat;
         uint8 m_runesState;

Aktionen #7

Von Daejiv vor mehr als 7 Jahren aktualisiert

  • Zielversion wurde von Klassen zu Klasse - Priester geändert
Aktionen #8

Von Left4Info vor mehr als 6 Jahren aktualisiert

  • Tags wurde auf Classes, Priest gesetzt
Aktionen #9

Von Connex vor etwa 6 Jahren aktualisiert

  • Zugewiesen an wurde auf Connex gesetzt
Aktionen #10

Von Jeora vor etwa 5 Jahren aktualisiert

  • Übergeordnetes Ticket #4057 wurde gelöscht
Aktionen #11

Von Dev-Conan vor etwa 1 Jahr aktualisiert

  • Status wurde von Bestätigt zu In Bearbeitung geändert
  • Zugewiesen an wurde von Connex zu Dev-Conan geändert
Aktionen #13

Von Dev-Conan vor etwa 1 Jahr aktualisiert

  • Status wurde von In Bearbeitung zu Testbereit geändert
  • Zugewiesen an Dev-Conan wurde gelöscht
Aktionen #15

Von Jeora vor 11 Monaten aktualisiert

  • Tags wurde von Priest zu Priest, Spell geändert
  • Thema wurde von [Priester] Gedankenkontrolle geteilter DR zu [Zauber][Priester] Gedankenkontrolle - geteilter Diminishing Return bei gegenseitigem Cast geändert
  • Status wurde von Testbereit zu In Bearbeitung geändert
  • Zugewiesen an wurde auf Dev-Conan gesetzt
  • DB-Link wurde auf https://db.rising-gods.de/?spell=605 gesetzt
Aktionen #17

Von Dev-Conan vor 11 Monaten aktualisiert

  • Status wurde von In Bearbeitung zu Testbereit geändert
  • Zugewiesen an Dev-Conan wurde gelöscht
Aktionen #19

Von Jeora vor 11 Monaten aktualisiert

  • Status wurde von Testbereit zu In Bearbeitung geändert
  • Zugewiesen an wurde auf Dev-Conan gesetzt
Aktionen #21

Von Dev-Conan vor 11 Monaten aktualisiert

  • Status wurde von In Bearbeitung zu Testbereit geändert
  • Zugewiesen an Dev-Conan wurde gelöscht
Aktionen #23

Von Jeora vor 11 Monaten aktualisiert

  • Status wurde von Testbereit zu In Bearbeitung geändert
  • Zugewiesen an wurde auf Dev-Conan gesetzt
Aktionen #25

Von Dev-Conan vor 11 Monaten aktualisiert

  • Status wurde von In Bearbeitung zu Testbereit geändert
  • Zugewiesen an Dev-Conan wurde gelöscht
Aktionen #27

Von Jeora vor 11 Monaten aktualisiert

  • Status wurde von Testbereit zu Ready geändert
  • Update Text Deutsch aktualisiert (Vergleich)
Aktionen #28

Von Serverupdate vor 10 Monaten aktualisiert

  • Status wurde von Ready zu Pending geändert
Aktionen #29

Von Connex vor 9 Monaten aktualisiert

  • Tags wurde von Priest, Spell zu Priest, Spell, Update 2024-02-18 geändert
  • Status wurde von Pending zu Live geändert
Aktionen

Auch abrufbar als: Atom PDF