Core version : TrinityCore rev. 0000-00-00 00:00:00 +0000 (Archived) (Unix, Release)
game version : 3.3.5a
Formost sorry for my english ( i'm french) and, consequently, for the length of my report, but I think it's clear.
Problem : The spell "Vanish" bug. When you use a channel spell (every channel spell, souldrain, arcan projectil, etc) on a rogue and it disappears with vanish, the canalization is not break, and the rogue are touch by the "tick" of the spell like he did not used "Vanish.
Want to back this issue? Post a bounty on it! We accept bounties via Bountysource.
What he's trying to say is.
You can not vanish channeled spells such as Drain Life, Mind Flay and Arcane Missiles.
The spells completely ignore the vanish effect and the next tick or missile that hit knocks the rogue out of stealth.
Confirmed, When somebody is casting a non-instant spell and rogue vanishes during the casttime, the spells continues to be cast and breaks vanish.
Confirm.
Rev: 5faa9d37b4240223a86939b4d898ec666e71f0c0
Confirmed.
maybe this can help?
if (getState() == SPELL_STATE_DELAYED && !m_spellInfo->IsPositive() && (getMSTime() - target->timeDelay) <= unit->m_lastSanctuaryTime)
return; // No missinfo in that case
its found in spell.cpp and is handling part of the sanctuary effect that is applied by spells like vanish
it's happening only on arcane missiles now (on latest rev at least), not anymore on the others
Any news about this?
Oh boy had no idea it was this old
@ariel- plz <3
I fixed drain life by adding a HasStealthAura check in:
HandlePeriodicHealthLeechAuraTick
if (target->HasStealthAura() || target->HasUnitState(UNIT_STATE_ISOLATED) || target->IsImmunedToDamage(GetSpellInfo()))
{
SendTickImmune(target, caster);
caster->CastStop();
return;
}
Still is hack (i belive) but test it @Persephone
diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
index 85b900a..d7626aa 100644
--- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp
+++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
@@ -5603,7 +5603,7 @@ void AuraEffect::HandlePeriodicHealthLeechAuraTick(Unit* target, Unit* caster) c
if (!caster || !target->IsAlive())
return;
- if (target->HasUnitState(UNIT_STATE_ISOLATED) || target->IsImmunedToDamage(GetSpellInfo()))
+ if (target->HasUnitState(UNIT_STATE_ISOLATED) || target->IsImmunedToDamage(GetSpellInfo()) || !caster->IsValidAttackTarget(target))
{
SendTickImmune(target, caster);
return;
Well aint that basically the same as what I did? Im just only checking for stealth
if i remember right, in wotlk, all target checks and mods is calculated when cast start
Might be, but what about these cases then? As in wotlk vanish would stop channeling effects :/
idk, maybe ariel can tell you better, i'm not intimate with spells stuffs xd
Alrighty, hope he can fix it :) !
They should probably break on target lost, which is what happens when you vanish
An other issue - the other way around is following:
If the lichking casts Defile and the selected player uses Feign Death/Vanish the lichking will cancel his defile cast.
Blizzlike he should still cast the spell on the selected player.
We need an improved check in CastSpell() for this to my mind.
I'm not sure about It Rushor
I skip some desfiles on mop using Shadowmeld
hm okay maybe i have to search some proof for this
Isn't it fixed by 2d0fb356de5b2dda06b008a875c6d4ea31eb5dfd?
@ariel- no bug is still present, if i update in bool Spell::UpdateChanneledTargetList() to check if the target HasStealthAuras() I can stop the channel cleanly, but any projectiles already in the air will still hit the rogue and damage/de-stealth him.. unsure what to do with mid-air projectiles :/ gotta be some way to check when they hit target if the original spell target is lost?
@Persephone
By "projectiles" do you mean something like Hunter automatic shot?
If yes, I do not need to do a new issue.
Nowadays, if the rogue vanishes while the hunter is using automatic shot, the rogue does not receive damage but the vanish is instantly removed.
The term "projectiles" or "missiles" can be used for spells too, when the spell has travel time from the moment it is cast until the moment it lands on the target, like Arcane Missiles. This is to differentiate from spells with immediate effect and no travel time.
Fix, Needs thorough testing:
diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
index 419ec0ba86..370c532eda 100644
--- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp
+++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
@@ -865,8 +865,11 @@ void AuraEffect::PeriodicTick(AuraApplication* aurApp, Unit* caster) const
if (prevented)
return;
Unit* target = aurApp->GetTarget();
+ if (!caster->IsValidAttackTarget(target) && !caster->IsValidAssistTarget(target))
+ return;
+
switch (GetAuraType())
{
case SPELL_AURA_PERIODIC_DUMMY:
Regarding Missiles, there is another patch I made which makes a separate Hit call but we don't have the data for missile speed on Server yet so it's not that valuable yet.
Fix, Needs thorough testing:
diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp index 419ec0ba86..370c532eda 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp +++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp @@ -865,8 +865,11 @@ void AuraEffect::PeriodicTick(AuraApplication* aurApp, Unit* caster) const if (prevented) return; Unit* target = aurApp->GetTarget(); + if (!caster->IsValidAttackTarget(target) && !caster->IsValidAssistTarget(target)) + return; + switch (GetAuraType()) { case SPELL_AURA_PERIODIC_DUMMY:Regarding Missiles, there is another patch I made which makes a separate Hit call but we don't have the data for missile speed on Server yet so it's not that valuable yet.
Well, if a warlock applies a curse to a rogue and he vanishes. The rogue is still supposed to be hit by the DOT if it was applied before he vanished. Vanish is not supposed to clear you from debuffs. So i dont see the point in your check in "PeriodicTick".
Its just supposed to stop any incoming missiles like fireball or hunter arrows
I see, I was trying to stop channelled spells from continuing when vanished. I'll update the code so it just stops channelled spells.
Regarding missiles another patch needs to be applied first then I can provide a fix.
See Old Patch:
https://gist.github.com/Langerz82/6b28adae41dce87d8b1809407005cbaa
Note - In the old patch CalcSpellHitTime needs to take into account speed of the different projectiles.
Patch - Fix Channelled Spells from continuing when vanished.
diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
index 419ec0ba86..45deabc758 100644
--- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp
+++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
@@ -865,8 +865,15 @@ void AuraEffect::PeriodicTick(AuraApplication* aurApp, Unit* caster) const
if (prevented)
return;
+
Unit* target = aurApp->GetTarget();
+ if (aurApp->GetBase()->GetSpellInfo()->IsChanneled() && !caster->IsValidAttackTarget(target) && !caster->IsValidAssistTarget(target))
+ {
+ caster->CastStop();
+ return;
+ }
+
switch (GetAuraType())
{
case SPELL_AURA_PERIODIC_DUMMY:
Old Patch is filled with all sorts fuckery. I will fix this new patch to include Missiles tomorrow most likely.
(https://github.com/TrinityCore/TrinityCore/issues/7425#issuecomment-589735943)
Don't Work!
Well, that was more or less to be expected. Unfortunately, many or most of @Langerz82 's patch suggestions have not worked as intended, but note that the patch was not updated after January 18, 2019, as stated in the follow-up comment (also by Langerz82 ). You are the first one to both test and give feedback on that patch. Thank you at least for testing and posting feedback. Let's just hope someone else has got an idea for what to try next to solve this issue.
Most helpful comment
Oh boy had no idea it was this old