Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
QueryHandler.cpp
Go to the documentation of this file.
1/*
2* This file is part of Project SkyFire https://www.projectskyfire.org.
3* See LICENSE.md file for Copyright information
4*/
5
6#include "Common.h"
7#include "Config.h"
8#include "DatabaseEnv.h"
9#include "Language.h"
10#include "Log.h"
11#include "MapManager.h"
12#include "NPCHandler.h"
13#include "ObjectMgr.h"
14#include "Opcodes.h"
15#include "Pet.h"
16#include "Player.h"
17#include "UpdateMask.h"
18#include "World.h"
19#include "WorldPacket.h"
20#include "WorldSession.h"
21
23{
24 ObjectGuid guid2 = 0;
25 ObjectGuid guid3 = guid;
26
27 Player* player = ObjectAccessor::FindPlayer(guid);
28 CharacterNameData const* nameData = sWorld->GetCharacterNameData(GUID_LOPART(guid));
29
31 data.WriteGuidMask(guid, 3, 6, 7, 2, 5, 4, 0, 1);
32
33 data.WriteGuidBytes(guid, 5, 4, 7, 6, 1, 2);
34
35 data << uint8(!nameData);
36
37 if (nameData)
38 {
39 data << uint32(nameData->m_realm); // realmIdSecond
40 data << uint32(GetAccountId()); // AccID
41 data << uint8(nameData->m_class);
42 data << uint8(nameData->m_race);
43 data << uint8(nameData->m_level);
44 data << uint8(nameData->m_gender);
45 }
46
47 data.WriteGuidBytes(guid, 0, 3);
48
49 if (!nameData)
50 {
51 SendPacket(&data);
52 return;
53 }
54
55 data.WriteBit(guid2[2]);
56 data.WriteBit(guid2[7]);
57 data.WriteBit(guid3[7]);
58 data.WriteBit(guid3[2]);
59 data.WriteBit(guid3[0]);
60 data.WriteBit(0); //isDeleted ? Wod ?
61 data.WriteBit(guid2[4]);
62 data.WriteBit(guid3[5]);
63 data.WriteBit(guid2[1]);
64 data.WriteBit(guid2[3]);
65 data.WriteBit(guid2[0]);
66
67 DeclinedName const* names = (player ? player->GetDeclinedNames() : NULL);
68 for (uint8 i = 0; i < MAX_DECLINED_NAME_CASES; ++i)
69 data.WriteBits(names ? names->name[i].size() : 0, 7);
70
71 data.WriteBit(guid3[6]);
72 data.WriteBit(guid3[3]);
73 data.WriteBit(guid2[5]);
74 data.WriteBit(guid3[1]);
75 data.WriteBit(guid3[4]);
76 data.WriteBits(nameData->m_name.size(), 6);
77 data.WriteBit(guid2[6]);
78
79 data.FlushBits();
80
81 data.WriteByteSeq(guid3[6]);
82 data.WriteByteSeq(guid3[0]);
83 data.WriteString(nameData->m_name);
84 data.WriteByteSeq(guid2[5]);
85 data.WriteByteSeq(guid2[2]);
86 data.WriteByteSeq(guid3[3]);
87 data.WriteByteSeq(guid2[4]);
88 data.WriteByteSeq(guid2[3]);
89 data.WriteByteSeq(guid3[4]);
90 data.WriteByteSeq(guid3[2]);
91 data.WriteByteSeq(guid2[7]);
92
93 if (names)
94 for (uint8 i = 0; i < MAX_DECLINED_NAME_CASES; ++i)
95 data.WriteString(names->name[i]);
96
97 data.WriteByteSeq(guid2[6]);
98 data.WriteByteSeq(guid3[7]);
99 data.WriteByteSeq(guid3[1]);
100 data.WriteByteSeq(guid2[1]);
101 data.WriteByteSeq(guid3[5]);
102 data.WriteByteSeq(guid2[0]);
103
104 SendPacket(&data);
105}
106
108{
109 ObjectGuid guid;
110
111 uint8 bit14, bit1C;
112 uint32 unk, unk1;
113
114 recvData.ReadGuidMask(guid, 4);
115 bit14 = recvData.ReadBit();
116 recvData.ReadGuidMask(guid, 6, 0, 7, 1);
117 bit1C = recvData.ReadBit();
118 recvData.ReadGuidMask(guid, 5, 2, 3);
119
120 recvData.ReadGuidBytes(guid, 7, 5, 1, 2, 6, 3, 0, 4);
121
122 // virtual and native realm Addresses
123
124 if (bit14)
125 recvData >> unk;
126
127 if (bit1C)
128 recvData >> unk1;
129
130 // This is disable by default to prevent lots of console spam
131 // SF_LOG_INFO("network", "HandleNameQueryOpcode %u", guid);
132
134}
135
137{
138 RealmNameMap::const_iterator iter = realmNameStore.find(realmId);
139
140 bool found = iter != realmNameStore.end();
141 std::string realmName = found ? iter->second : "";
142
144 data << uint8(!found);
145 data << uint32(realmId);
146
147 if (found)
148 {
149 data.WriteBits(realmName.length(), 8);
150 data.WriteBit(realmId == GetVirtualRealmID());
151 data.WriteBits(realmName.length(), 8);
152 data.FlushBits();
153
154 data.WriteString(realmName);
155 data.WriteString(realmName);
156 }
157
158 SendPacket(&data);
159}
160
162{
163 uint32 realmId;
164 recvPacket >> realmId;
166}
167
172
174{
176 data << uint32(time(NULL));
177 data << uint32(sWorld->GetNextDailyQuestsResetTime() - time(NULL));
178 SendPacket(&data);
179}
180
183{
184 uint32 entry;
185 recvData >> entry;
186
188
189 CreatureTemplate const* info = sObjectMgr->GetCreatureTemplate(entry);
190
191 data << uint32(entry);
192 data.WriteBit(info != 0); // Has data
193
194 if (info)
195 {
196 std::string Name, SubName;
197 Name = info->Name;
198 SubName = info->SubName;
199
200 int loc_idx = GetSessionDbLocaleIndex();
201 if (loc_idx >= 0)
202 {
203 if (CreatureLocale const* cl = sObjectMgr->GetCreatureLocale(entry))
204 {
205 ObjectMgr::GetLocaleString(cl->Name, loc_idx, Name);
206 ObjectMgr::GetLocaleString(cl->SubName, loc_idx, SubName);
207 }
208 }
209
210 SF_LOG_DEBUG("network", "WORLD: CMSG_CREATURE_QUERY '%s' - Entry: %u.", info->Name.c_str(), entry);
211
212 data.WriteBits(SubName.length() ? SubName.length() + 1 : 0, 11);
213 data.WriteBits(MAX_CREATURE_QUEST_ITEMS, 22); // Quest items
214 data.WriteBits(0, 11);
215
216 for (int i = 0; i < 8; i++)
217 {
218 if (i == 0)
219 data.WriteBits(Name.length() + 1, 11);
220 else
221 data.WriteBits(0, 11); // Name2, ..., name8
222 }
223
224 data.WriteBit(info->RacialLeader);
225 data.WriteBits(info->IconName.length() + 1, 6);
226 data.FlushBits();
227
228 data << uint32(info->KillCredit[0]); // New in 3.1, kill credit
229 data << uint32(info->Modelid4); // Modelid4
230 data << uint32(info->Modelid2); // Modelid2
231 data << uint32(info->expansion); // Expansion Required
232 data << uint32(info->type); // CreatureType.dbc
233 data << float(info->ModHealth); // Hp modifier
234 data << uint32(info->type_flags); // Flags
235 data << uint32(info->type_flags2); // Flags2
236 data << uint32(info->rank); // Creature Rank (elite, boss, etc)
237 data << uint32(info->movementId); // CreatureMovementInfo.dbc
238 data << Name;
239
240 if (SubName != "")
241 data << SubName; // Subname
242
243 data << uint32(info->Modelid1); // Modelid1
244 data << uint32(info->Modelid3); // Modelid3
245
246 if (info->IconName != "")
247 data << info->IconName; // "Directions" for guard, string for Icons 2.3.0
248
249 for (uint32 i = 0; i < MAX_CREATURE_QUEST_ITEMS; ++i)
250 data << uint32(info->questItems[i]); // ItemId[6], quest drop
251
252 data << uint32(info->KillCredit[1]); // New in 3.1, kill credit
253 data << float(info->ModMana); // Mana modifier
254 data << uint32(info->family); // CreatureFamily.dbc
255
256 SF_LOG_DEBUG("network", "WORLD: Sent SMSG_CREATURE_QUERY_RESPONSE");
257 }
258 else
259 SF_LOG_DEBUG("network", "WORLD: CMSG_CREATURE_QUERY - NO CREATURE INFO! (ENTRY: %u)", entry);
260
261 SendPacket(&data);
262}
263
266{
267 uint32 entry;
268 ObjectGuid guid;
269
270 recvData >> entry;
271
272 recvData.ReadGuidMask(guid, 5, 3, 6, 2, 7, 1, 0, 4);
273 recvData.ReadGuidBytes(guid, 1, 5, 3, 4, 6, 2, 7, 0);
274
275 const GameObjectTemplate* info = sObjectMgr->GetGameObjectTemplate(entry);
276
278 data.WriteBit(info != NULL);
279 data << uint32(entry);
280
281 size_t pos = data.wpos();
282 data << uint32(0);
283
284 if (info)
285 {
286 std::string Name;
287 std::string IconName;
288 std::string CastBarCaption;
289
290 Name = info->name;
291 IconName = info->IconName;
292 CastBarCaption = info->castBarCaption;
293
294 int loc_idx = GetSessionDbLocaleIndex();
295 if (loc_idx >= 0)
296 {
297 if (GameObjectLocale const* gl = sObjectMgr->GetGameObjectLocale(entry))
298 {
299 ObjectMgr::GetLocaleString(gl->Name, loc_idx, Name);
300 ObjectMgr::GetLocaleString(gl->CastBarCaption, loc_idx, CastBarCaption);
301 }
302 }
303
304 SF_LOG_DEBUG("network", "WORLD: CMSG_GAMEOBJECT_QUERY '%s' - Entry: %u. ", info->name.c_str(), entry);
305
306 data << uint32(info->type);
307 data << uint32(info->displayId);
308 data << Name;
309 data << uint8(0) << uint8(0) << uint8(0); // name2, name3, name4
310 data << IconName; // 2.0.3, string. Icon name to use instead of default icon for go's (ex: "Attack" makes sword)
311 data << CastBarCaption; // 2.0.3, string. Text will appear in Cast Bar when using GO (ex: "Collecting")
312 data << info->unk1; // 2.0.3, string
313
314 data.append(info->raw.data, MAX_GAMEOBJECT_DATA);
315 data << float(info->size); // go size
316
318
319 for (uint32 i = 0; i < MAX_GAMEOBJECT_QUEST_ITEMS; ++i)
320 data << uint32(info->questItems[i]); // itemId[6], quest drop
321
322 data << int32(info->unkInt32); // 4.x, unknown
323
324 data.put(pos, uint32(data.wpos() - (pos + 4)));
325 SF_LOG_DEBUG("network", "WORLD: Sent SMSG_GAMEOBJECT_QUERY_RESPONSE");
326 }
327 else
328 {
329 SF_LOG_DEBUG("network", "WORLD: CMSG_GAMEOBJECT_QUERY - Missing gameobject info for (GUID: %u, ENTRY: %u)",
330 GUID_LOPART((uint64)guid), entry);
331 SF_LOG_DEBUG("network", "WORLD: Sent SMSG_GAMEOBJECT_QUERY_RESPONSE");
332 }
333
334 SendPacket(&data);
335}
336
338{
339 SF_LOG_DEBUG("network", "WORLD: Received CMSG_CORPSE_QUERY");
340
341 Corpse* corpse = GetPlayer()->GetCorpse();
342
343 if (!corpse)
344 {
346 data.WriteBits(0, 9); // Not found + guid stream
347 for (int i = 0; i < 5; i++)
348 data << uint32(0);
349 SendPacket(&data);
350 return;
351 }
352
353 uint32 mapId = corpse->GetMapId();
354 float x = corpse->GetPositionX();
355 float y = corpse->GetPositionY();
356 float z = corpse->GetPositionZ();
357 uint32 corpseMapId = mapId;
358
359 // if corpse at different map
360 if (mapId != _player->GetMapId())
361 {
362 // search entrance map for proper show entrance
363 if (MapEntry const* corpseMapEntry = sMapStore.LookupEntry(mapId))
364 {
365 if (corpseMapEntry->IsInstance() && corpseMapEntry->entrance_map >= 0)
366 {
367 // if corpse map have entrance
368 if (Map const* entranceMap = sMapMgr->CreateBaseMap(corpseMapEntry->entrance_map))
369 {
370 mapId = corpseMapEntry->entrance_map;
371 x = corpseMapEntry->entrance_x;
372 y = corpseMapEntry->entrance_y;
373 z = entranceMap->GetHeight(GetPlayer()->GetPhaseMask(), x, y, MAX_HEIGHT);
374 }
375 }
376 }
377 }
378
379 _player->SendCorpseReclaimDelay();
380
381 ObjectGuid corpseGuid = corpse->GetGUID();
382
383 WorldPacket data(SMSG_CORPSE_QUERY, 9 + 1 + (4 * 5));
384 data.WriteGuidMask(corpseGuid, 0, 3, 2);
385 data.WriteBit(1); // Corpse Found
386 data.WriteGuidMask(corpseGuid, 5, 4, 1, 7, 6);
387
388 data.WriteGuidBytes(corpseGuid, 5);
389 data << float(z);
390 data.WriteGuidBytes(corpseGuid, 1);
391 data << uint32(corpseMapId);
392 data.WriteGuidBytes(corpseGuid, 6, 4);
393 data << float(x);
394 data.WriteGuidBytes(corpseGuid, 3, 7, 2, 0);
395 data << int32(mapId);
396 data << float(y);
397 SendPacket(&data);
398}
399
401{
402 uint32 textID;
403 ObjectGuid guid;
404
405 recvData >> textID;
406 recvData.ReadGuidMask(guid, 4, 5, 1, 7, 0, 2, 6, 3);
407 recvData.ReadGuidBytes(guid, 4, 0, 2, 5, 1, 7, 3, 7);
408
409 SF_LOG_ERROR("network", "WORLD: CMSG_NPC_TEXT_QUERY ID '%u', %lu", textID, uint64(guid));
410 //SendBroadcastText(textID);
411
412 GossipText const* pGossip = sObjectMgr->GetGossipText(textID);
413
414 // WNPC collumns should be in this buffer
415 ByteBuffer buf;
416 if (!pGossip)
417 {
418 buf << uint32(1);
419 for (uint8 i = 0; i < 7; i++)
420 buf << uint32(0);
421
422 buf << uint32(1);
423
424 for (uint8 i = 0; i < 7; i++)
425 buf << uint32(0);
426
427 buf << std::string("Help help! I'm being repressed!");
428 }
429 else
430 {
431 buf << uint32(1);
432 for (uint8 i = 0; i < 7; i++)
433 buf << uint32(0);
434
435 buf << uint32(textID);// ADB cache entry
436 for (uint8 i = 0; i < 7; i++)
437 buf << uint32(0); // ADB cache entry
438
439 buf << std::string(pGossip->Options[0].Text_0);
440 }
441
442 WorldPacket data(SMSG_NPC_TEXT_UPDATE, 1 + 4 + buf.size());
443 data << uint32(textID);
444 data << uint32(buf.size());// sizeofbuf
445
446 data.append(buf); // data collumns to write to cache
447 data.WriteBit(1); // write record to WNPC cache
448 data.FlushBits();
449
450 SendPacket(&data);
451
452 SF_LOG_DEBUG("network", "WORLD: Sent SMSG_NPC_TEXT_UPDATE");
453}
454
457{
458 SF_LOG_DEBUG("network", "WORLD: Received CMSG_PAGE_TEXT_QUERY");
459
460 uint32 pageID;
461 ObjectGuid guid;
462
463 recvData >> pageID;
464
465 recvData.ReadGuidMask(guid, 2, 1, 3, 7, 6, 4, 0, 5);
466 recvData.ReadGuidBytes(guid, 1, 6, 3, 5, 1, 7, 4, 2);
467
468 while (pageID)
469 {
471
472 PageText const* pageText = sObjectMgr->GetPageText(pageID);
473
474 data.WriteBit(pageText != NULL);
475
476 if (!pageText)
477 {
478 data.FlushBits();
479 data << uint32(0);
480 }
481 else
482 {
483 std::string Text = pageText->Text;
484
485 int loc_idx = GetSessionDbLocaleIndex();
486 if (loc_idx >= 0)
487 if (PageTextLocale const* player = sObjectMgr->GetPageTextLocale(pageID))
488 ObjectMgr::GetLocaleString(player->Text, loc_idx, Text);
489
490 data.WriteBits(Text.size(), 12);
491
492 data.FlushBits();
493
494 data << uint32(pageText->NextPage);
495 data << uint32(pageID);
496
497 data.WriteString(Text);
498 data << uint32(pageID);
499 }
500
501 pageID = pageText ? pageText->NextPage : 0;
502
503 SendPacket(&data);
504
505 SF_LOG_DEBUG("network", "WORLD: Sent SMSG_PAGE_TEXT_QUERY_RESPONSE");
506 }
507}
508
510{
511 SF_LOG_DEBUG("network", "WORLD: Recv CMSG_CORPSE_MAP_POSITION_QUERY");
512
513 ObjectGuid corpseGuid;
514 recvData.ReadGuidMask(corpseGuid, 7, 6, 3, 0, 4, 1, 5, 2);
515 recvData.ReadGuidBytes(corpseGuid, 1, 6, 0, 5, 3, 2, 4, 7);
516
518 data << float(0);
519 data << float(0);
520 data << float(0);
521 data << float(0);
522 SendPacket(&data);
523}
524
526{
527 std::map<uint32, std::vector<uint32>> quests;
528 for (int i = 0; i < 50; ++i)
529 {
530 uint32 questId;
531 recvData >> questId;
532
534 if (sObjectMgr->GetQuestTemplate(questId) && _player->GetQuestStatus(questId) == QUEST_STATUS_COMPLETE)
535 {
536 auto creatures = sObjectMgr->GetCreatureQuestInvolvedRelationReverseBounds(questId);
537 for (auto it = creatures.first; it != creatures.second; ++it)
538 quests[questId].push_back(it->second);
539
540 auto gos = sObjectMgr->GetGOQuestInvolvedRelationReverseBounds(questId);
541 for (auto it = gos.first; it != gos.second; ++it)
542 quests[questId].push_back(it->second | 0x80000000); // GO mask
543 }
544 }
545
546 uint32 count;
547 recvData >> count;
548
549 WorldPacket data(SMSG_QUEST_NPC_QUERY_RESPONSE, 3 + count * 14);
550 data.WriteBits(quests.size(), 21);
551
552 for (auto it = quests.begin(); it != quests.end(); ++it)
553 data.WriteBits(it->second.size(), 22);
554
555 data.FlushBits();
556
557 for (auto it = quests.begin(); it != quests.end(); ++it)
558 {
559 data << uint32(it->first);
560 for (const auto& entry : it->second)
561 data << uint32(entry);
562 }
563
564 SendPacket(&data);
565}
566
568{
569 uint32 count = recvData.ReadBits(22);
570
571 if (count >= MAX_QUEST_LOG_SIZE)
572 {
573 recvData.rfinish();
574 return;
575 }
576
577 ByteBuffer poiData;
578
579 WorldPacket data(SMSG_QUEST_POI_QUERY_RESPONSE, 4 + (4 + 4) * count);
580 data.WriteBits(count, 20);
581
582 for (uint32 i = 0; i < count; ++i)
583 {
584 uint32 questId;
585 recvData >> questId;
586
587 bool questOk = false;
588
589 uint16 questSlot = _player->FindQuestSlot(questId);
590
591 if (questSlot != MAX_QUEST_LOG_SIZE)
592 questOk = _player->GetQuestSlotQuestId(questSlot) == questId;
593
594 if (questOk)
595 {
596 QuestPOIVector const* POI = sObjectMgr->GetQuestPOIVector(questId);
597
598 if (POI)
599 {
600 data.WriteBits(POI->size(), 18); // POI count bits
601
602 for (QuestPOIVector::const_iterator itr = POI->begin(); itr != POI->end(); ++itr)
603 {
604 data.WriteBits(itr->points.size(), 21); // POI points count bits
605
606 poiData << uint32(itr->FloorId); // floor id
607
608 for (std::vector<QuestPOIPoint>::const_iterator itr2 = itr->points.begin(); itr2 != itr->points.end(); ++itr2)
609 {
610 poiData << int32(itr2->x); // POI point x
611 poiData << int32(itr2->y); // POI point y
612 }
613
614 poiData << int32(itr->ObjectiveIndex); // objective index
615 poiData << uint32(itr->Id); // POI index
616 poiData << uint32(0); // unknown (new 5.x.x)
617 poiData << uint32(0); // unknown (new 5.x.x)
618 poiData << uint32(itr->MapId); // mapid
619 poiData << uint32(itr->points.size()); // POI points count
620 poiData << uint32(itr->AreaId); // areaid
621 poiData << uint32(0); // unknown (new 5.x.x)
622 poiData << uint32(itr->Unk4); // unknown
623 poiData << uint32(itr->Unk3); // unknown
624 }
625
626 poiData << uint32(questId); // quest ID
627 poiData << uint32(POI->size()); // POI count
628 }
629 else
630 {
631 poiData << uint32(questId);
632 poiData << uint32(0);
633
634 data.WriteBits(0, 18);
635 }
636 }
637 else
638 {
639 poiData << uint32(questId);
640 poiData << uint32(0);
641
642 data.WriteBits(0, 18);
643 }
644 }
645
646 poiData << uint32(count);
647
648 data.FlushBits();
649 data.append(poiData);
650
651 SendPacket(&data);
652}
#define MAX_CREATURE_QUEST_ITEMS
Definition Creature.h:57
DBCStorage< MapEntry > sMapStore(MapEntryfmt)
std::int32_t int32
Definition Define.h:73
std::uint8_t uint8
Definition Define.h:79
std::uint32_t uint32
Definition Define.h:77
std::uint64_t uint64
Definition Define.h:76
std::uint16_t uint16
Definition Define.h:78
#define MAX_GAMEOBJECT_QUEST_ITEMS
Definition GameObject.h:20
#define SF_LOG_DEBUG(filterType__,...)
Definition Log.h:134
#define SF_LOG_ERROR(filterType__,...)
Definition Log.h:143
#define MAX_HEIGHT
Definition Map.h:141
#define sMapMgr
Definition MapManager.h:145
uint32 GUID_LOPART(uint64 x)
#define sObjectMgr
Definition ObjectMgr.h:1617
std::vector< QuestPOI > QuestPOIVector
Definition ObjectMgr.h:582
#define MAX_QUEST_LOG_SIZE
Definition QuestDef.h:22
@ QUEST_STATUS_COMPLETE
Definition QuestDef.h:87
#define MAX_GAMEOBJECT_DATA
#define MAX_DECLINED_NAME_CASES
Definition Unit.h:1098
void WriteGuidBytes(const ObjectGuid &guid, Offsets... offsets)
Definition ByteBuffer.h:264
bool WriteBit(uint32 bit)
Definition ByteBuffer.h:164
void put(size_t pos, T value)
Definition ByteBuffer.h:233
void WriteGuidMask(const ObjectGuid &guid, Offsets... offsets)
Definition ByteBuffer.h:248
void WriteString(std::string const &str)
Definition ByteBuffer.h:578
uint32 ReadBits(size_t bits)
Definition ByteBuffer.h:198
void ReadGuidBytes(ObjectGuid &guid, Offsets... offsets)
Definition ByteBuffer.h:256
void append(T value)
Definition ByteBuffer.h:147
void rfinish()
Definition ByteBuffer.h:478
size_t wpos() const
Definition ByteBuffer.h:483
void ReadGuidMask(ObjectGuid &guid, Offsets... offsets)
Definition ByteBuffer.h:240
void WriteBits(T value, size_t bits)
Definition ByteBuffer.h:192
size_t size() const
Definition ByteBuffer.h:609
void WriteByteSeq(uint8 b)
Definition ByteBuffer.h:227
void FlushBits()
Definition ByteBuffer.h:154
bool ReadBit()
Definition ByteBuffer.h:180
Definition Map.h:238
static Player * FindPlayer(uint64)
uint64 GetGUID() const
Definition Object.h:119
static void GetLocaleString(const StringVector &data, int loc_idx, std::string &value)
Definition ObjectMgr.h:1353
DeclinedName const * GetDeclinedNames() const
Definition Player.h:3049
Corpse * GetCorpse() const
Definition Player.cpp:5385
uint32 GetMapId() const
Definition Object.h:546
void HandleCorpseMapPositionQuery(WorldPacket &recvPacket)
void HandleQuestNPCQuery(WorldPacket &recvData)
LocaleConstant GetSessionDbLocaleIndex() const
void SendNameQueryOpcode(ObjectGuid guid)
void HandleNameQueryOpcode(WorldPacket &recvPacket)
Player * GetPlayer() const
void HandleCreatureQueryOpcode(WorldPacket &recvPacket)
Only static data is sent in this packet !!!
uint32 GetVirtualRealmID() const
void HandleGameObjectQueryOpcode(WorldPacket &recvPacket)
Only static data is sent in this packet !!!
void HandleCorpseQueryOpcode(WorldPacket &recvPacket)
void HandleNpcTextQueryOpcode(WorldPacket &recvPacket)
void SendPacket(WorldPacket const *packet, bool forced=false)
Send a packet to the client.
uint32 GetAccountId() const
void HandleRealmNameQueryOpcode(WorldPacket &recvPacket)
Player * _player
void HandlePageTextQueryOpcode(WorldPacket &recvPacket)
Only static data is sent in this packet !!!
void HandleQueryTimeOpcode(WorldPacket &recvPacket)
void SendQueryTimeResponse()
void HandleQuestPOIQuery(WorldPacket &recvData)
void SendRealmNameQueryOpcode(uint32 realmId)
@ SMSG_REALM_NAME_QUERY_RESPONSE
Definition Opcodes.h:929
@ SMSG_CREATURE_QUERY_RESPONSE
Definition Opcodes.h:628
@ SMSG_PAGE_TEXT_QUERY_RESPONSE
Definition Opcodes.h:842
@ SMSG_CORPSE_MAP_POSITION_QUERY_RESPONSE
Definition Opcodes.h:624
@ SMSG_QUERY_PLAYER_NAME_RESPONSE
Definition Opcodes.h:895
@ SMSG_QUEST_NPC_QUERY_RESPONSE
Definition Opcodes.h:913
@ SMSG_NPC_TEXT_UPDATE
Definition Opcodes.h:836
@ SMSG_GAMEOBJECT_QUERY_RESPONSE
Definition Opcodes.h:661
@ SMSG_QUERY_TIME_RESPONSE
Definition Opcodes.h:897
@ SMSG_CORPSE_QUERY
Definition Opcodes.h:626
@ SMSG_QUEST_POI_QUERY_RESPONSE
Definition Opcodes.h:914
#define sWorld
Definition World.h:910
RealmNameMap realmNameStore
Definition Main.cpp:72
uint32 m_realm
Definition World.h:547
std::string m_name
Definition World.h:548
uint32 Modelid4
Definition Creature.h:70
uint32 Modelid1
Definition Creature.h:67
std::string SubName
Definition Creature.h:72
uint32 Modelid2
Definition Creature.h:68
std::string Name
Definition Creature.h:71
uint32 KillCredit[MAX_KILL_CREDIT]
Definition Creature.h:66
uint32 type_flags
Definition Creature.h:105
uint32 expansion
Definition Creature.h:77
uint32 questItems[MAX_CREATURE_QUEST_ITEMS]
Definition Creature.h:125
uint32 type_flags2
Definition Creature.h:106
uint32 Modelid3
Definition Creature.h:69
uint32 movementId
Definition Creature.h:126
std::string IconName
Definition Creature.h:73
std::string name[MAX_DECLINED_NAME_CASES]
Definition Unit.h:1102
uint32 questItems[MAX_GAMEOBJECT_QUEST_ITEMS]
Definition GameObject.h:35
uint32 data[MAX_GAMEOBJECT_DATA]
Definition GameObject.h:385
std::string unk1
Definition GameObject.h:31
struct GameObjectTemplate::@046065176235271051340241126110345143267101032070::@076042223047135343272115231235004103107103052206 raw
std::string name
Definition GameObject.h:28
std::string castBarCaption
Definition GameObject.h:30
std::string IconName
Definition GameObject.h:29
GossipTextOption Options[MAX_GOSSIP_TEXT_OPTIONS]
Definition NPCHandler.h:31
std::string Text_0
Definition NPCHandler.h:20
uint16 NextPage
Definition ObjectMgr.h:52
std::string Text
Definition ObjectMgr.h:51
float GetPositionZ() const
Definition Object.h:330
float GetPositionX() const
Definition Object.h:328
float GetPositionY() const
Definition Object.h:329