*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:
@@ -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';
|
||||||
+19
-23
@@ -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,12 +87,10 @@ 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...
|
||||||
do
|
do
|
||||||
@@ -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++)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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));
|
||||||
|
|||||||
Reference in New Issue
Block a user