diff options
Diffstat (limited to 'src')
8 files changed, 135 insertions, 28 deletions
diff --git a/src/bindings/scripts/CMakeLists.txt b/src/bindings/scripts/CMakeLists.txt index 3dcd38fa256..e4375732161 100644 --- a/src/bindings/scripts/CMakeLists.txt +++ b/src/bindings/scripts/CMakeLists.txt @@ -246,6 +246,8 @@ SET(trinityscript_LIB_SRCS scripts/zone/naxxramas/def_naxxramas.h scripts/zone/naxxramas/instance_naxxramas.cpp scripts/zone/netherstorm/netherstorm.cpp + scripts/zone/obsidian_sanctum/def_obsidian_sanctum.h + scripts/zone/obsidian_sanctum/instance_obsidian_sanctum.cpp scripts/zone/onyxias_lair/boss_onyxia.cpp scripts/zone/orgrimmar/orgrimmar.cpp scripts/zone/razorfen_downs/boss_amnennar_the_coldbringer.cpp diff --git a/src/bindings/scripts/ScriptMgr.cpp b/src/bindings/scripts/ScriptMgr.cpp index 3dbdd4899a1..a7a57818df7 100644 --- a/src/bindings/scripts/ScriptMgr.cpp +++ b/src/bindings/scripts/ScriptMgr.cpp @@ -414,6 +414,9 @@ extern void AddSC_boss_ormorok(); extern void AddSC_boss_keristrasza(); extern void AddSC_instance_nexus(); +//Obsidian Sanctum +extern void AddSC_instance_obsidian_sanctum(); + //Onyxia's Lair extern void AddSC_boss_onyxia(); @@ -1315,6 +1318,9 @@ void ScriptsInit(char const* cfg_file = "trinitycore.conf") AddSC_boss_keristrasza(); AddSC_instance_nexus(); + //Obsidian Sanctum + AddSC_instance_obsidian_sanctum(); + //Onyxia's Lair AddSC_boss_onyxia(); diff --git a/src/bindings/scripts/VC80/80ScriptDev2.vcproj b/src/bindings/scripts/VC80/80ScriptDev2.vcproj index a615d579f4c..fde415501c0 100644 --- a/src/bindings/scripts/VC80/80ScriptDev2.vcproj +++ b/src/bindings/scripts/VC80/80ScriptDev2.vcproj @@ -2818,6 +2818,18 @@ </File> </Filter> </Filter> + <Filter + Name="Obsidian Sanctum" + > + <File + RelativePath="..\scripts\zone\obsidian_sanctum\def_obsidian_sanctum.h" + > + </File> + <File + RelativePath="..\scripts\zone\obsidian_sanctum\instance_obsidian_sanctum.cpp" + > + </File> + </Filter> <Filter Name="Vault of Archavon" > diff --git a/src/bindings/scripts/VC90/90ScriptDev2.vcproj b/src/bindings/scripts/VC90/90ScriptDev2.vcproj index effb6e84d13..958a0bf0eae 100644 --- a/src/bindings/scripts/VC90/90ScriptDev2.vcproj +++ b/src/bindings/scripts/VC90/90ScriptDev2.vcproj @@ -2819,6 +2819,18 @@ </File> </Filter> </Filter> + <Filter + Name="Obsidian Sanctum" + > + <File + RelativePath="..\scripts\zone\obsidian_sanctum\def_obsidian_sanctum.h" + > + </File> + <File + RelativePath="..\scripts\zone\obsidian_sanctum\instance_obsidian_sanctum.cpp" + > + </File> + </Filter> <Filter Name="Vault of Archavon" > diff --git a/src/bindings/scripts/scripts/zone/obsidian_sanctum/def_obsidian_sanctum.h b/src/bindings/scripts/scripts/zone/obsidian_sanctum/def_obsidian_sanctum.h index 59d76502af3..461834a2386 100644 --- a/src/bindings/scripts/scripts/zone/obsidian_sanctum/def_obsidian_sanctum.h +++ b/src/bindings/scripts/scripts/zone/obsidian_sanctum/def_obsidian_sanctum.h @@ -1,4 +1,20 @@ #ifndef DEF_OBSIDIAN_SANCTUM_H #define DEF_OBSIDIAN_SANCTUM_H +enum +{ + TYPE_SARTHARION_EVENT = 1, + + DATA_SARTHARION = 10, + DATA_TENEBRON = 11, + DATA_SHADRON = 12, + DATA_VESPERON = 13, + + NPC_SARTHARION = 28860, + NPC_TENEBRON = 30452, + NPC_SHADRON = 30451, + NPC_VESPERON = 30449, + GO_TWILIGHT_PORTAL = 193988 +}; + #endif diff --git a/src/bindings/scripts/scripts/zone/obsidian_sanctum/instance_obsidian_sanctum.cpp b/src/bindings/scripts/scripts/zone/obsidian_sanctum/instance_obsidian_sanctum.cpp index 898574c99eb..72166261684 100644 --- a/src/bindings/scripts/scripts/zone/obsidian_sanctum/instance_obsidian_sanctum.cpp +++ b/src/bindings/scripts/scripts/zone/obsidian_sanctum/instance_obsidian_sanctum.cpp @@ -1,9 +1,86 @@ #include "precompiled.h" #include "def_obsidian_sanctum.h" +#define ENCOUNTERS 1 + +/* Obsidian Sanctum encounters: +0 - Sartharion +*/ + struct TRINITY_DLL_DECL instance_obsidian_sanctum : public ScriptedInstance { instance_obsidian_sanctum(Map *Map) : ScriptedInstance(Map) {Initialize();}; + + uint32 m_uiEncounter[ENCOUNTERS]; + uint64 m_uiSartharionGUID; + uint64 m_uiTenebronGUID; + uint64 m_uiShadronGUID; + uint64 m_uiVesperonGUID; + + void Initialize() + { + m_uiSartharionGUID = 0; + m_uiTenebronGUID = 0; + m_uiShadronGUID = 0; + m_uiVesperonGUID = 0; + + for(uint8 i = 0; i < ENCOUNTERS; ++i) + m_uiEncounter[i] = NOT_STARTED; + } + + void OnCreatureCreate(Creature* pCreature, uint32 entry) + { + switch(pCreature->GetEntry()) + { + case NPC_SARTHARION: + m_uiSartharionGUID = pCreature->GetGUID(); + break; + //three dragons below set to active state once created. + //we must expect bigger raid to encounter main boss, and then three dragons must be active due to grid differences + case NPC_TENEBRON: + m_uiTenebronGUID = pCreature->GetGUID(); + pCreature->setActive(true); + break; + case NPC_SHADRON: + m_uiShadronGUID = pCreature->GetGUID(); + pCreature->setActive(true); + break; + case NPC_VESPERON: + m_uiVesperonGUID = pCreature->GetGUID(); + pCreature->setActive(true); + break; + } + } + + void SetData(uint32 uiType, uint32 uiData) + { + if (uiType == TYPE_SARTHARION_EVENT) + m_uiEncounter[0] = uiData; + } + + uint32 GetData(uint32 uiType) + { + if (uiType == TYPE_SARTHARION_EVENT) + return m_uiEncounter[0]; + + return 0; + } + + uint64 GetData64(uint32 uiData) + { + switch(uiData) + { + case DATA_SARTHARION: + return m_uiSartharionGUID; + case DATA_TENEBRON: + return m_uiTenebronGUID; + case DATA_SHADRON: + return m_uiShadronGUID; + case DATA_VESPERON: + return m_uiVesperonGUID; + } + return 0; + } }; InstanceData* GetInstanceData_instance_obsidian_sanctum(Map* map) diff --git a/src/bindings/scripts/scripts/zone/temple_of_ahnqiraj/boss_twinemperors.cpp b/src/bindings/scripts/scripts/zone/temple_of_ahnqiraj/boss_twinemperors.cpp index 3089f3267c8..9449524412c 100644 --- a/src/bindings/scripts/scripts/zone/temple_of_ahnqiraj/boss_twinemperors.cpp +++ b/src/bindings/scripts/scripts/zone/temple_of_ahnqiraj/boss_twinemperors.cpp @@ -312,40 +312,18 @@ struct TRINITY_DLL_DECL boss_twinemperorsAI : public ScriptedAI } } - class AnyBugCheck - { - public: - AnyBugCheck(WorldObject const* obj, float range) : i_obj(obj), i_range(range) {} - bool operator()(Creature* u) - { - Creature *c = u; - if (!i_obj->IsWithinDistInMap(c, i_range)) - return false; - return (c->GetEntry() == 15316 || c->GetEntry() == 15317); - } - private: - WorldObject const* i_obj; - float i_range; - }; - Creature *RespawnNearbyBugsAndGetOne() { - CellPair p(Trinity::ComputeCellPair(m_creature->GetPositionX(), m_creature->GetPositionY())); - Cell cell(p); - cell.data.Part.reserved = ALL_DISTRICT; - cell.SetNoCreate(); - - std::list<Creature*> unitList; + std::list<Creature*> lUnitList; + m_creature->GetCreatureListWithEntryInGrid(lUnitList,15316,150.0f); + m_creature->GetCreatureListWithEntryInGrid(lUnitList,15317,150.0f); - AnyBugCheck u_check(m_creature, 150); - Trinity::CreatureListSearcher<AnyBugCheck> searcher(m_creature, unitList, u_check); - TypeContainerVisitor<Trinity::CreatureListSearcher<AnyBugCheck>, GridTypeMapContainer > grid_creature_searcher(searcher); - CellLock<GridReadGuard> cell_lock(cell, p); - cell_lock->Visit(cell_lock, grid_creature_searcher, *(m_creature->GetMap())); + if (lUnitList.empty()) + return NULL; Creature *nearb = NULL; - for(std::list<Creature*>::iterator iter = unitList.begin(); iter != unitList.end(); ++iter) + for(std::list<Creature*>::iterator iter = lUnitList.begin(); iter != lUnitList.end(); ++iter) { Creature *c = *iter; if (c) diff --git a/src/shared/Errors.h b/src/shared/Errors.h index 992b1752a0f..5cfd109ee01 100644 --- a/src/shared/Errors.h +++ b/src/shared/Errors.h @@ -23,6 +23,10 @@ #include "Common.h" +#ifndef HAVE_CONFIG_H +#define HAVE_ACE_STACK_TRACE_H 1 +#endif + #ifdef HAVE_ACE_STACK_TRACE_H #include "ace/Stack_Trace.h" #endif |