diff options
author | megamage <none@none> | 2009-05-17 16:37:03 -0500 |
---|---|---|
committer | megamage <none@none> | 2009-05-17 16:37:03 -0500 |
commit | c75e3d526b6f75911214df10eaeba49d57c51216 (patch) | |
tree | 67a25ba187f8b2a621cf36917ab0cd6f627c5784 /src | |
parent | 424391d7c4175b7baec814e00559a393d7ff1ba1 (diff) |
*Update Naxx script. Let boss evade if they are pulled out of room.
--HG--
branch : trunk
Diffstat (limited to 'src')
17 files changed, 176 insertions, 101 deletions
diff --git a/src/bindings/scripts/include/sc_creature.cpp b/src/bindings/scripts/include/sc_creature.cpp index c1edc567457..6ab54b95428 100644 --- a/src/bindings/scripts/include/sc_creature.cpp +++ b/src/bindings/scripts/include/sc_creature.cpp @@ -84,29 +84,13 @@ ScriptedAI::ScriptedAI(Creature* creature) : CreatureAI(creature), m_creature(cr HeroicMode = m_creature->GetMap()->IsHeroic(); } -void ScriptedAI::AttackStart(Unit* who, bool melee) +void ScriptedAI::AttackStartNoMove(Unit* who) { if (!who) return; - if (m_creature->Attack(who, melee)) - { - if(melee) - DoStartMovement(who); - else - DoStartNoMovement(who); - } -} - -void ScriptedAI::AttackStart(Unit* who) -{ - if (!who) - return; - - if (m_creature->Attack(who, true)) - { - DoStartMovement(who); - } + if(m_creature->Attack(who, false)) + DoStartNoMovement(who); } void ScriptedAI::UpdateAI(const uint32 diff) @@ -650,6 +634,12 @@ void Scripted_NoMovementAI::AttackStart(Unit* who) } } +BossAI::BossAI(Creature *c, uint32 id) : ScriptedAI(c) +, bossId(id), summons(me), instance(c->GetInstanceData()) +, boundary(instance ? instance->GetBossBoundary(id) : NULL) +{ +} + void BossAI::_Reset() { events.Reset(); @@ -673,6 +663,53 @@ void BossAI::_EnterCombat() instance->SetBossState(bossId, IN_PROGRESS); } +bool BossAI::CheckBoundary(Unit *who) +{ + if(!boundary || !who) + return true; + + for(BossBoundaryMap::const_iterator itr = boundary->begin(); itr != boundary->end(); ++itr) + { + switch(itr->first) + { + case BOUNDARY_N: + if(me->GetPositionX() > itr->second) + return false; + break; + case BOUNDARY_S: + if(me->GetPositionX() < itr->second) + return false; + break; + case BOUNDARY_E: + if(me->GetPositionY() < itr->second) + return false; + break; + case BOUNDARY_W: + if(me->GetPositionY() > itr->second) + return false; + break; + case BOUNDARY_NW: + if(me->GetPositionX() + me->GetPositionY() > itr->second) + return false; + break; + case BOUNDARY_SE: + if(me->GetPositionX() + me->GetPositionY() < itr->second) + return false; + break; + case BOUNDARY_NE: + if(me->GetPositionX() - me->GetPositionY() > itr->second) + return false; + break; + case BOUNDARY_SW: + if(me->GetPositionX() - me->GetPositionY() < itr->second) + return false; + break; + } + } + + return true; +} + void BossAI::JustSummoned(Creature *summon) { summons.Summon(summon); diff --git a/src/bindings/scripts/include/sc_creature.h b/src/bindings/scripts/include/sc_creature.h index 80016619e8b..dc1b8f6144f 100644 --- a/src/bindings/scripts/include/sc_creature.h +++ b/src/bindings/scripts/include/sc_creature.h @@ -11,6 +11,7 @@ #include "Creature.h" #include "CreatureAI.h" #include "CreatureAIImpl.h" +#include "InstanceData.h" class ScriptedInstance; @@ -55,9 +56,7 @@ struct TRINITY_DLL_DECL ScriptedAI : public CreatureAI //CreatureAI Functions //************* - //Called at each attack of m_creature by any victim - void AttackStart(Unit *); - void AttackStart(Unit *, bool melee); + void AttackStartNoMove(Unit *target); // Called at any Damage from any attacker (before damage apply) void DamageTaken(Unit *done_by, uint32 &damage) {} @@ -204,27 +203,36 @@ struct TRINITY_DLL_DECL Scripted_NoMovementAI : public ScriptedAI struct TRINITY_DLL_DECL BossAI : public ScriptedAI { - BossAI(Creature *c, uint32 id) : ScriptedAI(c), bossId(id) - , summons(me), instance(c->GetInstanceData()) - {} + BossAI(Creature *c, uint32 id); - uint32 bossId; + const uint32 bossId; EventMap events; SummonList summons; - InstanceData *instance; + InstanceData * const instance; + const BossBoundaryMap * const boundary; void JustSummoned(Creature *summon); void SummonedCreatureDespawn(Creature *summon); void UpdateAI(const uint32 diff) = 0; - void _Reset(); - void _EnterCombat(); - void _JustDied(); - void Reset() { _Reset(); } void EnterCombat(Unit *who) { _EnterCombat(); } void JustDied(Unit *killer) { _JustDied(); } + + protected: + void _Reset(); + void _EnterCombat(); + void _JustDied(); + + bool CheckInRoom() + { + if(CheckBoundary(me)) + return true; + EnterEvadeMode(); + return false; + } + bool CheckBoundary(Unit *who); }; #endif diff --git a/src/bindings/scripts/scripts/zone/black_temple/boss_illidan.cpp b/src/bindings/scripts/scripts/zone/black_temple/boss_illidan.cpp index 68431cb81ee..855dd7f0d05 100644 --- a/src/bindings/scripts/scripts/zone/black_temple/boss_illidan.cpp +++ b/src/bindings/scripts/scripts/zone/black_temple/boss_illidan.cpp @@ -441,9 +441,9 @@ struct TRINITY_DLL_DECL boss_illidan_stormrageAI : public ScriptedAI return; if(Phase == PHASE_FLIGHT || Phase == PHASE_DEMON) - ScriptedAI::AttackStart(who, false); + AttackStartNoMove(who); else - ScriptedAI::AttackStart(who, true); + ScriptedAI::AttackStart(who); } void MoveInLineOfSight(Unit *who) {} @@ -1415,16 +1415,16 @@ struct TRINITY_DLL_DECL boss_maievAI : public ScriptedAI return; if(Phase == PHASE_TALK_SEQUENCE) - ScriptedAI::AttackStart(who, false); + AttackStartNoMove(who); else if(Phase == PHASE_DEMON || Phase == PHASE_TRANSFORM_SEQUENCE ) { GETUNIT(Illidan, IllidanGUID); if(Illidan && m_creature->IsWithinDistInMap(Illidan, 25)) BlinkToPlayer();//Do not let dread aura hurt her. - ScriptedAI::AttackStart(who, false); + AttackStartNoMove(who); } else - ScriptedAI::AttackStart(who, true); + ScriptedAI::AttackStart(who); } void DoAction(const int32 param) diff --git a/src/bindings/scripts/scripts/zone/hellfire_citadel/hellfire_ramparts/boss_vazruden_the_herald.cpp b/src/bindings/scripts/scripts/zone/hellfire_citadel/hellfire_ramparts/boss_vazruden_the_herald.cpp index bb7e1a2c29e..46e08c40432 100644 --- a/src/bindings/scripts/scripts/zone/hellfire_citadel/hellfire_ramparts/boss_vazruden_the_herald.cpp +++ b/src/bindings/scripts/scripts/zone/hellfire_citadel/hellfire_ramparts/boss_vazruden_the_herald.cpp @@ -339,7 +339,7 @@ struct TRINITY_DLL_DECL boss_vazruden_the_heraldAI : public ScriptedAI summoned->AddUnitMovementFlag(MOVEMENTFLAG_LEVITATING); summoned->SetSpeed(MOVE_FLIGHT, 2.5); if(victim) - ((ScriptedAI*)summoned->AI())->AttackStart(victim,false); + AttackStartNoMove(victim); } else if(victim) summoned->AI()->AttackStart(victim); @@ -349,7 +349,7 @@ struct TRINITY_DLL_DECL boss_vazruden_the_heraldAI : public ScriptedAI { if(sentryDown) { - AttackStart(killer, false); + AttackStartNoMove(killer); sentryDown = false; } else diff --git a/src/bindings/scripts/scripts/zone/naxxramas/boss_anubrekhan.cpp b/src/bindings/scripts/scripts/zone/naxxramas/boss_anubrekhan.cpp index c675c8d7c27..476141dfa57 100644 --- a/src/bindings/scripts/scripts/zone/naxxramas/boss_anubrekhan.cpp +++ b/src/bindings/scripts/scripts/zone/naxxramas/boss_anubrekhan.cpp @@ -77,7 +77,7 @@ struct TRINITY_DLL_DECL boss_anubrekhanAI : public BossAI void UpdateAI(const uint32 diff) { - if(!UpdateVictim()) + if(!UpdateVictim() || !CheckInRoom()) return; events.Update(diff); diff --git a/src/bindings/scripts/scripts/zone/naxxramas/boss_gluth.cpp b/src/bindings/scripts/scripts/zone/naxxramas/boss_gluth.cpp index 7ac92252383..3e44b1c1f6e 100644 --- a/src/bindings/scripts/scripts/zone/naxxramas/boss_gluth.cpp +++ b/src/bindings/scripts/scripts/zone/naxxramas/boss_gluth.cpp @@ -99,7 +99,7 @@ struct TRINITY_DLL_DECL boss_gluthAI : public BossAI void UpdateAI(const uint32 diff) { - if(!UpdateVictimWithGaze()) + if(!UpdateVictimWithGaze() || !CheckInRoom()) return; events.Update(diff); diff --git a/src/bindings/scripts/scripts/zone/naxxramas/boss_gothik.cpp b/src/bindings/scripts/scripts/zone/naxxramas/boss_gothik.cpp index 90b82679c68..dad6fc9e0ee 100644 --- a/src/bindings/scripts/scripts/zone/naxxramas/boss_gothik.cpp +++ b/src/bindings/scripts/scripts/zone/naxxramas/boss_gothik.cpp @@ -202,7 +202,7 @@ struct TRINITY_DLL_DECL boss_gothikAI : public BossAI void UpdateAI(const uint32 diff) { - if(!UpdateVictimByReact()) + if(!UpdateVictimByReact() || !CheckInRoom()) return; events.Update(diff); diff --git a/src/bindings/scripts/scripts/zone/naxxramas/boss_heigan.cpp b/src/bindings/scripts/scripts/zone/naxxramas/boss_heigan.cpp index 0302a93c488..06fdec15206 100644 --- a/src/bindings/scripts/scripts/zone/naxxramas/boss_heigan.cpp +++ b/src/bindings/scripts/scripts/zone/naxxramas/boss_heigan.cpp @@ -95,7 +95,7 @@ struct TRINITY_DLL_DECL boss_heiganAI : public BossAI void UpdateAI(const uint32 diff) { - if(!UpdateVictim()) + if(!UpdateVictim() || !CheckInRoom()) return; events.Update(diff); diff --git a/src/bindings/scripts/scripts/zone/naxxramas/boss_noth.cpp b/src/bindings/scripts/scripts/zone/naxxramas/boss_noth.cpp index 1f7b1a55daa..3299ab85c42 100644 --- a/src/bindings/scripts/scripts/zone/naxxramas/boss_noth.cpp +++ b/src/bindings/scripts/scripts/zone/naxxramas/boss_noth.cpp @@ -128,19 +128,8 @@ struct TRINITY_DLL_DECL boss_nothAI : public BossAI void UpdateAI(const uint32 diff) { - if(me->HasReactState(REACT_AGGRESSIVE)) // ground - { - if(!UpdateVictim()) - return; - } - else // balcony - { - if(me->getThreatManager().isThreatListEmpty()) // if no enemy, go back at once - { - events.Reset(); - events.ScheduleEvent(EVENT_GROUND, 0); - } - } + if(!UpdateVictimByReact() || !CheckInRoom()) + return; events.Update(diff); diff --git a/src/bindings/scripts/scripts/zone/naxxramas/boss_sapphiron.cpp b/src/bindings/scripts/scripts/zone/naxxramas/boss_sapphiron.cpp index 71259df7824..dce3c974f47 100644 --- a/src/bindings/scripts/scripts/zone/naxxramas/boss_sapphiron.cpp +++ b/src/bindings/scripts/scripts/zone/naxxramas/boss_sapphiron.cpp @@ -171,13 +171,13 @@ struct TRINITY_DLL_DECL boss_sapphironAI : public BossAI if(!phase) return; + if(!UpdateVictimByReact() || !CheckInRoom()) + return; + events.Update(diff); if(phase == PHASE_GROUND) { - if(!UpdateVictim()) - return; - while(uint32 eventId = events.ExecuteEvent()) { switch(eventId) @@ -224,12 +224,6 @@ struct TRINITY_DLL_DECL boss_sapphironAI : public BossAI } else { - /*if(me->getThreatManager().isThreatListEmpty()) - { - EnterEvadeMode(); - return; - }*/ - if(uint32 eventId = events.ExecuteEvent()) { switch(eventId) diff --git a/src/bindings/scripts/scripts/zone/naxxramas/instance_naxxramas.cpp b/src/bindings/scripts/scripts/zone/naxxramas/instance_naxxramas.cpp index 92f6180045a..d9a2c80064d 100644 --- a/src/bindings/scripts/scripts/zone/naxxramas/instance_naxxramas.cpp +++ b/src/bindings/scripts/scripts/zone/naxxramas/instance_naxxramas.cpp @@ -19,29 +19,29 @@ const DoorData doorData[] = { - {181126, BOSS_ANUBREKHAN,DOOR_TYPE_ROOM}, - {181195, BOSS_ANUBREKHAN,DOOR_TYPE_PASSAGE}, - {194022, BOSS_FAERLINA, DOOR_TYPE_PASSAGE}, - {181209, BOSS_FAERLINA, DOOR_TYPE_PASSAGE}, - {181209, BOSS_MAEXXNA, DOOR_TYPE_ROOM}, - {181200, BOSS_NOTH, DOOR_TYPE_ROOM}, - {181201, BOSS_NOTH, DOOR_TYPE_PASSAGE}, - {181202, BOSS_NOTH, DOOR_TYPE_PASSAGE}, - {181202, BOSS_HEIGAN, DOOR_TYPE_ROOM}, - {181203, BOSS_HEIGAN, DOOR_TYPE_PASSAGE}, - {181241, BOSS_HEIGAN, DOOR_TYPE_PASSAGE}, - {181241, BOSS_LOATHEB, DOOR_TYPE_ROOM}, - {181123, BOSS_PATCHWERK, DOOR_TYPE_PASSAGE}, - {181123, BOSS_GROBBULUS, DOOR_TYPE_ROOM}, - {181120, BOSS_GLUTH, DOOR_TYPE_PASSAGE}, - {181121, BOSS_GLUTH, DOOR_TYPE_PASSAGE}, - {181121, BOSS_THADDIUS, DOOR_TYPE_ROOM}, - {181124, BOSS_RAZUVIOUS, DOOR_TYPE_PASSAGE}, - {181124, BOSS_GOTHIK, DOOR_TYPE_ROOM}, - {181125, BOSS_GOTHIK, DOOR_TYPE_PASSAGE}, - {181119, BOSS_GOTHIK, DOOR_TYPE_PASSAGE}, - {181119, BOSS_HORSEMEN, DOOR_TYPE_ROOM}, - {0, 0, DOOR_TYPE_ROOM}, // EOF + {181126, BOSS_ANUBREKHAN,DOOR_TYPE_ROOM, BOUNDARY_S}, + {181195, BOSS_ANUBREKHAN,DOOR_TYPE_PASSAGE, 0}, + {194022, BOSS_FAERLINA, DOOR_TYPE_PASSAGE, 0}, + {181209, BOSS_FAERLINA, DOOR_TYPE_PASSAGE, 0}, + {181209, BOSS_MAEXXNA, DOOR_TYPE_ROOM, BOUNDARY_SW}, + {181200, BOSS_NOTH, DOOR_TYPE_ROOM, BOUNDARY_N}, + {181201, BOSS_NOTH, DOOR_TYPE_PASSAGE, BOUNDARY_E}, + {181202, BOSS_NOTH, DOOR_TYPE_PASSAGE, 0}, + {181202, BOSS_HEIGAN, DOOR_TYPE_ROOM, BOUNDARY_N}, + {181203, BOSS_HEIGAN, DOOR_TYPE_PASSAGE, BOUNDARY_E}, + {181241, BOSS_HEIGAN, DOOR_TYPE_PASSAGE, 0}, + {181241, BOSS_LOATHEB, DOOR_TYPE_ROOM, BOUNDARY_W}, + {181123, BOSS_PATCHWERK, DOOR_TYPE_PASSAGE, 0}, + {181123, BOSS_GROBBULUS, DOOR_TYPE_ROOM, 0}, + {181120, BOSS_GLUTH, DOOR_TYPE_PASSAGE, BOUNDARY_NW}, + {181121, BOSS_GLUTH, DOOR_TYPE_PASSAGE, 0}, + {181121, BOSS_THADDIUS, DOOR_TYPE_ROOM, 0}, + {181124, BOSS_RAZUVIOUS, DOOR_TYPE_PASSAGE, 0}, + {181124, BOSS_GOTHIK, DOOR_TYPE_ROOM, BOUNDARY_N}, + {181125, BOSS_GOTHIK, DOOR_TYPE_PASSAGE, BOUNDARY_S}, + {181119, BOSS_GOTHIK, DOOR_TYPE_PASSAGE, 0}, + {181119, BOSS_HORSEMEN, DOOR_TYPE_ROOM, BOUNDARY_NE}, + {0, 0, DOOR_TYPE_ROOM, 0}, // EOF }; const MinionData minionData[] = @@ -68,10 +68,10 @@ const float HeiganEruptionSlope[3] = (-3637 - HeiganPos[1]) /(2771 - HeiganPos[0]), }; -// 0 H O-->x -// 1 | -// 2 V -// 3 y +// 0 H x +// 1 ^ +// 2 | +// 3 y<--o inline uint32 GetEruptionSection(float x, float y) { y -= HeiganPos[1]; diff --git a/src/bindings/scripts/scripts/zone/shattrath/shattrath_city.cpp b/src/bindings/scripts/scripts/zone/shattrath/shattrath_city.cpp index e346b9c25fc..fe57e99c035 100644 --- a/src/bindings/scripts/scripts/zone/shattrath/shattrath_city.cpp +++ b/src/bindings/scripts/scripts/zone/shattrath/shattrath_city.cpp @@ -94,7 +94,7 @@ bool GossipSelect_npc_raliq_the_drunk(Player *player, Creature *_Creature, uint3 { player->CLOSE_GOSSIP_MENU(); _Creature->setFaction(FACTION_HOSTILE_RD); - ((npc_raliq_the_drunkAI*)_Creature->AI())->AttackStart(player); + _Creature->AI()->AttackStart(player); } return true; } @@ -158,7 +158,7 @@ bool GossipHello_npc_salsalabim(Player *player, Creature *_Creature) if( player->GetQuestStatus(QUEST_10004) == QUEST_STATUS_INCOMPLETE ) { _Creature->setFaction(FACTION_HOSTILE_SA); - ((npc_salsalabimAI*)_Creature->AI())->AttackStart(player); + _Creature->AI()->AttackStart(player); } else { diff --git a/src/bindings/scripts/scripts/zone/tempest_keep/the_eye/boss_alar.cpp b/src/bindings/scripts/scripts/zone/tempest_keep/the_eye/boss_alar.cpp index dfeb7fea3e6..5f1d92beaf1 100644 --- a/src/bindings/scripts/scripts/zone/tempest_keep/the_eye/boss_alar.cpp +++ b/src/bindings/scripts/scripts/zone/tempest_keep/the_eye/boss_alar.cpp @@ -150,9 +150,9 @@ struct TRINITY_DLL_DECL boss_alarAI : public ScriptedAI void AttackStart(Unit* who) { if(Phase1) - ScriptedAI::AttackStart(who, false); + AttackStartNoMove(who); else - ScriptedAI::AttackStart(who, true); + ScriptedAI::AttackStart(who); } void DamageTaken(Unit* pKiller, uint32 &damage) diff --git a/src/bindings/scripts/scripts/zone/zangarmarsh/zangarmarsh.cpp b/src/bindings/scripts/scripts/zone/zangarmarsh/zangarmarsh.cpp index df3fe6dd0fe..6fdb4421b94 100644 --- a/src/bindings/scripts/scripts/zone/zangarmarsh/zangarmarsh.cpp +++ b/src/bindings/scripts/scripts/zone/zangarmarsh/zangarmarsh.cpp @@ -173,7 +173,7 @@ bool GossipSelect_npc_cooshcoosh(Player *player, Creature *_Creature, uint32 sen { player->CLOSE_GOSSIP_MENU(); _Creature->setFaction(FACTION_HOSTILE_CO); - ((npc_cooshcooshAI*)_Creature->AI())->AttackStart(player); + _Creature->AI()->AttackStart(player); } return true; } diff --git a/src/bindings/scripts/scripts/zone/zulaman/boss_zuljin.cpp b/src/bindings/scripts/scripts/zone/zulaman/boss_zuljin.cpp index c58ff08c94e..c342b8283d5 100644 --- a/src/bindings/scripts/scripts/zone/zulaman/boss_zuljin.cpp +++ b/src/bindings/scripts/scripts/zone/zulaman/boss_zuljin.cpp @@ -258,9 +258,9 @@ struct TRINITY_DLL_DECL boss_zuljinAI : public ScriptedAI void AttackStart(Unit *who) { if(Phase == 2) - ScriptedAI::AttackStart(who, false); + AttackStartNoMove(who); else - ScriptedAI::AttackStart(who, true); + ScriptedAI::AttackStart(who); } void DoMeleeAttackIfReady() diff --git a/src/game/InstanceData.cpp b/src/game/InstanceData.cpp index 1eff6ba3efe..fcc708e274c 100644 --- a/src/game/InstanceData.cpp +++ b/src/game/InstanceData.cpp @@ -76,7 +76,7 @@ void InstanceData::LoadDoorData(const DoorData *data) while(data->entry) { if(data->bossId < bosses.size()) - doors.insert(std::make_pair(data->entry, DoorInfo(&bosses[data->bossId], data->type))); + doors.insert(std::make_pair(data->entry, DoorInfo(&bosses[data->bossId], data->type, BoundaryType(data->boundary)))); ++data; } @@ -143,7 +143,31 @@ void InstanceData::AddDoor(GameObject *door, bool add) for(DoorInfoMap::iterator itr = lower; itr != upper; ++itr) { if(add) + { itr->second.bossInfo->door[itr->second.type].insert(door); + switch(itr->second.boundary) + { + default: + case BOUNDARY_NONE: + break; + case BOUNDARY_N: + case BOUNDARY_S: + itr->second.bossInfo->boundary[itr->second.boundary] = door->GetPositionX(); + break; + case BOUNDARY_E: + case BOUNDARY_W: + itr->second.bossInfo->boundary[itr->second.boundary] = door->GetPositionY(); + break; + case BOUNDARY_NW: + case BOUNDARY_SE: + itr->second.bossInfo->boundary[itr->second.boundary] = door->GetPositionX() + door->GetPositionY(); + break; + case BOUNDARY_NE: + case BOUNDARY_SW: + itr->second.bossInfo->boundary[itr->second.boundary] = door->GetPositionX() - door->GetPositionY(); + break; + } + } else itr->second.bossInfo->door[itr->second.type].erase(door); } diff --git a/src/game/InstanceData.h b/src/game/InstanceData.h index 9f7d4521fd1..43042a7f914 100644 --- a/src/game/InstanceData.h +++ b/src/game/InstanceData.h @@ -51,10 +51,30 @@ enum DoorType MAX_DOOR_TYPES, }; +enum BoundaryType +{ + BOUNDARY_NONE = 0, + BOUNDARY_N, + BOUNDARY_S, + BOUNDARY_E, + BOUNDARY_W, + BOUNDARY_NE, + BOUNDARY_NW, + BOUNDARY_SE, + BOUNDARY_SW, + BOUNDARY_MAX_X = BOUNDARY_N, + BOUNDARY_MIN_X = BOUNDARY_S, + BOUNDARY_MAX_Y = BOUNDARY_W, + BOUNDARY_MIN_Y = BOUNDARY_E, +}; + +typedef std::map<BoundaryType, float> BossBoundaryMap; + struct DoorData { uint32 entry, bossId; DoorType type; + uint32 boundary; }; struct MinionData @@ -68,14 +88,16 @@ struct BossInfo EncounterState state; DoorSet door[MAX_DOOR_TYPES]; MinionSet minion; + BossBoundaryMap boundary; }; struct DoorInfo { - explicit DoorInfo(BossInfo *_bossInfo, DoorType _type) - : bossInfo(_bossInfo), type(_type) {} + explicit DoorInfo(BossInfo *_bossInfo, DoorType _type, BoundaryType _boundary) + : bossInfo(_bossInfo), type(_type), boundary(_boundary) {} BossInfo *bossInfo; DoorType type; + BoundaryType boundary; }; struct MinionInfo @@ -137,6 +159,7 @@ class TRINITY_DLL_SPEC InstanceData void HandleGameObject(uint64 GUID, bool open, GameObject *go = NULL); virtual void SetBossState(uint32 id, EncounterState state); + const BossBoundaryMap * GetBossBoundary(uint32 id) const { return id < bosses.size() ? &bosses[id].boundary : NULL; } protected: void SetBossNumber(uint32 number) { bosses.resize(number); } void LoadDoorData(const DoorData *data); |