fix(Scripts/RazorScale): Move hardcoded text/gossips to DB and minor fixes (#11694)

* Update boss_razorscale.cpp

* cs

* questionable fix, but it works
This commit is contained in:
avarishd
2022-05-08 23:54:38 +03:00
committed by GitHub
parent 9af7ae449c
commit 4df92b553c
@@ -25,72 +25,68 @@
#include "WaypointMgr.h" #include "WaypointMgr.h"
#include "ulduar.h" #include "ulduar.h"
#define SPELL_FLAMEBUFFET_10 64016 enum Spells
#define SPELL_FLAMEBUFFET_25 64023 {
#define S_FLAMEBUFFET RAID_MODE(SPELL_FLAMEBUFFET_10, SPELL_FLAMEBUFFET_25) // Razorscale
#define SPELL_FIREBALL 63815 SPELL_FLAMEBUFFET_10 = 64016,
#define SPELL_WINGBUFFET 62666 SPELL_FLAMEBUFFET_25 = 64023,
#define SPELL_FLAMEBREATH_10 63317 SPELL_FIREBALL = 63815,
#define SPELL_FLAMEBREATH_25 64021 SPELL_WINGBUFFET = 62666,
#define S_FLAMEBREATH RAID_MODE(SPELL_FLAMEBREATH_10, SPELL_FLAMEBREATH_25) SPELL_FLAMEBREATH_10 = 63317,
#define SPELL_FUSEARMOR 64771 SPELL_FLAMEBREATH_25 = 64021,
#define SPELL_DEVOURINGFLAME 63236 SPELL_FUSEARMOR = 64771,
#define SPELL_BERSERK 47008 SPELL_FUSED_ARMOR = 64774, // Applied on 5th stack of SPELL_FUSEARMOR
SPELL_DEVOURINGFLAME = 63236,
SPELL_BERSERK = 47008,
#define SPELL_CHAIN_1 49679 // Haproons
#define SPELL_CHAIN_2 49682 SPELL_CHAIN_1 = 49679,
#define SPELL_CHAIN_3 49683 SPELL_CHAIN_2 = 49682,
#define SPELL_CHAIN_4 49684 SPELL_CHAIN_3 = 49683,
#define SPELL_LAUNCH_CHAIN 62505 SPELL_CHAIN_4 = 49684,
//#define SPELL_HARPOON_SHOT_BUFF 62509 SPELL_LAUNCH_CHAIN = 62505,
//#define SPELL_HARPOON_FIRE_STATE 62696
// Dark Rune Sentinel
SPELL_WHIRLWIND = 63808,
SPELL_BATTLE_SHOUT_10 = 46763,
SPELL_BATTLE_SHOUT_25 = 64062,
// Dark Rune Guardian
SPELL_STORMSTRIKE_DMG = 65971,
SPELL_STORMSTRIKE_DEBUFF = 64757,
// Dark Rune Watcher
SPELL_LIGHTINGBOLT_10 = 63809,
SPELL_LIGHTINGBOLT_25 = 64696,
SPELL_CHAINLIGHTNING_10 = 64758,
SPELL_CHAINLIGHTNING_25 = 64759,
};
#define SPELL_FLAMEBUFFET RAID_MODE(SPELL_FLAMEBUFFET_10, SPELL_FLAMEBUFFET_25)
#define SPELL_FLAMEBREATH RAID_MODE(SPELL_FLAMEBREATH_10, SPELL_FLAMEBREATH_25)
#define SPELL_BATTLE_SHOUT RAID_MODE(SPELL_BATTLE_SHOUT_10, SPELL_BATTLE_SHOUT_25)
#define SPELL_LIGHTINGBOLT RAID_MODE(SPELL_LIGHTINGBOLT_10, SPELL_LIGHTINGBOLT_25)
#define SPELL_CHAINLIGHTNING RAID_MODE(SPELL_CHAINLIGHTNING_10, SPELL_CHAINLIGHTNING_25)
#define REQ_CHAIN_COUNT RAID_MODE(2, 4) #define REQ_CHAIN_COUNT RAID_MODE(2, 4)
#define SPELL_DEVOURINGFLAME_SUMMON 63308 enum NPCs
//#define SPELL_DEVOURINGFLAME_GROUNDAURA_10 64709
//#define SPELL_DEVOURINGFLAME_GROUNDAURA_25 64734
//#define S_DEVOURINGFLAME_GROUNDAURA RAID_MODE(SPELL_DEVOURINGFLAME_GROUNDAURA_10, SPELL_DEVOURINGFLAME_GROUNDAURA_25)
//#define NPC_DEVOURINGFLAME 34188
#define SPELL_STORMSTRIKE 51876
#define SPELL_WHIRLWIND 63808
#define SPELL_LIGHTINGBOLT 63809
#define SPELL_CHAINLIGHTNING 64758
#define NPC_DARK_RUNE_SENTINEL 33846
#define NPC_DARK_RUNE_GUARDIAN 33388
#define NPC_DARK_RUNE_WATCHER 33453
#define NPC_EXPEDITION_ENGINEER 33287
#define NPC_EXPEDITION_COMMANDER 33210
//#define NPC_EXPEDITION_DEFENDER 33816
//#define NPC_EXPEDITION_TRAPPER 33259
#define NPC_RAZORSCALE 33186
//#define NPC_HARPOON_FIRE_STATE 33282
#define GO_DRILL 195305
#define GO_HARPOON_GUN_1 194519
#define GO_HARPOON_GUN_2 194541
#define GO_HARPOON_GUN_3 194542
#define GO_HARPOON_GUN_4 194543
#define GO_BROKEN_HARPOON 194565
#define TEXT_GOSSIP_ACTION "We are ready to help!"
#define TEXT_EE_AGGRO "Give us a moment to prepare to build the turrets."
#define TEXT_EE_MOVE_OUT "Ready to move out, keep those dwarves off of our backs!"
#define TEXT_EE_FIRES_OUT "Fires out! Let's rebuild those turrets!"
#define TEXT_TURRET_READY "Harpoon Turret is ready for use!"
#define TEXT_DEEP_BREATH "Razorscale takes a deep breath..."
#define TEXT_GROUNDED_PERMANENTLY "Razorscale grounded permanently!"
#define CORDS_GROUND 588.0f, -166.0f, 391.1f
#define CORDS_AIR 588.0f, -178.0f, 490.0f
#define REPAIR_POINTS 25
enum eSay
{ {
SAY_COMMANDER_INTRO = 0, NPC_DARK_RUNE_SENTINEL = 33846,
SAY_COMMANDER_GROUND = 1, NPC_DARK_RUNE_GUARDIAN = 33388,
SAY_COMMANDER_AGGRO = 2 NPC_DARK_RUNE_WATCHER = 33453,
NPC_EXPEDITION_ENGINEER = 33287,
NPC_EXPEDITION_COMMANDER = 33210,
NPC_RAZORSCALE_CONTROLLER = 33233, // Trigger Creature
};
enum GOs
{
GO_DRILL = 195305,
GO_HARPOON_GUN_1 = 194519,
GO_HARPOON_GUN_2 = 194541,
GO_HARPOON_GUN_3 = 194542,
GO_HARPOON_GUN_4 = 194543,
GO_BROKEN_HARPOON = 194565,
}; };
enum eEvents enum eEvents
@@ -113,11 +109,40 @@ enum eEvents
EVENT_SPELL_FLAME_BUFFET, EVENT_SPELL_FLAME_BUFFET,
}; };
enum eMisc enum Texts
{ {
POINT_RAZORSCALE_INIT = 1 // Razorscale
EMOTE_PERMA_GROUND = 0,
EMOTE_BREATH = 1,
EMOTE_BERSERK = 2,
// Expedition Commander
SAY_COMMANDER_AGGRO = 0,
SAY_COMMANDER_GROUND_PHASE = 1,
SAY_COMMANDER_ENGINEERS_DEAD = 2, // Should be called when all engineers are dead, currently unused
// Expedition Engineer
SAY_EE_AGGRO = 0,
SAY_EE_START_REPAIR = 1,
SAY_EE_REBUILD_TURRETS = 2,
// Harpoon
EMOTE_HARPOON = 0,
}; };
enum Misc
{
POINT_RAZORSCALE_INIT = 1,
REPAIR_POINTS = 25,
// Expedition Commander Gossip
GOSSIP_MENU_START_ENCOUNTER = 10314,
NPC_TEXT_COMMANDER = 40100,
};
const Position CORDS_GROUND = {588.0f, -166.0f, 391.1f};
const Position CORDS_AIR = {588.0f, -178.0f, 490.0f};
class boss_razorscale : public CreatureScript class boss_razorscale : public CreatureScript
{ {
public: public:
@@ -161,6 +186,11 @@ public:
for (uint8 i = 0; i < 3; ++i) for (uint8 i = 0; i < 3; ++i)
ExpeditionEngineerGUIDs[i].Clear(); ExpeditionEngineerGUIDs[i].Clear();
// Show gossip icon if previously hidden
if (Creature* commander = ObjectAccessor::GetCreature(*me, CommanderGUID))
if (!commander->HasNpcFlag(UNIT_NPC_FLAG_GOSSIP))
commander->SetNpcFlag(UNIT_NPC_FLAG_GOSSIP);
CommanderGUID.Clear(); CommanderGUID.Clear();
bGroundPhase = false; bGroundPhase = false;
flyTimes = 0; flyTimes = 0;
@@ -195,7 +225,7 @@ public:
break; break;
ExpeditionEngineerGUIDs[i] = (*itr)->GetGUID(); ExpeditionEngineerGUIDs[i] = (*itr)->GetGUID();
if (!i) if (!i)
(*itr)->Yell(TEXT_EE_AGGRO, LANG_UNIVERSAL); (*itr)->AI()->Talk(SAY_EE_AGGRO);
++i; ++i;
} }
if (Creature* c = me->FindNearestCreature(NPC_EXPEDITION_COMMANDER, 300.0f, true)) if (Creature* c = me->FindNearestCreature(NPC_EXPEDITION_COMMANDER, 300.0f, true))
@@ -260,7 +290,7 @@ public:
if( count >= REQ_CHAIN_COUNT ) if( count >= REQ_CHAIN_COUNT )
{ {
if (Creature* commander = ObjectAccessor::GetCreature(*me, CommanderGUID)) if (Creature* commander = ObjectAccessor::GetCreature(*me, CommanderGUID))
commander->AI()->Talk(SAY_COMMANDER_GROUND); commander->AI()->Talk(SAY_COMMANDER_GROUND_PHASE);
me->InterruptNonMeleeSpells(true); me->InterruptNonMeleeSpells(true);
events.CancelEvent(EVENT_SPELL_FIREBALL); events.CancelEvent(EVENT_SPELL_FIREBALL);
@@ -348,8 +378,8 @@ public:
case 0: case 0:
break; break;
case EVENT_ENRAGE: case EVENT_ENRAGE:
Talk(EMOTE_BERSERK);
me->CastSpell(me, SPELL_BERSERK, true); me->CastSpell(me, SPELL_BERSERK, true);
events.RepeatEvent(600000);
break; break;
case EVENT_COMMANDER_SAY_AGGRO: case EVENT_COMMANDER_SAY_AGGRO:
if (Creature* commander = ObjectAccessor::GetCreature(*me, CommanderGUID)) if (Creature* commander = ObjectAccessor::GetCreature(*me, CommanderGUID))
@@ -360,7 +390,7 @@ public:
if (Creature* c = ObjectAccessor::GetCreature(*me, ExpeditionEngineerGUIDs[i])) if (Creature* c = ObjectAccessor::GetCreature(*me, ExpeditionEngineerGUIDs[i]))
{ {
if (!i) if (!i)
c->Yell(TEXT_EE_MOVE_OUT, LANG_UNIVERSAL); c->AI()->Talk(SAY_EE_START_REPAIR);
c->AI()->SetData(1, 0); // start repairing c->AI()->SetData(1, 0); // start repairing
} }
break; break;
@@ -454,12 +484,12 @@ public:
} }
break; break;
case EVENT_WARN_DEEP_BREATH: case EVENT_WARN_DEEP_BREATH:
me->TextEmote(TEXT_DEEP_BREATH, nullptr, true); Talk(EMOTE_BREATH);
me->RemoveAura(62794); me->RemoveAura(62794);
events.ScheduleEvent(EVENT_PHASE2_FLAME_BREATH, 2500); events.ScheduleEvent(EVENT_PHASE2_FLAME_BREATH, 2500);
break; break;
case EVENT_PHASE2_FLAME_BREATH: case EVENT_PHASE2_FLAME_BREATH:
me->CastSpell(me, S_FLAMEBREATH, true); me->CastSpell(me, SPELL_FLAMEBREATH, true);
events.ScheduleEvent(EVENT_FLY_UP, 2000); events.ScheduleEvent(EVENT_FLY_UP, 2000);
break; break;
case EVENT_FLY_UP: case EVENT_FLY_UP:
@@ -485,6 +515,7 @@ public:
if( (me->GetHealth() * 100) / me->GetMaxHealth() < 50 ) // start phase 3 if( (me->GetHealth() * 100) / me->GetMaxHealth() < 50 ) // start phase 3
{ {
Talk(EMOTE_PERMA_GROUND);
me->SetControlled(false, UNIT_STATE_ROOT); me->SetControlled(false, UNIT_STATE_ROOT);
me->DisableRotate(false); me->DisableRotate(false);
DoResetThreat(); DoResetThreat();
@@ -527,12 +558,12 @@ public:
if (Creature* c = ObjectAccessor::GetCreature(*me, ExpeditionEngineerGUIDs[i])) if (Creature* c = ObjectAccessor::GetCreature(*me, ExpeditionEngineerGUIDs[i]))
{ {
if (!i) if (!i)
c->Yell(TEXT_EE_FIRES_OUT, LANG_UNIVERSAL); c->AI()->Talk(SAY_EE_REBUILD_TURRETS);
c->AI()->SetData(1, 0); // start repairing c->AI()->SetData(1, 0); // start repairing
} }
break; break;
case EVENT_SPELL_FLAME_BREATH: case EVENT_SPELL_FLAME_BREATH:
me->CastSpell(me->GetVictim(), S_FLAMEBREATH, false); me->CastSpell(me->GetVictim(), SPELL_FLAMEBREATH, false);
events.RepeatEvent(20000); events.RepeatEvent(20000);
break; break;
case EVENT_SPELL_DEVOURING_FLAME_GROUND: case EVENT_SPELL_DEVOURING_FLAME_GROUND:
@@ -546,14 +577,14 @@ public:
me->CastSpell(victim, SPELL_FUSEARMOR, false); me->CastSpell(victim, SPELL_FUSEARMOR, false);
if (Aura* aur = victim->GetAura(SPELL_FUSEARMOR)) if (Aura* aur = victim->GetAura(SPELL_FUSEARMOR))
if (aur->GetStackAmount() == 5) if (aur->GetStackAmount() == 5)
victim->CastSpell(victim, 64774, true); victim->CastSpell(victim, SPELL_FUSED_ARMOR, true);
events.RepeatEvent(10000); events.RepeatEvent(10000);
break; break;
} }
events.RepeatEvent(2000); events.RepeatEvent(2000);
break; break;
case EVENT_SPELL_FLAME_BUFFET: case EVENT_SPELL_FLAME_BUFFET:
me->CastSpell(me->GetVictim(), S_FLAMEBUFFET, false); me->CastSpell(me->GetVictim(), SPELL_FLAMEBUFFET, false);
events.RepeatEvent(7000); events.RepeatEvent(7000);
break; break;
} }
@@ -619,8 +650,8 @@ public:
if (!razorscale || razorscale->IsInCombat()) if (!razorscale || razorscale->IsInCombat())
return true; return true;
AddGossipItemFor(player, GOSSIP_ICON_CHAT, TEXT_GOSSIP_ACTION, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); AddGossipItemFor(player, GOSSIP_MENU_START_ENCOUNTER, 0, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
SendGossipMenuFor(player, 40100, creature); SendGossipMenuFor(player, NPC_TEXT_COMMANDER, creature);
return true; return true;
} }
@@ -638,6 +669,9 @@ public:
Creature* razorscale = ObjectAccessor::GetCreature(*creature, instance->GetGuidData(TYPE_RAZORSCALE)); Creature* razorscale = ObjectAccessor::GetCreature(*creature, instance->GetGuidData(TYPE_RAZORSCALE));
if (razorscale && !razorscale->IsInCombat()) if (razorscale && !razorscale->IsInCombat())
{ {
// Do not show gossip icon if encounter is in progress
creature->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP);
// reset npcs NPC_HARPOON_FIRE_STATE // reset npcs NPC_HARPOON_FIRE_STATE
for (uint8 i = 0; i < 4; ++i) for (uint8 i = 0; i < 4; ++i)
if (Creature* hfs = ObjectAccessor::GetCreature(*creature, instance->GetGuidData(DATA_HARPOON_FIRE_STATE_1 + i))) if (Creature* hfs = ObjectAccessor::GetCreature(*creature, instance->GetGuidData(DATA_HARPOON_FIRE_STATE_1 + i)))
@@ -679,7 +713,7 @@ public:
return; return;
_introSpoken = true; _introSpoken = true;
Talk(SAY_COMMANDER_INTRO); //Talk(SAY_COMMANDER_INTRO); // No source leads to showing any text messages, perhaps only SOUND ID 15647 is played?
} }
private: private:
@@ -758,7 +792,8 @@ public:
if( GameObject* wh = me->SummonGameObject(GetHarpoonGunIdForThisHFS(), me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), 3 * M_PI / 2, 0.0f, 0.0f, 0.0f, 0.0f, 0) ) if( GameObject* wh = me->SummonGameObject(GetHarpoonGunIdForThisHFS(), me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), 3 * M_PI / 2, 0.0f, 0.0f, 0.0f, 0.0f, 0) )
{ {
me->RemoveGameObject(wh, false); me->RemoveGameObject(wh, false);
me->TextEmote(TEXT_TURRET_READY, nullptr, true); if (Creature* cr = me->SummonCreature(NPC_RAZORSCALE_CONTROLLER, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN, 5000))
cr->AI()->Talk(EMOTE_HARPOON);
} }
} }
} }
@@ -987,9 +1022,9 @@ public:
else timer2 -= diff; else timer2 -= diff;
if (timer2 == 0 && me->GetVictim() && me->IsWithinMeleeRange(me->GetVictim())) if (timer2 == 0 && me->GetVictim() && me->IsWithinMeleeRange(me->GetVictim()))
{ {
me->CastSpell(me->GetVictim(), 65971, true); me->CastSpell(me->GetVictim(), SPELL_STORMSTRIKE_DMG, true);
me->CastSpell(me->GetVictim(), 65971, true); // me->CastSpell(me->GetVictim(), 65972, true); // cast the same twice cus second one requires setting offhand damage me->CastSpell(me->GetVictim(), SPELL_STORMSTRIKE_DMG, true); // cast the same twice cus second one requires setting offhand damage
me->CastSpell(me->GetVictim(), 64757, true); me->CastSpell(me->GetVictim(), SPELL_STORMSTRIKE_DEBUFF, true);
timer2 = urand(8000, 10000); timer2 = urand(8000, 10000);
return; return;
} }
@@ -1034,7 +1069,7 @@ public:
if( timer1 <= diff ) if( timer1 <= diff )
{ {
me->CastSpell(me->GetVictim(), RAID_MODE(64758, 64759), false); me->CastSpell(me->GetVictim(), SPELL_CHAINLIGHTNING, false);
timer1 = urand(10000, 12000); timer1 = urand(10000, 12000);
return; return;
} }
@@ -1043,7 +1078,7 @@ public:
if (timer2 <= diff) if (timer2 <= diff)
{ {
me->CastSpell(me->GetVictim(), RAID_MODE(63809, 64696), false); me->CastSpell(me->GetVictim(), SPELL_LIGHTINGBOLT, false);
timer2 = 4000; timer2 = 4000;
return; return;
} }
@@ -1090,7 +1125,7 @@ public:
if( timer1 <= diff ) if( timer1 <= diff )
{ {
me->CastSpell(me, RAID_MODE(46763, 64062), false); me->CastSpell(me, SPELL_BATTLE_SHOUT, false);
timer1 = urand(15000, 20000); timer1 = urand(15000, 20000);
} }
else else
@@ -1100,7 +1135,7 @@ public:
else timer2 -= diff; else timer2 -= diff;
if (timer2 == 0 && me->GetVictim() && me->IsWithinMeleeRange(me->GetVictim())) if (timer2 == 0 && me->GetVictim() && me->IsWithinMeleeRange(me->GetVictim()))
{ {
me->CastSpell(me, 63808, false); me->CastSpell(me, SPELL_WHIRLWIND, false);
timer2 = urand(10000, 12000); timer2 = urand(10000, 12000);
} }