mirror of
https://github.com/mangosfour/server.git
synced 2025-12-30 10:37:12 +00:00
Core updated to use the latest version of ScriptDev3
Core updated to use the latest version of ScriptDev3
This commit is contained in:
parent
688f37df3d
commit
fd8db4143c
5 changed files with 1796 additions and 509 deletions
File diff suppressed because it is too large
Load diff
|
|
@ -27,24 +27,37 @@
|
|||
#ifndef DEF_BRD_H
|
||||
#define DEF_BRD_H
|
||||
|
||||
#include "precompiled.h"
|
||||
|
||||
enum
|
||||
{
|
||||
MAX_ENCOUNTER = 7,
|
||||
MAX_ENCOUNTER = 13,
|
||||
TYPE_SIGNAL = MAX_ENCOUNTER + 1,
|
||||
MAX_RELIC_DOORS = 12,
|
||||
MAX_DWARFS = 7,
|
||||
MAX_DWARF_RUNES = 7,
|
||||
MAX_CRONIES = 3,
|
||||
|
||||
TYPE_RING_OF_LAW = 1,
|
||||
TYPE_VAULT = 2,
|
||||
TYPE_BAR = 3,
|
||||
TYPE_ROCKNOT = 3,
|
||||
TYPE_TOMB_OF_SEVEN = 4,
|
||||
TYPE_LYCEUM = 5,
|
||||
TYPE_IRON_HALL = 6,
|
||||
TYPE_QUEST_JAIL_BREAK = 7,
|
||||
TYPE_FLAMELASH = 8,
|
||||
TYPE_HURLEY = 9,
|
||||
TYPE_BRIDGE = 10,
|
||||
TYPE_BAR = 11,
|
||||
TYPE_PLUGGER = 12,
|
||||
TYPE_NAGMARA = 13,
|
||||
TYPE_BAR_DOOR = 15,
|
||||
TYPE_ARENA_COORDS = 16,
|
||||
TYPE_ARENA_CROWD = 17,
|
||||
|
||||
NPC_EMPEROR = 9019,
|
||||
NPC_PRINCESS = 8929,
|
||||
NPC_PHALANX = 9502,
|
||||
NPC_PRIESTESS = 10076,
|
||||
NPC_HATEREL = 9034,
|
||||
NPC_ANGERREL = 9035,
|
||||
NPC_VILEREL = 9036,
|
||||
|
|
@ -55,6 +68,8 @@ enum
|
|||
NPC_MAGMUS = 9938,
|
||||
NPC_WATCHER_DOOMGRIP = 9476,
|
||||
NPC_WARBRINGER_CONST = 8905, // Four of them in Relict Vault are related to Doomgrip summon event
|
||||
NPC_LOREGRAIN = 9024,
|
||||
NPC_FIREGUARD_DESTROYER = 8911, // Four of them in Relict Vault are related to Doomgrip summon event
|
||||
|
||||
// Jail Break event related
|
||||
NPC_OGRABISI = 9677,
|
||||
|
|
@ -64,6 +79,30 @@ enum
|
|||
NPC_TOBIAS = 9679,
|
||||
NPC_DUGHAL = 9022,
|
||||
|
||||
// Arena crowd
|
||||
NPC_ARENA_SPECTATOR = 8916,
|
||||
NPC_SHADOWFORGE_PEASANT = 8896,
|
||||
NPC_SHADOWFORGE_CITIZEN = 8902,
|
||||
NPC_SHADOWFORGE_SENATOR = 8904,
|
||||
NPC_ANVILRAGE_SOLDIER = 8893,
|
||||
NPC_ANVILRAGE_MEDIC = 8894,
|
||||
NPC_ANVILRAGE_OFFICER = 8895,
|
||||
|
||||
// Spawned on Shadowforge bridge
|
||||
NPC_ANVILRAGE_GUARDMAN = 8891,
|
||||
|
||||
// Grim Guzzler bar events
|
||||
NPC_PHALANX = 9502,
|
||||
NPC_GRIM_PATRON = 9545,
|
||||
NPC_GUZZLING_PATRON = 9547,
|
||||
NPC_HAMMERED_PATRON = 9554,
|
||||
NPC_HURLEY_BLACKBREATH = 9537,
|
||||
NPC_BLACKBREATH_CRONY = 9541,
|
||||
NPC_PLUGGER_SPAZZRING = 9499,
|
||||
NPC_PRIVATE_ROCKNOT = 9503,
|
||||
NPC_MISTRESS_NAGMARA = 9500,
|
||||
NPC_RIBBLY_SCREWSPIGGOT = 9543,
|
||||
|
||||
GO_ARENA_1 = 161525,
|
||||
GO_ARENA_2 = 161522,
|
||||
GO_ARENA_3 = 161524,
|
||||
|
|
@ -87,16 +126,64 @@ enum
|
|||
GO_CHEST_SEVEN = 169243,
|
||||
GO_ARENA_SPOILS = 181074,
|
||||
GO_SECRET_DOOR = 174553,
|
||||
GO_SECRET_SAFE = 161495,
|
||||
|
||||
// Jail break event related
|
||||
GO_JAIL_DOOR_SUPPLY = 170561,
|
||||
GO_JAIL_SUPPLY_CRATE = 166872,
|
||||
|
||||
GO_DWARFRUNE_A01 = 170578,
|
||||
GO_DWARFRUNE_B01 = 170579,
|
||||
GO_DWARFRUNE_C01 = 170580,
|
||||
GO_DWARFRUNE_D01 = 170581,
|
||||
GO_DWARFRUNE_E01 = 170582,
|
||||
GO_DWARFRUNE_F01 = 170583,
|
||||
GO_DWARFRUNE_G01 = 170584,
|
||||
|
||||
SPELL_STONED = 10255, // Aura of Warbringer Constructs in Relict Vault
|
||||
|
||||
FACTION_DWARF_HOSTILE = 754, // Hostile faction for the Tomb of the Seven dwarfs
|
||||
FACTION_ARENA_NEUTRAL = 15, // Neutral faction for NPC in top of Arena after event complete
|
||||
FACTION_DARK_IRON = 54, // Hostile faction for the Grim Guzzler
|
||||
FACTION_IRONFORGE = 122,
|
||||
|
||||
// enum used to handle the various Grim Guzzler bar patron's reaction
|
||||
// depending on the actions and events triggered by players
|
||||
PATRON_EMOTE = 0,
|
||||
PATRON_PISSED = 1,
|
||||
PATRON_HOSTILE = 2,
|
||||
SAY_PISSED_PATRON_1 = -1230037,
|
||||
SAY_PISSED_PATRON_2 = -1230038,
|
||||
SAY_PISSED_PATRON_3 = -1230039,
|
||||
SAY_ROCKNOT_DESPAWN = -1230047,
|
||||
YELL_PATROL_1 = -1230048,
|
||||
YELL_PATROL_2 = -1230049,
|
||||
SPELL_NAGMARA_VANISH = 15341,
|
||||
|
||||
// Emperor Dagran Thaurissan
|
||||
YELL_SENATOR_1 = -1230060,
|
||||
YELL_SENATOR_2 = -1230061,
|
||||
YELL_SENATOR_3 = -1230062,
|
||||
YELL_SENATOR_4 = -1230063
|
||||
};
|
||||
|
||||
// Random emotes for Grim Guzzler patrons
|
||||
static const uint32 aPatronsEmotes[] =
|
||||
{
|
||||
EMOTE_ONESHOT_EXCLAMATION, EMOTE_ONESHOT_CHEER, EMOTE_ONESHOT_CHEER, EMOTE_ONESHOT_LAUGH, EMOTE_ONESHOT_LAUGH, EMOTE_ONESHOT_LAUGH
|
||||
};
|
||||
|
||||
struct ArenaCylinder
|
||||
{
|
||||
float m_fCenterX;
|
||||
float m_fCenterY;
|
||||
float m_fCenterZ;
|
||||
uint32 m_uiRadius;
|
||||
uint32 m_uiHeight;
|
||||
};
|
||||
|
||||
static const ArenaCylinder aArenaCrowdVolume[] = {595.78f, -188.65f, -38.63f, 69, 10};
|
||||
|
||||
enum ArenaNPCs
|
||||
{
|
||||
// Gladiators
|
||||
|
|
@ -138,7 +225,84 @@ static const uint32 aArenaNPCs[] =
|
|||
// Used to summon Watcher Doomgrip
|
||||
static const float aVaultPositions[4] = {821.905f, -338.382f, -50.134f, 3.78736f};
|
||||
|
||||
// Used to summon Hurley Blackbreath
|
||||
static const float aHurleyPositions[4] = {856.0867f, -149.7469f, -49.6719f, 0.05949629f};
|
||||
|
||||
// Used to summon the patrol in Grim Guzzler
|
||||
static const float aBarPatrolPositions[2][4] = {
|
||||
{872.7059f, -232.5491f, -43.7525f, 2.069044f},
|
||||
{865.5645f, -219.7471f, -43.7033f, 2.033881f}
|
||||
};
|
||||
|
||||
static const uint32 aBarPatrolId[3] = {NPC_FIREGUARD_DESTROYER, NPC_ANVILRAGE_OFFICER, NPC_ANVILRAGE_OFFICER};
|
||||
|
||||
// Tomb of the Seven dwarfs
|
||||
static const uint32 aTombDwarfes[MAX_DWARFS] = {NPC_ANGERREL, NPC_SEETHREL, NPC_DOPEREL, NPC_GLOOMREL, NPC_VILEREL, NPC_HATEREL, NPC_DOOMREL};
|
||||
|
||||
|
||||
|
||||
class instance_blackrock_depths : public ScriptedInstance
|
||||
{
|
||||
public:
|
||||
instance_blackrock_depths(Map* pMap);
|
||||
~instance_blackrock_depths() {}
|
||||
|
||||
void Initialize() override;
|
||||
|
||||
void OnCreatureCreate(Creature* pCreature) override;
|
||||
void OnCreatureEnterCombat(Creature* pCreature) override;
|
||||
void OnCreatureDeath(Creature* pCreature) override;
|
||||
void OnCreatureEvade(Creature* pCreature);
|
||||
void OnObjectCreate(GameObject* pGo) override;
|
||||
|
||||
void SetData(uint32 uiType, uint32 uiData) override;
|
||||
uint32 GetData(uint32 uiType) const override;
|
||||
|
||||
const char* Save() const override { return m_strInstData.c_str(); }
|
||||
void Load(const char* chrIn) override;
|
||||
|
||||
void Update(uint32 uiDiff) override;
|
||||
|
||||
// Arena Event
|
||||
void SetArenaCenterCoords(float fX, float fY, float fZ) { m_fArenaCenterX = fX; m_fArenaCenterY = fY; m_fArenaCenterZ = fZ; }
|
||||
void GetArenaCenterCoords(float& fX, float& fY, float& fZ) { fX = m_fArenaCenterX; fY = m_fArenaCenterY; fZ = m_fArenaCenterZ; }
|
||||
void GetArenaCrowdGuid(GuidSet& sCrowdSet) { sCrowdSet = m_sArenaCrowdNpcGuids; }
|
||||
|
||||
// Bar events
|
||||
void SetBarDoorIsOpen() { m_bIsBarDoorOpen = true; }
|
||||
void GetBarDoorIsOpen(bool& bIsOpen) { bIsOpen = m_bIsBarDoorOpen; }
|
||||
void HandleBarPatrons(uint8 uiEventType);
|
||||
void HandleBarPatrol(uint8 uiStep);
|
||||
|
||||
private:
|
||||
void DoCallNextDwarf();
|
||||
|
||||
uint32 m_auiEncounter[MAX_ENCOUNTER];
|
||||
std::string m_strInstData;
|
||||
|
||||
// Grim Guzzler bar events
|
||||
bool m_bIsBarDoorOpen;
|
||||
uint32 m_uiBarAleCount;
|
||||
uint32 m_uiPatronEmoteTimer;
|
||||
uint8 m_uiBrokenKegs;
|
||||
uint32 m_uiPatrolTimer;
|
||||
uint8 m_uiStolenAles;
|
||||
uint32 m_uiDagranTimer;
|
||||
|
||||
uint8 m_uiCofferDoorsOpened;
|
||||
|
||||
uint32 m_uiDwarfFightTimer;
|
||||
uint32 m_uiArenaCenterAT;
|
||||
uint8 m_uiDwarfRound;
|
||||
|
||||
float m_fArenaCenterX, m_fArenaCenterY, m_fArenaCenterZ;
|
||||
|
||||
GuidSet m_sVaultNpcGuids;
|
||||
GuidSet m_sArenaCrowdNpcGuids;
|
||||
GuidSet m_sBarPatronNpcGuids;
|
||||
GuidSet m_sBarPatrolGuids;
|
||||
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -39,8 +39,10 @@
|
|||
enum eEmperor
|
||||
{
|
||||
FACTION_NEUTRAL = 734,
|
||||
SAY_AGGRO = -1230001,
|
||||
SAY_SLAY = -1230002,
|
||||
YELL_AGGRO_1 = -1230001,
|
||||
YELL_AGGRO_2 = -1230064,
|
||||
YELL_AGGRO_3 = -1230065,
|
||||
YELL_SLAY = -1230002,
|
||||
|
||||
SPELL_HANDOFTHAURISSAN = 17492,
|
||||
SPELL_AVATAROFFLAME = 15636
|
||||
|
|
@ -55,6 +57,7 @@ struct boss_emperor_dagran_thaurissan : public CreatureScript
|
|||
boss_emperor_dagran_thaurissanAI(Creature* pCreature) : ScriptedAI(pCreature)
|
||||
{
|
||||
m_pInstance = (ScriptedInstance*)pCreature->GetInstanceData();
|
||||
Reset();
|
||||
}
|
||||
|
||||
ScriptedInstance* m_pInstance;
|
||||
|
|
@ -72,19 +75,28 @@ struct boss_emperor_dagran_thaurissan : public CreatureScript
|
|||
|
||||
void Aggro(Unit* /*pWho*/) override
|
||||
{
|
||||
DoScriptText(SAY_AGGRO, m_creature);
|
||||
uint32 uiTextId;
|
||||
switch (urand(0, 2))
|
||||
{
|
||||
case 0: uiTextId = YELL_AGGRO_1; break;
|
||||
case 1: uiTextId = YELL_AGGRO_2; break;
|
||||
case 2: uiTextId = YELL_AGGRO_3; break;
|
||||
}
|
||||
DoScriptText(uiTextId, m_creature);
|
||||
m_creature->CallForHelp(VISIBLE_RANGE);
|
||||
}
|
||||
|
||||
void JustDied(Unit* /*pVictim*/) override
|
||||
{
|
||||
if (!m_pInstance)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (Creature* pPrincess = m_pInstance->GetSingleCreatureFromStorage(NPC_PRINCESS))
|
||||
{
|
||||
// check if we didn't update the entry
|
||||
if (pPrincess->GetEntry() != NPC_PRINCESS)
|
||||
return;
|
||||
|
||||
if (pPrincess->IsAlive())
|
||||
{
|
||||
pPrincess->SetFactionTemporary(FACTION_NEUTRAL, TEMPFACTION_NONE);
|
||||
|
|
@ -95,50 +107,33 @@ struct boss_emperor_dagran_thaurissan : public CreatureScript
|
|||
|
||||
void KilledUnit(Unit* /*pVictim*/) override
|
||||
{
|
||||
DoScriptText(SAY_SLAY, m_creature);
|
||||
DoScriptText(YELL_SLAY, m_creature);
|
||||
}
|
||||
|
||||
void UpdateAI(const uint32 uiDiff) override
|
||||
{
|
||||
if (!m_creature->SelectHostileTarget() || !m_creature->getVictim())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (m_uiHandOfThaurissan_Timer < uiDiff)
|
||||
{
|
||||
if (Unit* pTarget = m_creature->SelectAttackingTarget(ATTACKING_TARGET_RANDOM, 0))
|
||||
{
|
||||
DoCastSpellIfCan(pTarget, SPELL_HANDOFTHAURISSAN);
|
||||
if (DoCastSpellIfCan(pTarget, SPELL_HANDOFTHAURISSAN) == CAST_OK)
|
||||
m_uiHandOfThaurissan_Timer = urand(5, 10) * 1000;
|
||||
}
|
||||
|
||||
// 3 Hands of Thaurissan will be casted
|
||||
// if (m_uiCounter < 3)
|
||||
//{
|
||||
// m_uiHandOfThaurissan_Timer = 1000;
|
||||
// ++m_uiCounter;
|
||||
//}
|
||||
// else
|
||||
//{
|
||||
m_uiHandOfThaurissan_Timer = 5000;
|
||||
// m_uiCounter = 0;
|
||||
//}
|
||||
}
|
||||
else
|
||||
{
|
||||
m_uiHandOfThaurissan_Timer -= uiDiff;
|
||||
}
|
||||
|
||||
// AvatarOfFlame_Timer
|
||||
if (m_uiAvatarOfFlame_Timer < uiDiff)
|
||||
{
|
||||
DoCastSpellIfCan(m_creature->getVictim(), SPELL_AVATAROFFLAME);
|
||||
m_uiAvatarOfFlame_Timer = 18000;
|
||||
if (DoCastSpellIfCan(m_creature->getVictim(), SPELL_AVATAROFFLAME) == CAST_OK)
|
||||
m_uiAvatarOfFlame_Timer = 18000;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_uiAvatarOfFlame_Timer -= uiDiff;
|
||||
}
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -77,10 +77,9 @@ struct boss_high_interrogator_gerstahn : public CreatureScript
|
|||
{
|
||||
if (Unit* pTarget = m_creature->SelectAttackingTarget(ATTACKING_TARGET_RANDOM, 0))
|
||||
{
|
||||
DoCastSpellIfCan(pTarget, SPELL_SHADOWWORDPAIN);
|
||||
if (DoCastSpellIfCan(pTarget, SPELL_SHADOWWORDPAIN) == CAST_OK)
|
||||
m_uiShadowWordPainTimer = 7000;
|
||||
}
|
||||
|
||||
m_uiShadowWordPainTimer = 7000;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -92,10 +91,9 @@ struct boss_high_interrogator_gerstahn : public CreatureScript
|
|||
{
|
||||
if (Unit* pTarget = m_creature->SelectAttackingTarget(ATTACKING_TARGET_RANDOM, 0, SPELL_MANABURN, SELECT_FLAG_POWER_MANA))
|
||||
{
|
||||
DoCastSpellIfCan(pTarget, SPELL_MANABURN);
|
||||
if (DoCastSpellIfCan(pTarget, SPELL_MANABURN) == CAST_OK)
|
||||
m_uiManaBurnTimer = 10000;
|
||||
}
|
||||
|
||||
m_uiManaBurnTimer = 10000;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
Loading…
Add table
Add a link
Reference in a new issue