diff options
author | funjoker <torti-esser@web.de> | 2019-07-27 02:52:13 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2019-08-17 20:04:14 +0200 |
commit | b4d30bb92cbfc8411d8d91b0f4f2981f2cecc148 (patch) | |
tree | e799515c3341aae73e47f080a71c39fcb371e905 /src/server/game/Handlers/QueryHandler.cpp | |
parent | 4380fe2751869e7a011d51ee9449e8723b00067f (diff) |
QueryCache port
partial port of:
(ae9d01a3245c59a8a8d50516a79b79250337450d)
(dd1aa64563bfb726e1132a135927a02fbb765454)
Diffstat (limited to 'src/server/game/Handlers/QueryHandler.cpp')
-rw-r--r-- | src/server/game/Handlers/QueryHandler.cpp | 186 |
1 files changed, 38 insertions, 148 deletions
diff --git a/src/server/game/Handlers/QueryHandler.cpp b/src/server/game/Handlers/QueryHandler.cpp index d9af761eb22..19aa93b27ea 100644 --- a/src/server/game/Handlers/QueryHandler.cpp +++ b/src/server/game/Handlers/QueryHandler.cpp @@ -68,112 +68,52 @@ void WorldSession::SendQueryTimeResponse() /// Only _static_ data is sent in this packet !!! void WorldSession::HandleCreatureQuery(WorldPackets::Query::QueryCreature& packet) { - WorldPackets::Query::QueryCreatureResponse response; - - CreatureTemplate const* creatureInfo = sObjectMgr->GetCreatureTemplate(packet.CreatureID); - - response.CreatureID = packet.CreatureID; - - if (creatureInfo) + if (CreatureTemplate const* ci = sObjectMgr->GetCreatureTemplate(packet.CreatureID)) { - response.Allow = true; - - WorldPackets::Query::CreatureStats& stats = response.Stats; - - stats.Leader = creatureInfo->RacialLeader; - - stats.Name[0] = creatureInfo->Name; - stats.NameAlt[0] = creatureInfo->FemaleName; - - stats.Flags[0] = creatureInfo->type_flags; - stats.Flags[1] = creatureInfo->type_flags2; - - stats.CreatureType = creatureInfo->type; - stats.CreatureFamily = creatureInfo->family; - stats.Classification = creatureInfo->rank; - - for (uint32 i = 0; i < MAX_KILL_CREDIT; ++i) - stats.ProxyCreatureID[i] = creatureInfo->KillCredit[i]; - - std::transform(creatureInfo->Models.begin(), creatureInfo->Models.end(), std::back_inserter(stats.Display.CreatureDisplay), - [&stats](CreatureModel const& model) -> WorldPackets::Query::CreatureXDisplay + TC_LOG_DEBUG("network", "WORLD: CMSG_QUERY_CREATURE '%s' - Entry: %u.", ci->Name.c_str(), packet.CreatureID); + if (sWorld->getBoolConfig(CONFIG_CACHE_DATA_QUERIES)) + SendPacket(&ci->QueryData[static_cast<uint32>(GetSessionDbLocaleIndex())]); + else { - stats.Display.TotalProbability += model.Probability; - return { model.CreatureDisplayID, model.DisplayScale, model.Probability }; - }); - - stats.HpMulti = creatureInfo->ModHealth; - stats.EnergyMulti = creatureInfo->ModMana; - - stats.CreatureMovementInfoID = creatureInfo->movementId; - stats.RequiredExpansion = creatureInfo->RequiredExpansion; - stats.HealthScalingExpansion = creatureInfo->HealthScalingExpansion; - stats.VignetteID = creatureInfo->VignetteID; - stats.Class = creatureInfo->unit_class; - stats.FadeRegionRadius = creatureInfo->FadeRegionRadius; - stats.WidgetSetID = creatureInfo->WidgetSetID; - stats.WidgetSetUnitConditionID = creatureInfo->WidgetSetUnitConditionID; - - stats.Title = creatureInfo->SubName; - stats.TitleAlt = creatureInfo->TitleAlt; - stats.CursorName = creatureInfo->IconName; - - if (std::vector<uint32> const* items = sObjectMgr->GetCreatureQuestItemList(packet.CreatureID)) - stats.QuestItems.insert(stats.QuestItems.begin(), items->begin(), items->end()); - - LocaleConstant localeConstant = GetSessionDbLocaleIndex(); - if (localeConstant != LOCALE_enUS) - if (CreatureLocale const* creatureLocale = sObjectMgr->GetCreatureLocale(packet.CreatureID)) - { - ObjectMgr::GetLocaleString(creatureLocale->Name, localeConstant, stats.Name[0]); - ObjectMgr::GetLocaleString(creatureLocale->NameAlt, localeConstant, stats.NameAlt[0]); - ObjectMgr::GetLocaleString(creatureLocale->Title, localeConstant, stats.Title); - ObjectMgr::GetLocaleString(creatureLocale->TitleAlt, localeConstant, stats.TitleAlt); - } + WorldPacket response = ci->BuildQueryData(GetSessionDbLocaleIndex()); + SendPacket(&response); + } + TC_LOG_DEBUG("network", "WORLD: Sent SMSG_QUERY_CREATURE_RESPONSE"); } + else + { + TC_LOG_DEBUG("network", "WORLD: CMSG_QUERY_CREATURE - NO CREATURE INFO! (ENTRY: %u)", packet.CreatureID); - SendPacket(response.Write()); + WorldPackets::Query::QueryCreatureResponse response; + response.CreatureID = packet.CreatureID; + SendPacket(response.Write()); + TC_LOG_DEBUG("network", "WORLD: Sent SMSG_QUERY_CREATURE_RESPONSE"); + } } /// Only _static_ data is sent in this packet !!! void WorldSession::HandleGameObjectQueryOpcode(WorldPackets::Query::QueryGameObject& packet) { - WorldPackets::Query::QueryGameObjectResponse response; - response.GameObjectID = packet.GameObjectID; - - if (GameObjectTemplate const* gameObjectInfo = sObjectMgr->GetGameObjectTemplate(packet.GameObjectID)) + if (GameObjectTemplate const* info = sObjectMgr->GetGameObjectTemplate(packet.GameObjectID)) { - response.Allow = true; - WorldPackets::Query::GameObjectStats& stats = response.Stats; - - stats.Type = gameObjectInfo->type; - stats.DisplayID = gameObjectInfo->displayId; - - stats.Name[0] = gameObjectInfo->name; - stats.IconName = gameObjectInfo->IconName; - stats.CastBarCaption = gameObjectInfo->castBarCaption; - stats.UnkString = gameObjectInfo->unk1; - - LocaleConstant localeConstant = GetSessionDbLocaleIndex(); - if (localeConstant != LOCALE_enUS) - if (GameObjectLocale const* gameObjectLocale = sObjectMgr->GetGameObjectLocale(packet.GameObjectID)) - { - ObjectMgr::GetLocaleString(gameObjectLocale->Name, localeConstant, stats.Name[0]); - ObjectMgr::GetLocaleString(gameObjectLocale->CastBarCaption, localeConstant, stats.CastBarCaption); - ObjectMgr::GetLocaleString(gameObjectLocale->Unk1, localeConstant, stats.UnkString); - } - - stats.Size = gameObjectInfo->size; - - if (std::vector<uint32> const* items = sObjectMgr->GetGameObjectQuestItemList(packet.GameObjectID)) - for (int32 item : *items) - stats.QuestItems.push_back(item); - - memcpy(stats.Data, gameObjectInfo->raw.data, MAX_GAMEOBJECT_DATA * sizeof(int32)); - stats.RequiredLevel = gameObjectInfo->RequiredLevel; + if (sWorld->getBoolConfig(CONFIG_CACHE_DATA_QUERIES)) + SendPacket(&info->QueryData[static_cast<uint32>(GetSessionDbLocaleIndex())]); + else + { + WorldPacket response = info->BuildQueryData(GetSessionDbLocaleIndex()); + SendPacket(&response); + } + TC_LOG_DEBUG("network", "WORLD: Sent SMSG_GAMEOBJECT_QUERY_RESPONSE"); } + else + { + TC_LOG_DEBUG("network", "WORLD: CMSG_GAMEOBJECT_QUERY - Missing gameobject info for (ENTRY: %u)", packet.GameObjectID); - SendPacket(response.Write()); + WorldPackets::Query::QueryGameObjectResponse response; + response.GameObjectID = packet.GameObjectID; + SendPacket(response.Write()); + TC_LOG_DEBUG("network", "WORLD: Sent SMSG_GAMEOBJECT_QUERY_RESPONSE"); + } } void WorldSession::HandleQueryCorpseLocation(WorldPackets::Query::QueryCorpseLocationFromClient& queryCorpseLocation) @@ -344,60 +284,10 @@ void WorldSession::HandleQuestPOIQuery(WorldPackets::Query::QuestPOIQuery& quest WorldPackets::Query::QuestPOIQueryResponse response; - for (auto itr = questIds.begin(); itr != questIds.end(); ++itr) - { - int32 QuestID = *itr; - - bool questOk = false; - - uint16 questSlot = _player->FindQuestSlot(uint32(QuestID)); - - if (questSlot != MAX_QUEST_LOG_SIZE) - questOk = _player->GetQuestSlotQuestId(questSlot) == uint32(QuestID); - - if (questOk) - { - QuestPOIVector const* poiData = sObjectMgr->GetQuestPOIVector(QuestID); - if (poiData) - { - WorldPackets::Query::QuestPOIData questPOIData; - - questPOIData.QuestID = QuestID; - - for (auto data = poiData->begin(); data != poiData->end(); ++data) - { - WorldPackets::Query::QuestPOIBlobData questPOIBlobData; - - questPOIBlobData.BlobIndex = data->BlobIndex; - questPOIBlobData.ObjectiveIndex = data->ObjectiveIndex; - questPOIBlobData.QuestObjectiveID = data->QuestObjectiveID; - questPOIBlobData.QuestObjectID = data->QuestObjectID; - questPOIBlobData.MapID = data->MapID; - questPOIBlobData.UiMapID = data->UiMapID; - questPOIBlobData.Priority = data->Priority; - questPOIBlobData.Flags = data->Flags; - questPOIBlobData.WorldEffectID = data->WorldEffectID; - questPOIBlobData.PlayerConditionID = data->PlayerConditionID; - questPOIBlobData.SpawnTrackingID = data->SpawnTrackingID; - questPOIBlobData.AlwaysAllowMergingBlobs = data->AlwaysAllowMergingBlobs; - - for (QuestPOIPoint const& point : data->points) - { - WorldPackets::Query::QuestPOIBlobPoint questPOIBlobPoint; - - questPOIBlobPoint.X = point.X; - questPOIBlobPoint.Y = point.Y; - - questPOIBlobData.QuestPOIBlobPointStats.push_back(questPOIBlobPoint); - } - - questPOIData.QuestPOIBlobDataStats.push_back(questPOIBlobData); - } - - response.QuestPOIDataStats.push_back(questPOIData); - } - } - } + for (uint32 questId : questIds) + if (_player->FindQuestSlot(questId) != MAX_QUEST_LOG_SIZE) + if (QuestPOIData const* poiData = sObjectMgr->GetQuestPOIData(questId)) + response.QuestPOIDataStats.push_back(poiData); SendPacket(response.Write()); } |