aboutsummaryrefslogtreecommitdiff
path: root/src/server
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2014-10-29 21:13:21 +0100
committerShauren <shauren.trinity@gmail.com>2025-10-03 18:12:05 +0200
commitf9fd80251c2e82fc46f822c1d65d57828bf0b690 (patch)
tree887b4e046b17234b7d3c5a5e4960c9fdb2349fe6 /src/server
parent1a67fea2c415ef0bca464f102624ef754d6bad19 (diff)
Core/Entites: ObjectGuid construction refactor
(cherry picked from commit 15fbb6f46fb24fdc6f91786543b32f247e6525fc)
Diffstat (limited to 'src/server')
-rw-r--r--src/server/game/Accounts/AccountMgr.cpp2
-rw-r--r--src/server/game/AuctionHouse/AuctionHouseMgr.cpp14
-rw-r--r--src/server/game/Battlegrounds/ArenaTeam.cpp12
-rw-r--r--src/server/game/Battlegrounds/ArenaTeam.h2
-rw-r--r--src/server/game/Battlegrounds/ArenaTeamMgr.cpp8
-rw-r--r--src/server/game/Chat/Channels/Channel.cpp3
-rw-r--r--src/server/game/Conditions/ConditionMgr.cpp2
-rw-r--r--src/server/game/DungeonFinding/LFGMgr.cpp2
-rw-r--r--src/server/game/Entities/Corpse/Corpse.cpp7
-rw-r--r--src/server/game/Entities/Creature/Creature.cpp7
-rw-r--r--src/server/game/Entities/DynamicObject/DynamicObject.cpp5
-rw-r--r--src/server/game/Entities/GameObject/GameObject.cpp4
-rw-r--r--src/server/game/Entities/Item/Container/Bag.cpp2
-rw-r--r--src/server/game/Entities/Item/Item.cpp10
-rw-r--r--src/server/game/Entities/Object/Object.cpp9
-rw-r--r--src/server/game/Entities/Object/Object.h3
-rw-r--r--src/server/game/Entities/Object/ObjectGuid.cpp12
-rw-r--r--src/server/game/Entities/Object/ObjectGuid.h99
-rw-r--r--src/server/game/Entities/Pet/Pet.cpp15
-rw-r--r--src/server/game/Entities/Player/Player.cpp39
-rw-r--r--src/server/game/Entities/Transport/Transport.cpp2
-rw-r--r--src/server/game/Globals/ObjectAccessor.cpp2
-rw-r--r--src/server/game/Globals/ObjectMgr.cpp22
-rw-r--r--src/server/game/Globals/ObjectMgr.h3
-rw-r--r--src/server/game/Groups/Group.cpp16
-rw-r--r--src/server/game/Guilds/Guild.cpp4
-rw-r--r--src/server/game/Handlers/AuctionHouseHandler.cpp2
-rw-r--r--src/server/game/Handlers/CharacterHandler.cpp2
-rw-r--r--src/server/game/Handlers/MailHandler.cpp4
-rw-r--r--src/server/game/Mails/Mail.cpp2
-rw-r--r--src/server/game/Maps/Map.cpp4
-rw-r--r--src/server/game/Maps/Map.h4
-rw-r--r--src/server/game/Pools/PoolMgr.cpp2
-rw-r--r--src/server/game/Tickets/TicketMgr.cpp8
-rw-r--r--src/server/game/Tools/PlayerDump.cpp2
-rw-r--r--src/server/scripts/Commands/cs_character.cpp4
-rw-r--r--src/server/scripts/Commands/cs_debug.cpp6
-rw-r--r--src/server/scripts/Commands/cs_ticket.cpp4
38 files changed, 173 insertions, 177 deletions
diff --git a/src/server/game/Accounts/AccountMgr.cpp b/src/server/game/Accounts/AccountMgr.cpp
index a0b7bf1e23d..2b3b9da3116 100644
--- a/src/server/game/Accounts/AccountMgr.cpp
+++ b/src/server/game/Accounts/AccountMgr.cpp
@@ -95,7 +95,7 @@ AccountOpResult AccountMgr::DeleteAccount(uint32 accountId)
{
do
{
- ObjectGuid guid(HighGuid::Player, (*result)[0].GetUInt32());
+ ObjectGuid guid = ObjectGuid::Create<HighGuid::Player>((*result)[0].GetUInt32());
// Kick if player is online
if (Player* p = ObjectAccessor::FindConnectedPlayer(guid))
diff --git a/src/server/game/AuctionHouse/AuctionHouseMgr.cpp b/src/server/game/AuctionHouse/AuctionHouseMgr.cpp
index cd3e61a6fcf..04683c746a3 100644
--- a/src/server/game/AuctionHouse/AuctionHouseMgr.cpp
+++ b/src/server/game/AuctionHouse/AuctionHouseMgr.cpp
@@ -126,7 +126,7 @@ void AuctionHouseMgr::SendAuctionWonMail(AuctionEntry* auction, CharacterDatabas
return;
uint32 bidderAccId = 0;
- ObjectGuid bidderGuid(HighGuid::Player, auction->bidder);
+ ObjectGuid bidderGuid = ObjectGuid::Create<HighGuid::Player>(auction->bidder);
Player* bidder = ObjectAccessor::FindConnectedPlayer(bidderGuid);
// data for gm.log
std::string bidderName;
@@ -147,7 +147,7 @@ void AuctionHouseMgr::SendAuctionWonMail(AuctionEntry* auction, CharacterDatabas
if (logGmTrade)
{
- ObjectGuid ownerGuid = ObjectGuid(HighGuid::Player, auction->owner);
+ ObjectGuid ownerGuid = ObjectGuid::Create<HighGuid::Player>(auction->owner);
std::string ownerName;
if (!sCharacterCache->GetCharacterNameByGuid(ownerGuid, ownerName))
ownerName = sObjectMgr->GetTrinityStringForDBCLocale(LANG_UNKNOWN);
@@ -188,7 +188,7 @@ void AuctionHouseMgr::SendAuctionWonMail(AuctionEntry* auction, CharacterDatabas
void AuctionHouseMgr::SendAuctionSalePendingMail(AuctionEntry* auction, CharacterDatabaseTransaction trans)
{
- ObjectGuid owner_guid(HighGuid::Player, auction->owner);
+ ObjectGuid owner_guid = ObjectGuid::Create<HighGuid::Player>(auction->owner);
Player* owner = ObjectAccessor::FindConnectedPlayer(owner_guid);
uint32 owner_accId = sCharacterCache->GetCharacterAccountIdByGuid(owner_guid);
// owner exist (online or offline)
@@ -209,7 +209,7 @@ void AuctionHouseMgr::SendAuctionSalePendingMail(AuctionEntry* auction, Characte
//call this method to send mail to auction owner, when auction is successful, it does not clear ram
void AuctionHouseMgr::SendAuctionSuccessfulMail(AuctionEntry* auction, CharacterDatabaseTransaction trans)
{
- ObjectGuid owner_guid(HighGuid::Player, auction->owner);
+ ObjectGuid owner_guid = ObjectGuid::Create<HighGuid::Player>(auction->owner);
Player* owner = ObjectAccessor::FindConnectedPlayer(owner_guid);
uint32 owner_accId = sCharacterCache->GetCharacterAccountIdByGuid(owner_guid);
// owner exist
@@ -240,7 +240,7 @@ void AuctionHouseMgr::SendAuctionExpiredMail(AuctionEntry* auction, CharacterDat
if (!pItem)
return;
- ObjectGuid owner_guid(HighGuid::Player, auction->owner);
+ ObjectGuid owner_guid = ObjectGuid::Create<HighGuid::Player>(auction->owner);
Player* owner = ObjectAccessor::FindConnectedPlayer(owner_guid);
uint32 owner_accId = sCharacterCache->GetCharacterAccountIdByGuid(owner_guid);
// owner exist
@@ -263,7 +263,7 @@ void AuctionHouseMgr::SendAuctionExpiredMail(AuctionEntry* auction, CharacterDat
//this function sends mail to old bidder
void AuctionHouseMgr::SendAuctionOutbiddedMail(AuctionEntry* auction, uint32 newPrice, Player* newBidder, CharacterDatabaseTransaction trans)
{
- ObjectGuid oldBidder_guid(HighGuid::Player, auction->bidder);
+ ObjectGuid oldBidder_guid = ObjectGuid::Create<HighGuid::Player>(auction->bidder);
Player* oldBidder = ObjectAccessor::FindConnectedPlayer(oldBidder_guid);
uint32 oldBidder_accId = 0;
@@ -285,7 +285,7 @@ void AuctionHouseMgr::SendAuctionOutbiddedMail(AuctionEntry* auction, uint32 new
//this function sends mail, when auction is cancelled to old bidder
void AuctionHouseMgr::SendAuctionCancelledToBidderMail(AuctionEntry* auction, CharacterDatabaseTransaction trans, Item* item)
{
- ObjectGuid bidder_guid = ObjectGuid(HighGuid::Player, auction->bidder);
+ ObjectGuid bidder_guid = ObjectGuid::Create<HighGuid::Player>(auction->bidder);
Player* bidder = ObjectAccessor::FindConnectedPlayer(bidder_guid);
uint32 bidder_accId = 0;
diff --git a/src/server/game/Battlegrounds/ArenaTeam.cpp b/src/server/game/Battlegrounds/ArenaTeam.cpp
index 82cf70a1ff6..414fb49eb81 100644
--- a/src/server/game/Battlegrounds/ArenaTeam.cpp
+++ b/src/server/game/Battlegrounds/ArenaTeam.cpp
@@ -195,7 +195,7 @@ bool ArenaTeam::LoadArenaTeamFromDB(QueryResult result)
TeamId = fields[0].GetUInt32();
TeamName = fields[1].GetString();
- CaptainGuid = ObjectGuid(HighGuid::Player, fields[2].GetUInt32());
+ CaptainGuid = ObjectGuid::Create<HighGuid::Player>(fields[2].GetUInt32());
Type = fields[3].GetUInt8();
BackgroundColor = fields[4].GetUInt32();
EmblemStyle = fields[5].GetUInt8();
@@ -234,7 +234,7 @@ bool ArenaTeam::LoadMembersFromDB(QueryResult result)
break;
ArenaTeamMember newMember;
- newMember.Guid = ObjectGuid(HighGuid::Player, fields[1].GetUInt32());
+ newMember.Guid = ObjectGuid::Create<HighGuid::Player>(fields[1].GetUInt32());
newMember.WeekGames = fields[2].GetUInt16();
newMember.WeekWins = fields[3].GetUInt16();
newMember.SeasonGames = fields[4].GetUInt16();
@@ -890,7 +890,7 @@ void ArenaTeam::MemberWon(Player* player, uint32 againstMatchmakerRating, int32
}
}
-void ArenaTeam::UpdateArenaPointsHelper(std::map<uint32, uint32>& playerPoints)
+void ArenaTeam::UpdateArenaPointsHelper(std::map<ObjectGuid, uint32>& playerPoints)
{
// Called after a match has ended and the stats are already modified
// Helper function for arena point distribution (this way, when distributing, no actual calculation is required, just a few comparisons)
@@ -908,15 +908,15 @@ void ArenaTeam::UpdateArenaPointsHelper(std::map<uint32, uint32>& playerPoints)
if (itr->WeekGames >= requiredGames)
pointsToAdd = GetPoints(itr->PersonalRating);
- std::map<uint32, uint32>::iterator plr_itr = playerPoints.find(itr->Guid.GetCounter());
+ std::map<ObjectGuid, uint32>::iterator plr_itr = playerPoints.find(itr->Guid);
if (plr_itr != playerPoints.end())
{
// Check if there is already more points
if (plr_itr->second < pointsToAdd)
- playerPoints[itr->Guid.GetCounter()] = pointsToAdd;
+ playerPoints[itr->Guid] = pointsToAdd;
}
else
- playerPoints[itr->Guid.GetCounter()] = pointsToAdd;
+ playerPoints[itr->Guid] = pointsToAdd;
}
}
diff --git a/src/server/game/Battlegrounds/ArenaTeam.h b/src/server/game/Battlegrounds/ArenaTeam.h
index c6ee45a5125..67940e6be0d 100644
--- a/src/server/game/Battlegrounds/ArenaTeam.h
+++ b/src/server/game/Battlegrounds/ArenaTeam.h
@@ -179,7 +179,7 @@ class TC_GAME_API ArenaTeam
void MemberLost(Player* player, uint32 againstMatchmakerRating, int32 MatchmakerRatingChange = -12);
void OfflineMemberLost(ObjectGuid guid, uint32 againstMatchmakerRating, int32 MatchmakerRatingChange = -12);
- void UpdateArenaPointsHelper(std::map<uint32, uint32> & PlayerPoints);
+ void UpdateArenaPointsHelper(std::map<ObjectGuid, uint32> & PlayerPoints);
bool FinishWeek(); // returns true if arena team played this week
void FinishGame(int32 mod);
diff --git a/src/server/game/Battlegrounds/ArenaTeamMgr.cpp b/src/server/game/Battlegrounds/ArenaTeamMgr.cpp
index 0e96a915918..7a69a6d410c 100644
--- a/src/server/game/Battlegrounds/ArenaTeamMgr.cpp
+++ b/src/server/game/Battlegrounds/ArenaTeamMgr.cpp
@@ -143,7 +143,7 @@ void ArenaTeamMgr::DistributeArenaPoints()
sWorld->SendWorldText(LANG_DIST_ARENA_POINTS_ONLINE_START);
// Temporary structure for storing maximum points to add values for all players
- std::map<uint32, uint32> PlayerPoints;
+ std::map<ObjectGuid, uint32> PlayerPoints;
// At first update all points for all team members
for (auto [teamId, team] : ArenaTeamStore)
@@ -154,16 +154,16 @@ void ArenaTeamMgr::DistributeArenaPoints()
CharacterDatabasePreparedStatement* stmt;
// Cycle that gives points to all players
- for (std::map<uint32, uint32>::iterator playerItr = PlayerPoints.begin(); playerItr != PlayerPoints.end(); ++playerItr)
+ for (std::map<ObjectGuid, uint32>::iterator playerItr = PlayerPoints.begin(); playerItr != PlayerPoints.end(); ++playerItr)
{
// Add points to player if online
- if (Player* player = ObjectAccessor::FindConnectedPlayer(ObjectGuid(HighGuid::Player, playerItr->first)))
+ if (Player* player = ObjectAccessor::FindConnectedPlayer(playerItr->first))
player->ModifyArenaPoints(playerItr->second, trans);
else // Update database
{
stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_ADD_CHAR_ARENA_POINTS);
stmt->setUInt32(0, playerItr->second);
- stmt->setUInt32(1, playerItr->first);
+ stmt->setUInt32(1, playerItr->first.GetCounter());
trans->Append(stmt);
}
}
diff --git a/src/server/game/Chat/Channels/Channel.cpp b/src/server/game/Chat/Channels/Channel.cpp
index 0669b966826..73837d61448 100644
--- a/src/server/game/Chat/Channels/Channel.cpp
+++ b/src/server/game/Chat/Channels/Channel.cpp
@@ -76,7 +76,8 @@ Channel::Channel(std::string const& name, uint32 team /*= 0*/, std::string const
{
for (std::string_view guid : Trinity::Tokenize(banList, ' ', false))
{
- ObjectGuid banned(Trinity::StringTo<uint64>(guid).value_or(0));
+ ObjectGuid banned;
+ banned.SetRawValue(Trinity::StringTo<uint64>(guid).value_or(0));
if (!banned)
continue;
diff --git a/src/server/game/Conditions/ConditionMgr.cpp b/src/server/game/Conditions/ConditionMgr.cpp
index e79f6605fb1..37ec4388560 100644
--- a/src/server/game/Conditions/ConditionMgr.cpp
+++ b/src/server/game/Conditions/ConditionMgr.cpp
@@ -260,7 +260,7 @@ bool Condition::Meets(ConditionSourceInfo& sourceInfo) const
condMeets = instance->GetData(ConditionValue1) == ConditionValue2;
break;
case INSTANCE_INFO_GUID_DATA:
- condMeets = instance->GetGuidData(ConditionValue1) == ObjectGuid(uint64(ConditionValue2));
+ condMeets = instance->GetGuidData(ConditionValue1).GetRawValue() == uint64(ConditionValue2);
break;
case INSTANCE_INFO_BOSS_STATE:
condMeets = instance->GetBossState(ConditionValue1) == EncounterState(ConditionValue2);
diff --git a/src/server/game/DungeonFinding/LFGMgr.cpp b/src/server/game/DungeonFinding/LFGMgr.cpp
index 96ae15543b8..5befeb341a5 100644
--- a/src/server/game/DungeonFinding/LFGMgr.cpp
+++ b/src/server/game/DungeonFinding/LFGMgr.cpp
@@ -76,7 +76,7 @@ void LFGMgr::_LoadFromDB(Field* fields, ObjectGuid guid)
if (!guid.IsGroup())
return;
- SetLeader(guid, ObjectGuid(HighGuid::Player, fields[0].GetUInt32()));
+ SetLeader(guid, ObjectGuid::Create<HighGuid::Player>(fields[0].GetUInt32()));
uint32 dungeon = fields[17].GetUInt32();
uint8 state = fields[18].GetUInt8();
diff --git a/src/server/game/Entities/Corpse/Corpse.cpp b/src/server/game/Entities/Corpse/Corpse.cpp
index 8fe0383633c..642ab421d5f 100644
--- a/src/server/game/Entities/Corpse/Corpse.cpp
+++ b/src/server/game/Entities/Corpse/Corpse.cpp
@@ -65,7 +65,7 @@ void Corpse::RemoveFromWorld()
bool Corpse::Create(ObjectGuid::LowType guidlow)
{
- Object::_Create(guidlow, 0, HighGuid::Corpse);
+ Object::_Create(ObjectGuid::Create<HighGuid::Corpse>(guidlow));
return true;
}
@@ -82,7 +82,8 @@ bool Corpse::Create(ObjectGuid::LowType guidlow, Player* owner)
return false;
}
- WorldObject::_Create(guidlow, HighGuid::Corpse, owner->GetPhaseMask());
+ Object::_Create(ObjectGuid::Create<HighGuid::Corpse>(guidlow));
+ SetPhaseMask(owner->GetPhaseMask(), false);
SetObjectScale(1.0f);
SetGuidValue(CORPSE_FIELD_OWNER, owner->GetGUID());
@@ -159,7 +160,7 @@ bool Corpse::LoadCorpseFromDB(ObjectGuid::LowType guid, Field* fields)
float o = fields[3].GetFloat();
uint32 mapId = fields[4].GetUInt16();
- Object::_Create(guid, 0, HighGuid::Corpse);
+ Object::_Create(ObjectGuid::Create<HighGuid::Corpse>(guid));
SetObjectScale(1.0f);
SetUInt32Value(CORPSE_FIELD_DISPLAY_ID, fields[5].GetUInt32());
diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp
index 9e13f3d295b..efa1c3216f6 100644
--- a/src/server/game/Entities/Creature/Creature.cpp
+++ b/src/server/game/Entities/Creature/Creature.cpp
@@ -700,7 +700,7 @@ void Creature::Update(uint32 diff)
break; // Will be rechecked on next Update call after delay expires
}
- ObjectGuid dbtableHighGuid(HighGuid::Unit, GetEntry(), m_spawnId);
+ ObjectGuid dbtableHighGuid = ObjectGuid::Create<HighGuid::Unit>(GetEntry(), m_spawnId);
time_t linkedRespawnTime = GetMap()->GetLinkedRespawnTime(dbtableHighGuid);
if (!linkedRespawnTime) // Can respawn
Respawn();
@@ -1568,7 +1568,10 @@ bool Creature::CreateFromProto(ObjectGuid::LowType guidlow, uint32 entry, Creatu
SetOriginalEntry(entry);
- Object::_Create(guidlow, entry, (vehId || cinfo->VehicleId) ? HighGuid::Vehicle : HighGuid::Unit);
+ if (vehId || cinfo->VehicleId)
+ Object::_Create(ObjectGuid::Create<HighGuid::Vehicle>(entry, guidlow));
+ else
+ Object::_Create(ObjectGuid::Create<HighGuid::Unit>(entry, guidlow));
if (!UpdateEntry(entry, data))
return false;
diff --git a/src/server/game/Entities/DynamicObject/DynamicObject.cpp b/src/server/game/Entities/DynamicObject/DynamicObject.cpp
index 017b79e5ffa..505aba37e5f 100644
--- a/src/server/game/Entities/DynamicObject/DynamicObject.cpp
+++ b/src/server/game/Entities/DynamicObject/DynamicObject.cpp
@@ -92,10 +92,11 @@ bool DynamicObject::CreateDynamicObject(ObjectGuid::LowType guidlow, Unit* caste
return false;
}
- WorldObject::_Create(guidlow, HighGuid::DynamicObject, caster->GetPhaseMask());
+ WorldObject::_Create(ObjectGuid::Create<HighGuid::DynamicObject>(guidlow));
+ SetPhaseMask(caster->GetPhaseMask(), false);
SetEntry(spell->Id);
- SetObjectScale(1);
+ SetObjectScale(1.0f);
SetGuidValue(DYNAMICOBJECT_CASTER, caster->GetGUID());
SetByteValue(DYNAMICOBJECT_BYTES, 0, type);
SetUInt32Value(DYNAMICOBJECT_SPELLID, spell->Id);
diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp
index 1b3b30e5dc2..962efe036c5 100644
--- a/src/server/game/Entities/GameObject/GameObject.cpp
+++ b/src/server/game/Entities/GameObject/GameObject.cpp
@@ -296,7 +296,7 @@ bool GameObject::Create(ObjectGuid::LowType guidlow, uint32 name_id, Map* map, u
if (goinfo->type == GAMEOBJECT_TYPE_TRANSPORT)
m_updateFlag = (m_updateFlag | UPDATEFLAG_TRANSPORT) & ~UPDATEFLAG_POSITION;
- Object::_Create(guidlow, goinfo->entry, HighGuid::GameObject);
+ Object::_Create(ObjectGuid::Create<HighGuid::GameObject>(goinfo->entry, guidlow));
m_goInfo = goinfo;
m_goTemplateAddon = sObjectMgr->GetGameObjectTemplateAddon(name_id);
@@ -574,7 +574,7 @@ void GameObject::Update(uint32 diff)
time_t now = GameTime::GetGameTime();
if (m_respawnTime <= now) // timer expired
{
- ObjectGuid dbtableHighGuid(HighGuid::GameObject, GetEntry(), m_spawnId);
+ ObjectGuid dbtableHighGuid = ObjectGuid::Create<HighGuid::GameObject>(GetEntry(), m_spawnId);
time_t linkedRespawntime = GetMap()->GetLinkedRespawnTime(dbtableHighGuid);
if (linkedRespawntime) // Can't respawn, the master is dead
{
diff --git a/src/server/game/Entities/Item/Container/Bag.cpp b/src/server/game/Entities/Item/Container/Bag.cpp
index 814cc01ec89..31485ac6471 100644
--- a/src/server/game/Entities/Item/Container/Bag.cpp
+++ b/src/server/game/Entities/Item/Container/Bag.cpp
@@ -75,7 +75,7 @@ bool Bag::Create(ObjectGuid::LowType guidlow, uint32 itemid, Player const* owner
if (!itemProto || itemProto->ContainerSlots > MAX_BAG_SIZE)
return false;
- Object::_Create(guidlow, 0, HighGuid::Container);
+ Object::_Create(ObjectGuid::Create<HighGuid::Container>(guidlow));
SetEntry(itemid);
SetObjectScale(1.0f);
diff --git a/src/server/game/Entities/Item/Item.cpp b/src/server/game/Entities/Item/Item.cpp
index 23fd96789b2..4480ab0dbd7 100644
--- a/src/server/game/Entities/Item/Item.cpp
+++ b/src/server/game/Entities/Item/Item.cpp
@@ -266,7 +266,7 @@ Item::Item()
bool Item::Create(ObjectGuid::LowType guidlow, uint32 itemId, Player const* owner)
{
- Object::_Create(guidlow, 0, HighGuid::Item);
+ Object::_Create(ObjectGuid::Create<HighGuid::Item>(guidlow));
SetEntry(itemId);
SetObjectScale(1.0f);
@@ -413,7 +413,7 @@ bool Item::LoadFromDB(ObjectGuid::LowType guid, ObjectGuid owner_guid, Field* fi
// create item before any checks for store correct guid
// and allow use "FSetState(ITEM_REMOVED); SaveToDB();" for deleting item from DB
- Object::_Create(guid, 0, HighGuid::Item);
+ Object::_Create(ObjectGuid::Create<HighGuid::Item>(guid));
// Set entry, MUST be before proto check
SetEntry(entry);
@@ -431,8 +431,10 @@ bool Item::LoadFromDB(ObjectGuid::LowType guid, ObjectGuid owner_guid, Field* fi
SetOwnerGUID(owner_guid);
bool need_save = false; // need explicit save data at load fixes
- SetGuidValue(ITEM_FIELD_CREATOR, ObjectGuid(HighGuid::Player, fields[0].GetUInt32()));
- SetGuidValue(ITEM_FIELD_GIFTCREATOR, ObjectGuid(HighGuid::Player, fields[1].GetUInt32()));
+ if (uint32 creator = fields[0].GetUInt32())
+ SetGuidValue(ITEM_FIELD_CREATOR, ObjectGuid::Create<HighGuid::Player>(creator));
+ if (uint32 giftCreator = fields[1].GetUInt32())
+ SetGuidValue(ITEM_FIELD_GIFTCREATOR, ObjectGuid::Create<HighGuid::Player>(giftCreator));
SetCount(fields[2].GetUInt32());
uint32 duration = fields[3].GetUInt32();
diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp
index f5d7ae63f4d..91c8b83a720 100644
--- a/src/server/game/Entities/Object/Object.cpp
+++ b/src/server/game/Entities/Object/Object.cpp
@@ -106,11 +106,10 @@ void Object::_InitValues()
m_objectUpdated = false;
}
-void Object::_Create(ObjectGuid::LowType guidlow, uint32 entry, HighGuid guidhigh)
+void Object::_Create(ObjectGuid const& guid)
{
if (!m_uint32Values) _InitValues();
- ObjectGuid guid(guidhigh, entry, guidlow);
SetGuidValue(OBJECT_FIELD_GUID, guid);
SetUInt32Value(OBJECT_FIELD_TYPE, m_objectType);
m_PackGUID.Set(guid);
@@ -1026,12 +1025,6 @@ void WorldObject::CleanupsBeforeDelete(bool /*finalCleanup*/)
transport->RemovePassenger(this);
}
-void WorldObject::_Create(ObjectGuid::LowType guidlow, HighGuid guidhigh, uint32 phaseMask)
-{
- Object::_Create(guidlow, 0, guidhigh);
- m_phaseMask = phaseMask;
-}
-
void WorldObject::UpdatePositionData()
{
PositionFullTerrainStatus data;
diff --git a/src/server/game/Entities/Object/Object.h b/src/server/game/Entities/Object/Object.h
index f9587e64f4d..c161f221e54 100644
--- a/src/server/game/Entities/Object/Object.h
+++ b/src/server/game/Entities/Object/Object.h
@@ -219,7 +219,7 @@ class TC_GAME_API Object
Object();
void _InitValues();
- void _Create(ObjectGuid::LowType guidlow, uint32 entry, HighGuid guidhigh);
+ void _Create(ObjectGuid const& guid);
std::string _ConcatFields(uint16 startIndex, uint16 size) const;
[[nodiscard]] bool _LoadIntoDataField(std::string const& data, uint32 startOffset, uint32 count);
@@ -341,7 +341,6 @@ class TC_GAME_API WorldObject : public Object, public WorldLocation
virtual void Update(uint32 /*time_diff*/) { }
- void _Create(ObjectGuid::LowType guidlow, HighGuid guidhigh, uint32 phaseMask);
void AddToWorld() override;
void RemoveFromWorld() override;
diff --git a/src/server/game/Entities/Object/ObjectGuid.cpp b/src/server/game/Entities/Object/ObjectGuid.cpp
index cb0f4e5ab4d..07161787eeb 100644
--- a/src/server/game/Entities/Object/ObjectGuid.cpp
+++ b/src/server/game/Entities/Object/ObjectGuid.cpp
@@ -117,17 +117,7 @@ std::string ObjectGuid::ToHexString() const
return Trinity::StringFormat("0x{:016X}", _guid);
}
-ObjectGuid ObjectGuid::Global(HighGuid type, LowType counter)
-{
- return ObjectGuid(type, counter);
-}
-
-ObjectGuid ObjectGuid::MapSpecific(HighGuid type, uint32 entry, LowType counter)
-{
- return ObjectGuid(type, entry, counter);
-}
-
-void PackedGuid::Set(ObjectGuid guid)
+void PackedGuid::Set(ObjectGuid const& guid)
{
_packedSize = 1;
uint64 raw = guid.GetRawValue();
diff --git a/src/server/game/Entities/Object/ObjectGuid.h b/src/server/game/Entities/Object/ObjectGuid.h
index 4c26d2a87cd..5674a9bf7ee 100644
--- a/src/server/game/Entities/Object/ObjectGuid.h
+++ b/src/server/game/Entities/Object/ObjectGuid.h
@@ -15,14 +15,14 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef ObjectGuid_h__
-#define ObjectGuid_h__
+#ifndef TRINITYCORE_OBJECT_GUID_H
+#define TRINITYCORE_OBJECT_GUID_H
#include "Define.h"
+#include "EnumFlag.h"
#include <array>
#include <functional>
#include <list>
-#include <memory>
#include <set>
#include <stdexcept>
#include <string>
@@ -76,39 +76,47 @@ enum class HighGuid
Group = 0x1F50,
};
+enum class ObjectGuidSequenceSource
+{
+ None = 0x0,
+ Global = 0x1,
+ Map = 0x2
+};
+
+DEFINE_ENUM_FLAG(ObjectGuidSequenceSource);
+
+enum class ObjectGuidFormatType
+{
+ OnlyCounter,
+ CounterAndEntry
+};
+
template<HighGuid high>
struct ObjectGuidTraits
{
- static bool const Global = false;
- static bool const MapSpecific = false;
+ static constexpr EnumFlag<ObjectGuidSequenceSource> SequenceSource = ObjectGuidSequenceSource::None;
+ using Format = std::integral_constant<ObjectGuidFormatType, ObjectGuidFormatType::OnlyCounter>;
};
-#define GUID_TRAIT_GLOBAL(highguid) \
- template<> struct ObjectGuidTraits<highguid> \
+#define MAKE_GUID_TRAIT(high, sequence, format) \
+ template<> struct ObjectGuidTraits<high> \
{ \
- static bool const Global = true; \
- static bool const MapSpecific = false; \
- };
+ static constexpr EnumFlag<ObjectGuidSequenceSource> SequenceSource = sequence; \
+ using Format = std::integral_constant<ObjectGuidFormatType, format>; \
+ }
-#define GUID_TRAIT_MAP_SPECIFIC(highguid) \
- template<> struct ObjectGuidTraits<highguid> \
- { \
- static bool const Global = false; \
- static bool const MapSpecific = true; \
- };
-
-GUID_TRAIT_GLOBAL(HighGuid::Player)
-GUID_TRAIT_GLOBAL(HighGuid::Item)
-GUID_TRAIT_GLOBAL(HighGuid::Mo_Transport)
-GUID_TRAIT_GLOBAL(HighGuid::Group)
-GUID_TRAIT_GLOBAL(HighGuid::Instance)
-GUID_TRAIT_MAP_SPECIFIC(HighGuid::Transport)
-GUID_TRAIT_MAP_SPECIFIC(HighGuid::Unit)
-GUID_TRAIT_MAP_SPECIFIC(HighGuid::Vehicle)
-GUID_TRAIT_MAP_SPECIFIC(HighGuid::Pet)
-GUID_TRAIT_MAP_SPECIFIC(HighGuid::GameObject)
-GUID_TRAIT_MAP_SPECIFIC(HighGuid::DynamicObject)
-GUID_TRAIT_MAP_SPECIFIC(HighGuid::Corpse)
+MAKE_GUID_TRAIT(HighGuid::Item, ObjectGuidSequenceSource::Global, ObjectGuidFormatType::OnlyCounter);
+MAKE_GUID_TRAIT(HighGuid::Player, ObjectGuidSequenceSource::Global, ObjectGuidFormatType::OnlyCounter);
+MAKE_GUID_TRAIT(HighGuid::GameObject, ObjectGuidSequenceSource::Map, ObjectGuidFormatType::CounterAndEntry);
+MAKE_GUID_TRAIT(HighGuid::Transport, ObjectGuidSequenceSource::Map, ObjectGuidFormatType::OnlyCounter);
+MAKE_GUID_TRAIT(HighGuid::Unit, ObjectGuidSequenceSource::Map, ObjectGuidFormatType::CounterAndEntry);
+MAKE_GUID_TRAIT(HighGuid::Pet, ObjectGuidSequenceSource::Map, ObjectGuidFormatType::CounterAndEntry);
+MAKE_GUID_TRAIT(HighGuid::Vehicle, ObjectGuidSequenceSource::Map, ObjectGuidFormatType::CounterAndEntry);
+MAKE_GUID_TRAIT(HighGuid::DynamicObject, ObjectGuidSequenceSource::Map, ObjectGuidFormatType::OnlyCounter);
+MAKE_GUID_TRAIT(HighGuid::Corpse, ObjectGuidSequenceSource::Map, ObjectGuidFormatType::OnlyCounter);
+MAKE_GUID_TRAIT(HighGuid::Mo_Transport, ObjectGuidSequenceSource::Global, ObjectGuidFormatType::OnlyCounter);
+MAKE_GUID_TRAIT(HighGuid::Instance, ObjectGuidSequenceSource::Global, ObjectGuidFormatType::OnlyCounter);
+MAKE_GUID_TRAIT(HighGuid::Group, ObjectGuidSequenceSource::Global, ObjectGuidFormatType::OnlyCounter);
class ByteBuffer;
class ObjectGuid;
@@ -133,16 +141,7 @@ class TC_GAME_API ObjectGuid
typedef uint32 LowType;
- template<HighGuid type>
- static typename std::enable_if<ObjectGuidTraits<type>::Global, ObjectGuid>::type Create(LowType counter) { return Global(type, counter); }
-
- template<HighGuid type>
- static typename std::enable_if<ObjectGuidTraits<type>::MapSpecific, ObjectGuid>::type Create(uint32 entry, LowType counter) { return MapSpecific(type, entry, counter); }
-
- ObjectGuid() : _guid(0) { }
- explicit ObjectGuid(uint64 guid) : _guid(guid) { }
- ObjectGuid(HighGuid hi, uint32 entry, LowType counter) : _guid(counter ? uint64(counter) | (uint64(entry) << 24) | (uint64(hi) << 48) : 0) { }
- ObjectGuid(HighGuid hi, LowType counter) : _guid(counter ? uint64(counter) | (uint64(hi) << 48) : 0) { }
+ constexpr ObjectGuid() = default;
PackedGuidReader ReadAsPacked() { return PackedGuidReader(*this); }
@@ -221,8 +220,14 @@ class TC_GAME_API ObjectGuid
std::string ToString() const;
std::string ToHexString() const;
+ template<HighGuid type, std::enable_if_t<ObjectGuidTraits<type>::Format::value == ObjectGuidFormatType::OnlyCounter, int32> = 0>
+ static constexpr ObjectGuid Create(LowType counter) { return ObjectGuid(counter ? uint64(counter) | (uint64(type) << 48) : 0); }
+
+ template<HighGuid type, std::enable_if_t<ObjectGuidTraits<type>::Format::value == ObjectGuidFormatType::CounterAndEntry, int32> = 0>
+ static constexpr ObjectGuid Create(uint32 entry, LowType counter) { return ObjectGuid(counter ? uint64(counter) | (uint64(entry) << 24) | (uint64(type) << 48) : 0); }
+
private:
- static bool HasEntry(HighGuid high)
+ static constexpr bool HasEntry(HighGuid high)
{
switch (high)
{
@@ -246,14 +251,9 @@ class TC_GAME_API ObjectGuid
bool HasEntry() const { return HasEntry(GetHigh()); }
- static ObjectGuid Global(HighGuid type, LowType counter);
- static ObjectGuid MapSpecific(HighGuid type, uint32 entry, LowType counter);
-
- explicit ObjectGuid(uint32 const&) = delete; // no implementation, used to catch wrong type assignment
- ObjectGuid(HighGuid, uint32, uint64 counter) = delete; // no implementation, used to catch wrong type assignment
- ObjectGuid(HighGuid, uint64 counter) = delete; // no implementation, used to catch wrong type assignment
+ explicit ObjectGuid(uint64 guid) : _guid(guid) { }
- uint64 _guid;
+ uint64 _guid = 0;
};
// Some Shared defines
@@ -273,7 +273,7 @@ class TC_GAME_API PackedGuid
explicit PackedGuid() : _packedSize(1), _packedGuid() { }
explicit PackedGuid(ObjectGuid guid) { Set(guid); }
- void Set(ObjectGuid guid);
+ void Set(ObjectGuid const& guid);
std::size_t size() const { return _packedSize; }
@@ -343,4 +343,5 @@ struct formatter<ObjectGuid, char, void>
};
}
}
-#endif // ObjectGuid_h__
+
+#endif // TRINITYCORE_OBJECT_GUID_H
diff --git a/src/server/game/Entities/Pet/Pet.cpp b/src/server/game/Entities/Pet/Pet.cpp
index e2855e6fdce..23cd4626355 100644
--- a/src/server/game/Entities/Pet/Pet.cpp
+++ b/src/server/game/Entities/Pet/Pet.cpp
@@ -222,9 +222,7 @@ bool Pet::LoadPetFromDB(Player* owner, uint32 petEntry, uint32 petnumber, bool c
}
Map* map = owner->GetMap();
- ObjectGuid::LowType guid = map->GenerateLowGuid<HighGuid::Pet>();
-
- if (!Create(guid, map, owner->GetPhaseMask(), petInfo->CreatureId, petInfo->PetNumber))
+ if (!Create(map->GenerateLowGuid<HighGuid::Pet>(), map, owner->GetPhaseMask(), petInfo->CreatureId, petInfo->PetNumber))
return false;
setPetType(petInfo->Type);
@@ -1232,6 +1230,7 @@ void Pet::_LoadAuras(PreparedQueryResult result, uint32 timediff)
{
TC_LOG_DEBUG("entities.pet", "Loading auras for pet {}", GetGUID().ToString());
+ ObjectGuid casterGuid;
if (result)
{
do
@@ -1239,10 +1238,10 @@ void Pet::_LoadAuras(PreparedQueryResult result, uint32 timediff)
int32 damage[3];
int32 baseDamage[3];
Field* fields = result->Fetch();
- ObjectGuid caster_guid(fields[0].GetUInt64());
+ casterGuid.SetRawValue(fields[0].GetUInt64());
// NULL guid stored - pet is the caster of the spell - see Pet::_SaveAuras
- if (!caster_guid)
- caster_guid = GetGUID();
+ if (!casterGuid)
+ casterGuid = GetGUID();
uint32 spellid = fields[1].GetUInt32();
uint8 effmask = fields[2].GetUInt8();
uint8 recalculatemask = fields[3].GetUInt8();
@@ -1286,7 +1285,7 @@ void Pet::_LoadAuras(PreparedQueryResult result, uint32 timediff)
AuraCreateInfo createInfo(spellInfo, effmask, this);
createInfo
- .SetCasterGUID(caster_guid)
+ .SetCasterGUID(casterGuid)
.SetBaseAmount(baseDamage);
if (Aura* aura = Aura::TryCreate(createInfo))
@@ -1878,7 +1877,7 @@ bool Pet::Create(ObjectGuid::LowType guidlow, Map* map, uint32 phaseMask, uint32
SetMap(map);
SetPhaseMask(phaseMask, false);
- Object::_Create(guidlow, petId, HighGuid::Pet);
+ Object::_Create(ObjectGuid::Create<HighGuid::Pet>(petId, guidlow));
m_originalEntry = Entry;
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 05b3ffa9d06..3ecaad3a1c6 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -430,7 +430,7 @@ bool Player::Create(ObjectGuid::LowType guidlow, CharacterCreateInfo* createInfo
//FIXME: outfitId not used in player creating
/// @todo need more checks against packet modifications
- Object::_Create(guidlow, 0, HighGuid::Player);
+ Object::_Create(ObjectGuid::Create<HighGuid::Player>(guidlow));
m_name = createInfo->Name;
@@ -1353,7 +1353,7 @@ bool Player::BuildEnumData(PreparedQueryResult result, WorldPacket* data)
Field* fields = result->Fetch();
- ObjectGuid::LowType guid = fields[0].GetUInt32();
+ ObjectGuid guid = ObjectGuid::Create<HighGuid::Player>(fields[0].GetUInt32());
uint8 playerRace = fields[2].GetUInt8();
uint8 playerClass = fields[3].GetUInt8();
uint8 gender = fields[4].GetUInt8();
@@ -1370,7 +1370,7 @@ bool Player::BuildEnumData(PreparedQueryResult result, WorldPacket* data)
return false;
}
- *data << ObjectGuid(HighGuid::Player, guid);
+ *data << guid;
*data << fields[1].GetString(); // name
*data << uint8(playerRace); // race
*data << uint8(playerClass); // class
@@ -1395,7 +1395,7 @@ bool Player::BuildEnumData(PreparedQueryResult result, WorldPacket* data)
{
CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_ADD_AT_LOGIN_FLAG);
stmt->setUInt16(0, uint16(AT_LOGIN_CUSTOMIZE));
- stmt->setUInt32(1, guid);
+ stmt->setUInt32(1, guid.GetCounter());
CharacterDatabase.Execute(stmt);
atLoginFlags |= AT_LOGIN_CUSTOMIZE;
}
@@ -4098,7 +4098,7 @@ void Player::DeleteFromDB(ObjectGuid playerguid, uint32 accountId, bool updateRe
{
do
{
- if (Player* playerFriend = ObjectAccessor::FindPlayer(ObjectGuid(HighGuid::Player, 0, (*resultFriends)[0].GetUInt32())))
+ if (Player* playerFriend = ObjectAccessor::FindPlayer(ObjectGuid::Create<HighGuid::Player>((*resultFriends)[0].GetUInt32())))
{
playerFriend->GetSocial()->RemoveFromSocialList(playerguid, SOCIAL_FLAG_ALL);
sSocialMgr->SendFriendStatus(playerFriend, FRIEND_REMOVED, playerguid);
@@ -4335,7 +4335,7 @@ void Player::DeleteOldCharacters(uint32 keepDays)
do
{
Field* fields = result->Fetch();
- Player::DeleteFromDB(ObjectGuid(HighGuid::Player, fields[0].GetUInt32()), fields[1].GetUInt32(), true, true);
+ Player::DeleteFromDB(ObjectGuid::Create<HighGuid::Player>(fields[0].GetUInt32()), fields[1].GetUInt32(), true, true);
}
while (result->NextRow());
}
@@ -17018,7 +17018,7 @@ bool Player::LoadFromDB(ObjectGuid guid, CharacterDatabaseQueryHolder const& hol
return false;
}
- Object::_Create(guid.GetCounter(), 0, HighGuid::Player);
+ Object::_Create(guid);
m_name = fields[2].GetString();
@@ -17246,7 +17246,7 @@ bool Player::LoadFromDB(ObjectGuid guid, CharacterDatabaseQueryHolder const& hol
// currently we do not support transport in bg
else if (transLowGUID)
{
- ObjectGuid transGUID(HighGuid::Mo_Transport, transLowGUID);
+ ObjectGuid transGUID = ObjectGuid::Create<HighGuid::Mo_Transport>(transLowGUID);
Transport* transport = nullptr;
if (Transport* go = HashMapHolder<Transport>::Find(transGUID))
@@ -17938,8 +17938,8 @@ void Player::_LoadInventory(PreparedQueryResult result, uint32 timeDiff)
{
uint32 zoneId = GetZoneId();
- std::map<ObjectGuid::LowType, Bag*> bagMap; // fast guid lookup for bags
- std::map<ObjectGuid::LowType, Item*> invalidBagMap; // fast guid lookup for bags
+ std::map<ObjectGuid, Bag*> bagMap; // fast guid lookup for bags
+ std::map<ObjectGuid, Item*> invalidBagMap; // fast guid lookup for bags
std::list<Item*> problematicItems;
CharacterDatabaseTransaction trans = CharacterDatabase.BeginTransaction();
@@ -17950,7 +17950,7 @@ void Player::_LoadInventory(PreparedQueryResult result, uint32 timeDiff)
Field* fields = result->Fetch();
if (Item* item = _LoadItem(trans, zoneId, timeDiff, fields))
{
- ObjectGuid::LowType bagGuid = fields[11].GetUInt32();
+ ObjectGuid bagGuid = fields[11].GetUInt32() ? ObjectGuid::Create<HighGuid::Item>(fields[11].GetUInt32()) : ObjectGuid::Empty;
uint8 slot = fields[12].GetUInt8();
InventoryResult err = EQUIP_ERR_OK;
@@ -17987,18 +17987,18 @@ void Player::_LoadInventory(PreparedQueryResult result, uint32 timeDiff)
{
if (IsBagPos(item->GetPos()))
if (Bag* pBag = item->ToBag())
- bagMap[item->GetGUID().GetCounter()] = pBag;
+ bagMap[item->GetGUID()] = pBag;
}
else
if (IsBagPos(item->GetPos()))
if (item->IsBag())
- invalidBagMap[item->GetGUID().GetCounter()] = item;
+ invalidBagMap[item->GetGUID()] = item;
}
else
{
item->SetSlot(NULL_SLOT);
// Item is in the bag, find the bag
- std::map<ObjectGuid::LowType, Bag*>::iterator itr = bagMap.find(bagGuid);
+ std::map<ObjectGuid, Bag*>::iterator itr = bagMap.find(bagGuid);
if (itr != bagMap.end())
{
ItemPosCountVec dest;
@@ -18008,7 +18008,7 @@ void Player::_LoadInventory(PreparedQueryResult result, uint32 timeDiff)
}
else if (invalidBagMap.find(bagGuid) != invalidBagMap.end())
{
- std::map<ObjectGuid::LowType, Item*>::iterator invalidBagItr = invalidBagMap.find(bagGuid);
+ std::map<ObjectGuid, Item*>::iterator invalidBagItr = invalidBagMap.find(bagGuid);
if (std::find(problematicItems.begin(), problematicItems.end(), invalidBagItr->second) != problematicItems.end())
err = EQUIP_ERR_INTERNAL_BAG_ERROR;
}
@@ -25585,6 +25585,13 @@ void Player::SendEquipmentSetList()
size_t count_pos = data.wpos();
data << uint32(count); // count placeholder
+ static ObjectGuid const IgnoredSlot = []
+ {
+ ObjectGuid guid;
+ guid.SetRawValue(1);
+ return guid;
+ }();
+
for (EquipmentSetContainer::value_type const& eqSet : _equipmentSets)
{
if (eqSet.second.State == EQUIPMENT_SET_DELETED)
@@ -25599,7 +25606,7 @@ void Player::SendEquipmentSetList()
{
// ignored slots stored in IgnoreMask, client wants "1" as raw GUID, so no HighGuid::Item
if (eqSet.second.Data.IgnoreMask & (1 << i))
- data << ObjectGuid(UI64LIT(1)).WriteAsPacked();
+ data << IgnoredSlot.WriteAsPacked();
else
data << eqSet.second.Data.Pieces[i].WriteAsPacked();
}
diff --git a/src/server/game/Entities/Transport/Transport.cpp b/src/server/game/Entities/Transport/Transport.cpp
index 0dd8860bf58..b37a554adc9 100644
--- a/src/server/game/Entities/Transport/Transport.cpp
+++ b/src/server/game/Entities/Transport/Transport.cpp
@@ -57,7 +57,7 @@ bool Transport::Create(ObjectGuid::LowType guidlow, uint32 entry, uint32 mapid,
return false;
}
- Object::_Create(guidlow, 0, HighGuid::Mo_Transport);
+ Object::_Create(ObjectGuid::Create<HighGuid::Mo_Transport>(guidlow));
GameObjectTemplate const* goinfo = sObjectMgr->GetGameObjectTemplate(entry);
if (!goinfo)
diff --git a/src/server/game/Globals/ObjectAccessor.cpp b/src/server/game/Globals/ObjectAccessor.cpp
index 3de4d0e22a5..d80e7408ec9 100644
--- a/src/server/game/Globals/ObjectAccessor.cpp
+++ b/src/server/game/Globals/ObjectAccessor.cpp
@@ -250,7 +250,7 @@ Player* ObjectAccessor::FindPlayerByName(std::string_view name)
Player* ObjectAccessor::FindPlayerByLowGUID(ObjectGuid::LowType lowguid)
{
- ObjectGuid guid(HighGuid::Player, lowguid);
+ ObjectGuid guid = ObjectGuid::Create<HighGuid::Player>(lowguid);
return ObjectAccessor::FindPlayer(guid);
}
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp
index 6fa4f1788d9..089c3cdf05d 100644
--- a/src/server/game/Globals/ObjectMgr.cpp
+++ b/src/server/game/Globals/ObjectMgr.cpp
@@ -1892,8 +1892,8 @@ void ObjectMgr::LoadLinkedRespawn()
break;
}
- guid = ObjectGuid(HighGuid::Unit, slave->id, guidLow);
- linkedGuid = ObjectGuid(HighGuid::Unit, master->id, linkedGuidLow);
+ guid = ObjectGuid::Create<HighGuid::Unit>(slave->id, guidLow);
+ linkedGuid = ObjectGuid::Create<HighGuid::Unit>(master->id, linkedGuidLow);
break;
}
case LINKED_RESPAWN_CREATURE_TO_GO:
@@ -1929,8 +1929,8 @@ void ObjectMgr::LoadLinkedRespawn()
break;
}
- guid = ObjectGuid(HighGuid::Unit, slave->id, guidLow);
- linkedGuid = ObjectGuid(HighGuid::GameObject, master->id, linkedGuidLow);
+ guid = ObjectGuid::Create<HighGuid::Unit>(slave->id, guidLow);
+ linkedGuid = ObjectGuid::Create<HighGuid::GameObject>(master->id, linkedGuidLow);
break;
}
case LINKED_RESPAWN_GO_TO_GO:
@@ -1966,8 +1966,8 @@ void ObjectMgr::LoadLinkedRespawn()
break;
}
- guid = ObjectGuid(HighGuid::GameObject, slave->id, guidLow);
- linkedGuid = ObjectGuid(HighGuid::GameObject, master->id, linkedGuidLow);
+ guid = ObjectGuid::Create<HighGuid::GameObject>(slave->id, guidLow);
+ linkedGuid = ObjectGuid::Create<HighGuid::GameObject>(master->id, linkedGuidLow);
break;
}
case LINKED_RESPAWN_GO_TO_CREATURE:
@@ -2003,8 +2003,8 @@ void ObjectMgr::LoadLinkedRespawn()
break;
}
- guid = ObjectGuid(HighGuid::GameObject, slave->id, guidLow);
- linkedGuid = ObjectGuid(HighGuid::Unit, master->id, linkedGuidLow);
+ guid = ObjectGuid::Create<HighGuid::GameObject>(slave->id, guidLow);
+ linkedGuid = ObjectGuid::Create<HighGuid::Unit>(master->id, linkedGuidLow);
break;
}
}
@@ -2024,7 +2024,7 @@ bool ObjectMgr::SetCreatureLinkedRespawn(ObjectGuid::LowType guidLow, ObjectGuid
CreatureData const* master = GetCreatureData(guidLow);
ASSERT(master);
- ObjectGuid guid(HighGuid::Unit, master->id, guidLow);
+ ObjectGuid guid = ObjectGuid::Create<HighGuid::Unit>(master->id, guidLow);
if (!linkedGuidLow) // we're removing the linking
{
@@ -2056,7 +2056,7 @@ bool ObjectMgr::SetCreatureLinkedRespawn(ObjectGuid::LowType guidLow, ObjectGuid
return false;
}
- ObjectGuid linkedGuid(HighGuid::Unit, slave->id, linkedGuidLow);
+ ObjectGuid linkedGuid = ObjectGuid::Create<HighGuid::Unit>(slave->id, linkedGuidLow);
_linkedRespawnStore[guid] = linkedGuid;
WorldDatabasePreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_REP_LINKED_RESPAWN);
@@ -6443,7 +6443,7 @@ void ObjectMgr::ReturnOrDeleteOldMails(bool serverUp)
{
Field* fields = result->Fetch();
ObjectGuid::LowType receiver = fields[3].GetUInt32();
- if (serverUp && ObjectAccessor::FindConnectedPlayer(ObjectGuid(HighGuid::Player, receiver)))
+ if (serverUp && ObjectAccessor::FindConnectedPlayer(ObjectGuid::Create<HighGuid::Player>(receiver)))
continue;
Mail* m = new Mail;
diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h
index ca43d66d9c8..162feb35b3e 100644
--- a/src/server/game/Globals/ObjectMgr.h
+++ b/src/server/game/Globals/ObjectMgr.h
@@ -1251,7 +1251,8 @@ class TC_GAME_API ObjectMgr
template<HighGuid type>
ObjectGuidGenerator& GetGenerator()
{
- static_assert(ObjectGuidTraits<type>::Global, "Only global guid can be generated in ObjectMgr context");
+ static_assert(ObjectGuidTraits<type>::SequenceSource.HasFlag(ObjectGuidSequenceSource::Global),
+ "Only global guid can be generated in ObjectMgr context");
return GetGuidSequenceGenerator(type);
}
diff --git a/src/server/game/Groups/Group.cpp b/src/server/game/Groups/Group.cpp
index ca11a2fe24e..c9993f95f40 100644
--- a/src/server/game/Groups/Group.cpp
+++ b/src/server/game/Groups/Group.cpp
@@ -152,7 +152,7 @@ bool Group::Create(Player* leader)
{
ObjectGuid leaderGuid = leader->GetGUID();
- m_guid = ObjectGuid(HighGuid::Group, sGroupMgr->GenerateGroupId());
+ m_guid = ObjectGuid::Create<HighGuid::Group>(sGroupMgr->GenerateGroupId());
m_leaderGuid = leaderGuid;
m_leaderName = leader->GetName();
leader->SetFlag(PLAYER_FLAGS, PLAYER_FLAGS_GROUP_LEADER);
@@ -221,15 +221,15 @@ bool Group::Create(Player* leader)
void Group::LoadGroupFromDB(Field* fields)
{
m_dbStoreId = fields[16].GetUInt32();
- m_guid = ObjectGuid(HighGuid::Group, sGroupMgr->GenerateGroupId());
- m_leaderGuid = ObjectGuid(HighGuid::Player, fields[0].GetUInt32());
+ m_guid = ObjectGuid::Create<HighGuid::Group>(sGroupMgr->GenerateGroupId());
+ m_leaderGuid = ObjectGuid::Create<HighGuid::Player>(fields[0].GetUInt32());
// group leader not exist
if (!sCharacterCache->GetCharacterNameByGuid(m_leaderGuid, m_leaderName))
return;
m_lootMethod = LootMethod(fields[1].GetUInt8());
- m_looterGuid = ObjectGuid(HighGuid::Player, fields[2].GetUInt32());
+ m_looterGuid = ObjectGuid::Create<HighGuid::Player>(fields[2].GetUInt32());
m_lootThreshold = ItemQualities(fields[3].GetUInt8());
for (uint8 i = 0; i < TARGET_ICONS_COUNT; ++i)
@@ -251,7 +251,7 @@ void Group::LoadGroupFromDB(Field* fields)
else
m_raidDifficulty = Difficulty(r_diff);
- m_masterLooterGuid = ObjectGuid(HighGuid::Player, fields[15].GetUInt32());
+ m_masterLooterGuid = fields[15].GetUInt32() ? ObjectGuid::Create<HighGuid::Player>(fields[15].GetUInt32()) : ObjectGuid::Empty;
if (m_groupType & GROUPTYPE_LFG)
sLFGMgr->_LoadFromDB(fields, GetGUID());
@@ -260,7 +260,7 @@ void Group::LoadGroupFromDB(Field* fields)
void Group::LoadMemberFromDB(ObjectGuid::LowType guidLow, uint8 memberFlags, uint8 subgroup, uint8 roles)
{
MemberSlot member;
- member.guid = ObjectGuid(HighGuid::Player, guidLow);
+ member.guid = ObjectGuid::Create<HighGuid::Player>(guidLow);
// skip non-existed member
if (!sCharacterCache->GetCharacterNameByGuid(member.guid, member.name))
@@ -1084,7 +1084,6 @@ void Group::GroupLoot(Loot* loot, WorldObject* pLootedObject)
if (item->Quality >= uint32(m_lootThreshold))
{
ObjectGuid newitemGUID = ObjectGuid::Create<HighGuid::Item>(sObjectMgr->GetGenerator<HighGuid::Item>().Generate());
-
Roll* r = new Roll(newitemGUID, *i);
//a vector is filled with only near party members
@@ -1169,7 +1168,6 @@ void Group::GroupLoot(Loot* loot, WorldObject* pLootedObject)
}
ObjectGuid newitemGUID = ObjectGuid::Create<HighGuid::Item>(sObjectMgr->GetGenerator<HighGuid::Item>().Generate());
-
Roll* r = new Roll(newitemGUID, *i);
//a vector is filled with only near party members
@@ -1235,7 +1233,6 @@ void Group::NeedBeforeGreed(Loot* loot, WorldObject* lootedObject)
if (item->Quality >= uint32(m_lootThreshold))
{
ObjectGuid newitemGUID = ObjectGuid::Create<HighGuid::Item>(sObjectMgr->GetGenerator<HighGuid::Item>().Generate());
-
Roll* r = new Roll(newitemGUID, *i);
for (GroupReference* itr = GetFirstMember(); itr != nullptr; itr = itr->next())
@@ -1309,7 +1306,6 @@ void Group::NeedBeforeGreed(Loot* loot, WorldObject* lootedObject)
item = sObjectMgr->GetItemTemplate(i->itemid);
ObjectGuid newitemGUID = ObjectGuid::Create<HighGuid::Item>(sObjectMgr->GetGenerator<HighGuid::Item>().Generate());
-
Roll* r = new Roll(newitemGUID, *i);
for (GroupReference* itr = GetFirstMember(); itr != nullptr; itr = itr->next())
diff --git a/src/server/game/Guilds/Guild.cpp b/src/server/game/Guilds/Guild.cpp
index 5598ec01707..59bf3314f1b 100644
--- a/src/server/game/Guilds/Guild.cpp
+++ b/src/server/game/Guilds/Guild.cpp
@@ -1917,7 +1917,7 @@ bool Guild::LoadFromDB(Field* fields)
{
m_id = fields[0].GetUInt32();
m_name = fields[1].GetString();
- m_leaderGuid = ObjectGuid(HighGuid::Player, fields[2].GetUInt32());
+ m_leaderGuid = ObjectGuid::Create<HighGuid::Player>(fields[2].GetUInt32());
m_emblemInfo.LoadFromDB(fields);
m_info = fields[8].GetString();
m_motd = fields[9].GetString();
@@ -1947,7 +1947,7 @@ void Guild::LoadRankFromDB(Field* fields)
bool Guild::LoadMemberFromDB(Field* fields)
{
ObjectGuid::LowType lowguid = fields[1].GetUInt32();
- ObjectGuid playerGuid(HighGuid::Player, lowguid);
+ ObjectGuid playerGuid(ObjectGuid::Create<HighGuid::Player>(lowguid));
auto [memberIt, isNew] = m_members.try_emplace(playerGuid, m_id, playerGuid, fields[2].GetUInt8());
if (!isNew)
diff --git a/src/server/game/Handlers/AuctionHouseHandler.cpp b/src/server/game/Handlers/AuctionHouseHandler.cpp
index 1880194278d..fa6020ad84d 100644
--- a/src/server/game/Handlers/AuctionHouseHandler.cpp
+++ b/src/server/game/Handlers/AuctionHouseHandler.cpp
@@ -489,7 +489,7 @@ void WorldSession::HandleAuctionPlaceBid(WorldPacket& recvData)
}
// impossible have online own another character (use this for speedup check in case online owner)
- ObjectGuid ownerGuid(HighGuid::Player, auction->owner);
+ ObjectGuid ownerGuid = ObjectGuid::Create<HighGuid::Player>(auction->owner);
Player* auction_owner = ObjectAccessor::FindPlayer(ownerGuid);
if (!auction_owner && sCharacterCache->GetCharacterAccountIdByGuid(ownerGuid) == player->GetSession()->GetAccountId())
{
diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp
index 98adad41a51..88a7fd0d9d4 100644
--- a/src/server/game/Handlers/CharacterHandler.cpp
+++ b/src/server/game/Handlers/CharacterHandler.cpp
@@ -229,7 +229,7 @@ void WorldSession::HandleCharEnum(PreparedQueryResult result)
{
do
{
- ObjectGuid guid(HighGuid::Player, (*result)[0].GetUInt32());
+ ObjectGuid guid = ObjectGuid::Create<HighGuid::Player>((*result)[0].GetUInt32());
TC_LOG_INFO("network", "Loading {} from account {}.", guid.ToString(), GetAccountId());
if (Player::BuildEnumData(result, &data))
{
diff --git a/src/server/game/Handlers/MailHandler.cpp b/src/server/game/Handlers/MailHandler.cpp
index 951a5cfe808..e3f5cbd8a7b 100644
--- a/src/server/game/Handlers/MailHandler.cpp
+++ b/src/server/game/Handlers/MailHandler.cpp
@@ -440,7 +440,7 @@ void WorldSession::HandleMailTakeItem(WorldPackets::Mail::MailTakeItem& takeItem
if (m->COD > 0) //if there is COD, take COD money from player and send them to sender by mail
{
- ObjectGuid sender_guid(HighGuid::Player, m->sender);
+ ObjectGuid sender_guid = ObjectGuid::Create<HighGuid::Player>(m->sender);
Player* receiver = ObjectAccessor::FindConnectedPlayer(sender_guid);
uint32 sender_accId = 0;
@@ -588,7 +588,7 @@ void WorldSession::HandleMailCreateTextItem(WorldPackets::Mail::MailCreateTextIt
bodyItem->SetText(m->body);
if (m->messageType == MAIL_NORMAL)
- bodyItem->SetGuidValue(ITEM_FIELD_CREATOR, ObjectGuid(HighGuid::Player, m->sender));
+ bodyItem->SetGuidValue(ITEM_FIELD_CREATOR, ObjectGuid::Create<HighGuid::Player>(m->sender));
bodyItem->SetFlag(ITEM_FIELD_FLAGS, ITEM_FLAG_MAIL_TEXT_MASK);
diff --git a/src/server/game/Mails/Mail.cpp b/src/server/game/Mails/Mail.cpp
index c580d794426..2ccac032ad9 100644
--- a/src/server/game/Mails/Mail.cpp
+++ b/src/server/game/Mails/Mail.cpp
@@ -144,7 +144,7 @@ void MailDraft::deleteIncludedItems(CharacterDatabaseTransaction trans, bool inD
void MailDraft::SendReturnToSender(uint32 sender_acc, ObjectGuid::LowType sender_guid, ObjectGuid::LowType receiver_guid, CharacterDatabaseTransaction trans)
{
- ObjectGuid receiverGuid(HighGuid::Player, receiver_guid);
+ ObjectGuid receiverGuid = ObjectGuid::Create<HighGuid::Player>(receiver_guid);
Player* receiver = ObjectAccessor::FindConnectedPlayer(receiverGuid);
uint32 rc_account = 0;
diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp
index bf4a8d1b197..5f65a14f262 100644
--- a/src/server/game/Maps/Map.cpp
+++ b/src/server/game/Maps/Map.cpp
@@ -3082,7 +3082,9 @@ bool Map::CheckRespawn(RespawnInfo* info)
}
// next, check linked respawn time
- ObjectGuid thisGUID = ObjectGuid((info->type == SPAWN_TYPE_GAMEOBJECT) ? HighGuid::GameObject : HighGuid::Unit, info->entry, info->spawnId);
+ ObjectGuid thisGUID = info->type == SPAWN_TYPE_GAMEOBJECT
+ ? ObjectGuid::Create<HighGuid::GameObject>(info->entry, info->spawnId)
+ : ObjectGuid::Create<HighGuid::Unit>(info->entry, info->spawnId);
if (time_t linkedTime = GetLinkedRespawnTime(thisGUID))
{
time_t now = GameTime::GetGameTime();
diff --git a/src/server/game/Maps/Map.h b/src/server/game/Maps/Map.h
index f82420e49e3..05d55cbacc8 100644
--- a/src/server/game/Maps/Map.h
+++ b/src/server/game/Maps/Map.h
@@ -586,14 +586,14 @@ class TC_GAME_API Map : public GridRefManager<NGridType>
template<HighGuid high>
inline ObjectGuid::LowType GenerateLowGuid()
{
- static_assert(ObjectGuidTraits<high>::MapSpecific, "Only map specific guid can be generated in Map context");
+ static_assert(ObjectGuidTraits<high>::SequenceSource.HasFlag(ObjectGuidSequenceSource::Map), "Only map specific guid can be generated in Map context");
return GetGuidSequenceGenerator(high).Generate();
}
template<HighGuid high>
inline ObjectGuid::LowType GetMaxLowGuid()
{
- static_assert(ObjectGuidTraits<high>::MapSpecific, "Only map specific guid can be retrieved in Map context");
+ static_assert(ObjectGuidTraits<high>::SequenceSource.HasFlag(ObjectGuidSequenceSource::Map), "Only map specific guid can be generated in Map context");
return GetGuidSequenceGenerator(high).GetNextAfterMaxUsed();
}
diff --git a/src/server/game/Pools/PoolMgr.cpp b/src/server/game/Pools/PoolMgr.cpp
index 5d5a3d52728..d4a8a23cfbe 100644
--- a/src/server/game/Pools/PoolMgr.cpp
+++ b/src/server/game/Pools/PoolMgr.cpp
@@ -464,7 +464,7 @@ void PoolMgr::LoadFromDB()
{
Field* fields = result->Fetch();
- ObjectGuid::LowType guid = fields[0].GetUInt32();
+ ObjectGuid::LowType guid = fields[0].GetUInt32();
uint32 pool_id = fields[1].GetUInt32();
float chance = fields[2].GetFloat();
diff --git a/src/server/game/Tickets/TicketMgr.cpp b/src/server/game/Tickets/TicketMgr.cpp
index 84b68176f21..dc935cda33b 100644
--- a/src/server/game/Tickets/TicketMgr.cpp
+++ b/src/server/game/Tickets/TicketMgr.cpp
@@ -68,7 +68,7 @@ bool GmTicket::LoadFromDB(Field* fields)
uint8 index = 0;
_id = fields[ index].GetUInt32();
_type = TicketType(fields[++index].GetUInt8());
- _playerGuid = ObjectGuid(HighGuid::Player, fields[++index].GetUInt32());
+ _playerGuid = ObjectGuid::Create<HighGuid::Player>(fields[++index].GetUInt32());
_playerName = fields[++index].GetString();
_message = fields[++index].GetString();
_createTime = fields[++index].GetUInt32();
@@ -77,8 +77,8 @@ bool GmTicket::LoadFromDB(Field* fields)
_posY = fields[++index].GetFloat();
_posZ = fields[++index].GetFloat();
_lastModifiedTime = fields[++index].GetUInt32();
- _closedBy = ObjectGuid(uint64(fields[++index].GetInt32()));
- _assignedTo = ObjectGuid(HighGuid::Player, fields[++index].GetUInt32());
+ _closedBy = fields[++index].GetUInt32() ? ObjectGuid::Create<HighGuid::Player>(fields[index].GetUInt32()) : ObjectGuid::Empty;
+ _assignedTo = fields[++index].GetUInt32() ? ObjectGuid::Create<HighGuid::Player>(fields[index].GetUInt32()) : ObjectGuid::Empty;
_comment = fields[++index].GetString();
_response = fields[++index].GetString();
_completed = fields[++index].GetBool();
@@ -105,7 +105,7 @@ void GmTicket::SaveToDB(CharacterDatabaseTransaction trans) const
stmt->setFloat (++index, _posY);
stmt->setFloat (++index, _posZ);
stmt->setUInt32(++index, uint32(_lastModifiedTime));
- stmt->setInt32 (++index, int32(_closedBy.GetCounter()));
+ stmt->setUInt32(++index, _closedBy.GetCounter());
stmt->setUInt32(++index, _assignedTo.GetCounter());
stmt->setString(++index, _comment);
stmt->setString(++index, _response);
diff --git a/src/server/game/Tools/PlayerDump.cpp b/src/server/game/Tools/PlayerDump.cpp
index d9e78dadf4c..dc47910c3f1 100644
--- a/src/server/game/Tools/PlayerDump.cpp
+++ b/src/server/game/Tools/PlayerDump.cpp
@@ -953,7 +953,7 @@ DumpReturn PlayerDumpReader::LoadDump(std::istream& input, uint32 account, std::
CharacterDatabase.CommitTransaction(trans);
// in case of name conflict player has to rename at login anyway
- sCharacterCache->AddCharacterCacheEntry(ObjectGuid(HighGuid::Player, guid), account, name, gender, race, playerClass, level);
+ sCharacterCache->AddCharacterCacheEntry(ObjectGuid::Create<HighGuid::Player>(guid), account, name, gender, race, playerClass, level);
sObjectMgr->GetGenerator<HighGuid::Item>().Set(sObjectMgr->GetGenerator<HighGuid::Item>().GetNextAfterMaxUsed() + items.size());
sObjectMgr->_mailId += mails.size();
diff --git a/src/server/scripts/Commands/cs_character.cpp b/src/server/scripts/Commands/cs_character.cpp
index aef0b9a73bf..58b9614f65e 100644
--- a/src/server/scripts/Commands/cs_character.cpp
+++ b/src/server/scripts/Commands/cs_character.cpp
@@ -140,7 +140,7 @@ public:
DeletedInfo info;
- info.guid = ObjectGuid(HighGuid::Player, fields[0].GetUInt32());
+ info.guid = ObjectGuid::Create<HighGuid::Player>(fields[0].GetUInt32());
info.name = fields[1].GetString();
info.accountId = fields[2].GetUInt32();
@@ -946,7 +946,7 @@ public:
if (characterGUID)
{
- if (sCharacterCache->GetCharacterCacheByGuid(ObjectGuid(HighGuid::Player, *characterGUID)))
+ if (sCharacterCache->GetCharacterCacheByGuid(ObjectGuid::Create<HighGuid::Player>(*characterGUID)))
{
handler->PSendSysMessage(LANG_CHARACTER_GUID_IN_USE, *characterGUID);
handler->SetSentErrorMessage(true);
diff --git a/src/server/scripts/Commands/cs_debug.cpp b/src/server/scripts/Commands/cs_debug.cpp
index a99ad2e8752..37e3db1aac9 100644
--- a/src/server/scripts/Commands/cs_debug.cpp
+++ b/src/server/scripts/Commands/cs_debug.cpp
@@ -1055,7 +1055,7 @@ public:
static bool HandleDebugGetItemValueCommand(ChatHandler* handler, ObjectGuid::LowType guid, uint32 index)
{
- Item* i = handler->GetPlayer()->GetItemByGuid(ObjectGuid(HighGuid::Item, 0, guid));
+ Item* i = handler->GetPlayer()->GetItemByGuid(ObjectGuid::Create<HighGuid::Item>(guid));
if (!i)
return false;
@@ -1072,7 +1072,7 @@ public:
static bool HandleDebugSetItemValueCommand(ChatHandler* handler, ObjectGuid::LowType guid, uint32 index, uint32 value)
{
- Item* i = handler->GetPlayer()->GetItemByGuid(ObjectGuid(HighGuid::Item, 0, guid));
+ Item* i = handler->GetPlayer()->GetItemByGuid(ObjectGuid::Create<HighGuid::Item>(guid));
if (!i)
return false;
@@ -1087,7 +1087,7 @@ public:
static bool HandleDebugItemExpireCommand(ChatHandler* handler, ObjectGuid::LowType guid)
{
- Item* i = handler->GetPlayer()->GetItemByGuid(ObjectGuid(HighGuid::Item, guid));
+ Item* i = handler->GetPlayer()->GetItemByGuid(ObjectGuid::Create<HighGuid::Item>(guid));
if (!i)
return false;
diff --git a/src/server/scripts/Commands/cs_ticket.cpp b/src/server/scripts/Commands/cs_ticket.cpp
index 80d7f6f576f..5db99bdca31 100644
--- a/src/server/scripts/Commands/cs_ticket.cpp
+++ b/src/server/scripts/Commands/cs_ticket.cpp
@@ -159,7 +159,7 @@ public:
return true;
}
- sTicketMgr->ResolveAndCloseTicket(ticket->GetId(), player ? player->GetGUID() : ObjectGuid(uint64(0)));
+ sTicketMgr->ResolveAndCloseTicket(ticket->GetId(), Object::GetGUID(player));
sTicketMgr->UpdateLastChange();
std::string msg = ticket->FormatMessageString(*handler, player ? player->GetName().c_str() : "Console", nullptr, nullptr, nullptr, nullptr);
@@ -262,7 +262,7 @@ public:
Player* gm = handler->GetSession() ? handler->GetSession()->GetPlayer() : nullptr;
CharacterDatabaseTransaction trans = CharacterDatabaseTransaction(nullptr);
- ticket->SetResolvedBy(gm ? gm->GetGUID() : ObjectGuid(uint64(0)));
+ ticket->SetResolvedBy(Object::GetGUID(gm));
ticket->SetCompleted();
ticket->SaveToDB(trans);