From 19dc921680f47c6c87fefa398f0e2e60e8e38df7 Mon Sep 17 00:00:00 2001 From: Jelle Meeus Date: Sat, 18 May 2024 16:10:58 +0200 Subject: [PATCH 01/31] add sql --- .../rev_1715986644313348181.sql | 17 +++ .../Northrend/Naxxramas/boss_razuvious.cpp | 105 +++++++++++++++++- 2 files changed, 121 insertions(+), 1 deletion(-) create mode 100644 data/sql/updates/pending_db_world/rev_1715986644313348181.sql diff --git a/data/sql/updates/pending_db_world/rev_1715986644313348181.sql b/data/sql/updates/pending_db_world/rev_1715986644313348181.sql new file mode 100644 index 00000000000000..7c26200da487e2 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1715986644313348181.sql @@ -0,0 +1,17 @@ +-- +-- STATE_READY_1H +-- UPDATE `creature_template_addon` SET `emote` = 333 WHERE (`entry` = 16803); +-- UPDATE `creature_template_addon` SET `emote` = 333 WHERE (`entry` = 29941); + +-- Razuvious +DELETE FROM `creature_text` WHERE `CreatureID` = 16061 AND `GroupID` IN (4, 5); +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(16061, 4, 0, 'Pathetic...', 12, 0, 100, 5, 0, 0, 27865, 0, 'Razuvious SAY_PATHETIC'), +(16061, 5, 0, 'Start doing something before I replace that target dummy with you and begin a warm up session of my own!', 12, 0, 100, 5, 0, 0, 13136, 0, 'Razuvious SAY_TARGET_DUMMY'); + +-- Death Knight Understudy +DELETE FROM `creature_text` WHERE `CreatureID` = 16803; +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(16803, 0, 0, 'Sir, student requests that you beat him for his lack of understanding!', 12, 0, 100, 1, 0, 0, 13140, 0, 'Death Knight Understudy SAY_BEAT_ME'), +(16803, 1, 0, 'I am unworthy, master!', 12, 0, 100, 1, 0, 0, 13138, 0, 'Death Knight Understudy SAY_UNWORTHY'), +(16803, 2, 0, 'Student is worthless, master! Student apologizes for his deficiency!', 12, 0, 100, 1, 0, 0, 13137, 0, 'Death Knight Understudy SAY_WORTHLESS'); diff --git a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp index 9264e851fc17c3..366bb5e54fab99 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp @@ -42,7 +42,26 @@ enum Events { EVENT_UNBALANCING_STRIKE = 1, EVENT_DISRUPTING_SHOUT = 2, - EVENT_JAGGED_KNIFE = 3 + EVENT_JAGGED_KNIFE = 3, + // OOC RP + EVENT_GO_TRAINEE = 4, + EVENT_TURN_TO_TRAINEE = 5, + EVENT_EMOTE_SHOUT = 6, + EVENT_ADD_TURN_RAZUV = 7, + EVENT_ADD_TALK = 8, + EVENT_ADD_SALUTE = 9, + EVENT_ADD_ATTACK = 10, + EVENT_ADD_TURN_BACK = 11 +}; + +enum Actions +{ + ACTION_SALUTE_RAZUVIOUS = 0 +}; + +enum Groups +{ + GROUP_OOC_RP = 0 }; enum Misc @@ -94,6 +113,49 @@ class boss_razuvious : public CreatureScript summons.DespawnAll(); events.Reset(); SpawnHelpers(); + ScheduleRP(); + } + + void MovementInform(uint32 type, uint32 id) override + { + if (type != WAYPOINT_MOTION_TYPE) + return; + + if (!_roleplayReady) + return; + + if ( id == _roleplayWaypointCount || (id == 5 && _roleplayWaypointCount == 4)) + { + _roleplayReady = false; + if (Creature* understudy = GetClosestCreatureWithEntry(me, NPC_DEATH_KNIGHT_UNDERSTUDY, 15.0f)) + { + me->PauseMovement(); + me->SetFacingToObject(understudy); + understudy->AI()->DoAction(ACTION_SALUTE_RAZUVIOUS); + scheduler.Schedule(4s, GROUP_OOC_RP, [this](TaskContext context) + { + me->HandleEmoteCommand(EMOTE_ONESHOT_EXCLAMATION); + }).Schedule(8s, GROUP_OOC_RP, [this](TaskContext context) + { + me->ResumeMovement(); + }); + } + } + } + + void ScheduleRP() + { + _roleplayWaypointCount = 1; + _roleplayReady = false; + // scheduler.Schedule(60s, 80s, GROUP_OOC_RP, [this](TaskContext context) + scheduler.Schedule(20s, 25s, GROUP_OOC_RP, [this](TaskContext context) + { + // waypoints 10M: 1,2 25M: 1,2,3,5 + _roleplayWaypointCount = (_roleplayWaypointCount % RAID_MODE(2,4)) + 1; + _roleplayReady = true; + // context.Repeat(60s, 80s); + context.Repeat(30s, 40s); + }); } void KilledUnit(Unit* who) override @@ -135,6 +197,7 @@ class boss_razuvious : public CreatureScript void JustEngagedWith(Unit* who) override { BossAI::JustEngagedWith(who); + scheduler.CancelGroup(GROUP_OOC_RP); Talk(SAY_AGGRO); events.ScheduleEvent(EVENT_UNBALANCING_STRIKE, 20s); events.ScheduleEvent(EVENT_DISRUPTING_SHOUT, 15s); @@ -171,6 +234,9 @@ class boss_razuvious : public CreatureScript } DoMeleeAttackIfReady(); } + private: + bool _roleplayReady; + uint8 _roleplayWaypointCount; }; }; @@ -193,8 +259,44 @@ class boss_razuvious_minion : public CreatureScript void Reset() override { events.Reset(); + ScheduleRP(); } + void DoAction(int32 param) override + { + if (param == ACTION_SALUTE_RAZUVIOUS) + { + if (Creature* cr = me->FindNearestCreature(NPC_RAZUVIOUS, 100.0f)) + { + me->SetFacingToObject(cr); + scheduler.DelayGroup(GROUP_OOC_RP, 10s); + scheduler.Schedule(1s, GROUP_OOC_RP, [this](TaskContext context) + { + me->HandleEmoteCommand(EMOTE_ONESHOT_TALK); + }).Schedule(4s, GROUP_OOC_RP, [this](TaskContext context) + { + me->HandleEmoteCommand(EMOTE_ONESHOT_SALUTE); + }).Schedule(2s, GROUP_OOC_RP, [this](TaskContext context) + { + if (Creature* targetDummy = me->FindNearestCreature(16211, 10.0f)) + { + me->SetFacingToObject(targetDummy); + me->HandleEmoteCommand(EMOTE_STATE_READY1H); + } + }); + } + } + } + + void ScheduleRP() + { + scheduler.Schedule(6s, 8s, GROUP_OOC_RP, [this](TaskContext context) + { + me->HandleEmoteCommand(EMOTE_ONESHOT_ATTACK1H); + }); + } + + void KilledUnit(Unit* who) override { if (who->GetTypeId() == TYPEID_PLAYER && me->GetInstanceScript()) @@ -205,6 +307,7 @@ class boss_razuvious_minion : public CreatureScript void JustEngagedWith(Unit* who) override { + scheduler.CancelGroup(GROUP_OOC_RP); if (Creature* cr = me->FindNearestCreature(NPC_RAZUVIOUS, 100.0f)) { cr->SetInCombatWithZone(); From ed250af8b06ffe3763f822a6b8dc7331f6fa6f0a Mon Sep 17 00:00:00 2001 From: Jelle Meeus Date: Sat, 18 May 2024 16:11:03 +0200 Subject: [PATCH 02/31] add script --- .../Northrend/Naxxramas/boss_razuvious.cpp | 124 ++++++++++++------ 1 file changed, 87 insertions(+), 37 deletions(-) diff --git a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp index 366bb5e54fab99..51d7914d1d922a 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp @@ -24,7 +24,13 @@ enum Says SAY_AGGRO = 0, SAY_SLAY = 1, SAY_TAUNTED = 2, - SAY_DEATH = 3 + SAY_DEATH = 3, + SAY_PATHETIC = 4, + SAY_TARGET_DUMMY = 5, + // Death Knight Understudy + SAY_BEAT_ME = 0, + SAY_UNWORTHY = 1, + SAY_WORTHLESS = 2 }; enum Spells @@ -34,7 +40,6 @@ enum Spells SPELL_DISRUPTING_SHOUT_25 = 29107, SPELL_JAGGED_KNIFE = 55550, SPELL_HOPELESS = 29125, - SPELL_TAUNT = 29060 }; @@ -42,34 +47,39 @@ enum Events { EVENT_UNBALANCING_STRIKE = 1, EVENT_DISRUPTING_SHOUT = 2, - EVENT_JAGGED_KNIFE = 3, - // OOC RP - EVENT_GO_TRAINEE = 4, - EVENT_TURN_TO_TRAINEE = 5, - EVENT_EMOTE_SHOUT = 6, - EVENT_ADD_TURN_RAZUV = 7, - EVENT_ADD_TALK = 8, - EVENT_ADD_SALUTE = 9, - EVENT_ADD_ATTACK = 10, - EVENT_ADD_TURN_BACK = 11 + EVENT_JAGGED_KNIFE = 3 }; enum Actions { - ACTION_SALUTE_RAZUVIOUS = 0 + ACTION_SALUTE_RAZUVIOUS = 0 +}; + +enum Data +{ + DATA_CAN_SPEAK = 0 }; enum Groups { - GROUP_OOC_RP = 0 + GROUP_OOC_RP = 0 }; enum Misc { NPC_DEATH_KNIGHT_UNDERSTUDY = 16803, - NPC_RAZUVIOUS = 16061 + NPC_RAZUVIOUS = 16061, + PATH = 1283120, + WP_TOP_LEFT = 1, + WP_TOP_RIGHT = 2, + WP_MIDDLE_RIGHT = 3, + WP_MIDDLE_BOTTOM = 4 + // WP_MIDDLE_LEFT = 5, }; +const uint32 TABLE_WAYPOINT_RP_10[4] = {WP_TOP_LEFT, WP_TOP_RIGHT, WP_TOP_LEFT, WP_TOP_RIGHT}; +const uint32 TABLE_WAYPOINT_RP_25[4] = {WP_MIDDLE_BOTTOM, WP_TOP_LEFT, WP_MIDDLE_RIGHT, WP_TOP_RIGHT}; + class boss_razuvious : public CreatureScript { public: @@ -98,7 +108,8 @@ class boss_razuvious : public CreatureScript if (Is25ManRaid()) { me->SummonCreature(NPC_DEATH_KNIGHT_UNDERSTUDY, 2782.45f, -3088.03f, 267.685f, 0.75f); - me->SummonCreature(NPC_DEATH_KNIGHT_UNDERSTUDY, 2778.56f, -3113.74f, 267.685f, 5.28f); + if (TempSummon* temp = me->SummonCreature(NPC_DEATH_KNIGHT_UNDERSTUDY, 2778.56f, -3113.74f, 267.685f, 5.28f)) + temp->AI()->SetData(DATA_CAN_SPEAK, 1); } } @@ -124,20 +135,46 @@ class boss_razuvious : public CreatureScript if (!_roleplayReady) return; - if ( id == _roleplayWaypointCount || (id == 5 && _roleplayWaypointCount == 4)) + if (id == RAID_MODE(TABLE_WAYPOINT_RP_10, TABLE_WAYPOINT_RP_25)[_roleplayWaypointCount]) { _roleplayReady = false; if (Creature* understudy = GetClosestCreatureWithEntry(me, NPC_DEATH_KNIGHT_UNDERSTUDY, 15.0f)) { - me->PauseMovement(); - me->SetFacingToObject(understudy); - understudy->AI()->DoAction(ACTION_SALUTE_RAZUVIOUS); - scheduler.Schedule(4s, GROUP_OOC_RP, [this](TaskContext context) + // me->PauseMovement(); // ignores, keeps moving + // me->StopMovingOnCurrentPos(); // ignores, keeps moving + // me->StopMoving(); // ignores, keeps moving + // me->GetMotionMaster()->MoveChase(understudy, 3.0f); // stops moving + // me->GetMotionMaster()->Clear(); + // me->GetMotionMaster()->MovementExpired(false); + // me->GetMotionMaster()->MovementExpired(); + // me->GetMotionMaster()->Clear(); + // me->GetMotionMaster()->MoveIdle(); + // me->GetMotionMaster()->MoveChase(understudy, 3.0f); + me->PauseMovement(10000); // ignores, keeps moving + + scheduler.Schedule(4s, GROUP_OOC_RP, [this](TaskContext /*context*/) + { + if (Creature* understudy = GetClosestCreatureWithEntry(me, NPC_DEATH_KNIGHT_UNDERSTUDY, 15.0f)) + { + me->SetFacingToObject(understudy); + if (_roleplayWaypointCount == 0 && Is25ManRaid()) + { + me->HandleEmoteCommand(EMOTE_ONESHOT_EXCLAMATION); + } + else + { + Talk(urand(SAY_PATHETIC,SAY_TARGET_DUMMY)); + } + } + }).Schedule(5s, GROUP_OOC_RP, [this](TaskContext /*context*/) { - me->HandleEmoteCommand(EMOTE_ONESHOT_EXCLAMATION); - }).Schedule(8s, GROUP_OOC_RP, [this](TaskContext context) + if (Creature* understudy = GetClosestCreatureWithEntry(me, NPC_DEATH_KNIGHT_UNDERSTUDY, 15.0f)) + understudy->AI()->DoAction(ACTION_SALUTE_RAZUVIOUS); + }).Schedule(8s, GROUP_OOC_RP, [this](TaskContext /*context*/) { - me->ResumeMovement(); + // me->ResumeMovement(); + // me->GetMotionMaster()->MovePath(PATH, true); + // me->GetMotionMaster()-> }); } } @@ -148,10 +185,10 @@ class boss_razuvious : public CreatureScript _roleplayWaypointCount = 1; _roleplayReady = false; // scheduler.Schedule(60s, 80s, GROUP_OOC_RP, [this](TaskContext context) - scheduler.Schedule(20s, 25s, GROUP_OOC_RP, [this](TaskContext context) + scheduler.Schedule(1s, 2s, GROUP_OOC_RP, [this](TaskContext context) { // waypoints 10M: 1,2 25M: 1,2,3,5 - _roleplayWaypointCount = (_roleplayWaypointCount % RAID_MODE(2,4)) + 1; + _roleplayWaypointCount = (_roleplayWaypointCount + 1) % 4; _roleplayReady = true; // context.Repeat(60s, 80s); context.Repeat(30s, 40s); @@ -207,6 +244,9 @@ class boss_razuvious : public CreatureScript void UpdateAI(uint32 diff) override { + if (!me->IsInCombat()) + scheduler.Update(diff); + if (!UpdateVictim()) return; @@ -254,11 +294,10 @@ class boss_razuvious_minion : public CreatureScript { explicit boss_razuvious_minionAI(Creature* c) : ScriptedAI(c) { } - EventMap events; - void Reset() override { - events.Reset(); + scheduler.CancelAll(); + me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_READY1H); ScheduleRP(); } @@ -266,22 +305,26 @@ class boss_razuvious_minion : public CreatureScript { if (param == ACTION_SALUTE_RAZUVIOUS) { - if (Creature* cr = me->FindNearestCreature(NPC_RAZUVIOUS, 100.0f)) + if (Creature* cr = me->FindNearestCreature(NPC_RAZUVIOUS, 100.0f)) // TODO: lower this range { me->SetFacingToObject(cr); + me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_NONE); scheduler.DelayGroup(GROUP_OOC_RP, 10s); - scheduler.Schedule(1s, GROUP_OOC_RP, [this](TaskContext context) + scheduler.Schedule(1s, GROUP_OOC_RP, [this](TaskContext /*context*/) { - me->HandleEmoteCommand(EMOTE_ONESHOT_TALK); - }).Schedule(4s, GROUP_OOC_RP, [this](TaskContext context) + if(_canSpeak) + Talk(urand(SAY_BEAT_ME, SAY_WORTHLESS)); + else + me->HandleEmoteCommand(EMOTE_ONESHOT_TALK); + }).Schedule(4s, GROUP_OOC_RP, [this](TaskContext /*context*/) { me->HandleEmoteCommand(EMOTE_ONESHOT_SALUTE); - }).Schedule(2s, GROUP_OOC_RP, [this](TaskContext context) + }).Schedule(7s, GROUP_OOC_RP, [this](TaskContext /*context*/) { if (Creature* targetDummy = me->FindNearestCreature(16211, 10.0f)) { me->SetFacingToObject(targetDummy); - me->HandleEmoteCommand(EMOTE_STATE_READY1H); + me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_READY1H); } }); } @@ -290,12 +333,16 @@ class boss_razuvious_minion : public CreatureScript void ScheduleRP() { - scheduler.Schedule(6s, 8s, GROUP_OOC_RP, [this](TaskContext context) + scheduler.Schedule(6s, 8s, GROUP_OOC_RP, [this](TaskContext /*context*/) { me->HandleEmoteCommand(EMOTE_ONESHOT_ATTACK1H); }); } + void SetData(uint32 /*type*/, uint32 /*data*/) override + { + _canSpeak = true; + } void KilledUnit(Unit* who) override { @@ -317,15 +364,18 @@ class boss_razuvious_minion : public CreatureScript void UpdateAI(uint32 diff) override { + scheduler.Update(diff); + if (UpdateVictim()) { - events.Update(diff); if (!me->HasUnitState(UNIT_STATE_CASTING) || !me->IsCharmed()) { DoMeleeAttackIfReady(); } } } + private: + bool _canSpeak; }; }; From 9d071c31829ba088338d3a9e9412e466620faab0 Mon Sep 17 00:00:00 2001 From: Jelle Meeus Date: Sat, 18 May 2024 21:57:46 +0200 Subject: [PATCH 03/31] root and unroot razuvious with SetControlled, adjust timings --- .../Northrend/Naxxramas/boss_razuvious.cpp | 121 +++++++----------- 1 file changed, 49 insertions(+), 72 deletions(-) diff --git a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp index 51d7914d1d922a..f773db31a72c84 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp @@ -27,10 +27,9 @@ enum Says SAY_DEATH = 3, SAY_PATHETIC = 4, SAY_TARGET_DUMMY = 5, - // Death Knight Understudy - SAY_BEAT_ME = 0, - SAY_UNWORTHY = 1, - SAY_WORTHLESS = 2 + SAY_DK_BEAT_ME = 0, + SAY_DK_UNWORTHY = 1, + SAY_DK_WORTHLESS = 2 }; enum Spells @@ -50,31 +49,19 @@ enum Events EVENT_JAGGED_KNIFE = 3 }; -enum Actions -{ - ACTION_SALUTE_RAZUVIOUS = 0 -}; - -enum Data -{ - DATA_CAN_SPEAK = 0 -}; - -enum Groups -{ - GROUP_OOC_RP = 0 -}; - enum Misc { NPC_DEATH_KNIGHT_UNDERSTUDY = 16803, NPC_RAZUVIOUS = 16061, - PATH = 1283120, - WP_TOP_LEFT = 1, - WP_TOP_RIGHT = 2, - WP_MIDDLE_RIGHT = 3, - WP_MIDDLE_BOTTOM = 4 - // WP_MIDDLE_LEFT = 5, + NPC_TARGET_DUMMY = 16211, + WP_TOP_LEFT = 1, + WP_TOP_RIGHT = 2, + WP_MIDDLE_RIGHT = 3, + WP_MIDDLE_BOTTOM = 4, + // WP_MIDDLE_LEFT = 5 + ACTION_INTERACT_WITH_RAZUVIOUS = 0, + GROUP_OOC_RP = 0, + DATA_CAN_SPEAK = 0, }; const uint32 TABLE_WAYPOINT_RP_10[4] = {WP_TOP_LEFT, WP_TOP_RIGHT, WP_TOP_LEFT, WP_TOP_RIGHT}; @@ -121,6 +108,7 @@ class boss_razuvious : public CreatureScript void Reset() override { BossAI::Reset(); + me->SetControlled(false, UNIT_STATE_ROOT); summons.DespawnAll(); events.Reset(); SpawnHelpers(); @@ -140,41 +128,30 @@ class boss_razuvious : public CreatureScript _roleplayReady = false; if (Creature* understudy = GetClosestCreatureWithEntry(me, NPC_DEATH_KNIGHT_UNDERSTUDY, 15.0f)) { - // me->PauseMovement(); // ignores, keeps moving - // me->StopMovingOnCurrentPos(); // ignores, keeps moving - // me->StopMoving(); // ignores, keeps moving - // me->GetMotionMaster()->MoveChase(understudy, 3.0f); // stops moving - // me->GetMotionMaster()->Clear(); - // me->GetMotionMaster()->MovementExpired(false); - // me->GetMotionMaster()->MovementExpired(); - // me->GetMotionMaster()->Clear(); - // me->GetMotionMaster()->MoveIdle(); - // me->GetMotionMaster()->MoveChase(understudy, 3.0f); - me->PauseMovement(10000); // ignores, keeps moving - - scheduler.Schedule(4s, GROUP_OOC_RP, [this](TaskContext /*context*/) + me->SetControlled(true, UNIT_STATE_ROOT); + me->SetFacingToObject(understudy); + scheduler.Schedule(1s, GROUP_OOC_RP, [this](TaskContext /*context*/) { - if (Creature* understudy = GetClosestCreatureWithEntry(me, NPC_DEATH_KNIGHT_UNDERSTUDY, 15.0f)) + if (Creature* understudy = GetClosestCreatureWithEntry(me, NPC_DEATH_KNIGHT_UNDERSTUDY, 20.0f)) { - me->SetFacingToObject(understudy); - if (_roleplayWaypointCount == 0 && Is25ManRaid()) + if (_roleplayWaypointCount == 0 && Is25ManRaid() && roll_chance_i(75)) { - me->HandleEmoteCommand(EMOTE_ONESHOT_EXCLAMATION); + Talk(urand(SAY_PATHETIC,SAY_TARGET_DUMMY)); } else { - Talk(urand(SAY_PATHETIC,SAY_TARGET_DUMMY)); + me->HandleEmoteCommand(EMOTE_ONESHOT_EXCLAMATION); } } - }).Schedule(5s, GROUP_OOC_RP, [this](TaskContext /*context*/) + }).Schedule(4s, GROUP_OOC_RP, [this](TaskContext /*context*/) { - if (Creature* understudy = GetClosestCreatureWithEntry(me, NPC_DEATH_KNIGHT_UNDERSTUDY, 15.0f)) - understudy->AI()->DoAction(ACTION_SALUTE_RAZUVIOUS); - }).Schedule(8s, GROUP_OOC_RP, [this](TaskContext /*context*/) + if (Creature* understudy = GetClosestCreatureWithEntry(me, NPC_DEATH_KNIGHT_UNDERSTUDY, 20.0f)) + { + understudy->AI()->DoAction(ACTION_INTERACT_WITH_RAZUVIOUS); + } + }).Schedule(10s, GROUP_OOC_RP, [this](TaskContext /*context*/) { - // me->ResumeMovement(); - // me->GetMotionMaster()->MovePath(PATH, true); - // me->GetMotionMaster()-> + me->SetControlled(false, UNIT_STATE_ROOT); }); } } @@ -184,14 +161,13 @@ class boss_razuvious : public CreatureScript { _roleplayWaypointCount = 1; _roleplayReady = false; - // scheduler.Schedule(60s, 80s, GROUP_OOC_RP, [this](TaskContext context) - scheduler.Schedule(1s, 2s, GROUP_OOC_RP, [this](TaskContext context) + // scheduler.Schedule(1s, 2s, GROUP_OOC_RP, [this](TaskContext context) + scheduler.Schedule(60s, 80s, GROUP_OOC_RP, [this](TaskContext context) { - // waypoints 10M: 1,2 25M: 1,2,3,5 _roleplayWaypointCount = (_roleplayWaypointCount + 1) % 4; _roleplayReady = true; - // context.Repeat(60s, 80s); - context.Repeat(30s, 40s); + context.Repeat(60s, 80s); + // context.Repeat(30s, 40s); }); } @@ -235,6 +211,7 @@ class boss_razuvious : public CreatureScript { BossAI::JustEngagedWith(who); scheduler.CancelGroup(GROUP_OOC_RP); + me->SetControlled(false, UNIT_STATE_ROOT); Talk(SAY_AGGRO); events.ScheduleEvent(EVENT_UNBALANCING_STRIKE, 20s); events.ScheduleEvent(EVENT_DISRUPTING_SHOUT, 15s); @@ -298,28 +275,35 @@ class boss_razuvious_minion : public CreatureScript { scheduler.CancelAll(); me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_READY1H); - ScheduleRP(); + scheduler.Schedule(6s, 9s, GROUP_OOC_RP, [this](TaskContext /*context*/) + { + me->HandleEmoteCommand(EMOTE_ONESHOT_ATTACK1H); + }); } void DoAction(int32 param) override { - if (param == ACTION_SALUTE_RAZUVIOUS) + if (param == ACTION_INTERACT_WITH_RAZUVIOUS) { - if (Creature* cr = me->FindNearestCreature(NPC_RAZUVIOUS, 100.0f)) // TODO: lower this range + if (Creature* cr = me->FindNearestCreature(NPC_RAZUVIOUS, 36.0f)) { me->SetFacingToObject(cr); me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_NONE); - scheduler.DelayGroup(GROUP_OOC_RP, 10s); - scheduler.Schedule(1s, GROUP_OOC_RP, [this](TaskContext /*context*/) + scheduler.DelayGroup(GROUP_OOC_RP, 12s); + scheduler.Schedule(2s, GROUP_OOC_RP, [this](TaskContext /*context*/) { if(_canSpeak) - Talk(urand(SAY_BEAT_ME, SAY_WORTHLESS)); + { + Talk(urand(SAY_DK_BEAT_ME, SAY_DK_WORTHLESS)); + } else + { me->HandleEmoteCommand(EMOTE_ONESHOT_TALK); - }).Schedule(4s, GROUP_OOC_RP, [this](TaskContext /*context*/) + } + }).Schedule(6s, GROUP_OOC_RP, [this](TaskContext /*context*/) { me->HandleEmoteCommand(EMOTE_ONESHOT_SALUTE); - }).Schedule(7s, GROUP_OOC_RP, [this](TaskContext /*context*/) + }).Schedule(11s, GROUP_OOC_RP, [this](TaskContext /*context*/) { if (Creature* targetDummy = me->FindNearestCreature(16211, 10.0f)) { @@ -331,14 +315,6 @@ class boss_razuvious_minion : public CreatureScript } } - void ScheduleRP() - { - scheduler.Schedule(6s, 8s, GROUP_OOC_RP, [this](TaskContext /*context*/) - { - me->HandleEmoteCommand(EMOTE_ONESHOT_ATTACK1H); - }); - } - void SetData(uint32 /*type*/, uint32 /*data*/) override { _canSpeak = true; @@ -364,7 +340,8 @@ class boss_razuvious_minion : public CreatureScript void UpdateAI(uint32 diff) override { - scheduler.Update(diff); + if (!me->IsInCombat()) + scheduler.Update(diff); if (UpdateVictim()) { From 5124010190514fb07fbafb585aeee5e799cfdb35 Mon Sep 17 00:00:00 2001 From: Jelle Meeus Date: Sat, 18 May 2024 22:03:36 +0200 Subject: [PATCH 04/31] remove comments --- data/sql/updates/pending_db_world/rev_1715986644313348181.sql | 4 ---- src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp | 2 -- 2 files changed, 6 deletions(-) diff --git a/data/sql/updates/pending_db_world/rev_1715986644313348181.sql b/data/sql/updates/pending_db_world/rev_1715986644313348181.sql index 7c26200da487e2..25363e4cabc8df 100644 --- a/data/sql/updates/pending_db_world/rev_1715986644313348181.sql +++ b/data/sql/updates/pending_db_world/rev_1715986644313348181.sql @@ -1,8 +1,4 @@ -- --- STATE_READY_1H --- UPDATE `creature_template_addon` SET `emote` = 333 WHERE (`entry` = 16803); --- UPDATE `creature_template_addon` SET `emote` = 333 WHERE (`entry` = 29941); - -- Razuvious DELETE FROM `creature_text` WHERE `CreatureID` = 16061 AND `GroupID` IN (4, 5); INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES diff --git a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp index f773db31a72c84..c527ceccafbb9b 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp @@ -161,13 +161,11 @@ class boss_razuvious : public CreatureScript { _roleplayWaypointCount = 1; _roleplayReady = false; - // scheduler.Schedule(1s, 2s, GROUP_OOC_RP, [this](TaskContext context) scheduler.Schedule(60s, 80s, GROUP_OOC_RP, [this](TaskContext context) { _roleplayWaypointCount = (_roleplayWaypointCount + 1) % 4; _roleplayReady = true; context.Repeat(60s, 80s); - // context.Repeat(30s, 40s); }); } From 2c6f0dcf360b7eff612325d7caa85b5401ed1b7b Mon Sep 17 00:00:00 2001 From: Jelle Meeus Date: Sat, 18 May 2024 22:40:52 +0200 Subject: [PATCH 05/31] use _roleplayWaypoint to keep track of which WP to RP at --- src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp index c527ceccafbb9b..6e51b12602a9d0 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp @@ -123,7 +123,7 @@ class boss_razuvious : public CreatureScript if (!_roleplayReady) return; - if (id == RAID_MODE(TABLE_WAYPOINT_RP_10, TABLE_WAYPOINT_RP_25)[_roleplayWaypointCount]) + if (id == _roleplayWaypoint) { _roleplayReady = false; if (Creature* understudy = GetClosestCreatureWithEntry(me, NPC_DEATH_KNIGHT_UNDERSTUDY, 15.0f)) @@ -134,7 +134,7 @@ class boss_razuvious : public CreatureScript { if (Creature* understudy = GetClosestCreatureWithEntry(me, NPC_DEATH_KNIGHT_UNDERSTUDY, 20.0f)) { - if (_roleplayWaypointCount == 0 && Is25ManRaid() && roll_chance_i(75)) + if (_roleplayWaypoint == WP_MIDDLE_BOTTOM && roll_chance_i(75)) { Talk(urand(SAY_PATHETIC,SAY_TARGET_DUMMY)); } @@ -164,6 +164,7 @@ class boss_razuvious : public CreatureScript scheduler.Schedule(60s, 80s, GROUP_OOC_RP, [this](TaskContext context) { _roleplayWaypointCount = (_roleplayWaypointCount + 1) % 4; + _roleplayWaypoint = RAID_MODE(TABLE_WAYPOINT_RP_10, TABLE_WAYPOINT_RP_25)[_roleplayWaypointCount]; _roleplayReady = true; context.Repeat(60s, 80s); }); @@ -252,6 +253,7 @@ class boss_razuvious : public CreatureScript private: bool _roleplayReady; uint8 _roleplayWaypointCount; + uint8 _roleplayWaypoint; }; }; From f32f3749d857ad93f65bc099d3d08431caa40ee0 Mon Sep 17 00:00:00 2001 From: Jelle Meeus Date: Sat, 18 May 2024 22:45:30 +0200 Subject: [PATCH 06/31] rename count to index --- src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp index 6e51b12602a9d0..1ac5f149e073aa 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp @@ -159,13 +159,13 @@ class boss_razuvious : public CreatureScript void ScheduleRP() { - _roleplayWaypointCount = 1; + _roleplayWaypointNextIndex = 0; _roleplayReady = false; scheduler.Schedule(60s, 80s, GROUP_OOC_RP, [this](TaskContext context) { - _roleplayWaypointCount = (_roleplayWaypointCount + 1) % 4; - _roleplayWaypoint = RAID_MODE(TABLE_WAYPOINT_RP_10, TABLE_WAYPOINT_RP_25)[_roleplayWaypointCount]; + _roleplayWaypoint = RAID_MODE(TABLE_WAYPOINT_RP_10, TABLE_WAYPOINT_RP_25)[_roleplayWaypointNextIndex]; _roleplayReady = true; + _roleplayWaypointNextIndex = (_roleplayWaypointNextIndex + 1) % 4; context.Repeat(60s, 80s); }); } @@ -252,7 +252,7 @@ class boss_razuvious : public CreatureScript } private: bool _roleplayReady; - uint8 _roleplayWaypointCount; + uint8 _roleplayWaypointNextIndex; uint8 _roleplayWaypoint; }; }; From 5d2dabe9596c71f179e2c5cf973b306abff4fc93 Mon Sep 17 00:00:00 2001 From: Jelle Meeus Date: Fri, 31 May 2024 16:32:27 +0200 Subject: [PATCH 07/31] move RP logic to razu, adjust timings, move to understudy, reload path update --- .../rev_1715986644313348181.sql | 4 +- .../Northrend/Naxxramas/boss_razuvious.cpp | 214 +++++++++++------- 2 files changed, 134 insertions(+), 84 deletions(-) diff --git a/data/sql/updates/pending_db_world/rev_1715986644313348181.sql b/data/sql/updates/pending_db_world/rev_1715986644313348181.sql index 25363e4cabc8df..4669197551274d 100644 --- a/data/sql/updates/pending_db_world/rev_1715986644313348181.sql +++ b/data/sql/updates/pending_db_world/rev_1715986644313348181.sql @@ -9,5 +9,5 @@ INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Lan DELETE FROM `creature_text` WHERE `CreatureID` = 16803; INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES (16803, 0, 0, 'Sir, student requests that you beat him for his lack of understanding!', 12, 0, 100, 1, 0, 0, 13140, 0, 'Death Knight Understudy SAY_BEAT_ME'), -(16803, 1, 0, 'I am unworthy, master!', 12, 0, 100, 1, 0, 0, 13138, 0, 'Death Knight Understudy SAY_UNWORTHY'), -(16803, 2, 0, 'Student is worthless, master! Student apologizes for his deficiency!', 12, 0, 100, 1, 0, 0, 13137, 0, 'Death Knight Understudy SAY_WORTHLESS'); +(16803, 0, 1, 'I am unworthy, master!', 12, 0, 100, 1, 0, 0, 13138, 0, 'Death Knight Understudy SAY_UNWORTHY'), +(16803, 0, 2, 'Student is worthless, master! Student apologizes for his deficiency!', 12, 0, 100, 1, 0, 0, 13137, 0, 'Death Knight Understudy SAY_WORTHLESS'); diff --git a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp index 1ac5f149e073aa..1df3c85b6a0340 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp @@ -27,9 +27,7 @@ enum Says SAY_DEATH = 3, SAY_PATHETIC = 4, SAY_TARGET_DUMMY = 5, - SAY_DK_BEAT_ME = 0, - SAY_DK_UNWORTHY = 1, - SAY_DK_WORTHLESS = 2 + SAY_DEATH_KNIGHT_UNDERSTUDY = 0, }; enum Spells @@ -49,22 +47,34 @@ enum Events EVENT_JAGGED_KNIFE = 3 }; -enum Misc +enum NPCs { NPC_DEATH_KNIGHT_UNDERSTUDY = 16803, NPC_RAZUVIOUS = 16061, NPC_TARGET_DUMMY = 16211, +}; + +enum Actions +{ + ACTION_FACE_ME = 0, + ACTION_TALK = 1, + ACTION_EMOTE = 2, + ACTION_SALUTE = 3, + ACTION_BACK_TO_TRAINING = 4, +}; + +enum Misc +{ + GROUP_OOC_RP = 0, + PATH_RAZUVIOUS = 1283120, + POINT_DEATH_KNIGHT = 0, WP_TOP_LEFT = 1, WP_TOP_RIGHT = 2, WP_MIDDLE_RIGHT = 3, WP_MIDDLE_BOTTOM = 4, - // WP_MIDDLE_LEFT = 5 - ACTION_INTERACT_WITH_RAZUVIOUS = 0, - GROUP_OOC_RP = 0, - DATA_CAN_SPEAK = 0, }; -const uint32 TABLE_WAYPOINT_RP_10[4] = {WP_TOP_LEFT, WP_TOP_RIGHT, WP_TOP_LEFT, WP_TOP_RIGHT}; +const uint32 TABLE_WAYPOINT_RP_10[4] = {WP_MIDDLE_BOTTOM, WP_TOP_RIGHT, WP_MIDDLE_BOTTOM, WP_TOP_RIGHT}; const uint32 TABLE_WAYPOINT_RP_25[4] = {WP_MIDDLE_BOTTOM, WP_TOP_LEFT, WP_MIDDLE_RIGHT, WP_TOP_RIGHT}; class boss_razuvious : public CreatureScript @@ -95,8 +105,7 @@ class boss_razuvious : public CreatureScript if (Is25ManRaid()) { me->SummonCreature(NPC_DEATH_KNIGHT_UNDERSTUDY, 2782.45f, -3088.03f, 267.685f, 0.75f); - if (TempSummon* temp = me->SummonCreature(NPC_DEATH_KNIGHT_UNDERSTUDY, 2778.56f, -3113.74f, 267.685f, 5.28f)) - temp->AI()->SetData(DATA_CAN_SPEAK, 1); + me->SummonCreature(NPC_DEATH_KNIGHT_UNDERSTUDY, 2778.56f, -3113.74f, 267.685f, 5.28f); } } @@ -112,11 +121,75 @@ class boss_razuvious : public CreatureScript summons.DespawnAll(); events.Reset(); SpawnHelpers(); + _roleplayWaypointNextIndex = 0; + _roleplayReady = false; ScheduleRP(); } + void ScheduleInteractWithDeathKnight() + { + scheduler.Schedule(2s, GROUP_OOC_RP, [this](TaskContext /*context*/) + { + if (rpBuddyGUID) + if (Creature* understudy = ObjectAccessor::GetCreature(*me, rpBuddyGUID)) + understudy->AI()->DoAction(ACTION_FACE_ME); + }).Schedule(8s, GROUP_OOC_RP, [this](TaskContext /*context*/) + { + if (rpBuddyGUID) + if (Creature* understudy = ObjectAccessor::GetCreature(*me, rpBuddyGUID)) + understudy->AI()->DoAction(ACTION_SALUTE); + }).Schedule(11s, GROUP_OOC_RP, [this](TaskContext /*context*/) + { + me->GetMotionMaster()->MovePath(PATH_RAZUVIOUS, true); + ScheduleRP(); + }).Schedule(13s, GROUP_OOC_RP, [this](TaskContext /*context*/) + { + if (rpBuddyGUID) + if (Creature* understudy = ObjectAccessor::GetCreature(*me, rpBuddyGUID)) + understudy->AI()->DoAction(ACTION_BACK_TO_TRAINING); + }); + + if (rpBuddyGUID) + if (Creature* understudy = ObjectAccessor::GetCreature(*me, rpBuddyGUID)) + me->SetFacingToObject(understudy); + + if (roll_chance_i(75)) + { + bool longText = roll_chance_i(50); + Talk(longText ? SAY_TARGET_DUMMY : SAY_PATHETIC); + scheduler.Schedule(4s, GROUP_OOC_RP, [this](TaskContext /*context*/) + { + if (rpBuddyGUID) + if (Creature* understudy = ObjectAccessor::GetCreature(*me, rpBuddyGUID)) + understudy->AI()->DoAction(ACTION_TALK); + }); + if (longText) + scheduler.DelayGroup(GROUP_OOC_RP, 5s); + } + else + { + me->HandleEmoteCommand(EMOTE_ONESHOT_EXCLAMATION); + scheduler.Schedule(4s, GROUP_OOC_RP, [this](TaskContext /*context*/) + { + if (rpBuddyGUID) + if (Creature* understudy = ObjectAccessor::GetCreature(*me, rpBuddyGUID)) + { + if (roll_chance_i(25)) + understudy->AI()->DoAction(ACTION_EMOTE); + else + understudy->AI()->DoAction(ACTION_TALK); + } + }); + } + } + void MovementInform(uint32 type, uint32 id) override { + if (type == POINT_MOTION_TYPE && id == POINT_DEATH_KNIGHT) + { + ScheduleInteractWithDeathKnight(); + } + if (type != WAYPOINT_MOTION_TYPE) return; @@ -126,47 +199,28 @@ class boss_razuvious : public CreatureScript if (id == _roleplayWaypoint) { _roleplayReady = false; - if (Creature* understudy = GetClosestCreatureWithEntry(me, NPC_DEATH_KNIGHT_UNDERSTUDY, 15.0f)) + if (Creature* understudy = GetClosestCreatureWithEntry(me, NPC_DEATH_KNIGHT_UNDERSTUDY, 20.0f)) { - me->SetControlled(true, UNIT_STATE_ROOT); - me->SetFacingToObject(understudy); - scheduler.Schedule(1s, GROUP_OOC_RP, [this](TaskContext /*context*/) - { - if (Creature* understudy = GetClosestCreatureWithEntry(me, NPC_DEATH_KNIGHT_UNDERSTUDY, 20.0f)) - { - if (_roleplayWaypoint == WP_MIDDLE_BOTTOM && roll_chance_i(75)) - { - Talk(urand(SAY_PATHETIC,SAY_TARGET_DUMMY)); - } - else - { - me->HandleEmoteCommand(EMOTE_ONESHOT_EXCLAMATION); - } - } - }).Schedule(4s, GROUP_OOC_RP, [this](TaskContext /*context*/) - { - if (Creature* understudy = GetClosestCreatureWithEntry(me, NPC_DEATH_KNIGHT_UNDERSTUDY, 20.0f)) - { - understudy->AI()->DoAction(ACTION_INTERACT_WITH_RAZUVIOUS); - } - }).Schedule(10s, GROUP_OOC_RP, [this](TaskContext /*context*/) - { - me->SetControlled(false, UNIT_STATE_ROOT); - }); + rpBuddyGUID = understudy->GetGUID(); + me->GetMotionMaster()->MovementExpired(false); + me->GetMotionMaster()->MoveIdle(); } + scheduler.Schedule(0s, GROUP_OOC_RP, [this](TaskContext /*context*/) + { + if (rpBuddyGUID) + if (Creature* understudy = ObjectAccessor::GetCreature(*me, rpBuddyGUID)) + me->GetMotionMaster()->MovePoint(POINT_DEATH_KNIGHT, understudy->GetNearPosition(INTERACTION_DISTANCE, understudy->GetRelativeAngle(me))); + }); } } void ScheduleRP() { - _roleplayWaypointNextIndex = 0; - _roleplayReady = false; - scheduler.Schedule(60s, 80s, GROUP_OOC_RP, [this](TaskContext context) + scheduler.Schedule(10s, 10s, GROUP_OOC_RP, [this](TaskContext /*context*/) { _roleplayWaypoint = RAID_MODE(TABLE_WAYPOINT_RP_10, TABLE_WAYPOINT_RP_25)[_roleplayWaypointNextIndex]; _roleplayReady = true; _roleplayWaypointNextIndex = (_roleplayWaypointNextIndex + 1) % 4; - context.Repeat(60s, 80s); }); } @@ -254,6 +308,7 @@ class boss_razuvious : public CreatureScript bool _roleplayReady; uint8 _roleplayWaypointNextIndex; uint8 _roleplayWaypoint; + ObjectGuid rpBuddyGUID; }; }; @@ -262,64 +317,62 @@ class boss_razuvious_minion : public CreatureScript public: boss_razuvious_minion() : CreatureScript("boss_razuvious_minion") { } - CreatureAI* GetAI(Creature* pCreature) const override + CreatureAI* GetAI(Creature* creature) const override { - return GetNaxxramasAI(pCreature); + return GetNaxxramasAI(creature); } struct boss_razuvious_minionAI : public ScriptedAI { - explicit boss_razuvious_minionAI(Creature* c) : ScriptedAI(c) { } + explicit boss_razuvious_minionAI(Creature* creature) : ScriptedAI(creature) { } void Reset() override { scheduler.CancelAll(); + ScheduleAttackDummy(); + } + + void ScheduleAttackDummy() + { me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_READY1H); - scheduler.Schedule(6s, 9s, GROUP_OOC_RP, [this](TaskContext /*context*/) + if (Creature* targetDummy = me->FindNearestCreature(NPC_TARGET_DUMMY, 10.0f)) + { + me->SetFacingToObject(targetDummy); + } + scheduler.Schedule(6s, 9s, GROUP_OOC_RP, [this](TaskContext context) { me->HandleEmoteCommand(EMOTE_ONESHOT_ATTACK1H); + context.Repeat(6s, 9s); }); } - void DoAction(int32 param) override + void DoAction(int32 action) override { - if (param == ACTION_INTERACT_WITH_RAZUVIOUS) + switch (action) { - if (Creature* cr = me->FindNearestCreature(NPC_RAZUVIOUS, 36.0f)) - { - me->SetFacingToObject(cr); + case ACTION_FACE_ME: + scheduler.CancelGroup(GROUP_OOC_RP); + me->SetSheath(SHEATH_STATE_UNARMED); me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_NONE); - scheduler.DelayGroup(GROUP_OOC_RP, 12s); - scheduler.Schedule(2s, GROUP_OOC_RP, [this](TaskContext /*context*/) - { - if(_canSpeak) - { - Talk(urand(SAY_DK_BEAT_ME, SAY_DK_WORTHLESS)); - } - else - { - me->HandleEmoteCommand(EMOTE_ONESHOT_TALK); - } - }).Schedule(6s, GROUP_OOC_RP, [this](TaskContext /*context*/) - { - me->HandleEmoteCommand(EMOTE_ONESHOT_SALUTE); - }).Schedule(11s, GROUP_OOC_RP, [this](TaskContext /*context*/) - { - if (Creature* targetDummy = me->FindNearestCreature(16211, 10.0f)) - { - me->SetFacingToObject(targetDummy); - me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_READY1H); - } - }); - } + if (Creature* cr = me->FindNearestCreature(NPC_RAZUVIOUS, 36.0f)) + me->SetFacingToObject(cr); + break; + case ACTION_TALK: + Talk(SAY_DEATH_KNIGHT_UNDERSTUDY); + break; + case ACTION_EMOTE: + me->HandleEmoteCommand(EMOTE_ONESHOT_TALK); + break; + case ACTION_SALUTE: + me->HandleEmoteCommand(EMOTE_ONESHOT_SALUTE); + break; + case ACTION_BACK_TO_TRAINING: + me->SetSheath(SHEATH_STATE_MELEE); + ScheduleAttackDummy(); + break; } } - void SetData(uint32 /*type*/, uint32 /*data*/) override - { - _canSpeak = true; - } - void KilledUnit(Unit* who) override { if (who->GetTypeId() == TYPEID_PLAYER && me->GetInstanceScript()) @@ -340,8 +393,7 @@ class boss_razuvious_minion : public CreatureScript void UpdateAI(uint32 diff) override { - if (!me->IsInCombat()) - scheduler.Update(diff); + scheduler.Update(diff); if (UpdateVictim()) { @@ -351,8 +403,6 @@ class boss_razuvious_minion : public CreatureScript } } } - private: - bool _canSpeak; }; }; From 1be06d934bad9dd92e87dde15b599acce13e554d Mon Sep 17 00:00:00 2001 From: Jelle Meeus Date: Fri, 31 May 2024 19:44:12 +0200 Subject: [PATCH 08/31] remove no longer needd setcontrolled --- src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp index 1df3c85b6a0340..b471a391403623 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp @@ -117,7 +117,6 @@ class boss_razuvious : public CreatureScript void Reset() override { BossAI::Reset(); - me->SetControlled(false, UNIT_STATE_ROOT); summons.DespawnAll(); events.Reset(); SpawnHelpers(); @@ -264,7 +263,6 @@ class boss_razuvious : public CreatureScript { BossAI::JustEngagedWith(who); scheduler.CancelGroup(GROUP_OOC_RP); - me->SetControlled(false, UNIT_STATE_ROOT); Talk(SAY_AGGRO); events.ScheduleEvent(EVENT_UNBALANCING_STRIKE, 20s); events.ScheduleEvent(EVENT_DISRUPTING_SHOUT, 15s); From 4e2db888d4631df4b2b3c570fc73923e1b48e32d Mon Sep 17 00:00:00 2001 From: Jelle Meeus Date: Sat, 1 Jun 2024 21:56:02 +0200 Subject: [PATCH 09/31] use the instance storage accessor instead of grid search to access the boss --- src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp index b471a391403623..a5f8ba103f9af1 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp @@ -352,8 +352,9 @@ class boss_razuvious_minion : public CreatureScript scheduler.CancelGroup(GROUP_OOC_RP); me->SetSheath(SHEATH_STATE_UNARMED); me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_NONE); - if (Creature* cr = me->FindNearestCreature(NPC_RAZUVIOUS, 36.0f)) - me->SetFacingToObject(cr); + if (InstanceScript* instance = me->GetInstanceScript()) + if (Creature* cr = ObjectAccessor::GetCreature(*me, instance->GetGuidData(NPC_RAZUVIOUS))) + me->SetFacingToObject(cr); break; case ACTION_TALK: Talk(SAY_DEATH_KNIGHT_UNDERSTUDY); From 06922a617879ac73eabb68db005e27ffb5b375d4 Mon Sep 17 00:00:00 2001 From: Jelle Meeus Date: Mon, 10 Jun 2024 21:21:41 +0200 Subject: [PATCH 10/31] scheduleRP after all RP has been completed --- src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp index a5f8ba103f9af1..32c49b2cdcde64 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp @@ -140,12 +140,12 @@ class boss_razuvious : public CreatureScript }).Schedule(11s, GROUP_OOC_RP, [this](TaskContext /*context*/) { me->GetMotionMaster()->MovePath(PATH_RAZUVIOUS, true); - ScheduleRP(); }).Schedule(13s, GROUP_OOC_RP, [this](TaskContext /*context*/) { if (rpBuddyGUID) if (Creature* understudy = ObjectAccessor::GetCreature(*me, rpBuddyGUID)) understudy->AI()->DoAction(ACTION_BACK_TO_TRAINING); + ScheduleRP(); }); if (rpBuddyGUID) From 4c67b62e6658cf9e30716e74999d2cac6a01986b Mon Sep 17 00:00:00 2001 From: Jelle Meeus Date: Mon, 10 Jun 2024 21:22:28 +0200 Subject: [PATCH 11/31] Add TODO, increase time after WIP is done --- src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp index 32c49b2cdcde64..fbbc36a075be57 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp @@ -215,7 +215,7 @@ class boss_razuvious : public CreatureScript void ScheduleRP() { - scheduler.Schedule(10s, 10s, GROUP_OOC_RP, [this](TaskContext /*context*/) + scheduler.Schedule(10s, 10s, GROUP_OOC_RP, [this](TaskContext /*context*/) // TODO: increase this time to 60s-80s { _roleplayWaypoint = RAID_MODE(TABLE_WAYPOINT_RP_10, TABLE_WAYPOINT_RP_25)[_roleplayWaypointNextIndex]; _roleplayReady = true; From 4d85a9ebb251c767176d0f8e5bc01f3dee8d5836 Mon Sep 17 00:00:00 2001 From: Jelle Meeus Date: Sun, 16 Jun 2024 16:49:29 +0200 Subject: [PATCH 12/31] style --- src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp index fbbc36a075be57..9e7ae0e2709d5f 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp @@ -353,8 +353,12 @@ class boss_razuvious_minion : public CreatureScript me->SetSheath(SHEATH_STATE_UNARMED); me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_NONE); if (InstanceScript* instance = me->GetInstanceScript()) - if (Creature* cr = ObjectAccessor::GetCreature(*me, instance->GetGuidData(NPC_RAZUVIOUS))) - me->SetFacingToObject(cr); + { + if (Creature* creature = ObjectAccessor::GetCreature(*me, instance->GetGuidData(NPC_RAZUVIOUS))) + { + me->SetFacingToObject(creature); + } + } break; case ACTION_TALK: Talk(SAY_DEATH_KNIGHT_UNDERSTUDY); From 11456e3b30daf145d1b451aba6185aed66ab57c4 Mon Sep 17 00:00:00 2001 From: Jelle Meeus Date: Sun, 16 Jun 2024 16:49:41 +0200 Subject: [PATCH 13/31] ObjectAccessor instead of FindNearest --- .../scripts/Northrend/Naxxramas/boss_razuvious.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp index 9e7ae0e2709d5f..91cbbeafc131f8 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp @@ -387,10 +387,13 @@ class boss_razuvious_minion : public CreatureScript void JustEngagedWith(Unit* who) override { scheduler.CancelGroup(GROUP_OOC_RP); - if (Creature* cr = me->FindNearestCreature(NPC_RAZUVIOUS, 100.0f)) + if (InstanceScript* instance = me->GetInstanceScript()) { - cr->SetInCombatWithZone(); - cr->AI()->AttackStart(who); + if (Creature* creature = ObjectAccessor::GetCreature(*me, instance->GetGuidData(NPC_RAZUVIOUS))) + { + creature->SetInCombatWithZone(); + creature->AI()->AttackStart(who); + } } } From e6ec5292e95533f8d0301d148a7fc68c180af015 Mon Sep 17 00:00:00 2001 From: Jelle Meeus Date: Wed, 26 Jun 2024 10:54:45 +0200 Subject: [PATCH 14/31] remove boss RP and interaction with DK, only do attack RP of DK --- .../rev_1715986644313348181.sql | 13 -- .../Northrend/Naxxramas/boss_razuvious.cpp | 168 +----------------- 2 files changed, 2 insertions(+), 179 deletions(-) delete mode 100644 data/sql/updates/pending_db_world/rev_1715986644313348181.sql diff --git a/data/sql/updates/pending_db_world/rev_1715986644313348181.sql b/data/sql/updates/pending_db_world/rev_1715986644313348181.sql deleted file mode 100644 index 4669197551274d..00000000000000 --- a/data/sql/updates/pending_db_world/rev_1715986644313348181.sql +++ /dev/null @@ -1,13 +0,0 @@ --- --- Razuvious -DELETE FROM `creature_text` WHERE `CreatureID` = 16061 AND `GroupID` IN (4, 5); -INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES -(16061, 4, 0, 'Pathetic...', 12, 0, 100, 5, 0, 0, 27865, 0, 'Razuvious SAY_PATHETIC'), -(16061, 5, 0, 'Start doing something before I replace that target dummy with you and begin a warm up session of my own!', 12, 0, 100, 5, 0, 0, 13136, 0, 'Razuvious SAY_TARGET_DUMMY'); - --- Death Knight Understudy -DELETE FROM `creature_text` WHERE `CreatureID` = 16803; -INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES -(16803, 0, 0, 'Sir, student requests that you beat him for his lack of understanding!', 12, 0, 100, 1, 0, 0, 13140, 0, 'Death Knight Understudy SAY_BEAT_ME'), -(16803, 0, 1, 'I am unworthy, master!', 12, 0, 100, 1, 0, 0, 13138, 0, 'Death Knight Understudy SAY_UNWORTHY'), -(16803, 0, 2, 'Student is worthless, master! Student apologizes for his deficiency!', 12, 0, 100, 1, 0, 0, 13137, 0, 'Death Knight Understudy SAY_WORTHLESS'); diff --git a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp index 91cbbeafc131f8..070dd51bb53bf8 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp @@ -24,10 +24,7 @@ enum Says SAY_AGGRO = 0, SAY_SLAY = 1, SAY_TAUNTED = 2, - SAY_DEATH = 3, - SAY_PATHETIC = 4, - SAY_TARGET_DUMMY = 5, - SAY_DEATH_KNIGHT_UNDERSTUDY = 0, + SAY_DEATH = 3 }; enum Spells @@ -54,29 +51,11 @@ enum NPCs NPC_TARGET_DUMMY = 16211, }; -enum Actions -{ - ACTION_FACE_ME = 0, - ACTION_TALK = 1, - ACTION_EMOTE = 2, - ACTION_SALUTE = 3, - ACTION_BACK_TO_TRAINING = 4, -}; - -enum Misc +enum Groups { GROUP_OOC_RP = 0, - PATH_RAZUVIOUS = 1283120, - POINT_DEATH_KNIGHT = 0, - WP_TOP_LEFT = 1, - WP_TOP_RIGHT = 2, - WP_MIDDLE_RIGHT = 3, - WP_MIDDLE_BOTTOM = 4, }; -const uint32 TABLE_WAYPOINT_RP_10[4] = {WP_MIDDLE_BOTTOM, WP_TOP_RIGHT, WP_MIDDLE_BOTTOM, WP_TOP_RIGHT}; -const uint32 TABLE_WAYPOINT_RP_25[4] = {WP_MIDDLE_BOTTOM, WP_TOP_LEFT, WP_MIDDLE_RIGHT, WP_TOP_RIGHT}; - class boss_razuvious : public CreatureScript { public: @@ -120,107 +99,6 @@ class boss_razuvious : public CreatureScript summons.DespawnAll(); events.Reset(); SpawnHelpers(); - _roleplayWaypointNextIndex = 0; - _roleplayReady = false; - ScheduleRP(); - } - - void ScheduleInteractWithDeathKnight() - { - scheduler.Schedule(2s, GROUP_OOC_RP, [this](TaskContext /*context*/) - { - if (rpBuddyGUID) - if (Creature* understudy = ObjectAccessor::GetCreature(*me, rpBuddyGUID)) - understudy->AI()->DoAction(ACTION_FACE_ME); - }).Schedule(8s, GROUP_OOC_RP, [this](TaskContext /*context*/) - { - if (rpBuddyGUID) - if (Creature* understudy = ObjectAccessor::GetCreature(*me, rpBuddyGUID)) - understudy->AI()->DoAction(ACTION_SALUTE); - }).Schedule(11s, GROUP_OOC_RP, [this](TaskContext /*context*/) - { - me->GetMotionMaster()->MovePath(PATH_RAZUVIOUS, true); - }).Schedule(13s, GROUP_OOC_RP, [this](TaskContext /*context*/) - { - if (rpBuddyGUID) - if (Creature* understudy = ObjectAccessor::GetCreature(*me, rpBuddyGUID)) - understudy->AI()->DoAction(ACTION_BACK_TO_TRAINING); - ScheduleRP(); - }); - - if (rpBuddyGUID) - if (Creature* understudy = ObjectAccessor::GetCreature(*me, rpBuddyGUID)) - me->SetFacingToObject(understudy); - - if (roll_chance_i(75)) - { - bool longText = roll_chance_i(50); - Talk(longText ? SAY_TARGET_DUMMY : SAY_PATHETIC); - scheduler.Schedule(4s, GROUP_OOC_RP, [this](TaskContext /*context*/) - { - if (rpBuddyGUID) - if (Creature* understudy = ObjectAccessor::GetCreature(*me, rpBuddyGUID)) - understudy->AI()->DoAction(ACTION_TALK); - }); - if (longText) - scheduler.DelayGroup(GROUP_OOC_RP, 5s); - } - else - { - me->HandleEmoteCommand(EMOTE_ONESHOT_EXCLAMATION); - scheduler.Schedule(4s, GROUP_OOC_RP, [this](TaskContext /*context*/) - { - if (rpBuddyGUID) - if (Creature* understudy = ObjectAccessor::GetCreature(*me, rpBuddyGUID)) - { - if (roll_chance_i(25)) - understudy->AI()->DoAction(ACTION_EMOTE); - else - understudy->AI()->DoAction(ACTION_TALK); - } - }); - } - } - - void MovementInform(uint32 type, uint32 id) override - { - if (type == POINT_MOTION_TYPE && id == POINT_DEATH_KNIGHT) - { - ScheduleInteractWithDeathKnight(); - } - - if (type != WAYPOINT_MOTION_TYPE) - return; - - if (!_roleplayReady) - return; - - if (id == _roleplayWaypoint) - { - _roleplayReady = false; - if (Creature* understudy = GetClosestCreatureWithEntry(me, NPC_DEATH_KNIGHT_UNDERSTUDY, 20.0f)) - { - rpBuddyGUID = understudy->GetGUID(); - me->GetMotionMaster()->MovementExpired(false); - me->GetMotionMaster()->MoveIdle(); - } - scheduler.Schedule(0s, GROUP_OOC_RP, [this](TaskContext /*context*/) - { - if (rpBuddyGUID) - if (Creature* understudy = ObjectAccessor::GetCreature(*me, rpBuddyGUID)) - me->GetMotionMaster()->MovePoint(POINT_DEATH_KNIGHT, understudy->GetNearPosition(INTERACTION_DISTANCE, understudy->GetRelativeAngle(me))); - }); - } - } - - void ScheduleRP() - { - scheduler.Schedule(10s, 10s, GROUP_OOC_RP, [this](TaskContext /*context*/) // TODO: increase this time to 60s-80s - { - _roleplayWaypoint = RAID_MODE(TABLE_WAYPOINT_RP_10, TABLE_WAYPOINT_RP_25)[_roleplayWaypointNextIndex]; - _roleplayReady = true; - _roleplayWaypointNextIndex = (_roleplayWaypointNextIndex + 1) % 4; - }); } void KilledUnit(Unit* who) override @@ -262,7 +140,6 @@ class boss_razuvious : public CreatureScript void JustEngagedWith(Unit* who) override { BossAI::JustEngagedWith(who); - scheduler.CancelGroup(GROUP_OOC_RP); Talk(SAY_AGGRO); events.ScheduleEvent(EVENT_UNBALANCING_STRIKE, 20s); events.ScheduleEvent(EVENT_DISRUPTING_SHOUT, 15s); @@ -272,9 +149,6 @@ class boss_razuvious : public CreatureScript void UpdateAI(uint32 diff) override { - if (!me->IsInCombat()) - scheduler.Update(diff); - if (!UpdateVictim()) return; @@ -302,11 +176,6 @@ class boss_razuvious : public CreatureScript } DoMeleeAttackIfReady(); } - private: - bool _roleplayReady; - uint8 _roleplayWaypointNextIndex; - uint8 _roleplayWaypoint; - ObjectGuid rpBuddyGUID; }; }; @@ -344,38 +213,6 @@ class boss_razuvious_minion : public CreatureScript }); } - void DoAction(int32 action) override - { - switch (action) - { - case ACTION_FACE_ME: - scheduler.CancelGroup(GROUP_OOC_RP); - me->SetSheath(SHEATH_STATE_UNARMED); - me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_NONE); - if (InstanceScript* instance = me->GetInstanceScript()) - { - if (Creature* creature = ObjectAccessor::GetCreature(*me, instance->GetGuidData(NPC_RAZUVIOUS))) - { - me->SetFacingToObject(creature); - } - } - break; - case ACTION_TALK: - Talk(SAY_DEATH_KNIGHT_UNDERSTUDY); - break; - case ACTION_EMOTE: - me->HandleEmoteCommand(EMOTE_ONESHOT_TALK); - break; - case ACTION_SALUTE: - me->HandleEmoteCommand(EMOTE_ONESHOT_SALUTE); - break; - case ACTION_BACK_TO_TRAINING: - me->SetSheath(SHEATH_STATE_MELEE); - ScheduleAttackDummy(); - break; - } - } - void KilledUnit(Unit* who) override { if (who->GetTypeId() == TYPEID_PLAYER && me->GetInstanceScript()) @@ -400,7 +237,6 @@ class boss_razuvious_minion : public CreatureScript void UpdateAI(uint32 diff) override { scheduler.Update(diff); - if (UpdateVictim()) { if (!me->HasUnitState(UNIT_STATE_CASTING) || !me->IsCharmed()) From 040edab08acc9adcacf0895c21e3c2ea03529cf2 Mon Sep 17 00:00:00 2001 From: Jelle Meeus Date: Wed, 26 Jun 2024 11:30:18 +0200 Subject: [PATCH 15/31] Revert "remove boss RP and interaction with DK, only do attack RP of DK" This reverts commit e6ec5292e95533f8d0301d148a7fc68c180af015. --- .../rev_1715986644313348181.sql | 13 ++ .../Northrend/Naxxramas/boss_razuvious.cpp | 168 +++++++++++++++++- 2 files changed, 179 insertions(+), 2 deletions(-) create mode 100644 data/sql/updates/pending_db_world/rev_1715986644313348181.sql diff --git a/data/sql/updates/pending_db_world/rev_1715986644313348181.sql b/data/sql/updates/pending_db_world/rev_1715986644313348181.sql new file mode 100644 index 00000000000000..4669197551274d --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1715986644313348181.sql @@ -0,0 +1,13 @@ +-- +-- Razuvious +DELETE FROM `creature_text` WHERE `CreatureID` = 16061 AND `GroupID` IN (4, 5); +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(16061, 4, 0, 'Pathetic...', 12, 0, 100, 5, 0, 0, 27865, 0, 'Razuvious SAY_PATHETIC'), +(16061, 5, 0, 'Start doing something before I replace that target dummy with you and begin a warm up session of my own!', 12, 0, 100, 5, 0, 0, 13136, 0, 'Razuvious SAY_TARGET_DUMMY'); + +-- Death Knight Understudy +DELETE FROM `creature_text` WHERE `CreatureID` = 16803; +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(16803, 0, 0, 'Sir, student requests that you beat him for his lack of understanding!', 12, 0, 100, 1, 0, 0, 13140, 0, 'Death Knight Understudy SAY_BEAT_ME'), +(16803, 0, 1, 'I am unworthy, master!', 12, 0, 100, 1, 0, 0, 13138, 0, 'Death Knight Understudy SAY_UNWORTHY'), +(16803, 0, 2, 'Student is worthless, master! Student apologizes for his deficiency!', 12, 0, 100, 1, 0, 0, 13137, 0, 'Death Knight Understudy SAY_WORTHLESS'); diff --git a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp index 070dd51bb53bf8..91cbbeafc131f8 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp @@ -24,7 +24,10 @@ enum Says SAY_AGGRO = 0, SAY_SLAY = 1, SAY_TAUNTED = 2, - SAY_DEATH = 3 + SAY_DEATH = 3, + SAY_PATHETIC = 4, + SAY_TARGET_DUMMY = 5, + SAY_DEATH_KNIGHT_UNDERSTUDY = 0, }; enum Spells @@ -51,11 +54,29 @@ enum NPCs NPC_TARGET_DUMMY = 16211, }; -enum Groups +enum Actions +{ + ACTION_FACE_ME = 0, + ACTION_TALK = 1, + ACTION_EMOTE = 2, + ACTION_SALUTE = 3, + ACTION_BACK_TO_TRAINING = 4, +}; + +enum Misc { GROUP_OOC_RP = 0, + PATH_RAZUVIOUS = 1283120, + POINT_DEATH_KNIGHT = 0, + WP_TOP_LEFT = 1, + WP_TOP_RIGHT = 2, + WP_MIDDLE_RIGHT = 3, + WP_MIDDLE_BOTTOM = 4, }; +const uint32 TABLE_WAYPOINT_RP_10[4] = {WP_MIDDLE_BOTTOM, WP_TOP_RIGHT, WP_MIDDLE_BOTTOM, WP_TOP_RIGHT}; +const uint32 TABLE_WAYPOINT_RP_25[4] = {WP_MIDDLE_BOTTOM, WP_TOP_LEFT, WP_MIDDLE_RIGHT, WP_TOP_RIGHT}; + class boss_razuvious : public CreatureScript { public: @@ -99,6 +120,107 @@ class boss_razuvious : public CreatureScript summons.DespawnAll(); events.Reset(); SpawnHelpers(); + _roleplayWaypointNextIndex = 0; + _roleplayReady = false; + ScheduleRP(); + } + + void ScheduleInteractWithDeathKnight() + { + scheduler.Schedule(2s, GROUP_OOC_RP, [this](TaskContext /*context*/) + { + if (rpBuddyGUID) + if (Creature* understudy = ObjectAccessor::GetCreature(*me, rpBuddyGUID)) + understudy->AI()->DoAction(ACTION_FACE_ME); + }).Schedule(8s, GROUP_OOC_RP, [this](TaskContext /*context*/) + { + if (rpBuddyGUID) + if (Creature* understudy = ObjectAccessor::GetCreature(*me, rpBuddyGUID)) + understudy->AI()->DoAction(ACTION_SALUTE); + }).Schedule(11s, GROUP_OOC_RP, [this](TaskContext /*context*/) + { + me->GetMotionMaster()->MovePath(PATH_RAZUVIOUS, true); + }).Schedule(13s, GROUP_OOC_RP, [this](TaskContext /*context*/) + { + if (rpBuddyGUID) + if (Creature* understudy = ObjectAccessor::GetCreature(*me, rpBuddyGUID)) + understudy->AI()->DoAction(ACTION_BACK_TO_TRAINING); + ScheduleRP(); + }); + + if (rpBuddyGUID) + if (Creature* understudy = ObjectAccessor::GetCreature(*me, rpBuddyGUID)) + me->SetFacingToObject(understudy); + + if (roll_chance_i(75)) + { + bool longText = roll_chance_i(50); + Talk(longText ? SAY_TARGET_DUMMY : SAY_PATHETIC); + scheduler.Schedule(4s, GROUP_OOC_RP, [this](TaskContext /*context*/) + { + if (rpBuddyGUID) + if (Creature* understudy = ObjectAccessor::GetCreature(*me, rpBuddyGUID)) + understudy->AI()->DoAction(ACTION_TALK); + }); + if (longText) + scheduler.DelayGroup(GROUP_OOC_RP, 5s); + } + else + { + me->HandleEmoteCommand(EMOTE_ONESHOT_EXCLAMATION); + scheduler.Schedule(4s, GROUP_OOC_RP, [this](TaskContext /*context*/) + { + if (rpBuddyGUID) + if (Creature* understudy = ObjectAccessor::GetCreature(*me, rpBuddyGUID)) + { + if (roll_chance_i(25)) + understudy->AI()->DoAction(ACTION_EMOTE); + else + understudy->AI()->DoAction(ACTION_TALK); + } + }); + } + } + + void MovementInform(uint32 type, uint32 id) override + { + if (type == POINT_MOTION_TYPE && id == POINT_DEATH_KNIGHT) + { + ScheduleInteractWithDeathKnight(); + } + + if (type != WAYPOINT_MOTION_TYPE) + return; + + if (!_roleplayReady) + return; + + if (id == _roleplayWaypoint) + { + _roleplayReady = false; + if (Creature* understudy = GetClosestCreatureWithEntry(me, NPC_DEATH_KNIGHT_UNDERSTUDY, 20.0f)) + { + rpBuddyGUID = understudy->GetGUID(); + me->GetMotionMaster()->MovementExpired(false); + me->GetMotionMaster()->MoveIdle(); + } + scheduler.Schedule(0s, GROUP_OOC_RP, [this](TaskContext /*context*/) + { + if (rpBuddyGUID) + if (Creature* understudy = ObjectAccessor::GetCreature(*me, rpBuddyGUID)) + me->GetMotionMaster()->MovePoint(POINT_DEATH_KNIGHT, understudy->GetNearPosition(INTERACTION_DISTANCE, understudy->GetRelativeAngle(me))); + }); + } + } + + void ScheduleRP() + { + scheduler.Schedule(10s, 10s, GROUP_OOC_RP, [this](TaskContext /*context*/) // TODO: increase this time to 60s-80s + { + _roleplayWaypoint = RAID_MODE(TABLE_WAYPOINT_RP_10, TABLE_WAYPOINT_RP_25)[_roleplayWaypointNextIndex]; + _roleplayReady = true; + _roleplayWaypointNextIndex = (_roleplayWaypointNextIndex + 1) % 4; + }); } void KilledUnit(Unit* who) override @@ -140,6 +262,7 @@ class boss_razuvious : public CreatureScript void JustEngagedWith(Unit* who) override { BossAI::JustEngagedWith(who); + scheduler.CancelGroup(GROUP_OOC_RP); Talk(SAY_AGGRO); events.ScheduleEvent(EVENT_UNBALANCING_STRIKE, 20s); events.ScheduleEvent(EVENT_DISRUPTING_SHOUT, 15s); @@ -149,6 +272,9 @@ class boss_razuvious : public CreatureScript void UpdateAI(uint32 diff) override { + if (!me->IsInCombat()) + scheduler.Update(diff); + if (!UpdateVictim()) return; @@ -176,6 +302,11 @@ class boss_razuvious : public CreatureScript } DoMeleeAttackIfReady(); } + private: + bool _roleplayReady; + uint8 _roleplayWaypointNextIndex; + uint8 _roleplayWaypoint; + ObjectGuid rpBuddyGUID; }; }; @@ -213,6 +344,38 @@ class boss_razuvious_minion : public CreatureScript }); } + void DoAction(int32 action) override + { + switch (action) + { + case ACTION_FACE_ME: + scheduler.CancelGroup(GROUP_OOC_RP); + me->SetSheath(SHEATH_STATE_UNARMED); + me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_NONE); + if (InstanceScript* instance = me->GetInstanceScript()) + { + if (Creature* creature = ObjectAccessor::GetCreature(*me, instance->GetGuidData(NPC_RAZUVIOUS))) + { + me->SetFacingToObject(creature); + } + } + break; + case ACTION_TALK: + Talk(SAY_DEATH_KNIGHT_UNDERSTUDY); + break; + case ACTION_EMOTE: + me->HandleEmoteCommand(EMOTE_ONESHOT_TALK); + break; + case ACTION_SALUTE: + me->HandleEmoteCommand(EMOTE_ONESHOT_SALUTE); + break; + case ACTION_BACK_TO_TRAINING: + me->SetSheath(SHEATH_STATE_MELEE); + ScheduleAttackDummy(); + break; + } + } + void KilledUnit(Unit* who) override { if (who->GetTypeId() == TYPEID_PLAYER && me->GetInstanceScript()) @@ -237,6 +400,7 @@ class boss_razuvious_minion : public CreatureScript void UpdateAI(uint32 diff) override { scheduler.Update(diff); + if (UpdateVictim()) { if (!me->HasUnitState(UNIT_STATE_CASTING) || !me->IsCharmed()) From e2ba67f5d764f1bb4c4a0761bda9209e00742546 Mon Sep 17 00:00:00 2001 From: Jelle Meeus Date: Wed, 26 Jun 2024 13:31:34 +0200 Subject: [PATCH 16/31] allow for pausing --- .../Northrend/Naxxramas/boss_razuvious.cpp | 24 ++++++++++++------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp index 91cbbeafc131f8..58ab8537e78689 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp @@ -127,7 +127,17 @@ class boss_razuvious : public CreatureScript void ScheduleInteractWithDeathKnight() { - scheduler.Schedule(2s, GROUP_OOC_RP, [this](TaskContext /*context*/) + scheduler.Schedule(1s, GROUP_OOC_RP, [this](TaskContext /*context*/) + { + // if (rpBuddyGUID) + // if (Creature* understudy = ObjectAccessor::GetCreature(*me, rpBuddyGUID)) + // me->SetFacingToObject(understudy); + }).Schedule(50ms, GROUP_OOC_RP, [this](TaskContext /*context*/) + { + if (rpBuddyGUID) + if (Creature* understudy = ObjectAccessor::GetCreature(*me, rpBuddyGUID)) + me->SetFacingToObject(understudy); + }).Schedule(2s, GROUP_OOC_RP, [this](TaskContext /*context*/) { if (rpBuddyGUID) if (Creature* understudy = ObjectAccessor::GetCreature(*me, rpBuddyGUID)) @@ -148,10 +158,6 @@ class boss_razuvious : public CreatureScript ScheduleRP(); }); - if (rpBuddyGUID) - if (Creature* understudy = ObjectAccessor::GetCreature(*me, rpBuddyGUID)) - me->SetFacingToObject(understudy); - if (roll_chance_i(75)) { bool longText = roll_chance_i(50); @@ -201,21 +207,23 @@ class boss_razuvious : public CreatureScript if (Creature* understudy = GetClosestCreatureWithEntry(me, NPC_DEATH_KNIGHT_UNDERSTUDY, 20.0f)) { rpBuddyGUID = understudy->GetGUID(); - me->GetMotionMaster()->MovementExpired(false); - me->GetMotionMaster()->MoveIdle(); + me->PauseMovement(); } scheduler.Schedule(0s, GROUP_OOC_RP, [this](TaskContext /*context*/) { if (rpBuddyGUID) if (Creature* understudy = ObjectAccessor::GetCreature(*me, rpBuddyGUID)) + { + me->SetFacingToObject(understudy); me->GetMotionMaster()->MovePoint(POINT_DEATH_KNIGHT, understudy->GetNearPosition(INTERACTION_DISTANCE, understudy->GetRelativeAngle(me))); + } }); } } void ScheduleRP() { - scheduler.Schedule(10s, 10s, GROUP_OOC_RP, [this](TaskContext /*context*/) // TODO: increase this time to 60s-80s + scheduler.Schedule(0s, 1s, GROUP_OOC_RP, [this](TaskContext /*context*/) // TODO: increase this time to 60s-80s { _roleplayWaypoint = RAID_MODE(TABLE_WAYPOINT_RP_10, TABLE_WAYPOINT_RP_25)[_roleplayWaypointNextIndex]; _roleplayReady = true; From 0f54b4b7282fcfe72774e83330ed1d4d31e90b78 Mon Sep 17 00:00:00 2001 From: Jelle Meeus Date: Wed, 26 Jun 2024 17:10:21 +0200 Subject: [PATCH 17/31] razuvious DATA to instance --- .../scripts/Northrend/Naxxramas/instance_naxxramas.cpp | 5 +++++ src/server/scripts/Northrend/Naxxramas/naxxramas.h | 6 +++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp b/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp index ed4686ba54e8e8..2e3019efc98975 100644 --- a/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp +++ b/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp @@ -139,6 +139,7 @@ class instance_naxxramas : public InstanceMapScript ObjectGuid _thaddiusGUID; ObjectGuid _stalaggGUID; ObjectGuid _feugenGUID; + ObjectGuid _razuviousGUID; ObjectGuid _zeliekGUID; ObjectGuid _rivendareGUID; ObjectGuid _blaumeuxGUID; @@ -227,6 +228,8 @@ class instance_naxxramas : public InstanceMapScript case NPC_FEUGEN: _feugenGUID = creature->GetGUID(); return; + case NPC_RAZUVIOUS: + _razuviousGUID = creature->GetGUID(); case NPC_LADY_BLAUMEUX: _blaumeuxGUID = creature->GetGUID(); return; @@ -1092,6 +1095,8 @@ class instance_naxxramas : public InstanceMapScript return _stalaggGUID; case DATA_FEUGEN_BOSS: return _feugenGUID; + case DATA_RAZUVIOUS: + return _razuviousGUID; case DATA_LICH_KING_BOSS: return _lichkingGUID; default: diff --git a/src/server/scripts/Northrend/Naxxramas/naxxramas.h b/src/server/scripts/Northrend/Naxxramas/naxxramas.h index dcbeb811fe4872..786205f85c5b65 100644 --- a/src/server/scripts/Northrend/Naxxramas/naxxramas.h +++ b/src/server/scripts/Northrend/Naxxramas/naxxramas.h @@ -76,7 +76,8 @@ enum NXData DATA_KELTHUZAD_PORTAL_1 = 126, DATA_KELTHUZAD_PORTAL_2 = 127, DATA_KELTHUZAD_PORTAL_3 = 128, - DATA_KELTHUZAD_PORTAL_4 = 129 + DATA_KELTHUZAD_PORTAL_4 = 129, + DATA_RAZUVIOUS = 130 }; enum NXGOs @@ -136,6 +137,9 @@ enum NXNPCs NPC_STALAGG = 15929, NPC_FEUGEN = 15930, + // Razuvious + NPC_RAZUVIOUS = 16061, + // Four horseman NPC_BARON_RIVENDARE = 30549, NPC_SIR_ZELIEK = 16063, From fa7727157d67f8bb7cf71869d6209d8bd0f9ee20 Mon Sep 17 00:00:00 2001 From: Jelle Meeus Date: Wed, 26 Jun 2024 17:20:52 +0200 Subject: [PATCH 18/31] WIP pause and do action no movement yet --- .../Northrend/Naxxramas/boss_razuvious.cpp | 140 +++++++----------- 1 file changed, 54 insertions(+), 86 deletions(-) diff --git a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp index 58ab8537e78689..95b8ab2e9723c7 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp @@ -50,7 +50,6 @@ enum Events enum NPCs { NPC_DEATH_KNIGHT_UNDERSTUDY = 16803, - NPC_RAZUVIOUS = 16061, NPC_TARGET_DUMMY = 16211, }; @@ -68,15 +67,8 @@ enum Misc GROUP_OOC_RP = 0, PATH_RAZUVIOUS = 1283120, POINT_DEATH_KNIGHT = 0, - WP_TOP_LEFT = 1, - WP_TOP_RIGHT = 2, - WP_MIDDLE_RIGHT = 3, - WP_MIDDLE_BOTTOM = 4, }; -const uint32 TABLE_WAYPOINT_RP_10[4] = {WP_MIDDLE_BOTTOM, WP_TOP_RIGHT, WP_MIDDLE_BOTTOM, WP_TOP_RIGHT}; -const uint32 TABLE_WAYPOINT_RP_25[4] = {WP_MIDDLE_BOTTOM, WP_TOP_LEFT, WP_MIDDLE_RIGHT, WP_TOP_RIGHT}; - class boss_razuvious : public CreatureScript { public: @@ -120,72 +112,65 @@ class boss_razuvious : public CreatureScript summons.DespawnAll(); events.Reset(); SpawnHelpers(); - _roleplayWaypointNextIndex = 0; - _roleplayReady = false; ScheduleRP(); } void ScheduleInteractWithDeathKnight() { - scheduler.Schedule(1s, GROUP_OOC_RP, [this](TaskContext /*context*/) - { - // if (rpBuddyGUID) - // if (Creature* understudy = ObjectAccessor::GetCreature(*me, rpBuddyGUID)) - // me->SetFacingToObject(understudy); - }).Schedule(50ms, GROUP_OOC_RP, [this](TaskContext /*context*/) + if (rpBuddyGUID) + if (Creature* understudy = ObjectAccessor::GetCreature(*me, rpBuddyGUID)) + me->SetFacingToObject(understudy); + + scheduler.Schedule(2s, GROUP_OOC_RP, [this](TaskContext /*context*/) { - if (rpBuddyGUID) - if (Creature* understudy = ObjectAccessor::GetCreature(*me, rpBuddyGUID)) - me->SetFacingToObject(understudy); - }).Schedule(2s, GROUP_OOC_RP, [this](TaskContext /*context*/) + if (roll_chance_i(75)) + { + bool longText = roll_chance_i(50); + Talk(longText ? SAY_TARGET_DUMMY : SAY_PATHETIC); + scheduler.Schedule(4s, GROUP_OOC_RP, [this](TaskContext /*context*/) + { + if (rpBuddyGUID) + if (Creature* understudy = ObjectAccessor::GetCreature(*me, rpBuddyGUID)) + understudy->AI()->DoAction(ACTION_TALK); + }); + if (longText) + scheduler.DelayGroup(GROUP_OOC_RP, 5s); + } + else + { + me->HandleEmoteCommand(EMOTE_ONESHOT_EXCLAMATION); + scheduler.Schedule(4s, GROUP_OOC_RP, [this](TaskContext /*context*/) + { + if (rpBuddyGUID) + if (Creature* understudy = ObjectAccessor::GetCreature(*me, rpBuddyGUID)) + { + if (roll_chance_i(25)) + understudy->AI()->DoAction(ACTION_EMOTE); + else + understudy->AI()->DoAction(ACTION_TALK); + } + }); + } + }).Schedule(4s, GROUP_OOC_RP, [this](TaskContext /*context*/) { if (rpBuddyGUID) if (Creature* understudy = ObjectAccessor::GetCreature(*me, rpBuddyGUID)) understudy->AI()->DoAction(ACTION_FACE_ME); - }).Schedule(8s, GROUP_OOC_RP, [this](TaskContext /*context*/) + }).Schedule(10s, GROUP_OOC_RP, [this](TaskContext /*context*/) { if (rpBuddyGUID) if (Creature* understudy = ObjectAccessor::GetCreature(*me, rpBuddyGUID)) understudy->AI()->DoAction(ACTION_SALUTE); - }).Schedule(11s, GROUP_OOC_RP, [this](TaskContext /*context*/) - { - me->GetMotionMaster()->MovePath(PATH_RAZUVIOUS, true); }).Schedule(13s, GROUP_OOC_RP, [this](TaskContext /*context*/) + { + me->ResumeMovement(); + }).Schedule(16s, GROUP_OOC_RP, [this](TaskContext /*context*/) { if (rpBuddyGUID) if (Creature* understudy = ObjectAccessor::GetCreature(*me, rpBuddyGUID)) understudy->AI()->DoAction(ACTION_BACK_TO_TRAINING); ScheduleRP(); }); - - if (roll_chance_i(75)) - { - bool longText = roll_chance_i(50); - Talk(longText ? SAY_TARGET_DUMMY : SAY_PATHETIC); - scheduler.Schedule(4s, GROUP_OOC_RP, [this](TaskContext /*context*/) - { - if (rpBuddyGUID) - if (Creature* understudy = ObjectAccessor::GetCreature(*me, rpBuddyGUID)) - understudy->AI()->DoAction(ACTION_TALK); - }); - if (longText) - scheduler.DelayGroup(GROUP_OOC_RP, 5s); - } - else - { - me->HandleEmoteCommand(EMOTE_ONESHOT_EXCLAMATION); - scheduler.Schedule(4s, GROUP_OOC_RP, [this](TaskContext /*context*/) - { - if (rpBuddyGUID) - if (Creature* understudy = ObjectAccessor::GetCreature(*me, rpBuddyGUID)) - { - if (roll_chance_i(25)) - understudy->AI()->DoAction(ACTION_EMOTE); - else - understudy->AI()->DoAction(ACTION_TALK); - } - }); - } } void MovementInform(uint32 type, uint32 id) override @@ -194,41 +179,26 @@ class boss_razuvious : public CreatureScript { ScheduleInteractWithDeathKnight(); } + } - if (type != WAYPOINT_MOTION_TYPE) - return; - - if (!_roleplayReady) - return; - - if (id == _roleplayWaypoint) + void ScheduleRP() + { + scheduler.Schedule(10s, 20s, GROUP_OOC_RP, [this](TaskContext context) // TODO: increase this time to 60s-80s { - _roleplayReady = false; - if (Creature* understudy = GetClosestCreatureWithEntry(me, NPC_DEATH_KNIGHT_UNDERSTUDY, 20.0f)) + if (Creature* understudy = GetClosestCreatureWithEntry(me, NPC_DEATH_KNIGHT_UNDERSTUDY, 5.0f)) { rpBuddyGUID = understudy->GetGUID(); me->PauseMovement(); - } - scheduler.Schedule(0s, GROUP_OOC_RP, [this](TaskContext /*context*/) - { - if (rpBuddyGUID) - if (Creature* understudy = ObjectAccessor::GetCreature(*me, rpBuddyGUID)) - { - me->SetFacingToObject(understudy); - me->GetMotionMaster()->MovePoint(POINT_DEATH_KNIGHT, understudy->GetNearPosition(INTERACTION_DISTANCE, understudy->GetRelativeAngle(me))); - } - }); + scheduler.Schedule(2s, GROUP_OOC_RP, [this](TaskContext /*context*/) + { + ScheduleInteractWithDeathKnight(); + }); } - } - - void ScheduleRP() - { - scheduler.Schedule(0s, 1s, GROUP_OOC_RP, [this](TaskContext /*context*/) // TODO: increase this time to 60s-80s + else { - _roleplayWaypoint = RAID_MODE(TABLE_WAYPOINT_RP_10, TABLE_WAYPOINT_RP_25)[_roleplayWaypointNextIndex]; - _roleplayReady = true; - _roleplayWaypointNextIndex = (_roleplayWaypointNextIndex + 1) % 4; - }); + context.Repeat(1s); + } + }); } void KilledUnit(Unit* who) override @@ -310,10 +280,8 @@ class boss_razuvious : public CreatureScript } DoMeleeAttackIfReady(); } + private: - bool _roleplayReady; - uint8 _roleplayWaypointNextIndex; - uint8 _roleplayWaypoint; ObjectGuid rpBuddyGUID; }; }; @@ -362,7 +330,7 @@ class boss_razuvious_minion : public CreatureScript me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_NONE); if (InstanceScript* instance = me->GetInstanceScript()) { - if (Creature* creature = ObjectAccessor::GetCreature(*me, instance->GetGuidData(NPC_RAZUVIOUS))) + if (Creature* creature = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_RAZUVIOUS))) { me->SetFacingToObject(creature); } @@ -397,7 +365,7 @@ class boss_razuvious_minion : public CreatureScript scheduler.CancelGroup(GROUP_OOC_RP); if (InstanceScript* instance = me->GetInstanceScript()) { - if (Creature* creature = ObjectAccessor::GetCreature(*me, instance->GetGuidData(NPC_RAZUVIOUS))) + if (Creature* creature = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_RAZUVIOUS))) { creature->SetInCombatWithZone(); creature->AI()->AttackStart(who); From 3c3b8ebe0be4c392dc1ec9d3b4f10516739fa4a0 Mon Sep 17 00:00:00 2001 From: Jelle Meeus Date: Wed, 26 Jun 2024 17:33:26 +0200 Subject: [PATCH 19/31] WIP with moving close --- .../Northrend/Naxxramas/boss_razuvious.cpp | 60 ++++++++++--------- 1 file changed, 33 insertions(+), 27 deletions(-) diff --git a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp index 95b8ab2e9723c7..3ae4a5451a7569 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp @@ -117,8 +117,8 @@ class boss_razuvious : public CreatureScript void ScheduleInteractWithDeathKnight() { - if (rpBuddyGUID) - if (Creature* understudy = ObjectAccessor::GetCreature(*me, rpBuddyGUID)) + if (_rpBuddyGUID) + if (Creature* understudy = ObjectAccessor::GetCreature(*me, _rpBuddyGUID)) me->SetFacingToObject(understudy); scheduler.Schedule(2s, GROUP_OOC_RP, [this](TaskContext /*context*/) @@ -129,8 +129,8 @@ class boss_razuvious : public CreatureScript Talk(longText ? SAY_TARGET_DUMMY : SAY_PATHETIC); scheduler.Schedule(4s, GROUP_OOC_RP, [this](TaskContext /*context*/) { - if (rpBuddyGUID) - if (Creature* understudy = ObjectAccessor::GetCreature(*me, rpBuddyGUID)) + if (_rpBuddyGUID) + if (Creature* understudy = ObjectAccessor::GetCreature(*me, _rpBuddyGUID)) understudy->AI()->DoAction(ACTION_TALK); }); if (longText) @@ -141,8 +141,8 @@ class boss_razuvious : public CreatureScript me->HandleEmoteCommand(EMOTE_ONESHOT_EXCLAMATION); scheduler.Schedule(4s, GROUP_OOC_RP, [this](TaskContext /*context*/) { - if (rpBuddyGUID) - if (Creature* understudy = ObjectAccessor::GetCreature(*me, rpBuddyGUID)) + if (_rpBuddyGUID) + if (Creature* understudy = ObjectAccessor::GetCreature(*me, _rpBuddyGUID)) { if (roll_chance_i(25)) understudy->AI()->DoAction(ACTION_EMOTE); @@ -153,21 +153,21 @@ class boss_razuvious : public CreatureScript } }).Schedule(4s, GROUP_OOC_RP, [this](TaskContext /*context*/) { - if (rpBuddyGUID) - if (Creature* understudy = ObjectAccessor::GetCreature(*me, rpBuddyGUID)) + if (_rpBuddyGUID) + if (Creature* understudy = ObjectAccessor::GetCreature(*me, _rpBuddyGUID)) understudy->AI()->DoAction(ACTION_FACE_ME); }).Schedule(10s, GROUP_OOC_RP, [this](TaskContext /*context*/) { - if (rpBuddyGUID) - if (Creature* understudy = ObjectAccessor::GetCreature(*me, rpBuddyGUID)) + if (_rpBuddyGUID) + if (Creature* understudy = ObjectAccessor::GetCreature(*me, _rpBuddyGUID)) understudy->AI()->DoAction(ACTION_SALUTE); }).Schedule(13s, GROUP_OOC_RP, [this](TaskContext /*context*/) { me->ResumeMovement(); }).Schedule(16s, GROUP_OOC_RP, [this](TaskContext /*context*/) { - if (rpBuddyGUID) - if (Creature* understudy = ObjectAccessor::GetCreature(*me, rpBuddyGUID)) + if (_rpBuddyGUID) + if (Creature* understudy = ObjectAccessor::GetCreature(*me, _rpBuddyGUID)) understudy->AI()->DoAction(ACTION_BACK_TO_TRAINING); ScheduleRP(); }); @@ -183,22 +183,28 @@ class boss_razuvious : public CreatureScript void ScheduleRP() { - scheduler.Schedule(10s, 20s, GROUP_OOC_RP, [this](TaskContext context) // TODO: increase this time to 60s-80s + _rpBuddyGUID = Acore::Containers::SelectRandomContainerElement(summons); + scheduler.Schedule(1s, GROUP_OOC_RP, [this](TaskContext context) { - if (Creature* understudy = GetClosestCreatureWithEntry(me, NPC_DEATH_KNIGHT_UNDERSTUDY, 5.0f)) - { - rpBuddyGUID = understudy->GetGUID(); - me->PauseMovement(); - scheduler.Schedule(2s, GROUP_OOC_RP, [this](TaskContext /*context*/) + bool isRpBuddyInRange; + if (_rpBuddyGUID) + if (Creature* understudy = ObjectAccessor::GetCreature(*me, _rpBuddyGUID)) { - ScheduleInteractWithDeathKnight(); - }); - } - else - { - context.Repeat(1s); - } - }); + if (me->GetDistance2d(understudy) <= 6.0f) + { + isRpBuddyInRange = true; + me->PauseMovement(); + scheduler.Schedule(1s, GROUP_OOC_RP, [this](TaskContext /*context*/) + { + if (_rpBuddyGUID) + if (Creature* understudy = ObjectAccessor::GetCreature(*me, _rpBuddyGUID)) + me->GetMotionMaster()->MovePoint(POINT_DEATH_KNIGHT, understudy->GetNearPosition(3.2f, understudy->GetRelativeAngle(me))); + }); + } + } + if (!isRpBuddyInRange) + context.Repeat(1s); + }); } void KilledUnit(Unit* who) override @@ -282,7 +288,7 @@ class boss_razuvious : public CreatureScript } private: - ObjectGuid rpBuddyGUID; + ObjectGuid _rpBuddyGUID; }; }; From ed29eb8c6515a6b9af56be9f8c5f3fa870c8a00d Mon Sep 17 00:00:00 2001 From: Jelle Meeus Date: Wed, 26 Jun 2024 17:57:16 +0200 Subject: [PATCH 20/31] remove bool to handle out of range rpbuddy --- src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp index 3ae4a5451a7569..76dce186300207 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp @@ -186,13 +186,11 @@ class boss_razuvious : public CreatureScript _rpBuddyGUID = Acore::Containers::SelectRandomContainerElement(summons); scheduler.Schedule(1s, GROUP_OOC_RP, [this](TaskContext context) { - bool isRpBuddyInRange; if (_rpBuddyGUID) if (Creature* understudy = ObjectAccessor::GetCreature(*me, _rpBuddyGUID)) { if (me->GetDistance2d(understudy) <= 6.0f) { - isRpBuddyInRange = true; me->PauseMovement(); scheduler.Schedule(1s, GROUP_OOC_RP, [this](TaskContext /*context*/) { @@ -200,10 +198,10 @@ class boss_razuvious : public CreatureScript if (Creature* understudy = ObjectAccessor::GetCreature(*me, _rpBuddyGUID)) me->GetMotionMaster()->MovePoint(POINT_DEATH_KNIGHT, understudy->GetNearPosition(3.2f, understudy->GetRelativeAngle(me))); }); + return; } } - if (!isRpBuddyInRange) - context.Repeat(1s); + context.Repeat(1s); }); } From 0ba017cc567b08d2f36c3877a05a94ca6f87862a Mon Sep 17 00:00:00 2001 From: Jelle Meeus Date: Wed, 26 Jun 2024 20:23:10 +0200 Subject: [PATCH 21/31] remove path from enum --- src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp index 76dce186300207..193cbd03203d32 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp @@ -65,7 +65,6 @@ enum Actions enum Misc { GROUP_OOC_RP = 0, - PATH_RAZUVIOUS = 1283120, POINT_DEATH_KNIGHT = 0, }; From f725f1d637dcf5a55c489b748d4520813f321cf7 Mon Sep 17 00:00:00 2001 From: Jelle Meeus Date: Wed, 26 Jun 2024 20:51:27 +0200 Subject: [PATCH 22/31] adjust timings --- src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp index 193cbd03203d32..636f531e6c5357 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp @@ -183,7 +183,7 @@ class boss_razuvious : public CreatureScript void ScheduleRP() { _rpBuddyGUID = Acore::Containers::SelectRandomContainerElement(summons); - scheduler.Schedule(1s, GROUP_OOC_RP, [this](TaskContext context) + scheduler.Schedule(60s, 80s, GROUP_OOC_RP, [this](TaskContext context) { if (_rpBuddyGUID) if (Creature* understudy = ObjectAccessor::GetCreature(*me, _rpBuddyGUID)) @@ -191,7 +191,7 @@ class boss_razuvious : public CreatureScript if (me->GetDistance2d(understudy) <= 6.0f) { me->PauseMovement(); - scheduler.Schedule(1s, GROUP_OOC_RP, [this](TaskContext /*context*/) + scheduler.Schedule(500ms, GROUP_OOC_RP, [this](TaskContext /*context*/) { if (_rpBuddyGUID) if (Creature* understudy = ObjectAccessor::GetCreature(*me, _rpBuddyGUID)) @@ -200,7 +200,7 @@ class boss_razuvious : public CreatureScript return; } } - context.Repeat(1s); + context.Repeat(2s); }); } From c9fc26a8305b5d10704076ce81777e6026157d7b Mon Sep 17 00:00:00 2001 From: Jelle Meeus Date: Thu, 27 Jun 2024 16:08:39 +0200 Subject: [PATCH 23/31] add missing return; to OnCreatureCreate --- src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp b/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp index 2e3019efc98975..a87caea4d33b33 100644 --- a/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp +++ b/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp @@ -230,6 +230,7 @@ class instance_naxxramas : public InstanceMapScript return; case NPC_RAZUVIOUS: _razuviousGUID = creature->GetGUID(); + return; case NPC_LADY_BLAUMEUX: _blaumeuxGUID = creature->GetGUID(); return; From 35d0b523f9f67d6061810186699c040a26a111ef Mon Sep 17 00:00:00 2001 From: Jelle Meeus Date: Fri, 28 Jun 2024 13:18:15 +0200 Subject: [PATCH 24/31] style --- src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp index 636f531e6c5357..1559d1a406e04a 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp @@ -186,6 +186,7 @@ class boss_razuvious : public CreatureScript scheduler.Schedule(60s, 80s, GROUP_OOC_RP, [this](TaskContext context) { if (_rpBuddyGUID) + { if (Creature* understudy = ObjectAccessor::GetCreature(*me, _rpBuddyGUID)) { if (me->GetDistance2d(understudy) <= 6.0f) @@ -197,9 +198,10 @@ class boss_razuvious : public CreatureScript if (Creature* understudy = ObjectAccessor::GetCreature(*me, _rpBuddyGUID)) me->GetMotionMaster()->MovePoint(POINT_DEATH_KNIGHT, understudy->GetNearPosition(3.2f, understudy->GetRelativeAngle(me))); }); - return; + return; } } + } context.Repeat(2s); }); } From 4a91802ab7dfa61bff12d47d0ec8cce86ab74b93 Mon Sep 17 00:00:00 2001 From: Jelle Meeus Date: Sun, 30 Jun 2024 13:17:33 +0200 Subject: [PATCH 25/31] rename DATA_RAZUVIOUS to DATA_RAZUVIOUS_BOSS --- .../Northrend/Naxxramas/boss_razuvious.cpp | 2 +- .../scripts/Northrend/Naxxramas/naxxramas.h | 41 ++++++++++--------- 2 files changed, 22 insertions(+), 21 deletions(-) diff --git a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp index 1559d1a406e04a..00ec2a635a2f5d 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp @@ -335,7 +335,7 @@ class boss_razuvious_minion : public CreatureScript me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_NONE); if (InstanceScript* instance = me->GetInstanceScript()) { - if (Creature* creature = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_RAZUVIOUS))) + if (Creature* creature = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_RAZUVIOUS_BOSS))) { me->SetFacingToObject(creature); } diff --git a/src/server/scripts/Northrend/Naxxramas/naxxramas.h b/src/server/scripts/Northrend/Naxxramas/naxxramas.h index c3a3dfd33cd37d..4252d9d78e6825 100644 --- a/src/server/scripts/Northrend/Naxxramas/naxxramas.h +++ b/src/server/scripts/Northrend/Naxxramas/naxxramas.h @@ -58,26 +58,27 @@ enum NXData DATA_STALAGG_BOSS = 108, DATA_FEUGEN_BOSS = 109, DATA_THADDIUS_GATE = 110, - DATA_GOTHIK_BOSS = 111, - DATA_GOTHIK_ENTER_GATE = 112, - DATA_GOTHIK_INNER_GATE = 113, - DATA_GOTHIK_EXIT_GATE = 114, - DATA_HORSEMEN_GATE = 115, - DATA_LICH_KING_BOSS = 116, - DATA_KELTHUZAD_FLOOR = 117, - DATA_ABOMINATION_KILLED = 118, - DATA_FRENZY_REMOVED = 119, - DATA_CHARGES_CROSSED = 120, - DATA_SPORE_KILLED = 121, - DATA_HUNDRED_CLUB = 122, - DATA_DANCE_FAIL = 123, - DATA_IMMORTAL_FAIL = 124, - DATA_KELTHUZAD_GATE = 125, - DATA_HAD_THADDIUS_GREET = 126, - DATA_KELTHUZAD_PORTAL_1 = 127, - DATA_KELTHUZAD_PORTAL_2 = 128, - DATA_KELTHUZAD_PORTAL_3 = 129, - DATA_KELTHUZAD_PORTAL_4 = 130 + DATA_RAZUVIOUS_BOSS = 111, + DATA_GOTHIK_BOSS = 112, + DATA_GOTHIK_ENTER_GATE = 113, + DATA_GOTHIK_INNER_GATE = 114, + DATA_GOTHIK_EXIT_GATE = 115, + DATA_HORSEMEN_GATE = 116, + DATA_LICH_KING_BOSS = 117, + DATA_KELTHUZAD_FLOOR = 118, + DATA_ABOMINATION_KILLED = 119, + DATA_FRENZY_REMOVED = 120, + DATA_CHARGES_CROSSED = 121, + DATA_SPORE_KILLED = 122, + DATA_HUNDRED_CLUB = 123, + DATA_DANCE_FAIL = 124, + DATA_IMMORTAL_FAIL = 125, + DATA_KELTHUZAD_GATE = 126, + DATA_HAD_THADDIUS_GREET = 127, + DATA_KELTHUZAD_PORTAL_1 = 128, + DATA_KELTHUZAD_PORTAL_2 = 129, + DATA_KELTHUZAD_PORTAL_3 = 130, + DATA_KELTHUZAD_PORTAL_4 = 131 }; enum NXGOs From 5673328f91dd10213a95294edf2c30d929747831 Mon Sep 17 00:00:00 2001 From: Jelle Meeus Date: Sun, 30 Jun 2024 13:21:00 +0200 Subject: [PATCH 26/31] fixup! rename DATA_RAZUVIOUS to DATA_RAZUVIOUS_BOSS --- src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp index 00ec2a635a2f5d..882e0bceda020c 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp @@ -370,7 +370,7 @@ class boss_razuvious_minion : public CreatureScript scheduler.CancelGroup(GROUP_OOC_RP); if (InstanceScript* instance = me->GetInstanceScript()) { - if (Creature* creature = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_RAZUVIOUS))) + if (Creature* creature = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_RAZUVIOUS_BOSS))) { creature->SetInCombatWithZone(); creature->AI()->AttackStart(who); From 8e192dfe7efabdc067069251fe018a230deab9ed Mon Sep 17 00:00:00 2001 From: Jelle Meeus Date: Sun, 30 Jun 2024 13:29:49 +0200 Subject: [PATCH 27/31] fixup! fixup! rename DATA_RAZUVIOUS to DATA_RAZUVIOUS_BOSS --- src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp b/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp index 9b9ef43dd7035c..983c54b8354372 100644 --- a/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp +++ b/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp @@ -1099,7 +1099,7 @@ class instance_naxxramas : public InstanceMapScript return _stalaggGUID; case DATA_FEUGEN_BOSS: return _feugenGUID; - case DATA_RAZUVIOUS: + case DATA_RAZUVIOUS_BOSS: return _razuviousGUID; case DATA_GOTHIK_BOSS: return _gothikGUID; From d3bf91c7d9b444731715e120d8c2d6186e844243 Mon Sep 17 00:00:00 2001 From: Jelle Meeus Date: Thu, 4 Jul 2024 18:00:28 +0200 Subject: [PATCH 28/31] using creatureData doesnt work --- .../Northrend/Naxxramas/boss_razuvious.cpp | 4 ++-- .../Northrend/Naxxramas/instance_naxxramas.cpp | 17 ++++++++++++----- .../scripts/Northrend/Naxxramas/naxxramas.h | 2 +- 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp index 882e0bceda020c..eed3cd6cf654d7 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp @@ -335,7 +335,7 @@ class boss_razuvious_minion : public CreatureScript me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_NONE); if (InstanceScript* instance = me->GetInstanceScript()) { - if (Creature* creature = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_RAZUVIOUS_BOSS))) + if (Creature* creature = instance->GetCreature(DATA_RAZUVIOUS)) { me->SetFacingToObject(creature); } @@ -370,7 +370,7 @@ class boss_razuvious_minion : public CreatureScript scheduler.CancelGroup(GROUP_OOC_RP); if (InstanceScript* instance = me->GetInstanceScript()) { - if (Creature* creature = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_RAZUVIOUS_BOSS))) + if (Creature* creature = instance->GetCreature(DATA_RAZUVIOUS)) { creature->SetInCombatWithZone(); creature->AI()->AttackStart(who); diff --git a/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp b/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp index 983c54b8354372..d88a9c0257c2e7 100644 --- a/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp +++ b/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp @@ -52,6 +52,17 @@ inline uint8 GetEruptionSection(float x, float y) return 3; } +ObjectData const creatureData[] = +{ + { NPC_RAZUVIOUS, DATA_RAZUVIOUS }, + { 0, 0 } +}; + +ObjectData const gameObjectData[] = +{ + { 0, 0 } +}; + class instance_naxxramas : public InstanceMapScript { public: @@ -68,6 +79,7 @@ class instance_naxxramas : public InstanceMapScript { SetHeaders(DataHeader); SetBossNumber(MAX_ENCOUNTERS); + LoadObjectData(creatureData, gameObjectData); for (auto& i : HeiganEruption) i.clear(); @@ -140,7 +152,6 @@ class instance_naxxramas : public InstanceMapScript ObjectGuid _gothikGUID; ObjectGuid _stalaggGUID; ObjectGuid _feugenGUID; - ObjectGuid _razuviousGUID; ObjectGuid _zeliekGUID; ObjectGuid _rivendareGUID; ObjectGuid _blaumeuxGUID; @@ -229,8 +240,6 @@ class instance_naxxramas : public InstanceMapScript case NPC_FEUGEN: _feugenGUID = creature->GetGUID(); return; - case NPC_RAZUVIOUS: - _razuviousGUID = creature->GetGUID(); case NPC_GOTHIK: _gothikGUID = creature->GetGUID(); return; @@ -1099,8 +1108,6 @@ class instance_naxxramas : public InstanceMapScript return _stalaggGUID; case DATA_FEUGEN_BOSS: return _feugenGUID; - case DATA_RAZUVIOUS_BOSS: - return _razuviousGUID; case DATA_GOTHIK_BOSS: return _gothikGUID; case DATA_LICH_KING_BOSS: diff --git a/src/server/scripts/Northrend/Naxxramas/naxxramas.h b/src/server/scripts/Northrend/Naxxramas/naxxramas.h index 4252d9d78e6825..5c237d784d0726 100644 --- a/src/server/scripts/Northrend/Naxxramas/naxxramas.h +++ b/src/server/scripts/Northrend/Naxxramas/naxxramas.h @@ -58,7 +58,7 @@ enum NXData DATA_STALAGG_BOSS = 108, DATA_FEUGEN_BOSS = 109, DATA_THADDIUS_GATE = 110, - DATA_RAZUVIOUS_BOSS = 111, + DATA_RAZUVIOUS = 111, DATA_GOTHIK_BOSS = 112, DATA_GOTHIK_ENTER_GATE = 113, DATA_GOTHIK_INNER_GATE = 114, From 799332266345fb17420221474ddea554743f0b74 Mon Sep 17 00:00:00 2001 From: Jelle Meeus Date: Thu, 4 Jul 2024 18:00:43 +0200 Subject: [PATCH 29/31] Revert "using creatureData doesnt work" This reverts commit d3bf91c7d9b444731715e120d8c2d6186e844243. --- .../Northrend/Naxxramas/boss_razuvious.cpp | 4 ++-- .../Northrend/Naxxramas/instance_naxxramas.cpp | 17 +++++------------ .../scripts/Northrend/Naxxramas/naxxramas.h | 2 +- 3 files changed, 8 insertions(+), 15 deletions(-) diff --git a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp index eed3cd6cf654d7..882e0bceda020c 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp @@ -335,7 +335,7 @@ class boss_razuvious_minion : public CreatureScript me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_NONE); if (InstanceScript* instance = me->GetInstanceScript()) { - if (Creature* creature = instance->GetCreature(DATA_RAZUVIOUS)) + if (Creature* creature = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_RAZUVIOUS_BOSS))) { me->SetFacingToObject(creature); } @@ -370,7 +370,7 @@ class boss_razuvious_minion : public CreatureScript scheduler.CancelGroup(GROUP_OOC_RP); if (InstanceScript* instance = me->GetInstanceScript()) { - if (Creature* creature = instance->GetCreature(DATA_RAZUVIOUS)) + if (Creature* creature = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_RAZUVIOUS_BOSS))) { creature->SetInCombatWithZone(); creature->AI()->AttackStart(who); diff --git a/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp b/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp index d88a9c0257c2e7..983c54b8354372 100644 --- a/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp +++ b/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp @@ -52,17 +52,6 @@ inline uint8 GetEruptionSection(float x, float y) return 3; } -ObjectData const creatureData[] = -{ - { NPC_RAZUVIOUS, DATA_RAZUVIOUS }, - { 0, 0 } -}; - -ObjectData const gameObjectData[] = -{ - { 0, 0 } -}; - class instance_naxxramas : public InstanceMapScript { public: @@ -79,7 +68,6 @@ class instance_naxxramas : public InstanceMapScript { SetHeaders(DataHeader); SetBossNumber(MAX_ENCOUNTERS); - LoadObjectData(creatureData, gameObjectData); for (auto& i : HeiganEruption) i.clear(); @@ -152,6 +140,7 @@ class instance_naxxramas : public InstanceMapScript ObjectGuid _gothikGUID; ObjectGuid _stalaggGUID; ObjectGuid _feugenGUID; + ObjectGuid _razuviousGUID; ObjectGuid _zeliekGUID; ObjectGuid _rivendareGUID; ObjectGuid _blaumeuxGUID; @@ -240,6 +229,8 @@ class instance_naxxramas : public InstanceMapScript case NPC_FEUGEN: _feugenGUID = creature->GetGUID(); return; + case NPC_RAZUVIOUS: + _razuviousGUID = creature->GetGUID(); case NPC_GOTHIK: _gothikGUID = creature->GetGUID(); return; @@ -1108,6 +1099,8 @@ class instance_naxxramas : public InstanceMapScript return _stalaggGUID; case DATA_FEUGEN_BOSS: return _feugenGUID; + case DATA_RAZUVIOUS_BOSS: + return _razuviousGUID; case DATA_GOTHIK_BOSS: return _gothikGUID; case DATA_LICH_KING_BOSS: diff --git a/src/server/scripts/Northrend/Naxxramas/naxxramas.h b/src/server/scripts/Northrend/Naxxramas/naxxramas.h index 5c237d784d0726..4252d9d78e6825 100644 --- a/src/server/scripts/Northrend/Naxxramas/naxxramas.h +++ b/src/server/scripts/Northrend/Naxxramas/naxxramas.h @@ -58,7 +58,7 @@ enum NXData DATA_STALAGG_BOSS = 108, DATA_FEUGEN_BOSS = 109, DATA_THADDIUS_GATE = 110, - DATA_RAZUVIOUS = 111, + DATA_RAZUVIOUS_BOSS = 111, DATA_GOTHIK_BOSS = 112, DATA_GOTHIK_ENTER_GATE = 113, DATA_GOTHIK_INNER_GATE = 114, From 5e62fd5e4cc2843db24480b55e2280101886f0f9 Mon Sep 17 00:00:00 2001 From: Jelle Meeus Date: Thu, 4 Jul 2024 19:48:26 +0200 Subject: [PATCH 30/31] Reapply "using creatureData doesnt work" This reverts commit 799332266345fb17420221474ddea554743f0b74. --- .../Northrend/Naxxramas/boss_razuvious.cpp | 4 ++-- .../Northrend/Naxxramas/instance_naxxramas.cpp | 17 ++++++++++++----- .../scripts/Northrend/Naxxramas/naxxramas.h | 2 +- 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp index 882e0bceda020c..eed3cd6cf654d7 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp @@ -335,7 +335,7 @@ class boss_razuvious_minion : public CreatureScript me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_NONE); if (InstanceScript* instance = me->GetInstanceScript()) { - if (Creature* creature = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_RAZUVIOUS_BOSS))) + if (Creature* creature = instance->GetCreature(DATA_RAZUVIOUS)) { me->SetFacingToObject(creature); } @@ -370,7 +370,7 @@ class boss_razuvious_minion : public CreatureScript scheduler.CancelGroup(GROUP_OOC_RP); if (InstanceScript* instance = me->GetInstanceScript()) { - if (Creature* creature = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_RAZUVIOUS_BOSS))) + if (Creature* creature = instance->GetCreature(DATA_RAZUVIOUS)) { creature->SetInCombatWithZone(); creature->AI()->AttackStart(who); diff --git a/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp b/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp index 983c54b8354372..d88a9c0257c2e7 100644 --- a/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp +++ b/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp @@ -52,6 +52,17 @@ inline uint8 GetEruptionSection(float x, float y) return 3; } +ObjectData const creatureData[] = +{ + { NPC_RAZUVIOUS, DATA_RAZUVIOUS }, + { 0, 0 } +}; + +ObjectData const gameObjectData[] = +{ + { 0, 0 } +}; + class instance_naxxramas : public InstanceMapScript { public: @@ -68,6 +79,7 @@ class instance_naxxramas : public InstanceMapScript { SetHeaders(DataHeader); SetBossNumber(MAX_ENCOUNTERS); + LoadObjectData(creatureData, gameObjectData); for (auto& i : HeiganEruption) i.clear(); @@ -140,7 +152,6 @@ class instance_naxxramas : public InstanceMapScript ObjectGuid _gothikGUID; ObjectGuid _stalaggGUID; ObjectGuid _feugenGUID; - ObjectGuid _razuviousGUID; ObjectGuid _zeliekGUID; ObjectGuid _rivendareGUID; ObjectGuid _blaumeuxGUID; @@ -229,8 +240,6 @@ class instance_naxxramas : public InstanceMapScript case NPC_FEUGEN: _feugenGUID = creature->GetGUID(); return; - case NPC_RAZUVIOUS: - _razuviousGUID = creature->GetGUID(); case NPC_GOTHIK: _gothikGUID = creature->GetGUID(); return; @@ -1099,8 +1108,6 @@ class instance_naxxramas : public InstanceMapScript return _stalaggGUID; case DATA_FEUGEN_BOSS: return _feugenGUID; - case DATA_RAZUVIOUS_BOSS: - return _razuviousGUID; case DATA_GOTHIK_BOSS: return _gothikGUID; case DATA_LICH_KING_BOSS: diff --git a/src/server/scripts/Northrend/Naxxramas/naxxramas.h b/src/server/scripts/Northrend/Naxxramas/naxxramas.h index 4252d9d78e6825..5c237d784d0726 100644 --- a/src/server/scripts/Northrend/Naxxramas/naxxramas.h +++ b/src/server/scripts/Northrend/Naxxramas/naxxramas.h @@ -58,7 +58,7 @@ enum NXData DATA_STALAGG_BOSS = 108, DATA_FEUGEN_BOSS = 109, DATA_THADDIUS_GATE = 110, - DATA_RAZUVIOUS_BOSS = 111, + DATA_RAZUVIOUS = 111, DATA_GOTHIK_BOSS = 112, DATA_GOTHIK_ENTER_GATE = 113, DATA_GOTHIK_INNER_GATE = 114, From 25c0b1e7b93101bf833f4609c8f51001a602cf3a Mon Sep 17 00:00:00 2001 From: Jelle Meeus Date: Thu, 4 Jul 2024 19:56:23 +0200 Subject: [PATCH 31/31] Add missing InstanceScript hooks to OnCreate methods --- src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp b/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp index d88a9c0257c2e7..431e5ae553e273 100644 --- a/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp +++ b/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp @@ -265,6 +265,8 @@ class instance_naxxramas : public InstanceMapScript _lichkingGUID = creature->GetGUID(); return; } + + InstanceScript::OnCreatureCreate(creature); } void OnGameObjectCreate(GameObject* pGo) override @@ -510,6 +512,8 @@ class instance_naxxramas : public InstanceMapScript } break; } + + InstanceScript::OnGameObjectCreate(pGo); } void OnGameObjectRemove(GameObject* pGo) override