Aktionen
Fehler #6766
geschlossen[Zauber][Priester] Gedankenkontrolle - geteilter Diminishing Return bei gegenseitigem Cast
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
#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
karnwurde 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 fast 8 Jahren aktualisiert
- Zielversion wurde von Klassen zu Klasse - Priester geändert
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-Conanwurde gelöscht
Aktionen
#15
Von Jeora vor 12 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 12 Monaten aktualisiert
- Status wurde von In Bearbeitung zu Testbereit geändert
- Zugewiesen an
Dev-Conanwurde gelöscht
Aktionen
#19
Von Jeora vor 12 Monaten aktualisiert
- Status wurde von Testbereit zu In Bearbeitung geändert
- Zugewiesen an wurde auf Dev-Conan gesetzt
Aktionen
#21
Von Dev-Conan vor 12 Monaten aktualisiert
- Status wurde von In Bearbeitung zu Testbereit geändert
- Zugewiesen an
Dev-Conanwurde gelöscht
Aktionen
#23
Von Jeora vor 12 Monaten aktualisiert
- Status wurde von Testbereit zu In Bearbeitung geändert
- Zugewiesen an wurde auf Dev-Conan gesetzt
Aktionen
#25
Von Dev-Conan vor 12 Monaten aktualisiert
- Status wurde von In Bearbeitung zu Testbereit geändert
- Zugewiesen an
Dev-Conanwurde gelöscht
Aktionen
#27
Von Jeora vor 12 Monaten aktualisiert
- Status wurde von Testbereit zu Ready geändert
- Update Text Deutsch aktualisiert (Vergleich)
Aktionen
#28
Von Serverupdate vor 11 Monaten aktualisiert
- Status wurde von Ready zu Pending geändert
Aktionen
#29
Von Connex vor 10 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