azerothcore-wotlk
azerothcore-wotlk copied to clipboard
Black Temple - Illidan Stormrage leaves combat
Current Behaviour
1 - during the fight, Illidan never changed into his demon form 2 - at final phase of fight, when Illidan Stormrage casts Shadow Prison ( https://wotlkdb.com/?spell=40647 ), he leaves the combat, restores all health. Can't be beaten.
Expected Blizzlike Behaviour
After Illidan casts the cage, he should still be there, then Maev Shadowsong shows up and the fight continues
As shown in video below:
Source
https://youtu.be/0Gbd_9w-Drw 2:17
Steps to reproduce the problem
1 - kill all the bosses, get to Illidan floor 2 - talk to Akama to start a fight 3 - hit him till phase 4
Extra Notes
Problem with shadow prison needs to be doubleckecked more. I had this problem in a raid group, but when I went there solo, everything was fine.
AC rev. hash/commit
https://github.com/azerothcore/azerothcore-wotlk/commit/d35c6b602234dfc313066a2de9db74eb97798c75
Operating system
Debian 10 x64
Custom changes or Modules
No response
I test it today and it still doesn't look like it's fixed, can this bug be fixed?
still broken and unplayable
@frizar, a better way to say what you said would be "Still not working as of commit [commit you're using]". Going to three separate issues and saying "Not fixed yet" doesn't do almost anything.
this error still continues in the new revision I already tested it and it is still a bug
this error still continues in the new revision I already tested it and it is still a bug
Please give the actual commit you've compiled with. Saying "new revision" doesn't mean anything.
Disengagement because this code: me->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE); As soon as move to the last line of this judgment (originally in the third line), it almost never get out of the battle, I fix this myself,but not the final solution: case EVENT_PHASE_5_START: if (me->HealthBelowPct(20)) { me->CastSpell(me, SPELL_SHADOW_PRISON, true); me->SendMeleeAttackStop(me->GetVictim()); Talk(SAY_ILLIDAN_MAIEV1); events.Reset(); events.ScheduleEvent(EVENT_PHASE_5_SCENE1, 9000); events.ScheduleEvent(EVENT_PHASE_5_SCENE2, 18000); events.ScheduleEvent(EVENT_PHASE_5_SCENE3, 24000); events.ScheduleEvent(EVENT_PHASE_5_SCENE4, 27000); events.ScheduleEvent(EVENT_PHASE_5_SCENE5, 30000); me->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE); break;
Disengagement because this code: me->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE); As soon as move to the last line of this judgment (originally in the third line), it almost never get out of the battle, I fix this myself,but not the final solution: case EVENT_PHASE_5_START: if (me->HealthBelowPct(20)) { me->CastSpell(me, SPELL_SHADOW_PRISON, true); me->SendMeleeAttackStop(me->GetVictim()); Talk(SAY_ILLIDAN_MAIEV1); events.Reset(); events.ScheduleEvent(EVENT_PHASE_5_SCENE1, 9000); events.ScheduleEvent(EVENT_PHASE_5_SCENE2, 18000); events.ScheduleEvent(EVENT_PHASE_5_SCENE3, 24000); events.ScheduleEvent(EVENT_PHASE_5_SCENE4, 27000); events.ScheduleEvent(EVENT_PHASE_5_SCENE5, 30000); me->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE); break;
the interesting thing is that if you remove the me->CastSpell(me, SPELL_SHADOW_PRISON, true); the boss does not reset and Maieve is summoned normally.... however it would be wrong as he must cast the Shadow Prison spell
Disengagement because this code: me->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE); As soon as move to the last line of this judgment (originally in the third line), it almost never get out of the battle, I fix this myself,but not the final solution: case EVENT_PHASE_5_START: if (me->HealthBelowPct(20)) { me->CastSpell(me, SPELL_SHADOW_PRISON, true); me->SendMeleeAttackStop(me->GetVictim()); Talk(SAY_ILLIDAN_MAIEV1); events.Reset(); events.ScheduleEvent(EVENT_PHASE_5_SCENE1, 9000); events.ScheduleEvent(EVENT_PHASE_5_SCENE2, 18000); events.ScheduleEvent(EVENT_PHASE_5_SCENE3, 24000); events.ScheduleEvent(EVENT_PHASE_5_SCENE4, 27000); events.ScheduleEvent(EVENT_PHASE_5_SCENE5, 30000); me->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE); break;
the interesting thing is that if you remove the me->CastSpell(me, SPELL_SHADOW_PRISON, true); the boss does not reset and Maieve is summoned normally.... however it would be wrong as he must cast the Shadow Prison spell
Yes, 2 mouth before, I move me->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE); to laster line, it's almost ok, but 2 mouth ago, it also can not work, only delete me->CastSpell(me, SPELL_SHADOW_PRISON, true) can. so I have to delete total phase 5 now. So 2 mouth ago something changed the me->CastSpell(me, SPELL_SHADOW_PRISON, true)
So I think if it can be fixed such as Archimonde, It is work for Archimonde out of combat. https://github.com/azerothcore/azerothcore-wotlk/pull/15128/commits/3f9c8a889ffb3866bcadb3236dc85662385511f8
reset add REACT_AGGRESSIVE. also need add RemoveUnitFlag , if not add , if recombit, the boss can not select.
void Reset() override
{
BossAI::Reset();
events2.Reset();
me->SetReactState(REACT_AGGRESSIVE); me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE);
me->SetDisableGravity(false);
me->CastSpell(me, SPELL_DUAL_WIELD, true);
me->LoadEquipment(0, true);
me->SetImmuneToAll(true);
beamPosId = urand(0, 3);
}
add REACT_PASSIVE. Here need SetReactState(REACT_PASSIVE) add after SPELL_SHADOW_PRISON, if add before, sometimes at raid group the server will crash, but one player test will not crash. so I think me->CastSpell(me, SPELL_SHADOW_PRISON, true) AI have some problem.
case EVENT_PHASE_5_START:
if (me->HealthBelowPct(30))
{
me->CastSpell(me, SPELL_SHADOW_PRISON, true);
me->SetReactState(REACT_PASSIVE);
me->SendMeleeAttackStop(me->GetVictim());
me->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE);
Talk(SAY_ILLIDAN_MAIEV1);
events.Reset();
events.ScheduleEvent(EVENT_PHASE_5_SCENE1, 9000);
events.ScheduleEvent(EVENT_PHASE_5_SCENE2, 18000);
events.ScheduleEvent(EVENT_PHASE_5_SCENE3, 24000);
events.ScheduleEvent(EVENT_PHASE_5_SCENE4, 27000);
events.ScheduleEvent(EVENT_PHASE_5_SCENE5, 30000);
break;
}
finish phash 5, if not add REACT_AGGRESSIVE, all player died ,the MAIEV will fight never out of combit(test use gm on after phase 5)
case EVENT_PHASE_5_SCENE5:
me->SetTarget(me->GetVictim()->GetGUID());
me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE);
me->SetReactState(REACT_AGGRESSIVE);
after kill the boss, all player will not out of combit, if kill akama self, will ok,so add akama->KillSelf();
if (Creature* akama = ObjectAccessor::GetCreature(*me, instance->GetGuidData(NPC_AKAMA)))
{
akama->AI()->DoAction(ACTION_ILLIDAN_DEAD);
akama->SetTarget(me->GetGUID());
akama->GetMotionMaster()->MovePoint(0, 695.63f, 306.63f, 354.26f);
akama->KillSelf();
}
It ok!!!
I dont know how to push a fix request, so who can do it?
I dont know how to push a fix request, so who can do it?
If you want, you can send me the cpp file that you fixed, I'll see how it's working and post the correction (if it's working correctly). I give the credits to you. But first of all, test this fix in every possible way to make sure everything is working fine. By the way, there are more things wrong with this boss... I even suggest fixing something else that has a problem at once ๐
IF there is any boss cast spell between me->SetReactState(REACT_PASSIVE); and me->SetReactState(REACT_AGGRESSIVE); the server might crash. but not always. one player test will never crash. 25 player sometime will crash. are there any bug with the states? So I change the 2 line location, and only pervert boss out of combit.
Here can't use gist , replace with pastebin https://pastebin.com/bkkNBgZ8
crash condition: me->SetReactState(REACT_PASSIVE); add before SPELL_SHADOW_PRISON and me->SetReactState(REACT_AGGRESSIVE); add after finish SPELL_SHADOW_PRISON.
case EVENT_PHASE_5_START:
if (me->HealthBelowPct(30))
{
me->SetReactState(REACT_PASSIVE);
me->CastSpell(me, SPELL_SHADOW_PRISON, true);
me->SendMeleeAttackStop(me->GetVictim());
me->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE);
Talk(SAY_ILLIDAN_MAIEV1);
events.Reset();
events.ScheduleEvent(EVENT_PHASE_5_SCENE1, 9000);
events.ScheduleEvent(EVENT_PHASE_5_SCENE2, 18000);
events.ScheduleEvent(EVENT_PHASE_5_SCENE3, 24000);
events.ScheduleEvent(EVENT_PHASE_5_SCENE4, 27000);
events.ScheduleEvent(EVENT_PHASE_5_SCENE5, 30000);
break;
}
case EVENT_PHASE_5_SCENE5:
me->SetTarget(me->GetVictim()->GetGUID());
me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE);
me->SetReactState(REACT_AGGRESSIVE);
if add after me->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE); and before me->CastSpell(me, SPELL_SUMMON_MAIEV, true); no crash till now.
after this self fix never out of combat \ reset boss can not attack \ can not dialogue akama \ after kill boss, can not out ouf combat \server crash
Here can't use gist , replace with pastebin https://pastebin.com/bkkNBgZ8
crash condition: me->SetReactState(REACT_PASSIVE); add before SPELL_SHADOW_PRISON and me->SetReactState(REACT_AGGRESSIVE); add after finish SPELL_SHADOW_PRISON.
case EVENT_PHASE_5_START: if (me->HealthBelowPct(30)) { me->SetReactState(REACT_PASSIVE); me->CastSpell(me, SPELL_SHADOW_PRISON, true); me->SendMeleeAttackStop(me->GetVictim()); me->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE); Talk(SAY_ILLIDAN_MAIEV1); events.Reset(); events.ScheduleEvent(EVENT_PHASE_5_SCENE1, 9000); events.ScheduleEvent(EVENT_PHASE_5_SCENE2, 18000); events.ScheduleEvent(EVENT_PHASE_5_SCENE3, 24000); events.ScheduleEvent(EVENT_PHASE_5_SCENE4, 27000); events.ScheduleEvent(EVENT_PHASE_5_SCENE5, 30000); break; } case EVENT_PHASE_5_SCENE5: me->SetTarget(me->GetVictim()->GetGUID()); me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE); me->SetReactState(REACT_AGGRESSIVE);
if add after me->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE); and before me->CastSpell(me, SPELL_SUMMON_MAIEV, true); no crash till now.
I see, what you posted gave me direction and it worked, the boss is no longer resetting. I'm going to take advantage and solve the problem that the boss has to fly and doesn't fly. After finishing everything, part of the credit goes to you :)
NOTE: As far as I've seen, you don't need me->SetReactState(REACT_PASSIVE); . Just leave the me->SetReactState(REACT_AGGRESSIVE); in case EVENT_PHASE_5_SCENE1:
@kissingers this boss's problems are already being solved, and there are a few more besides those mentioned here. I'll check them all at once so I don't have to open pulls all the time. You are to be congratulated, thanks to your code I managed to discover a few more bugs besides the current one ๐
Thanks for your fix work, but I try test sometimes, it seems not same as you test.
If only add me->SetReactState(REACT_AGGRESSIVE) in case EVENT_PHASE_5_SCENE1: will out of combit. and if only add me->SetReactState(REACT_AGGRESSIVE); after me->CastSpell(me, SPELL_SHADOW_PRISON, true); sometimes out of combit.
only me->SetReactState(REACT_PASSIVE) add after me->CastSpell(me, SPELL_SHADOW_PRISON, true); and add me->SetReactState(REACT_AGGRESSIVE) in case EVENT_PHASE_5_SCENE1 will all times ok.
Thanks for your fix work, but I try test sometimes, it seems not same as you test.
If only add me->SetReactState(REACT_AGGRESSIVE) in case EVENT_PHASE_5_SCENE1: will out of combit. and if only add me->SetReactState(REACT_AGGRESSIVE); after me->CastSpell(me, SPELL_SHADOW_PRISON, true); sometimes out of combit.
only me->SetReactState(REACT_PASSIVE) add after me->CastSpell(me, SPELL_SHADOW_PRISON, true); and add me->SetReactState(REACT_AGGRESSIVE) in case EVENT_PHASE_5_SCENE1 will all times ok.
correct, rest assured because we also discovered that there is the question of the probability of the boss resetting and not resetting. We are already investigating here ๐
@kissingers
for now, put it like this and test
@kissingers
็ฐๅจ๏ผๅ่ฟๆ ทๆพ็ฝฎๅนถๆต่ฏ
test false. after finish SPELL_SHADOW_PRISON , then use .gm on simulation all player died, the boss will still fight with maiev never finished.
So must SetReactState(REACT_AGGRESSIVE) before all player died. set at EVENT_PHASE_5_SCENE1 is good point.
@kissingers @Dr-Arayashiki this works well.
Another 2 problems:
- Parasitic Shadowfiend(ID:23498) start attack immediately, players have no time to kill them
- In phase 2, when Illidan flied, player cast spell "Divine Shield"(ID: 642), boss will reset directly...
@kissingers @Dr-Arayashiki this works well. Another 2 problems:
- Parasitic Shadowfiend(ID:23498) start attack immediately, players have no time to kill them
- In phase 2, when Illidan flied, player cast spell "Divine Shield"(ID: 642), boss will reset directly...
1 only less then 4 player will happen, more than 4 will never happen, and the player can not move else will more Shadowfiend to himself. 2 also lonly 1 player can test
there are still some problem, so I have to change link this: immediate me->CastSpell(me, SPELL_SUMMON_MAIEV, true); after me->CastSpell(me, SPELL_SHADOW_PRISON, true); then me->SetReactState(REACT_PASSIVE); otherwise the boss have a very low times out of combit after 9 second before SUMMON_MAIEV
phase5 31 second, then me->SetReactState(REACT_AGGRESSIVE) add after phase5, and also replace me->SetTarget(me->GetVictim()->GetGUID(); to DoMeleeAttackIfReady(); because when SHADOW_PRISON the tank died in fire, me->SetTarget(me->GetVictim()->GetGUID() will case the server crash
case EVENT_PHASE_5_START:
if (me->HealthBelowPct(30))
{
me->SendMeleeAttackStop(me->GetVictim());
me->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE);
me->CastSpell(me, SPELL_SHADOW_PRISON, true);
me->CastSpell(me, SPELL_SUMMON_MAIEV, true); me->SetReactState(REACT_PASSIVE);
Talk(SAY_ILLIDAN_MAIEV1);
events.Reset();
events.ScheduleEvent(EVENT_PHASE_5_SCENE1, 9000);
events.ScheduleEvent(EVENT_PHASE_5_SCENE2, 18000);
events.ScheduleEvent(EVENT_PHASE_5_SCENE3, 24000);
events.ScheduleEvent(EVENT_PHASE_5_SCENE4, 27000);
events.ScheduleEvent(EVENT_PHASE_5_SCENE5, 31000);
break;
}
events.ScheduleEvent(EVENT_PHASE_5_START, 1000);
break;
case EVENT_PHASE_5_SCENE1:
break;
case EVENT_PHASE_5_SCENE2:
Talk(SAY_ILLIDAN_MAIEV2);
break;
case EVENT_PHASE_5_SCENE3:
if (Creature* maiev = summons.GetCreatureWithEntry(NPC_MAIEV_SHADOWSONG))
maiev->AI()->Talk(SAY_MAIEV_SHADOWSONG_ILLIDAN2);
break;
case EVENT_PHASE_5_SCENE4:
if (Creature* maiev = summons.GetCreatureWithEntry(NPC_MAIEV_SHADOWSONG))
maiev->HandleEmoteCommand(EMOTE_ONESHOT_ROAR);
break;
case EVENT_PHASE_5_SCENE5:
me->SetReactState(REACT_AGGRESSIVE); //me->SetTarget(me->GetVictim()->GetGUID()); DoMeleeAttackIfReady();
me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE);
if (Creature* maiev = summons.GetCreatureWithEntry(NPC_MAIEV_SHADOWSONG))
{
maiev->SetReactState(REACT_AGGRESSIVE);
maiev->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
maiev->AI()->AttackStart(me);
}
ScheduleNormalEvents(5);
break;
This boss has some problems, although we have given some solutions, but at least now you can kill him, before you couldn't even kill him because he was restarting. It's that thing.... you have to go through the squeegee with Ymir anyway hahaha
@kissingers @Dr-Arayashiki this works well. Another 2 problems:
- Parasitic Shadowfiend(ID:23498) start attack immediately, players have no time to kill them
- In phase 2, when Illidan flied, player cast spell "Divine Shield"(ID: 642), boss will reset directly...
This boss has some problems, although we have given some solutions, but at least now you can kill him, before you couldn't even kill him because he was restarting. It's that thing.... you have to go through the squeegee with Ymir anyway hahaha ๐
But speaking specifically about these issues.... it's a boss that you have to test with at least 5 people to clarify some things. When testing alone, any ability that makes him immune will likely reset the boss as he won't have another player to attack, so I don't know if the Divine Shield issue would be a real issue. ๐ธ
The important thing is that we are fixing it little by little lol ๐
For those running via docker-compose: I am using 7.0.0-dev.1 (Last pushed 2 months ago) and the bug is still there.
This comment is purely meant for users trying to figure out if it's been fixed for a certain version or not :)
PS: I am running a multibox with 5 accounts, if that matters. PPS: If you don't kill him fast enough, the Shadowfiends (?) he spawns duplicate until freezing the server and clients. PPPS: After a direct restart of the fight he's not selectable anymore, the Shadowfiends will spawn and lock things up.
It seems in fixing https://github.com/azerothcore/azerothcore-wotlk/pull/18601
I do my fix here, just can run and kill the boss https://github.com/azerothcore/azerothcore-wotlk/commit/58aecdceac361a12e59c147120937598112c1d20