diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/game/CreatureGroups.cpp | 42 | ||||
-rw-r--r-- | src/game/CreatureGroups.h | 2 | ||||
-rw-r--r-- | src/game/Level3.cpp | 4 | ||||
-rw-r--r-- | src/game/MotionMaster.cpp | 1 |
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)); |