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/game | |
| parent | 424391d7c4175b7baec814e00559a393d7ff1ba1 (diff) | |
*Update Naxx script. Let boss evade if they are pulled out of room.
--HG--
branch : trunk
Diffstat (limited to 'src/game')
| -rw-r--r-- | src/game/InstanceData.cpp | 26 | ||||
| -rw-r--r-- | src/game/InstanceData.h | 27 |
2 files changed, 50 insertions, 3 deletions
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); |
