diff options
Diffstat (limited to 'src')
14 files changed, 117 insertions, 173 deletions
diff --git a/src/server/game/Battlegrounds/Battleground.cpp b/src/server/game/Battlegrounds/Battleground.cpp index 69f6666dff3..e95e135d8ce 100644 --- a/src/server/game/Battlegrounds/Battleground.cpp +++ b/src/server/game/Battlegrounds/Battleground.cpp @@ -712,24 +712,6 @@ void Battleground::EndBattleground(uint32 winner) int32 winmsg_id = 0; - PreparedStatement* stmt; - PreparedQueryResult result; - uint64 battleground_id = 1; - - if (isBattleground() && sWorld->getBoolConfig(CONFIG_BATTLEGROUND_STORE_STATISTICS_ENABLE)) - { - stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PVPSTATS_MAXID); - result = CharacterDatabase.Query(stmt); - - if (result) - { - Field* fields = result->Fetch(); - battleground_id = fields[0].GetUInt64() + 1; - } - - stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_PVPSTATS_BATTLEGROUND); - } - if (winner == ALLIANCE) { winmsg_id = isBattleground() ? LANG_BG_A_WINS : LANG_ARENA_GOLD_WINS; @@ -737,9 +719,6 @@ void Battleground::EndBattleground(uint32 winner) PlaySoundToAll(SOUND_ALLIANCE_WINS); // alliance wins sound SetWinner(BG_TEAM_ALLIANCE); - - if (isBattleground() && sWorld->getBoolConfig(CONFIG_BATTLEGROUND_STORE_STATISTICS_ENABLE)) - stmt->setUInt8(1, BG_TEAM_ALLIANCE); } else if (winner == HORDE) { @@ -748,21 +727,28 @@ void Battleground::EndBattleground(uint32 winner) PlaySoundToAll(SOUND_HORDE_WINS); // horde wins sound SetWinner(BG_TEAM_HORDE); - - if (isBattleground() && sWorld->getBoolConfig(CONFIG_BATTLEGROUND_STORE_STATISTICS_ENABLE)) - stmt->setUInt8(1, BG_TEAM_HORDE); } else { SetWinner(BG_TEAM_NEUTRAL); - - if (isBattleground() && sWorld->getBoolConfig(CONFIG_BATTLEGROUND_STORE_STATISTICS_ENABLE)) - stmt->setUInt8(1, BG_TEAM_NEUTRAL); } + PreparedStatement* stmt = nullptr; + uint64 battlegroundId = 1; if (isBattleground() && sWorld->getBoolConfig(CONFIG_BATTLEGROUND_STORE_STATISTICS_ENABLE)) { - stmt->setUInt64(0, battleground_id); + stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PVPSTATS_MAXID); + PreparedQueryResult result = CharacterDatabase.Query(stmt); + + if (result) + { + Field* fields = result->Fetch(); + battlegroundId = fields[0].GetUInt64() + 1; + } + + stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_PVPSTATS_BATTLEGROUND); + stmt->setUInt64(0, battlegroundId); + stmt->setUInt8(1, GetWinner()); stmt->setUInt8(2, m_BracketId + 1); stmt->setUInt8(3, GetTypeID(true)); CharacterDatabase.Execute(stmt); @@ -810,7 +796,7 @@ void Battleground::EndBattleground(uint32 winner) stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_PVPSTATS_PLAYER); BattlegroundScoreMap::const_iterator score = PlayerScores.find(player->GetGUIDLow()); - stmt->setUInt32(0, battleground_id); + stmt->setUInt32(0, battlegroundId); stmt->setUInt32(1, player->GetGUIDLow()); stmt->setUInt32(2, score->second->GetKillingBlows()); stmt->setUInt32(3, score->second->GetDeaths()); diff --git a/src/server/scripts/Commands/cs_guild.cpp b/src/server/scripts/Commands/cs_guild.cpp index 0359cbbe379..9f65ec46958 100644 --- a/src/server/scripts/Commands/cs_guild.cpp +++ b/src/server/scripts/Commands/cs_guild.cpp @@ -247,16 +247,12 @@ public: static bool HandleGuildInfoCommand(ChatHandler* handler, char const* args) { - Player* target; - uint32 guildId; - std::string guildName; - std::string guildMasterName; - Guild* guild; + Guild* guild = nullptr; if (!*args) { // Look for the guild of the selected player or ourselves - if (target = handler->getSelectedPlayerOrSelf()) + if (Player* target = handler->getSelectedPlayerOrSelf()) guild = target->GetGuild(); else // getSelectedPlayerOrSelf will return null if there is no session @@ -264,7 +260,7 @@ public: // without specifying args. return false; } - else if (guildId = atoi(args)) // Try searching by Id + else if (uint32 guildId = atoi(args)) // Try searching by Id guild = sGuildMgr->GetGuildById(guildId); else { @@ -277,13 +273,15 @@ public: if (!guildStr) return false; - guildName = guildStr; + std::string guildName = guildStr; guild = sGuildMgr->GetGuildByName(guildName); } if (!guild) return false; + std::string guildMasterName; + // Display Guild Information handler->PSendSysMessage(LANG_GUILD_INFO_NAME, guild->GetName().c_str(), guild->GetId()); // Guild Id + Name if (sObjectMgr->GetPlayerNameByGUID(guild->GetLeaderGUID(), guildMasterName)) diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_arcanist_doan.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_arcanist_doan.cpp index 26937a83e63..cdfcede1c93 100644 --- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_arcanist_doan.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_arcanist_doan.cpp @@ -124,7 +124,7 @@ class boss_arcanist_doan : public CreatureScript CreatureAI* GetAI(Creature* creature) const override { - return GetInstanceAI<boss_arcanist_doanAI>(creature); + return GetScarletMonasteryAI<boss_arcanist_doanAI>(creature); } }; diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_azshir_the_sleepless.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_azshir_the_sleepless.cpp index 71a5343d160..c3c74e4c83d 100644 --- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_azshir_the_sleepless.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_azshir_the_sleepless.cpp @@ -15,13 +15,6 @@ * with this program. If not, see <http://www.gnu.org/licenses/>. */ -/* ScriptData -SDName: Boss_Azshir_the_Sleepless -SD%Complete: 80 -SDComment: -SDCategory: Scarlet Monastery -EndScriptData */ - #include "ScriptMgr.h" #include "ScriptedCreature.h" #include "scarlet_monastery.h" @@ -70,9 +63,9 @@ class boss_azshir_the_sleepless : public CreatureScript _JustDied(); } - void DamageTaken(Unit* /*done_by*/, uint32& /*damage*/) override + void DamageTaken(Unit* /*attacker*/, uint32& damage) override { - if (HealthBelowPct(50) && !_siphon) + if (!_siphon && me->HealthBelowPctDamaged(50, damage)) { DoCastVictim(SPELL_SOUL_SIPHON); events.ScheduleEvent(EVENT_SOUL_SIPHON, 20000); @@ -120,7 +113,7 @@ class boss_azshir_the_sleepless : public CreatureScript CreatureAI* GetAI(Creature* creature) const override { - return GetInstanceAI<boss_azshir_the_sleeplessAI>(creature); + return GetScarletMonasteryAI<boss_azshir_the_sleeplessAI>(creature); } }; diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_bloodmage_thalnos.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_bloodmage_thalnos.cpp index 18369c7adfc..14698faaa97 100644 --- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_bloodmage_thalnos.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_bloodmage_thalnos.cpp @@ -80,9 +80,9 @@ class boss_bloodmage_thalnos : public CreatureScript Talk(SAY_KILL); } - void DamageTaken(Unit* /*done_by*/, uint32& /*damage*/) override + void DamageTaken(Unit* /*attacker*/, uint32& damage) override { - if (HealthBelowPct(35) && !_hpYell) + if (!_hpYell && me->HealthBelowPctDamaged(35, damage)) { Talk(SAY_HEALTH); _hpYell = true; @@ -114,18 +114,13 @@ class boss_bloodmage_thalnos : public CreatureScript } } - void UpdateAI(uint32 diff) override - { - BossAI::UpdateAI(diff); - } - private: bool _hpYell; }; CreatureAI* GetAI(Creature* creature) const override { - return GetInstanceAI<boss_bloodmage_thalnosAI>(creature); + return GetScarletMonasteryAI<boss_bloodmage_thalnosAI>(creature); } }; diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_herod.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_herod.cpp index d1d25dd2ba6..d77334785ef 100644 --- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_herod.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_herod.cpp @@ -100,9 +100,9 @@ class boss_herod : public CreatureScript me->SummonCreature(NPC_SCARLET_TRAINEE, ScarletTraineePos, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 600000); } - void DamageTaken(Unit* /*done_by*/, uint32& /*damage*/) override + void DamageTaken(Unit* /*attacker*/, uint32& damage) override { - if (HealthBelowPct(30) && !_enrage) + if (!_enrage && me->HealthBelowPctDamaged(30, damage)) { Talk(EMOTE_ENRAGE); Talk(SAY_ENRAGE); @@ -129,18 +129,13 @@ class boss_herod : public CreatureScript } } - void UpdateAI(uint32 diff) override - { - BossAI::UpdateAI(diff); - } - private: bool _enrage; }; CreatureAI* GetAI(Creature* creature) const override { - return GetInstanceAI<boss_herodAI>(creature); + return GetScarletMonasteryAI<boss_herodAI>(creature); } }; diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_houndmaster_loksey.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_houndmaster_loksey.cpp index 40c7667843b..0e1b51f9a83 100644 --- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_houndmaster_loksey.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_houndmaster_loksey.cpp @@ -73,16 +73,11 @@ class boss_houndmaster_loksey : public CreatureScript break; } } - - void UpdateAI(uint32 diff) override - { - BossAI::UpdateAI(diff); - } }; CreatureAI* GetAI(Creature* creature) const override { - return GetInstanceAI<boss_houndmaster_lokseyAI>(creature); + return GetScarletMonasteryAI<boss_houndmaster_lokseyAI>(creature); } }; diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_scorn.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_scorn.cpp index 24efd7017ec..d64e556c011 100644 --- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_scorn.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_scorn.cpp @@ -1,6 +1,5 @@ /* * Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/> - * Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/> * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the @@ -16,13 +15,6 @@ * with this program. If not, see <http://www.gnu.org/licenses/>. */ -/* ScriptData -SDName: Boss_Scorn -SD%Complete: 100 -SDComment: -SDCategory: Scarlet Monastery -EndScriptData */ - #include "ScriptMgr.h" #include "ScriptedCreature.h" #include "scarlet_monastery.h" @@ -95,16 +87,11 @@ class boss_scorn : public CreatureScript break; } } - - void UpdateAI(uint32 diff) override - { - BossAI::UpdateAI(diff); - } }; CreatureAI* GetAI(Creature* creature) const override { - return GetInstanceAI<boss_scornAI>(creature); + return GetScarletMonasteryAI<boss_scornAI>(creature); } }; diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/instance_scarlet_monastery.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/instance_scarlet_monastery.cpp index 78837912688..dc65bd42bf4 100644 --- a/src/server/scripts/EasternKingdoms/ScarletMonastery/instance_scarlet_monastery.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/instance_scarlet_monastery.cpp @@ -28,7 +28,7 @@ DoorData const doorData[] = class instance_scarlet_monastery : public InstanceMapScript { public: - instance_scarlet_monastery() : InstanceMapScript("instance_scarlet_monastery", 189) { } + instance_scarlet_monastery() : InstanceMapScript(SMScriptName, 189) { } struct instance_scarlet_monastery_InstanceMapScript : public InstanceScript { diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/scarlet_monastery.h b/src/server/scripts/EasternKingdoms/ScarletMonastery/scarlet_monastery.h index d4ce3f1614f..a74efba751f 100644 --- a/src/server/scripts/EasternKingdoms/ScarletMonastery/scarlet_monastery.h +++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/scarlet_monastery.h @@ -18,6 +18,7 @@ #ifndef SCARLET_M_ #define SCARLET_M_ +#define SMScriptName "instance_scarlet_monastery" uint32 const EncounterCount = 10; enum DataTypes @@ -57,4 +58,10 @@ enum GameObjectIds GO_PUMPKIN_SHRINE = 186267 }; +template<class AI> +inline AI* GetScarletMonasteryAI(Creature* creature) +{ + return GetInstanceAI<AI>(creature, SMScriptName); +} + #endif // SCARLET_M_ diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp index f1d44e72684..3a137a8658e 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp @@ -172,7 +172,7 @@ enum Spells SPELL_MAGNETIC_CORE = 64436, SPELL_MAGNETIC_CORE_VISUAL = 64438, SPELL_HALF_HEAL = 64188, - SPELL_CLEAR_ALL_DEBUFFS = 34098, // TODO: make use of this spell... + SPELL_CLEAR_ALL_DEBUFFS = 34098, /// @todo: make use of this spell... SPELL_FREEZE_ANIM_STUN = 63354, // used to prevent mkii from doing stuff?.. SPELL_FREEZE_ANIM = 16245 // Idle aura. Freezes animation. }; @@ -303,17 +303,10 @@ enum Actions enum Phases { - // Leviathan MK II - PHASE_LEVIATHAN_SOLO = 1, - PHASE_LEVIATHAN_ASSEMBLED, - - // VX-001 - PHASE_VX001_SOLO, - PHASE_VX001_ASSEMBLED, - - // Aerial Command Unit - PHASE_AERIAL_SOLO, - PHASE_AERIAL_ASSEMBLED + PHASE_LEVIATHAN_MK_II = 1, + PHASE_VX_001, + PHASE_AERIAL_COMMAND_UNIT, + PHASE_VOL7RON }; enum Waypoints @@ -434,7 +427,7 @@ class boss_mimiron : public CreatureScript events.ScheduleEvent(EVENT_SUMMON_FLAMES, 3000); events.ScheduleEvent(EVENT_INTRO_1, 1500); } - + void JustDied(Unit* /*who*/) override { instance->SetBossState(BOSS_MIMIRON, DONE); @@ -456,7 +449,9 @@ class boss_mimiron : public CreatureScript _Reset(); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); - instance->SetData(DATA_MIMIRON_ELEVATOR, GO_STATE_ACTIVE); + + if (GameObject* elevator = ObjectAccessor::GetGameObject(*me, instance->GetData64(DATA_MIMIRON_ELEVATOR))) + elevator->SetGoState(GO_STATE_ACTIVE); if (_fireFighter) if (Creature* computer = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_COMPUTER))) @@ -526,15 +521,17 @@ class boss_mimiron : public CreatureScript events.ScheduleEvent(EVENT_VX001_ACTIVATION_4, 5000); break; case EVENT_VX001_ACTIVATION_4: - instance->SetData(DATA_MIMIRON_ELEVATOR, GO_STATE_READY); + if (GameObject* elevator = ObjectAccessor::GetGameObject(*me, instance->GetData64(DATA_MIMIRON_ELEVATOR))) + elevator->SetGoState(GO_STATE_READY); if (Unit* worldtrigger = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_MIMIRON_WORLD_TRIGGER))) worldtrigger->CastSpell(worldtrigger, SPELL_ELEVATOR_KNOCKBACK); events.ScheduleEvent(EVENT_VX001_ACTIVATION_5, 6000); break; case EVENT_VX001_ACTIVATION_5: + if (GameObject* elevator = ObjectAccessor::GetGameObject(*me, instance->GetData64(DATA_MIMIRON_ELEVATOR))) + elevator->SetGoState(GO_STATE_ACTIVE_ALTERNATIVE); if (Creature* vx001 = me->SummonCreature(NPC_VX_001, VX001SummonPos, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 120000)) vx001->CastSpell(vx001, SPELL_FREEZE_ANIM); - instance->SetData(DATA_MIMIRON_ELEVATOR, GO_STATE_ACTIVE_ALTERNATIVE); events.ScheduleEvent(EVENT_VX001_ACTIVATION_6, 19000); break; case EVENT_VX001_ACTIVATION_6: @@ -579,7 +576,7 @@ class boss_mimiron : public CreatureScript break; case EVENT_AERIAL_ACTIVATION_6: if (Creature* acu = me->GetVehicleCreatureBase()) - acu->GetAI()->DoAction(_fireFighter? DO_HARDMODE_AERIAL : DO_START_AERIAL); + acu->AI()->DoAction(_fireFighter? DO_HARDMODE_AERIAL : DO_START_AERIAL); break; case EVENT_VOL7RON_ACTIVATION_1: if (Creature* mkii = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_LEVIATHAN_MK_II))) @@ -694,7 +691,7 @@ class boss_leviathan_mk_ii : public CreatureScript me->SetReactState(REACT_PASSIVE); me->RemoveAllAurasExceptType(SPELL_AURA_CONTROL_VEHICLE, SPELL_AURA_MOD_INCREASE_HEALTH_PERCENT); - if (events.IsInPhase(PHASE_LEVIATHAN_SOLO)) + if (events.IsInPhase(PHASE_LEVIATHAN_MK_II)) { me->CastStop(); if (Unit* turret = me->GetVehicleKit()->GetPassenger(3)) @@ -703,7 +700,7 @@ class boss_leviathan_mk_ii : public CreatureScript me->SetSpeed(MOVE_RUN, 1.5f, true); me->GetMotionMaster()->MovePoint(WP_MKII_P1_IDLE, VehicleRelocation[WP_MKII_P1_IDLE]); } - else if (events.IsInPhase(PHASE_LEVIATHAN_ASSEMBLED)) + else if (events.IsInPhase(PHASE_VOL7RON)) { me->SetStandState(UNIT_STAND_STATE_DEAD); @@ -725,14 +722,14 @@ class boss_leviathan_mk_ii : public CreatureScript _fireFighter = true; DoCast(me, SPELL_EMERGENCY_MODE); DoCastAOE(SPELL_EMERGENCY_MODE_TURRET); - events.ScheduleEvent(EVENT_FLAME_SUPPRESSANT_MK, 60000, 0, PHASE_LEVIATHAN_SOLO); + events.ScheduleEvent(EVENT_FLAME_SUPPRESSANT_MK, 60000, 0, PHASE_LEVIATHAN_MK_II); // Missing break intended. case DO_START_MKII: me->SetReactState(REACT_AGGRESSIVE); - events.SetPhase(PHASE_LEVIATHAN_SOLO); + events.SetPhase(PHASE_LEVIATHAN_MK_II); - events.ScheduleEvent(EVENT_NAPALM_SHELL, 3000, 0, PHASE_LEVIATHAN_SOLO); - events.ScheduleEvent(EVENT_PLASMA_BLAST, 15000, 0, PHASE_LEVIATHAN_SOLO); + events.ScheduleEvent(EVENT_NAPALM_SHELL, 3000, 0, PHASE_LEVIATHAN_MK_II); + events.ScheduleEvent(EVENT_PLASMA_BLAST, 15000, 0, PHASE_LEVIATHAN_MK_II); events.ScheduleEvent(EVENT_PROXIMITY_MINE, 5000); events.ScheduleEvent(EVENT_SHOCK_BLAST, 18000); break; @@ -741,7 +738,7 @@ class boss_leviathan_mk_ii : public CreatureScript me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE); me->SetReactState(REACT_AGGRESSIVE); - events.SetPhase(PHASE_LEVIATHAN_ASSEMBLED); + events.SetPhase(PHASE_VOL7RON); events.ScheduleEvent(EVENT_PROXIMITY_MINE, 15000); events.ScheduleEvent(EVENT_SHOCK_BLAST, 45000); break; @@ -776,14 +773,14 @@ class boss_leviathan_mk_ii : public CreatureScript { if (victim->GetTypeId() == TYPEID_PLAYER) if (Creature* mimiron = ObjectAccessor::GetCreature(*me, instance->GetData64(BOSS_MIMIRON))) - mimiron->AI()->Talk(events.IsInPhase(PHASE_LEVIATHAN_SOLO) ? SAY_MKII_SLAY : SAY_V07TRON_SLAY); + mimiron->AI()->Talk(events.IsInPhase(PHASE_LEVIATHAN_MK_II) ? SAY_MKII_SLAY : SAY_V07TRON_SLAY); } void MovementInform(uint32 type, uint32 point) override { if (type != POINT_MOTION_TYPE) return; - + switch (point) { case WP_MKII_P1_IDLE: @@ -845,7 +842,7 @@ class boss_leviathan_mk_ii : public CreatureScript { if (!UpdateVictim() || !CheckInRoom()) return; - + events.Update(diff); if (me->HasUnitState(UNIT_STATE_CASTING)) @@ -861,10 +858,10 @@ class boss_leviathan_mk_ii : public CreatureScript break; case EVENT_PLASMA_BLAST: DoCastVictim(SPELL_SCRIPT_EFFECT_PLASMA_BLAST); - events.RescheduleEvent(EVENT_PLASMA_BLAST, urand(30000, 45000), 0, PHASE_LEVIATHAN_SOLO); + events.RescheduleEvent(EVENT_PLASMA_BLAST, urand(30000, 45000), 0, PHASE_LEVIATHAN_MK_II); if (events.GetTimeUntilEvent(EVENT_NAPALM_SHELL) < 9000) - events.RescheduleEvent(EVENT_NAPALM_SHELL, 9000, 0, PHASE_LEVIATHAN_SOLO); // The actual spell is cast by the turret, we should not let it interrupt itself. + events.RescheduleEvent(EVENT_NAPALM_SHELL, 9000, 0, PHASE_LEVIATHAN_MK_II); // The actual spell is cast by the turret, we should not let it interrupt itself. break; case EVENT_SHOCK_BLAST: DoCastAOE(SPELL_SHOCK_BLAST); @@ -872,14 +869,14 @@ class boss_leviathan_mk_ii : public CreatureScript break; case EVENT_FLAME_SUPPRESSANT_MK: DoCastAOE(SPELL_FLAME_SUPPRESSANT_MK); - events.RescheduleEvent(EVENT_FLAME_SUPPRESSANT_MK, 60000, 0, PHASE_LEVIATHAN_SOLO); + events.RescheduleEvent(EVENT_FLAME_SUPPRESSANT_MK, 60000, 0, PHASE_LEVIATHAN_MK_II); break; case EVENT_NAPALM_SHELL: DoCastAOE(SPELL_FORCE_CAST_NAPALM_SHELL); - events.RescheduleEvent(EVENT_NAPALM_SHELL, urand(6000, 15000), 0, PHASE_LEVIATHAN_SOLO); + events.RescheduleEvent(EVENT_NAPALM_SHELL, urand(6000, 15000), 0, PHASE_LEVIATHAN_MK_II); if (events.GetTimeUntilEvent(EVENT_PLASMA_BLAST) < 2000) - events.RescheduleEvent(EVENT_PLASMA_BLAST, 2000, 0, PHASE_LEVIATHAN_SOLO); // The actual spell is cast by the turret, we should not let it interrupt itself. + events.RescheduleEvent(EVENT_PLASMA_BLAST, 2000, 0, PHASE_LEVIATHAN_MK_II); // The actual spell is cast by the turret, we should not let it interrupt itself. break; case EVENT_MOVE_POINT_2: me->GetMotionMaster()->MovePoint(WP_MKII_P4_POS_2, VehicleRelocation[WP_MKII_P4_POS_2]); @@ -893,7 +890,7 @@ class boss_leviathan_mk_ii : public CreatureScript default: break; } - } + } DoMeleeAttackIfReady(); } @@ -934,7 +931,7 @@ class boss_vx_001 : public CreatureScript DoCast(me, SPELL_VEHICLE_DAMAGED, true); me->RemoveAllAurasExceptType(SPELL_AURA_CONTROL_VEHICLE, SPELL_AURA_MOD_INCREASE_HEALTH_PERCENT); - if (events.IsInPhase(PHASE_VX001_SOLO)) + if (events.IsInPhase(PHASE_VX_001)) { me->CastStop(); me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); // | UNIT_FLAG_NOT_SELECTABLE); @@ -942,9 +939,9 @@ class boss_vx_001 : public CreatureScript DoCast(me, SPELL_TORSO_DISABLED); if (Creature* mimiron = ObjectAccessor::GetCreature(*me, instance->GetData64(BOSS_MIMIRON))) mimiron->AI()->DoAction(DO_ACTIVATE_AERIAL); - } - else if (events.IsInPhase(PHASE_VX001_ASSEMBLED)) - { + } + else if (events.IsInPhase(PHASE_VOL7RON)) + { me->SetStandState(UNIT_STAND_STATE_DEAD); me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); @@ -975,19 +972,19 @@ class boss_vx_001 : public CreatureScript //me->SetUInt32Value(UNIT_FIELD_BYTES_1, 33554432); Blizzard handles hover animation like this it seems. DoCast(me, SPELL_HEAT_WAVE_AURA); - events.SetPhase(PHASE_VX001_SOLO); + events.SetPhase(PHASE_VX_001); events.ScheduleEvent(EVENT_ROCKET_STRIKE, 20000); events.ScheduleEvent(EVENT_SPINNING_UP, urand(30000, 35000)); - events.ScheduleEvent(EVENT_RAPID_BURST, 500, 0, PHASE_VX001_SOLO); + events.ScheduleEvent(EVENT_RAPID_BURST, 500, 0, PHASE_VX_001); break; case DO_ASSEMBLED_COMBAT: me->SetStandState(UNIT_STAND_STATE_STAND); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE); - events.SetPhase(PHASE_VX001_ASSEMBLED); + events.SetPhase(PHASE_VOL7RON); events.ScheduleEvent(EVENT_ROCKET_STRIKE, 20000); events.ScheduleEvent(EVENT_SPINNING_UP, urand(30000, 35000)); - events.ScheduleEvent(EVENT_HAND_PULSE, 500, 0, PHASE_VX001_ASSEMBLED); + events.ScheduleEvent(EVENT_HAND_PULSE, 500, 0, PHASE_VOL7RON); if (_fireFighter) events.ScheduleEvent(EVENT_FROST_BOMB, 1000); break; @@ -1012,9 +1009,9 @@ class boss_vx_001 : public CreatureScript { if (victim->GetTypeId() == TYPEID_PLAYER) if (Creature* mimiron = ObjectAccessor::GetCreature(*me, instance->GetData64(BOSS_MIMIRON))) - mimiron->AI()->Talk(events.IsInPhase(PHASE_VX001_SOLO) ? SAY_VX001_SLAY : SAY_V07TRON_SLAY); + mimiron->AI()->Talk(events.IsInPhase(PHASE_VX_001) ? SAY_VX001_SLAY : SAY_V07TRON_SLAY); } - + void SpellHit(Unit* caster, SpellInfo const* /*spellProto*/) override { if (caster->GetEntry() == NPC_BURST_TARGET && !me->HasUnitState(UNIT_STATE_CASTING)) @@ -1043,10 +1040,10 @@ class boss_vx_001 : public CreatureScript case EVENT_RAPID_BURST: if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 120, true)) DoCast(target, SPELL_SUMMON_BURST_TARGET); - events.RescheduleEvent(EVENT_RAPID_BURST, 3000, 0, PHASE_VX001_SOLO); + events.RescheduleEvent(EVENT_RAPID_BURST, 3000, 0, PHASE_VX_001); break; case EVENT_ROCKET_STRIKE: - DoCastAOE(events.IsInPhase(PHASE_VX001_SOLO) ? SPELL_ROCKET_STRIKE_LEFT : SPELL_ROCKET_STRIKE_BOTH); + DoCastAOE(events.IsInPhase(PHASE_VX_001) ? SPELL_ROCKET_STRIKE_LEFT : SPELL_ROCKET_STRIKE_BOTH); events.ScheduleEvent(EVENT_RELOAD, 10000); events.RescheduleEvent(EVENT_ROCKET_STRIKE, urand(20000, 25000)); break; @@ -1058,7 +1055,7 @@ class boss_vx_001 : public CreatureScript case EVENT_HAND_PULSE: if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 120, true)) DoCast(target, urand(0, 1) == 0 ? SPELL_HAND_PULSE_LEFT : SPELL_HAND_PULSE_RIGHT); - events.RescheduleEvent(EVENT_HAND_PULSE, urand(1500, 3000), 0, PHASE_VX001_ASSEMBLED); + events.RescheduleEvent(EVENT_HAND_PULSE, urand(1500, 3000), 0, PHASE_VOL7RON); break; case EVENT_FROST_BOMB: DoCastAOE(SPELL_SCRIPT_EFFECT_FROST_BOMB); @@ -1071,7 +1068,7 @@ class boss_vx_001 : public CreatureScript break; case EVENT_FLAME_SUPPRESSANT_VX: DoCastAOE(SPELL_FLAME_SUPPRESSANT_VX); - events.RescheduleEvent(EVENT_FLAME_SUPPRESSANT_VX, urand(10000, 12000), 0, PHASE_VX001_SOLO); + events.RescheduleEvent(EVENT_FLAME_SUPPRESSANT_VX, urand(10000, 12000), 0, PHASE_VX_001); break; default: break; @@ -1113,12 +1110,12 @@ class boss_aerial_command_unit : public CreatureScript DoCast(me, SPELL_VEHICLE_DAMAGED, true); me->RemoveAllAurasExceptType(SPELL_AURA_CONTROL_VEHICLE, SPELL_AURA_MOD_INCREASE_HEALTH_PERCENT); - if (events.IsInPhase(PHASE_AERIAL_SOLO)) + if (events.IsInPhase(PHASE_AERIAL_COMMAND_UNIT)) { me->GetMotionMaster()->Clear(true); me->GetMotionMaster()->MovePoint(WP_AERIAL_P4_POS, VehicleRelocation[WP_AERIAL_P4_POS]); } - else if (events.IsInPhase(PHASE_AERIAL_ASSEMBLED)) + else if (events.IsInPhase(PHASE_VOL7RON)) { me->SetStandState(UNIT_STAND_STATE_DEAD); @@ -1139,16 +1136,16 @@ class boss_aerial_command_unit : public CreatureScript case DO_HARDMODE_AERIAL: fireFigther = true; DoCast(me, SPELL_EMERGENCY_MODE); - events.ScheduleEvent(EVENT_SUMMON_FIRE_BOTS, 1000, 0, PHASE_AERIAL_SOLO); + events.ScheduleEvent(EVENT_SUMMON_FIRE_BOTS, 1000, 0, PHASE_AERIAL_COMMAND_UNIT); // Missing break intended. case DO_START_AERIAL: me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE); me->SetReactState(REACT_AGGRESSIVE); - events.SetPhase(PHASE_AERIAL_SOLO); - events.ScheduleEvent(EVENT_SUMMON_JUNK_BOT, 5000, 0, PHASE_AERIAL_SOLO); - events.ScheduleEvent(EVENT_SUMMON_ASSAULT_BOT, 9000, 0, PHASE_AERIAL_SOLO); - events.ScheduleEvent(EVENT_SUMMON_BOMB_BOT, 9000, 0, PHASE_AERIAL_SOLO); + events.SetPhase(PHASE_AERIAL_COMMAND_UNIT); + events.ScheduleEvent(EVENT_SUMMON_JUNK_BOT, 5000, 0, PHASE_AERIAL_COMMAND_UNIT); + events.ScheduleEvent(EVENT_SUMMON_ASSAULT_BOT, 9000, 0, PHASE_AERIAL_COMMAND_UNIT); + events.ScheduleEvent(EVENT_SUMMON_BOMB_BOT, 9000, 0, PHASE_AERIAL_COMMAND_UNIT); break; case DO_DISABLE_AERIAL: me->CastStop(); @@ -1164,7 +1161,7 @@ class boss_aerial_command_unit : public CreatureScript me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE); me->SetReactState(REACT_AGGRESSIVE); me->SetStandState(UNIT_STAND_STATE_STAND); - events.SetPhase(PHASE_AERIAL_ASSEMBLED); + events.SetPhase(PHASE_VOL7RON); break; default: break; @@ -1187,7 +1184,7 @@ class boss_aerial_command_unit : public CreatureScript { if (victim->GetTypeId() == TYPEID_PLAYER) if (Creature* mimiron = ObjectAccessor::GetCreature(*me, instance->GetData64(BOSS_MIMIRON))) - mimiron->AI()->Talk(events.IsInPhase(PHASE_AERIAL_SOLO) ? SAY_AERIAL_SLAY : SAY_V07TRON_SLAY); + mimiron->AI()->Talk(events.IsInPhase(PHASE_AERIAL_COMMAND_UNIT) ? SAY_AERIAL_SLAY : SAY_V07TRON_SLAY); } void MovementInform(uint32 type, uint32 point) override @@ -1195,47 +1192,47 @@ class boss_aerial_command_unit : public CreatureScript if (type == POINT_MOTION_TYPE && point == WP_AERIAL_P4_POS) { me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); - + if (Creature* mimiron = ObjectAccessor::GetCreature(*me, instance->GetData64(BOSS_MIMIRON))) mimiron->AI()->DoAction(DO_ACTIVATE_V0L7R0N_1); } } - + void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; - + events.Update(diff); - + if (me->HasUnitState(UNIT_STATE_CASTING)) return; - + while (uint32 eventId = events.ExecuteEvent()) { switch (eventId) { case EVENT_SUMMON_FIRE_BOTS: me->CastCustomSpell(SPELL_SUMMON_FIRE_BOT_TRIGGER, SPELLVALUE_MAX_TARGETS, 3, NULL, true); - events.RescheduleEvent(EVENT_SUMMON_FIRE_BOTS, 45000, 0, PHASE_AERIAL_SOLO); + events.RescheduleEvent(EVENT_SUMMON_FIRE_BOTS, 45000, 0, PHASE_AERIAL_COMMAND_UNIT); break; case EVENT_SUMMON_JUNK_BOT: me->CastCustomSpell(SPELL_SUMMON_JUNK_BOT_TRIGGER, SPELLVALUE_MAX_TARGETS, 1, NULL, true); - events.RescheduleEvent(EVENT_SUMMON_JUNK_BOT, urand(11000, 12000), 0, PHASE_AERIAL_SOLO); + events.RescheduleEvent(EVENT_SUMMON_JUNK_BOT, urand(11000, 12000), 0, PHASE_AERIAL_COMMAND_UNIT); break; case EVENT_SUMMON_ASSAULT_BOT: me->CastCustomSpell(SPELL_SUMMON_ASSAULT_BOT_TRIGGER, SPELLVALUE_MAX_TARGETS, 1, NULL, true); - events.RescheduleEvent(EVENT_SUMMON_ASSAULT_BOT, 30000, 0, PHASE_AERIAL_SOLO); + events.RescheduleEvent(EVENT_SUMMON_ASSAULT_BOT, 30000, 0, PHASE_AERIAL_COMMAND_UNIT); break; case EVENT_SUMMON_BOMB_BOT: DoCast(me, SPELL_SUMMON_BOMB_BOT); - events.RescheduleEvent(EVENT_SUMMON_BOMB_BOT, urand(15000, 20000), 0, PHASE_AERIAL_SOLO); + events.RescheduleEvent(EVENT_SUMMON_BOMB_BOT, urand(15000, 20000), 0, PHASE_AERIAL_COMMAND_UNIT); break; default: break; } } - DoSpellAttackIfReady(events.IsInPhase(PHASE_AERIAL_SOLO) ? SPELL_PLASMA_BALL_P1 : SPELL_PLASMA_BALL_P2); + DoSpellAttackIfReady(events.IsInPhase(PHASE_AERIAL_COMMAND_UNIT) ? SPELL_PLASMA_BALL_P1 : SPELL_PLASMA_BALL_P2); } private: @@ -1344,7 +1341,7 @@ class npc_mimiron_emergency_fire_bot : public CreatureScript isWaterSprayReady = true; moveNew = true; } - + void UpdateAI(uint32 diff) override { if (!isWaterSprayReady) @@ -1497,7 +1494,7 @@ class npc_mimiron_flames : public CreatureScript { events.ScheduleEvent(EVENT_SPREAD_FLAMES, 4000); } - + void UpdateAI(uint32 diff) override { if (instance->GetBossState(BOSS_MIMIRON) != IN_PROGRESS) @@ -1544,7 +1541,7 @@ class npc_mimiron_frost_bomb : public CreatureScript { events.ScheduleEvent(EVENT_FROST_BOMB_EXPLOSION, 10000); } - + void UpdateAI(uint32 diff) override { events.Update(diff); @@ -1592,7 +1589,7 @@ class npc_mimiron_proximity_mine : public CreatureScript { events.ScheduleEvent(EVENT_PROXIMITY_MINE_ARM, 1500); } - + void UpdateAI(uint32 diff) override { events.Update(diff); @@ -1630,14 +1627,13 @@ class go_mimiron_hardmode_button : public GameObjectScript { public: go_mimiron_hardmode_button() : GameObjectScript("go_mimiron_hardmode_button") { } - + bool OnGossipHello(Player* /*player*/, GameObject* go) { InstanceScript* instance = go->GetInstanceScript(); - if (!instance) return false; - + if (Creature* computer = ObjectAccessor::GetCreature(*go, instance->GetData64(DATA_COMPUTER))) computer->AI()->DoAction(DO_ACTIVATE_COMPUTER); go->SetGoState(GO_STATE_ACTIVE); @@ -1646,7 +1642,7 @@ class go_mimiron_hardmode_button : public GameObjectScript } }; -// 63801 Bomb Bot +// 63801 - Bomb Bot class spell_mimiron_bomb_bot : public SpellScriptLoader { public: @@ -1860,7 +1856,7 @@ class spell_mimiron_magnetic_core : public SpellScriptLoader { if (Creature* target = GetTarget()->ToCreature()) { - target->GetAI()->DoAction(DO_DISABLE_AERIAL); + target->AI()->DoAction(DO_DISABLE_AERIAL); target->CastSpell(target, SPELL_MAGNETIC_CORE_VISUAL, true); } } @@ -1869,7 +1865,7 @@ class spell_mimiron_magnetic_core : public SpellScriptLoader { if (Creature* target = GetTarget()->ToCreature()) { - target->GetAI()->DoAction(DO_ENABLE_AERIAL); + target->AI()->DoAction(DO_ENABLE_AERIAL); target->RemoveAurasDueToSpell(SPELL_MAGNETIC_CORE_VISUAL); } } diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp index 1f9bfe4c3f3..a074ce28181 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp @@ -15,12 +15,13 @@ * with this program. If not, see <http://www.gnu.org/licenses/>. */ -#include "ulduar.h" +#include "InstanceScript.h" #include "Player.h" #include "ScriptedCreature.h" #include "ScriptMgr.h" #include "SpellScript.h" #include "WorldPacket.h" +#include "ulduar.h" static DoorData const doorData[] = { @@ -821,10 +822,6 @@ class instance_ulduar : public InstanceMapScript case DATA_UNBROKEN: Unbroken = data != 0; break; - case DATA_MIMIRON_ELEVATOR: - if (GameObject* gameObject = instance->GetGameObject(MimironElevatorGUID)) - gameObject->SetGoState((GOState)data); - break; case DATA_ILLUSION: illusion = data; break; @@ -924,6 +921,8 @@ class instance_ulduar : public InstanceMapScript return MimironComputerGUID; case DATA_MIMIRON_WORLD_TRIGGER: return MimironWorldTriggerGUID; + case DATA_MIMIRON_ELEVATOR: + return MimironElevatorGUID; case DATA_MIMIRON_BUTTON: return MimironButtonGUID; diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.h b/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.h index 81cb469318f..5dfc2b54f6e 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.h +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.h @@ -18,8 +18,6 @@ #ifndef DEF_ULDUAR_H #define DEF_ULDUAR_H -#include "InstanceScript.h" -#include "ObjectMgr.h" #define UlduarScriptName "instance_ulduar" extern Position const ObservationRingKeepersPos[4]; diff --git a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_hydromancer_thespia.cpp b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_hydromancer_thespia.cpp index d4fdb262c8e..dfbc49e1e34 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_hydromancer_thespia.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_hydromancer_thespia.cpp @@ -110,11 +110,6 @@ class boss_hydromancer_thespia : public CreatureScript break; } } - - void UpdateAI(uint32 diff) override - { - BossAI::UpdateAI(diff); - } }; CreatureAI* GetAI(Creature* creature) const override |