diff options
author | joschiwald <joschiwald.trinity@gmail.com> | 2014-11-12 19:16:14 +0100 |
---|---|---|
committer | joschiwald <joschiwald.trinity@gmail.com> | 2014-11-12 19:16:14 +0100 |
commit | 620f23d9dcb94b21c2b3402765817362e2b82b2f (patch) | |
tree | 89a92c8266999f4a8e1b6bba8e54377ab01102cf | |
parent | f4926e0a8c0c028d6b50ee28aabde720a93cf280 (diff) |
Core/World: hold deleted characters in character store
33 files changed, 231 insertions, 275 deletions
diff --git a/src/server/game/AuctionHouse/AuctionHouseMgr.cpp b/src/server/game/AuctionHouse/AuctionHouseMgr.cpp index e5b9079f019..74b1271f185 100644 --- a/src/server/game/AuctionHouse/AuctionHouseMgr.cpp +++ b/src/server/game/AuctionHouse/AuctionHouseMgr.cpp @@ -106,10 +106,10 @@ void AuctionHouseMgr::SendAuctionWonMail(AuctionEntry* auction, SQLTransaction& } else { - bidderAccId = sObjectMgr->GetPlayerAccountIdByGUID(bidderGuid); + bidderAccId = ObjectMgr::GetPlayerAccountIdByGUID(bidderGuid); logGmTrade = AccountMgr::HasPermission(bidderAccId, rbac::RBAC_PERM_LOG_GM_TRADE, realmHandle.Index); - if (logGmTrade && !sObjectMgr->GetPlayerNameByGUID(bidderGuid, bidderName)) + if (logGmTrade && !ObjectMgr::GetPlayerNameByGUID(bidderGuid, bidderName)) bidderName = sObjectMgr->GetTrinityStringForDBCLocale(LANG_UNKNOWN); } @@ -117,10 +117,10 @@ void AuctionHouseMgr::SendAuctionWonMail(AuctionEntry* auction, SQLTransaction& { ObjectGuid ownerGuid = ObjectGuid::Create<HighGuid::Player>(auction->owner); std::string ownerName; - if (!sObjectMgr->GetPlayerNameByGUID(ownerGuid, ownerName)) + if (!ObjectMgr::GetPlayerNameByGUID(ownerGuid, ownerName)) ownerName = sObjectMgr->GetTrinityStringForDBCLocale(LANG_UNKNOWN); - uint32 ownerAccId = sObjectMgr->GetPlayerAccountIdByGUID(ownerGuid); + uint32 ownerAccId = ObjectMgr::GetPlayerAccountIdByGUID(ownerGuid); sLog->outCommand(bidderAccId, "GM %s (Account: %u) won item in auction: %s (Entry: %u Count: %u) and pay money: %u. Original owner %s (Account: %u)", bidderName.c_str(), bidderAccId, pItem->GetTemplate()->Name1.c_str(), pItem->GetEntry(), pItem->GetCount(), auction->bid, ownerName.c_str(), ownerAccId); @@ -158,7 +158,7 @@ void AuctionHouseMgr::SendAuctionSalePendingMail(AuctionEntry* auction, SQLTrans { ObjectGuid owner_guid = ObjectGuid::Create<HighGuid::Player>(auction->owner); Player* owner = ObjectAccessor::FindConnectedPlayer(owner_guid); - uint32 owner_accId = sObjectMgr->GetPlayerAccountIdByGUID(owner_guid); + uint32 owner_accId = ObjectMgr::GetPlayerAccountIdByGUID(owner_guid); // owner exist (online or offline) if (owner || owner_accId) MailDraft(auction->BuildAuctionMailSubject(AUCTION_SALE_PENDING), AuctionEntry::BuildAuctionMailBody(auction->bidder, auction->bid, auction->buyout, auction->deposit, auction->GetAuctionCut())) @@ -170,7 +170,7 @@ void AuctionHouseMgr::SendAuctionSuccessfulMail(AuctionEntry* auction, SQLTransa { ObjectGuid owner_guid = ObjectGuid::Create<HighGuid::Player>(auction->owner); Player* owner = ObjectAccessor::FindConnectedPlayer(owner_guid); - uint32 owner_accId = sObjectMgr->GetPlayerAccountIdByGUID(owner_guid); + uint32 owner_accId = ObjectMgr::GetPlayerAccountIdByGUID(owner_guid); // owner exist if (owner || owner_accId) { @@ -201,7 +201,7 @@ void AuctionHouseMgr::SendAuctionExpiredMail(AuctionEntry* auction, SQLTransacti ObjectGuid owner_guid = ObjectGuid::Create<HighGuid::Player>(auction->owner); Player* owner = ObjectAccessor::FindConnectedPlayer(owner_guid); - uint32 owner_accId = sObjectMgr->GetPlayerAccountIdByGUID(owner_guid); + uint32 owner_accId = ObjectMgr::GetPlayerAccountIdByGUID(owner_guid); // owner exist if (owner || owner_accId) { @@ -227,7 +227,7 @@ void AuctionHouseMgr::SendAuctionOutbiddedMail(AuctionEntry* auction, uint32 new uint32 oldBidder_accId = 0; if (!oldBidder) - oldBidder_accId = sObjectMgr->GetPlayerAccountIdByGUID(oldBidder_guid); + oldBidder_accId = ObjectMgr::GetPlayerAccountIdByGUID(oldBidder_guid); // old bidder exist if (oldBidder || oldBidder_accId) @@ -249,7 +249,7 @@ void AuctionHouseMgr::SendAuctionCancelledToBidderMail(AuctionEntry* auction, SQ uint32 bidder_accId = 0; if (!bidder) - bidder_accId = sObjectMgr->GetPlayerAccountIdByGUID(bidder_guid); + bidder_accId = ObjectMgr::GetPlayerAccountIdByGUID(bidder_guid); if (bidder) bidder->GetSession()->SendAuctionRemovedNotification(auction->Id, auction->itemEntry, item->GetItemRandomPropertyId()); diff --git a/src/server/game/Chat/Channels/Channel.cpp b/src/server/game/Chat/Channels/Channel.cpp index 73c067ddf99..65f07b625e1 100644 --- a/src/server/game/Chat/Channels/Channel.cpp +++ b/src/server/game/Chat/Channels/Channel.cpp @@ -828,9 +828,9 @@ void Channel::MakeNotOwner(WorldPacket* data) void Channel::MakeChannelOwner(WorldPacket* data) { - std::string name = ""; + std::string name; - if (!sObjectMgr->GetPlayerNameByGUID(_ownerGUID, name) || name.empty()) + if (!ObjectMgr::GetPlayerNameByGUID(_ownerGUID, name) || name.empty()) name = "PLAYER_NOT_FOUND"; MakeNotifyPacket(data, CHAT_CHANNEL_OWNER_NOTICE); diff --git a/src/server/game/Chat/Chat.cpp b/src/server/game/Chat/Chat.cpp index 83c39349593..6c5d67db36a 100644 --- a/src/server/game/Chat/Chat.cpp +++ b/src/server/game/Chat/Chat.cpp @@ -133,7 +133,7 @@ bool ChatHandler::HasLowerSecurity(Player* target, ObjectGuid guid, bool strong) if (target) target_session = target->GetSession(); else if (!guid.IsEmpty()) - target_account = sObjectMgr->GetPlayerAccountIdByGUID(guid); + target_account = ObjectMgr::GetPlayerAccountIdByGUID(guid); if (!target_session && !target_account) { @@ -1086,7 +1086,7 @@ ObjectGuid ChatHandler::extractGuidFromLink(char* text) if (Player* player = ObjectAccessor::FindPlayerByName(name)) return player->GetGUID(); - return sObjectMgr->GetPlayerGUIDByName(name); + return ObjectMgr::GetPlayerGUIDByName(name); } case SPELL_LINK_CREATURE: { @@ -1145,7 +1145,7 @@ bool ChatHandler::extractPlayerTarget(char* args, Player** player, ObjectGuid* p *player = pl; // if need guid value from DB (in name case for check player existence) - ObjectGuid guid = !pl && (player_guid || player_name) ? sObjectMgr->GetPlayerGUIDByName(name) : ObjectGuid::Empty; + ObjectGuid guid = !pl && (player_guid || player_name) ? ObjectMgr::GetPlayerGUIDByName(name) : ObjectGuid::Empty; // if allowed player guid (if no then only online players allowed) if (player_guid) @@ -1304,7 +1304,7 @@ bool ChatHandler::GetPlayerGroupAndGUIDByName(const char* cname, Player*& player player = ObjectAccessor::FindPlayerByName(name); if (offline) - guid = sObjectMgr->GetPlayerGUIDByName(name.c_str()); + guid = ObjectMgr::GetPlayerGUIDByName(name.c_str()); } } diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index dcd69e65264..c0753f72942 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -4365,19 +4365,19 @@ void Player::DeleteFromDB(ObjectGuid playerguid, uint32 accountId, bool updateRe // Convert guid to low GUID for CharacterNameData, but also other methods on success ObjectGuid::LowType guid = playerguid.GetCounter(); - uint32 charDelete_method = sWorld->getIntConfig(CONFIG_CHARDELETE_METHOD); + uint32 charDeleteMethod = sWorld->getIntConfig(CONFIG_CHARDELETE_METHOD); if (deleteFinally) - charDelete_method = CHAR_DELETE_REMOVE; - else if (CharacterNameData const* nameData = sWorld->GetCharacterNameData(playerguid)) // To avoid a query, we select loaded data. If it doesn't exist, return. + charDeleteMethod = CHAR_DELETE_REMOVE; + else if (CharacterInfo const* characterInfo = sWorld->GetCharacterInfo(playerguid)) // To avoid a query, we select loaded data. If it doesn't exist, return. { // Define the required variables - uint32 charDelete_minLvl = sWorld->getIntConfig(nameData->m_class != CLASS_DEATH_KNIGHT ? CONFIG_CHARDELETE_MIN_LEVEL : CONFIG_CHARDELETE_HEROIC_MIN_LEVEL); + uint32 charDeleteMinLvl = sWorld->getIntConfig(characterInfo->Class != CLASS_DEATH_KNIGHT ? CONFIG_CHARDELETE_MIN_LEVEL : CONFIG_CHARDELETE_HEROIC_MIN_LEVEL); // if we want to finalize the character removal or the character does not meet the level requirement of either heroic or non-heroic settings, // we set it to mode CHAR_DELETE_REMOVE - if (nameData->m_level < charDelete_minLvl) - charDelete_method = CHAR_DELETE_REMOVE; + if (characterInfo->Level < charDeleteMinLvl) + charDeleteMethod = CHAR_DELETE_REMOVE; } // convert corpse to bones if exist (to prevent exiting Corpse in World without DB entry) @@ -4403,7 +4403,7 @@ void Player::DeleteFromDB(ObjectGuid playerguid, uint32 accountId, bool updateRe // Remove signs from petitions (also remove petitions if owner); RemovePetitionsAndSigns(playerguid, 10); - switch (charDelete_method) + switch (charDeleteMethod) { // Completely remove from the database case CHAR_DELETE_REMOVE: @@ -4492,7 +4492,7 @@ void Player::DeleteFromDB(ObjectGuid playerguid, uint32 accountId, bool updateRe stmt->setUInt32(0, mail_id); trans->Append(stmt); - uint32 pl_account = sObjectMgr->GetPlayerAccountIdByGUID(playerguid); + uint32 pl_account = ObjectMgr::GetPlayerAccountIdByGUID(playerguid); draft.AddMoney(money).SendReturnToSender(pl_account, guid, sender, trans); } @@ -4673,27 +4673,28 @@ void Player::DeleteFromDB(ObjectGuid playerguid, uint32 accountId, bool updateRe trans->Append(stmt); CharacterDatabase.CommitTransaction(trans); + + sWorld->DeleteCharacterInfo(playerguid); break; } // The character gets unlinked from the account, the name gets freed up and appears as deleted ingame case CHAR_DELETE_UNLINK: { stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_DELETE_INFO); - stmt->setUInt64(0, guid); CharacterDatabase.Execute(stmt); + + sWorld->UpdateCharacterInfoDeleted(playerguid, true); break; } default: - TC_LOG_ERROR("entities.player", "Player::DeleteFromDB: Unsupported delete method: %u.", charDelete_method); + TC_LOG_ERROR("entities.player", "Player::DeleteFromDB: Unsupported delete method: %u.", charDeleteMethod); return; } if (updateRealmChars) sWorld->UpdateRealmCharCount(accountId); - - sWorld->DeleteCharacterNameData(playerguid); } /** @@ -16927,7 +16928,7 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder) if (!result) { std::string name = "<unknown>"; - sObjectMgr->GetPlayerNameByGUID(guid, name); + ObjectMgr::GetPlayerNameByGUID(guid, name); TC_LOG_ERROR("entities.player", "Player %s %s not found in table `characters`, can't load. ", name.c_str(), guid.ToString().c_str()); return false; } @@ -18010,7 +18011,7 @@ void Player::_LoadVoidStorage(PreparedQueryResult result) } std::string name; - if (!creatorGuid.IsEmpty() && !sObjectMgr->GetPlayerNameByGUID(creatorGuid, name)) + if (!creatorGuid.IsEmpty() && !ObjectMgr::GetPlayerNameByGUID(creatorGuid, name)) { TC_LOG_ERROR("entities.player", "Player::_LoadVoidStorage - Player (%s, name: %s) has an item with an invalid creator guid, set to 0 (item id: " UI64FMTD ", entry: %u, creator: %s).", GetGUID().ToString().c_str(), GetName().c_str(), itemId, itemEntry, creatorGuid.ToString().c_str()); creatorGuid.Clear(); diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 0152b132370..8d90d73d0c1 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -11693,7 +11693,7 @@ void Unit::SetLevel(uint8 lvl) if (player->GetGroup()) player->SetGroupUpdateFlag(GROUP_UPDATE_FLAG_LEVEL); - sWorld->UpdateCharacterNameDataLevel(GetGUID(), lvl); + sWorld->UpdateCharacterInfoLevel(GetGUID(), lvl); } } diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index 70f8eb4d0fa..985d0508f6c 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -2152,103 +2152,67 @@ Player* ObjectMgr::GetPlayerByLowGUID(ObjectGuid::LowType lowguid) const } // name must be checked to correctness (if received) before call this function -ObjectGuid ObjectMgr::GetPlayerGUIDByName(std::string const& name) const +ObjectGuid ObjectMgr::GetPlayerGUIDByName(std::string const& name) { PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_GUID_BY_NAME); - stmt->setString(0, name); - PreparedQueryResult result = CharacterDatabase.Query(stmt); - - if (result) + if (PreparedQueryResult result = CharacterDatabase.Query(stmt)) return ObjectGuid::Create<HighGuid::Player>((*result)[0].GetUInt64()); return ObjectGuid::Empty; } -bool ObjectMgr::GetPlayerNameByGUID(ObjectGuid guid, std::string& name) const +bool ObjectMgr::GetPlayerNameByGUID(ObjectGuid const& guid, std::string& name) { - // prevent DB access for online player if (Player* player = ObjectAccessor::FindConnectedPlayer(guid)) { name = player->GetName(); return true; } - PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHARACTER_NAME); - - stmt->setUInt64(0, guid.GetCounter()); - - PreparedQueryResult result = CharacterDatabase.Query(stmt); - - if (result) + if (CharacterInfo const* characterInfo = sWorld->GetCharacterInfo(guid)) { - name = (*result)[0].GetString(); + name = characterInfo->Name; return true; } return false; } -uint32 ObjectMgr::GetPlayerTeamByGUID(ObjectGuid guid) const +uint32 ObjectMgr::GetPlayerTeamByGUID(ObjectGuid const& guid) { - // prevent DB access for online player if (Player* player = ObjectAccessor::FindConnectedPlayer(guid)) - { - return Player::TeamForRace(player->getRace()); - } - - PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHAR_RACE); - - stmt->setUInt64(0, guid.GetCounter()); - - PreparedQueryResult result = CharacterDatabase.Query(stmt); + return player->GetTeam(); - if (result) - { - uint8 race = (*result)[0].GetUInt8(); - return Player::TeamForRace(race); - } + if (CharacterInfo const* characterInfo = sWorld->GetCharacterInfo(guid)) + return Player::TeamForRace(characterInfo->Race); return 0; } -uint32 ObjectMgr::GetPlayerAccountIdByGUID(ObjectGuid guid) const +uint32 ObjectMgr::GetPlayerAccountIdByGUID(ObjectGuid const& guid) { // prevent DB access for online player if (Player* player = ObjectAccessor::FindConnectedPlayer(guid)) - { return player->GetSession()->GetAccountId(); - } PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_ACCOUNT_BY_GUID); - stmt->setUInt64(0, guid.GetCounter()); - PreparedQueryResult result = CharacterDatabase.Query(stmt); - - if (result) - { - uint32 acc = (*result)[0].GetUInt32(); - return acc; - } + if (PreparedQueryResult result = CharacterDatabase.Query(stmt)) + return (*result)[0].GetUInt32(); return 0; } -uint32 ObjectMgr::GetPlayerAccountIdByPlayerName(const std::string& name) const +uint32 ObjectMgr::GetPlayerAccountIdByPlayerName(std::string const& name) { PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_ACCOUNT_BY_NAME); - stmt->setString(0, name); - PreparedQueryResult result = CharacterDatabase.Query(stmt); - - if (result) - { - uint32 acc = (*result)[0].GetUInt32(); - return acc; - } + if (PreparedQueryResult result = CharacterDatabase.Query(stmt)) + return (*result)[0].GetUInt32(); return 0; } diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h index 5f6c4f0765b..fbf696770dc 100644 --- a/src/server/game/Globals/ObjectMgr.h +++ b/src/server/game/Globals/ObjectMgr.h @@ -784,7 +784,7 @@ class ObjectMgr void GetPlayerLevelInfo(uint32 race, uint32 class_, uint8 level, PlayerLevelInfo* info) const; - ObjectGuid GetPlayerGUIDByName(std::string const& name) const; + static ObjectGuid GetPlayerGUIDByName(std::string const& name); /** * Retrieves the player name by guid. @@ -799,10 +799,10 @@ class ObjectMgr * * @return true if player was found, false otherwise */ - bool GetPlayerNameByGUID(ObjectGuid guid, std::string& name) const; - uint32 GetPlayerTeamByGUID(ObjectGuid guid) const; - uint32 GetPlayerAccountIdByGUID(ObjectGuid guid) const; - uint32 GetPlayerAccountIdByPlayerName(std::string const& name) const; + static bool GetPlayerNameByGUID(ObjectGuid const& guid, std::string& name); + static uint32 GetPlayerTeamByGUID(ObjectGuid const& guid); + static uint32 GetPlayerAccountIdByGUID(ObjectGuid const& guid); + static uint32 GetPlayerAccountIdByPlayerName(std::string const& name); uint32 GetNearestTaxiNode(float x, float y, float z, uint32 mapid, uint32 team); void GetTaxiPath(uint32 source, uint32 destination, uint32 &path, uint32 &cost); diff --git a/src/server/game/Groups/Group.cpp b/src/server/game/Groups/Group.cpp index 2aa40942171..e0f443b7da6 100644 --- a/src/server/game/Groups/Group.cpp +++ b/src/server/game/Groups/Group.cpp @@ -166,7 +166,7 @@ void Group::LoadGroupFromDB(Field* fields) m_leaderGuid = ObjectGuid::Create<HighGuid::Player>(fields[0].GetUInt64()); // group leader not exist - if (!sObjectMgr->GetPlayerNameByGUID(m_leaderGuid, m_leaderName)) + if (!ObjectMgr::GetPlayerNameByGUID(m_leaderGuid, m_leaderName)) return; m_lootMethod = LootMethod(fields[1].GetUInt8()); @@ -204,7 +204,7 @@ void Group::LoadMemberFromDB(ObjectGuid::LowType guidLow, uint8 memberFlags, uin member.guid = ObjectGuid::Create<HighGuid::Player>(guidLow); // skip non-existed member - if (!sObjectMgr->GetPlayerNameByGUID(member.guid, member.name)) + if (!ObjectMgr::GetPlayerNameByGUID(member.guid, member.name)) { PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_GROUP_MEMBER); stmt->setUInt64(0, guidLow); diff --git a/src/server/game/Guilds/Guild.cpp b/src/server/game/Guilds/Guild.cpp index 05d26b58ddf..4fb361209c1 100644 --- a/src/server/game/Guilds/Guild.cpp +++ b/src/server/game/Guilds/Guild.cpp @@ -1854,7 +1854,7 @@ void Guild::HandleAcceptMember(WorldSession* session) { Player* player = session->GetPlayer(); if (!sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_GUILD) && - player->GetTeam() != sObjectMgr->GetPlayerTeamByGUID(GetLeaderGUID())) + player->GetTeam() != ObjectMgr::GetPlayerTeamByGUID(GetLeaderGUID())) return; AddMember(player->GetGUID()); diff --git a/src/server/game/Guilds/GuildFinderMgr.h b/src/server/game/Guilds/GuildFinderMgr.h index b1c57f230dd..45228957b55 100644 --- a/src/server/game/Guilds/GuildFinderMgr.h +++ b/src/server/game/Guilds/GuildFinderMgr.h @@ -81,12 +81,13 @@ struct MembershipRequest uint8 GetAvailability() const { return _availability; } uint8 GetClassRoles() const { return _classRoles; } uint8 GetInterests() const { return _interests; } - uint8 GetClass() const { return sWorld->GetCharacterNameData(GetPlayerGUID())->m_class; } - uint8 GetLevel() const { return sWorld->GetCharacterNameData(GetPlayerGUID())->m_level; } + uint8 GetClass() const { return sWorld->GetCharacterInfo(GetPlayerGUID())->Class; } + uint8 GetLevel() const { return sWorld->GetCharacterInfo(GetPlayerGUID())->Level; } time_t GetSubmitTime() const { return _time; } time_t GetExpiryTime() const { return time_t(_time + 30 * 24 * 3600); } // Adding 30 days std::string const& GetComment() const { return _comment; } - std::string const& GetName() const { return sWorld->GetCharacterNameData(GetPlayerGUID())->m_name; } + std::string const& GetName() const { return sWorld->GetCharacterInfo(GetPlayerGUID())->Name; } + private: std::string _comment; diff --git a/src/server/game/Handlers/ArenaTeamHandler.cpp b/src/server/game/Handlers/ArenaTeamHandler.cpp index 609a8805b18..8598085d65d 100644 --- a/src/server/game/Handlers/ArenaTeamHandler.cpp +++ b/src/server/game/Handlers/ArenaTeamHandler.cpp @@ -237,7 +237,7 @@ void WorldSession::HandleArenaTeamAcceptOpcode(WorldPacket & /*recvData*/) } // Only allow members of the other faction to join the team if cross faction interaction is enabled - if (!sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_GUILD) && _player->GetTeam() != sObjectMgr->GetPlayerTeamByGUID(arenaTeam->GetCaptain())) + if (!sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_GUILD) && _player->GetTeam() != ObjectMgr::GetPlayerTeamByGUID(arenaTeam->GetCaptain())) { SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S, "", "", ERR_ARENA_TEAM_NOT_ALLIED); return; diff --git a/src/server/game/Handlers/AuctionHouseHandler.cpp b/src/server/game/Handlers/AuctionHouseHandler.cpp index 9197ea15b3d..e7e45e0bf19 100644 --- a/src/server/game/Handlers/AuctionHouseHandler.cpp +++ b/src/server/game/Handlers/AuctionHouseHandler.cpp @@ -431,7 +431,7 @@ void WorldSession::HandleAuctionPlaceBid(WorldPacket& recvData) // impossible have online own another character (use this for speedup check in case online owner) ObjectGuid ownerGuid = ObjectGuid::Create<HighGuid::Player>(auction->owner); Player* auction_owner = ObjectAccessor::FindPlayer(ownerGuid); - if (!auction_owner && sObjectMgr->GetPlayerAccountIdByGUID(ownerGuid) == player->GetSession()->GetAccountId()) + if (!auction_owner && ObjectMgr::GetPlayerAccountIdByGUID(ownerGuid) == player->GetSession()->GetAccountId()) { //you cannot bid your another character auction: SendAuctionCommandResult(NULL, AUCTION_PLACE_BID, ERR_AUCTION_BID_OWN); diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp index 9be421e2f83..6e9560ac22f 100644 --- a/src/server/game/Handlers/CharacterHandler.cpp +++ b/src/server/game/Handlers/CharacterHandler.cpp @@ -246,8 +246,8 @@ void WorldSession::HandleCharEnum(PreparedQueryResult result) if (!(charInfo.Flags & (CHARACTER_FLAG_LOCKED_FOR_TRANSFER | CHARACTER_FLAG_LOCKED_BY_BILLING))) _legitCharacters.insert(charInfo.Guid); - if (!sWorld->HasCharacterNameData(charInfo.Guid)) // This can happen if characters are inserted into the database manually. Core hasn't loaded name data yet. - sWorld->AddCharacterNameData(charInfo.Guid, charInfo.Name, charInfo.Sex, charInfo.Race, charInfo.Class, charInfo.Level); + if (!sWorld->HasCharacterInfo(charInfo.Guid)) // This can happen if characters are inserted into the database manually. Core hasn't loaded name data yet. + sWorld->AddCharacterInfo(charInfo.Guid, charInfo.Name, charInfo.Sex, charInfo.Race, charInfo.Class, charInfo.Level, false); charEnum.Characters.emplace_back(charInfo); } @@ -292,6 +292,9 @@ void WorldSession::HandleCharUndeleteEnum(PreparedQueryResult result) TC_LOG_INFO("network", "Loading undeleted char guid %s from account %u.", charInfo.Guid.ToString().c_str(), GetAccountId()); + if (!sWorld->HasCharacterInfo(charInfo.Guid)) // This can happen if characters are inserted into the database manually. Core hasn't loaded name data yet. + sWorld->AddCharacterInfo(charInfo.Guid, charInfo.Name, charInfo.Sex, charInfo.Race, charInfo.Class, charInfo.Level, true); + charEnum.Characters.emplace_back(charInfo); } while (result->NextRow()); @@ -675,7 +678,7 @@ void WorldSession::HandleCharCreateCallback(PreparedQueryResult result, WorldPac TC_LOG_INFO("entities.player.character", "Account: %u (IP: %s) Create Character: %s %s", GetAccountId(), GetRemoteAddress().c_str(), createInfo->Name.c_str(), newChar.GetGUID().ToString().c_str()); sScriptMgr->OnPlayerCreate(&newChar); - sWorld->AddCharacterNameData(newChar.GetGUID(), newChar.GetName(), newChar.getGender(), newChar.getRace(), newChar.getClass(), newChar.getLevel()); + sWorld->AddCharacterInfo(newChar.GetGUID(), newChar.GetName(), newChar.getGender(), newChar.getRace(), newChar.getClass(), newChar.getLevel(), false); newChar.CleanupsBeforeDelete(); _charCreateCallback.Reset(); @@ -1261,7 +1264,7 @@ void WorldSession::HandleCharRenameCallBack(PreparedQueryResult result, WorldPac SendCharRename(RESPONSE_SUCCESS, renameInfo); - sWorld->UpdateCharacterNameData(renameInfo->Guid, renameInfo->NewName); + sWorld->UpdateCharacterInfo(renameInfo->Guid, renameInfo->NewName); } void WorldSession::HandleSetPlayerDeclinedNames(WorldPacket& recvData) @@ -1272,7 +1275,7 @@ void WorldSession::HandleSetPlayerDeclinedNames(WorldPacket& recvData) // not accept declined names for unsupported languages std::string name; - if (!sObjectMgr->GetPlayerNameByGUID(guid, name)) + if (!ObjectMgr::GetPlayerNameByGUID(guid, name)) { SendSetPlayerDeclinedNamesResult(DECLINED_NAMES_RESULT_ERROR, guid); return; @@ -1488,7 +1491,7 @@ void WorldSession::HandleCharCustomizeCallback(PreparedQueryResult result, World // character with this name already exist /// @todo: make async - ObjectGuid newGuid = sObjectMgr->GetPlayerGUIDByName(customizeInfo->CharName); + ObjectGuid newGuid = ObjectMgr::GetPlayerGUIDByName(customizeInfo->CharName); if (!newGuid.IsEmpty()) { if (newGuid != customizeInfo->CharGUID) @@ -1535,7 +1538,7 @@ void WorldSession::HandleCharCustomizeCallback(PreparedQueryResult result, World CharacterDatabase.CommitTransaction(trans); - sWorld->UpdateCharacterNameData(customizeInfo->CharGUID, customizeInfo->CharName, customizeInfo->SexID); + sWorld->UpdateCharacterInfo(customizeInfo->CharGUID, customizeInfo->CharName, customizeInfo->SexID); SendCharCustomize(RESPONSE_SUCCESS, customizeInfo); @@ -1694,16 +1697,16 @@ void WorldSession::HandleCharRaceOrFactionChangeCallback(PreparedQueryResult res } // get the players old (at this moment current) race - CharacterNameData const* nameData = sWorld->GetCharacterNameData(factionChangeInfo->Guid); - if (!nameData) + CharacterInfo const* characterInfo = sWorld->GetCharacterInfo(factionChangeInfo->Guid); + if (!characterInfo) { SendCharFactionChange(CHAR_CREATE_ERROR, factionChangeInfo); return; } - uint8 oldRace = nameData->m_race; - uint8 playerClass = nameData->m_class; - uint8 level = nameData->m_level; + uint8 oldRace = characterInfo->Race; + uint8 playerClass = characterInfo->Class; + uint8 level = characterInfo->Level; if (!sObjectMgr->GetPlayerInfo(factionChangeInfo->RaceID, playerClass)) { @@ -1769,7 +1772,7 @@ void WorldSession::HandleCharRaceOrFactionChangeCallback(PreparedQueryResult res } // character with this name already exist - ObjectGuid newGuid = sObjectMgr->GetPlayerGUIDByName(factionChangeInfo->Name); + ObjectGuid newGuid = ObjectMgr::GetPlayerGUIDByName(factionChangeInfo->Name); if (!newGuid.IsEmpty()) { if (newGuid != factionChangeInfo->Guid) @@ -1872,7 +1875,7 @@ void WorldSession::HandleCharRaceOrFactionChangeCallback(PreparedQueryResult res trans->Append(stmt); } - sWorld->UpdateCharacterNameData(factionChangeInfo->Guid, factionChangeInfo->Name, factionChangeInfo->SexID, factionChangeInfo->RaceID); + sWorld->UpdateCharacterInfo(factionChangeInfo->Guid, factionChangeInfo->Name, factionChangeInfo->SexID, factionChangeInfo->RaceID); if (oldRace != factionChangeInfo->RaceID) { @@ -2477,25 +2480,7 @@ void WorldSession::HandleCharUndeleteCallback(PreparedQueryResult result, WorldP stmt->setUInt32(0, GetBattlenetAccountId()); LoginDatabase.Execute(stmt); - stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHARACTER_NAME_DATA); - stmt->setUInt64(0, undeleteInfo->CharacterGuid.GetCounter()); - - _charUndeleteCallback.FreeResult(); - _charUndeleteCallback.SetFutureResult(CharacterDatabase.AsyncQuery(stmt)); - _charUndeleteCallback.NextStage(); - break; - } - case 5: - { - if (!result) - { - SendUndeleteCharacterResponse(CHARACTER_UNDELETE_RESULT_ERROR_UNKNOWN, undeleteInfo); - _charUndeleteCallback.Reset(); - return; - } - - Field* fields = result->Fetch(); - sWorld->AddCharacterNameData(undeleteInfo->CharacterGuid, undeleteInfo->Name, fields[2].GetUInt8(), fields[0].GetUInt8(), fields[1].GetUInt8(), fields[3].GetUInt8()); + sWorld->UpdateCharacterInfoDeleted(undeleteInfo->CharacterGuid, false, &undeleteInfo->Name); SendUndeleteCharacterResponse(CHARACTER_UNDELETE_RESULT_OK, undeleteInfo); _charUndeleteCallback.Reset(); diff --git a/src/server/game/Handlers/GroupHandler.cpp b/src/server/game/Handlers/GroupHandler.cpp index c5207941301..46ff540ef04 100644 --- a/src/server/game/Handlers/GroupHandler.cpp +++ b/src/server/game/Handlers/GroupHandler.cpp @@ -834,7 +834,7 @@ void WorldSession::HandleGroupChangeSubGroupOpcode(WorldPacket& recvData) else { CharacterDatabase.EscapeString(name); - guid = sObjectMgr->GetPlayerGUIDByName(name.c_str()); + guid = ObjectMgr::GetPlayerGUIDByName(name.c_str()); } group->ChangeMembersGroup(guid, groupNr); diff --git a/src/server/game/Handlers/MailHandler.cpp b/src/server/game/Handlers/MailHandler.cpp index 44c51800c57..69ffef3cdb1 100644 --- a/src/server/game/Handlers/MailHandler.cpp +++ b/src/server/game/Handlers/MailHandler.cpp @@ -154,7 +154,7 @@ void WorldSession::HandleSendMail(WorldPacket& recvData) ObjectGuid receiverGuid; if (normalizePlayerName(receiverName)) - receiverGuid = sObjectMgr->GetPlayerGUIDByName(receiverName); + receiverGuid = ObjectMgr::GetPlayerGUIDByName(receiverName); if (!receiverGuid) { @@ -212,7 +212,7 @@ void WorldSession::HandleSendMail(WorldPacket& recvData) } else { - receiverTeam = sObjectMgr->GetPlayerTeamByGUID(receiverGuid); + receiverTeam = ObjectMgr::GetPlayerTeamByGUID(receiverGuid); PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_MAIL_COUNT); stmt->setUInt64(0, receiverGuid.GetCounter()); @@ -234,7 +234,7 @@ void WorldSession::HandleSendMail(WorldPacket& recvData) receiverLevel = fields[0].GetUInt8(); } - receiverAccountId = sObjectMgr->GetPlayerAccountIdByGUID(receiverGuid); + receiverAccountId = ObjectMgr::GetPlayerAccountIdByGUID(receiverGuid); receiverBnetAccountId = Battlenet::AccountMgr::GetIdByGameAccount(receiverAccountId); } @@ -569,16 +569,16 @@ void WorldSession::HandleMailTakeItem(WorldPacket& recvData) else { // can be calculated early - sender_accId = sObjectMgr->GetPlayerAccountIdByGUID(sender_guid); + sender_accId = ObjectMgr::GetPlayerAccountIdByGUID(sender_guid); - if (!sObjectMgr->GetPlayerNameByGUID(sender_guid, sender_name)) + if (!ObjectMgr::GetPlayerNameByGUID(sender_guid, sender_name)) sender_name = sObjectMgr->GetTrinityStringForDBCLocale(LANG_UNKNOWN); } sLog->outCommand(GetAccountId(), "GM %s (Account: %u) receiver mail item: %s (Entry: %u Count: %u) and send COD money: " UI64FMTD " to player: %s (Account: %u)", GetPlayerName().c_str(), GetAccountId(), it->GetTemplate()->Name1.c_str(), it->GetEntry(), it->GetCount(), m->COD, sender_name.c_str(), sender_accId); } else if (!receiver) - sender_accId = sObjectMgr->GetPlayerAccountIdByGUID(sender_guid); + sender_accId = ObjectMgr::GetPlayerAccountIdByGUID(sender_guid); // check player existence if (receiver || sender_accId) diff --git a/src/server/game/Handlers/PetitionsHandler.cpp b/src/server/game/Handlers/PetitionsHandler.cpp index 93187b6bb2f..1326a6eeba2 100644 --- a/src/server/game/Handlers/PetitionsHandler.cpp +++ b/src/server/game/Handlers/PetitionsHandler.cpp @@ -480,7 +480,7 @@ void WorldSession::HandlePetitionSignOpcode(WorldPacket& recvData) return; // not let enemies sign guild charter - if (!sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_GUILD) && GetPlayer()->GetTeam() != sObjectMgr->GetPlayerTeamByGUID(ownerGuid)) + if (!sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_GUILD) && GetPlayer()->GetTeam() != ObjectMgr::GetPlayerTeamByGUID(ownerGuid)) { if (type != GUILD_CHARTER_TYPE) SendArenaTeamCommandResult(ERR_ARENA_TEAM_INVITE_SS, "", "", ERR_ARENA_TEAM_NOT_ALLIED); diff --git a/src/server/game/Handlers/QueryHandler.cpp b/src/server/game/Handlers/QueryHandler.cpp index 1f88585b5ae..7be46b4723b 100644 --- a/src/server/game/Handlers/QueryHandler.cpp +++ b/src/server/game/Handlers/QueryHandler.cpp @@ -36,35 +36,33 @@ void WorldSession::SendNameQueryOpcode(ObjectGuid guid) { Player* player = ObjectAccessor::FindConnectedPlayer(guid); - CharacterNameData const* nameData = sWorld->GetCharacterNameData(guid); + CharacterInfo const* characterInfo = sWorld->GetCharacterInfo(guid); WorldPackets::Character::PlayerNameResponse response; response.Player = guid; - if (nameData) + if (characterInfo) { - uint32 accountId = player ? player->GetSession()->GetAccountId() : sObjectMgr->GetPlayerAccountIdByGUID(guid); + uint32 accountId = player ? player->GetSession()->GetAccountId() : ObjectMgr::GetPlayerAccountIdByGUID(guid); uint32 bnetAccountId = player ? player->GetSession()->GetBattlenetAccountId() : Battlenet::AccountMgr::GetIdByGameAccount(accountId); - response.Result = 0; // name known - response.Data.IsDeleted = false; // TODO: send deletes as well - response.Data.AccountID = ObjectGuid::Create<HighGuid::WowAccount>(accountId); + response.Result = RESPONSE_SUCCESS; // name known + response.Data.IsDeleted = characterInfo->IsDeleted; + response.Data.AccountID = ObjectGuid::Create<HighGuid::WowAccount>(accountId); response.Data.BnetAccountID = ObjectGuid::Create<HighGuid::BNetAccount>(bnetAccountId); - response.Data.Name = nameData->m_name; + response.Data.Name = characterInfo->Name; response.Data.VirtualRealmAddress = GetVirtualRealmAddress(); - response.Data.Race = nameData->m_race; - response.Data.Sex = nameData->m_gender; - response.Data.ClassID = nameData->m_class; - response.Data.Level = nameData->m_level; + response.Data.Race = characterInfo->Race; + response.Data.Sex = characterInfo->Sex; + response.Data.ClassID = characterInfo->Class; + response.Data.Level = characterInfo->Level; if (DeclinedName const* names = (player ? player->GetDeclinedNames() : nullptr)) - for (int i = 0; i < MAX_DECLINED_NAME_CASES; ++i) + for (uint8 i = 0; i < MAX_DECLINED_NAME_CASES; ++i) response.Data.DeclinedNames.name[i] = names->name[i]; } else - { - response.Result = 1; // name unknown - } + response.Result = RESPONSE_FAILURE; // name unknown SendPacket(response.Write()); } diff --git a/src/server/game/Mails/Mail.cpp b/src/server/game/Mails/Mail.cpp index 3051729d49a..99ee9879930 100644 --- a/src/server/game/Mails/Mail.cpp +++ b/src/server/game/Mails/Mail.cpp @@ -136,7 +136,7 @@ void MailDraft::SendReturnToSender(uint32 sender_acc, ObjectGuid::LowType sender uint32 rc_account = 0; if (!receiver) - rc_account = sObjectMgr->GetPlayerAccountIdByGUID(receiverGuid); + rc_account = ObjectMgr::GetPlayerAccountIdByGUID(receiverGuid); if (!receiver && !rc_account) // sender not exist { diff --git a/src/server/game/Tickets/TicketMgr.cpp b/src/server/game/Tickets/TicketMgr.cpp index 7c74c4cc7b0..5c1a144efe8 100644 --- a/src/server/game/Tickets/TicketMgr.cpp +++ b/src/server/game/Tickets/TicketMgr.cpp @@ -175,7 +175,7 @@ std::string GmTicket::FormatMessageString(ChatHandler& handler, bool detailed) c ss << handler.PGetParseString(LANG_COMMAND_TICKETLISTAGE, (secsToTimeString(curTime - _lastModifiedTime, true, false)).c_str()); std::string name; - if (sObjectMgr->GetPlayerNameByGUID(_assignedTo, name)) + if (ObjectMgr::GetPlayerNameByGUID(_assignedTo, name)) ss << handler.PGetParseString(LANG_COMMAND_TICKETLISTASSIGNEDTO, name.c_str()); if (detailed) diff --git a/src/server/game/Tickets/TicketMgr.h b/src/server/game/Tickets/TicketMgr.h index a9b32cf35c3..5c31906c5a8 100644 --- a/src/server/game/Tickets/TicketMgr.h +++ b/src/server/game/Tickets/TicketMgr.h @@ -102,7 +102,7 @@ public: std::string name; // save queries if ticket is not assigned if (!_assignedTo.IsEmpty()) - sObjectMgr->GetPlayerNameByGUID(_assignedTo, name); + ObjectMgr::GetPlayerNameByGUID(_assignedTo, name); return name; } diff --git a/src/server/game/Tools/PlayerDump.cpp b/src/server/game/Tools/PlayerDump.cpp index 79d96200d80..6f42d41c694 100644 --- a/src/server/game/Tools/PlayerDump.cpp +++ b/src/server/game/Tools/PlayerDump.cpp @@ -666,7 +666,7 @@ DumpReturn PlayerDumpReader::LoadDump(std::string const& file, uint32 account, s CharacterDatabase.CommitTransaction(trans); // in case of name conflict player has to rename at login anyway - sWorld->AddCharacterNameData(ObjectGuid::Create<HighGuid::Player>(guid), name, gender, race, playerClass, level); + sWorld->AddCharacterInfo(ObjectGuid::Create<HighGuid::Player>(guid), name, gender, race, playerClass, level, false); sObjectMgr->GetGenerator<HighGuid::Item>()->Set(sObjectMgr->GetGenerator<HighGuid::Item>()->GetNextAfterMaxUsed() + items.size()); sObjectMgr->_mailId += mails.size(); diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index 8bc360abf4d..098181c76a1 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -1917,7 +1917,7 @@ void World::SetInitialWorldSettings() TC_LOG_INFO("server.loading", "Calculate next currency reset time..."); InitCurrencyResetTime(); - LoadCharacterNameData(); + LoadCharacterInfoStore(); TC_LOG_INFO("misc", "Loading hotfix info..."); sObjectMgr->LoadHotfixData(); @@ -2510,7 +2510,7 @@ bool World::RemoveBanAccount(BanMode mode, std::string const& nameOrIP) if (mode == BAN_ACCOUNT) account = AccountMgr::GetId(nameOrIP); else if (mode == BAN_CHARACTER) - account = sObjectMgr->GetPlayerAccountIdByPlayerName(nameOrIP); + account = ObjectMgr::GetPlayerAccountIdByPlayerName(nameOrIP); if (!account) return false; @@ -2534,7 +2534,7 @@ BanReturn World::BanCharacter(std::string const& name, std::string const& durati /// Pick a player to ban if not online if (!pBanned) { - guid = sObjectMgr->GetPlayerGUIDByName(name); + guid = ObjectMgr::GetPlayerGUIDByName(name); if (guid.IsEmpty()) return BAN_NOTFOUND; // Nobody to ban } @@ -2568,7 +2568,7 @@ bool World::RemoveBanCharacter(std::string const& name) /// Pick a player to ban if not online if (!pBanned) { - guid = sObjectMgr->GetPlayerGUIDByName(name); + guid = ObjectMgr::GetPlayerGUIDByName(name); if (guid.IsEmpty()) return false; // Nobody to ban } @@ -2836,9 +2836,9 @@ void World::_UpdateRealmCharCount(PreparedQueryResult resultCharCount) void World::InitWeeklyQuestResetTime() { - time_t wstime = uint64(sWorld->getWorldState(WS_WEEKLY_QUEST_RESET_TIME)); + time_t wstime = sWorld->getWorldState(WS_WEEKLY_QUEST_RESET_TIME); time_t curtime = time(NULL); - m_NextWeeklyQuestReset = wstime < curtime ? curtime : time_t(wstime); + m_NextWeeklyQuestReset = wstime < curtime ? curtime : wstime; } void World::InitDailyQuestResetTime() @@ -2878,16 +2878,16 @@ void World::InitDailyQuestResetTime() void World::InitMonthlyQuestResetTime() { - time_t wstime = uint64(sWorld->getWorldState(WS_MONTHLY_QUEST_RESET_TIME)); + time_t wstime = sWorld->getWorldState(WS_MONTHLY_QUEST_RESET_TIME); time_t curtime = time(NULL); - m_NextMonthlyQuestReset = wstime < curtime ? curtime : time_t(wstime); + m_NextMonthlyQuestReset = wstime < curtime ? curtime : wstime; } void World::InitRandomBGResetTime() { - time_t bgtime = uint64(sWorld->getWorldState(WS_BG_DAILY_RESET_TIME)); + time_t bgtime = sWorld->getWorldState(WS_BG_DAILY_RESET_TIME); if (!bgtime) - m_NextRandomBGReset = time_t(time(NULL)); // game time not yet init + m_NextRandomBGReset = time(NULL); // game time not yet init // generate time by config time_t curTime = time(NULL); @@ -2913,9 +2913,9 @@ void World::InitRandomBGResetTime() void World::InitGuildResetTime() { - time_t gtime = uint64(getWorldState(WS_GUILD_DAILY_RESET_TIME)); + time_t gtime = getWorldState(WS_GUILD_DAILY_RESET_TIME); if (!gtime) - m_NextGuildReset = time_t(time(NULL)); // game time not yet init + m_NextGuildReset = time(NULL); // game time not yet init // generate time by config time_t curTime = time(NULL); @@ -2941,9 +2941,9 @@ void World::InitGuildResetTime() void World::InitCurrencyResetTime() { - time_t currencytime = uint64(sWorld->getWorldState(WS_CURRENCY_RESET_TIME)); + time_t currencytime = sWorld->getWorldState(WS_CURRENCY_RESET_TIME); if (!currencytime) - m_NextCurrencyReset = time_t(time(NULL)); // game time not yet init + m_NextCurrencyReset = time(NULL); // game time not yet init // generate time by config time_t curTime = time(NULL); @@ -3227,95 +3227,108 @@ void World::ProcessQueryCallbacks() } /** -* @brief Loads several pieces of information on server startup with the GUID -* There is no further database query necessary. -* These are a number of methods that work into the calling function. -* -* @param guid Requires a guid to call -* @return Name, Gender, Race, Class and Level of player character -* Example Usage: -* @code -* CharacterNameData const* nameData = sWorld->GetCharacterNameData(GUID); -* if (!nameData) -* return; -* -* std::string playerName = nameData->m_name; -* uint8 playerGender = nameData->m_gender; -* uint8 playerRace = nameData->m_race; -* uint8 playerClass = nameData->m_class; -* uint8 playerLevel = nameData->m_level; -* @endcode -**/ - -void World::LoadCharacterNameData() -{ - TC_LOG_INFO("server.loading", "Loading character name data"); - - QueryResult result = CharacterDatabase.Query("SELECT guid, name, race, gender, class, level FROM characters WHERE deleteDate IS NULL"); + * @brief Loads several pieces of information on server startup with the GUID + * There is no further database query necessary. + * These are a number of methods that work into the calling function. + * + * @param guid Requires a guid to call + * @return Name, Sex, Race, Class and Level of player character + * Example Usage: + * @code + * CharacterInfo const* characterInfo = sWorld->GetCharacterInfo(GUID); + * if (!nameData) + * return; + * + * std::string playerName = characterInfo->Name; + * uint8 playerGender = characterInfo->Sex; + * uint8 playerRace = characterInfo->Race; + * uint8 playerClass = characterInfo->Class; + * uint8 playerLevel = characterInfo->Level; + * @endcode + */ + +CharacterInfo const* World::GetCharacterInfo(ObjectGuid const& guid) const +{ + CharacterInfoContainer::const_iterator itr = _characterInfoStore.find(guid); + if (itr != _characterInfoStore.end()) + return &itr->second; + + return nullptr; +} + +void World::LoadCharacterInfoStore() +{ + TC_LOG_INFO("server.loading", "Loading character info store"); + + _characterInfoStore.clear(); + + QueryResult result = CharacterDatabase.Query("SELECT guid, name, race, gender, class, level, deleteDate FROM characters"); if (!result) { TC_LOG_INFO("server.loading", "No character name data loaded, empty query"); return; } - uint32 count = 0; - do { Field* fields = result->Fetch(); - AddCharacterNameData(ObjectGuid::Create<HighGuid::Player>(fields[0].GetUInt64()), fields[1].GetString(), - fields[3].GetUInt8() /*gender*/, fields[2].GetUInt8() /*race*/, fields[4].GetUInt8() /*class*/, fields[5].GetUInt8() /*level*/); - ++count; - } while (result->NextRow()); + AddCharacterInfo(ObjectGuid::Create<HighGuid::Player>(fields[0].GetUInt64()), fields[1].GetString(), + fields[3].GetUInt8() /*gender*/, fields[2].GetUInt8() /*race*/, fields[4].GetUInt8() /*class*/, fields[5].GetUInt8() /*level*/, fields[6].GetUInt32() != 0); + } + while (result->NextRow()); - TC_LOG_INFO("server.loading", "Loaded name data for %u characters", count); + TC_LOG_INFO("server.loading", "Loaded character infos for " SZFMTD " characters", _characterInfoStore.size()); } -void World::AddCharacterNameData(ObjectGuid guid, std::string const& name, uint8 gender, uint8 race, uint8 playerClass, uint8 level) +void World::AddCharacterInfo(ObjectGuid const& guid, std::string const& name, uint8 gender, uint8 race, uint8 playerClass, uint8 level, bool isDeleted) { - CharacterNameData& data = _characterNameDataMap[guid]; - data.m_name = name; - data.m_race = race; - data.m_gender = gender; - data.m_class = playerClass; - data.m_level = level; + CharacterInfo& data = _characterInfoStore[guid]; + data.Name = name; + data.Race = race; + data.Sex = gender; + data.Class = playerClass; + data.Level = level; + data.IsDeleted = isDeleted; } -void World::UpdateCharacterNameData(ObjectGuid guid, std::string const& name, uint8 gender /*= GENDER_NONE*/, uint8 race /*= RACE_NONE*/) +void World::UpdateCharacterInfo(ObjectGuid const& guid, std::string const& name, uint8 gender /*= GENDER_NONE*/, uint8 race /*= RACE_NONE*/) { - std::map<ObjectGuid, CharacterNameData>::iterator itr = _characterNameDataMap.find(guid); - if (itr == _characterNameDataMap.end()) + CharacterInfoContainer::iterator itr = _characterInfoStore.find(guid); + if (itr == _characterInfoStore.end()) return; - itr->second.m_name = name; + itr->second.Name = name; if (gender != GENDER_NONE) - itr->second.m_gender = gender; + itr->second.Sex = gender; if (race != RACE_NONE) - itr->second.m_race = race; + itr->second.Race = race; WorldPacket data(SMSG_INVALIDATE_PLAYER, 8); data << guid; SendGlobalMessage(&data); } -void World::UpdateCharacterNameDataLevel(ObjectGuid guid, uint8 level) +void World::UpdateCharacterInfoLevel(ObjectGuid const& guid, uint8 level) { - std::map<ObjectGuid, CharacterNameData>::iterator itr = _characterNameDataMap.find(guid); - if (itr == _characterNameDataMap.end()) + CharacterInfoContainer::iterator itr = _characterInfoStore.find(guid); + if (itr == _characterInfoStore.end()) return; - itr->second.m_level = level; + itr->second.Level = level; } -CharacterNameData const* World::GetCharacterNameData(ObjectGuid guid) const +void World::UpdateCharacterInfoDeleted(ObjectGuid const& guid, bool deleted, std::string const* name /*= nullptr*/) { - std::map<ObjectGuid, CharacterNameData>::const_iterator itr = _characterNameDataMap.find(guid); - if (itr != _characterNameDataMap.end()) - return &itr->second; - else - return NULL; + CharacterInfoContainer::iterator itr = _characterInfoStore.find(guid); + if (itr == _characterInfoStore.end()) + return; + + itr->second.IsDeleted = deleted; + + if (name) + itr->second.Name = *name; } void World::UpdatePhaseDefinitions() diff --git a/src/server/game/World/World.h b/src/server/game/World/World.h index 7bf8f5b70e7..79723c540ab 100644 --- a/src/server/game/World/World.h +++ b/src/server/game/World/World.h @@ -543,13 +543,14 @@ private: typedef std::unordered_map<uint32, WorldSession*> SessionMap; -struct CharacterNameData +struct CharacterInfo { - std::string m_name; - uint8 m_class; - uint8 m_race; - uint8 m_gender; - uint8 m_level; + std::string Name; + uint8 Class; + uint8 Race; + uint8 Sex; + uint8 Level; + bool IsDeleted; }; /// The World @@ -768,12 +769,13 @@ class World void UpdateAreaDependentAuras(); - CharacterNameData const* GetCharacterNameData(ObjectGuid guid) const; - void AddCharacterNameData(ObjectGuid guid, std::string const& name, uint8 gender, uint8 race, uint8 playerClass, uint8 level); - void UpdateCharacterNameData(ObjectGuid guid, std::string const& name, uint8 gender = GENDER_NONE, uint8 race = RACE_NONE); - void UpdateCharacterNameDataLevel(ObjectGuid guid, uint8 level); - void DeleteCharacterNameData(ObjectGuid guid) { _characterNameDataMap.erase(guid); } - bool HasCharacterNameData(ObjectGuid guid) { return _characterNameDataMap.find(guid) != _characterNameDataMap.end(); } + CharacterInfo const* GetCharacterInfo(ObjectGuid const& guid) const; + void AddCharacterInfo(ObjectGuid const& guid, std::string const& name, uint8 gender, uint8 race, uint8 playerClass, uint8 level, bool isDeleted); + void DeleteCharacterInfo(ObjectGuid const& guid) { _characterInfoStore.erase(guid); } + bool HasCharacterInfo(ObjectGuid const& guid) { return _characterInfoStore.find(guid) != _characterInfoStore.end(); } + void UpdateCharacterInfo(ObjectGuid const& guid, std::string const& name, uint8 gender = GENDER_NONE, uint8 race = RACE_NONE); + void UpdateCharacterInfoLevel(ObjectGuid const& guid, uint8 level); + void UpdateCharacterInfoDeleted(ObjectGuid const& guid, bool deleted, std::string const* name = nullptr); uint32 GetCleaningFlags() const { return m_CleaningFlags; } void SetCleaningFlags(uint32 flags) { m_CleaningFlags = flags; } @@ -881,8 +883,9 @@ class World typedef std::map<uint8, uint8> AutobroadcastsWeightMap; AutobroadcastsWeightMap m_AutobroadcastsWeights; - std::map<ObjectGuid, CharacterNameData> _characterNameDataMap; - void LoadCharacterNameData(); + typedef std::map<ObjectGuid, CharacterInfo> CharacterInfoContainer; + CharacterInfoContainer _characterInfoStore; + void LoadCharacterInfoStore(); void ProcessQueryCallbacks(); std::deque<PreparedQueryResultFuture> m_realmCharCallbacks; diff --git a/src/server/scripts/Commands/cs_arena.cpp b/src/server/scripts/Commands/cs_arena.cpp index 32a4c3ac9b4..29b874d83c4 100644 --- a/src/server/scripts/Commands/cs_arena.cpp +++ b/src/server/scripts/Commands/cs_arena.cpp @@ -275,14 +275,14 @@ public: arena->SetCaptain(targetGuid); - CharacterNameData const* oldCaptainNameData = sWorld->GetCharacterNameData(arena->GetCaptain()); - if (!oldCaptainNameData) + std::string oldCaptainName; + if (!ObjectMgr::GetPlayerNameByGUID(arena->GetCaptain(), oldCaptainName)) { handler->SetSentErrorMessage(true); return false; } - handler->PSendSysMessage(LANG_ARENA_CAPTAIN, arena->GetName().c_str(), arena->GetId(), oldCaptainNameData->m_name.c_str(), target->GetName().c_str()); + handler->PSendSysMessage(LANG_ARENA_CAPTAIN, arena->GetName().c_str(), arena->GetId(), oldCaptainName.c_str(), target->GetName().c_str()); if (handler->GetSession()) TC_LOG_DEBUG("bg.arena", "GameMaster: %s [%s] promoted player: %s [%s] to leader of arena team \"%s\"[Id: %u]", handler->GetSession()->GetPlayer()->GetName().c_str(), handler->GetSession()->GetPlayer()->GetGUID().ToString().c_str(), diff --git a/src/server/scripts/Commands/cs_ban.cpp b/src/server/scripts/Commands/cs_ban.cpp index f3766939c71..c3e32e007af 100644 --- a/src/server/scripts/Commands/cs_ban.cpp +++ b/src/server/scripts/Commands/cs_ban.cpp @@ -305,7 +305,7 @@ public: if (!target) { - targetGuid = sObjectMgr->GetPlayerGUIDByName(name); + targetGuid = ObjectMgr::GetPlayerGUIDByName(name); if (targetGuid.IsEmpty()) { handler->PSendSysMessage(LANG_BANINFO_NOCHARACTER); diff --git a/src/server/scripts/Commands/cs_character.cpp b/src/server/scripts/Commands/cs_character.cpp index 7bd2775e6c6..f066613b905 100644 --- a/src/server/scripts/Commands/cs_character.cpp +++ b/src/server/scripts/Commands/cs_character.cpp @@ -211,7 +211,7 @@ public: return; } - if (!sObjectMgr->GetPlayerGUIDByName(delInfo.name).IsEmpty()) + if (!ObjectMgr::GetPlayerGUIDByName(delInfo.name).IsEmpty()) { handler->PSendSysMessage(LANG_CHARACTER_DELETED_SKIP_NAME, delInfo.name.c_str(), delInfo.guid.ToString().c_str(), delInfo.accountId); return; @@ -223,10 +223,7 @@ public: stmt->setUInt64(2, delInfo.guid.GetCounter()); CharacterDatabase.Execute(stmt); - stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHARACTER_NAME_DATA); - stmt->setUInt64(0, delInfo.guid.GetCounter()); - if (PreparedQueryResult result = CharacterDatabase.Query(stmt)) - sWorld->AddCharacterNameData(delInfo.guid, delInfo.name, (*result)[2].GetUInt8(), (*result)[0].GetUInt8(), (*result)[1].GetUInt8(), (*result)[3].GetUInt8()); + sWorld->UpdateCharacterInfoDeleted(delInfo.guid, false, &delInfo.name); } static void HandleCharacterLevel(Player* player, ObjectGuid playerGuid, uint32 oldLevel, uint32 newLevel, ChatHandler* handler) @@ -329,7 +326,7 @@ public: if (handler->HasLowerSecurity(NULL, targetGuid)) return false; - sObjectMgr->GetPlayerNameByGUID(targetGuid, playerOldName); + ObjectMgr::GetPlayerNameByGUID(targetGuid, playerOldName); } if (!normalizePlayerName(newName)) @@ -386,14 +383,14 @@ public: CharacterDatabase.Execute(stmt); } - sWorld->UpdateCharacterNameData(targetGuid, newName); + sWorld->UpdateCharacterInfo(targetGuid, newName); handler->PSendSysMessage(LANG_RENAME_PLAYER_WITH_NEW_NAME, playerOldName.c_str(), newName.c_str()); if (WorldSession* session = handler->GetSession()) { if (Player* player = session->GetPlayer()) - sLog->outCommand(session->GetAccountId(), "GM %s (Account: %u) forced rename %s to player %s (Account: %u)", player->GetName().c_str(), session->GetAccountId(), newName.c_str(), playerOldName.c_str(), sObjectMgr->GetPlayerAccountIdByGUID(targetGuid)); + sLog->outCommand(session->GetAccountId(), "GM %s (Account: %u) forced rename %s to player %s (Account: %u)", player->GetName().c_str(), session->GetAccountId(), newName.c_str(), playerOldName.c_str(), ObjectMgr::GetPlayerAccountIdByGUID(targetGuid)); } else sLog->outCommand(0, "CONSOLE forced rename '%s' to '%s' (%s)", playerOldName.c_str(), newName.c_str(), targetGuid.ToString().c_str()); @@ -785,14 +782,14 @@ public: } else { - characterGuid = sObjectMgr->GetPlayerGUIDByName(characterName); + characterGuid = ObjectMgr::GetPlayerGUIDByName(characterName); if (!characterGuid) { handler->PSendSysMessage(LANG_NO_PLAYER, characterName.c_str()); handler->SetSentErrorMessage(true); return false; } - accountId = sObjectMgr->GetPlayerAccountIdByGUID(characterGuid); + accountId = ObjectMgr::GetPlayerAccountIdByGUID(characterGuid); } std::string accountName; @@ -921,7 +918,7 @@ public: return false; } - if (sObjectMgr->GetPlayerAccountIdByGUID(ObjectGuid::Create<HighGuid::Player>(guid))) + if (ObjectMgr::GetPlayerAccountIdByGUID(ObjectGuid::Create<HighGuid::Player>(guid))) { handler->PSendSysMessage(LANG_CHARACTER_GUID_IN_USE, guid); handler->SetSentErrorMessage(true); @@ -980,10 +977,10 @@ public: return false; } - guid = sObjectMgr->GetPlayerGUIDByName(name); + guid = ObjectMgr::GetPlayerGUIDByName(name); } - if (!sObjectMgr->GetPlayerAccountIdByGUID(guid)) + if (!ObjectMgr::GetPlayerAccountIdByGUID(guid)) { handler->PSendSysMessage(LANG_PLAYER_NOT_FOUND); handler->SetSentErrorMessage(true); diff --git a/src/server/scripts/Commands/cs_group.cpp b/src/server/scripts/Commands/cs_group.cpp index 99a0766f728..ea9849ce074 100644 --- a/src/server/scripts/Commands/cs_group.cpp +++ b/src/server/scripts/Commands/cs_group.cpp @@ -272,7 +272,7 @@ public: ObjectGuid parseGUID = ObjectGuid::Create<HighGuid::Player>(strtoull(args, nullptr, 10)); // ... and try to extract a player out of it. - if (sObjectMgr->GetPlayerNameByGUID(parseGUID, nameTarget)) + if (ObjectMgr::GetPlayerNameByGUID(parseGUID, nameTarget)) { playerTarget = ObjectAccessor::FindPlayer(parseGUID); guidTarget = parseGUID; diff --git a/src/server/scripts/Commands/cs_guild.cpp b/src/server/scripts/Commands/cs_guild.cpp index 977e6ceb1e3..f7a614b171b 100644 --- a/src/server/scripts/Commands/cs_guild.cpp +++ b/src/server/scripts/Commands/cs_guild.cpp @@ -268,7 +268,7 @@ public: handler->PSendSysMessage(LANG_GUILD_INFO_NAME, guild->GetName().c_str(), guild->GetId()); // Guild Id + Name std::string guildMasterName; - if (sObjectMgr->GetPlayerNameByGUID(guild->GetLeaderGUID(), guildMasterName)) + if (ObjectMgr::GetPlayerNameByGUID(guild->GetLeaderGUID(), guildMasterName)) handler->PSendSysMessage(LANG_GUILD_INFO_GUILD_MASTER, guildMasterName.c_str(), guild->GetLeaderGUID().ToString().c_str()); // Guild Master // Format creation date diff --git a/src/server/scripts/Commands/cs_list.cpp b/src/server/scripts/Commands/cs_list.cpp index deb714d1ef8..46929e3967c 100644 --- a/src/server/scripts/Commands/cs_list.cpp +++ b/src/server/scripts/Commands/cs_list.cpp @@ -478,7 +478,7 @@ public: ObjectGuid parseGUID = ObjectGuid::Create<HighGuid::Player>(strtoull(args, nullptr, 10)); - if (sObjectMgr->GetPlayerNameByGUID(parseGUID, targetName)) + if (ObjectMgr::GetPlayerNameByGUID(parseGUID, targetName)) { target = ObjectAccessor::FindPlayer(parseGUID); targetGuid = parseGUID; diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp index 0ebf05f74ad..f202fce6fae 100644 --- a/src/server/scripts/Commands/cs_misc.cpp +++ b/src/server/scripts/Commands/cs_misc.cpp @@ -1423,7 +1423,7 @@ public: ObjectGuid parseGUID = ObjectGuid::Create<HighGuid::Player>(strtoull(args, nullptr, 10)); // ... and make sure we get a target, somehow. - if (sObjectMgr->GetPlayerNameByGUID(parseGUID, targetName)) + if (ObjectMgr::GetPlayerNameByGUID(parseGUID, targetName)) { target = ObjectAccessor::FindPlayer(parseGUID); targetGuid = parseGUID; @@ -1836,7 +1836,7 @@ public: if (!handler->extractPlayerTarget(nameStr, &target, &targetGuid, &targetName)) return false; - uint32 accountId = target ? target->GetSession()->GetAccountId() : sObjectMgr->GetPlayerAccountIdByGUID(targetGuid); + uint32 accountId = target ? target->GetSession()->GetAccountId() : ObjectMgr::GetPlayerAccountIdByGUID(targetGuid); // find only player from same account if any if (!target) @@ -1905,7 +1905,7 @@ public: if (!handler->extractPlayerTarget((char*)args, &target, &targetGuid, &targetName)) return false; - uint32 accountId = target ? target->GetSession()->GetAccountId() : sObjectMgr->GetPlayerAccountIdByGUID(targetGuid); + uint32 accountId = target ? target->GetSession()->GetAccountId() : ObjectMgr::GetPlayerAccountIdByGUID(targetGuid); // find only player from same account if any if (!target) @@ -1979,7 +1979,7 @@ public: PreparedStatement *stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_ACCOUNT_MUTE_INFO); stmt->setUInt16(0, accountId); PreparedQueryResult result = LoginDatabase.Query(stmt); - + if (!result) { handler->PSendSysMessage(LANG_COMMAND_MUTEHISTORY_EMPTY, accountName); @@ -1990,16 +1990,16 @@ public: do { Field* fields = result->Fetch(); - + // we have to manually set the string for mutedate time_t sqlTime = fields[0].GetUInt32(); tm timeinfo; char buffer[80]; - + // set it to string localtime_r(&sqlTime, &timeinfo); strftime(buffer, sizeof(buffer),"%Y-%m-%d %I:%M%p", &timeinfo); - + handler->PSendSysMessage(LANG_COMMAND_MUTEHISTORY_OUTPUT, buffer, fields[1].GetUInt32(), fields[2].GetCString(), fields[3].GetCString()); } while (result->NextRow()); return true; @@ -2464,7 +2464,7 @@ public: if (targetName) { // Check for offline players - ObjectGuid guid = sObjectMgr->GetPlayerGUIDByName(name); + ObjectGuid guid = ObjectMgr::GetPlayerGUIDByName(name); if (guid.IsEmpty()) { handler->SendSysMessage(LANG_COMMAND_FREEZE_WRONG); diff --git a/src/server/scripts/Commands/cs_ticket.cpp b/src/server/scripts/Commands/cs_ticket.cpp index 5667145c266..3917368a3c3 100644 --- a/src/server/scripts/Commands/cs_ticket.cpp +++ b/src/server/scripts/Commands/cs_ticket.cpp @@ -95,8 +95,8 @@ public: return true; } - ObjectGuid targetGuid = sObjectMgr->GetPlayerGUIDByName(target); - uint32 accountId = sObjectMgr->GetPlayerAccountIdByGUID(targetGuid); + ObjectGuid targetGuid = ObjectMgr::GetPlayerGUIDByName(target); + uint32 accountId = ObjectMgr::GetPlayerAccountIdByGUID(targetGuid); // Target must exist and have administrative rights if (!AccountMgr::HasPermission(accountId, rbac::RBAC_PERM_COMMANDS_BE_ASSIGNED_TICKET, realmHandle.Index)) { @@ -375,7 +375,7 @@ public: else { ObjectGuid guid = ticket->GetAssignedToGUID(); - uint32 accountId = sObjectMgr->GetPlayerAccountIdByGUID(guid); + uint32 accountId = ObjectMgr::GetPlayerAccountIdByGUID(guid); security = AccountMgr::GetSecurity(accountId, realmHandle.Index); } @@ -436,7 +436,7 @@ public: if (Player* player = ObjectAccessor::FindPlayerByName(name)) guid = player->GetGUID(); else - guid = sObjectMgr->GetPlayerGUIDByName(name); + guid = ObjectMgr::GetPlayerGUIDByName(name); // Target must exist if (!guid) diff --git a/src/server/shared/Database/Implementation/CharacterDatabase.cpp b/src/server/shared/Database/Implementation/CharacterDatabase.cpp index 572230a6071..e91aa10c52d 100644 --- a/src/server/shared/Database/Implementation/CharacterDatabase.cpp +++ b/src/server/shared/Database/Implementation/CharacterDatabase.cpp @@ -62,10 +62,8 @@ void CharacterDatabaseConnection::DoPrepareStatements() "LEFT JOIN character_banned AS cb ON c.guid = cb.guid AND cb.active = 1 WHERE c.deleteInfos_Account = ? AND c.deleteInfos_Name IS NOT NULL", CONNECTION_ASYNC); PrepareStatement(CHAR_SEL_FREE_NAME, "SELECT name, at_login FROM characters WHERE guid = ? AND NOT EXISTS (SELECT NULL FROM characters WHERE name = ?)", CONNECTION_ASYNC); PrepareStatement(CHAR_SEL_GUID_RACE_ACC_BY_NAME, "SELECT guid, race, account FROM characters WHERE name = ?", CONNECTION_BOTH); - PrepareStatement(CHAR_SEL_CHAR_RACE, "SELECT race FROM characters WHERE guid = ?", CONNECTION_SYNCH); PrepareStatement(CHAR_SEL_CHAR_LEVEL, "SELECT level FROM characters WHERE guid = ?", CONNECTION_SYNCH); PrepareStatement(CHAR_SEL_CHAR_ZONE, "SELECT zone FROM characters WHERE guid = ?", CONNECTION_SYNCH); - PrepareStatement(CHAR_SEL_CHARACTER_NAME_DATA, "SELECT race, class, gender, level FROM characters WHERE guid = ?", CONNECTION_BOTH); PrepareStatement(CHAR_SEL_CHAR_POSITION_XYZ, "SELECT map, position_x, position_y, position_z FROM characters WHERE guid = ?", CONNECTION_SYNCH); PrepareStatement(CHAR_SEL_CHAR_POSITION, "SELECT position_x, position_y, position_z, orientation, map, taxi_path FROM characters WHERE guid = ?", CONNECTION_SYNCH); @@ -170,7 +168,6 @@ void CharacterDatabaseConnection::DoPrepareStatements() PrepareStatement(CHAR_DEL_ACCOUNT_INSTANCE_LOCK_TIMES, "DELETE FROM account_instance_times WHERE accountId = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_INS_ACCOUNT_INSTANCE_LOCK_TIMES, "INSERT INTO account_instance_times (accountId, instanceId, releaseTime) VALUES (?, ?, ?)", CONNECTION_ASYNC); PrepareStatement(CHAR_SEL_CHARACTER_NAME_CLASS, "SELECT name, class FROM characters WHERE guid = ?", CONNECTION_SYNCH); - PrepareStatement(CHAR_SEL_CHARACTER_NAME, "SELECT name FROM characters WHERE guid = ?", CONNECTION_SYNCH); PrepareStatement(CHAR_SEL_MATCH_MAKER_RATING, "SELECT matchMakerRating FROM character_arena_stats WHERE guid = ? AND slot = ?", CONNECTION_SYNCH); PrepareStatement(CHAR_SEL_CHARACTER_COUNT, "SELECT account, COUNT(guid) FROM characters WHERE account = ? GROUP BY account", CONNECTION_ASYNC); PrepareStatement(CHAR_UPD_NAME_BY_GUID, "UPDATE characters SET name = ? WHERE guid = ?", CONNECTION_ASYNC); diff --git a/src/server/shared/Database/Implementation/CharacterDatabase.h b/src/server/shared/Database/Implementation/CharacterDatabase.h index 72d103aa4f8..8755acaf302 100644 --- a/src/server/shared/Database/Implementation/CharacterDatabase.h +++ b/src/server/shared/Database/Implementation/CharacterDatabase.h @@ -67,10 +67,8 @@ enum CharacterDatabaseStatements CHAR_SEL_UNDELETE_ENUM_DECLINED_NAME, CHAR_SEL_FREE_NAME, CHAR_SEL_GUID_RACE_ACC_BY_NAME, - CHAR_SEL_CHAR_RACE, CHAR_SEL_CHAR_LEVEL, CHAR_SEL_CHAR_ZONE, - CHAR_SEL_CHARACTER_NAME_DATA, CHAR_SEL_CHAR_POSITION_XYZ, CHAR_SEL_CHAR_POSITION, @@ -161,7 +159,6 @@ enum CharacterDatabaseStatements CHAR_DEL_ACCOUNT_INSTANCE_LOCK_TIMES, CHAR_INS_ACCOUNT_INSTANCE_LOCK_TIMES, CHAR_SEL_CHARACTER_NAME_CLASS, - CHAR_SEL_CHARACTER_NAME, CHAR_SEL_MATCH_MAKER_RATING, CHAR_SEL_CHARACTER_COUNT, CHAR_UPD_NAME_BY_GUID, |