diff --git a/src/game/Group.cpp b/src/game/Group.cpp index afa71eab7..80510b10e 100644 --- a/src/game/Group.cpp +++ b/src/game/Group.cpp @@ -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) diff --git a/src/game/Group.h b/src/game/Group.h index 653afed3a..a32648d85 100644 --- a/src/game/Group.h +++ b/src/game/Group.h @@ -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; } diff --git a/src/game/ObjectGuid.cpp b/src/game/ObjectGuid.cpp index a206abb35..8688013f9 100644 --- a/src/game/ObjectGuid.cpp +++ b/src/game/ObjectGuid.cpp @@ -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 ""; } @@ -107,3 +108,4 @@ template uint32 ObjectGuidGenerator::Generate(); template uint32 ObjectGuidGenerator::Generate(); template uint32 ObjectGuidGenerator::Generate(); template uint32 ObjectGuidGenerator::Generate(); +template uint32 ObjectGuidGenerator::Generate(); diff --git a/src/game/ObjectGuid.h b/src/game/ObjectGuid.h index 1cfb61fe3..9218aef0d 100644 --- a/src/game/ObjectGuid.h +++ b/src/game/ObjectGuid.h @@ -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; @@ -125,22 +126,23 @@ class MANGOS_DLL_SPEC ObjectGuid uint32 GetMaxCounter() const { return GetMaxCounter(GetHigh()); } - bool IsEmpty() const { return m_guid == 0; } - bool IsCreature() const { return GetHigh() == HIGHGUID_UNIT; } - bool IsPet() const { return GetHigh() == HIGHGUID_PET; } - bool IsVehicle() const { return GetHigh() == HIGHGUID_VEHICLE; } - bool IsCreatureOrPet() const { return IsCreature() || IsPet(); } - bool IsCreatureOrVehicle() const { return IsCreature() || IsVehicle(); } - bool IsAnyTypeCreature() const { return IsCreature() || IsPet() || IsVehicle(); } - bool IsPlayer() const { return !IsEmpty() && GetHigh() == HIGHGUID_PLAYER; } - bool IsUnit() const { return IsAnyTypeCreature() || IsPlayer(); } - bool IsItem() const { return GetHigh() == HIGHGUID_ITEM; } - bool IsGameObject() const { return GetHigh() == HIGHGUID_GAMEOBJECT; } - bool IsDynamicObject() const { return GetHigh() == HIGHGUID_DYNAMICOBJECT; } - bool IsCorpse() const { return GetHigh() == HIGHGUID_CORPSE; } - bool IsTransport() const { return GetHigh() == HIGHGUID_TRANSPORT; } - bool IsMOTransport() const { return GetHigh() == HIGHGUID_MO_TRANSPORT; } - bool IsInstance() const { return GetHigh() == HIGHGUID_INSTANCE; } + bool IsEmpty() const { return m_guid == 0; } + bool IsCreature() const { return GetHigh() == HIGHGUID_UNIT; } + bool IsPet() const { return GetHigh() == HIGHGUID_PET; } + bool IsVehicle() const { return GetHigh() == HIGHGUID_VEHICLE; } + bool IsCreatureOrPet() const { return IsCreature() || IsPet(); } + bool IsCreatureOrVehicle() const { return IsCreature() || IsVehicle(); } + bool IsAnyTypeCreature() const { return IsCreature() || IsPet() || IsVehicle(); } + bool IsPlayer() const { return !IsEmpty() && GetHigh() == HIGHGUID_PLAYER; } + bool IsUnit() const { return IsAnyTypeCreature() || IsPlayer(); } + bool IsItem() const { return GetHigh() == HIGHGUID_ITEM; } + bool IsGameObject() const { return GetHigh() == HIGHGUID_GAMEOBJECT; } + bool IsDynamicObject() const { return GetHigh() == HIGHGUID_DYNAMICOBJECT; } + bool IsCorpse() const { return GetHigh() == HIGHGUID_CORPSE; } + 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: diff --git a/src/game/ObjectMgr.cpp b/src/game/ObjectMgr.cpp index 58daa6a2d..32c73e83e 100644 --- a/src/game/ObjectMgr.cpp +++ b/src/game/ObjectMgr.cpp @@ -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; } diff --git a/src/game/ObjectMgr.h b/src/game/ObjectMgr.h index da595bc9e..2233a0499 100644 --- a/src/game/ObjectMgr.h +++ b/src/game/ObjectMgr.h @@ -717,16 +717,16 @@ class ObjectMgr 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 GeneratePlayerLowGuid() { return m_CharGuids.Generate(); } - uint32 GenerateItemLowGuid() { return m_ItemGuids.Generate(); } - uint32 GenerateCorpseLowGuid() { return m_CorpseGuids.Generate(); } + uint32 GeneratePlayerLowGuid() { return m_CharGuids.Generate(); } + 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 m_GuildIds; IdGenerator m_MailIds; IdGenerator m_PetNumbers; - IdGenerator m_GroupIds; // initial free low guid for selected guid type for map local guids uint32 m_FirstTemporaryCreatureGuid; @@ -1052,6 +1051,7 @@ class ObjectMgr ObjectGuidGenerator m_ItemGuids; ObjectGuidGenerator m_CorpseGuids; ObjectGuidGenerator m_InstanceGuids; + ObjectGuidGenerator m_GroupGuids; QuestMap mQuestTemplates; diff --git a/src/game/Player.cpp b/src/game/Player.cpp index 341bf1707..9eeef81d9 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -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; } diff --git a/src/game/World.cpp b/src/game/World.cpp index fbd81107c..1a68fb522 100644 --- a/src/game/World.cpp +++ b/src/game/World.cpp @@ -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..." ); diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 1f559d09a..3504aaa7c 100644 --- a/src/shared/revision_nr.h +++ b/src/shared/revision_nr.h @@ -1,4 +1,4 @@ #ifndef __REVISION_NR_H__ #define __REVISION_NR_H__ - #define REVISION_NR "11538" + #define REVISION_NR "11539" #endif // __REVISION_NR_H__