aboutsummaryrefslogtreecommitdiff
path: root/src/server/game
diff options
context:
space:
mode:
authortreeston <treeston.mmoc@gmail.com>2016-01-14 20:51:35 +0100
committertreeston <treeston.mmoc@gmail.com>2016-01-18 18:08:15 +0100
commitb945d01ee586f31bca6ccef4cf067ce4516c0c2b (patch)
tree93ec6f97843be774390ee63f83e2a11ab0fb9816 /src/server/game
parent82c0a074b4a3dd696646e507d4b39f3b5e03cbe3 (diff)
Instance boundary follow-up:
- Stop tools from complaining about leaks. - Also, list -> vector. - Fix an ambiguous constructor warning. - Fix a bug with Gormok and Sindragosa (Fixes #16280).
Diffstat (limited to 'src/server/game')
-rw-r--r--src/server/game/AI/CreatureAI.h2
-rw-r--r--src/server/game/Entities/Creature/Creature.h1
-rw-r--r--src/server/game/Instances/InstanceScript.cpp6
-rw-r--r--src/server/game/Instances/InstanceScript.h14
-rw-r--r--src/server/game/Maps/AreaBoundary.h7
5 files changed, 25 insertions, 5 deletions
diff --git a/src/server/game/AI/CreatureAI.h b/src/server/game/AI/CreatureAI.h
index 3b7c489e018..f250a79ea25 100644
--- a/src/server/game/AI/CreatureAI.h
+++ b/src/server/game/AI/CreatureAI.h
@@ -80,7 +80,7 @@ class CreatureAI : public UnitAI
Creature* DoSummonFlyer(uint32 entry, WorldObject* obj, float flightZ, float radius = 5.0f, uint32 despawnTime = 30000, TempSummonType summonType = TEMPSUMMON_CORPSE_TIMED_DESPAWN);
bool CheckBoundary(Position* who = nullptr) const;
- void SetBoundary(CreatureBoundary const* boundary) { _boundary = boundary; CheckInRoom(); }
+ void SetBoundary(CreatureBoundary const* boundary) { _boundary = boundary; me->DoImmediateBoundaryCheck(); }
public:
enum EvadeReason
{
diff --git a/src/server/game/Entities/Creature/Creature.h b/src/server/game/Entities/Creature/Creature.h
index b0318ed33e2..3ee1ba7db7b 100644
--- a/src/server/game/Entities/Creature/Creature.h
+++ b/src/server/game/Entities/Creature/Creature.h
@@ -605,6 +605,7 @@ class Creature : public Unit, public GridObject<Creature>, public MapObject
float GetRespawnRadius() const { return m_respawnradius; }
void SetRespawnRadius(float dist) { m_respawnradius = dist; }
+ void DoImmediateBoundaryCheck() { m_boundaryCheckTime = 0; }
uint32 GetCombatPulseDelay() const { return m_combatPulseDelay; }
void SetCombatPulseDelay(uint32 delay) // (secs) interval at which the creature pulses the entire zone into combat (only works in dungeons)
{
diff --git a/src/server/game/Instances/InstanceScript.cpp b/src/server/game/Instances/InstanceScript.cpp
index eb6d9a187d6..2422ea1c533 100644
--- a/src/server/game/Instances/InstanceScript.cpp
+++ b/src/server/game/Instances/InstanceScript.cpp
@@ -30,6 +30,12 @@
#include "WorldSession.h"
#include "Opcodes.h"
+BossBoundaryData::~BossBoundaryData()
+{
+ for (const_iterator it = begin(); it != end(); ++it)
+ delete it->boundary;
+}
+
void InstanceScript::SaveToDB()
{
std::string data = GetSaveData();
diff --git a/src/server/game/Instances/InstanceScript.h b/src/server/game/Instances/InstanceScript.h
index 8285eaa7346..8f80f00c1ca 100644
--- a/src/server/game/Instances/InstanceScript.h
+++ b/src/server/game/Instances/InstanceScript.h
@@ -78,7 +78,19 @@ struct BossBoundaryEntry
uint32 const bossId;
AreaBoundary const* const boundary;
};
-typedef std::list<BossBoundaryEntry> BossBoundaryData;
+struct BossBoundaryData
+{
+ typedef std::vector<BossBoundaryEntry> StorageType;
+ typedef StorageType::const_iterator const_iterator;
+
+ BossBoundaryData(std::initializer_list<BossBoundaryEntry> data) : _data(data) { }
+ ~BossBoundaryData();
+ const_iterator begin() const { return _data.begin(); }
+ const_iterator end() const { return _data.end(); }
+
+ private:
+ StorageType _data;
+};
struct MinionData
{
diff --git a/src/server/game/Maps/AreaBoundary.h b/src/server/game/Maps/AreaBoundary.h
index 7df72c3dc12..0bd554c87b2 100644
--- a/src/server/game/Maps/AreaBoundary.h
+++ b/src/server/game/Maps/AreaBoundary.h
@@ -32,15 +32,16 @@ class AreaBoundary
BOUNDARY_PARALLELOGRAM,
BOUNDARY_Z_RANGE,
};
+ virtual ~AreaBoundary() { }
BoundaryType GetBoundaryType() const { return m_boundaryType; }
bool IsWithinBoundary(const Position* pos) const { return (IsWithinBoundaryArea(pos) != m_isInvertedBoundary); }
struct DoublePosition : Position
{
double d_positionX, d_positionY, d_positionZ;
- DoublePosition(double x = 0, double y = 0, double z = 0, float o = 0)
- : Position((float)x, (float)y, (float)z, o), d_positionX(x), d_positionY(y), d_positionZ(z) { }
- DoublePosition(float x = 0, float y = 0, float z = 0, float o = 0)
+ DoublePosition(double x = 0.0, double y = 0.0, double z = 0.0, float o = 0.0)
+ : Position(x, y, z, o), d_positionX(x), d_positionY(y), d_positionZ(z) { }
+ DoublePosition(float x, float y = 0.0f, float z = 0.0f, float o = 0.0f)
: Position(x, y, z, o), d_positionX(x), d_positionY(y), d_positionZ(z) { }
DoublePosition(const Position& pos)
: DoublePosition(pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), pos.GetOrientation()) { }