From f7e7f5fe26cca68f51e9ad9869f057ebbe191d32 Mon Sep 17 00:00:00 2001 From: Malcrom Date: Tue, 1 Jan 2013 21:36:21 -0330 Subject: CORE/Scripting: Move Commander Sarannis & Thorngrin the Tender to cpp scripting. Add instance script. Thanks to Vincent Micheal for the help :) --- src/server/scripts/Outland/CMakeLists.txt | 4 + .../botanica/boss_commander_sarannis.cpp | 138 +++++++++++++++++ .../botanica/boss_high_botanist_freywinn.cpp | 6 +- .../Outland/TempestKeep/botanica/boss_laj.cpp | 6 +- .../TempestKeep/botanica/boss_warp_splinter.cpp | 6 +- .../Outland/TempestKeep/botanica/the_botanica.cpp | 164 +++++++++++++++++++++ .../Outland/TempestKeep/botanica/the_botanica.h | 42 ++++++ .../TempestKeep/botanica/thorngrin_the_tender.cpp | 150 +++++++++++++++++++ 8 files changed, 507 insertions(+), 9 deletions(-) create mode 100644 src/server/scripts/Outland/TempestKeep/botanica/boss_commander_sarannis.cpp create mode 100644 src/server/scripts/Outland/TempestKeep/botanica/the_botanica.cpp create mode 100644 src/server/scripts/Outland/TempestKeep/botanica/the_botanica.h create mode 100644 src/server/scripts/Outland/TempestKeep/botanica/thorngrin_the_tender.cpp (limited to 'src/server/scripts') diff --git a/src/server/scripts/Outland/CMakeLists.txt b/src/server/scripts/Outland/CMakeLists.txt index 9fb0d4715a0..05f329b5b1a 100644 --- a/src/server/scripts/Outland/CMakeLists.txt +++ b/src/server/scripts/Outland/CMakeLists.txt @@ -59,6 +59,10 @@ set(scripts_STAT_SRCS Outland/TempestKeep/Eye/boss_alar.cpp Outland/TempestKeep/Eye/boss_kaelthas.cpp Outland/TempestKeep/Eye/the_eye.cpp + Outland/TempestKeep/botanica/the_botanica.h + Outland/TempestKeep/botanica/the_botanica.cpp + Outland/TempestKeep/botanica/boss_commander_sarannis.cpp + Outland/TempestKeep/botanica/thorngrin_the_tender.cpp Outland/TempestKeep/botanica/boss_high_botanist_freywinn.cpp Outland/TempestKeep/botanica/boss_warp_splinter.cpp Outland/TempestKeep/botanica/boss_laj.cpp diff --git a/src/server/scripts/Outland/TempestKeep/botanica/boss_commander_sarannis.cpp b/src/server/scripts/Outland/TempestKeep/botanica/boss_commander_sarannis.cpp new file mode 100644 index 00000000000..e19d6709edc --- /dev/null +++ b/src/server/scripts/Outland/TempestKeep/botanica/boss_commander_sarannis.cpp @@ -0,0 +1,138 @@ +/* + * 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 . + */ + +#include "ScriptMgr.h" +#include "ScriptedCreature.h" + +enum Says +{ + SAY_AGGRO = 0, + SAY_KILL = 1, + SAY_ARCANE_RESONANCE = 2, + SAY_ARCANE_DEVASTATION = 3, + EMOTE_SUMMON = 4, + SAY_SUMMON = 5, + SAY_DEATH = 6 +}; + +enum Spells +{ + SPELL_ARCANE_RESONANCE = 34794, + SPELL_ARCANE_DEVASTATION = 34799, + SPELL_SUMMON_REINFORCEMENTS = 34803 +}; + +enum +{ + EVENT_ARCANE_RESONANCE = 1, + EVENT_ARCANE_DEVASTATION = 2 +}; + +class boss_commander_sarannis : public CreatureScript +{ + public: boss_commander_sarannis() : CreatureScript("boss_commander_sarannis") { } + + struct boss_commander_sarannisAI : public ScriptedAI + { + boss_commander_sarannisAI(Creature* creature) : BossAI(creature, DATA_COMMANDER_SARANNIS) { } + + void Reset() + { + _phase = true; + } + + void EnterCombat(Unit* /*who*/) + { + Talk(SAY_AGGRO); + _events.Reset(); + _events.ScheduleEvent(EVENT_ARCANE_RESONANCE, 42700); + _events.ScheduleEvent(EVENT_ARCANE_DEVASTATION, 15200); + } + + void KilledUnit(Unit* /*victim*/) + { + Talk(SAY_KILL); + } + + void JustDied(Unit* /*killer*/) + { + Talk(SAY_DEATH); + } + + void DamageTaken(Unit* /*killer*/, uint32 &damage) + { + if (me->HealthBelowPctDamaged(50, damage) && _phase) + { + _phase = false; + Talk(EMOTE_SUMMON); + Talk(SAY_SUMMON); + DoCast(me, SPELL_SUMMON_REINFORCEMENTS); + } + } + + void JustSummoned(Creature* summon) + { + ScriptedAI::JustSummoned(summon); + } + + void UpdateAI(const uint32 diff) + { + if (!UpdateVictim()) + return; + + _events.Update(diff); + + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; + + while (uint32 eventId = _events.ExecuteEvent()) + { + switch (eventId) + { + case EVENT_ARCANE_RESONANCE: + Talk(SAY_ARCANE_RESONANCE); + DoCastVictim(SPELL_ARCANE_RESONANCE, true); + _events.ScheduleEvent(EVENT_ARCANE_RESONANCE, 42700); + break; + case EVENT_ARCANE_DEVASTATION: + Talk(SAY_ARCANE_DEVASTATION); + DoCastVictim(SPELL_ARCANE_DEVASTATION, true); + _events.ScheduleEvent(EVENT_ARCANE_DEVASTATION, urand(11000, 19200)); + break; + default: + break; + } + } + + DoMeleeAttackIfReady(); + } + + private: + EventMap _events; + bool _phase; + }; + + CreatureAI* GetAI(Creature* creature) const + { + return new boss_commander_sarannisAI(creature); + } +}; + +void AddSC_boss_commander_sarannis() +{ + new boss_commander_sarannis(); +} \ No newline at end of file diff --git a/src/server/scripts/Outland/TempestKeep/botanica/boss_high_botanist_freywinn.cpp b/src/server/scripts/Outland/TempestKeep/botanica/boss_high_botanist_freywinn.cpp index b3604d66d90..12e5acf4222 100644 --- a/src/server/scripts/Outland/TempestKeep/botanica/boss_high_botanist_freywinn.cpp +++ b/src/server/scripts/Outland/TempestKeep/botanica/boss_high_botanist_freywinn.cpp @@ -33,7 +33,7 @@ enum eSays SAY_TREE = 2, SAY_SUMMON = 3, SAY_DEATH = 4, - SAY_OOC_RANDOM = 5, + SAY_OOC_RANDOM = 5 }; enum eSpells @@ -44,7 +44,7 @@ enum eSpells SPELL_PLANT_WHITE = 34759, SPELL_PLANT_GREEN = 34761, SPELL_PLANT_BLUE = 34762, - SPELL_PLANT_RED = 34763, + SPELL_PLANT_RED = 34763 }; #define ENTRY_FRAYER 19953 @@ -60,7 +60,7 @@ class boss_high_botanist_freywinn : public CreatureScript struct boss_high_botanist_freywinnAI : public ScriptedAI { - boss_high_botanist_freywinnAI(Creature* creature) : ScriptedAI(creature) {} + boss_high_botanist_freywinnAI(Creature* creature) : BossAI(creature, DATA_HIGH_BOTANIST_FREYWINN) { } std::list Adds_List; diff --git a/src/server/scripts/Outland/TempestKeep/botanica/boss_laj.cpp b/src/server/scripts/Outland/TempestKeep/botanica/boss_laj.cpp index b1a894d9b48..58f5d7ade54 100644 --- a/src/server/scripts/Outland/TempestKeep/botanica/boss_laj.cpp +++ b/src/server/scripts/Outland/TempestKeep/botanica/boss_laj.cpp @@ -38,7 +38,7 @@ enum eSpells SPELL_SUMMON_LASHER_3 = 34686, SPELL_SUMMON_FLAYER_4 = 34687, SPELL_SUMMON_LASHER_4 = 34688, - SPELL_SUMMON_FLAYER_3 = 34690, + SPELL_SUMMON_FLAYER_3 = 34690 }; enum eOthers { @@ -47,7 +47,7 @@ enum eOthers MODEL_ARCANE = 14213, MODEL_FIRE = 13110, MODEL_FROST = 14112, - MODEL_NATURE = 14214, + MODEL_NATURE = 14214 }; class boss_laj : public CreatureScript @@ -61,7 +61,7 @@ class boss_laj : public CreatureScript struct boss_lajAI : public ScriptedAI { - boss_lajAI(Creature* creature) : ScriptedAI(creature) {} + boss_lajAI(Creature* creature) : BossAI(creature, DATA_LAJ) { } bool CanSummon; uint32 Teleport_Timer; diff --git a/src/server/scripts/Outland/TempestKeep/botanica/boss_warp_splinter.cpp b/src/server/scripts/Outland/TempestKeep/botanica/boss_warp_splinter.cpp index 2ca1bb28f96..131c0fcaf75 100644 --- a/src/server/scripts/Outland/TempestKeep/botanica/boss_warp_splinter.cpp +++ b/src/server/scripts/Outland/TempestKeep/botanica/boss_warp_splinter.cpp @@ -40,13 +40,13 @@ enum eSpells SUMMON_TREANTS = 34727, // DBC: 34727, 34731, 34733, 34734, 34736, 34739, 34741 (with Ancestral Life spell 34742) // won't work (guardian summon) ARCANE_VOLLEY = 36705, ARCANE_VOLLEY_H = 39133, - SPELL_HEAL_FATHER = 6262, + SPELL_HEAL_FATHER = 6262 }; enum eOthers { CREATURE_TREANT = 19949, - TREANT_SPAWN_DIST = 50, //50 yards from Warp Splinter's spawn point + TREANT_SPAWN_DIST = 50 //50 yards from Warp Splinter's spawn point }; float treant_pos[6][3] = @@ -136,7 +136,7 @@ class boss_warp_splinter : public CreatureScript } struct boss_warp_splinterAI : public ScriptedAI { - boss_warp_splinterAI(Creature* creature) : ScriptedAI(creature) + boss_warp_splinterAI(Creature* creature) : BossAI(creature, DATA_WARP_SPLINTER) { } { Treant_Spawn_Pos_X = creature->GetPositionX(); Treant_Spawn_Pos_Y = creature->GetPositionY(); diff --git a/src/server/scripts/Outland/TempestKeep/botanica/the_botanica.cpp b/src/server/scripts/Outland/TempestKeep/botanica/the_botanica.cpp new file mode 100644 index 00000000000..4fc44633345 --- /dev/null +++ b/src/server/scripts/Outland/TempestKeep/botanica/the_botanica.cpp @@ -0,0 +1,164 @@ +/* + * 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 . + */ + +#include "ScriptMgr.h" +#include "InstanceScript.h" +#include "the_botanica.h" + +class instance_the_botanica : public InstanceMapScript +{ + public: + instance_the_botanica() : InstanceMapScript("instance_the_botanica", 553) { } + + struct instance_the_botanica_InstanceMapScript : public InstanceScript + { + instance_the_botanica_InstanceMapScript(Map* map) : InstanceScript(map) + { + CommanderSarannisGUID = 0; + HighBotanistFreywinnGUID = 0; + ThorngrinTheTenderGUID = 0; + LajGUID = 0; + WarpSplinterGUID = 0; + } + + void OnCreatureCreate(Creature* creature) + { + switch (creature->GetEntry()) + { + case NPC_COMMANDER_SARANNIS: + CommanderSarannisGUID = creature->GetGUID(); + break; + case NPC_HIGH_BOTANIST_FREYWINN: + HighBotanistFreywinnGUID = creature->GetGUID(); + break; + case NPC_THORNGRIN_THE_TENDER: + ThorngrinTheTenderGUID = creature->GetGUID(); + break; + case NPC_LAJ: + LajGUID = creature->GetGUID(); + break; + case NPC_WARP_SPLINTER: + WarpSplinterGUID = creature->GetGUID(); + break; + default: + break; + } + } + + uint64 GetData64(uint32 type) const + { + switch (type) + { + case DATA_COMMANDER_SARANNIS: + return CommanderSarannisGUID; + case DATA_HIGH_BOTANIST_FREYWINN: + return HighBotanistFreywinnGUID; + case DATA_THORNGRIN_THE_TENDER: + return ThorngrinTheTenderGUID; + case DATA_LAJ: + return LajGUID; + case DATA_WARP_SPLINTER: + return WarpSplinterGUID; + default: + break; + } + + return 0; + } + + bool SetBossState(uint32 type, EncounterState state) + { + if (!InstanceScript::SetBossState(type, state)) + return false; + + switch (type) + { + case DATA_COMMANDER_SARANNIS: + case DATA_HIGH_BOTANIST_FREYWINN: + case DATA_THORNGRIN_THE_TENDER: + case DATA_LAJ: + case DATA_WARP_SPLINTER: + break; + default: + break; + } + + return true; + } + + std::string GetSaveData() + { + OUT_SAVE_INST_DATA; + + std::ostringstream saveStream; + saveStream << "B O " << GetBossSaveData(); + + OUT_SAVE_INST_DATA_COMPLETE; + return saveStream.str(); + } + + void Load(char const* 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 == 'B' && dataHead2 == 'O') + { + for (uint8 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; + } + + protected: + uint64 CommanderSarannisGUID; + uint64 HighBotanistFreywinnGUID; + uint64 ThorngrinTheTenderGUID; + uint64 LajGUID; + uint64 WarpSplinterGUID; + }; + + InstanceScript* GetInstanceScript(InstanceMap* map) const + { + return new instance_the_botanica_InstanceMapScript(map); + } +}; + +void AddSC_instance_the_botanica() +{ + new instance_the_botanica; +} \ No newline at end of file diff --git a/src/server/scripts/Outland/TempestKeep/botanica/the_botanica.h b/src/server/scripts/Outland/TempestKeep/botanica/the_botanica.h new file mode 100644 index 00000000000..e9a7f533ad2 --- /dev/null +++ b/src/server/scripts/Outland/TempestKeep/botanica/the_botanica.h @@ -0,0 +1,42 @@ +/* + * Copyright (C) 2008-2013 TrinityCore + * Copyright (C) 2006-2009 ScriptDev2 + * + * 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 . + */ + +#ifndef DEF_THE_BOTANICA_H +#define DEF_THE_BOTANICA_H + +uint32 const EncounterCount = 5; + +enum DataTypes +{ + DATA_COMMANDER_SARANNIS = 1, + DATA_HIGH_BOTANIST_FREYWINN = 2, + DATA_THORNGRIN_THE_TENDER = 3, + DATA_LAJ = 4, + DATA_WARP_SPLINTER = 5 +}; + +enum CreatureIds +{ + NPC_COMMANDER_SARANNIS = 17976, + NPC_HIGH_BOTANIST_FREYWINN = 17975, + NPC_THORNGRIN_THE_TENDER = 17978, + NPC_LAJ = 17980, + NPC_WARP_SPLINTER = 17977 +}; + +#endif \ No newline at end of file diff --git a/src/server/scripts/Outland/TempestKeep/botanica/thorngrin_the_tender.cpp b/src/server/scripts/Outland/TempestKeep/botanica/thorngrin_the_tender.cpp new file mode 100644 index 00000000000..eb1150dc169 --- /dev/null +++ b/src/server/scripts/Outland/TempestKeep/botanica/thorngrin_the_tender.cpp @@ -0,0 +1,150 @@ +/* + * 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 . + */ + +#include "ScriptMgr.h" +#include "ScriptedCreature.h" + +enum Says +{ + SAY_AGGRO = 0, + SAY_20_PERCENT_HP = 1, + SAY_KILL = 2, + SAY_CAST_SACRIFICE = 3, + SAY_50_PERCENT_HP = 4, + SAY_CAST_HELLFIRE = 5, + SAY_DEATH = 6, + EMOTE_ENRAGE = 7 +}; + +enum Spells +{ + SPELL_SACRIFICE = 34661, + SPELL_HELLFIRE_NORMAL = 34659, + SPELL_HELLFIRE_HEROIC = 39131, + SPELL_ENRAGE = 34670 +}; + +enum Events +{ + EVENT_SACRIFICE = 1, + EVENT_HELLFIRE = 2, + EVENT_ENRAGE = 3 +}; + +class boss_thorngrin_the_tender : public CreatureScript +{ + public: boss_thorngrin_the_tender() : CreatureScript("thorngrin_the_tender") { } + + struct boss_thorngrin_the_tenderAI : public BossAI + { + boss_thorngrin_the_tenderAI(Creature* creature) : BossAI(creature, DATA_THORNGRIN_THE_TENDER) { } + + void Reset() + { + _phase1 = true; + _phase2 = true; + } + + void EnterCombat(Unit* /*who*/) + { + Talk(SAY_AGGRO); + _events.Reset(); + _events.ScheduleEvent(EVENT_SACRIFICE, 5700); + _events.ScheduleEvent(EVENT_HELLFIRE, IsHeroic() ? urand(17400, 19300) : 18000); + _events.ScheduleEvent(EVENT_ENRAGE, 12000); + } + + void KilledUnit(Unit* /*victim*/) + { + Talk(SAY_KILL); + } + + void JustDied(Unit* /*killer*/) + { + Talk(SAY_DEATH); + } + + void DamageTaken(Unit* /*killer*/, uint32 &damage) + { + if (me->HealthBelowPctDamaged(50, damage) && _phase1) + { + _phase1 = false; + Talk(SAY_50_PERCENT_HP); + } + if (me->HealthBelowPctDamaged(20, damage) && _phase2) + { + _phase2 = false; + Talk(SAY_20_PERCENT_HP); + } + } + + void UpdateAI(uint32 const diff) + { + if (!UpdateVictim()) + return; + + _events.Update(diff); + + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; + + while (uint32 eventId = _events.ExecuteEvent()) + { + switch (eventId) + { + case EVENT_SACRIFICE: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 0.0f, true)) + { + Talk(SAY_CAST_SACRIFICE); + DoCast(target, SPELL_SACRIFICE, true); + } + _events.ScheduleEvent(EVENT_SACRIFICE, 29400); + break; + case EVENT_HELLFIRE: + Talk(SAY_CAST_HELLFIRE); + DoCastVictim(DUNGEON_MODE(SPELL_HELLFIRE_NORMAL, SPELL_HELLFIRE_HEROIC), true); + _events.ScheduleEvent(EVENT_HELLFIRE, IsHeroic() ? urand(17400, 19300) : 18000); + break; + case EVENT_ENRAGE: + Talk(EMOTE_ENRAGE); + DoCast(me, SPELL_ENRAGE); + _events.ScheduleEvent(EVENT_ENRAGE, 33000); + break; + default: + break; + } + } + + DoMeleeAttackIfReady(); + } + + private: + EventMap _events; + bool _phase1; + bool _phase2; + }; + + CreatureAI* GetAI(Creature* creature) const + { + return new boss_thorngrin_the_tenderAI(creature); + } +}; + +void AddSC_boss_thorngrin_the_tender() +{ + new boss_thorngrin_the_tender(); +} \ No newline at end of file -- cgit v1.2.3 From 596ef0efd7bdea3165f5e7b822a4983b7e289574 Mon Sep 17 00:00:00 2001 From: Malcrom Date: Tue, 1 Jan 2013 21:41:37 -0330 Subject: CORE/Scripting: Forgot new lines at end of file. --- .../scripts/Outland/TempestKeep/botanica/boss_commander_sarannis.cpp | 2 +- src/server/scripts/Outland/TempestKeep/botanica/the_botanica.cpp | 2 +- src/server/scripts/Outland/TempestKeep/botanica/the_botanica.h | 2 +- .../scripts/Outland/TempestKeep/botanica/thorngrin_the_tender.cpp | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) (limited to 'src/server/scripts') diff --git a/src/server/scripts/Outland/TempestKeep/botanica/boss_commander_sarannis.cpp b/src/server/scripts/Outland/TempestKeep/botanica/boss_commander_sarannis.cpp index e19d6709edc..a28e0f0cd71 100644 --- a/src/server/scripts/Outland/TempestKeep/botanica/boss_commander_sarannis.cpp +++ b/src/server/scripts/Outland/TempestKeep/botanica/boss_commander_sarannis.cpp @@ -135,4 +135,4 @@ class boss_commander_sarannis : public CreatureScript void AddSC_boss_commander_sarannis() { new boss_commander_sarannis(); -} \ No newline at end of file +} diff --git a/src/server/scripts/Outland/TempestKeep/botanica/the_botanica.cpp b/src/server/scripts/Outland/TempestKeep/botanica/the_botanica.cpp index 4fc44633345..69b95e8c813 100644 --- a/src/server/scripts/Outland/TempestKeep/botanica/the_botanica.cpp +++ b/src/server/scripts/Outland/TempestKeep/botanica/the_botanica.cpp @@ -161,4 +161,4 @@ class instance_the_botanica : public InstanceMapScript void AddSC_instance_the_botanica() { new instance_the_botanica; -} \ No newline at end of file +} diff --git a/src/server/scripts/Outland/TempestKeep/botanica/the_botanica.h b/src/server/scripts/Outland/TempestKeep/botanica/the_botanica.h index e9a7f533ad2..034792ea37c 100644 --- a/src/server/scripts/Outland/TempestKeep/botanica/the_botanica.h +++ b/src/server/scripts/Outland/TempestKeep/botanica/the_botanica.h @@ -39,4 +39,4 @@ enum CreatureIds NPC_WARP_SPLINTER = 17977 }; -#endif \ No newline at end of file +#endif diff --git a/src/server/scripts/Outland/TempestKeep/botanica/thorngrin_the_tender.cpp b/src/server/scripts/Outland/TempestKeep/botanica/thorngrin_the_tender.cpp index eb1150dc169..abc0552f08c 100644 --- a/src/server/scripts/Outland/TempestKeep/botanica/thorngrin_the_tender.cpp +++ b/src/server/scripts/Outland/TempestKeep/botanica/thorngrin_the_tender.cpp @@ -147,4 +147,4 @@ class boss_thorngrin_the_tender : public CreatureScript void AddSC_boss_thorngrin_the_tender() { new boss_thorngrin_the_tender(); -} \ No newline at end of file +} -- cgit v1.2.3 From 88e6071ff6cae59a9de851d7b2c6466cf5682132 Mon Sep 17 00:00:00 2001 From: Vincent_Michael Date: Wed, 2 Jan 2013 02:28:00 +0100 Subject: Core: Fix build --- src/server/scripts/Outland/CMakeLists.txt | 2 +- .../botanica/boss_commander_sarannis.cpp | 24 +-- .../botanica/boss_high_botanist_freywinn.cpp | 3 +- .../Outland/TempestKeep/botanica/boss_laj.cpp | 3 +- .../TempestKeep/botanica/boss_warp_splinter.cpp | 5 +- .../TempestKeep/botanica/instance_the_botanica.cpp | 164 +++++++++++++++++++++ .../Outland/TempestKeep/botanica/the_botanica.cpp | 164 --------------------- .../TempestKeep/botanica/thorngrin_the_tender.cpp | 22 +-- 8 files changed, 197 insertions(+), 190 deletions(-) create mode 100644 src/server/scripts/Outland/TempestKeep/botanica/instance_the_botanica.cpp delete mode 100644 src/server/scripts/Outland/TempestKeep/botanica/the_botanica.cpp (limited to 'src/server/scripts') diff --git a/src/server/scripts/Outland/CMakeLists.txt b/src/server/scripts/Outland/CMakeLists.txt index 05f329b5b1a..173af3374ad 100644 --- a/src/server/scripts/Outland/CMakeLists.txt +++ b/src/server/scripts/Outland/CMakeLists.txt @@ -60,7 +60,7 @@ set(scripts_STAT_SRCS Outland/TempestKeep/Eye/boss_kaelthas.cpp Outland/TempestKeep/Eye/the_eye.cpp Outland/TempestKeep/botanica/the_botanica.h - Outland/TempestKeep/botanica/the_botanica.cpp + Outland/TempestKeep/botanica/instance_the_botanica.cpp Outland/TempestKeep/botanica/boss_commander_sarannis.cpp Outland/TempestKeep/botanica/thorngrin_the_tender.cpp Outland/TempestKeep/botanica/boss_high_botanist_freywinn.cpp diff --git a/src/server/scripts/Outland/TempestKeep/botanica/boss_commander_sarannis.cpp b/src/server/scripts/Outland/TempestKeep/botanica/boss_commander_sarannis.cpp index a28e0f0cd71..f64276940aa 100644 --- a/src/server/scripts/Outland/TempestKeep/botanica/boss_commander_sarannis.cpp +++ b/src/server/scripts/Outland/TempestKeep/botanica/boss_commander_sarannis.cpp @@ -17,6 +17,7 @@ #include "ScriptMgr.h" #include "ScriptedCreature.h" +#include "the_botanica.h" enum Says { @@ -46,21 +47,22 @@ class boss_commander_sarannis : public CreatureScript { public: boss_commander_sarannis() : CreatureScript("boss_commander_sarannis") { } - struct boss_commander_sarannisAI : public ScriptedAI + struct boss_commander_sarannisAI : public BossAI { boss_commander_sarannisAI(Creature* creature) : BossAI(creature, DATA_COMMANDER_SARANNIS) { } void Reset() { + _Reset(); _phase = true; } void EnterCombat(Unit* /*who*/) { + _EnterCombat(); Talk(SAY_AGGRO); - _events.Reset(); - _events.ScheduleEvent(EVENT_ARCANE_RESONANCE, 42700); - _events.ScheduleEvent(EVENT_ARCANE_DEVASTATION, 15200); + events.ScheduleEvent(EVENT_ARCANE_RESONANCE, 42700); + events.ScheduleEvent(EVENT_ARCANE_DEVASTATION, 15200); } void KilledUnit(Unit* /*victim*/) @@ -70,6 +72,7 @@ class boss_commander_sarannis : public CreatureScript void JustDied(Unit* /*killer*/) { + _JustDied(); Talk(SAY_DEATH); } @@ -86,32 +89,32 @@ class boss_commander_sarannis : public CreatureScript void JustSummoned(Creature* summon) { - ScriptedAI::JustSummoned(summon); + BossAI::JustSummoned(summon); } - void UpdateAI(const uint32 diff) + void UpdateAI(uint32 const diff) { if (!UpdateVictim()) return; - _events.Update(diff); + events.Update(diff); if (me->HasUnitState(UNIT_STATE_CASTING)) return; - while (uint32 eventId = _events.ExecuteEvent()) + while (uint32 eventId = events.ExecuteEvent()) { switch (eventId) { case EVENT_ARCANE_RESONANCE: Talk(SAY_ARCANE_RESONANCE); DoCastVictim(SPELL_ARCANE_RESONANCE, true); - _events.ScheduleEvent(EVENT_ARCANE_RESONANCE, 42700); + events.ScheduleEvent(EVENT_ARCANE_RESONANCE, 42700); break; case EVENT_ARCANE_DEVASTATION: Talk(SAY_ARCANE_DEVASTATION); DoCastVictim(SPELL_ARCANE_DEVASTATION, true); - _events.ScheduleEvent(EVENT_ARCANE_DEVASTATION, urand(11000, 19200)); + events.ScheduleEvent(EVENT_ARCANE_DEVASTATION, urand(11000, 19200)); break; default: break; @@ -122,7 +125,6 @@ class boss_commander_sarannis : public CreatureScript } private: - EventMap _events; bool _phase; }; diff --git a/src/server/scripts/Outland/TempestKeep/botanica/boss_high_botanist_freywinn.cpp b/src/server/scripts/Outland/TempestKeep/botanica/boss_high_botanist_freywinn.cpp index 12e5acf4222..2ab527c2fd5 100644 --- a/src/server/scripts/Outland/TempestKeep/botanica/boss_high_botanist_freywinn.cpp +++ b/src/server/scripts/Outland/TempestKeep/botanica/boss_high_botanist_freywinn.cpp @@ -25,6 +25,7 @@ EndScriptData */ #include "ScriptMgr.h" #include "ScriptedCreature.h" +#include "the_botanica.h" enum eSays { @@ -58,7 +59,7 @@ class boss_high_botanist_freywinn : public CreatureScript { } - struct boss_high_botanist_freywinnAI : public ScriptedAI + struct boss_high_botanist_freywinnAI : public BossAI { boss_high_botanist_freywinnAI(Creature* creature) : BossAI(creature, DATA_HIGH_BOTANIST_FREYWINN) { } diff --git a/src/server/scripts/Outland/TempestKeep/botanica/boss_laj.cpp b/src/server/scripts/Outland/TempestKeep/botanica/boss_laj.cpp index 58f5d7ade54..bd9195e44f8 100644 --- a/src/server/scripts/Outland/TempestKeep/botanica/boss_laj.cpp +++ b/src/server/scripts/Outland/TempestKeep/botanica/boss_laj.cpp @@ -25,6 +25,7 @@ EndScriptData */ #include "ScriptMgr.h" #include "ScriptedCreature.h" +#include "the_botanica.h" enum eSpells { @@ -59,7 +60,7 @@ class boss_laj : public CreatureScript { } - struct boss_lajAI : public ScriptedAI + struct boss_lajAI : public BossAI { boss_lajAI(Creature* creature) : BossAI(creature, DATA_LAJ) { } diff --git a/src/server/scripts/Outland/TempestKeep/botanica/boss_warp_splinter.cpp b/src/server/scripts/Outland/TempestKeep/botanica/boss_warp_splinter.cpp index 131c0fcaf75..d2b6c44ec7b 100644 --- a/src/server/scripts/Outland/TempestKeep/botanica/boss_warp_splinter.cpp +++ b/src/server/scripts/Outland/TempestKeep/botanica/boss_warp_splinter.cpp @@ -25,6 +25,7 @@ EndScriptData */ #include "ScriptMgr.h" #include "ScriptedCreature.h" +#include "the_botanica.h" enum eSays { @@ -134,9 +135,9 @@ class boss_warp_splinter : public CreatureScript : CreatureScript("boss_warp_splinter") { } - struct boss_warp_splinterAI : public ScriptedAI + struct boss_warp_splinterAI : public BossAI { - boss_warp_splinterAI(Creature* creature) : BossAI(creature, DATA_WARP_SPLINTER) { } + boss_warp_splinterAI(Creature* creature) : BossAI(creature, DATA_WARP_SPLINTER) { Treant_Spawn_Pos_X = creature->GetPositionX(); Treant_Spawn_Pos_Y = creature->GetPositionY(); diff --git a/src/server/scripts/Outland/TempestKeep/botanica/instance_the_botanica.cpp b/src/server/scripts/Outland/TempestKeep/botanica/instance_the_botanica.cpp new file mode 100644 index 00000000000..69b95e8c813 --- /dev/null +++ b/src/server/scripts/Outland/TempestKeep/botanica/instance_the_botanica.cpp @@ -0,0 +1,164 @@ +/* + * 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 . + */ + +#include "ScriptMgr.h" +#include "InstanceScript.h" +#include "the_botanica.h" + +class instance_the_botanica : public InstanceMapScript +{ + public: + instance_the_botanica() : InstanceMapScript("instance_the_botanica", 553) { } + + struct instance_the_botanica_InstanceMapScript : public InstanceScript + { + instance_the_botanica_InstanceMapScript(Map* map) : InstanceScript(map) + { + CommanderSarannisGUID = 0; + HighBotanistFreywinnGUID = 0; + ThorngrinTheTenderGUID = 0; + LajGUID = 0; + WarpSplinterGUID = 0; + } + + void OnCreatureCreate(Creature* creature) + { + switch (creature->GetEntry()) + { + case NPC_COMMANDER_SARANNIS: + CommanderSarannisGUID = creature->GetGUID(); + break; + case NPC_HIGH_BOTANIST_FREYWINN: + HighBotanistFreywinnGUID = creature->GetGUID(); + break; + case NPC_THORNGRIN_THE_TENDER: + ThorngrinTheTenderGUID = creature->GetGUID(); + break; + case NPC_LAJ: + LajGUID = creature->GetGUID(); + break; + case NPC_WARP_SPLINTER: + WarpSplinterGUID = creature->GetGUID(); + break; + default: + break; + } + } + + uint64 GetData64(uint32 type) const + { + switch (type) + { + case DATA_COMMANDER_SARANNIS: + return CommanderSarannisGUID; + case DATA_HIGH_BOTANIST_FREYWINN: + return HighBotanistFreywinnGUID; + case DATA_THORNGRIN_THE_TENDER: + return ThorngrinTheTenderGUID; + case DATA_LAJ: + return LajGUID; + case DATA_WARP_SPLINTER: + return WarpSplinterGUID; + default: + break; + } + + return 0; + } + + bool SetBossState(uint32 type, EncounterState state) + { + if (!InstanceScript::SetBossState(type, state)) + return false; + + switch (type) + { + case DATA_COMMANDER_SARANNIS: + case DATA_HIGH_BOTANIST_FREYWINN: + case DATA_THORNGRIN_THE_TENDER: + case DATA_LAJ: + case DATA_WARP_SPLINTER: + break; + default: + break; + } + + return true; + } + + std::string GetSaveData() + { + OUT_SAVE_INST_DATA; + + std::ostringstream saveStream; + saveStream << "B O " << GetBossSaveData(); + + OUT_SAVE_INST_DATA_COMPLETE; + return saveStream.str(); + } + + void Load(char const* 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 == 'B' && dataHead2 == 'O') + { + for (uint8 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; + } + + protected: + uint64 CommanderSarannisGUID; + uint64 HighBotanistFreywinnGUID; + uint64 ThorngrinTheTenderGUID; + uint64 LajGUID; + uint64 WarpSplinterGUID; + }; + + InstanceScript* GetInstanceScript(InstanceMap* map) const + { + return new instance_the_botanica_InstanceMapScript(map); + } +}; + +void AddSC_instance_the_botanica() +{ + new instance_the_botanica; +} diff --git a/src/server/scripts/Outland/TempestKeep/botanica/the_botanica.cpp b/src/server/scripts/Outland/TempestKeep/botanica/the_botanica.cpp deleted file mode 100644 index 69b95e8c813..00000000000 --- a/src/server/scripts/Outland/TempestKeep/botanica/the_botanica.cpp +++ /dev/null @@ -1,164 +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 . - */ - -#include "ScriptMgr.h" -#include "InstanceScript.h" -#include "the_botanica.h" - -class instance_the_botanica : public InstanceMapScript -{ - public: - instance_the_botanica() : InstanceMapScript("instance_the_botanica", 553) { } - - struct instance_the_botanica_InstanceMapScript : public InstanceScript - { - instance_the_botanica_InstanceMapScript(Map* map) : InstanceScript(map) - { - CommanderSarannisGUID = 0; - HighBotanistFreywinnGUID = 0; - ThorngrinTheTenderGUID = 0; - LajGUID = 0; - WarpSplinterGUID = 0; - } - - void OnCreatureCreate(Creature* creature) - { - switch (creature->GetEntry()) - { - case NPC_COMMANDER_SARANNIS: - CommanderSarannisGUID = creature->GetGUID(); - break; - case NPC_HIGH_BOTANIST_FREYWINN: - HighBotanistFreywinnGUID = creature->GetGUID(); - break; - case NPC_THORNGRIN_THE_TENDER: - ThorngrinTheTenderGUID = creature->GetGUID(); - break; - case NPC_LAJ: - LajGUID = creature->GetGUID(); - break; - case NPC_WARP_SPLINTER: - WarpSplinterGUID = creature->GetGUID(); - break; - default: - break; - } - } - - uint64 GetData64(uint32 type) const - { - switch (type) - { - case DATA_COMMANDER_SARANNIS: - return CommanderSarannisGUID; - case DATA_HIGH_BOTANIST_FREYWINN: - return HighBotanistFreywinnGUID; - case DATA_THORNGRIN_THE_TENDER: - return ThorngrinTheTenderGUID; - case DATA_LAJ: - return LajGUID; - case DATA_WARP_SPLINTER: - return WarpSplinterGUID; - default: - break; - } - - return 0; - } - - bool SetBossState(uint32 type, EncounterState state) - { - if (!InstanceScript::SetBossState(type, state)) - return false; - - switch (type) - { - case DATA_COMMANDER_SARANNIS: - case DATA_HIGH_BOTANIST_FREYWINN: - case DATA_THORNGRIN_THE_TENDER: - case DATA_LAJ: - case DATA_WARP_SPLINTER: - break; - default: - break; - } - - return true; - } - - std::string GetSaveData() - { - OUT_SAVE_INST_DATA; - - std::ostringstream saveStream; - saveStream << "B O " << GetBossSaveData(); - - OUT_SAVE_INST_DATA_COMPLETE; - return saveStream.str(); - } - - void Load(char const* 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 == 'B' && dataHead2 == 'O') - { - for (uint8 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; - } - - protected: - uint64 CommanderSarannisGUID; - uint64 HighBotanistFreywinnGUID; - uint64 ThorngrinTheTenderGUID; - uint64 LajGUID; - uint64 WarpSplinterGUID; - }; - - InstanceScript* GetInstanceScript(InstanceMap* map) const - { - return new instance_the_botanica_InstanceMapScript(map); - } -}; - -void AddSC_instance_the_botanica() -{ - new instance_the_botanica; -} diff --git a/src/server/scripts/Outland/TempestKeep/botanica/thorngrin_the_tender.cpp b/src/server/scripts/Outland/TempestKeep/botanica/thorngrin_the_tender.cpp index abc0552f08c..ffd48f4dcb5 100644 --- a/src/server/scripts/Outland/TempestKeep/botanica/thorngrin_the_tender.cpp +++ b/src/server/scripts/Outland/TempestKeep/botanica/thorngrin_the_tender.cpp @@ -17,6 +17,7 @@ #include "ScriptMgr.h" #include "ScriptedCreature.h" +#include "the_botanica.h" enum Says { @@ -55,17 +56,18 @@ class boss_thorngrin_the_tender : public CreatureScript void Reset() { + _Reset(); _phase1 = true; _phase2 = true; } void EnterCombat(Unit* /*who*/) { + _EnterCombat(); Talk(SAY_AGGRO); - _events.Reset(); - _events.ScheduleEvent(EVENT_SACRIFICE, 5700); - _events.ScheduleEvent(EVENT_HELLFIRE, IsHeroic() ? urand(17400, 19300) : 18000); - _events.ScheduleEvent(EVENT_ENRAGE, 12000); + events.ScheduleEvent(EVENT_SACRIFICE, 5700); + events.ScheduleEvent(EVENT_HELLFIRE, IsHeroic() ? urand(17400, 19300) : 18000); + events.ScheduleEvent(EVENT_ENRAGE, 12000); } void KilledUnit(Unit* /*victim*/) @@ -75,6 +77,7 @@ class boss_thorngrin_the_tender : public CreatureScript void JustDied(Unit* /*killer*/) { + _JustDied(); Talk(SAY_DEATH); } @@ -97,12 +100,12 @@ class boss_thorngrin_the_tender : public CreatureScript if (!UpdateVictim()) return; - _events.Update(diff); + events.Update(diff); if (me->HasUnitState(UNIT_STATE_CASTING)) return; - while (uint32 eventId = _events.ExecuteEvent()) + while (uint32 eventId = events.ExecuteEvent()) { switch (eventId) { @@ -112,17 +115,17 @@ class boss_thorngrin_the_tender : public CreatureScript Talk(SAY_CAST_SACRIFICE); DoCast(target, SPELL_SACRIFICE, true); } - _events.ScheduleEvent(EVENT_SACRIFICE, 29400); + events.ScheduleEvent(EVENT_SACRIFICE, 29400); break; case EVENT_HELLFIRE: Talk(SAY_CAST_HELLFIRE); DoCastVictim(DUNGEON_MODE(SPELL_HELLFIRE_NORMAL, SPELL_HELLFIRE_HEROIC), true); - _events.ScheduleEvent(EVENT_HELLFIRE, IsHeroic() ? urand(17400, 19300) : 18000); + events.ScheduleEvent(EVENT_HELLFIRE, IsHeroic() ? urand(17400, 19300) : 18000); break; case EVENT_ENRAGE: Talk(EMOTE_ENRAGE); DoCast(me, SPELL_ENRAGE); - _events.ScheduleEvent(EVENT_ENRAGE, 33000); + events.ScheduleEvent(EVENT_ENRAGE, 33000); break; default: break; @@ -133,7 +136,6 @@ class boss_thorngrin_the_tender : public CreatureScript } private: - EventMap _events; bool _phase1; bool _phase2; }; -- cgit v1.2.3 From 56096b7704885de6685cd051a555b79e8093fd75 Mon Sep 17 00:00:00 2001 From: Vincent_Michael Date: Wed, 2 Jan 2013 02:43:41 +0100 Subject: DB/Creatures: Some fix for Wyrmrest Skytalon Closes #8733 --- sql/updates/world/2013_01_02_00_world_misc.sql | 7 +++++++ src/server/scripts/Outland/TempestKeep/botanica/the_botanica.h | 10 +++++----- 2 files changed, 12 insertions(+), 5 deletions(-) create mode 100644 sql/updates/world/2013_01_02_00_world_misc.sql (limited to 'src/server/scripts') diff --git a/sql/updates/world/2013_01_02_00_world_misc.sql b/sql/updates/world/2013_01_02_00_world_misc.sql new file mode 100644 index 00000000000..8527b8ab145 --- /dev/null +++ b/sql/updates/world/2013_01_02_00_world_misc.sql @@ -0,0 +1,7 @@ +DELETE FROM `creature_template_addon` WHERE `entry`=32535; +INSERT INTO `creature_template_addon` (`entry`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `auras`) VALUES +(32535, 0, 0, 0x3020400, 0x1, 0, '60534'); + +DELETE FROM `npc_spellclick_spells` WHERE `npc_entry`=32535; +INSERT INTO `npc_spellclick_spells` (`npc_entry`, `spell_id`, `cast_flags`, `user_type`) VALUE +(32535, 61245, 1, 0); diff --git a/src/server/scripts/Outland/TempestKeep/botanica/the_botanica.h b/src/server/scripts/Outland/TempestKeep/botanica/the_botanica.h index 034792ea37c..d5657dc7048 100644 --- a/src/server/scripts/Outland/TempestKeep/botanica/the_botanica.h +++ b/src/server/scripts/Outland/TempestKeep/botanica/the_botanica.h @@ -23,11 +23,11 @@ uint32 const EncounterCount = 5; enum DataTypes { - DATA_COMMANDER_SARANNIS = 1, - DATA_HIGH_BOTANIST_FREYWINN = 2, - DATA_THORNGRIN_THE_TENDER = 3, - DATA_LAJ = 4, - DATA_WARP_SPLINTER = 5 + DATA_COMMANDER_SARANNIS = 0, + DATA_HIGH_BOTANIST_FREYWINN = 1, + DATA_THORNGRIN_THE_TENDER = 2, + DATA_LAJ = 3, + DATA_WARP_SPLINTER = 4 }; enum CreatureIds -- cgit v1.2.3 From 1062a0b40f0d7000b7de5ca4df89afb94b13c40c Mon Sep 17 00:00:00 2001 From: Malcrom Date: Tue, 1 Jan 2013 22:28:29 -0330 Subject: Core/Scripts: Added spell scripting for Commander Sarannis. Added Instance Template for The Botanica. Thanks to Vincent Michael --- .../world/2013_01_02_01_world_spell_script.sql | 3 ++ .../2013_01_02_02_world_instance_template.sql | 1 + .../botanica/boss_commander_sarannis.cpp | 45 ++++++++++++++++++++++ 3 files changed, 49 insertions(+) create mode 100644 sql/updates/world/2013_01_02_01_world_spell_script.sql create mode 100644 sql/updates/world/2013_01_02_02_world_instance_template.sql (limited to 'src/server/scripts') diff --git a/sql/updates/world/2013_01_02_01_world_spell_script.sql b/sql/updates/world/2013_01_02_01_world_spell_script.sql new file mode 100644 index 00000000000..a839ca6dc7b --- /dev/null +++ b/sql/updates/world/2013_01_02_01_world_spell_script.sql @@ -0,0 +1,3 @@ +DELETE FROM `spell_script_names` WHERE `spell_id`=34803; +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(34803,'spell_commander_sarannis_summon_reinforcements'); diff --git a/sql/updates/world/2013_01_02_02_world_instance_template.sql b/sql/updates/world/2013_01_02_02_world_instance_template.sql new file mode 100644 index 00000000000..f63a2c3ba2e --- /dev/null +++ b/sql/updates/world/2013_01_02_02_world_instance_template.sql @@ -0,0 +1 @@ +UPDATE `instance_template` SET `script`='instance_the_botanica' WHERE `map`=553; diff --git a/src/server/scripts/Outland/TempestKeep/botanica/boss_commander_sarannis.cpp b/src/server/scripts/Outland/TempestKeep/botanica/boss_commander_sarannis.cpp index f64276940aa..6b232a2ad17 100644 --- a/src/server/scripts/Outland/TempestKeep/botanica/boss_commander_sarannis.cpp +++ b/src/server/scripts/Outland/TempestKeep/botanica/boss_commander_sarannis.cpp @@ -18,6 +18,7 @@ #include "ScriptMgr.h" #include "ScriptedCreature.h" #include "the_botanica.h" +#include "SpellScript.h" enum Says { @@ -134,6 +135,50 @@ class boss_commander_sarannis : public CreatureScript } }; +Position const PosSummonReinforcements[4] = +{ + { 160.4483f, 287.6435f, -3.887904f, 2.3841f }, + { 153.4406f, 289.9929f, -4.736916f, 2.3841f }, + { 154.4137f, 292.8956f, -4.683603f, 2.3841f }, + { 157.1544f, 294.2599f, -4.726504f, 2.3841f } +}; + +enum Creatures +{ + NPC_SUMMONED_BLOODWARDER_MENDER = 20083, + NPC_SUMMONED_BLOODWARDER_RESERVIST = 20078 +}; + +class spell_commander_sarannis_summon_reinforcements : public SpellScriptLoader +{ + public: + spell_commander_sarannis_summon_reinforcements() : SpellScriptLoader("spell_commander_sarannis_summon_reinforcements") { } + + class spell_commander_sarannis_summon_reinforcements_SpellScript : public SpellScript + { + PrepareSpellScript(spell_commander_sarannis_summon_reinforcements_SpellScript); + + void HandleCast(SpellEffIndex /*effIndex*/) + { + GetCaster()->SummonCreature(NPC_SUMMONED_BLOODWARDER_MENDER, PosSummonReinforcements[0], TEMPSUMMON_CORPSE_DESPAWN); + GetCaster()->SummonCreature(NPC_SUMMONED_BLOODWARDER_RESERVIST, PosSummonReinforcements[1], TEMPSUMMON_CORPSE_DESPAWN); + GetCaster()->SummonCreature(NPC_SUMMONED_BLOODWARDER_RESERVIST, PosSummonReinforcements[2], TEMPSUMMON_CORPSE_DESPAWN); + if (GetCaster()->GetMap()->IsHeroic()) + GetCaster()->SummonCreature(NPC_SUMMONED_BLOODWARDER_RESERVIST, PosSummonReinforcements[3], TEMPSUMMON_CORPSE_DESPAWN); + } + + void Register() + { + OnEffectHitTarget += SpellEffectFn(spell_commander_sarannis_summon_reinforcements_SpellScript::HandleCast, EFFECT_0, SPELL_EFFECT_DUMMY); + } + }; + + SpellScript* GetSpellScript() const + { + return new spell_commander_sarannis_summon_reinforcements_SpellScript(); + } +}; + void AddSC_boss_commander_sarannis() { new boss_commander_sarannis(); -- cgit v1.2.3 From e0db317530a60c65527936c1e2b356d67fbe0137 Mon Sep 17 00:00:00 2001 From: Vincent_Michael Date: Wed, 2 Jan 2013 03:06:55 +0100 Subject: SQL: Fix sql import problem --- sql/updates/world/2013_01_01_01_world_creature_text.sql | 4 ++-- .../scripts/Outland/TempestKeep/botanica/boss_commander_sarannis.cpp | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) (limited to 'src/server/scripts') diff --git a/sql/updates/world/2013_01_01_01_world_creature_text.sql b/sql/updates/world/2013_01_01_01_world_creature_text.sql index 9b7a0e2a240..c0055f8e1d0 100644 --- a/sql/updates/world/2013_01_01_01_world_creature_text.sql +++ b/sql/updates/world/2013_01_01_01_world_creature_text.sql @@ -1,5 +1,5 @@ -- NPC talk text convert from creature_ai_text. Moving boss to cpp. -UPDATE `creature_template` SET `AIName`= '', `ScriptName`= 'boss_commander_sarannis' WHERE entry`=17976; +UPDATE `creature_template` SET `AIName`= '', `ScriptName`= 'boss_commander_sarannis' WHERE `entry`=17976; DELETE FROM `creature_ai_scripts` WHERE `creature_id`=17976; DELETE FROM `creature_ai_texts` WHERE `entry` BETWEEN -39 AND -34; DELETE FROM `creature_text` WHERE `entry` IN (17976); @@ -14,7 +14,7 @@ INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`pr (17976,6,0, 'I have not yet... begun to...',14,0,100,0,0,11079, 'Commander Sarannis - On Death Say'); -- NPC talk text convert from creature_ai_text. Moving boss to cpp. -UPDATE `creature_template` SET `AIName`= '', `ScriptName`= 'thorngrin_the_tender' WHERE entry`=17978; +UPDATE `creature_template` SET `AIName`= '', `ScriptName`= 'thorngrin_the_tender' WHERE `entry`=17978; DELETE FROM `creature_ai_scripts` WHERE `creature_id`=17978; DELETE FROM `creature_ai_texts` WHERE entry BETWEEN -16 AND -9; DELETE FROM `creature_text` WHERE `entry` IN (17978); diff --git a/src/server/scripts/Outland/TempestKeep/botanica/boss_commander_sarannis.cpp b/src/server/scripts/Outland/TempestKeep/botanica/boss_commander_sarannis.cpp index 6b232a2ad17..fe89925b6f9 100644 --- a/src/server/scripts/Outland/TempestKeep/botanica/boss_commander_sarannis.cpp +++ b/src/server/scripts/Outland/TempestKeep/botanica/boss_commander_sarannis.cpp @@ -182,4 +182,5 @@ class spell_commander_sarannis_summon_reinforcements : public SpellScriptLoader void AddSC_boss_commander_sarannis() { new boss_commander_sarannis(); + new spell_commander_sarannis_summon_reinforcements(); } -- cgit v1.2.3 From 423fb042704f89770bac6a9d7456d52a7f71e972 Mon Sep 17 00:00:00 2001 From: Trista Date: Wed, 2 Jan 2013 06:34:32 +0200 Subject: Script/EoE: Some fixes here and there * Add db support for Power Sparks, Teleports and Drakes * Fix Power Sparks animations and texts and add support for giving buff to players + warning * Fix Power Spark way of stacking - should be MultiSlot aura, didn't stack before either way * Teleporters mechanic is fixed and will summon only 1 spark per 30-35 sec * Fixed players getting mounted on 3rd phase * Cleanned some wrong aggro handling, but whole aggro/attack system should be rewritten to get it working blizz That is for today, this doesn't fix the whole instance by any means! --- .../world/2013_01_02_05_eye_of_eternity.sql | 27 ++++ src/server/game/Spells/Auras/SpellAuras.cpp | 12 +- src/server/game/Spells/SpellInfo.cpp | 2 +- .../Northrend/Nexus/EyeOfEternity/boss_malygos.cpp | 142 ++++++++------------- 4 files changed, 89 insertions(+), 94 deletions(-) create mode 100644 sql/updates/world/2013_01_02_05_eye_of_eternity.sql (limited to 'src/server/scripts') diff --git a/sql/updates/world/2013_01_02_05_eye_of_eternity.sql b/sql/updates/world/2013_01_02_05_eye_of_eternity.sql new file mode 100644 index 00000000000..89cc8f08cce --- /dev/null +++ b/sql/updates/world/2013_01_02_05_eye_of_eternity.sql @@ -0,0 +1,27 @@ +-- Add missing text and update old one +-- Malygos +UPDATE `creature_text` SET `probability`=100 WHERE `entry`=28859; -- Was at 0 for some reason +UPDATE `creature_text` SET `text`='Unthinkable! The mortals will destroy... everything! My sister, what have you...',`sound`=14540 WHERE `entry`=28859 AND `groupid`=14 AND `id`=0; +DELETE FROM `creature_text` WHERE `entry`=28859 AND `groupid` IN (15,16); +DELETE FROM `creature_text` WHERE `entry`=30084; +INSERT INTO `creature_text` (`entry`,`groupid`,`text`,`type`,`probability`,`sound`,`comment`) VALUES +(28859,15, '%s fixes his eyes on you!', 42,100,0, 'Malygos'), +(28859,16, 'I am without limits here. The rules of your cherished reality do not apply. In this realm, I am in control!',14,100,14515, 'Malygos'), +(30084,0, 'A Power Spark forms from a nearby rift!',41,100,14522, 'Power spark to portal'); +-- Alexstrasza, add missing sounds +UPDATE `creature_text` SET `probability`=100,`sound`=14406 WHERE `entry`=32295 AND `groupid`=0 AND `id`=0; +UPDATE `creature_text` SET `probability`=100,`sound`=14407 WHERE `entry`=32295 AND `groupid`=1 AND `id`=0; +UPDATE `creature_text` SET `probability`=100,`sound`=14408 WHERE `entry`=32295 AND `groupid`=2 AND `id`=0; +UPDATE `creature_text` SET `probability`=100,`sound`=14409 WHERE `entry`=32295 AND `groupid`=3 AND `id`=0; + +-- Update portal InhabitType, otherwise it falls on summon +UPDATE `creature_template` SET `InhabitType`=4 WHERE `entry`=30118; + +-- Update drakes templates +UPDATE `creature_template` SET `unit_flags`=8,`InhabitType`=4 WHERE `entry`=30161; -- no fly aura present only enabled gravity in sniffs + +-- Addon data +DELETE FROM `creature_template_addon` WHERE `entry` IN (30084,30161); +INSERT INTO `creature_template_addon` (`entry`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES +(30084,0,0,50331648,1,0,'55845'), -- Power Spark +(30161,0,0,50331648,1,0,'60534'); -- Wyrmrest Skytalon (uses no fly aura) diff --git a/src/server/game/Spells/Auras/SpellAuras.cpp b/src/server/game/Spells/Auras/SpellAuras.cpp index b5cabba8929..d018747aa71 100644 --- a/src/server/game/Spells/Auras/SpellAuras.cpp +++ b/src/server/game/Spells/Auras/SpellAuras.cpp @@ -910,8 +910,16 @@ bool Aura::CanBeSaved() const // Incanter's Absorbtion - considering the minimal duration and problems with aura stacking // we skip saving this aura - if (GetId() == 44413) - return false; + // Also for some reason other auras put as MultiSlot crash core on keeping them after restart, + // so put here only these for which you are sure they get removed + switch (GetId()) + { + case 44413: // Incanter's Absorption + case 40075: // Fel Flak Fire + case 55849: // Power Spark + return false; + break; + } // don't save auras removed by proc system if (IsUsingCharges() && !GetCharges()) diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp index 06c861bd388..a8c0ca06efe 100644 --- a/src/server/game/Spells/SpellInfo.cpp +++ b/src/server/game/Spells/SpellInfo.cpp @@ -1027,7 +1027,7 @@ bool SpellInfo::IsPassiveStackableWithRanks() const bool SpellInfo::IsMultiSlotAura() const { - return IsPassive() || Id == 40075 || Id == 44413; // No other way to make 40075 have more than 1 copy of aura + return IsPassive() || Id == 55849 || Id == 40075 || Id == 44413; // Power Spark, Fel Flak Fire, Incanter's Absorption } bool SpellInfo::IsDeathPersistent() const diff --git a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp index 85414e3808c..fcbc87ad47d 100644 --- a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp +++ b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp @@ -35,10 +35,13 @@ Script Data End */ #include "eye_of_eternity.h" #include "ScriptedEscortAI.h" #include "Player.h" +#include "Vehicle.h" +#include "CombatAI.h" +#include "CreatureTextMgr.h" enum Achievements { - ACHIEV_TIMED_START_EVENT = 20387, + ACHIEV_TIMED_START_EVENT = 20387, }; enum Events @@ -132,25 +135,36 @@ enum MalygosEvents #define TEN_MINUTES 600000 -enum MalygosSays +enum Texts { - SAY_AGGRO_P_ONE, - SAY_KILLED_PLAYER_P_ONE, - SAY_END_P_ONE, - SAY_AGGRO_P_TWO, - SAY_ANTI_MAGIC_SHELL, // not sure when execute it - SAY_MAGIC_BLAST, // not sure when execute it - SAY_KILLED_PLAYER_P_TWO, - SAY_END_P_TWO, - SAY_INTRO_P_THREE, - SAY_AGGRO_P_THREE, - SAY_SURGE_POWER, // not sure when execute it - SAY_BUFF_SPARK, - SAY_KILLED_PLAYER_P_THREE, - SAY_SPELL_CASTING_P_THREE, - SAY_DEATH + // Malygos + SAY_AGGRO_P_ONE = 0, + SAY_KILLED_PLAYER_P_ONE = 1, + SAY_END_P_ONE = 2, + SAY_AGGRO_P_TWO = 3, + SAY_ANTI_MAGIC_SHELL = 4, // not sure when execute it + SAY_MAGIC_BLAST = 5, // not sure when execute it + SAY_KILLED_PLAYER_P_TWO = 6, + SAY_END_P_TWO = 7, + SAY_INTRO_P_THREE = 8, + SAY_AGGRO_P_THREE = 9, + SAY_SURGE_POWER = 10, // not sure when execute it + SAY_BUFF_SPARK = 11, + SAY_KILLED_PLAYER_P_THREE = 12, + SAY_SPELL_CASTING_P_THREE = 13, + SAY_DEATH, + + // Alexstrasza + SAY_ONE = 0, + SAY_TWO = 1, + SAY_THREE = 2, + SAY_FOUR = 3, + + // Power Sparks + EMOTE_POWER_SPARK_SUMMONED = 0 }; + #define MAX_HOVER_DISK_WAYPOINTS 18 // Sniffed data (x, y,z) @@ -178,7 +192,7 @@ const Position HoverDiskWaypoints[MAX_HOVER_DISK_WAYPOINTS] = #define GROUND_Z 268 -// Source: Sniffs (x, y,z) +// Source: Sniffs (x,y,z) #define MALYGOS_MAX_WAYPOINTS 16 const Position MalygosPhaseTwoWaypoints[MALYGOS_MAX_WAYPOINTS] = { @@ -316,6 +330,7 @@ public: // The rest is handled in the AI of the vehicle. target->CastSpell(target, SPELL_SUMMOM_RED_DRAGON, true); + me->Attack(target, false); } } @@ -748,13 +763,18 @@ public: _instance = creature->GetInstanceScript(); } - void Reset() + void SpellHit(Unit* /*caster*/, const SpellInfo* spell) { - _summonTimer = urand(5, 7)*IN_MILLISECONDS; + if (spell->Id == SPELL_PORTAL_OPENED) + { + DoCast(me, SPELL_SUMMON_POWER_PARK, true); + } } void UpdateAI(uint32 const diff) { + // When duration of oppened riff visual ends, + // closed one should be cast if (!me->HasAura(SPELL_PORTAL_VISUAL_CLOSED) && !me->HasAura(SPELL_PORTAL_OPENED)) DoCast(me, SPELL_PORTAL_VISUAL_CLOSED, true); @@ -770,16 +790,6 @@ public: } } } - - if (!me->HasAura(SPELL_PORTAL_OPENED)) - return; - - if (_summonTimer <= diff) - { - DoCast(SPELL_SUMMON_POWER_PARK); - _summonTimer = urand(5, 7)*IN_MILLISECONDS; - } else - _summonTimer -= diff; } void JustSummoned(Creature* summon) @@ -811,6 +821,8 @@ public: _instance = creature->GetInstanceScript(); MoveToMalygos(); + // Talk range was not enough for this encounter + sCreatureTextMgr->SendChat(me, EMOTE_POWER_SPARK_SUMMONED, 0, CHAT_MSG_ADDON, LANG_ADDON, TEXT_RANGE_MAP); } void EnterEvadeMode() @@ -853,14 +865,9 @@ public: } } - void DamageTaken(Unit* /*done_by*/, uint32& damage) + void JustDied(Unit* /*killer*/) { - if (damage > me->GetMaxHealth()) - { - damage = 0; - DoCast(me, SPELL_POWER_SPARK_DEATH, true); - me->DespawnOrUnsummon(1000); - } + me->CastSpell(me, SPELL_POWER_SPARK_DEATH, true); // not supposed to hide the fact it's there by not selectable } private: @@ -903,8 +910,7 @@ public: else { // Error found: This is not called if the passenger is a player - - if (unit->GetTypeId() == TYPEID_UNIT) + if (unit->GetTypeId() == TYPEID_UNIT || unit->GetTypeId() == TYPEID_PLAYER) { // This will only be called if the passenger dies if (_instance) @@ -1012,7 +1018,7 @@ public: }; }; -// SmartAI does not work correctly for this (vehicles) +// SmartAI does not work correctly for vehicles class npc_wyrmrest_skytalon : public CreatureScript { public: @@ -1023,14 +1029,13 @@ public: return new npc_wyrmrest_skytalonAI (creature); } - struct npc_wyrmrest_skytalonAI : public NullCreatureAI + struct npc_wyrmrest_skytalonAI : public VehicleAI { - npc_wyrmrest_skytalonAI(Creature* creature) : NullCreatureAI(creature) - { - _instance = creature->GetInstanceScript(); + npc_wyrmrest_skytalonAI(Creature* creature) : VehicleAI(creature) { } - _timer = 1000; - _entered = false; + void IsSummonedBy(Unit* summoner) + { + summoner->CastSpell(me, SPELL_RIDE_RED_DRAGON, true); } void PassengerBoarded(Unit* /*unit*/, int8 /*seat*/, bool apply) @@ -1038,54 +1043,9 @@ public: if (!apply) me->DespawnOrUnsummon(); } - - // we can't call this in reset function, it fails. - void MakePlayerEnter() - { - if (!_instance) - return; - - if (Unit* summoner = me->ToTempSummon()->GetSummoner()) - { - if (Creature* malygos = Unit::GetCreature(*me, _instance->GetData64(DATA_MALYGOS))) - { - summoner->CastSpell(me, SPELL_RIDE_RED_DRAGON, true); - float victimThreat = malygos->getThreatManager().getThreat(summoner); - malygos->getThreatManager().resetAllAggro(); - malygos->AI()->AttackStart(me); - malygos->AddThreat(me, victimThreat); - } - } - } - - void UpdateAI(const uint32 diff) - { - if (!_entered) - { - if (_timer <= diff) - { - MakePlayerEnter(); - _entered = true; - } else - _timer -= diff; - } - } - - private: - InstanceScript* _instance; - uint32 _timer; - bool _entered; }; }; -enum AlexstraszaYells -{ - SAY_ONE, - SAY_TWO, - SAY_THREE, - SAY_FOUR -}; - class npc_alexstrasza_eoe : public CreatureScript { public: -- cgit v1.2.3 From 2292025bf9ccd78c004027f2e0621473ced82b22 Mon Sep 17 00:00:00 2001 From: Spp Date: Wed, 2 Jan 2013 09:07:52 +0100 Subject: Core/Misc: Replaced some macro definitions with inline functions --- src/server/game/DungeonFinding/LFGMgr.cpp | 16 +- src/server/game/DungeonFinding/LFGQueue.cpp | 4 +- src/server/game/Entities/GameObject/GameObject.cpp | 2 +- src/server/game/Entities/Object/ObjectDefines.h | 231 ++++++++++++++++----- .../Northrend/Nexus/EyeOfEternity/boss_malygos.cpp | 2 +- src/server/shared/Utilities/Util.h | 9 +- 6 files changed, 194 insertions(+), 70 deletions(-) (limited to 'src/server/scripts') diff --git a/src/server/game/DungeonFinding/LFGMgr.cpp b/src/server/game/DungeonFinding/LFGMgr.cpp index 3b57f02bf7c..2550f909a8b 100644 --- a/src/server/game/DungeonFinding/LFGMgr.cpp +++ b/src/server/game/DungeonFinding/LFGMgr.cpp @@ -51,7 +51,7 @@ void LFGMgr::_LoadFromDB(Field* fields, uint64 guid) if (!fields) return; - if (!IS_GROUP(guid)) + if (!IS_GROUP_GUID(guid)) return; SetLeader(guid, MAKE_NEW_GUID(fields[0].GetUInt32(), 0, HIGHGUID_PLAYER)); @@ -77,7 +77,7 @@ void LFGMgr::_LoadFromDB(Field* fields, uint64 guid) void LFGMgr::_SaveToDB(uint64 guid, uint32 db_guid) { - if (!IS_GROUP(guid)) + if (!IS_GROUP_GUID(guid)) return; PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_LFG_DATA); @@ -758,7 +758,7 @@ void LFGMgr::LeaveLfg(uint64 guid) { sLog->outDebug(LOG_FILTER_LFG, "LFGMgr::LeaveLfg: [" UI64FMTD "]", guid); - uint64 gguid = IS_GROUP(guid) ? guid : GetGroup(guid); + uint64 gguid = IS_GROUP_GUID(guid) ? guid : GetGroup(guid); LfgState state = GetState(guid); switch (state) { @@ -1624,7 +1624,7 @@ LfgType LFGMgr::GetDungeonType(uint32 dungeonId) LfgState LFGMgr::GetState(uint64 guid) { LfgState state; - if (IS_GROUP(guid)) + if (IS_GROUP_GUID(guid)) state = GroupsStore[guid].GetState(); else state = PlayersStore[guid].GetState(); @@ -1696,7 +1696,7 @@ uint8 LFGMgr::GetKicksLeft(uint64 guid) void LFGMgr::RestoreState(uint64 guid, char const *debugMsg) { - if (IS_GROUP(guid)) + if (IS_GROUP_GUID(guid)) { LfgGroupData& data = GroupsStore[guid]; if (sLog->ShouldLog(LOG_FILTER_LFG, LOG_LEVEL_DEBUG)) @@ -1725,7 +1725,7 @@ void LFGMgr::RestoreState(uint64 guid, char const *debugMsg) void LFGMgr::SetState(uint64 guid, LfgState state) { - if (IS_GROUP(guid)) + if (IS_GROUP_GUID(guid)) { LfgGroupData& data = GroupsStore[guid]; if (sLog->ShouldLog(LOG_FILTER_LFG, LOG_LEVEL_DEBUG)) @@ -1932,13 +1932,13 @@ void LFGMgr::SendLfgQueueStatus(uint64 guid, LfgQueueStatusData const& data) bool LFGMgr::IsLfgGroup(uint64 guid) { - return guid && IS_GROUP(guid) && GroupsStore[guid].IsLfgGroup(); + return guid && IS_GROUP_GUID(guid) && GroupsStore[guid].IsLfgGroup(); } LFGQueue& LFGMgr::GetQueue(uint64 guid) { uint8 queueId = 0; - if (IS_GROUP(guid)) + if (IS_GROUP_GUID(guid)) { const LfgGuidSet& players = GetPlayers(guid); uint64 pguid = players.empty() ? 0 : (*players.begin()); diff --git a/src/server/game/DungeonFinding/LFGQueue.cpp b/src/server/game/DungeonFinding/LFGQueue.cpp index 81c9705704d..dae789b2eb4 100644 --- a/src/server/game/DungeonFinding/LFGQueue.cpp +++ b/src/server/game/DungeonFinding/LFGQueue.cpp @@ -358,7 +358,7 @@ LfgCompatibility LFGQueue::CheckCompatibility(LfgGuidList check) // Store group so we don't need to call Mgr to get it later (if it's player group will be 0 otherwise would have joined as group) for (LfgRolesMap::const_iterator it2 = itQueue->second.roles.begin(); it2 != itQueue->second.roles.end(); ++it2) - proposalGroups[it2->first] = IS_GROUP(itQueue->first) ? itQueue->first : 0; + proposalGroups[it2->first] = IS_GROUP_GUID(itQueue->first) ? itQueue->first : 0; numPlayers += itQueue->second.roles.size(); @@ -601,7 +601,7 @@ std::string LFGQueue::DumpQueueInfo() const for (LfgGuidList::const_iterator it = queue.begin(); it != queue.end(); ++it) { uint64 guid = *it; - if (IS_GROUP(guid)) + if (IS_GROUP_GUID(guid)) { groups++; playersInGroup += sLFGMgr->GetPlayerCount(guid); diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp index bab2eaa4186..508147cec9f 100644 --- a/src/server/game/Entities/GameObject/GameObject.cpp +++ b/src/server/game/Entities/GameObject/GameObject.cpp @@ -270,7 +270,7 @@ void GameObject::Update(uint32 diff) } else AI()->UpdateAI(diff); - if (IS_MO_TRANSPORT(GetGUID())) + if (IS_MO_TRANSPORT_GUID(GetGUID())) { //((Transport*)this)->Update(p_time); return; diff --git a/src/server/game/Entities/Object/ObjectDefines.h b/src/server/game/Entities/Object/ObjectDefines.h index c9ee1cd2dc6..647386e0f75 100644 --- a/src/server/game/Entities/Object/ObjectDefines.h +++ b/src/server/game/Entities/Object/ObjectDefines.h @@ -21,64 +21,195 @@ #include "Define.h" -// used for creating values for respawn for example -#define MAKE_PAIR64(l, h) uint64(uint32(l) | (uint64(h) << 32)) -#define PAIR64_HIPART(x) (uint32)((uint64(x) >> 32) & UI64LIT(0x00000000FFFFFFFF)) -#define PAIR64_LOPART(x) (uint32)(uint64(x) & UI64LIT(0x00000000FFFFFFFF)) - -#define MAKE_PAIR16(l, h) uint16(uint8(l) | (uint16(h) << 8)) -#define MAKE_PAIR32(l, h) uint32(uint16(l) | (uint32(h) << 16)) -#define PAIR32_HIPART(x) (uint16)((uint32(x) >> 16) & 0x0000FFFF) -#define PAIR32_LOPART(x) (uint16)(uint32(x) & 0x0000FFFF) - enum HighGuid { - HIGHGUID_ITEM = 0x4000, // blizz 4000 - HIGHGUID_CONTAINER = 0x4000, // blizz 4000 - HIGHGUID_PLAYER = 0x0000, // blizz 0000 - HIGHGUID_GAMEOBJECT = 0xF110, // blizz F110 - HIGHGUID_TRANSPORT = 0xF120, // blizz F120 (for GAMEOBJECT_TYPE_TRANSPORT) - HIGHGUID_UNIT = 0xF130, // blizz F130 - HIGHGUID_PET = 0xF140, // blizz F140 - HIGHGUID_VEHICLE = 0xF150, // blizz F550 - HIGHGUID_DYNAMICOBJECT = 0xF100, // blizz F100 - HIGHGUID_CORPSE = 0xF101, // blizz F100 - HIGHGUID_MO_TRANSPORT = 0x1FC0, // blizz 1FC0 (for GAMEOBJECT_TYPE_MO_TRANSPORT) - HIGHGUID_GROUP = 0x1F50 + HIGHGUID_ITEM = 0x400, // blizz 4000 + HIGHGUID_CONTAINER = 0x400, // blizz 4000 + HIGHGUID_PLAYER = 0x000, // blizz 0000 + HIGHGUID_GAMEOBJECT = 0xF11, // blizz F110 + HIGHGUID_TRANSPORT = 0xF12, // blizz F120 (for GAMEOBJECT_TYPE_TRANSPORT) + HIGHGUID_UNIT = 0xF13, // blizz F130 + HIGHGUID_PET = 0xF14, // blizz F140 + HIGHGUID_VEHICLE = 0xF15, // blizz F550 + HIGHGUID_DYNAMICOBJECT = 0xF10, // blizz F100 + HIGHGUID_CORPSE = 0xF101, // blizz F100 + HIGHGUID_MO_TRANSPORT = 0x1FC, // blizz 1FC0 (for GAMEOBJECT_TYPE_MO_TRANSPORT) + HIGHGUID_GROUP = 0x1F5 }; -#define IS_EMPTY_GUID(Guid) (Guid == 0) - -#define IS_CREATURE_GUID(Guid) (GUID_HIPART(Guid) == HIGHGUID_UNIT) -#define IS_PET_GUID(Guid) (GUID_HIPART(Guid) == HIGHGUID_PET) -#define IS_VEHICLE_GUID(Guid) (GUID_HIPART(Guid) == HIGHGUID_VEHICLE) -#define IS_CRE_OR_VEH_GUID(Guid) (IS_CREATURE_GUID(Guid) || IS_VEHICLE_GUID(Guid)) -#define IS_CRE_OR_VEH_OR_PET_GUID(Guid)(IS_CRE_OR_VEH_GUID(Guid) || IS_PET_GUID(Guid)) -#define IS_PLAYER_GUID(Guid) (GUID_HIPART(Guid) == HIGHGUID_PLAYER && Guid != 0) -#define IS_UNIT_GUID(Guid) (IS_CRE_OR_VEH_OR_PET_GUID(Guid) || IS_PLAYER_GUID(Guid)) - // special case for empty guid need check -#define IS_ITEM_GUID(Guid) (GUID_HIPART(Guid) == HIGHGUID_ITEM) -#define IS_GAMEOBJECT_GUID(Guid) (GUID_HIPART(Guid) == HIGHGUID_GAMEOBJECT) -#define IS_DYNAMICOBJECT_GUID(Guid) (GUID_HIPART(Guid) == HIGHGUID_DYNAMICOBJECT) -#define IS_CORPSE_GUID(Guid) (GUID_HIPART(Guid) == HIGHGUID_CORPSE) -#define IS_TRANSPORT(Guid) (GUID_HIPART(Guid) == HIGHGUID_TRANSPORT) -#define IS_MO_TRANSPORT(Guid) (GUID_HIPART(Guid) == HIGHGUID_MO_TRANSPORT) -#define IS_GROUP(Guid) (GUID_HIPART(Guid) == HIGHGUID_GROUP) +// used for creating values for respawn for example +inline uint64 MAKE_PAIR64(uint32 l, uint32 h); +inline uint32 PAIR64_HIPART(uint64 x); +inline uint32 PAIR64_LOPART(uint64 x); +inline uint16 MAKE_PAIR16(uint8 l, uint8 h); +inline uint32 MAKE_PAIR32(uint16 l, uint16 h); +inline uint16 PAIR32_HIPART(uint32 x); +inline uint16 PAIR32_LOPART(uint32 x); + +inline bool IS_EMPTY_GUID(uint64 guid); +inline bool IS_CREATURE_GUID(uint64 guid); +inline bool IS_PET_GUID(uint64 guid); +inline bool IS_VEHICLE_GUID(uint64 guid); +inline bool IS_CRE_OR_VEH_GUID(uint64 guid); +inline bool IS_CRE_OR_VEH_OR_PET_GUID(uint64 guid); +inline bool IS_PLAYER_GUID(uint64 guid); +inline bool IS_UNIT_GUID(uint64 guid); +inline bool IS_ITEM_GUID(uint64 guid); +inline bool IS_GAMEOBJECT_GUID(uint64 guid); +inline bool IS_DYNAMICOBJECT_GUID(uint64 guid); +inline bool IS_CORPSE_GUID(uint64 guid); +inline bool IS_TRANSPORT_GUID(uint64 guid); +inline bool IS_MO_TRANSPORT_GUID(uint64 guid); +inline bool IS_GROUP_GUID(uint64 guid); // l - OBJECT_FIELD_GUID // e - OBJECT_FIELD_ENTRY for GO (except GAMEOBJECT_TYPE_MO_TRANSPORT) and creatures or UNIT_FIELD_PETNUMBER for pets // h - OBJECT_FIELD_GUID + 1 -#define MAKE_NEW_GUID(l, e, h) uint64(uint64(l) | (uint64(e) << 24) | (uint64(h) << 48)) +inline uint64 MAKE_NEW_GUID(uint32 l, uint32 e, uint32 h); + +//#define GUID_HIPART(x) (uint32)((uint64(x) >> 52)) & 0x0000FFFF) +inline uint32 GUID_HIPART(uint64 guid); +inline uint32 GUID_ENPART(uint64 x); +inline uint32 GUID_LOPART(uint64 x); + +inline bool IsGuidHaveEnPart(uint64 guid); +inline char const* GetLogNameForGuid(uint64 guid); + +uint64 MAKE_PAIR64(uint32 l, uint32 h) +{ + return uint64(l | (uint64(h) << 32)); +} + +uint32 PAIR64_HIPART(uint64 x) +{ + return (uint32)((x >> 32) & UI64LIT(0x00000000FFFFFFFF)); +} -#define GUID_HIPART(x) (uint32)((uint64(x) >> 48) & 0x0000FFFF) +uint32 PAIR64_LOPART(uint64 x) +{ + return (uint32)(x & UI64LIT(0x00000000FFFFFFFF)); +} -// We have different low and middle part size for different guid types -#define _GUID_ENPART_2(x) 0 -#define _GUID_ENPART_3(x) (uint32)((uint64(x) >> 24) & UI64LIT(0x0000000000FFFFFF)) -#define _GUID_LOPART_2(x) (uint32)(uint64(x) & UI64LIT(0x00000000FFFFFFFF)) -#define _GUID_LOPART_3(x) (uint32)(uint64(x) & UI64LIT(0x0000000000FFFFFF)) +uint16 MAKE_PAIR16(uint8 l, uint8 h) +{ + return uint16(l | (uint16(h) << 8)); +} -inline bool IsGuidHaveEnPart(uint64 guid) +uint32 MAKE_PAIR32(uint16 l, uint16 h) +{ + return uint32(l | (uint32(h) << 16)); +} + +uint16 PAIR32_HIPART(uint32 x) +{ + return (uint16)((x >> 16) & 0x0000FFFF); +} + +uint16 PAIR32_LOPART(uint32 x) +{ + return (uint16)(x & 0x0000FFFF); +} + +bool IS_EMPTY_GUID(uint64 guid) +{ + return guid == 0; +} + +bool IS_CREATURE_GUID(uint64 guid) +{ + return GUID_HIPART(guid) == HIGHGUID_UNIT; +} + +bool IS_PET_GUID(uint64 guid) +{ + return GUID_HIPART(guid) == HIGHGUID_PET; +} + +bool IS_VEHICLE_GUID(uint64 guid) +{ + return GUID_HIPART(guid) == HIGHGUID_VEHICLE; +} + +bool IS_CRE_OR_VEH_GUID(uint64 guid) +{ + return IS_CREATURE_GUID(guid) || IS_VEHICLE_GUID(guid); +} + +bool IS_CRE_OR_VEH_OR_PET_GUID(uint64 guid) +{ + return IS_CRE_OR_VEH_GUID(guid) || IS_PET_GUID(guid); +} + +bool IS_PLAYER_GUID(uint64 guid) +{ + return guid != 0 && GUID_HIPART(guid) == HIGHGUID_PLAYER; +} + +bool IS_UNIT_GUID(uint64 guid) +{ + return IS_CRE_OR_VEH_OR_PET_GUID(guid) || IS_PLAYER_GUID(guid); +} + +bool IS_ITEM_GUID(uint64 guid) +{ + return GUID_HIPART(guid) == HIGHGUID_ITEM; +} + +bool IS_GAMEOBJECT_GUID(uint64 guid) +{ + return GUID_HIPART(guid) == HIGHGUID_GAMEOBJECT; +} + +bool IS_DYNAMICOBJECT_GUID(uint64 guid) +{ + return GUID_HIPART(guid) == HIGHGUID_DYNAMICOBJECT; +} + +bool IS_CORPSE_GUID(uint64 guid) +{ + return GUID_HIPART(guid) == HIGHGUID_CORPSE; +} + +bool IS_TRANSPORT_GUID(uint64 guid) +{ + return GUID_HIPART(guid) == HIGHGUID_TRANSPORT; +} + +bool IS_MO_TRANSPORT_GUID(uint64 guid) +{ + return GUID_HIPART(guid) == HIGHGUID_MO_TRANSPORT; +} + +bool IS_GROUP_GUID(uint64 guid) +{ + return GUID_HIPART(guid) == HIGHGUID_GROUP; +} + +uint64 MAKE_NEW_GUID(uint32 l, uint32 e, uint32 h) +{ + return uint64(uint64(l) | (uint64(e) << 32) | (uint64(h) << (h == HIGHGUID_CORPSE) ? 48 : 52)); +} + +uint32 GUID_HIPART(uint64 guid) +{ + uint32 t = ((uint64(guid) >> 48) & 0x0000FFFF); + return (t == HIGHGUID_CORPSE) ? t : ((t >> 4) & 0x00000FFF); +} + +uint32 GUID_ENPART(uint64 x) +{ + return IsGuidHaveEnPart(x) + ? ((uint32)((x >> 32) & UI64LIT(0x00000000000FFFFF))) + : 0; +} + +uint32 GUID_LOPART(uint64 x) +{ + // _GUID_LOPART_3 and _GUID_LOPART_2 were both equal to PAIR64_LOPART + return PAIR64_LOPART(x); +} + +bool IsGuidHaveEnPart(uint64 guid) { switch (GUID_HIPART(guid)) { @@ -99,10 +230,7 @@ inline bool IsGuidHaveEnPart(uint64 guid) } } -#define GUID_ENPART(x) (IsGuidHaveEnPart(x) ? _GUID_ENPART_3(x) : _GUID_ENPART_2(x)) -#define GUID_LOPART(x) (IsGuidHaveEnPart(x) ? _GUID_LOPART_3(x) : _GUID_LOPART_2(x)) - -inline char const* GetLogNameForGuid(uint64 guid) +char const* GetLogNameForGuid(uint64 guid) { switch (GUID_HIPART(guid)) { @@ -121,4 +249,5 @@ inline char const* GetLogNameForGuid(uint64 guid) return ""; } } + #endif diff --git a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp index fcbc87ad47d..25daff60761 100644 --- a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp +++ b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp @@ -771,7 +771,7 @@ public: } } - void UpdateAI(uint32 const diff) + void UpdateAI(uint32 const /*diff*/) { // When duration of oppened riff visual ends, // closed one should be cast diff --git a/src/server/shared/Utilities/Util.h b/src/server/shared/Utilities/Util.h index 3cf8857ead6..10c2e866a7d 100644 --- a/src/server/shared/Utilities/Util.h +++ b/src/server/shared/Utilities/Util.h @@ -352,11 +352,6 @@ std::string ByteArrayToHexStr(uint8 const* bytes, uint32 length, bool reverse = #ifndef _FLAG96 #define _FLAG96 -#ifndef PAIR64_HIPART -#define PAIR64_HIPART(x) (uint32)((uint64(x) >> 32) & UI64LIT(0x00000000FFFFFFFF)) -#define PAIR64_LOPART(x) (uint32)(uint64(x) & UI64LIT(0x00000000FFFFFFFF)) -#endif - // simple class for not-modifyable list template class HookList @@ -404,8 +399,8 @@ public: flag96(uint64 p1, uint32 p2) { - part[0] = PAIR64_LOPART(p1); - part[1] = PAIR64_HIPART(p1); + part[0] = (uint32)(p1 & UI64LIT(0x00000000FFFFFFFF)); + part[1] = (uint32)((p1 >> 32) & UI64LIT(0x00000000FFFFFFFF)); part[2] = p2; } -- cgit v1.2.3