diff options
Diffstat (limited to 'src')
4 files changed, 13 insertions, 31 deletions
diff --git a/src/server/database/Database/Implementation/CharacterDatabase.cpp b/src/server/database/Database/Implementation/CharacterDatabase.cpp index 9a75a870c21..bb0e2bb09d4 100644 --- a/src/server/database/Database/Implementation/CharacterDatabase.cpp +++ b/src/server/database/Database/Implementation/CharacterDatabase.cpp @@ -157,11 +157,9 @@ void CharacterDatabaseConnection::DoPrepareStatements()      PrepareStatement(CHAR_DEL_GIFT, "DELETE FROM character_gifts WHERE item_guid = ?", CONNECTION_ASYNC);      PrepareStatement(CHAR_SEL_CHARACTER_GIFT_BY_ITEM, "SELECT entry, flags FROM character_gifts WHERE item_guid = ?", CONNECTION_SYNCH);      PrepareStatement(CHAR_SEL_ACCOUNT_BY_NAME, "SELECT account FROM characters WHERE name = ?", CONNECTION_SYNCH); -    PrepareStatement(CHAR_SEL_CHARACTER_DATA_BY_GUID, "SELECT account, name, level FROM characters WHERE guid = ?", CONNECTION_SYNCH);      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, "UPDATE characters set name = ?, at_login = at_login & ~ ? WHERE guid = ?", CONNECTION_ASYNC); diff --git a/src/server/database/Database/Implementation/CharacterDatabase.h b/src/server/database/Database/Implementation/CharacterDatabase.h index 430243a8f1e..0cac6d35b55 100644 --- a/src/server/database/Database/Implementation/CharacterDatabase.h +++ b/src/server/database/Database/Implementation/CharacterDatabase.h @@ -146,13 +146,11 @@ 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,      CHAR_UPD_NAME_BY_GUID,      CHAR_DEL_DECLINED_NAME, -    CHAR_SEL_CHARACTER_DATA_BY_GUID,      CHAR_INS_GUILD,      CHAR_DEL_GUILD, diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index 27530d73a4e..eb1010a07a1 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -2178,26 +2178,12 @@ ObjectGuid ObjectMgr::GetPlayerGUIDByName(std::string const& name) const  bool ObjectMgr::GetPlayerNameByGUID(ObjectGuid guid, std::string& name) const  { -    // 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->setUInt32(0, guid.GetCounter()); - -    PreparedQueryResult result = CharacterDatabase.Query(stmt); - -    if (result) -    { -        name = (*result)[0].GetString(); -        return true; -    } +    CharacterInfo const* characterInfo = sWorld->GetCharacterInfo(guid); +    if (!characterInfo) +        return false; -    return false; +    name = characterInfo->Name; +    return true;  }  uint32 ObjectMgr::GetPlayerTeamByGUID(ObjectGuid guid) const diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp index 497ed2ecd27..812a828ddce 100644 --- a/src/server/game/Handlers/CharacterHandler.cpp +++ b/src/server/game/Handlers/CharacterHandler.cpp @@ -687,17 +687,17 @@ void WorldSession::HandleCharDeleteOpcode(WorldPacket& recvData)          return;      } -    PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHARACTER_DATA_BY_GUID); -    stmt->setUInt32(0, guid.GetCounter()); - -    if (PreparedQueryResult result = CharacterDatabase.Query(stmt)) +    CharacterInfo const* characterInfo = sWorld->GetCharacterInfo(guid); +    if (!characterInfo)      { -        Field* fields = result->Fetch(); -        accountId = fields[0].GetUInt32(); -        name = fields[1].GetString(); -        level = fields[2].GetUInt8(); +        sScriptMgr->OnPlayerFailedDelete(guid, initAccountId); +        return;      } +    accountId = characterInfo->AccountId; +    name = characterInfo->Name; +    level = characterInfo->Level; +      // prevent deleting other players' characters using cheating tools      if (accountId != initAccountId)      {  | 
