diff options
Diffstat (limited to 'src/game/CreatureGroups.cpp')
-rw-r--r-- | src/game/CreatureGroups.cpp | 54 |
1 files changed, 27 insertions, 27 deletions
diff --git a/src/game/CreatureGroups.cpp b/src/game/CreatureGroups.cpp index e008a3f9316..49d77881e74 100644 --- a/src/game/CreatureGroups.cpp +++ b/src/game/CreatureGroups.cpp @@ -1,4 +1,4 @@ -/* +/* * Copyright (C) 2005-2008 MaNGOS <http://www.mangosproject.org/> * * Copyright (C) 2008 Trinity <http://www.trinitycore.org/> @@ -34,7 +34,7 @@ UNORDERED_MAP<uint32, FormationMember*> CreatureGroupMap; void CreatureGroupManager::UpdateCreatureGroup(uint32 group_id, Creature *member) { if(CreatureGroupHolder.find(group_id) != CreatureGroupHolder.end()) - { + { sLog.outDebug("Group found: %u, inserting creature GUID: %u", group_id, member->GetGUIDLow()); CreatureGroupHolder[group_id]->AddMember(member); } @@ -67,10 +67,10 @@ void CreatureGroupManager::LoadCreatureFormations() { //Clear existing map CreatureGroupMap.clear(); - + //Check Integrity of the table 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"); @@ -80,7 +80,7 @@ void CreatureGroupManager::LoadCreatureFormations() //Get group data result = WorldDatabase.PQuery("SELECT `leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI` FROM `creature_formations` ORDER BY `leaderGUID`"); - + if(!result) { sLog.outErrorDb("The table `creature_formations` is empty or corrupted"); @@ -90,13 +90,13 @@ void CreatureGroupManager::LoadCreatureFormations() uint32 total_records = result->GetRowCount(), lastLeaderGUID = 0; barGoLink bar( total_records); Field *fields; - + FormationMember *group_member; //Loading data... do { fields = result->Fetch(); - + bar.step(); //Load group member data group_member = new FormationMember; @@ -109,14 +109,14 @@ void CreatureGroupManager::LoadCreatureFormations() group_member->follow_dist = fields[2].GetUInt32(); group_member->follow_angle = fields[3].GetUInt32(); } - + CreatureGroupMap[group_member->memberGUID] = group_member; - + if(lastLeaderGUID != group_member->leaderGUID) lastLeaderGUID = group_member->leaderGUID; - } + } while(result->NextRow()) ; - + sLog.outString(); sLog.outString( ">> Loaded %u creatures in formations", total_records ); sLog.outString(); @@ -127,14 +127,14 @@ void CreatureGroupManager::LoadCreatureFormations() void CreatureGroup::AddMember(Creature *member) { sLog.outDebug("Adding unit GUID: %u.", member->GetGUIDLow()); - + uint64 guid = member->GetGUID(); //We first search creature member if exist if(CreatureGroupMembers.find(guid) != CreatureGroupMembers.end()) return; //Check is that shit is a leader if(member->IsFormationLeader()) - { + { sLog.outDebug("Unit GUID: %u is formation leader. Adding group.", member->GetGUIDLow()); m_leader = member; } @@ -146,7 +146,7 @@ void CreatureGroup::AddMember(Creature *member) void CreatureGroup::RemoveMember(uint64 guid) { if(CreatureGroupMembers.find(guid) != CreatureGroupMembers.end()) - CreatureGroupMembers.erase(guid); + CreatureGroupMembers.erase(guid); } void CreatureGroup::MemberHasAttacked(Creature *member) @@ -165,9 +165,9 @@ void CreatureGroup::MemberHasAttacked(Creature *member) case 1: if(!member->IsFormationLeader()) return; - } + } //Attack if everything is OK - itr->second->AI()->AttackStart(member->getVictim()); + itr->second->AI()->AttackStart(member->getVictim()); } } } @@ -177,31 +177,31 @@ void CreatureGroup::LeaderMovedInEvade() for(UNORDERED_MAP<uint64, Creature*>::iterator itr = CreatureGroupMembers.begin(); itr != CreatureGroupMembers.end(); itr++) { if(itr->second && itr->second->isAlive() && !itr->second->isInCombat() && !itr->second->getVictim()) - SetMemberDestination(itr->second); + SetMemberDestination(itr->second); } } - + void CreatureGroup::SetMemberDestination(Creature *member) { if(!member || !m_leader || member->IsFormationLeader()) return; - + float x,y,z; uint32 lowguid = member->GetGUIDLow(); - + UNORDERED_MAP<uint32, FormationMember*>::iterator itr2 = CreatureGroupMap.find(lowguid); - + if(m_leader->GetMotionMaster()->GetDestination(x,y,z) && itr2 != CreatureGroupMap.end()) - { + { float dist, angle, pathangle; - - angle = CreatureGroupMap[lowguid]->follow_angle; - dist = CreatureGroupMap[lowguid]->follow_dist; + + angle = CreatureGroupMap[lowguid]->follow_angle; + dist = CreatureGroupMap[lowguid]->follow_dist; pathangle = atan2(m_leader->GetPositionY()-y, m_leader->GetPositionX()-x); - + x = x+cos(angle+pathangle)*dist; y = y+sin(angle+pathangle)*dist; - + member->GetMotionMaster()->Clear(); if(member->GetDistance(m_leader) < dist+MAX_DESYNC) |