From d868f9db4bcb9b002d6c8fa16f6b62109f7066dc Mon Sep 17 00:00:00 2001 From: joschiwald Date: Mon, 29 Jul 2013 12:49:27 +0200 Subject: Scripts/DrakTharonKeep: reworked InstanceScript --- src/server/scripts/Northrend/CMakeLists.txt | 2 +- .../scripts/Northrend/DraktharonKeep/boss_dred.cpp | 307 ---------------- .../Northrend/DraktharonKeep/boss_king_dred.cpp | 301 ++++++++++++++++ .../Northrend/DraktharonKeep/boss_novos.cpp | 18 +- .../Northrend/DraktharonKeep/boss_tharon_ja.cpp | 11 +- .../Northrend/DraktharonKeep/boss_trollgore.cpp | 12 +- .../Northrend/DraktharonKeep/drak_tharon_keep.h | 71 +++- .../DraktharonKeep/instance_drak_tharon_keep.cpp | 388 ++++++++------------- 8 files changed, 518 insertions(+), 592 deletions(-) delete mode 100644 src/server/scripts/Northrend/DraktharonKeep/boss_dred.cpp create mode 100644 src/server/scripts/Northrend/DraktharonKeep/boss_king_dred.cpp (limited to 'src/server/scripts') diff --git a/src/server/scripts/Northrend/CMakeLists.txt b/src/server/scripts/Northrend/CMakeLists.txt index 674c35836a2..e04a4c43479 100644 --- a/src/server/scripts/Northrend/CMakeLists.txt +++ b/src/server/scripts/Northrend/CMakeLists.txt @@ -193,7 +193,7 @@ set(scripts_STAT_SRCS Northrend/DraktharonKeep/boss_novos.cpp Northrend/DraktharonKeep/drak_tharon_keep.h Northrend/DraktharonKeep/boss_tharon_ja.cpp - Northrend/DraktharonKeep/boss_dred.cpp + Northrend/DraktharonKeep/boss_king_dred.cpp ) message(" -> Prepared: Northrend") diff --git a/src/server/scripts/Northrend/DraktharonKeep/boss_dred.cpp b/src/server/scripts/Northrend/DraktharonKeep/boss_dred.cpp deleted file mode 100644 index 34ced66c8be..00000000000 --- a/src/server/scripts/Northrend/DraktharonKeep/boss_dred.cpp +++ /dev/null @@ -1,307 +0,0 @@ -/* - * Copyright (C) 2008-2013 TrinityCore - * - * 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 - * Free Software Foundation; either version 2 of the License, or (at your - * option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see . - */ - -/* - * Comment: MAYBE need more improve the "Raptor Call". - */ - -#include "ScriptMgr.h" -#include "ScriptedCreature.h" -#include "drak_tharon_keep.h" - -enum Spells -{ - SPELL_BELLOWING_ROAR = 22686, // fears the group, can be resisted/dispelled - SPELL_GRIEVOUS_BITE = 48920, - SPELL_MANGLING_SLASH = 48873, //casted on the current tank, adds debuf - SPELL_FEARSOME_ROAR = 48849, - H_SPELL_FEARSOME_ROAR = 59422, //Not stacking, debuff - SPELL_PIERCING_SLASH = 48878, //debuff -->Armor reduced by 75% - SPELL_RAPTOR_CALL = 59416, //dummy - SPELL_GUT_RIP = 49710, - SPELL_REND = 13738 -}; - -enum Creatures -{ - NPC_RAPTOR_1 = 26641, - NPC_RAPTOR_2 = 26628 -}; - -enum Misc -{ - ACTION_RAPTOR_KILLED = 1, - DATA_KING_DRED = 2 -}; - -class boss_dred : public CreatureScript -{ - public: - boss_dred() : CreatureScript("boss_dred") { } - - struct boss_dredAI : public ScriptedAI - { - boss_dredAI(Creature* creature) : ScriptedAI(creature) - { - instance = me->GetInstanceScript(); - } - - uint32 uiBellowingRoarTimer; - uint32 uiGrievousBiteTimer; - uint32 uiManglingSlashTimer; - uint32 uiFearsomeRoarTimer; - uint32 uiPiercingSlashTimer; - uint32 uiRaptorCallTimer; - uint8 raptorsKilled; - - InstanceScript* instance; - - void Reset() OVERRIDE - { - if (instance) - instance->SetData(DATA_DRED_EVENT, NOT_STARTED); - - uiBellowingRoarTimer = 33000; - uiGrievousBiteTimer = 20000; - uiManglingSlashTimer = 18500; - uiFearsomeRoarTimer = urand(10000, 20000); - uiPiercingSlashTimer = 17000; - uiRaptorCallTimer = urand(20000, 25000); - } - - void EnterCombat(Unit* /*who*/) OVERRIDE - { - if (instance) - instance->SetData(DATA_DRED_EVENT, IN_PROGRESS); - } - - void UpdateAI(uint32 diff) OVERRIDE - { - if (!UpdateVictim()) - return; - - if (uiBellowingRoarTimer <= diff) - { - DoCastAOE(SPELL_BELLOWING_ROAR, false); - uiBellowingRoarTimer = 40000; - } - else - uiBellowingRoarTimer -=diff; - - if (uiGrievousBiteTimer <= diff) - { - DoCastVictim(SPELL_GRIEVOUS_BITE, false); - uiGrievousBiteTimer = 20000; - } - else - uiGrievousBiteTimer -= diff; - - if (uiManglingSlashTimer <= diff) - { - DoCastVictim(SPELL_MANGLING_SLASH, false); - uiManglingSlashTimer = 20000; - } - else - uiManglingSlashTimer -= diff; - - if (uiFearsomeRoarTimer <= diff) - { - DoCastAOE(SPELL_FEARSOME_ROAR, false); - uiFearsomeRoarTimer = urand(16000, 18000); - } - else - uiFearsomeRoarTimer -= diff; - - if (uiPiercingSlashTimer <= diff) - { - DoCastVictim(SPELL_PIERCING_SLASH, false); - uiPiercingSlashTimer = 20000; - } - else - uiPiercingSlashTimer -= diff; - - if (uiRaptorCallTimer <= diff) - { - DoCastVictim(SPELL_RAPTOR_CALL, false); - - float x, y, z; - - me->GetClosePoint(x, y, z, me->GetObjectSize() / 3, 10.0f); - me->SummonCreature(RAND(NPC_RAPTOR_1, NPC_RAPTOR_2), x, y, z, 0, TEMPSUMMON_DEAD_DESPAWN, 1000); - - uiRaptorCallTimer = urand(20000, 25000); - } - else - uiRaptorCallTimer -= diff; - - DoMeleeAttackIfReady(); - } - - void DoAction(int32 action) OVERRIDE - { - if (action == ACTION_RAPTOR_KILLED) - ++raptorsKilled; - } - - uint32 GetData(uint32 type) const OVERRIDE - { - if (type == DATA_KING_DRED) - return raptorsKilled; - - return 0; - } - - void JustDied(Unit* /*killer*/) OVERRIDE - { - if (instance) - instance->SetData(DATA_DRED_EVENT, DONE); - } - }; - - CreatureAI* GetAI(Creature* creature) const OVERRIDE - { - return new boss_dredAI(creature); - } -}; - -class npc_drakkari_gutripper : public CreatureScript -{ - public: - npc_drakkari_gutripper() : CreatureScript("npc_drakkari_gutripper") { } - - struct npc_drakkari_gutripperAI : public ScriptedAI - { - npc_drakkari_gutripperAI(Creature* creature) : ScriptedAI(creature) - { - instance = me->GetInstanceScript(); - } - - InstanceScript* instance; - - uint32 GutRipTimer; - - void Reset() OVERRIDE - { - GutRipTimer = urand(10000, 15000); - } - - void UpdateAI(uint32 diff) OVERRIDE - { - if (!UpdateVictim()) - return; - - if (GutRipTimer <= diff) - { - DoCastVictim(SPELL_GUT_RIP, false); - GutRipTimer = urand(10000, 15000); - } - else - GutRipTimer -= diff; - - DoMeleeAttackIfReady(); - } - - void JustDied(Unit* /*killer*/) OVERRIDE - { - if (Creature* Dred = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_DRED))) - Dred->AI()->DoAction(ACTION_RAPTOR_KILLED); - } - }; - - CreatureAI* GetAI(Creature* creature) const OVERRIDE - { - return new npc_drakkari_gutripperAI(creature); - } -}; - -class npc_drakkari_scytheclaw : public CreatureScript -{ - public: - npc_drakkari_scytheclaw() : CreatureScript("npc_drakkari_scytheclaw") { } - - struct npc_drakkari_scytheclawAI : public ScriptedAI - { - npc_drakkari_scytheclawAI(Creature* creature) : ScriptedAI(creature) - { - instance = me->GetInstanceScript(); - } - - InstanceScript* instance; - - uint32 uiRendTimer; - - void Reset() OVERRIDE - { - uiRendTimer = urand(10000, 15000); - } - - void UpdateAI(uint32 diff) OVERRIDE - { - if (!UpdateVictim()) - return; - - if (uiRendTimer <= diff) - { - DoCastVictim(SPELL_REND, false); - uiRendTimer = urand(10000, 15000); - } - else - uiRendTimer -= diff; - - DoMeleeAttackIfReady(); - } - - void JustDied(Unit* /*killer*/) OVERRIDE - { - if (Creature* Dred = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_DRED))) - Dred->AI()->DoAction(ACTION_RAPTOR_KILLED); - } - }; - - CreatureAI* GetAI(Creature* creature) const OVERRIDE - { - return new npc_drakkari_scytheclawAI(creature); - } -}; - -class achievement_king_dred : public AchievementCriteriaScript -{ - public: - achievement_king_dred() : AchievementCriteriaScript("achievement_king_dred") - { - } - - bool OnCheck(Player* /*player*/, Unit* target) OVERRIDE - { - if (!target) - return false; - - if (Creature* Dred = target->ToCreature()) - if (Dred->AI()->GetData(DATA_KING_DRED) >= 6) - return true; - - return false; - } -}; - -void AddSC_boss_dred() -{ - new boss_dred; - new npc_drakkari_gutripper; - new npc_drakkari_scytheclaw; - new achievement_king_dred(); -} diff --git a/src/server/scripts/Northrend/DraktharonKeep/boss_king_dred.cpp b/src/server/scripts/Northrend/DraktharonKeep/boss_king_dred.cpp new file mode 100644 index 00000000000..de3ee0f2bea --- /dev/null +++ b/src/server/scripts/Northrend/DraktharonKeep/boss_king_dred.cpp @@ -0,0 +1,301 @@ +/* + * Copyright (C) 2008-2013 TrinityCore + * + * 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 + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +/* + * Comment: MAYBE need more improve the "Raptor Call". + */ + +#include "ScriptMgr.h" +#include "ScriptedCreature.h" +#include "drak_tharon_keep.h" + +enum Spells +{ + SPELL_BELLOWING_ROAR = 22686, // fears the group, can be resisted/dispelled + SPELL_GRIEVOUS_BITE = 48920, + SPELL_MANGLING_SLASH = 48873, //casted on the current tank, adds debuf + SPELL_FEARSOME_ROAR = 48849, + H_SPELL_FEARSOME_ROAR = 59422, //Not stacking, debuff + SPELL_PIERCING_SLASH = 48878, //debuff -->Armor reduced by 75% + SPELL_RAPTOR_CALL = 59416, //dummy + SPELL_GUT_RIP = 49710, + SPELL_REND = 13738 +}; + +enum Misc +{ + ACTION_RAPTOR_KILLED = 1, + DATA_RAPTORS_KILLED = 2 +}; + +class boss_king_dred : public CreatureScript +{ + public: + boss_king_dred() : CreatureScript("boss_king_dred") { } + + struct boss_king_dredAI : public ScriptedAI + { + boss_king_dredAI(Creature* creature) : ScriptedAI(creature) + { + instance = me->GetInstanceScript(); + } + + uint32 uiBellowingRoarTimer; + uint32 uiGrievousBiteTimer; + uint32 uiManglingSlashTimer; + uint32 uiFearsomeRoarTimer; + uint32 uiPiercingSlashTimer; + uint32 uiRaptorCallTimer; + uint8 raptorsKilled; + + InstanceScript* instance; + + void Reset() OVERRIDE + { + if (instance) + instance->SetData(DATA_KING_DRED, NOT_STARTED); + + uiBellowingRoarTimer = 33000; + uiGrievousBiteTimer = 20000; + uiManglingSlashTimer = 18500; + uiFearsomeRoarTimer = urand(10000, 20000); + uiPiercingSlashTimer = 17000; + uiRaptorCallTimer = urand(20000, 25000); + } + + void EnterCombat(Unit* /*who*/) OVERRIDE + { + if (instance) + instance->SetData(DATA_KING_DRED, IN_PROGRESS); + } + + void UpdateAI(uint32 diff) OVERRIDE + { + if (!UpdateVictim()) + return; + + if (uiBellowingRoarTimer <= diff) + { + DoCastAOE(SPELL_BELLOWING_ROAR, false); + uiBellowingRoarTimer = 40000; + } + else + uiBellowingRoarTimer -=diff; + + if (uiGrievousBiteTimer <= diff) + { + DoCastVictim(SPELL_GRIEVOUS_BITE, false); + uiGrievousBiteTimer = 20000; + } + else + uiGrievousBiteTimer -= diff; + + if (uiManglingSlashTimer <= diff) + { + DoCastVictim(SPELL_MANGLING_SLASH, false); + uiManglingSlashTimer = 20000; + } + else + uiManglingSlashTimer -= diff; + + if (uiFearsomeRoarTimer <= diff) + { + DoCastAOE(SPELL_FEARSOME_ROAR, false); + uiFearsomeRoarTimer = urand(16000, 18000); + } + else + uiFearsomeRoarTimer -= diff; + + if (uiPiercingSlashTimer <= diff) + { + DoCastVictim(SPELL_PIERCING_SLASH, false); + uiPiercingSlashTimer = 20000; + } + else + uiPiercingSlashTimer -= diff; + + if (uiRaptorCallTimer <= diff) + { + DoCastVictim(SPELL_RAPTOR_CALL, false); + + float x, y, z; + + me->GetClosePoint(x, y, z, me->GetObjectSize() / 3, 10.0f); + me->SummonCreature(RAND(NPC_DRAKKARI_GUTRIPPER, NPC_DRAKKARI_SCYTHECLAW), x, y, z, 0, TEMPSUMMON_DEAD_DESPAWN, 1000); + + uiRaptorCallTimer = urand(20000, 25000); + } + else + uiRaptorCallTimer -= diff; + + DoMeleeAttackIfReady(); + } + + void DoAction(int32 action) OVERRIDE + { + if (action == ACTION_RAPTOR_KILLED) + ++raptorsKilled; + } + + uint32 GetData(uint32 type) const OVERRIDE + { + if (type == DATA_RAPTORS_KILLED) + return raptorsKilled; + + return 0; + } + + void JustDied(Unit* /*killer*/) OVERRIDE + { + if (instance) + instance->SetData(DATA_KING_DRED, DONE); + } + }; + + CreatureAI* GetAI(Creature* creature) const OVERRIDE + { + return GetDrakTharonKeepAI(creature); + } +}; + +class npc_drakkari_gutripper : public CreatureScript +{ + public: + npc_drakkari_gutripper() : CreatureScript("npc_drakkari_gutripper") { } + + struct npc_drakkari_gutripperAI : public ScriptedAI + { + npc_drakkari_gutripperAI(Creature* creature) : ScriptedAI(creature) + { + instance = me->GetInstanceScript(); + } + + InstanceScript* instance; + + uint32 GutRipTimer; + + void Reset() OVERRIDE + { + GutRipTimer = urand(10000, 15000); + } + + void UpdateAI(uint32 diff) OVERRIDE + { + if (!UpdateVictim()) + return; + + if (GutRipTimer <= diff) + { + DoCastVictim(SPELL_GUT_RIP, false); + GutRipTimer = urand(10000, 15000); + } + else + GutRipTimer -= diff; + + DoMeleeAttackIfReady(); + } + + void JustDied(Unit* /*killer*/) OVERRIDE + { + if (Creature* Dred = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_KING_DRED))) + Dred->AI()->DoAction(ACTION_RAPTOR_KILLED); + } + }; + + CreatureAI* GetAI(Creature* creature) const OVERRIDE + { + return GetDrakTharonKeepAI(creature); + } +}; + +class npc_drakkari_scytheclaw : public CreatureScript +{ + public: + npc_drakkari_scytheclaw() : CreatureScript("npc_drakkari_scytheclaw") { } + + struct npc_drakkari_scytheclawAI : public ScriptedAI + { + npc_drakkari_scytheclawAI(Creature* creature) : ScriptedAI(creature) + { + instance = me->GetInstanceScript(); + } + + InstanceScript* instance; + + uint32 uiRendTimer; + + void Reset() OVERRIDE + { + uiRendTimer = urand(10000, 15000); + } + + void UpdateAI(uint32 diff) OVERRIDE + { + if (!UpdateVictim()) + return; + + if (uiRendTimer <= diff) + { + DoCastVictim(SPELL_REND, false); + uiRendTimer = urand(10000, 15000); + } + else + uiRendTimer -= diff; + + DoMeleeAttackIfReady(); + } + + void JustDied(Unit* /*killer*/) OVERRIDE + { + if (Creature* Dred = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_KING_DRED))) + Dred->AI()->DoAction(ACTION_RAPTOR_KILLED); + } + }; + + CreatureAI* GetAI(Creature* creature) const OVERRIDE + { + return GetDrakTharonKeepAI(creature); + } +}; + +class achievement_king_dred : public AchievementCriteriaScript +{ + public: + achievement_king_dred() : AchievementCriteriaScript("achievement_king_dred") + { + } + + bool OnCheck(Player* /*player*/, Unit* target) OVERRIDE + { + if (!target) + return false; + + if (Creature* Dred = target->ToCreature()) + if (Dred->AI()->GetData(DATA_RAPTORS_KILLED) >= 6) + return true; + + return false; + } +}; + +void AddSC_boss_king_dred() +{ + new boss_king_dred; + new npc_drakkari_gutripper; + new npc_drakkari_scytheclaw; + new achievement_king_dred(); +} diff --git a/src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp b/src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp index 120d52a3050..785038137d9 100644 --- a/src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp +++ b/src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp @@ -32,8 +32,7 @@ enum Misc enum Creatures { - NPC_CRYSTAL_CHANNEL_TARGET = 26712, - NPC_FETID_TROLL_CORPSE = 27597, + NPC_FETID_TROLL_CORPSE = 27598, NPC_RISEN_SHADOWCASTER = 27600, NPC_HULKING_CORPSE = 27597 }; @@ -77,13 +76,11 @@ public: struct boss_novosAI : public BossAI { - boss_novosAI(Creature* creature) : BossAI(creature, DATA_NOVOS_EVENT) {} + boss_novosAI(Creature* creature) : BossAI(creature, DATA_NOVOS) { } void Reset() OVERRIDE { - events.Reset(); - summons.DespawnAll(); - instance->SetData(DATA_NOVOS_EVENT, NOT_STARTED); + _Reset(); _ohNovos = true; _crystalHandlerCount = 0; @@ -94,9 +91,7 @@ public: void EnterCombat(Unit* /* victim */) OVERRIDE { - me->setActive(true); - DoZoneInCombat(); - instance->SetData(DATA_NOVOS_EVENT, IN_PROGRESS); + _EnterCombat(); SetCrystalsStatus(true); SetSummonerStatus(true); @@ -148,7 +143,6 @@ public: } void MoveInLineOfSight(Unit* who) OVERRIDE - { BossAI::MoveInLineOfSight(who); @@ -260,7 +254,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_novosAI(creature); + return GetDrakTharonKeepAI(creature); } }; @@ -323,7 +317,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new npc_crystal_channel_targetAI(creature); + return GetDrakTharonKeepAI(creature); } }; diff --git a/src/server/scripts/Northrend/DraktharonKeep/boss_tharon_ja.cpp b/src/server/scripts/Northrend/DraktharonKeep/boss_tharon_ja.cpp index 63b23eb594e..e090f3db7c0 100644 --- a/src/server/scripts/Northrend/DraktharonKeep/boss_tharon_ja.cpp +++ b/src/server/scripts/Northrend/DraktharonKeep/boss_tharon_ja.cpp @@ -95,16 +95,13 @@ public: uiShadowVolleyTimer = urand(8*IN_MILLISECONDS, 10*IN_MILLISECONDS); Phase = SKELETAL; me->SetDisplayId(me->GetNativeDisplayId()); - if (instance) - instance->SetData(DATA_THARON_JA_EVENT, NOT_STARTED); + instance->SetBossState(DATA_THARON_JA, NOT_STARTED); } void EnterCombat(Unit* /*who*/) OVERRIDE { Talk(SAY_AGGRO); - - if (instance) - instance->SetData(DATA_THARON_JA_EVENT, IN_PROGRESS); + instance->SetBossState(DATA_THARON_JA, IN_PROGRESS); } void UpdateAI(uint32 diff) OVERRIDE @@ -239,14 +236,14 @@ public: DoCast(me, SPELL_ACHIEVEMENT_CHECK); - instance->SetData(DATA_THARON_JA_EVENT, DONE); + instance->SetBossState(DATA_THARON_JA, DONE); } } }; CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_tharon_jaAI(creature); + return GetDrakTharonKeepAI(creature); } }; diff --git a/src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp b/src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp index f0e72d16f58..d126340ef51 100644 --- a/src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp +++ b/src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp @@ -99,16 +99,13 @@ public: me->RemoveAura(DUNGEON_MODE(SPELL_CONSUME_AURA, H_SPELL_CONSUME_AURA)); - if (instance) - instance->SetData(DATA_TROLLGORE_EVENT, NOT_STARTED); + instance->SetData(DATA_TROLLGORE, NOT_STARTED); } void EnterCombat(Unit* /*who*/) OVERRIDE { Talk(SAY_AGGRO); - - if (instance) - instance->SetData(DATA_TROLLGORE_EVENT, IN_PROGRESS); + instance->SetBossState(DATA_TROLLGORE, IN_PROGRESS); } void UpdateAI(uint32 diff) OVERRIDE @@ -167,8 +164,7 @@ public: lSummons.DespawnAll(); - if (instance) - instance->SetData(DATA_TROLLGORE_EVENT, DONE); + instance->SetBossState(DATA_TROLLGORE, DONE); } uint32 GetData(uint32 type) const OVERRIDE @@ -197,7 +193,7 @@ public: CreatureAI* GetAI(Creature* creature) const OVERRIDE { - return new boss_trollgoreAI(creature); + return GetDrakTharonKeepAI(creature); } }; diff --git a/src/server/scripts/Northrend/DraktharonKeep/drak_tharon_keep.h b/src/server/scripts/Northrend/DraktharonKeep/drak_tharon_keep.h index e17cba4bccd..cc0fb9a0090 100644 --- a/src/server/scripts/Northrend/DraktharonKeep/drak_tharon_keep.h +++ b/src/server/scripts/Northrend/DraktharonKeep/drak_tharon_keep.h @@ -15,22 +15,26 @@ * with this program. If not, see . */ -#ifndef DEF_DRAK_THARON_H -#define DEF_DRAK_THARON_H -enum Data -{ - DATA_TROLLGORE_EVENT, - DATA_NOVOS_EVENT, - DATA_DRED_EVENT, - DATA_THARON_JA_EVENT, - DATA_KING_DRED_ACHIEV -}; -enum Data64 +#ifndef DRAK_THARON_KEEP_H_ +#define DRAK_THARON_KEEP_H_ + +#include "Map.h" +#include "Creature.h" + +#define DrakTharonKeepScriptName "instance_drak_tharon_keep" + +uint32 const EncounterCount = 4; + +enum DataTypes { - DATA_TROLLGORE, - DATA_NOVOS, - DATA_DRED, - DATA_THARON_JA, + // Encounter States/Boss GUIDs + DATA_TROLLGORE = 0, + DATA_NOVOS = 1, + DATA_KING_DRED = 2, + DATA_THARON_JA = 3, + + // Additional data + //DATA_KING_DRED_ACHIEV, DATA_NOVOS_CRYSTAL_1, DATA_NOVOS_CRYSTAL_2, @@ -43,4 +47,39 @@ enum Data64 ACTION_CRYSTAL_HANDLER_DIED }; -#endif + +enum CreatureIds +{ + NPC_TROLLGORE = 26630, + NPC_NOVOS = 26631, + NPC_KING_DRED = 27483, + NPC_THARON_JA = 26632, + + // Novos + NPC_CRYSTAL_CHANNEL_TARGET = 26712, + NPC_CRYSTAL_HANDLER = 26627, + + // King Dred + NPC_DRAKKARI_GUTRIPPER = 26641, + NPC_DRAKKARI_SCYTHECLAW = 26628 +}; + +enum GameObjectIds +{ + GO_NOVOS_CRYSTAL_1 = 189299, + GO_NOVOS_CRYSTAL_2 = 189300, + GO_NOVOS_CRYSTAL_3 = 189301, + GO_NOVOS_CRYSTAL_4 = 189302 +}; + +template +AI* GetDrakTharonKeepAI(Creature* creature) +{ + if (InstanceMap* instance = creature->GetMap()->ToInstanceMap()) + if (instance->GetInstanceScript()) + if (instance->GetScriptId() == sObjectMgr->GetScriptId(DrakTharonKeepScriptName)) + return new AI(creature); + return NULL; +} + +#endif // DRAK_THARON_KEEP_H_ diff --git a/src/server/scripts/Northrend/DraktharonKeep/instance_drak_tharon_keep.cpp b/src/server/scripts/Northrend/DraktharonKeep/instance_drak_tharon_keep.cpp index 61dfced65ed..ed7647be89c 100644 --- a/src/server/scripts/Northrend/DraktharonKeep/instance_drak_tharon_keep.cpp +++ b/src/server/scripts/Northrend/DraktharonKeep/instance_drak_tharon_keep.cpp @@ -20,279 +20,185 @@ #include "InstanceScript.h" #include "drak_tharon_keep.h" -#define MAX_ENCOUNTER 4 - -/* Drak'Tharon Keep encounters: -0 - Trollgore -1 - Novos -2 - King Dred -3 - Tharon Ja -*/ - -enum Creatures -{ - NPC_TROLLGORE = 26630, - NPC_NOVOS = 26631, - NPC_KING_DRED = 27483, - NPC_THARON_JA = 26632, - NPC_CRYSTAL_CHANNEL_TARGET = 26712, - NPC_CRYSTAL_HANDLER = 26627 -}; -enum GameObjects +class instance_drak_tharon_keep : public InstanceMapScript { - GO_NOVOS_CRYSTAL_1 = 189299, - GO_NOVOS_CRYSTAL_2 = 189300, - GO_NOVOS_CRYSTAL_3 = 189301, - GO_NOVOS_CRYSTAL_4 = 189302 -}; -enum Achievements -{ - ACM_CRITERIA_OH_NOVOS = 7361 -}; - -class instance_drak_tharon : public InstanceMapScript -{ -public: - instance_drak_tharon() : InstanceMapScript("instance_drak_tharon", 600) { } - - struct instance_drak_tharon_InstanceScript : public InstanceScript - { - instance_drak_tharon_InstanceScript(Map* map) : InstanceScript(map) {} - - uint8 dredAchievCounter; - - uint64 trollgoreGUID; - uint64 novosGUID; - uint64 dredGUID; - uint64 tharonJaGUID; - - uint64 novosCrystalGUID1; - uint64 novosCrystalGUID2; - uint64 novosCrystalGUID3; - uint64 novosCrystalGUID4; - - uint64 novosSummonerGUID1; - uint64 novosSummonerGUID2; - uint64 novosSummonerGUID3; - uint64 novosSummonerGUID4; - - uint16 m_auiEncounter[MAX_ENCOUNTER]; + public: + instance_drak_tharon_keep() : InstanceMapScript(DrakTharonKeepScriptName, 600) { } - std::string str_data; - - void Initialize() - { - memset(&m_auiEncounter, 0, sizeof(m_auiEncounter)); - - dredAchievCounter = 0; - - trollgoreGUID = 0; - novosGUID = 0; - dredGUID = 0; - tharonJaGUID = 0; - - novosCrystalGUID1 = 0; - novosCrystalGUID2 = 0; - novosCrystalGUID3 = 0; - novosCrystalGUID4 = 0; - - novosSummonerGUID1 = 0; - novosSummonerGUID2 = 0; - novosSummonerGUID3 = 0; - novosSummonerGUID4 = 0; - } - - bool IsEncounterInProgress() const + struct instance_drak_tharon_keep_InstanceScript : public InstanceScript { - for (uint8 i = 0; i < MAX_ENCOUNTER; ++i) - if (m_auiEncounter[i] == IN_PROGRESS) - return true; + instance_drak_tharon_keep_InstanceScript(Map* map) : InstanceScript(map) + { + SetBossNumber(EncounterCount); - return false; - } + TrollgoreGUID = 0; + NovosGUID = 0; + KingDredGUID = 0; + TharonJaGUID = 0; - void OnGameObjectCreate(GameObject* go) - { - switch (go->GetEntry()) - { - case GO_NOVOS_CRYSTAL_1: - novosCrystalGUID1 = go->GetGUID(); - go->SetGoState(GO_STATE_READY); - break; - case GO_NOVOS_CRYSTAL_2: - novosCrystalGUID2 = go->GetGUID(); - go->SetGoState(GO_STATE_READY); - break; - case GO_NOVOS_CRYSTAL_3: - novosCrystalGUID3 = go->GetGUID(); - go->SetGoState(GO_STATE_READY); - break; - case GO_NOVOS_CRYSTAL_4: - novosCrystalGUID4 = go->GetGUID(); - go->SetGoState(GO_STATE_READY); - break; + memset(NovosCrystalGUIDs, 0, 4 * sizeof(uint64)); + memset(NovosSummonerGUIDs, 0, 4 * sizeof(uint64)); } - } - void OnCreatureCreate(Creature* creature) - { - switch (creature->GetEntry()) + void OnCreatureCreate(Creature* creature) { - case NPC_TROLLGORE: - trollgoreGUID = creature->GetGUID(); - break; - case NPC_NOVOS: - novosGUID = creature->GetGUID(); - break; - case NPC_KING_DRED: - dredGUID = creature->GetGUID(); - break; - case NPC_THARON_JA: - tharonJaGUID = creature->GetGUID(); - break; - case NPC_CRYSTAL_CHANNEL_TARGET: - InitializeNovosSummoner(creature); - break; + switch (creature->GetEntry()) + { + case NPC_TROLLGORE: + TrollgoreGUID = creature->GetGUID(); + break; + case NPC_NOVOS: + NovosGUID = creature->GetGUID(); + break; + case NPC_KING_DRED: + KingDredGUID = creature->GetGUID(); + break; + case NPC_THARON_JA: + TharonJaGUID = creature->GetGUID(); + break; + case NPC_CRYSTAL_CHANNEL_TARGET: + InitializeNovosSummoner(creature); + break; + default: + break; + } } - } - - void InitializeNovosSummoner(Creature* creature) - { - float x = creature->GetPositionX(); - float y = creature->GetPositionY(); - float z = creature->GetPositionZ(); - - if (x < -374.0f && x > -379.0f && y > -820.0f && y < -815.0f && z < 60.0f && z > 58.0f) - novosSummonerGUID1 = creature->GetGUID(); - else if (x < -379.0f && x > -385.0f && y > -820.0f && y < -815.0f && z < 60.0f && z > 58.0f) - novosSummonerGUID2 = creature->GetGUID(); - else if (x < -374.0f && x > -385.0f && y > -827.0f && y < -820.0f && z < 60.0f && z > 58.0f) - novosSummonerGUID3 = creature->GetGUID(); - else if (x < -338.0f && x > -344.0f && y > -727.0f && y < 721.0f && z < 30.0f && z > 26.0f) - novosSummonerGUID4 = creature->GetGUID(); - } - uint64 GetData64(uint32 identifier) const OVERRIDE - { - switch (identifier) + void OnGameObjectCreate(GameObject* go) { - case DATA_TROLLGORE: return trollgoreGUID; - case DATA_NOVOS: return novosGUID; - case DATA_DRED: return dredGUID; - case DATA_THARON_JA: return tharonJaGUID; - case DATA_NOVOS_CRYSTAL_1: return novosCrystalGUID1; - case DATA_NOVOS_CRYSTAL_2: return novosCrystalGUID2; - case DATA_NOVOS_CRYSTAL_3: return novosCrystalGUID3; - case DATA_NOVOS_CRYSTAL_4: return novosCrystalGUID4; - case DATA_NOVOS_SUMMONER_1: return novosSummonerGUID1; - case DATA_NOVOS_SUMMONER_2: return novosSummonerGUID2; - case DATA_NOVOS_SUMMONER_3: return novosSummonerGUID3; - case DATA_NOVOS_SUMMONER_4: return novosSummonerGUID4; + switch (go->GetEntry()) + { + case GO_NOVOS_CRYSTAL_1: + NovosCrystalGUIDs[0] = go->GetGUID(); + go->SetGoState(GO_STATE_READY); + break; + case GO_NOVOS_CRYSTAL_2: + NovosCrystalGUIDs[1] = go->GetGUID(); + go->SetGoState(GO_STATE_READY); + break; + case GO_NOVOS_CRYSTAL_3: + NovosCrystalGUIDs[2] = go->GetGUID(); + go->SetGoState(GO_STATE_READY); + break; + case GO_NOVOS_CRYSTAL_4: + NovosCrystalGUIDs[3] = go->GetGUID(); + go->SetGoState(GO_STATE_READY); + break; + default: + break; + } } - return 0; - } - - void SetData(uint32 type, uint32 data) OVERRIDE - { - switch (type) + void InitializeNovosSummoner(Creature* creature) { - case DATA_TROLLGORE_EVENT: - m_auiEncounter[0] = data; - break; - case DATA_NOVOS_EVENT: - m_auiEncounter[1] = data; - break; - case DATA_DRED_EVENT: - m_auiEncounter[2] = data; - break; - case DATA_THARON_JA_EVENT: - m_auiEncounter[3] = data; - break; - - case DATA_KING_DRED_ACHIEV: - dredAchievCounter = data; - break; + float x = creature->GetPositionX(); + float y = creature->GetPositionY(); + float z = creature->GetPositionZ(); + + if (x < -374.0f && x > -379.0f && y > -820.0f && y < -815.0f && z < 60.0f && z > 58.0f) + NovosCrystalGUIDs[0] = creature->GetGUID(); + else if (x < -379.0f && x > -385.0f && y > -820.0f && y < -815.0f && z < 60.0f && z > 58.0f) + NovosCrystalGUIDs[1] = creature->GetGUID(); + else if (x < -374.0f && x > -385.0f && y > -827.0f && y < -820.0f && z < 60.0f && z > 58.0f) + NovosCrystalGUIDs[2] = creature->GetGUID(); + else if (x < -338.0f && x > -344.0f && y > -727.0f && y < 721.0f && z < 30.0f && z > 26.0f) + NovosCrystalGUIDs[3] = creature->GetGUID(); } - if (data == DONE) + uint64 GetData64(uint32 type) const OVERRIDE { - SaveToDB(); + switch (type) + { + case DATA_TROLLGORE: + return TrollgoreGUID; + case DATA_NOVOS: + return NovosGUID; + case DATA_KING_DRED: + return KingDredGUID; + case DATA_THARON_JA: + return TharonJaGUID; + case DATA_NOVOS_CRYSTAL_1: + case DATA_NOVOS_CRYSTAL_2: + case DATA_NOVOS_CRYSTAL_3: + case DATA_NOVOS_CRYSTAL_4: + return NovosCrystalGUIDs[type - DATA_NOVOS_CRYSTAL_1]; + case DATA_NOVOS_SUMMONER_1: + case DATA_NOVOS_SUMMONER_2: + case DATA_NOVOS_SUMMONER_3: + case DATA_NOVOS_SUMMONER_4: + return NovosSummonerGUIDs[type - DATA_NOVOS_SUMMONER_1]; + } + + return 0; } - } - uint32 GetData(uint32 type) const OVERRIDE - { - switch (type) + void OnUnitDeath(Unit* unit) { - case DATA_TROLLGORE_EVENT: return m_auiEncounter[0]; - case DATA_NOVOS_EVENT: return m_auiEncounter[1]; - case DATA_DRED_EVENT: return m_auiEncounter[2]; - case DATA_THARON_JA_EVENT: return m_auiEncounter[3]; - case DATA_KING_DRED_ACHIEV: return dredAchievCounter; + if (unit->GetEntry() == NPC_CRYSTAL_HANDLER) + if (Creature* novos = instance->GetCreature(NovosGUID)) + novos->AI()->DoAction(ACTION_CRYSTAL_HANDLER_DIED); } - return 0; - } - std::string GetSaveData() - { - OUT_SAVE_INST_DATA; - - std::ostringstream saveStream; - saveStream << "D K " << m_auiEncounter[0] << ' ' << m_auiEncounter[1] << ' ' - << m_auiEncounter[2] << ' ' << m_auiEncounter[3]; + std::string GetSaveData() + { + OUT_SAVE_INST_DATA; - OUT_SAVE_INST_DATA_COMPLETE; - return saveStream.str(); - } + std::ostringstream saveStream; + saveStream << "D K " << GetBossSaveData(); - void OnUnitDeath(Unit* unit) - { - if (unit->GetEntry() == NPC_CRYSTAL_HANDLER) - if (novosGUID) - if (Creature* novos = instance->GetCreature(novosGUID)) - novos->AI()->DoAction(ACTION_CRYSTAL_HANDLER_DIED); - } + OUT_SAVE_INST_DATA_COMPLETE; + return saveStream.str(); + } - void Load(const char* in) - { - if (!in) + void Load(char const* str) { - OUT_LOAD_INST_DATA_FAIL; - return; + 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 == 'D' && dataHead2 == 'K') + { + 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; } - OUT_LOAD_INST_DATA(in); - - char dataHead1, dataHead2; - uint16 data0, data1, data2, data3; + protected: + uint64 TrollgoreGUID; + uint64 NovosGUID; + uint64 KingDredGUID; + uint64 TharonJaGUID; - std::istringstream loadStream(in); - loadStream >> dataHead1 >> dataHead2 >> data0 >> data1 >> data2 >> data3; - - if (dataHead1 == 'D' && dataHead2 == 'K') - { - m_auiEncounter[0] = data0; - m_auiEncounter[1] = data1; - m_auiEncounter[2] = data2; - m_auiEncounter[3] = data3; + uint64 NovosCrystalGUIDs[4]; + uint64 NovosSummonerGUIDs[4]; + }; - for (uint8 i = 0; i < MAX_ENCOUNTER; ++i) - if (m_auiEncounter[i] == IN_PROGRESS) - m_auiEncounter[i] = NOT_STARTED; - } else OUT_LOAD_INST_DATA_FAIL; - - OUT_LOAD_INST_DATA_COMPLETE; + InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE + { + return new instance_drak_tharon_keep_InstanceScript(map); } - }; - - InstanceScript* GetInstanceScript(InstanceMap* map) const OVERRIDE - { - return new instance_drak_tharon_InstanceScript(map); - } }; -void AddSC_instance_drak_tharon() +void AddSC_instance_drak_tharon_keep() { - new instance_drak_tharon; + new instance_drak_tharon_keep(); } -- cgit v1.2.3 From 3b78023100109db9e70615162de114e606f1a2ce Mon Sep 17 00:00:00 2001 From: MitchesD Date: Mon, 29 Jul 2013 13:11:07 +0200 Subject: Scripts/DrakTharonKeep: Update King Dred to use events Closes #10385 Signed-off-by: joschiwald --- .../2013_07_29_01_world_spelldifficulty_dbc.sql | 3 + .../Northrend/DraktharonKeep/boss_king_dred.cpp | 179 ++++++++++----------- 2 files changed, 85 insertions(+), 97 deletions(-) create mode 100644 sql/updates/world/2013_07_29_01_world_spelldifficulty_dbc.sql (limited to 'src/server/scripts') diff --git a/sql/updates/world/2013_07_29_01_world_spelldifficulty_dbc.sql b/sql/updates/world/2013_07_29_01_world_spelldifficulty_dbc.sql new file mode 100644 index 00000000000..56764385765 --- /dev/null +++ b/sql/updates/world/2013_07_29_01_world_spelldifficulty_dbc.sql @@ -0,0 +1,3 @@ +DELETE FROM `spelldifficulty_dbc` WHERE `id` = 48849; +INSERT INTO `spelldifficulty_dbc` (`id`, `spellid0`, `spellid1`) VALUES +(48849, 48849, 59422); diff --git a/src/server/scripts/Northrend/DraktharonKeep/boss_king_dred.cpp b/src/server/scripts/Northrend/DraktharonKeep/boss_king_dred.cpp index de3ee0f2bea..f8f0752184e 100644 --- a/src/server/scripts/Northrend/DraktharonKeep/boss_king_dred.cpp +++ b/src/server/scripts/Northrend/DraktharonKeep/boss_king_dred.cpp @@ -27,11 +27,10 @@ enum Spells { SPELL_BELLOWING_ROAR = 22686, // fears the group, can be resisted/dispelled SPELL_GRIEVOUS_BITE = 48920, - SPELL_MANGLING_SLASH = 48873, //casted on the current tank, adds debuf + SPELL_MANGLING_SLASH = 48873, // casted on the current tank, adds debuf SPELL_FEARSOME_ROAR = 48849, - H_SPELL_FEARSOME_ROAR = 59422, //Not stacking, debuff - SPELL_PIERCING_SLASH = 48878, //debuff -->Armor reduced by 75% - SPELL_RAPTOR_CALL = 59416, //dummy + SPELL_PIERCING_SLASH = 48878, // debuff --> Armor reduced by 75% + SPELL_RAPTOR_CALL = 59416, // dummy SPELL_GUT_RIP = 49710, SPELL_REND = 13738 }; @@ -42,107 +41,40 @@ enum Misc DATA_RAPTORS_KILLED = 2 }; +enum Events +{ + EVENT_BELLOWING_ROAR = 1, + EVENT_GRIEVOUS_BITE, + EVENT_MANGLING_SLASH, + EVENT_FEARSOME_ROAR, + EVENT_PIERCING_SLASH, + EVENT_RAPTOR_CALL +}; + class boss_king_dred : public CreatureScript { public: boss_king_dred() : CreatureScript("boss_king_dred") { } - struct boss_king_dredAI : public ScriptedAI + struct boss_king_dredAI : public BossAI { - boss_king_dredAI(Creature* creature) : ScriptedAI(creature) - { - instance = me->GetInstanceScript(); - } - - uint32 uiBellowingRoarTimer; - uint32 uiGrievousBiteTimer; - uint32 uiManglingSlashTimer; - uint32 uiFearsomeRoarTimer; - uint32 uiPiercingSlashTimer; - uint32 uiRaptorCallTimer; - uint8 raptorsKilled; - - InstanceScript* instance; + boss_king_dredAI(Creature* creature) : BossAI(creature, DATA_KING_DRED) { } void Reset() OVERRIDE { - if (instance) - instance->SetData(DATA_KING_DRED, NOT_STARTED); - - uiBellowingRoarTimer = 33000; - uiGrievousBiteTimer = 20000; - uiManglingSlashTimer = 18500; - uiFearsomeRoarTimer = urand(10000, 20000); - uiPiercingSlashTimer = 17000; - uiRaptorCallTimer = urand(20000, 25000); + _Reset(); } void EnterCombat(Unit* /*who*/) OVERRIDE { - if (instance) - instance->SetData(DATA_KING_DRED, IN_PROGRESS); - } - - void UpdateAI(uint32 diff) OVERRIDE - { - if (!UpdateVictim()) - return; - - if (uiBellowingRoarTimer <= diff) - { - DoCastAOE(SPELL_BELLOWING_ROAR, false); - uiBellowingRoarTimer = 40000; - } - else - uiBellowingRoarTimer -=diff; - - if (uiGrievousBiteTimer <= diff) - { - DoCastVictim(SPELL_GRIEVOUS_BITE, false); - uiGrievousBiteTimer = 20000; - } - else - uiGrievousBiteTimer -= diff; - - if (uiManglingSlashTimer <= diff) - { - DoCastVictim(SPELL_MANGLING_SLASH, false); - uiManglingSlashTimer = 20000; - } - else - uiManglingSlashTimer -= diff; - - if (uiFearsomeRoarTimer <= diff) - { - DoCastAOE(SPELL_FEARSOME_ROAR, false); - uiFearsomeRoarTimer = urand(16000, 18000); - } - else - uiFearsomeRoarTimer -= diff; - - if (uiPiercingSlashTimer <= diff) - { - DoCastVictim(SPELL_PIERCING_SLASH, false); - uiPiercingSlashTimer = 20000; - } - else - uiPiercingSlashTimer -= diff; - - if (uiRaptorCallTimer <= diff) - { - DoCastVictim(SPELL_RAPTOR_CALL, false); - - float x, y, z; - - me->GetClosePoint(x, y, z, me->GetObjectSize() / 3, 10.0f); - me->SummonCreature(RAND(NPC_DRAKKARI_GUTRIPPER, NPC_DRAKKARI_SCYTHECLAW), x, y, z, 0, TEMPSUMMON_DEAD_DESPAWN, 1000); - - uiRaptorCallTimer = urand(20000, 25000); - } - else - uiRaptorCallTimer -= diff; - - DoMeleeAttackIfReady(); + _EnterCombat(); + + events.ScheduleEvent(EVENT_BELLOWING_ROAR, 33000); + events.ScheduleEvent(EVENT_GRIEVOUS_BITE, 20000); + events.ScheduleEvent(EVENT_MANGLING_SLASH, 18500); + events.ScheduleEvent(EVENT_FEARSOME_ROAR, urand(10000, 20000)); + events.ScheduleEvent(EVENT_PIERCING_SLASH, 17000); + events.ScheduleEvent(EVENT_RAPTOR_CALL, urand(20000, 25000)); } void DoAction(int32 action) OVERRIDE @@ -161,9 +93,62 @@ class boss_king_dred : public CreatureScript void JustDied(Unit* /*killer*/) OVERRIDE { - if (instance) - instance->SetData(DATA_KING_DRED, DONE); + _JustDied(); + } + + 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_BELLOWING_ROAR: + DoCastAOE(SPELL_BELLOWING_ROAR); + events.ScheduleEvent(EVENT_BELLOWING_ROAR, 33000); + break; + case EVENT_GRIEVOUS_BITE: + DoCastVictim(SPELL_GRIEVOUS_BITE); + events.ScheduleEvent(EVENT_GRIEVOUS_BITE, 20000); + break; + case EVENT_MANGLING_SLASH: + DoCastVictim(SPELL_MANGLING_SLASH); + events.ScheduleEvent(EVENT_MANGLING_SLASH, 18500); + break; + case EVENT_FEARSOME_ROAR: + DoCastAOE(SPELL_FEARSOME_ROAR); + events.ScheduleEvent(EVENT_FEARSOME_ROAR, urand(10000, 20000)); + break; + case EVENT_PIERCING_SLASH: + DoCastVictim(SPELL_PIERCING_SLASH); + events.ScheduleEvent(EVENT_PIERCING_SLASH, 17000); + break; + case EVENT_RAPTOR_CALL: + DoCastVictim(SPELL_RAPTOR_CALL); + + float x, y, z; + + me->GetClosePoint(x, y, z, me->GetObjectSize() / 3, 10.0f); + me->SummonCreature(RAND(NPC_DRAKKARI_GUTRIPPER, NPC_DRAKKARI_SCYTHECLAW), x, y, z, 0, TEMPSUMMON_DEAD_DESPAWN, 1000); + events.ScheduleEvent(EVENT_RAPTOR_CALL, urand(20000, 25000)); + break; + default: + break; + } + } + + DoMeleeAttackIfReady(); } + + private: + uint8 raptorsKilled; }; CreatureAI* GetAI(Creature* creature) const OVERRIDE @@ -294,8 +279,8 @@ class achievement_king_dred : public AchievementCriteriaScript void AddSC_boss_king_dred() { - new boss_king_dred; - new npc_drakkari_gutripper; - new npc_drakkari_scytheclaw; + new boss_king_dred(); + new npc_drakkari_gutripper(); + new npc_drakkari_scytheclaw(); new achievement_king_dred(); } -- cgit v1.2.3 From 1bb3c4a2b4e3e974f09c0df478245f8daa3a677c Mon Sep 17 00:00:00 2001 From: Nay Date: Mon, 29 Jul 2013 14:24:33 +0100 Subject: Misc: Fix warnings and build Closes #10396 --- src/server/authserver/Main.cpp | 4 ++-- src/server/scripts/Spells/spell_dk.cpp | 4 ++-- src/server/scripts/Spells/spell_item.cpp | 4 ++-- src/server/scripts/Spells/spell_priest.cpp | 2 +- src/server/worldserver/Master.cpp | 10 ++++++++-- src/server/worldserver/RemoteAccess/RARunnable.cpp | 3 ++- src/tools/mmaps_generator/MapBuilder.cpp | 4 ++-- 7 files changed, 19 insertions(+), 12 deletions(-) (limited to 'src/server/scripts') diff --git a/src/server/authserver/Main.cpp b/src/server/authserver/Main.cpp index ac2cf1a80a9..9a6cc89fdd4 100644 --- a/src/server/authserver/Main.cpp +++ b/src/server/authserver/Main.cpp @@ -223,7 +223,7 @@ extern int main(int argc, char** argv) if (affinity & (1 << i)) CPU_SET(i, &mask); - if (int err = sched_setaffinity(0, sizeof(mask), &mask)) + if (sched_setaffinity(0, sizeof(mask), &mask)) TC_LOG_ERROR(LOG_FILTER_AUTHSERVER, "Can't set used processors (hex): %x, error: %s", affinity, strerror(errno)); else { @@ -235,7 +235,7 @@ extern int main(int argc, char** argv) if (highPriority) { - if (int err = setpriority(PRIO_PROCESS, 0, PROCESS_HIGH_PRIORITY)) + if (setpriority(PRIO_PROCESS, 0, PROCESS_HIGH_PRIORITY)) TC_LOG_ERROR(LOG_FILTER_AUTHSERVER, "Can't set authserver process priority class, error: %s", strerror(errno)); else TC_LOG_INFO(LOG_FILTER_AUTHSERVER, "authserver process priority class set to %i", getpriority(PRIO_PROCESS, 0)); diff --git a/src/server/scripts/Spells/spell_dk.cpp b/src/server/scripts/Spells/spell_dk.cpp index eb7ccc54c37..e1305d71b73 100644 --- a/src/server/scripts/Spells/spell_dk.cpp +++ b/src/server/scripts/Spells/spell_dk.cpp @@ -930,7 +930,7 @@ class spell_dk_presence : public SpellScriptLoader { AfterEffectApply += AuraEffectApplyFn(spell_dk_presence_AuraScript::HandleImprovedBloodPresence, EFFECT_0, SPELL_AURA_ANY, AURA_EFFECT_HANDLE_REAL); AfterEffectApply += AuraEffectApplyFn(spell_dk_presence_AuraScript::HandleImprovedFrostPresence, EFFECT_0, SPELL_AURA_ANY, AURA_EFFECT_HANDLE_REAL); - AfterEffectApply += AuraEffectApplyFn(spell_dk_presence_AuraScript::HandleImprovedUnholyPresence, EFFECT_0, SPELL_AURA_ANY, AURA_EFFECT_HANDLE_REAL); + AfterEffectApply += AuraEffectApplyFn(spell_dk_presence_AuraScript::HandleImprovedUnholyPresence, EFFECT_0, SPELL_AURA_ANY, AURA_EFFECT_HANDLE_REAL); AfterEffectRemove += AuraEffectRemoveFn(spell_dk_presence_AuraScript::HandleEffectRemove, EFFECT_0, SPELL_AURA_ANY, AURA_EFFECT_HANDLE_REAL); } }; @@ -985,7 +985,7 @@ class spell_dk_scent_of_blood : public SpellScriptLoader return true; } - void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) + void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/) { PreventDefaultAction(); GetTarget()->CastSpell(GetTarget(), SPELL_DK_SCENT_OF_BLOOD, true, NULL, aurEff); diff --git a/src/server/scripts/Spells/spell_item.cpp b/src/server/scripts/Spells/spell_item.cpp index 64fc835bff9..09be427d330 100644 --- a/src/server/scripts/Spells/spell_item.cpp +++ b/src/server/scripts/Spells/spell_item.cpp @@ -95,7 +95,7 @@ class spell_item_aegis_of_preservation : public SpellScriptLoader return true; } - void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) + void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/) { PreventDefaultAction(); GetTarget()->CastSpell(GetTarget(), SPELL_AEGIS_HEAL, true, NULL, aurEff); @@ -279,7 +279,7 @@ class spell_item_desperate_defense : public SpellScriptLoader return true; } - void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) + void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/) { PreventDefaultAction(); GetTarget()->CastSpell(GetTarget(), SPELL_DESPERATE_RAGE, true, NULL, aurEff); diff --git a/src/server/scripts/Spells/spell_priest.cpp b/src/server/scripts/Spells/spell_priest.cpp index 8d43f8e01fc..0d3da30377a 100644 --- a/src/server/scripts/Spells/spell_priest.cpp +++ b/src/server/scripts/Spells/spell_priest.cpp @@ -215,7 +215,7 @@ class spell_pri_item_greater_heal_refund : public SpellScriptLoader return true; } - void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) + void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/) { PreventDefaultAction(); GetTarget()->CastSpell(GetTarget(), SPELL_PRIEST_ITEM_EFFICIENCY, true, NULL, aurEff); diff --git a/src/server/worldserver/Master.cpp b/src/server/worldserver/Master.cpp index 88a69cf2eb2..6fd57179140 100644 --- a/src/server/worldserver/Master.cpp +++ b/src/server/worldserver/Master.cpp @@ -50,6 +50,12 @@ extern int m_ServiceStatus; #endif +#ifdef __linux__ +#include +#include +#define PROCESS_HIGH_PRIORITY -15 // [-20, 19], default is 0 +#endif + /// Handle worldservers's termination signals class WorldServerSignalHandler : public Trinity::SignalHandler { @@ -231,7 +237,7 @@ int Master::Run() if (affinity & (1 << i)) CPU_SET(i, &mask); - if (int err = sched_setaffinity(0, sizeof(mask), &mask)) + if (sched_setaffinity(0, sizeof(mask), &mask)) TC_LOG_ERROR(LOG_FILTER_WORLDSERVER, "Can't set used processors (hex): %x, error: %s", affinity, strerror(errno)); else { @@ -243,7 +249,7 @@ int Master::Run() if (highPriority) { - if (int err = setpriority(PRIO_PROCESS, 0, PROCESS_HIGH_PRIORITY)) + if (setpriority(PRIO_PROCESS, 0, PROCESS_HIGH_PRIORITY)) TC_LOG_ERROR(LOG_FILTER_WORLDSERVER, "Can't set worldserver process priority class, error: %s", strerror(errno)); else TC_LOG_INFO(LOG_FILTER_WORLDSERVER, "worldserver process priority class set to %i", getpriority(PRIO_PROCESS, 0)); diff --git a/src/server/worldserver/RemoteAccess/RARunnable.cpp b/src/server/worldserver/RemoteAccess/RARunnable.cpp index c381c65e9e2..1493df7aa2f 100644 --- a/src/server/worldserver/RemoteAccess/RARunnable.cpp +++ b/src/server/worldserver/RemoteAccess/RARunnable.cpp @@ -75,7 +75,8 @@ void RARunnable::run() while (!World::IsStopped()) { - if (m_Reactor->run_reactor_event_loop(ACE_Time_Value(0, 100000)) == -1) + ACE_Time_Value interval(0, 100000); + if (m_Reactor->run_reactor_event_loop(interval) == -1) break; } diff --git a/src/tools/mmaps_generator/MapBuilder.cpp b/src/tools/mmaps_generator/MapBuilder.cpp index 9dfdf95643d..06a764690ca 100644 --- a/src/tools/mmaps_generator/MapBuilder.cpp +++ b/src/tools/mmaps_generator/MapBuilder.cpp @@ -716,8 +716,8 @@ namespace MMAP params.cs = config.cs; params.ch = config.ch; params.tileLayer = 0; - params.buildBvTree = true; - + params.buildBvTree = true; + // will hold final navmesh unsigned char* navData = NULL; int navDataSize = 0; -- cgit v1.2.3