aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/AI/CreatureAIImpl.h
diff options
context:
space:
mode:
authorSpp <spp@jorge.gr>2013-01-02 13:30:51 +0100
committerSpp <spp@jorge.gr>2013-01-02 13:30:51 +0100
commitaed36a8375538dfb7ebe6da4c32c012a95dc14c6 (patch)
treeeca30ab36e47bcedc1f0380f0f8a600326cac41f /src/server/game/AI/CreatureAIImpl.h
parent91f8ca32445f839e36ec699627a12781907950c9 (diff)
parentebd14b4f01cc64a2a488bdbb1046897cc4da8e9a (diff)
Merge branch 'master' into 4.3.4
Conflicts: dep/libmpq/CMakeLists.txt src/server/game/AI/EventAI/CreatureEventAI.cpp src/server/game/AI/EventAI/CreatureEventAI.h src/server/game/AI/EventAI/CreatureEventAIMgr.cpp src/server/game/AI/EventAI/CreatureEventAIMgr.h src/server/game/Entities/Creature/Creature.h src/server/game/Entities/Item/ItemPrototype.h src/server/game/Entities/Object/ObjectDefines.h src/server/game/Entities/Player/Player.cpp src/server/game/Handlers/ReferAFriendHandler.cpp src/server/game/Movement/Spline/MoveSplineInit.h src/server/game/World/World.h src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp src/server/scripts/EasternKingdoms/ZulGurub/boss_gahzranka.cpp src/server/scripts/EasternKingdoms/ZulGurub/boss_grilek.cpp src/server/scripts/EasternKingdoms/ZulGurub/boss_hakkar.cpp src/server/scripts/EasternKingdoms/ZulGurub/boss_hazzarah.cpp src/server/scripts/EasternKingdoms/ZulGurub/boss_jeklik.cpp src/server/scripts/EasternKingdoms/ZulGurub/boss_jindo.cpp src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp src/server/scripts/EasternKingdoms/ZulGurub/boss_marli.cpp src/server/scripts/EasternKingdoms/ZulGurub/boss_renataki.cpp src/server/scripts/EasternKingdoms/ZulGurub/boss_thekal.cpp src/server/scripts/EasternKingdoms/ZulGurub/boss_wushoolay.cpp src/server/scripts/EasternKingdoms/ZulGurub/instance_zulgurub.cpp src/server/scripts/EasternKingdoms/ZulGurub/zulgurub.h src/server/scripts/EasternKingdoms/boss_kruul.cpp src/server/scripts/OutdoorPvP/OutdoorPvPEP.cpp src/server/scripts/OutdoorPvP/OutdoorPvPEP.h src/server/shared/Database/Implementation/CharacterDatabase.cpp src/server/shared/Database/Implementation/CharacterDatabase.h src/server/shared/Database/Implementation/WorldDatabase.cpp
Diffstat (limited to 'src/server/game/AI/CreatureAIImpl.h')
-rw-r--r--src/server/game/AI/CreatureAIImpl.h84
1 files changed, 47 insertions, 37 deletions
diff --git a/src/server/game/AI/CreatureAIImpl.h b/src/server/game/AI/CreatureAIImpl.h
index 981ac1f5f16..f3e32b6033d 100644
--- a/src/server/game/AI/CreatureAIImpl.h
+++ b/src/server/game/AI/CreatureAIImpl.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2013 TrinityCore <http://www.trinitycore.org/>
*
* 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
@@ -311,8 +311,10 @@ const T& RAND(const T& v1, const T& v2, const T& v3, const T& v4, const T& v5, c
}
}
-class EventMap : private std::map<uint32, uint32>
+class EventMap
{
+ typedef std::map<uint32, uint32> StorageType;
+
public:
EventMap() : _time(0), _phase(0) {}
@@ -320,13 +322,16 @@ class EventMap : private std::map<uint32, uint32>
uint32 GetTimer() const { return _time; }
// Removes all events and clears phase
- void Reset() { clear(); _time = 0; _phase = 0; }
+ void Reset()
+ {
+ _eventMap.clear(); _time = 0; _phase = 0;
+ }
void Update(uint32 time) { _time += time; }
uint32 GetPhaseMask() const { return (_phase >> 24) & 0xFF; }
- bool Empty() const { return empty(); }
+ bool Empty() const { return _eventMap.empty(); }
// Sets event phase, must be in range 1 - 8
void SetPhase(uint32 phase)
@@ -346,14 +351,14 @@ class EventMap : private std::map<uint32, uint32>
eventId |= (1 << (groupId + 16));
if (phase && phase < 8)
eventId |= (1 << (phase + 24));
- const_iterator itr = find(time);
- while (itr != end())
+ StorageType::const_iterator itr = _eventMap.find(time);
+ while (itr != _eventMap.end())
{
++time;
- itr = find(time);
+ itr = _eventMap.find(time);
}
- insert(std::make_pair(time, eventId));
+ _eventMap.insert(StorageType::value_type(time, eventId));
}
// Removes event with specified id and creates new entry for it
@@ -366,41 +371,43 @@ class EventMap : private std::map<uint32, uint32>
// Reschedules closest event
void RepeatEvent(uint32 time)
{
- if (empty())
+ if (_eventMap.empty())
return;
- uint32 eventId = begin()->second;
- erase(begin());
+ uint32 eventId = _eventMap.begin()->second;
+ _eventMap.erase(_eventMap.begin());
time += _time;
- const_iterator itr = find(time);
- while (itr != end())
+ StorageType::const_iterator itr = _eventMap.find(time);
+ while (itr != _eventMap.end())
{
++time;
- itr = find(time);
+ itr = _eventMap.find(time);
}
- insert(std::make_pair(time, eventId));
+ _eventMap.insert(StorageType::value_type(time, eventId));
}
// Removes first event
void PopEvent()
{
- erase(begin());
+ if (!_eventMap.empty())
+ _eventMap.erase(_eventMap.begin());
}
// Gets next event id to execute and removes it from map
uint32 ExecuteEvent()
{
- while (!empty())
+ while (!_eventMap.empty())
{
- if (begin()->first > _time)
+ StorageType::iterator itr = _eventMap.begin();
+ if (itr->first > _time)
return 0;
- else if (_phase && (begin()->second & 0xFF000000) && !(begin()->second & _phase))
- erase(begin());
+ else if (_phase && (itr->second & 0xFF000000) && !(itr->second & _phase))
+ _eventMap.erase(itr);
else
{
- uint32 eventId = (begin()->second & 0x0000FFFF);
- erase(begin());
+ uint32 eventId = (itr->second & 0x0000FFFF);
+ _eventMap.erase(itr);
return eventId;
}
}
@@ -410,14 +417,15 @@ class EventMap : private std::map<uint32, uint32>
// Gets next event id to execute
uint32 GetEvent()
{
- while (!empty())
+ while (!_eventMap.empty())
{
- if (begin()->first > _time)
+ StorageType::iterator itr = _eventMap.begin();
+ if (itr->first > _time)
return 0;
- else if (_phase && (begin()->second & 0xFF000000) && !(begin()->second & _phase))
- erase(begin());
+ else if (_phase && (itr->second & 0xFF000000) && !(itr->second & _phase))
+ _eventMap.erase(itr);
else
- return (begin()->second & 0x0000FFFF);
+ return (itr->second & 0x0000FFFF);
}
return 0;
@@ -437,13 +445,13 @@ class EventMap : private std::map<uint32, uint32>
{
uint32 nextTime = _time + delay;
uint32 groupMask = (1 << (groupId + 16));
- for (iterator itr = begin(); itr != end() && itr->first < nextTime;)
+ for (StorageType::iterator itr = _eventMap.begin(); itr != _eventMap.end() && itr->first < nextTime;)
{
if (itr->second & groupMask)
{
ScheduleEvent(itr->second, itr->first - _time + delay);
- erase(itr);
- itr = begin();
+ _eventMap.erase(itr);
+ itr = _eventMap.begin();
}
else
++itr;
@@ -453,12 +461,12 @@ class EventMap : private std::map<uint32, uint32>
// Cancel events with specified id
void CancelEvent(uint32 eventId)
{
- for (iterator itr = begin(); itr != end();)
+ for (StorageType::iterator itr = _eventMap.begin(); itr != _eventMap.end();)
{
if (eventId == (itr->second & 0x0000FFFF))
{
- erase(itr);
- itr = begin();
+ _eventMap.erase(itr);
+ itr = _eventMap.begin();
}
else
++itr;
@@ -470,12 +478,12 @@ class EventMap : private std::map<uint32, uint32>
{
uint32 groupMask = (1 << (groupId + 16));
- for (iterator itr = begin(); itr != end();)
+ for (StorageType::iterator itr = _eventMap.begin(); itr != _eventMap.end();)
{
if (itr->second & groupMask)
{
- erase(itr);
- itr = begin();
+ _eventMap.erase(itr);
+ itr = _eventMap.begin();
}
else
++itr;
@@ -486,7 +494,7 @@ class EventMap : private std::map<uint32, uint32>
// To get how much time remains substract _time
uint32 GetNextEventTime(uint32 eventId) const
{
- for (const_iterator itr = begin(); itr != end(); ++itr)
+ for (StorageType::const_iterator itr = _eventMap.begin(); itr != _eventMap.end(); ++itr)
if (eventId == (itr->second & 0x0000FFFF))
return itr->first;
@@ -496,6 +504,8 @@ class EventMap : private std::map<uint32, uint32>
private:
uint32 _time;
uint32 _phase;
+
+ StorageType _eventMap;
};
enum AITarget