diff options
author | Malcrom <malcromdev@gmail.com> | 2013-01-12 14:04:25 -0330 |
---|---|---|
committer | Malcrom <malcromdev@gmail.com> | 2013-01-12 14:04:25 -0330 |
commit | 199354410395c3cb074ba9f6127ea057cffd99ea (patch) | |
tree | 0a2fbf82fe37ca1dc5d25fb89fd218af368c2124 /src | |
parent | 4d9fa7f22c066010ff3b53c54d6f2b89c016e354 (diff) |
Core/Scripting: More updates to Mechanar
Diffstat (limited to 'src')
5 files changed, 84 insertions, 88 deletions
diff --git a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_gatewatcher_gyrokill.cpp b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_gatewatcher_gyrokill.cpp index 796308d68f6..60d42c38c50 100644 --- a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_gatewatcher_gyrokill.cpp +++ b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_gatewatcher_gyrokill.cpp @@ -17,8 +17,8 @@ /* ScriptData SDName: Boss_Gatewatcher_Gyrokill -SD%Complete: 0 -SDComment: Place Holder +SD%Complete: 99% +SDComment: SDCategory: Tempest Keep, The Mechanar EndScriptData */ @@ -58,29 +58,18 @@ class Boss_Gatewatcher_Gyrokill : public CreatureScript { Boss_Gatewatcher_GyrokillAI(Creature* creature) : BossAI(creature, DATA_GATEWATCHER_GYROKILL) {} - void Reset() - { - if (instance) - instance->SetData(DATA_GATEWATCHER_GYROKILL, NOT_STARTED); - } - void JustDied(Unit* /*killer*/) { - if (instance) - instance->SetData(DATA_GATEWATCHER_GYROKILL, DONE); - + _JustDied(); Talk(SAY_DEATH); } void EnterCombat(Unit* /*who*/) { - if (instance) - instance->SetData(DATA_GATEWATCHER_GYROKILL, IN_PROGRESS); - + _EnterCombat(); events.ScheduleEvent(EVENT_STREAM_OF_MACHINE_FLUID, 10000); events.ScheduleEvent(EVENT_SAW_BLADE, 20000); events.ScheduleEvent(EVENT_SHADOW_POWER, 25000); - Talk(SAY_AGGRO); } @@ -108,18 +97,12 @@ class Boss_Gatewatcher_Gyrokill : public CreatureScript events.ScheduleEvent(EVENT_STREAM_OF_MACHINE_FLUID, urand(13000, 17000)); break; case EVENT_SAW_BLADE: - if (IsHeroic()) - DoCast(me, H_SPELL_SAW_BLADE); - else - DoCast(me, SPELL_SAW_BLADE); + DoCast(me, SPELL_SAW_BLADE); Talk(SAY_SAW_BLADEs); events.ScheduleEvent(EVENT_SAW_BLADE, urand(20000, 30000)); break; case EVENT_SHADOW_POWER: - if (IsHeroic()) - DoCast(me, H_SPELL_SHADOW_POWER); - else - DoCast(me, SPELL_SHADOW_POWER); + DoCast(me, SPELL_SHADOW_POWER); events.ScheduleEvent(EVENT_SAW_BLADE, urand(25000, 35000)); break; default: diff --git a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_nethermancer_sepethrea.cpp b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_nethermancer_sepethrea.cpp index cdfb20b5f0d..4f71a020f83 100644 --- a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_nethermancer_sepethrea.cpp +++ b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_nethermancer_sepethrea.cpp @@ -65,30 +65,16 @@ class boss_nethermancer_sepethrea : public CreatureScript struct boss_nethermancer_sepethreaAI : public BossAI { - boss_nethermancer_sepethreaAI(Creature* creature) : BossAI(creature,DATA_NETHERMANCER_SEPRETHREA) - { - instance = creature->GetInstanceScript(); - } - - InstanceScript* instance; - - void Reset() - { - if (instance) - instance->SetData(DATA_NETHERMANCER_SEPRETHREA, NOT_STARTED); - } + boss_nethermancer_sepethreaAI(Creature* creature) : BossAI(creature,DATA_NETHERMANCER_SEPRETHREA) {} void EnterCombat(Unit* who) { - if (instance) - instance->SetData(DATA_NETHERMANCER_SEPRETHREA, IN_PROGRESS); - + _EnterCombat(); events.ScheduleEvent(EVENT_FROST_ATTACK, urand(7000, 10000)); events.ScheduleEvent(EVENT_ARCANE_BLAST, urand(12000, 18000)); events.ScheduleEvent(EVENT_DRAGONS_BREATH, urand(18000, 22000)); events.ScheduleEvent(EVENT_KNOCKBACK, urand(22000, 28000)); events.ScheduleEvent(EVENT_SOLARBURN, 30000); - Talk(SAY_AGGRO); DoCast(who, SPELL_SUMMON_RAGIN_FLAMES); Talk(SAY_SUMMON); @@ -101,9 +87,8 @@ class boss_nethermancer_sepethrea : public CreatureScript void JustDied(Unit* /*killer*/) { + _JustDied(); Talk(SAY_DEATH); - if (instance) - instance->SetData(DATA_NETHERMANCER_SEPRETHREA, DONE); } void UpdateAI(uint32 const diff) diff --git a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_pathaleon_the_calculator.cpp b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_pathaleon_the_calculator.cpp index b7857239157..94daedfdc43 100644 --- a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_pathaleon_the_calculator.cpp +++ b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_pathaleon_the_calculator.cpp @@ -75,9 +75,7 @@ class boss_pathaleon_the_calculator : public CreatureScript void Reset() { - if (instance) - instance->SetData(DATA_PATHALEON_THE_CALCULATOR, NOT_STARTED); - + _Reset(); Enraged = false; Counter = 0; summons.DespawnAll(); @@ -85,16 +83,12 @@ class boss_pathaleon_the_calculator : public CreatureScript void EnterCombat(Unit* /*who*/) { - if (instance) - instance->SetData(DATA_PATHALEON_THE_CALCULATOR, IN_PROGRESS); - + _EnterCombat(); events.ScheduleEvent(EVENT_SUMMON, 30000); events.ScheduleEvent(EVENT_MANA_TAP, urand(12000, 20000)); events.ScheduleEvent(EVENT_ARCANE_TORRENT, urand(16000, 25000)); events.ScheduleEvent(EVENT_DOMINATION, urand(25000, 40000)); - if (IsHeroic()) - events.ScheduleEvent(EVENT_ARCANE_EXPLOSION, urand(8000, 13000)); - + events.ScheduleEvent(EVENT_ARCANE_EXPLOSION, urand(8000, 13000)); Talk(SAY_AGGRO); } @@ -105,12 +99,9 @@ class boss_pathaleon_the_calculator : public CreatureScript void JustDied(Unit* /*killer*/) { + _JustDied(); Talk(SAY_DEATH); - summons.DespawnAll(); - - if (instance) - instance->SetData(DATA_PATHALEON_THE_CALCULATOR, DONE); } void JustSummoned(Creature* summon) diff --git a/src/server/scripts/Outland/TempestKeep/Mechanar/instance_mechanar.cpp b/src/server/scripts/Outland/TempestKeep/Mechanar/instance_mechanar.cpp index 21fb085b266..6256aa45dd3 100644 --- a/src/server/scripts/Outland/TempestKeep/Mechanar/instance_mechanar.cpp +++ b/src/server/scripts/Outland/TempestKeep/Mechanar/instance_mechanar.cpp @@ -31,35 +31,29 @@ class instance_mechanar : public InstanceMapScript { public: instance_mechanar(): InstanceMapScript("instance_mechanar", 554) {} - struct instance_mechanar_InstanceMapScript : public InstanceScript + InstanceScript* GetInstanceScript(InstanceMap* map) const { - instance_mechanar_InstanceMapScript(Map* map) : InstanceScript(map) {} - - uint32 m_auiEncounter[MAX_ENCOUNTER]; + return new instance_mechanar_InstanceMapScript(map); + } - void Initialize() + struct instance_mechanar_InstanceMapScript : public InstanceScript + { + instance_mechanar_InstanceMapScript(Map* map) : InstanceScript(map) { - // memset(&m_auiEncounter, 0, sizeof(m_auiEncounter)); + SetBossNumber(EncounterCount); } - bool IsEncounterInProgress() const - { - for (uint8 i = 0; i < MAX_ENCOUNTER; ++i) - if (m_auiEncounter[i] == IN_PROGRESS) - return true; - return false; - } uint32 GetData(uint32 type) const { switch (type) { - case DATA_GATEWATCHER_GYROKILL: return m_auiEncounter[DATA_GATEWATCHER_GYROKILL]; - case DATA_IRON_HAND: return m_auiEncounter[DATA_IRON_HAND]; - case DATA_MECHANOLORD_CAPACITUS: return m_auiEncounter[DATA_MECHANOLORD_CAPACITUS]; - case DATA_NETHERMANCER_SEPRETHREA: return m_auiEncounter[DATA_NETHERMANCER_SEPRETHREA]; - case DATA_PATHALEON_THE_CALCULATOR: return m_auiEncounter[DATA_PATHALEON_THE_CALCULATOR]; + case DATA_GATEWATCHER_GYROKILL: return SetBossNumber[DATA_GATEWATCHER_GYROKILL]; + case DATA_IRON_HAND: return SetBossNumber[DATA_IRON_HAND]; + case DATA_MECHANOLORD_CAPACITUS: return SetBossNumber[DATA_MECHANOLORD_CAPACITUS]; + case DATA_NETHERMANCER_SEPRETHREA: return SetBossNumber[DATA_NETHERMANCER_SEPRETHREA]; + case DATA_PATHALEON_THE_CALCULATOR: return SetBossNumber[DATA_PATHALEON_THE_CALCULATOR]; } return false; @@ -70,23 +64,69 @@ class instance_mechanar : public InstanceMapScript return 0; } - void SetData(uint32 type, uint32 data) + bool SetBossState(uint32 type, EncounterState state) { + if (!InstanceScript::SetBossState(type, state)) + return false; + switch (type) { - case DATA_GATEWATCHER_GYROKILL: m_auiEncounter[DATA_GATEWATCHER_GYROKILL] = data; break; - case DATA_IRON_HAND: m_auiEncounter[DATA_IRON_HAND] = data; break; - case DATA_MECHANOLORD_CAPACITUS: m_auiEncounter[DATA_MECHANOLORD_CAPACITUS] = data; break; - case DATA_NETHERMANCER_SEPRETHREA: m_auiEncounter[DATA_NETHERMANCER_SEPRETHREA] = data; break; - case DATA_PATHALEON_THE_CALCULATOR: m_auiEncounter[DATA_PATHALEON_THE_CALCULATOR] = data; break; + case DATA_GATEWATCHER_GYROKILL: + case DATA_IRON_HAND: + case DATA_MECHANOLORD_CAPACITUS: + case DATA_NETHERMANCER_SEPRETHREA: + case DATA_PATHALEON_THE_CALCULATOR: + break; + default: + break; } + + return true; } - }; - InstanceScript* GetInstanceScript(InstanceMap* map) const - { - return new instance_mechanar_InstanceMapScript(map); - } + std::string GetSaveData() + { + OUT_SAVE_INST_DATA; + + std::ostringstream saveStream; + saveStream << "S O " << GetBossSaveData(); + + OUT_SAVE_INST_DATA_COMPLETE; + return saveStream.str(); + } + + void Load(const char* str) + { + if (!str) + { + OUT_LOAD_INST_DATA_FAIL; + return; + } + + OUT_LOAD_INST_DATA(str); + + char dataHead1, dataHead2; + + std::istringstream loadStream(str); + loadStream >> dataHead1 >> dataHead2; + + if (dataHead1 == 'S' && dataHead2 == 'O') + { + for (uint32 i = 0; i < EncounterCount; ++i) + { + uint32 tmpState; + loadStream >> tmpState; + if (tmpState == IN_PROGRESS || tmpState > SPECIAL) + tmpState = NOT_STARTED; + SetBossState(i, EncounterState(tmpState)); + } + } + else + OUT_LOAD_INST_DATA_FAIL; + + OUT_LOAD_INST_DATA_COMPLETE; + } + }; }; void AddSC_instance_mechanar() diff --git a/src/server/scripts/Outland/TempestKeep/Mechanar/mechanar.h b/src/server/scripts/Outland/TempestKeep/Mechanar/mechanar.h index 7aa4cca7f8e..b1c7cf8e25c 100644 --- a/src/server/scripts/Outland/TempestKeep/Mechanar/mechanar.h +++ b/src/server/scripts/Outland/TempestKeep/Mechanar/mechanar.h @@ -18,6 +18,8 @@ #ifndef DEF_MECHANAR_H #define DEF_MECHANAR_H +uint32 const EncounterCount = 5; + enum DataTypes { DATA_GATEWATCHER_GYROKILL = 0, @@ -27,9 +29,4 @@ enum DataTypes DATA_PATHALEON_THE_CALCULATOR = 4 }; -enum Misc -{ - MAX_ENCOUNTER = 5 -}; - #endif |