diff options
Diffstat (limited to 'src')
11 files changed, 426 insertions, 380 deletions
diff --git a/src/bindings/scripts/scripts/zone/blackrock_depths/boss_tomb_of_seven.cpp b/src/bindings/scripts/scripts/zone/blackrock_depths/boss_tomb_of_seven.cpp index ff02f60f7a2..b4705f5e640 100644 --- a/src/bindings/scripts/scripts/zone/blackrock_depths/boss_tomb_of_seven.cpp +++ b/src/bindings/scripts/scripts/zone/blackrock_depths/boss_tomb_of_seven.cpp @@ -457,7 +457,11 @@ bool GossipSelect_boss_gloomrel(Player *player, Creature *_Creature, uint32 send break; case GOSSIP_ACTION_INFO_DEF+22: player->CLOSE_GOSSIP_MENU(); - //re-spawn object here + if (ScriptedInstance* pInstance = (ScriptedInstance*)_Creature->GetInstanceData()) + { + //are 5 minutes expected? go template may have data to despawn when used at quest + pInstance->DoRespawnGameObject(pInstance->GetData64(DATA_GO_CHALICE),MINUTE*5); + } break; } return true; diff --git a/src/bindings/scripts/scripts/zone/blackrock_depths/def_blackrock_depths.h b/src/bindings/scripts/scripts/zone/blackrock_depths/def_blackrock_depths.h index 58d963437bd..8c3a04a16df 100644 --- a/src/bindings/scripts/scripts/zone/blackrock_depths/def_blackrock_depths.h +++ b/src/bindings/scripts/scripts/zone/blackrock_depths/def_blackrock_depths.h @@ -5,23 +5,27 @@ #ifndef DEF_BRD_H #define DEF_BRD_H -#define TYPE_RING_OF_LAW 1 -#define TYPE_VAULT 2 -#define TYPE_BAR 3 -#define TYPE_TOMB_OF_SEVEN 4 -#define TYPE_LYCEUM 5 -#define TYPE_IRON_HALL 6 +enum +{ + TYPE_RING_OF_LAW = 1, + TYPE_VAULT = 2, + TYPE_BAR = 3, + TYPE_TOMB_OF_SEVEN = 4, + TYPE_LYCEUM = 5, + TYPE_IRON_HALL = 6, + + DATA_EMPEROR = 10, + DATA_PHALANX = 11, -#define DATA_EMPEROR 10 -#define DATA_PHALANX 11 + DATA_ARENA1 = 12, + DATA_ARENA2 = 13, + DATA_ARENA3 = 14, + DATA_ARENA4 = 15, -#define DATA_ARENA1 12 -#define DATA_ARENA2 13 -#define DATA_ARENA3 14 -#define DATA_ARENA4 15 - -#define DATA_GO_BAR_KEG 16 -#define DATA_GO_BAR_KEG_TRAP 17 -#define DATA_GO_BAR_DOOR 18 + DATA_GO_BAR_KEG = 16, + DATA_GO_BAR_KEG_TRAP = 17, + DATA_GO_BAR_DOOR = 18, + DATA_GO_CHALICE = 19 +}; #endif diff --git a/src/bindings/scripts/scripts/zone/blackrock_depths/instance_blackrock_depths.cpp b/src/bindings/scripts/scripts/zone/blackrock_depths/instance_blackrock_depths.cpp index 750d611b58e..3d77ced9d94 100644 --- a/src/bindings/scripts/scripts/zone/blackrock_depths/instance_blackrock_depths.cpp +++ b/src/bindings/scripts/scripts/zone/blackrock_depths/instance_blackrock_depths.cpp @@ -32,28 +32,34 @@ update `instance_template` set `script`='instance_blackrock_depths' where `map`= #include "precompiled.h" #include "def_blackrock_depths.h" -#define ENCOUNTERS 6 - -#define C_EMPEROR 9019 -#define C_PHALANX 9502 - -#define GO_ARENA1 161525 -#define GO_ARENA2 161522 -#define GO_ARENA3 161524 -#define GO_ARENA4 161523 -#define GO_SHADOW_LOCK 161460 -#define GO_SHADOW_MECHANISM 161461 -#define GO_SHADOW_GIANT_DOOR 157923 -#define GO_SHADOW_DUMMY 161516 -#define GO_BAR_KEG_SHOT 170607 -#define GO_BAR_KEG_TRAP 171941 -#define GO_BAR_DOOR 170571 -#define GO_TOMB_ENTER 170576 -#define GO_TOMB_EXIT 170577 -#define GO_LYCEUM 170558 -#define GO_GOLEM_ROOM_N 170573 -#define GO_GOLEM_ROOM_S 170574 -#define GO_THONE_ROOM 170575 +enum +{ + ENCOUNTERS = 6, + + NPC_EMPEROR = 9019, + NPC_PHALANX = 9502, + + GO_ARENA1 = 161525, + GO_ARENA2 = 161522, + GO_ARENA3 = 161524, + GO_ARENA4 = 161523, + GO_SHADOW_LOCK = 161460, + GO_SHADOW_MECHANISM = 161461, + GO_SHADOW_GIANT_DOOR = 157923, + GO_SHADOW_DUMMY = 161516, + GO_BAR_KEG_SHOT = 170607, + GO_BAR_KEG_TRAP = 171941, + GO_BAR_DOOR = 170571, + GO_TOMB_ENTER = 170576, + GO_TOMB_EXIT = 170577, + GO_LYCEUM = 170558, + GO_GOLEM_ROOM_N = 170573, + GO_GOLEM_ROOM_S = 170574, + GO_THONE_ROOM = 170575, + + GO_SPECTRAL_CHALICE = 164869, + GO_CHEST_SEVEN = 169243 +}; struct TRINITY_DLL_DECL instance_blackrock_depths : public ScriptedInstance { @@ -118,8 +124,8 @@ struct TRINITY_DLL_DECL instance_blackrock_depths : public ScriptedInstance { switch(creature->GetEntry()) { - case C_EMPEROR: EmperorGUID = creature->GetGUID(); break; - case C_PHALANX: PhalanxGUID = creature->GetGUID(); break; + case NPC_EMPEROR: EmperorGUID = creature->GetGUID(); break; + case NPC_PHALANX: PhalanxGUID = creature->GetGUID(); break; } } diff --git a/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/def_hyjal.h b/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/def_hyjal.h index 7d81dbe4993..c08f28a4f3d 100644 --- a/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/def_hyjal.h +++ b/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/def_hyjal.h @@ -5,30 +5,34 @@ #ifndef DEF_HYJAL_H #define DEF_HYJAL_H -#define WORLD_STATE_WAVES 2842 -#define WORLD_STATE_ENEMY 2453 -#define WORLD_STATE_ENEMYCOUNT 2454 +#define ERROR_INST_DATA "TSCR: Instance data not set properly for Mount Hyjal. Encounters will be buggy" -#define DATA_ANETHERON 1 -#define DATA_ANETHERONEVENT 2 -#define DATA_ARCHIMONDE 3 -#define DATA_ARCHIMONDEEVENT 4 -#define DATA_AZGALOR 5 -#define DATA_AZGALOREVENT 6 -#define DATA_JAINAPROUDMOORE 7 -#define DATA_KAZROGAL 8 -#define DATA_KAZROGALEVENT 9 -#define DATA_RAGEWINTERCHILL 10 -#define DATA_RAGEWINTERCHILLEVENT 11 -#define DATA_THRALL 12 -#define DATA_TYRANDEWHISPERWIND 13 -#define DATA_TRASH 14 -#define DATA_RESET_TRASH_COUNT 15 -#define DATA_ALLIANCE_RETREAT 16 -#define DATA_HORDE_RETREAT 17 -#define DATA_RAIDDAMAGE 18 -#define DATA_RESET_RAIDDAMAGE 19 +enum +{ + WORLD_STATE_WAVES = 2842, + WORLD_STATE_ENEMY = 2453, + WORLD_STATE_ENEMYCOUNT = 2454, -#define ERROR_INST_DATA "TSCR: Instance data not set properly for Mount Hyjal. Encounters will be buggy" + DATA_ANETHERON = 1, + DATA_ANETHERONEVENT = 2, + DATA_ARCHIMONDE = 3, + DATA_ARCHIMONDEEVENT = 4, + DATA_AZGALOR = 5, + DATA_AZGALOREVENT = 6, + DATA_JAINAPROUDMOORE = 7, + DATA_KAZROGAL = 8, + DATA_KAZROGALEVENT = 9, + DATA_RAGEWINTERCHILL = 10, + DATA_RAGEWINTERCHILLEVENT = 11, + DATA_THRALL = 12, + DATA_TYRANDEWHISPERWIND = 13, + DATA_TRASH = 14, + DATA_RESET_TRASH_COUNT = 15, + DATA_ALLIANCE_RETREAT = 16, + DATA_HORDE_RETREAT = 17, + DATA_RAIDDAMAGE = 18, + DATA_RESET_RAIDDAMAGE = 19, + TYPE_RETREAT = 20 +}; #endif diff --git a/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/hyjalAI.cpp b/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/hyjalAI.cpp index 487347c1c18..edf74187ef5 100644 --- a/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/hyjalAI.cpp +++ b/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/hyjalAI.cpp @@ -662,6 +662,8 @@ void hyjalAI::Retreat() { if(pInstance) { + pInstance->SetData(TYPE_RETREAT,SPECIAL); + if(Faction == 0) { pInstance->SetData(DATA_ALLIANCE_RETREAT, 1); diff --git a/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/instance_hyjal.cpp b/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/instance_hyjal.cpp index df0b1a7d9c1..8a08ba5f4c0 100644 --- a/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/instance_hyjal.cpp +++ b/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/instance_hyjal.cpp @@ -25,8 +25,12 @@ EndScriptData */ #include "def_hyjal.h" #include "hyjal_trash.h" -#define ENCOUNTERS 5 +enum +{ + ENCOUNTERS = 5, + GO_ANCIENT_GEM = 185557 +}; /* Battle of Mount Hyjal encounters: 0 - Rage Winterchill event 1 - Anetheron event @@ -42,6 +46,8 @@ struct TRINITY_DLL_DECL instance_mount_hyjal : public ScriptedInstance uint32 Encounters[ENCOUNTERS]; std::string str_data; + std::list<uint64> m_uiAncientGemGUID; + uint64 RageWinterchill; uint64 Anetheron; uint64 Kazrogal; @@ -64,6 +70,8 @@ struct TRINITY_DLL_DECL instance_mount_hyjal : public ScriptedInstance void Initialize() { + m_uiAncientGemGUID.clear(); + RageWinterchill = 0; Anetheron = 0; Kazrogal = 0; @@ -83,7 +91,6 @@ struct TRINITY_DLL_DECL instance_mount_hyjal : public ScriptedInstance hordeRetreat = 0; allianceRetreat = 0; - } bool IsEncounterInProgress() const @@ -112,6 +119,9 @@ struct TRINITY_DLL_DECL instance_mount_hyjal : public ScriptedInstance else go->SetGoState(GO_STATE_READY); break; + case GO_ANCIENT_GEM: + m_uiAncientGemGUID.push_back(go->GetGUID()); + break; } } @@ -208,6 +218,19 @@ struct TRINITY_DLL_DECL instance_mount_hyjal : public ScriptedInstance else Trash--; UpdateWorldState(WORLD_STATE_ENEMYCOUNT, Trash); break; + case TYPE_RETREAT: + if (data == SPECIAL) + { + if (!m_uiAncientGemGUID.empty()) + { + for(std::list<uint64>::iterator itr = m_uiAncientGemGUID.begin(); itr != m_uiAncientGemGUID.end(); ++itr) + { + //don't know how long it expected + DoRespawnGameObject(*itr,DAY); + } + } + } + break; case DATA_ALLIANCE_RETREAT: allianceRetreat = data; OpenDoor(HordeGate,true); diff --git a/src/bindings/scripts/scripts/zone/hellfire_citadel/hellfire_ramparts/instance_hellfire_ramparts.cpp b/src/bindings/scripts/scripts/zone/hellfire_citadel/hellfire_ramparts/instance_hellfire_ramparts.cpp index 21e88eab4c4..220e675e9f5 100644 --- a/src/bindings/scripts/scripts/zone/hellfire_citadel/hellfire_ramparts/instance_hellfire_ramparts.cpp +++ b/src/bindings/scripts/scripts/zone/hellfire_citadel/hellfire_ramparts/instance_hellfire_ramparts.cpp @@ -51,24 +51,6 @@ struct TRINITY_DLL_DECL instance_ramparts : public ScriptedInstance } } - void DoRespawnChest() - { - uint64 uiChest; - - if (instance->IsHeroic()) - uiChest = m_uiChestHGUID; - else - uiChest = m_uiChestNGUID; - - if (GameObject* pGo = instance->GetGameObject(uiChest)) - { - if (pGo->isSpawned()) - return; - - pGo->SetRespawnTime(HOUR*IN_MILISECONDS); - } - } - void SetData(uint32 uiType, uint32 uiData) { debug_log("TSCR: Instance Ramparts: SetData received for type %u with data %u",uiType,uiData); @@ -77,12 +59,12 @@ struct TRINITY_DLL_DECL instance_ramparts : public ScriptedInstance { case TYPE_VAZRUDEN: if (uiData == DONE && m_uiEncounter[1] == DONE) - DoRespawnChest(); + DoRespawnGameObject(instance->IsHeroic() ? m_uiChestHGUID : m_uiChestNGUID, HOUR*IN_MILISECONDS); m_uiEncounter[0] = uiData; break; case TYPE_NAZAN: if (uiData == DONE && m_uiEncounter[0] == DONE) - DoRespawnChest(); + DoRespawnGameObject(instance->IsHeroic() ? m_uiChestHGUID : m_uiChestNGUID, HOUR*IN_MILISECONDS); m_uiEncounter[1] = uiData; break; } diff --git a/src/bindings/scripts/scripts/zone/hellfire_citadel/shattered_halls/boss_warbringer_omrogg.cpp b/src/bindings/scripts/scripts/zone/hellfire_citadel/shattered_halls/boss_warbringer_omrogg.cpp index c40a99fa243..219256f4da8 100644 --- a/src/bindings/scripts/scripts/zone/hellfire_citadel/shattered_halls/boss_warbringer_omrogg.cpp +++ b/src/bindings/scripts/scripts/zone/hellfire_citadel/shattered_halls/boss_warbringer_omrogg.cpp @@ -29,8 +29,22 @@ EndContentData */ #include "precompiled.h" #include "def_shattered_halls.h" -#define ENTRY_LEFT_HEAD 19523 -#define ENTRY_RIGHT_HEAD 19524 +enum +{ + YELL_DIE_L = -1540039, + YELL_DIE_R = -1540040, + EMOTE_ENRAGE = -1540041, + + SPELL_BLAST_WAVE = 30600, + SPELL_FEAR = 30584, + SPELL_THUNDERCLAP = 30633, + + SPELL_BURNING_MAUL = 30598, + H_SPELL_BURNING_MAUL = 36056, + + NPC_LEFT_HEAD = 19523, + NPC_RIGHT_HEAD = 19524 +}; struct Yell { @@ -40,61 +54,50 @@ struct Yell static Yell GoCombat[]= { - {-1540018, ENTRY_LEFT_HEAD}, - {-1540019, ENTRY_LEFT_HEAD}, - {-1540020, ENTRY_LEFT_HEAD}, + {-1540018, NPC_LEFT_HEAD}, + {-1540019, NPC_LEFT_HEAD}, + {-1540020, NPC_LEFT_HEAD}, }; static Yell GoCombatDelay[]= { - {-1540021, ENTRY_RIGHT_HEAD}, - {-1540022, ENTRY_RIGHT_HEAD}, - {-1540023, ENTRY_RIGHT_HEAD}, + {-1540021, NPC_RIGHT_HEAD}, + {-1540022, NPC_RIGHT_HEAD}, + {-1540023, NPC_RIGHT_HEAD}, }; static Yell Threat[]= { - {-1540024, ENTRY_LEFT_HEAD}, - {-1540025, ENTRY_RIGHT_HEAD}, - {-1540026, ENTRY_LEFT_HEAD}, - {-1540027, ENTRY_LEFT_HEAD}, + {-1540024, NPC_LEFT_HEAD}, + {-1540025, NPC_RIGHT_HEAD}, + {-1540026, NPC_LEFT_HEAD}, + {-1540027, NPC_LEFT_HEAD}, }; static Yell ThreatDelay1[]= { - {-1540028, ENTRY_RIGHT_HEAD}, - {-1540029, ENTRY_LEFT_HEAD}, - {-1540030, ENTRY_RIGHT_HEAD}, - {-1540031, ENTRY_RIGHT_HEAD}, + {-1540028, NPC_RIGHT_HEAD}, + {-1540029, NPC_LEFT_HEAD}, + {-1540030, NPC_RIGHT_HEAD}, + {-1540031, NPC_RIGHT_HEAD}, }; static Yell ThreatDelay2[]= { - {-1540032, ENTRY_LEFT_HEAD}, - {-1540033, ENTRY_RIGHT_HEAD}, - {-1540034, ENTRY_LEFT_HEAD}, - {-1540035, ENTRY_LEFT_HEAD}, + {-1540032, NPC_LEFT_HEAD}, + {-1540033, NPC_RIGHT_HEAD}, + {-1540034, NPC_LEFT_HEAD}, + {-1540035, NPC_LEFT_HEAD}, }; static Yell Killing[]= { - {-1540036, ENTRY_LEFT_HEAD}, - {-1540037, ENTRY_RIGHT_HEAD}, + {-1540036, NPC_LEFT_HEAD}, + {-1540037, NPC_RIGHT_HEAD}, }; static Yell KillingDelay[]= { - {-1540038, ENTRY_RIGHT_HEAD}, - {-1000000, ENTRY_LEFT_HEAD}, + {-1540038, NPC_RIGHT_HEAD}, + {-1000000, NPC_LEFT_HEAD}, }; -#define YELL_DIE_L -1540039 -#define YELL_DIE_R -1540040 -#define EMOTE_ENRAGE -1540041 - -#define SPELL_BLAST_WAVE 30600 -#define SPELL_FEAR 30584 -#define SPELL_THUNDERCLAP 30633 - -#define SPELL_BURNING_MAUL 30598 -#define H_SPELL_BURNING_MAUL 36056 - struct TRINITY_DLL_DECL mob_omrogg_headsAI : public ScriptedAI { mob_omrogg_headsAI(Creature *c) : ScriptedAI(c) {} @@ -102,12 +105,15 @@ struct TRINITY_DLL_DECL mob_omrogg_headsAI : public ScriptedAI bool DeathYell; uint32 Death_Timer; - void Reset() {} + void Reset() + { + Death_Timer = 4000; + DeathYell = false; + } void EnterCombat(Unit* who) { } void DoDeathYell() { - Death_Timer = 4000; DeathYell = true; } @@ -119,7 +125,8 @@ struct TRINITY_DLL_DECL mob_omrogg_headsAI : public ScriptedAI if (Death_Timer < diff) { DoScriptText(YELL_DIE_R, m_creature); - DeathYell = false; + Death_Timer = false; + m_creature->setDeathState(JUST_DIED); }else Death_Timer -= diff; } }; @@ -128,6 +135,8 @@ struct TRINITY_DLL_DECL boss_warbringer_omroggAI : public ScriptedAI { boss_warbringer_omroggAI(Creature *c) : ScriptedAI(c) { + LeftHeadGUID = 0; + RightHeadGUID = 0; pInstance = c->GetInstanceData(); HeroicMode = m_creature->GetMap()->IsHeroic(); } @@ -135,8 +144,8 @@ struct TRINITY_DLL_DECL boss_warbringer_omroggAI : public ScriptedAI ScriptedInstance* pInstance; bool HeroicMode; - uint64 LeftHead; - uint64 RightHead; + uint64 LeftHeadGUID; + uint64 RightHeadGUID; int iaggro; int ithreat; int ikilling; @@ -156,9 +165,18 @@ struct TRINITY_DLL_DECL boss_warbringer_omroggAI : public ScriptedAI void Reset() { + if (Unit* pLeftHead = Unit::GetUnit(*m_creature,LeftHeadGUID)) + { + pLeftHead->setDeathState(JUST_DIED); + LeftHeadGUID = 0; + } + + if (Unit* pRightHead = Unit::GetUnit(*m_creature,RightHeadGUID)) + { + pRightHead->setDeathState(JUST_DIED); + RightHeadGUID = 0; + } - LeftHead = 0; - RightHead = 0; AggroYell = false; ThreatYell = false; @@ -182,35 +200,32 @@ struct TRINITY_DLL_DECL boss_warbringer_omroggAI : public ScriptedAI void DoYellForThreat() { - if (LeftHead && RightHead) - { - Unit *Left = Unit::GetUnit(*m_creature,LeftHead); - Unit *Right = Unit::GetUnit(*m_creature,RightHead); + Unit *pLeftHead = Unit::GetUnit(*m_creature,LeftHeadGUID); + Unit *pRightHead = Unit::GetUnit(*m_creature,RightHeadGUID); - if (!Left || !Right) - return; + if (!pLeftHead || !pRightHead) + return; - ithreat = rand()%4; + ithreat = rand()%4; - Unit *source = (Left->GetEntry() == Threat[ithreat].creature ? Left : Right); + Unit *source = (pLeftHead->GetEntry() == Threat[ithreat].creature ? pLeftHead : pRightHead); - DoScriptText(Threat[ithreat].id, source); + DoScriptText(Threat[ithreat].id, source); - Delay_Timer = 3500; - ThreatYell = true; - } + Delay_Timer = 3500; + ThreatYell = true; } void EnterCombat(Unit *who) { - DoSpawnCreature(ENTRY_LEFT_HEAD,0,0,0,0,TEMPSUMMON_TIMED_DESPAWN,90000); - DoSpawnCreature(ENTRY_RIGHT_HEAD,0,0,0,0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,90000); + DoSpawnCreature(NPC_LEFT_HEAD,0,0,0,0,TEMPSUMMON_TIMED_DESPAWN,90000); + DoSpawnCreature(NPC_RIGHT_HEAD,0,0,0,0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,90000); - if (Unit *Left = Unit::GetUnit(*m_creature,LeftHead)) + if (Unit *pLeftHead = Unit::GetUnit(*m_creature,LeftHeadGUID)) { iaggro = rand()%3; - DoScriptText(GoCombat[iaggro].id, Left); + DoScriptText(GoCombat[iaggro].id, pLeftHead); Delay_Timer = 3500; AggroYell = true; @@ -222,11 +237,11 @@ struct TRINITY_DLL_DECL boss_warbringer_omroggAI : public ScriptedAI void JustSummoned(Creature *summoned) { - if (summoned->GetEntry() == ENTRY_LEFT_HEAD) - LeftHead = summoned->GetGUID(); + if (summoned->GetEntry() == NPC_LEFT_HEAD) + LeftHeadGUID = summoned->GetGUID(); - if (summoned->GetEntry() == ENTRY_RIGHT_HEAD) - RightHead = summoned->GetGUID(); + if (summoned->GetEntry() == NPC_RIGHT_HEAD) + RightHeadGUID = summoned->GetGUID(); //summoned->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); //summoned->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); @@ -235,47 +250,42 @@ struct TRINITY_DLL_DECL boss_warbringer_omroggAI : public ScriptedAI void KilledUnit(Unit* victim) { - if (LeftHead && RightHead) - { - Unit *Left = Unit::GetUnit(*m_creature,LeftHead); - Unit *Right = Unit::GetUnit(*m_creature,RightHead); + Unit* pLeftHead = Unit::GetUnit(*m_creature,LeftHeadGUID); + Unit* pRightHead = Unit::GetUnit(*m_creature,RightHeadGUID); - if (!Left || !Right) - return; - ikilling = rand()%2; + if (!pLeftHead || !pRightHead) + return; - Unit *source = (Left->GetEntry() == Killing[ikilling].creature ? Left : Right); + ikilling = rand()%2; - switch(ikilling) - { - case 0: - DoScriptText(Killing[ikilling].id, source); - Delay_Timer = 3500; - KillingYell = true; - break; - case 1: - DoScriptText(Killing[ikilling].id, source); - KillingYell = false; - break; - } + Unit *source = (pLeftHead->GetEntry() == Killing[ikilling].creature ? pLeftHead : pRightHead); + + switch(ikilling) + { + case 0: + DoScriptText(Killing[ikilling].id, source); + Delay_Timer = 3500; + KillingYell = true; + break; + case 1: + DoScriptText(Killing[ikilling].id, source); + KillingYell = false; + break; } } void JustDied(Unit* Killer) { - if (LeftHead && RightHead) - { - Unit *Left = Unit::GetUnit(*m_creature,LeftHead); - Unit *Right = Unit::GetUnit(*m_creature,RightHead); + Unit* pLeftHead = Unit::GetUnit(*m_creature,LeftHeadGUID); + Unit* pRightHead = Unit::GetUnit(*m_creature,RightHeadGUID); - if (!Left || !Right) - return; + if (!pLeftHead || !pRightHead) + return; - DoScriptText(YELL_DIE_L, Left); + DoScriptText(YELL_DIE_L, pLeftHead); - CAST_AI(mob_omrogg_headsAI, CAST_CRE(Right)->AI())->DoDeathYell(); - } + CAST_AI(mob_omrogg_headsAI, CAST_CRE(pRightHead)->AI())->DoDeathYell(); if (pInstance) pInstance->SetData(TYPE_OMROGG, DONE); @@ -287,24 +297,21 @@ struct TRINITY_DLL_DECL boss_warbringer_omroggAI : public ScriptedAI { Delay_Timer = 3500; - if (!LeftHead || !RightHead) - return; - - Unit *Left = Unit::GetUnit(*m_creature,LeftHead); - Unit *Right = Unit::GetUnit(*m_creature,RightHead); + Unit* pLeftHead = Unit::GetUnit(*m_creature,LeftHeadGUID); + Unit* pRightHead = Unit::GetUnit(*m_creature,RightHeadGUID); - if (!Left || !Right) + if (!pLeftHead || !pRightHead) return; if (AggroYell) { - DoScriptText(GoCombatDelay[iaggro].id, Right); + DoScriptText(GoCombatDelay[iaggro].id, pRightHead); AggroYell = false; } if (ThreatYell2) { - Unit *source = (Left->GetEntry() == ThreatDelay2[ithreat].creature ? Left : Right); + Unit *source = (pLeftHead->GetEntry() == ThreatDelay2[ithreat].creature ? pLeftHead : pRightHead); DoScriptText(ThreatDelay2[ithreat].id, source); ThreatYell2 = false; @@ -312,7 +319,7 @@ struct TRINITY_DLL_DECL boss_warbringer_omroggAI : public ScriptedAI if (ThreatYell) { - Unit *source = (Left->GetEntry() == ThreatDelay1[ithreat].creature ? Left : Right); + Unit *source = (pLeftHead->GetEntry() == ThreatDelay1[ithreat].creature ? pLeftHead : pRightHead); DoScriptText(ThreatDelay1[ithreat].id, source); ThreatYell = false; @@ -321,7 +328,7 @@ struct TRINITY_DLL_DECL boss_warbringer_omroggAI : public ScriptedAI if (KillingYell) { - Unit *source = (Left->GetEntry() == KillingDelay[ikilling].creature ? Left : Right); + Unit *source = (pLeftHead->GetEntry() == KillingDelay[ikilling].creature ? pLeftHead : pRightHead); DoScriptText(KillingDelay[ikilling].id, source); KillingYell = false; diff --git a/src/bindings/scripts/scripts/zone/karazhan/instance_karazhan.cpp b/src/bindings/scripts/scripts/zone/karazhan/instance_karazhan.cpp index efdb9569b0a..abcea27249b 100644 --- a/src/bindings/scripts/scripts/zone/karazhan/instance_karazhan.cpp +++ b/src/bindings/scripts/scripts/zone/karazhan/instance_karazhan.cpp @@ -65,6 +65,7 @@ struct TRINITY_DLL_DECL instance_karazhan : public ScriptedInstance uint64 NetherspaceDoor; // Door at Malchezaar uint64 MastersTerraceDoor[2]; uint64 ImageGUID; + uint64 DustCoveredChest; void Initialize() { @@ -91,6 +92,7 @@ struct TRINITY_DLL_DECL instance_karazhan : public ScriptedInstance MastersTerraceDoor[0]= 0; MastersTerraceDoor[1]= 0; ImageGUID = 0; + DustCoveredChest = 0; } bool IsEncounterInProgress() const @@ -176,7 +178,11 @@ struct TRINITY_DLL_DECL instance_karazhan : public ScriptedInstance case DATA_SHADEOFARAN_EVENT: Encounters[6] = data; break; case DATA_TERESTIAN_EVENT: Encounters[7] = data; break; case DATA_NETHERSPITE_EVENT: Encounters[8] = data; break; - case DATA_CHESS_EVENT: Encounters[9] = data; break; + case DATA_CHESS_EVENT: + if (data == DONE) + DoRespawnGameObject(DustCoveredChest,DAY); + Encounters[9] = data; + break; case DATA_MALCHEZZAR_EVENT: Encounters[10] = data; break; case DATA_NIGHTBANE_EVENT: if (Encounters[11] == DONE) @@ -231,6 +237,7 @@ struct TRINITY_DLL_DECL instance_karazhan : public ScriptedInstance else go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED); break; + case 185119: DustCoveredChest = go->GetGUID(); break; } switch(OperaEvent) diff --git a/src/bindings/scripts/scripts/zone/molten_core/instance_molten_core.cpp b/src/bindings/scripts/scripts/zone/molten_core/instance_molten_core.cpp index 5050238ee92..d9701a67587 100644 --- a/src/bindings/scripts/scripts/zone/molten_core/instance_molten_core.cpp +++ b/src/bindings/scripts/scripts/zone/molten_core/instance_molten_core.cpp @@ -40,214 +40,217 @@ EndScriptData */ struct TRINITY_DLL_DECL instance_molten_core : public ScriptedInstance { - instance_molten_core(Map *map) : ScriptedInstance(map) {Initialize();}; + instance_molten_core(Map *map) : ScriptedInstance(map) {Initialize();}; + + uint64 Lucifron, Magmadar, Gehennas, Garr, Geddon, Shazzrah, Sulfuron, Golemagg, Domo, Ragnaros, FlamewakerPriest; + uint64 RuneKoro, RuneZeth, RuneMazj, RuneTheri, RuneBlaz, RuneKress, RuneMohn, m_uiFirelordCacheGUID;; + + //If all Bosses are dead. + bool IsBossDied[9]; + + uint32 Encounter[ENCOUNTERS]; + + void Initialize() + { + Lucifron = 0; + Magmadar = 0; + Gehennas = 0; + Garr = 0; + Geddon = 0; + Shazzrah = 0; + Sulfuron = 0; + Golemagg = 0; + Domo = 0; + Ragnaros = 0; + FlamewakerPriest = 0; + + RuneKoro = 0; + RuneZeth = 0; + RuneMazj = 0; + RuneTheri = 0; + RuneBlaz = 0; + RuneKress = 0; + RuneMohn = 0; + + m_uiFirelordCacheGUID = 0; + + IsBossDied[0] = false; + IsBossDied[1] = false; + IsBossDied[2] = false; + IsBossDied[3] = false; + IsBossDied[4] = false; + IsBossDied[5] = false; + IsBossDied[6] = false; + + IsBossDied[7] = false; + IsBossDied[8] = false; + + for(uint8 i = 0; i < ENCOUNTERS; i++) + Encounter[i] = NOT_STARTED; + } + + bool IsEncounterInProgress() const + { + return false; + }; + + + void OnGameObjectCreate(GameObject *go, bool add) + { + switch(go->GetEntry()) + { + case 176951: //Sulfuron + RuneKoro = go->GetGUID(); + break; + case 176952: //Geddon + RuneZeth = go->GetGUID(); + break; + case 176953: //Shazzrah + RuneMazj = go->GetGUID(); + break; + case 176954: //Golemagg + RuneTheri = go->GetGUID(); + break; + case 176955: //Garr + RuneBlaz = go->GetGUID(); + break; + case 176956: //Magmadar + RuneKress = go->GetGUID(); + break; + case 176957: //Gehennas + RuneMohn = go->GetGUID(); + break; + case 179703: + m_uiFirelordCacheGUID = go->GetGUID(); //when majordomo event == DONE DoRespawnGameObject(m_uiFirelordCacheGUID,); + break; + } + } - uint64 Lucifron, Magmadar, Gehennas, Garr, Geddon, Shazzrah, Sulfuron, Golemagg, Domo, Ragnaros, FlamewakerPriest; - uint64 RuneKoro, RuneZeth, RuneMazj, RuneTheri, RuneBlaz, RuneKress, RuneMohn; - //If all Bosses are dead. - bool IsBossDied[9]; + void OnCreatureCreate(Creature *creature, bool add) + { + switch (creature->GetEntry()) + { + case ID_LUCIFRON: + Lucifron = creature->GetGUID(); + break; - uint32 Encounter[ENCOUNTERS]; + case ID_MAGMADAR: + Magmadar = creature->GetGUID(); + break; - void Initialize() - { - Lucifron = 0; - Magmadar = 0; - Gehennas = 0; - Garr = 0; - Geddon = 0; - Shazzrah = 0; - Sulfuron = 0; - Golemagg = 0; - Domo = 0; - Ragnaros = 0; - FlamewakerPriest = 0; - - RuneKoro = 0; - RuneZeth = 0; - RuneMazj = 0; - RuneTheri = 0; - RuneBlaz = 0; - RuneKress = 0; - RuneMohn = 0; - - IsBossDied[0] = false; - IsBossDied[1] = false; - IsBossDied[2] = false; - IsBossDied[3] = false; - IsBossDied[4] = false; - IsBossDied[5] = false; - IsBossDied[6] = false; - - IsBossDied[7] = false; - IsBossDied[8] = false; - - for(uint8 i = 0; i < ENCOUNTERS; i++) - Encounter[i] = NOT_STARTED; + case ID_GEHENNAS: + Gehennas = creature->GetGUID(); + break; + case ID_GARR: + Garr = creature->GetGUID(); + break; - } + case ID_GEDDON: + Geddon = creature->GetGUID(); + break; - bool IsEncounterInProgress() const - { - return false; - }; + case ID_SHAZZRAH: + Shazzrah = creature->GetGUID(); + break; + case ID_SULFURON: + Sulfuron = creature->GetGUID(); + break; - void OnGameObjectCreate(GameObject *go, bool add) - { - switch(go->GetEntry()) - { - case 176951: //Sulfuron - RuneKoro = go->GetGUID(); - break; - case 176952: //Geddon - RuneZeth = go->GetGUID(); - break; - case 176953: //Shazzrah - RuneMazj = go->GetGUID(); - break; - case 176954: //Golemagg - RuneTheri = go->GetGUID(); - break; - case 176955: //Garr - RuneBlaz = go->GetGUID(); - break; - case 176956: //Magmadar - RuneKress = go->GetGUID(); - break; - case 176957: //Gehennas - RuneMohn = go->GetGUID(); - break; - } - } + case ID_GOLEMAGG: + Golemagg = creature->GetGUID(); + break; + case ID_DOMO: + Domo = creature->GetGUID(); + break; - void OnCreatureCreate(Creature *creature, bool add) - { - switch (creature->GetEntry()) - { - case ID_LUCIFRON: - Lucifron = creature->GetGUID(); - break; - - case ID_MAGMADAR: - Magmadar = creature->GetGUID(); - break; - - case ID_GEHENNAS: - Gehennas = creature->GetGUID(); - break; - - case ID_GARR: - Garr = creature->GetGUID(); - break; - - case ID_GEDDON: - Geddon = creature->GetGUID(); - break; - - case ID_SHAZZRAH: - Shazzrah = creature->GetGUID(); - break; - - case ID_SULFURON: - Sulfuron = creature->GetGUID(); - break; - - case ID_GOLEMAGG: - Golemagg = creature->GetGUID(); - break; - - case ID_DOMO: - Domo = creature->GetGUID(); - break; - - case ID_RAGNAROS: - Ragnaros = creature->GetGUID(); - break; - - case ID_FLAMEWAKERPRIEST: - FlamewakerPriest = creature->GetGUID(); - break; - } - } + case ID_RAGNAROS: + Ragnaros = creature->GetGUID(); + break; - uint64 GetData64 (uint32 identifier) - { - switch(identifier) - { - case DATA_SULFURON: - return Sulfuron; - case DATA_GOLEMAGG: - return Sulfuron; - - case DATA_FLAMEWAKERPRIEST: - return FlamewakerPriest; - } - - return 0; + case ID_FLAMEWAKERPRIEST: + FlamewakerPriest = creature->GetGUID(); + break; } + } - uint32 GetData(uint32 type) + uint64 GetData64 (uint32 identifier) + { + switch(identifier) { - switch(type) - { - case DATA_LUCIFRONISDEAD: - if(IsBossDied[0]) - return 1; - break; - - case DATA_MAGMADARISDEAD: - if(IsBossDied[1]) - return 1; - break; - - case DATA_GEHENNASISDEAD: - if(IsBossDied[2]) - return 1; - break; - - case DATA_GARRISDEAD: - if(IsBossDied[3]) - return 1; - break; - - case DATA_GEDDONISDEAD: - if(IsBossDied[4]) - return 1; - break; - - case DATA_SHAZZRAHISDEAD: - if(IsBossDied[5]) - return 1; - break; - - case DATA_SULFURONISDEAD: - if(IsBossDied[6]) - return 1; - break; - - case DATA_GOLEMAGGISDEAD: - if(IsBossDied[7]) - return 1; - break; - - case DATA_MAJORDOMOISDEAD: - if(IsBossDied[8]) - return 1; - break; - } - - return 0; + case DATA_SULFURON: + return Sulfuron; + case DATA_GOLEMAGG: + return Sulfuron; + + case DATA_FLAMEWAKERPRIEST: + return FlamewakerPriest; } - void SetData(uint32 type, uint32 data) + return 0; + } + + uint32 GetData(uint32 type) + { + switch(type) { - if (type == DATA_GOLEMAGG_DEATH) - IsBossDied[7] = true; + case DATA_LUCIFRONISDEAD: + if(IsBossDied[0]) + return 1; + break; + + case DATA_MAGMADARISDEAD: + if(IsBossDied[1]) + return 1; + break; + + case DATA_GEHENNASISDEAD: + if(IsBossDied[2]) + return 1; + break; + + case DATA_GARRISDEAD: + if(IsBossDied[3]) + return 1; + break; + + case DATA_GEDDONISDEAD: + if(IsBossDied[4]) + return 1; + break; + + case DATA_SHAZZRAHISDEAD: + if(IsBossDied[5]) + return 1; + break; + + case DATA_SULFURONISDEAD: + if(IsBossDied[6]) + return 1; + break; + + case DATA_GOLEMAGGISDEAD: + if(IsBossDied[7]) + return 1; + break; + + case DATA_MAJORDOMOISDEAD: + if(IsBossDied[8]) + return 1; + break; } + + return 0; + } + + void SetData(uint32 type, uint32 data) + { + if (type == DATA_GOLEMAGG_DEATH) + IsBossDied[7] = true; + } }; InstanceData* GetInstance_instance_molten_core(Map *map) diff --git a/src/bindings/scripts/scripts/zone/naxxramas/instance_naxxramas.cpp b/src/bindings/scripts/scripts/zone/naxxramas/instance_naxxramas.cpp index 95783562e65..1215604a3f6 100644 --- a/src/bindings/scripts/scripts/zone/naxxramas/instance_naxxramas.cpp +++ b/src/bindings/scripts/scripts/zone/naxxramas/instance_naxxramas.cpp @@ -57,10 +57,14 @@ const MinionData minionData[] = {0, 0,} }; -#define GO_GOTHIK_GATE 181170 -#define GO_HORSEMEN_CHEST 181366 +enum +{ + GO_HORSEMEN_CHEST_HERO = 193426, + GO_HORSEMEN_CHEST = 181366, //four horsemen event, DoRespawnGameObject() when event == DONE + GO_GOTHIK_GATE = 181170, -#define SPELL_ERUPTION 29371 + SPELL_ERUPTION = 29371 +}; const float HeiganPos[2] = {2796, -3707}; const float HeiganEruptionSlope[3] = |