diff options
| author | xinef1 <w.szyszko2@gmail.com> | 2017-01-28 05:00:28 +0100 |
|---|---|---|
| committer | ariel- <ariel-@users.noreply.github.com> | 2017-01-28 01:00:28 -0300 |
| commit | b955456008191e60b6bda1f22e3486a3792b08db (patch) | |
| tree | 051475862b963ed1836c91a93b2b0f877608ba35 /src/server/scripts | |
| parent | 3c4dc3ec4f5c177664180efde3e1035820dbb720 (diff) | |
Few small optimizations here and there (#18684)
Changes list:
- Added CharacterGuidByNameContainer which contains name -> guid unordered map (updated along CharacterInfo)
- Extended CharacterInfo structure with GuildId
- Extended CharacterInfo structure with ArenaTeamId[3], for all possible teams (2v2, 3v3, 5v5)
- Removed CHAR_SEL_GUID_BY_NAME and CHAR_SEL_CHAR_GUID_BY_NAME synchronous queries, name -> guid can be now retrieved in World::GetCharacterGuidByName
- Removed CHAR_SEL_GUID_RACE_ACC_BY_NAME synchronous query, guid can be retrieved by name and rest of the data can be retrieved by guid
- Removed CHAR_SEL_CHAR_LEVEL synchronous query, level can be retrieved by guid
- Changed CHAR_SEL_CHARACTER_ACTIONS_SPEC to asynchronous query, action bars are now loaded asynchronously
- Removed CHAR_SEL_CHARACTER_NAME_CLASS synchronous query, guid can be retrieved by name and rest of the data can be retrieved by guid
- Removed CHAR_SEL_PLAYER_ARENA_TEAMS and CHAR_SEL_ARENA_TEAM_ID_BY_PLAYER_GUID synchronous queries, arena teams are now stored in CharacterInfo
- Replaced synchronous db calls with CharacterInfo lookups
- Removed ObjectMgr::GetPlayerGUIDByName, as it used db query
- Replaced some unnecessary UpdateObjectVisibility() calls because they were either duplicated (called few lines above in other function) or it is enough to call DestroyForNearbyPlayers because object is being removed or should be invisible and DestroyForNearbyPlayers is faster
- Corrected typo in Player::DestroyForPlayer, only items in slots 0 to EQUIPMENT_SLOT_END are sent to other players
- Renamed Player::GetGuildIdFromDB to Player::GetGuildIdFromCharacterInfo and changed the function to use CharacterInfo structure
- Renamed Player::GetArenaTeamIdFromDB to Player::GetArenaTeamIdFromCharacterInfo and changed the function to use CharacterInfo structure
- Renamed Player::GetLevelFromDB to Player::GetLevelFromCharacterInfo and changed the function to use CharacterInfo structure
- Removed GameEventMgr::_questToEventLinks and associated functions, eventId is now stored in Quest class under _eventIdForQuest variable
- Changed some functions checking quest status to use other functions for quest status check instead of duplicating code
- Removed callback from add friend, because we can get the guid from appropriate storage, no need to make db query
- Removed callback from add ignore, because we can get the guid from appropriate storage, no need to make db query
- Added callback to unwrap wrapped items asynchronously
- Removed synchronous select in tutorials to check if we have any entries in db, if any entry exists in db, m_TutorialsChanged variable will have TUTORIALS_FLAG_LOADED_FROM_DB flag added and it is no longer necessary to query database
Diffstat (limited to 'src/server/scripts')
| -rw-r--r-- | src/server/scripts/Commands/cs_arena.cpp | 2 | ||||
| -rw-r--r-- | src/server/scripts/Commands/cs_ban.cpp | 9 | ||||
| -rw-r--r-- | src/server/scripts/Commands/cs_character.cpp | 13 | ||||
| -rw-r--r-- | src/server/scripts/Commands/cs_guild.cpp | 4 | ||||
| -rw-r--r-- | src/server/scripts/Commands/cs_misc.cpp | 14 | ||||
| -rw-r--r-- | src/server/scripts/Commands/cs_ticket.cpp | 6 |
6 files changed, 20 insertions, 28 deletions
diff --git a/src/server/scripts/Commands/cs_arena.cpp b/src/server/scripts/Commands/cs_arena.cpp index d284c9acebc..9419d5eb9ea 100644 --- a/src/server/scripts/Commands/cs_arena.cpp +++ b/src/server/scripts/Commands/cs_arena.cpp @@ -83,7 +83,7 @@ public: if (type == 2 || type == 3 || type == 5 ) { - if (Player::GetArenaTeamIdFromDB(target->GetGUID(), type) != 0) + if (Player::GetArenaTeamIdFromCharacterInfo(target->GetGUID(), type) != 0) { handler->PSendSysMessage(LANG_ARENA_ERROR_SIZE, target->GetName().c_str()); handler->SetSentErrorMessage(true); diff --git a/src/server/scripts/Commands/cs_ban.cpp b/src/server/scripts/Commands/cs_ban.cpp index 606e5a05b2c..c9373d7237c 100644 --- a/src/server/scripts/Commands/cs_ban.cpp +++ b/src/server/scripts/Commands/cs_ban.cpp @@ -300,17 +300,14 @@ public: if (!target) { - PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_GUID_BY_NAME); - stmt->setString(0, name); - PreparedQueryResult resultCharacter = CharacterDatabase.Query(stmt); - - if (!resultCharacter) + ObjectGuid fullGuid = sWorld->GetCharacterGuidByName(name); + if (fullGuid.IsEmpty()) { handler->PSendSysMessage(LANG_BANINFO_NOCHARACTER); return false; } - targetGuid = (*resultCharacter)[0].GetUInt32(); + targetGuid = fullGuid.GetCounter(); } else targetGuid = target->GetGUID().GetCounter(); diff --git a/src/server/scripts/Commands/cs_character.cpp b/src/server/scripts/Commands/cs_character.cpp index d6b06882810..ebd28a1ac06 100644 --- a/src/server/scripts/Commands/cs_character.cpp +++ b/src/server/scripts/Commands/cs_character.cpp @@ -208,7 +208,7 @@ public: return; } - if (sObjectMgr->GetPlayerGUIDByName(delInfo.name)) + if (sWorld->GetCharacterGuidByName(delInfo.name)) { handler->PSendSysMessage(LANG_CHARACTER_DELETED_SKIP_NAME, delInfo.name.c_str(), delInfo.guid.GetCounter(), delInfo.accountId); return; @@ -384,6 +384,7 @@ public: } sWorld->UpdateCharacterInfo(targetGuid, newName); + sWorld->UpdateCharacterGuidByName(targetGuid, playerOldName, newName); handler->PSendSysMessage(LANG_RENAME_PLAYER_WITH_NEW_NAME, playerOldName.c_str(), newName.c_str()); @@ -446,7 +447,7 @@ public: if (!handler->extractPlayerTarget(nameStr, &target, &targetGuid, &targetName)) return false; - int32 oldlevel = target ? target->getLevel() : Player::GetLevelFromDB(targetGuid); + int32 oldlevel = target ? target->getLevel() : Player::GetLevelFromCharacterInfo(targetGuid); int32 newlevel = levelStr ? atoi(levelStr) : oldlevel; if (newlevel < 1) @@ -862,8 +863,8 @@ public: } else { - characterGuid = sObjectMgr->GetPlayerGUIDByName(characterName); - if (!characterGuid) + characterGuid = sWorld->GetCharacterGuidByName(characterName); + if (characterGuid.IsEmpty()) { handler->PSendSysMessage(LANG_NO_PLAYER, characterName.c_str()); handler->SetSentErrorMessage(true); @@ -900,7 +901,7 @@ public: if (!handler->extractPlayerTarget(nameStr, &target, &targetGuid, &targetName)) return false; - int32 oldlevel = target ? target->getLevel() : Player::GetLevelFromDB(targetGuid); + int32 oldlevel = target ? target->getLevel() : Player::GetLevelFromCharacterInfo(targetGuid); int32 addlevel = levelStr ? atoi(levelStr) : 1; int32 newlevel = oldlevel + addlevel; @@ -1057,7 +1058,7 @@ public: return false; } - guid = sObjectMgr->GetPlayerGUIDByName(name); + guid = sWorld->GetCharacterGuidByName(name); } if (!sObjectMgr->GetPlayerAccountIdByGUID(guid)) diff --git a/src/server/scripts/Commands/cs_guild.cpp b/src/server/scripts/Commands/cs_guild.cpp index 22696f86d63..8ee2b6c4634 100644 --- a/src/server/scripts/Commands/cs_guild.cpp +++ b/src/server/scripts/Commands/cs_guild.cpp @@ -157,7 +157,7 @@ public: if (!handler->extractPlayerTarget((char*)args, &target, &targetGuid)) return false; - ObjectGuid::LowType guildId = target ? target->GetGuildId() : Player::GetGuildIdFromDB(targetGuid); + ObjectGuid::LowType guildId = target ? target->GetGuildId() : Player::GetGuildIdFromCharacterInfo(targetGuid); if (!guildId) return false; @@ -184,7 +184,7 @@ public: if (!handler->extractPlayerTarget(nameStr, &target, &targetGuid, &target_name)) return false; - ObjectGuid::LowType guildId = target ? target->GetGuildId() : Player::GetGuildIdFromDB(targetGuid); + ObjectGuid::LowType guildId = target ? target->GetGuildId() : Player::GetGuildIdFromCharacterInfo(targetGuid); if (!guildId) return false; diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp index 9c5e30c340e..bcd919d5899 100644 --- a/src/server/scripts/Commands/cs_misc.cpp +++ b/src/server/scripts/Commands/cs_misc.cpp @@ -2550,22 +2550,16 @@ public: if (targetName) { // Check for offline players - PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHAR_GUID_BY_NAME); - stmt->setString(0, name); - PreparedQueryResult result = CharacterDatabase.Query(stmt); - - if (!result) + ObjectGuid guid = sWorld->GetCharacterGuidByName(name); + if (guid.IsEmpty()) { handler->SendSysMessage(LANG_COMMAND_FREEZE_WRONG); return true; } // If player found: delete his freeze aura - Field* fields = result->Fetch(); - ObjectGuid::LowType lowGuid = fields[0].GetUInt32(); - - stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_AURA_FROZEN); - stmt->setUInt32(0, lowGuid); + PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_AURA_FROZEN); + stmt->setUInt32(0, guid.GetCounter()); CharacterDatabase.Execute(stmt); handler->PSendSysMessage(LANG_COMMAND_UNFREEZE, name.c_str()); diff --git a/src/server/scripts/Commands/cs_ticket.cpp b/src/server/scripts/Commands/cs_ticket.cpp index a4fc86f8048..8aaed4f2ad1 100644 --- a/src/server/scripts/Commands/cs_ticket.cpp +++ b/src/server/scripts/Commands/cs_ticket.cpp @@ -92,7 +92,7 @@ public: return true; } - ObjectGuid targetGuid = sObjectMgr->GetPlayerGUIDByName(target); + ObjectGuid targetGuid = sWorld->GetCharacterGuidByName(target); uint32 accountId = sObjectMgr->GetPlayerAccountIdByGUID(targetGuid); // Target must exist and have administrative rights if (!AccountMgr::HasPermission(accountId, rbac::RBAC_PERM_COMMANDS_BE_ASSIGNED_TICKET, realm.Id.Realm)) @@ -452,10 +452,10 @@ public: if (Player* player = ObjectAccessor::FindPlayerByName(name)) guid = player->GetGUID(); else - guid = sObjectMgr->GetPlayerGUIDByName(name); + guid = sWorld->GetCharacterGuidByName(name); // Target must exist - if (!guid) + if (guid.IsEmpty()) { handler->SendSysMessage(LANG_NO_PLAYERS_FOUND); return true; |
