*Small typo fixes. After this update leader's GUIDS in CreatureGroups must be added also as group member GUIDS.

--HG--
branch : trunk
This commit is contained in:
2008-12-17 20:30:36 +02:00
parent a5bea67d75
commit 32a9420289
5 changed files with 24 additions and 27 deletions
+2
View File
@@ -0,0 +1,2 @@
ALTER TABLE `creature_formations` CHANGE `leader` `leaderGUID` int(11) unsigned NOT NULL default '0';
ALTER TABLE `creature_formations` CHANGE `follower` `memberGUID` int(11) unsigned NOT NULL default '0';
+18 -22
View File
@@ -25,7 +25,7 @@
#include "Policies/SingletonImp.h" #include "Policies/SingletonImp.h"
#define MAX_DESYNC 5.0f #define MAX_DESYNC 5.0f
//TODO: Create group manager for each map
INSTANTIATE_SINGLETON_1(CreatureGroupManager); INSTANTIATE_SINGLETON_1(CreatureGroupManager);
UNORDERED_MAP<uint32, CreatureGroup*> CreatureGroupHolder; UNORDERED_MAP<uint32, CreatureGroup*> CreatureGroupHolder;
@@ -69,18 +69,17 @@ void CreatureGroupManager::LoadCreatureFormations()
CreatureGroupMap.clear(); CreatureGroupMap.clear();
//Check Integrity of the table //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) if(!result)
{ {
sLog.outErrorDb(" an error occured while loading the table `creature_formations` ( maybe it doesn't exist ?)\n"); sLog.outErrorDb(" an error occured while loading the table `creature_formations` ( maybe it doesn't exist ?)\n");
return; return;
} }
delete result; delete result;
//Get data //Get group data
result = WorldDatabase.PQuery("SELECT `leader`, `follower`, `dist`, `angle`, `groupAI` FROM `creature_formations` ORDER BY `leader`"); result = WorldDatabase.PQuery("SELECT `leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI` FROM `creature_formations` ORDER BY `leaderGUID`");
if(!result) if(!result)
{ {
@@ -88,11 +87,9 @@ void CreatureGroupManager::LoadCreatureFormations()
return; return;
} }
uint32 total_records = result->GetRowCount(); uint32 total_records = result->GetRowCount(), lastLeaderGUID = 0;
barGoLink bar( total_records); barGoLink bar( total_records);
Field *fields; Field *fields;
uint32 count = 0, lastLeaderGUID = 0;
FormationMember *group_member; FormationMember *group_member;
//Loading data... //Loading data...
@@ -101,31 +98,30 @@ void CreatureGroupManager::LoadCreatureFormations()
fields = result->Fetch(); fields = result->Fetch();
bar.step(); bar.step();
count++; //Load group member data
group_member = new FormationMember; group_member = new FormationMember;
group_member->leaderGUID = fields[0].GetUInt32(); group_member->leaderGUID = fields[0].GetUInt32();
group_member->followerGUID = fields[1].GetUInt32(); group_member->memberGUID = fields[1].GetUInt32();
group_member->follow_dist = fields[2].GetUInt32();
group_member->follow_angle = fields[3].GetUInt32();
group_member->groupAI = fields[4].GetUInt8(); 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) if(lastLeaderGUID != group_member->leaderGUID)
{
lastLeaderGUID = group_member->leaderGUID; lastLeaderGUID = group_member->leaderGUID;
CreatureGroupMap[lastLeaderGUID] = group_member;
}
} }
while(result->NextRow()) ; while(result->NextRow()) ;
delete result;
sLog.outString(); sLog.outString();
sLog.outString( ">> Loaded %u creatures in formations", count ); sLog.outString( ">> Loaded %u creatures in formations", total_records );
sLog.outString(); sLog.outString();
//Free some heap
delete result;
} }
void CreatureGroup::AddMember(Creature *member) void CreatureGroup::AddMember(Creature *member)
@@ -155,7 +151,7 @@ void CreatureGroup::RemoveMember(uint64 guid)
void CreatureGroup::MemberHasAttacked(Creature *member) 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++) for(UNORDERED_MAP<uint64, Creature*>::iterator itr = CreatureGroupMembers.begin(); itr != CreatureGroupMembers.end(); itr++)
{ {
+1 -1
View File
@@ -29,7 +29,7 @@ struct FormationMember
{ {
float follow_dist; float follow_dist;
float follow_angle; float follow_angle;
uint32 followerGUID; uint32 memberGUID;
uint32 leaderGUID; uint32 leaderGUID;
uint8 groupAI; uint8 groupAI;
}; };
+2 -2
View File
@@ -553,12 +553,12 @@ bool ChatHandler::HandleReloadWpScriptsCommand(const char* arg)
} }
if(*arg!='a') if(*arg!='a')
sLog.outString( "Re-Loading Scripts from `event_scripts`..."); sLog.outString( "Re-Loading Scripts from `waypoint_scripts`...");
objmgr.LoadWaypointScripts(); objmgr.LoadWaypointScripts();
if(*arg!='a') if(*arg!='a')
SendGlobalSysMessage("DB table `event_scripts` reloaded."); SendGlobalSysMessage("DB table `waypoint_scripts` reloaded.");
return true; return true;
} }
-1
View File
@@ -334,7 +334,6 @@ void MotionMaster::MovePath(uint32 path_id, bool repeatable)
delete curr; delete curr;
} }
sLog.outError("attempting to move");
//i_owner->GetTypeId()==TYPEID_PLAYER ? //i_owner->GetTypeId()==TYPEID_PLAYER ?
//Mutate(new WaypointMovementGenerator<Player>(path_id, repeatable)): //Mutate(new WaypointMovementGenerator<Player>(path_id, repeatable)):
Mutate(new WaypointMovementGenerator<Creature>(path_id, repeatable)); Mutate(new WaypointMovementGenerator<Creature>(path_id, repeatable));