Core updated to use the latest version of ScriptDev3

Core updated to use the latest version of ScriptDev3
This commit is contained in:
Charles A Edwards 2016-09-09 14:12:06 +01:00 committed by Antz
parent 688f37df3d
commit fd8db4143c
5 changed files with 1796 additions and 509 deletions

View file

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

View file

@ -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();
}

View file

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