[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; m_raidDifficulty = RAID_DIFFICULTY_10MAN_NORMAL;
if (!isBGGroup()) if (!isBGGroup())
{ {
m_Id = sObjectMgr.GenerateGroupId(); m_Id = sObjectMgr.GenerateGroupLowGuid();
Player *leader = sObjectMgr.GetPlayer(guid); Player *leader = sObjectMgr.GetPlayer(guid);
if(leader) if(leader)
@ -1021,11 +1021,9 @@ void Group::SendTargetIconList(WorldSession *session)
void Group::SendUpdate() void Group::SendUpdate()
{ {
Player *player;
for(member_citerator citr = m_memberSlots.begin(); citr != m_memberSlots.end(); ++citr) 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 ) if(!player || !player->GetSession() || player->GetGroup() != this )
continue; continue;
// guess size // guess size
@ -1039,7 +1037,7 @@ void Group::SendUpdate()
data << uint8(0); data << uint8(0);
data << uint32(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(0); // 3.3, this value increments every time SMSG_GROUP_LIST is sent
data << uint32(GetMembersCount()-1); data << uint32(GetMembersCount()-1);
for(member_citerator citr2 = m_memberSlots.begin(); citr2 != m_memberSlots.end(); ++citr2) 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 // properties accessories
uint32 GetId() const { return m_Id; } 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 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 isRaidGroup() const { return m_groupType & GROUPTYPE_RAID; }
bool isBGGroup() const { return m_bgGroup != NULL; } 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_CORPSE: return "Corpse";
case HIGHGUID_MO_TRANSPORT: return "MoTransport"; case HIGHGUID_MO_TRANSPORT: return "MoTransport";
case HIGHGUID_INSTANCE: return "InstanceID"; case HIGHGUID_INSTANCE: return "InstanceID";
case HIGHGUID_GROUP: return "Group";
default: default:
return "<unknown>"; return "<unknown>";
} }
@ -107,3 +108,4 @@ template uint32 ObjectGuidGenerator<HIGHGUID_VEHICLE>::Generate();
template uint32 ObjectGuidGenerator<HIGHGUID_DYNAMICOBJECT>::Generate(); template uint32 ObjectGuidGenerator<HIGHGUID_DYNAMICOBJECT>::Generate();
template uint32 ObjectGuidGenerator<HIGHGUID_CORPSE>::Generate(); template uint32 ObjectGuidGenerator<HIGHGUID_CORPSE>::Generate();
template uint32 ObjectGuidGenerator<HIGHGUID_INSTANCE>::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_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_MO_TRANSPORT = 0x1FC0, // blizz 1FC0 (for GAMEOBJECT_TYPE_MO_TRANSPORT)
HIGHGUID_INSTANCE = 0x1F42, // blizz 1F42/1F44/1F44/1F47 HIGHGUID_INSTANCE = 0x1F42, // blizz 1F42/1F44/1F44/1F47
HIGHGUID_GROUP = 0x1F50, // blizz 1F5x
}; };
class ObjectGuid; class ObjectGuid;
@ -125,22 +126,23 @@ class MANGOS_DLL_SPEC ObjectGuid
uint32 GetMaxCounter() const { return GetMaxCounter(GetHigh()); } uint32 GetMaxCounter() const { return GetMaxCounter(GetHigh()); }
bool IsEmpty() const { return m_guid == 0; } bool IsEmpty() const { return m_guid == 0; }
bool IsCreature() const { return GetHigh() == HIGHGUID_UNIT; } bool IsCreature() const { return GetHigh() == HIGHGUID_UNIT; }
bool IsPet() const { return GetHigh() == HIGHGUID_PET; } bool IsPet() const { return GetHigh() == HIGHGUID_PET; }
bool IsVehicle() const { return GetHigh() == HIGHGUID_VEHICLE; } bool IsVehicle() const { return GetHigh() == HIGHGUID_VEHICLE; }
bool IsCreatureOrPet() const { return IsCreature() || IsPet(); } bool IsCreatureOrPet() const { return IsCreature() || IsPet(); }
bool IsCreatureOrVehicle() const { return IsCreature() || IsVehicle(); } bool IsCreatureOrVehicle() const { return IsCreature() || IsVehicle(); }
bool IsAnyTypeCreature() const { return IsCreature() || IsPet() || IsVehicle(); } bool IsAnyTypeCreature() const { return IsCreature() || IsPet() || IsVehicle(); }
bool IsPlayer() const { return !IsEmpty() && GetHigh() == HIGHGUID_PLAYER; } bool IsPlayer() const { return !IsEmpty() && GetHigh() == HIGHGUID_PLAYER; }
bool IsUnit() const { return IsAnyTypeCreature() || IsPlayer(); } bool IsUnit() const { return IsAnyTypeCreature() || IsPlayer(); }
bool IsItem() const { return GetHigh() == HIGHGUID_ITEM; } bool IsItem() const { return GetHigh() == HIGHGUID_ITEM; }
bool IsGameObject() const { return GetHigh() == HIGHGUID_GAMEOBJECT; } bool IsGameObject() const { return GetHigh() == HIGHGUID_GAMEOBJECT; }
bool IsDynamicObject() const { return GetHigh() == HIGHGUID_DYNAMICOBJECT; } bool IsDynamicObject() const { return GetHigh() == HIGHGUID_DYNAMICOBJECT; }
bool IsCorpse() const { return GetHigh() == HIGHGUID_CORPSE; } bool IsCorpse() const { return GetHigh() == HIGHGUID_CORPSE; }
bool IsTransport() const { return GetHigh() == HIGHGUID_TRANSPORT; } bool IsTransport() const { return GetHigh() == HIGHGUID_TRANSPORT; }
bool IsMOTransport() const { return GetHigh() == HIGHGUID_MO_TRANSPORT; } bool IsMOTransport() const { return GetHigh() == HIGHGUID_MO_TRANSPORT; }
bool IsInstance() const { return GetHigh() == HIGHGUID_INSTANCE; } bool IsInstance() const { return GetHigh() == HIGHGUID_INSTANCE; }
bool IsGroup() const { return GetHigh() == HIGHGUID_GROUP; }
static TypeID GetTypeId(HighGuid high) static TypeID GetTypeId(HighGuid high)
{ {
@ -158,6 +160,7 @@ class MANGOS_DLL_SPEC ObjectGuid
case HIGHGUID_VEHICLE: return TYPEID_UNIT; case HIGHGUID_VEHICLE: return TYPEID_UNIT;
// unknown // unknown
case HIGHGUID_INSTANCE: case HIGHGUID_INSTANCE:
case HIGHGUID_GROUP:
default: return TYPEID_OBJECT; default: return TYPEID_OBJECT;
} }
} }
@ -185,6 +188,7 @@ class MANGOS_DLL_SPEC ObjectGuid
case HIGHGUID_CORPSE: case HIGHGUID_CORPSE:
case HIGHGUID_MO_TRANSPORT: case HIGHGUID_MO_TRANSPORT:
case HIGHGUID_INSTANCE: case HIGHGUID_INSTANCE:
case HIGHGUID_GROUP:
return false; return false;
case HIGHGUID_GAMEOBJECT: case HIGHGUID_GAMEOBJECT:
case HIGHGUID_TRANSPORT: case HIGHGUID_TRANSPORT:

View file

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

View file

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

View file

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

View file

@ -963,7 +963,7 @@ void World::SetInitialWorldSettings()
sObjectMgr.PackGroupIds(); // must be after CleanupInstances sObjectMgr.PackGroupIds(); // must be after CleanupInstances
///- Init highest guids before any guid using table loading to prevent using not initialized guids in some code. ///- 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();
sLog.outString( "Loading Page Texts..." ); sLog.outString( "Loading Page Texts..." );

View file

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