aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/game/CreatureGroups.cpp42
-rw-r--r--src/game/CreatureGroups.h2
-rw-r--r--src/game/Level3.cpp4
-rw-r--r--src/game/MotionMaster.cpp1
4 files changed, 22 insertions, 27 deletions
diff --git a/src/game/CreatureGroups.cpp b/src/game/CreatureGroups.cpp
index cea13db04b6..4c6f81cdd77 100644
--- a/src/game/CreatureGroups.cpp
+++ b/src/game/CreatureGroups.cpp
@@ -25,7 +25,7 @@
#include "Policies/SingletonImp.h"
#define MAX_DESYNC 5.0f
-
+//TODO: Create group manager for each map
INSTANTIATE_SINGLETON_1(CreatureGroupManager);
UNORDERED_MAP<uint32, CreatureGroup*> CreatureGroupHolder;
@@ -69,18 +69,17 @@ void CreatureGroupManager::LoadCreatureFormations()
CreatureGroupMap.clear();
//Check Integrity of the table
- QueryResult *result = WorldDatabase.PQuery("SELECT MAX(`leader`) FROM `creature_formations`");
+ QueryResult *result = WorldDatabase.PQuery("SELECT MAX(`leaderGUID`) FROM `creature_formations`");
if(!result)
{
sLog.outErrorDb(" an error occured while loading the table `creature_formations` ( maybe it doesn't exist ?)\n");
return;
}
-
delete result;
- //Get data
- result = WorldDatabase.PQuery("SELECT `leader`, `follower`, `dist`, `angle`, `groupAI` FROM `creature_formations` ORDER BY `leader`");
+ //Get group data
+ result = WorldDatabase.PQuery("SELECT `leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI` FROM `creature_formations` ORDER BY `leaderGUID`");
if(!result)
{
@@ -88,12 +87,10 @@ void CreatureGroupManager::LoadCreatureFormations()
return;
}
- uint32 total_records = result->GetRowCount();
-
+ uint32 total_records = result->GetRowCount(), lastLeaderGUID = 0;
barGoLink bar( total_records);
Field *fields;
- uint32 count = 0, lastLeaderGUID = 0;
-
+
FormationMember *group_member;
//Loading data...
do
@@ -101,31 +98,30 @@ void CreatureGroupManager::LoadCreatureFormations()
fields = result->Fetch();
bar.step();
- count++;
-
+ //Load group member data
group_member = new FormationMember;
-
group_member->leaderGUID = fields[0].GetUInt32();
- group_member->followerGUID = fields[1].GetUInt32();
- group_member->follow_dist = fields[2].GetUInt32();
- group_member->follow_angle = fields[3].GetUInt32();
+ group_member->memberGUID = fields[1].GetUInt32();
group_member->groupAI = fields[4].GetUInt8();
+ //If creature is group leader we may skip loading of dist/angle
+ if(group_member->leaderGUID != group_member->memberGUID)
+ {
+ group_member->follow_dist = fields[2].GetUInt32();
+ group_member->follow_angle = fields[3].GetUInt32();
+ }
- CreatureGroupMap[group_member->followerGUID] = group_member;
+ CreatureGroupMap[group_member->memberGUID] = group_member;
if(lastLeaderGUID != group_member->leaderGUID)
- {
lastLeaderGUID = group_member->leaderGUID;
- CreatureGroupMap[lastLeaderGUID] = group_member;
- }
}
while(result->NextRow()) ;
-
- delete result;
sLog.outString();
- sLog.outString( ">> Loaded %u creatures in formations", count );
+ sLog.outString( ">> Loaded %u creatures in formations", total_records );
sLog.outString();
+ //Free some heap
+ delete result;
}
void CreatureGroup::AddMember(Creature *member)
@@ -155,7 +151,7 @@ void CreatureGroup::RemoveMember(uint64 guid)
void CreatureGroup::MemberHasAttacked(Creature *member)
{
- uint8 groupAI = CreatureGroupMap[member->GetGUIDLow()]->groupAI;;
+ uint8 groupAI = CreatureGroupMap[member->GetDBTableGUIDLow()]->groupAI;;
for(UNORDERED_MAP<uint64, Creature*>::iterator itr = CreatureGroupMembers.begin(); itr != CreatureGroupMembers.end(); itr++)
{
diff --git a/src/game/CreatureGroups.h b/src/game/CreatureGroups.h
index fa846563205..3b864ef1073 100644
--- a/src/game/CreatureGroups.h
+++ b/src/game/CreatureGroups.h
@@ -29,7 +29,7 @@ struct FormationMember
{
float follow_dist;
float follow_angle;
- uint32 followerGUID;
+ uint32 memberGUID;
uint32 leaderGUID;
uint8 groupAI;
};
diff --git a/src/game/Level3.cpp b/src/game/Level3.cpp
index 15d9f8f02d2..f700aeec566 100644
--- a/src/game/Level3.cpp
+++ b/src/game/Level3.cpp
@@ -553,12 +553,12 @@ bool ChatHandler::HandleReloadWpScriptsCommand(const char* arg)
}
if(*arg!='a')
- sLog.outString( "Re-Loading Scripts from `event_scripts`...");
+ sLog.outString( "Re-Loading Scripts from `waypoint_scripts`...");
objmgr.LoadWaypointScripts();
if(*arg!='a')
- SendGlobalSysMessage("DB table `event_scripts` reloaded.");
+ SendGlobalSysMessage("DB table `waypoint_scripts` reloaded.");
return true;
}
diff --git a/src/game/MotionMaster.cpp b/src/game/MotionMaster.cpp
index 0195e3ebdf6..834770ae8a5 100644
--- a/src/game/MotionMaster.cpp
+++ b/src/game/MotionMaster.cpp
@@ -334,7 +334,6 @@ void MotionMaster::MovePath(uint32 path_id, bool repeatable)
delete curr;
}
- sLog.outError("attempting to move");
//i_owner->GetTypeId()==TYPEID_PLAYER ?
//Mutate(new WaypointMovementGenerator<Player>(path_id, repeatable)):
Mutate(new WaypointMovementGenerator<Creature>(path_id, repeatable));