[11539] Implement group guids with HIGHGUID_GROUP

This commit is contained in:
zergtmn 2011-05-25 19:55:30 +06:00
parent 0fbf2cf7d3
commit 5cae1c2211
9 changed files with 37 additions and 33 deletions

View file

@ -131,7 +131,7 @@ bool Group::Create(ObjectGuid guid, const char * name)
m_raidDifficulty = RAID_DIFFICULTY_10MAN_NORMAL;
if (!isBGGroup())
{
m_Id = sObjectMgr.GenerateGroupId();
m_Id = sObjectMgr.GenerateGroupLowGuid();
Player *leader = sObjectMgr.GetPlayer(guid);
if(leader)
@ -1021,11 +1021,9 @@ void Group::SendTargetIconList(WorldSession *session)
void Group::SendUpdate()
{
Player *player;
for(member_citerator citr = m_memberSlots.begin(); citr != m_memberSlots.end(); ++citr)
{
player = sObjectMgr.GetPlayer(citr->guid);
Player* player = sObjectMgr.GetPlayer(citr->guid);
if(!player || !player->GetSession() || player->GetGroup() != this )
continue;
// guess size
@ -1039,7 +1037,7 @@ void Group::SendUpdate()
data << uint8(0);
data << uint32(0);
}
data << uint64(0x50000000FFFFFFFELL); // related to voice chat?
data << GetObjectGuid(); // group guid
data << uint32(0); // 3.3, this value increments every time SMSG_GROUP_LIST is sent
data << uint32(GetMembersCount()-1);
for(member_citerator citr2 = m_memberSlots.begin(); citr2 != m_memberSlots.end(); ++citr2)

View file

@ -229,6 +229,7 @@ class MANGOS_DLL_SPEC Group
// properties accessories
uint32 GetId() const { return m_Id; }
ObjectGuid GetObjectGuid() const { return ObjectGuid(HIGHGUID_GROUP, GetId()); }
bool IsFull() const { return (m_groupType == GROUPTYPE_NORMAL) ? (m_memberSlots.size() >= MAX_GROUP_SIZE) : (m_memberSlots.size() >= MAX_RAID_SIZE); }
bool isRaidGroup() const { return m_groupType & GROUPTYPE_RAID; }
bool isBGGroup() const { return m_bgGroup != NULL; }

View file

@ -38,6 +38,7 @@ char const* ObjectGuid::GetTypeName(HighGuid high)
case HIGHGUID_CORPSE: return "Corpse";
case HIGHGUID_MO_TRANSPORT: return "MoTransport";
case HIGHGUID_INSTANCE: return "InstanceID";
case HIGHGUID_GROUP: return "Group";
default:
return "<unknown>";
}
@ -107,3 +108,4 @@ template uint32 ObjectGuidGenerator<HIGHGUID_VEHICLE>::Generate();
template uint32 ObjectGuidGenerator<HIGHGUID_DYNAMICOBJECT>::Generate();
template uint32 ObjectGuidGenerator<HIGHGUID_CORPSE>::Generate();
template uint32 ObjectGuidGenerator<HIGHGUID_INSTANCE>::Generate();
template uint32 ObjectGuidGenerator<HIGHGUID_GROUP>::Generate();

View file

@ -73,6 +73,7 @@ enum HighGuid
HIGHGUID_CORPSE = 0xF500, // blizz F100/F500 used second variant to resolve conflict with HIGHGUID_DYNAMICOBJECT
HIGHGUID_MO_TRANSPORT = 0x1FC0, // blizz 1FC0 (for GAMEOBJECT_TYPE_MO_TRANSPORT)
HIGHGUID_INSTANCE = 0x1F42, // blizz 1F42/1F44/1F44/1F47
HIGHGUID_GROUP = 0x1F50, // blizz 1F5x
};
class ObjectGuid;
@ -141,6 +142,7 @@ class MANGOS_DLL_SPEC ObjectGuid
bool IsTransport() const { return GetHigh() == HIGHGUID_TRANSPORT; }
bool IsMOTransport() const { return GetHigh() == HIGHGUID_MO_TRANSPORT; }
bool IsInstance() const { return GetHigh() == HIGHGUID_INSTANCE; }
bool IsGroup() const { return GetHigh() == HIGHGUID_GROUP; }
static TypeID GetTypeId(HighGuid high)
{
@ -158,6 +160,7 @@ class MANGOS_DLL_SPEC ObjectGuid
case HIGHGUID_VEHICLE: return TYPEID_UNIT;
// unknown
case HIGHGUID_INSTANCE:
case HIGHGUID_GROUP:
default: return TYPEID_OBJECT;
}
}
@ -185,6 +188,7 @@ class MANGOS_DLL_SPEC ObjectGuid
case HIGHGUID_CORPSE:
case HIGHGUID_MO_TRANSPORT:
case HIGHGUID_INSTANCE:
case HIGHGUID_GROUP:
return false;
case HIGHGUID_GAMEOBJECT:
case HIGHGUID_TRANSPORT:

