azerothcore-wotlk icon indicating copy to clipboard operation
azerothcore-wotlk copied to clipboard

Black Temple - Illidan Stormrage leaves combat

Open Ravenguard13 opened this issue 3 years ago โ€ข 29 comments

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

Ravenguard13 avatar Nov 07 '21 20:11 Ravenguard13

I test it today and it still doesn't look like it's fixed, can this bug be fixed?

kissingers avatar Apr 13 '22 06:04 kissingers

still broken and unplayable

frizar avatar Jul 16 '22 09:07 frizar

@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.

heyitsbench avatar Jul 16 '22 16:07 heyitsbench

this error still continues in the new revision I already tested it and it is still a bug

Fireevil avatar Sep 24 '22 01:09 Fireevil

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.

heyitsbench avatar Sep 24 '22 01:09 heyitsbench

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;

kissingers avatar Sep 24 '22 07:09 kissingers

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

Dr-Arayashiki avatar Jun 12 '23 18:06 Dr-Arayashiki

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)

kissingers avatar Jun 13 '23 01:06 kissingers

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!!!

image

kissingers avatar Jun 13 '23 01:06 kissingers

I dont know how to push a fix request, so who can do it?

kissingers avatar Jun 13 '23 03:06 kissingers

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 ๐Ÿ˜„

Dr-Arayashiki avatar Jun 14 '23 04:06 Dr-Arayashiki

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.

kissingers avatar Jun 15 '23 02:06 kissingers

illidan crash.zip

Please use gist if you are going to share logs or source files.

AnchyDev avatar Jun 15 '23 03:06 AnchyDev

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.

image

kissingers avatar Jun 15 '23 03:06 kissingers

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

boss_illidan.zip

kissingers avatar Jun 16 '23 03:06 kissingers

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.

image

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:

Dr-Arayashiki avatar Jun 17 '23 06:06 Dr-Arayashiki

@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 ๐Ÿ˜„

Dr-Arayashiki avatar Jun 17 '23 08:06 Dr-Arayashiki

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.

kissingers avatar Jun 17 '23 15:06 kissingers

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 ๐Ÿ˜„

Dr-Arayashiki avatar Jun 17 '23 20:06 Dr-Arayashiki

@kissingers image for now, put it like this and test

Dr-Arayashiki avatar Jun 17 '23 20:06 Dr-Arayashiki

@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 avatar Jun 18 '23 03:06 kissingers

image @kissingers @Dr-Arayashiki this works well. Another 2 problems:

  1. Parasitic Shadowfiend(ID:23498) start attack immediately, players have no time to kill them
  2. In phase 2, when Illidan flied, player cast spell "Divine Shield"(ID: 642), boss will reset directly...

ghost avatar Jun 25 '23 15:06 ghost

image @kissingers @Dr-Arayashiki this works well. Another 2 problems:

  1. Parasitic Shadowfiend(ID:23498) start attack immediately, players have no time to kill them
  2. 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

kissingers avatar Jun 27 '23 12:06 kissingers

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;

kissingers avatar Jun 27 '23 12:06 kissingers

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

image @kissingers @Dr-Arayashiki this works well. Another 2 problems:

  1. Parasitic Shadowfiend(ID:23498) start attack immediately, players have no time to kill them
  2. 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 ๐Ÿ˜„

Dr-Arayashiki avatar Jul 03 '23 20:07 Dr-Arayashiki

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.

NostraDavid avatar Mar 24 '24 18:03 NostraDavid

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

kissingers avatar Mar 25 '24 01:03 kissingers