aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Handlers/QueryHandler.cpp
diff options
context:
space:
mode:
authorfunjoker <torti-esser@web.de>2019-07-27 02:52:13 +0200
committerShauren <shauren.trinity@gmail.com>2019-08-17 20:04:14 +0200
commitb4d30bb92cbfc8411d8d91b0f4f2981f2cecc148 (patch)
treee799515c3341aae73e47f080a71c39fcb371e905 /src/server/game/Handlers/QueryHandler.cpp
parent4380fe2751869e7a011d51ee9449e8723b00067f (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.cpp186
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());
}