View file

@ -148,8 +148,7 @@ ObjectMgr::ObjectMgr() :
m_EquipmentSetIds("Equipment set ids"),
m_GuildIds("Guild ids"),
m_MailIds("Mail ids"),
m_PetNumbers("Pet numbers"),
m_GroupIds("Group ids")
m_PetNumbers("Pet numbers")
{
// Only zero condition left, others will be added while loading DB tables
mConditions.resize(1);
@ -5488,8 +5487,6 @@ void ObjectMgr::PackGroupIds()
bar.step();
}
m_GroupIds.Set(groupId);
sLog.outString( ">> Group Ids remapped, next group id is %u", groupId );
sLog.outString();
}
@ -5584,7 +5581,7 @@ void ObjectMgr::SetHighestGuids()
result = CharacterDatabase.Query( "SELECT MAX(groupId) FROM groups" );
if (result)
{
m_GroupIds.Set((*result)[0].GetUInt32()+1);
m_GroupGuids.Set((*result)[0].GetUInt32()+1);
delete result;
}

View file

@ -721,12 +721,12 @@ class ObjectMgr
uint32 GenerateItemLowGuid() { return m_ItemGuids.Generate(); }
uint32 GenerateCorpseLowGuid() { return m_CorpseGuids.Generate(); }
uint32 GenerateInstanceLowGuid() { return m_InstanceGuids.Generate(); }
uint32 GenerateGroupLowGuid() { return m_GroupGuids.Generate(); }
uint32 GenerateArenaTeamId() { return m_ArenaTeamIds.Generate(); }
uint32 GenerateAuctionID() { return m_AuctionIds.Generate(); }
uint64 GenerateEquipmentSetGuid() { return m_EquipmentSetIds.Generate(); }
uint32 GenerateGuildId() { return m_GuildIds.Generate(); }
uint32 GenerateGroupId() { return m_GroupIds.Generate(); }
//uint32 GenerateItemTextID() { return m_ItemGuids.Generate(); }
uint32 GenerateMailID() { return m_MailIds.Generate(); }
uint32 GeneratePetNumber() { return m_PetNumbers.Generate(); }
@ -1037,7 +1037,6 @@ class ObjectMgr
IdGenerator<uint32> m_GuildIds;
IdGenerator<uint32> m_MailIds;
IdGenerator<uint32> m_PetNumbers;
IdGenerator<uint32> m_GroupIds;
// initial free low guid for selected guid type for map local guids
uint32 m_FirstTemporaryCreatureGuid;
@ -1052,6 +1051,7 @@ class ObjectMgr
ObjectGuidGenerator<HIGHGUID_ITEM> m_ItemGuids;
ObjectGuidGenerator<HIGHGUID_CORPSE> m_CorpseGuids;
ObjectGuidGenerator<HIGHGUID_INSTANCE> m_InstanceGuids;
ObjectGuidGenerator<HIGHGUID_GROUP> m_GroupGuids;
QuestMap mQuestTemplates;

View file

@ -22796,6 +22796,8 @@ Object* Player::GetObjectByTypeMask(ObjectGuid guid, TypeMask typemask)
case HIGHGUID_CORPSE:
case HIGHGUID_MO_TRANSPORT:
case HIGHGUID_INSTANCE:
case HIGHGUID_GROUP:
default:
break;
}

View file

@ -963,7 +963,7 @@ void World::SetInitialWorldSettings()
sObjectMgr.PackGroupIds(); // must be after CleanupInstances
///- Init highest guids before any guid using table loading to prevent using not initialized guids in some code.
sObjectMgr.SetHighestGuids(); // must be after packing instances
sObjectMgr.SetHighestGuids(); // must be after PackInstances() and PackGroupIds()
sLog.outString();
sLog.outString( "Loading Page Texts..." );

View file

@ -1,4 +1,4 @@
#ifndef __REVISION_NR_H__
#define __REVISION_NR_H__
#define REVISION_NR "11538"
#define REVISION_NR "11539"
#endif // __REVISION_NR_H__