84struct GossipSelectOptionRequest
98struct AddFriendRequest
104struct ContactNotesRequest
110struct BugReportRequest
117struct ResurrectResponseRequest
123struct AreaTriggerRequest
130struct ActionButtonRequest
132 ObjectGuid buttonStream;
136struct WorldTeleportRequest
146struct ComplainRequest
153 std::string description;
157struct TimeSyncRequest
163struct DiscardedTimeSyncAcksRequest
169struct UpdateMissileTrajectoryRequest
184struct SceneCompletedRequest
195GossipSelectOptionRequest ReadGossipSelectOptionRequest(
WorldPacket& recvData,
Player* player)
197 GossipSelectOptionRequest request;
198 uint8 boxTextLength = 0;
200 recvData >> request.gossipListId >> request.menuId;
202 request.guid[3] = recvData.
ReadBit();
203 request.guid[0] = recvData.
ReadBit();
204 request.guid[1] = recvData.
ReadBit();
205 request.guid[4] = recvData.
ReadBit();
206 request.guid[7] = recvData.
ReadBit();
207 request.guid[5] = recvData.
ReadBit();
208 request.guid[6] = recvData.
ReadBit();
209 boxTextLength = recvData.
ReadBits(8);
210 request.guid[2] = recvData.
ReadBit();
220 request.code = recvData.
ReadString(boxTextLength);
228SetPvPRequest ReadSetPvPRequest(
WorldPacket& recvData)
230 SetPvPRequest request;
231 request.hasStatus = recvData.
size() == 1;
232 request.newPvPStatus =
false;
234 if (request.hasStatus)
235 request.newPvPStatus = recvData.
ReadBit();
240UInt32Request ReadUInt32Request(
WorldPacket& recvData)
242 UInt32Request request;
243 recvData >> request.value;
247Int32Request ReadInt32Request(
WorldPacket& recvData)
249 Int32Request request;
250 recvData >> request.value;
254UInt8Request ReadUInt8Request(
WorldPacket& recvData)
256 UInt8Request request;
257 recvData >> request.value;
261UInt64Request ReadUInt64Request(
WorldPacket& recvData)
263 UInt64Request request;
264 recvData >> request.value;
268StringRequest ReadStringRequest(
WorldPacket& recvData)
270 StringRequest request;
271 recvData >> request.value;
275GuidRequest ReadSetSelectionRequest(
WorldPacket& recvData)
279 request.guid[7] = recvData.
ReadBit();
280 request.guid[6] = recvData.
ReadBit();
281 request.guid[5] = recvData.
ReadBit();
282 request.guid[4] = recvData.
ReadBit();
283 request.guid[3] = recvData.
ReadBit();
284 request.guid[2] = recvData.
ReadBit();
285 request.guid[1] = recvData.
ReadBit();
286 request.guid[0] = recvData.
ReadBit();
305AddFriendRequest ReadAddFriendRequest(
WorldPacket& recvData)
307 AddFriendRequest request;
308 recvData >> request.name;
309 recvData >> request.note;
313StringRequest ReadAddIgnoreRequest(
WorldPacket& recvData)
315 return ReadStringRequest(recvData);
318ContactNotesRequest ReadSetContactNotesRequest(
WorldPacket& recvData)
320 ContactNotesRequest request;
321 recvData >> request.guid >> request.note;
325BugReportRequest ReadBugReportRequest(
WorldPacket& recvData)
327 BugReportRequest request;
331 recvData >> request.suggestion >> contentLength;
332 request.content = recvData.
ReadString(contentLength);
334 recvData >> typeLength;
335 request.type = recvData.
ReadString(typeLength);
340void ReadReclaimCorpseRequest(
WorldPacket& recvData)
348ResurrectResponseRequest ReadResurrectResponseRequest(
WorldPacket& recvData)
350 ResurrectResponseRequest request;
352 recvData >> request.status;
354 request.guid[3] = recvData.
ReadBit();
355 request.guid[0] = recvData.
ReadBit();
356 request.guid[6] = recvData.
ReadBit();
357 request.guid[4] = recvData.
ReadBit();
358 request.guid[5] = recvData.
ReadBit();
359 request.guid[2] = recvData.
ReadBit();
360 request.guid[1] = recvData.
ReadBit();
361 request.guid[7] = recvData.
ReadBit();
375AreaTriggerRequest ReadAreaTriggerRequest(
WorldPacket& recvData)
377 AreaTriggerRequest request;
378 recvData >> request.triggerId;
379 request.unk1 = recvData.
ReadBit();
380 request.unk2 = recvData.
ReadBit();
384UInt32Request ReadRequestAccountDataRequest(
WorldPacket& recvData)
386 UInt32Request request;
387 request.value = recvData.
ReadBits(3);
391ActionButtonRequest ReadSetActionButtonRequest(
WorldPacket& recvData)
393 ActionButtonRequest request;
394 recvData >> request.slotId;
395 recvData.
ReadGuidMask(request.buttonStream, 7, 0, 5, 2, 1, 6, 3, 4);
396 recvData.
ReadGuidBytes(request.buttonStream, 6, 7, 3, 5, 2, 1, 4, 0);
400void ReadMoveTimeSkippedRequest(
WorldPacket& recvData)
409GuidRequest ReadInspectRequest(
WorldPacket& recvData)
413 request.guid[0] = recvData.
ReadBit();
414 request.guid[3] = recvData.
ReadBit();
415 request.guid[7] = recvData.
ReadBit();
416 request.guid[2] = recvData.
ReadBit();
417 request.guid[5] = recvData.
ReadBit();
418 request.guid[1] = recvData.
ReadBit();
419 request.guid[4] = recvData.
ReadBit();
420 request.guid[6] = recvData.
ReadBit();
434GuidRequest ReadInspectHonorStatsRequest(
WorldPacket& recvData)
437 recvData.
ReadGuidMask(request.guid, 4, 3, 6, 1, 0, 2, 5, 7);
438 recvData.
ReadGuidBytes(request.guid, 0, 5, 1, 4, 2, 6, 7, 3);
442WorldTeleportRequest ReadWorldTeleportRequest(
WorldPacket& recvData)
444 WorldTeleportRequest request;
445 recvData >> request.time;
446 recvData >> request.mapId;
447 recvData >> request.positionX;
448 recvData >> request.positionY;
449 recvData >> request.positionZ;
450 recvData >> request.orientation;
454ComplainRequest ReadComplainRequest(
WorldPacket& recvData)
456 ComplainRequest request = ComplainRequest();
457 recvData >> request.spamType;
458 recvData >> request.spammerGuid;
460 switch (request.spamType)
463 recvData >> request.unk1;
464 recvData >> request.unk2;
465 recvData >> request.unk3;
468 recvData >> request.unk1;
469 recvData >> request.unk2;
470 recvData >> request.unk3;
471 recvData >> request.unk4;
472 recvData >> request.description;
479BoolRequest ReadFarSightRequest(
WorldPacket& recvData)
482 request.value = recvData.
ReadBit();
486TimeSyncRequest ReadTimeSyncRequest(
WorldPacket& recvData)
488 TimeSyncRequest request;
489 recvData >> request.counter >> request.clientTicks;
493GuidRequest ReadQueryInspectAchievementsRequest(
WorldPacket& recvData)
497 request.guid[2] = recvData.
ReadBit();
498 request.guid[7] = recvData.
ReadBit();
499 request.guid[1] = recvData.
ReadBit();
500 request.guid[5] = recvData.
ReadBit();
501 request.guid[4] = recvData.
ReadBit();
502 request.guid[0] = recvData.
ReadBit();
503 request.guid[3] = recvData.
ReadBit();
504 request.guid[6] = recvData.
ReadBit();
518GuidRequest ReadAreaSpiritHealerQueryRequest(
WorldPacket& recvData)
521 recvData.
ReadGuidMask(request.guid, 5, 6, 0, 4, 1, 2, 7, 3);
522 recvData.
ReadGuidBytes(request.guid, 0, 2, 6, 7, 1, 5, 3, 4);
526GuidRequest ReadAreaSpiritHealerQueueRequest(
WorldPacket& recvData)
530 request.guid[5] = recvData.
ReadBit();
531 request.guid[4] = recvData.
ReadBit();
532 request.guid[0] = recvData.
ReadBit();
533 request.guid[2] = recvData.
ReadBit();
534 request.guid[7] = recvData.
ReadBit();
535 request.guid[1] = recvData.
ReadBit();
536 request.guid[6] = recvData.
ReadBit();
537 request.guid[3] = recvData.
ReadBit();
551BoolRequest ReadInstanceLockResponseRequest(
WorldPacket& recvPacket)
554 request.value = recvPacket.
ReadBit();
558UpdateMissileTrajectoryRequest ReadUpdateMissileTrajectoryRequest(
WorldPacket& recvPacket)
560 UpdateMissileTrajectoryRequest request;
561 recvPacket >> request.guid >> request.spellId >> request.elevation >> request.speed;
562 recvPacket >> request.curX >> request.curY >> request.curZ;
563 recvPacket >> request.targetX >> request.targetY >> request.targetZ;
564 recvPacket >> request.moveStop;
568GuidRequest ReadObjectUpdateFailedRequest(
WorldPacket& recvPacket)
572 request.guid[3] = recvPacket.
ReadBit();
573 request.guid[5] = recvPacket.
ReadBit();
574 request.guid[6] = recvPacket.
ReadBit();
575 request.guid[0] = recvPacket.
ReadBit();
576 request.guid[1] = recvPacket.
ReadBit();
577 request.guid[2] = recvPacket.
ReadBit();
578 request.guid[7] = recvPacket.
ReadBit();
579 request.guid[4] = recvPacket.
ReadBit();
593DiscardedTimeSyncAcksRequest ReadDiscardedTimeSyncAcksRequest(
WorldPacket& recvData)
595 DiscardedTimeSyncAcksRequest request;
596 request.hasCounter =
false;
599 bool hasInfo = !recvData.
ReadBit();
602 request.hasCounter =
true;
603 recvData >> request.counter;
609SceneCompletedRequest ReadSceneCompletedRequest(
WorldPacket& recvPacket)
611 SceneCompletedRequest request;
613 request.hasData = recvPacket.
ReadBit();
622 SF_LOG_DEBUG(
"network",
"WORLD: Recvd CMSG_REPOP_REQUEST Message");
624 ReadRepopRequest(recvData);
639 SF_LOG_DEBUG(
"network",
"HandleRepopRequestOpcode: got request after player %s(%d) was killed and before he was updated",
652 SF_LOG_DEBUG(
"network",
"WORLD: CMSG_GOSSIP_SELECT_OPTION");
654 GossipSelectOptionRequest request = ReadGossipSelectOptionRequest(recvData,
_player);
663 SF_LOG_DEBUG(
"network",
"WORLD: HandleGossipSelectOptionOpcode - Unit (GUID: %u) not found or you can't interact with him.",
uint32(
GUID_LOPART(request.guid)));
669 go =
_player->GetMap()->GetGameObject(request.guid);
688 SF_LOG_DEBUG(
"network",
"WORLD: HandleGossipSelectOptionOpcode - Script reloaded while in use, ignoring and set new scipt id");
693 _player->PlayerTalkClass->SendCloseGossip();
696 if (!request.code.empty())
701 if (!
sScriptMgr->OnGossipSelectCode(
_player, unit,
_player->PlayerTalkClass->GetGossipOptionSender(request.gossipListId),
_player->PlayerTalkClass->GetGossipOptionAction(request.gossipListId), request.code.c_str()))
702 _player->OnGossipSelect(unit, request.gossipListId, request.menuId);
707 sScriptMgr->OnGossipSelectCode(
_player, go,
_player->PlayerTalkClass->GetGossipOptionSender(request.gossipListId),
_player->PlayerTalkClass->GetGossipOptionAction(request.gossipListId), request.code.c_str());
715 if (!
sScriptMgr->OnGossipSelect(
_player, unit,
_player->PlayerTalkClass->GetGossipOptionSender(request.gossipListId),
_player->PlayerTalkClass->GetGossipOptionAction(request.gossipListId)))
716 _player->OnGossipSelect(unit, request.gossipListId, request.menuId);
721 if (!
sScriptMgr->OnGossipSelect(
_player, go,
_player->PlayerTalkClass->GetGossipOptionSender(request.gossipListId),
_player->PlayerTalkClass->GetGossipOptionAction(request.gossipListId)))
722 _player->OnGossipSelect(go, request.gossipListId, request.menuId);
730 SF_LOG_DEBUG(
"network",
"WORLD: Recvd CMSG_WHO Message");
732 time_t now = time(NULL);
737 uint32 levelMin, levelMax, raceMask, classMask, zonesCount, wordCount;
739 bool requestServerInfo, showEnemies, showArenaPlayers, exactName;
740 uint8 playerLen, guildLen, realmNameLen, guildRealmNameLen;
741 std::string playerName, guildName, realmName, guildRealmName;
743 recvData >> classMask;
744 recvData >> raceMask;
745 recvData >> levelMax;
746 recvData >> levelMin;
748 showEnemies = recvData.
ReadBit();
749 exactName = recvData.
ReadBit();
750 requestServerInfo = recvData.
ReadBit();
751 guildRealmNameLen = recvData.
ReadBits(9);
752 showArenaPlayers = recvData.
ReadBit();
759 realmNameLen = recvData.
ReadBits(9);
767 std::string* words =
new std::string[wordCount];
769 for (
uint8 i = 0; i < wordCount; i++)
772 std::wstring wWords[4];
773 for (
uint32 i = 0; i < wordCount; ++i)
783 SF_LOG_DEBUG(
"network",
"String %u: %s", i, temp.c_str());
786 guildRealmName = recvData.
ReadString(guildRealmNameLen);
788 for (
uint32 i = 0; i < zonesCount; ++i)
790 recvData >> zoneIds[i];
796 realmName = recvData.
ReadString(realmNameLen);
799 uint32 virtualRealmAddress = 0;
800 int32 faction = 0, locale = 0;
802 if (requestServerInfo)
805 recvData >> virtualRealmAddress;
809 SF_LOG_DEBUG(
"network",
"Minlvl %u, maxlvl %u, name %s, guild %s, racemask %u, classmask %u, zones %u, strings %u", levelMin, levelMax, playerName.c_str(), guildName.c_str(), raceMask, classMask, zonesCount, wordCount);
811 std::wstring wPlayerName, wGuildName;
828 uint8 displaycount = 0, matchcount = 0;
840 Player* target = itr->second;
859 if (level < levelMin || level > levelMax)
864 if (!(classMask & (1 << class_)))
869 if (!(raceMask & (1 << race)))
876 for (
uint32 i = 0; i < zonesCount; ++i)
878 if (zoneIds[i] == zoneId)
889 std::string pname = target->
GetName();
895 if (!(wPlayerName.empty() || wpname.find(wPlayerName) != std::wstring::npos))
904 if (!(wGuildName.empty() || wgname.find(wGuildName) != std::wstring::npos))
912 for (
uint32 i = 0; i < wordCount; ++i)
914 if (!wWords[i].empty())
916 if (wgname.find(wWords[i]) != std::wstring::npos ||
917 wpname.find(wWords[i]) != std::wstring::npos ||
960 if (
DeclinedName const* names = itr->second->GetDeclinedNames())
963 data.
WriteBits(names->name[i].size(), 14);
996 bytesData <<
uint8(class_);
1001 if (
DeclinedName const* names = itr->second->GetDeclinedNames())
1007 bytesData <<
uint8(race);
1014 bytesData <<
uint8(gender);
1016 bytesData <<
uint8(level);
1017 bytesData <<
int32(zoneId);
1023 data.
PutBits(pos, displaycount, 6);
1031 SF_LOG_DEBUG(
"network",
"WORLD: Send SMSG_WHO Message");
1048 if (
GetPlayer()->IsInCombat() && !canLogoutInCombat)
1087 SF_LOG_DEBUG(
"network",
"WORLD: Recvd CMSG_PLAYER_LOGOUT Message");
1092 SF_LOG_DEBUG(
"network",
"WORLD: Recvd CMSG_LOGOUT_CANCEL Message");
1116 SF_LOG_DEBUG(
"network",
"WORLD: Sent SMSG_LOGOUT_CANCEL_ACK Message");
1121 SetPvPRequest request = ReadSetPvPRequest(recvData);
1122 if (request.hasStatus)
1150 UInt32Request request = ReadUInt32Request(recvData);
1152 SF_LOG_DEBUG(
"network",
"WORLD: Recvd ZONE_UPDATE: %u", request.value);
1174 std::vector<uint32> GraveyardIds;
1176 GraveYardContainer::const_iterator it;
1177 std::pair<GraveYardContainer::const_iterator, GraveYardContainer::const_iterator> range;
1178 range =
sObjectMgr->GraveYardStore.equal_range(zoneId);
1180 for (it = range.first; it != range.second && GraveyardIds.size() < 16; ++it)
1182 if (it->second.team == 0 || it->second.team == team)
1183 GraveyardIds.push_back(it->first);
1186 if (GraveyardIds.empty())
1188 SF_LOG_DEBUG(
"network",
"No graveyards found for zone %u for %u (team %u) in CMSG_REQUEST_CEMETERY_LIST", zoneId,
m_GUIDLow, team);
1192 bool IsGossipTriggered =
false;
1195 data.
WriteBits(GraveyardIds.size(), 22);
1196 data << IsGossipTriggered;
1198 for (
uint32 i = 0; i < GraveyardIds.size(); ++i)
1199 data <<
uint32(GraveyardIds[i]);
1206 GuidRequest request = ReadSetSelectionRequest(recvData);
1207 _player->SetSelection(request.guid);
1213 UInt32Request request = ReadUInt32Request(recvData);
1215 _player->SetStandState(request.value);
1220 ReadContactListRequest(recvData);
1221 SF_LOG_DEBUG(
"network",
"WORLD: Received CMSG_CONTACT_LIST");
1227 SF_LOG_DEBUG(
"network",
"WORLD: Received CMSG_ADD_FRIEND");
1229 AddFriendRequest request = ReadAddFriendRequest(recvData);
1231 request.name = request.name.substr(0, request.name.find(
"-"));
1235 SF_LOG_DEBUG(
"network",
"WORLD: %s asked to add friend : '%s'",
1236 GetPlayer()->GetName().c_str(), request.name.c_str());
1261 Field* fields = result->Fetch();
1265 friendAccountId = fields[2].
GetUInt32();
1271 if (friendGuid ==
GetPlayer()->GetGUID())
1297 SF_LOG_DEBUG(
"network",
"WORLD: Sent (SMSG_FRIEND_STATUS)");
1302 SF_LOG_DEBUG(
"network",
"WORLD: Received CMSG_DEL_FRIEND");
1304 UInt64Request request = ReadUInt64Request(recvData);
1310 SF_LOG_DEBUG(
"network",
"WORLD: Sent motd (SMSG_FRIEND_STATUS)");
1315 SF_LOG_DEBUG(
"network",
"WORLD: Received CMSG_ADD_IGNORE");
1317 StringRequest request = ReadAddIgnoreRequest(recvData);
1322 SF_LOG_DEBUG(
"network",
"WORLD: %s asked to Ignore: '%s'",
1323 GetPlayer()->GetName().c_str(), request.value.c_str());
1349 if (IgnoreGuid ==
GetPlayer()->GetGUID())
1366 SF_LOG_DEBUG(
"network",
"WORLD: Sent (SMSG_FRIEND_STATUS)");
1371 SF_LOG_DEBUG(
"network",
"WORLD: Received CMSG_DEL_IGNORE");
1373 UInt64Request request = ReadUInt64Request(recvData);
1379 SF_LOG_DEBUG(
"network",
"WORLD: Sent motd (SMSG_FRIEND_STATUS)");
1385 ContactNotesRequest request = ReadSetContactNotesRequest(recvData);
1391 BugReportRequest request = ReadBugReportRequest(recvData);
1393 if (request.suggestion == 0)
1394 SF_LOG_DEBUG(
"network",
"WORLD: Received CMSG_BUG [Bug Report]");
1396 SF_LOG_DEBUG(
"network",
"WORLD: Received CMSG_BUG [Suggestion]");
1399 SF_LOG_DEBUG(
"network",
"%s", request.content.c_str());
1411 SF_LOG_DEBUG(
"network",
"WORLD: Received CMSG_RECLAIM_CORPSE");
1413 ReadReclaimCorpseRequest(recvData);
1447 SF_LOG_DEBUG(
"network",
"WORLD: Received CMSG_RESURRECT_RESPONSE");
1449 ResurrectResponseRequest request = ReadResurrectResponseRequest(recvData);
1454 if (request.status == 1)
1460 if (!
GetPlayer()->IsRessurectRequestedBy(request.guid))
1468 AreaTriggerRequest request = ReadAreaTriggerRequest(recvData);
1470 SF_LOG_DEBUG(
"network",
"CMSG_AREATRIGGER. Trigger ID: %u, Unk1: %u, Unk2: %u", request.triggerId, request.unk1, request.unk2);
1475 SF_LOG_DEBUG(
"network",
"HandleAreaTriggerOpcode: Player '%s' (GUID: %u) in flight, ignore Area Trigger ID:%u, unk1: %u, unk2: %u",
1476 player->
GetName().c_str(), player->
GetGUIDLow(), request.triggerId, request.unk1, request.unk2);
1483 SF_LOG_DEBUG(
"network",
"HandleAreaTriggerOpcode: Player '%s' (GUID: %u) send unknown (by DBC) Area Trigger ID:%u, unk1: %u, unk2: %u",
1484 player->
GetName().c_str(), player->
GetGUIDLow(), request.triggerId, request.unk1, request.unk2);
1490 SF_LOG_DEBUG(
"network",
"HandleAreaTriggerOpcode: Player '%s' (GUID: %u) too far (trigger map: %u player map: %u), ignore Area Trigger ID: %u, unk1: %u, unk2: %u",
1496 const float delta = 5.0f;
1501 float dist = player->
GetDistance(atEntry->
x, atEntry->
y, atEntry->
z);
1502 if (dist > atEntry->
radius + delta)
1504 SF_LOG_DEBUG(
"network",
"HandleAreaTriggerOpcode: Player '%s' (GUID: %u) too far (radius: %f distance: %f), ignore Area Trigger ID: %u, unk1: %u, unk2: %u",
1505 player->
GetName().c_str(), player->
GetGUIDLow(), atEntry->
radius, dist, request.triggerId, request.unk1, request.unk2);
1518 double sinVal = std::sin(rotation);
1519 double cosVal = std::cos(rotation);
1524 float rotPlayerX = float(atEntry->
x + playerBoxDistX * cosVal - playerBoxDistY * sinVal);
1525 float rotPlayerY = float(atEntry->
y + playerBoxDistY * cosVal + playerBoxDistX * sinVal);
1529 float dx = rotPlayerX - atEntry->
x;
1530 float dy = rotPlayerY - atEntry->
y;
1531 if ((fabs(dx) > atEntry->
box_x / 2 + delta) ||
1532 (fabs(dy) > atEntry->
box_y / 2 + delta) ||
1533 (fabs(dz) > atEntry->
box_z / 2 + delta))
1535 SF_LOG_DEBUG(
"network",
"HandleAreaTriggerOpcode: Player '%s' (GUID: %u) too far (1/2 box X: %f 1/2 box Y: %f 1/2 box Z: %f rotatedPlayerX: %f rotatedPlayerY: %f dZ:%f), ignore Area Trigger ID: %u, unk1: %u, unk2: %u",
1536 player->
GetName().c_str(), player->
GetGUIDLow(), atEntry->
box_x / 2, atEntry->
box_y / 2, atEntry->
box_z / 2, rotPlayerX, rotPlayerY, dz, request.triggerId, request.unk1, request.unk2);
1544 if (
sScriptMgr->OnAreaTrigger(player, atEntry))
1548 if (
uint32 questId =
sObjectMgr->GetQuestForAreaTrigger(request.triggerId))
1552 if (
sObjectMgr->IsTavernAreaTrigger(request.triggerId))
1576 player->
InnEnter(time(NULL), restArea->
MapId, restArea->
X, restArea->
Y, restArea->
Z,
1579 player->
InnEnter(time(NULL), atEntry->
mapid, atEntry->
x, atEntry->
y, atEntry->
z);
1583 if (
sWorld->IsFFAPvPRealm())
1592 bg->HandleAreaTrigger(player, request.triggerId);
1597 if (pvp->HandleAreaTrigger(
_player, request.triggerId))
1604 bool teleported =
false;
1621 SF_LOG_DEBUG(
"network",
"WORLD: Received CMSG_UPDATE_ACCOUNT_DATA");
1623 uint32 timestamp = 0, decompressedSize = 0, compCount = 0;
1625 recvData >> decompressedSize >> timestamp >> compCount;
1627 if (decompressedSize == 0)
1640 if (decompressedSize > 0xFFFF)
1643 SF_LOG_DEBUG(
"network",
"UAD: Account data packet too big, size %u", decompressedSize);
1648 dest.
resize(decompressedSize);
1650 uLongf realSize = decompressedSize;
1654 SF_LOG_DEBUG(
"network",
"UAD: Failed to decompress account data");
1658 recvData.
rpos(recvData.
rpos() + compCount);
1665 SF_LOG_DEBUG(
"network",
"UAD: Unknown account data type: %u", type);
1682 SF_LOG_DEBUG(
"network",
"WORLD: Received CMSG_REQUEST_ACCOUNT_DATA");
1684 UInt32Request request = ReadRequestAccountDataRequest(recvData);
1686 SF_LOG_DEBUG(
"network",
"RAD: type %u", request.value);
1691 SF_LOG_DEBUG(
"network",
"RAD: Unknown account data type: %u", request.value);
1699 uLongf destSize = compressBound(size);
1704 if (size && compress(dest.
contents(), &destSize, (
uint8 const*)adata->
Data.c_str(), size) != Z_OK)
1706 SF_LOG_DEBUG(
"network",
"RAD: Failed to compress account data");
1721 data <<
uint32(destSize);
1738 ActionButtonRequest request = ReadSetActionButtonRequest(recvData);
1744 SF_LOG_DEBUG(
"network",
"CMSG_SET_ACTION_BUTTON slotId: %u actionId: %u buttontype: %u", request.slotId, button->
id, button->
unk);
1754 SF_LOG_DEBUG(
"network",
"WORLD: Received CMSG_COMPLETE_CINEMATIC");
1761 SF_LOG_DEBUG(
"network",
"WORLD: Received CMSG_NEXT_CINEMATIC_CAMERA");
1766 SF_LOG_DEBUG(
"network",
"WORLD: Received CMSG_MOVE_TIME_SKIPPED");
1768 ReadMoveTimeSkippedRequest(recvData);
1779 SF_LOG_DEBUG(
"network",
"WORLD: CMSG_MOVE_FEATHER_FALL_ACK");
1843 UInt8Request request = ReadUInt8Request(recvData);
1847 if (request.value != 0)
1848 SF_LOG_ERROR(
"network",
"WorldSession::HandleSetActionBarToggles in not logged state with value: %u, ignored",
uint32(request.value));
1857 UInt8Request request = ReadUInt8Request(recvData);
1862 data <<
uint8(request.value);
1868 GuidRequest request = ReadInspectRequest(recvData);
1870 SF_LOG_DEBUG(
"network",
"WORLD: Received CMSG_INSPECT");
1879 _player->SendInspectResult(player);
1884 GuidRequest request = ReadInspectHonorStatsRequest(recvData);
1910 WorldTeleportRequest request = ReadWorldTeleportRequest(recvData);
1912 SF_LOG_DEBUG(
"network",
"WORLD: Received CMSG_WORLD_TELEPORT");
1916 SF_LOG_DEBUG(
"network",
"Player '%s' (GUID: %u) in flight, ignore worldport command.",
1921 SF_LOG_DEBUG(
"network",
"CMSG_WORLD_TELEPORT: Player = %s, Time = %u, map = %u, x = %f, y = %f, z = %f, o = %f",
1922 GetPlayer()->GetName().c_str(), request.time, request.mapId, request.positionX, request.positionY, request.positionZ, request.orientation);
1925 GetPlayer()->
TeleportTo(request.mapId, request.positionX, request.positionY, request.positionZ, request.orientation);
1933 StringRequest request = ReadStringRequest(recvData);
1969 Field* fields = result->Fetch();
1970 std::string acc = fields[0].
GetString();
1973 std::string email = fields[1].
GetString();
1976 std::string lastip = fields[2].
GetString();
1980 std::string msg = request.value +
"'s " +
"account is " + acc +
", e-mail: " + email +
", last ip: " + lastip;
1989 SF_LOG_DEBUG(
"network",
"Received whois command from player %s for character %s",
1990 GetPlayer()->GetName().c_str(), request.value.c_str());
1997 ComplainRequest request = ReadComplainRequest(recvData);
2008 SF_LOG_DEBUG(
"network",
"REPORT SPAM: type %u, guid %u, unk1 %u, unk2 %u, unk3 %u, unk4 %u, message %s", request.spamType,
GUID_LOPART(request.spammerGuid), request.unk1, request.unk2, request.unk3, request.unk4, request.description.c_str());
2015 UInt32Request request = ReadUInt32Request(recvData);
2016 std::string
const splitDate =
"01/01/01";
2017 uint32 const splitState = 0;
2022 data << request.value;
2032 BoolRequest request = ReadFarSightRequest(recvData);
2054 Int32Request request = ReadInt32Request(recvData);
2055 int32 title = request.value;
2072 data <<
uint32(TitleIndex);
2079 data <<
uint32(TitleIndex);
2087 TimeSyncRequest request = ReadTimeSyncRequest(recvData);
2089 while (!
_player->m_timeSyncQueue.empty() &&
_player->m_timeSyncQueue.front() < request.counter)
2091 SF_LOG_DEBUG(
"network",
"Discarding stale time sync counter %u for player %s before response %u",
2092 _player->m_timeSyncQueue.front(),
_player->GetName().c_str(), request.counter);
2093 _player->m_timeSyncQueue.pop();
2096 if (
_player->m_timeSyncQueue.empty())
2098 SF_LOG_DEBUG(
"network",
"Ignoring time sync response %u from player %s with no pending request",
2099 request.counter,
_player->GetName().c_str());
2103 if (request.counter !=
_player->m_timeSyncQueue.front())
2105 SF_LOG_DEBUG(
"network",
"Ignoring out of order time sync response %u from player %s, expected %u",
2106 request.counter,
_player->GetName().c_str(),
_player->m_timeSyncQueue.front());
2110 SF_LOG_DEBUG(
"network",
"Time sync received: counter %u, client ticks %u, time since last sync %u", request.counter, request.clientTicks, request.clientTicks -
_player->m_timeSyncClient);
2115 SF_LOG_DEBUG(
"network",
"Our ticks: %u, diff %u, latency %u", ourTicks, ourTicks - request.clientTicks,
GetLatency());
2117 _player->m_timeSyncClient = request.clientTicks;
2118 _player->m_timeSyncQueue.pop();
2123 SF_LOG_DEBUG(
"network",
"WORLD: CMSG_RESET_INSTANCES");
2127 if (group->IsLeader(
_player->GetGUID()))
2136 SF_LOG_DEBUG(
"network",
"Received: CMSG_SET_DUNGEON_DIFFICULTY");
2138 UInt32Request request = ReadUInt32Request(recvData);
2141 if (!difficultyEntry)
2143 SF_LOG_DEBUG(
"network",
"%d sent an invalid instance mode %u!",
2144 _player->GetGUIDLow(), request.value);
2150 SF_LOG_DEBUG(
"network",
"%d sent an non-dungeon instance mode %d!",
2156 if (difficulty ==
_player->GetDungeonDifficulty())
2163 SF_LOG_DEBUG(
"network",
"player (Name: %s, GUID: %u) tried to reset the instance while player is inside!",
2175 Player* groupGuy = itr->GetSource();
2179 if (!groupGuy->
IsInMap(groupGuy))
2184 SF_LOG_DEBUG(
"network",
"player %d tried to reset the instance while group member (Name: %s, GUID: %u) is inside!",
2199 _player->SendDungeonDifficulty();
2205 SF_LOG_DEBUG(
"network",
"Received: CMSG_SET_RAID_DIFFICULTY");
2207 UInt32Request request = ReadUInt32Request(recvData);
2210 if (!difficultyEntry)
2212 SF_LOG_DEBUG(
"network",
"%d sent an invalid instance mode %u!",
2213 _player->GetGUIDLow(), request.value);
2218 SF_LOG_DEBUG(
"network",
"%d sent an non-raid instance mode %u!",
2224 if (difficulty ==
_player->GetRaidDifficulty())
2229 if (map && map->
IsRaid())
2231 SF_LOG_DEBUG(
"network",
"player %d tried to reset the raid while inside!",
_player->GetGUIDLow());
2242 Player* groupGuy = itr->GetSource();
2246 if (!groupGuy->
IsInMap(groupGuy))
2251 SF_LOG_DEBUG(
"network",
"player %d tried to reset the raid while inside!",
_player->GetGUIDLow());
2265 _player->SendRaidDifficulty();
2271 SF_LOG_DEBUG(
"network",
"WORLD: CMSG_CANCEL_MOUNT_AURA");
2292 _player->VehicleSpellInitialize();
2293 else if (
Unit* minion =
_player->GetFirstControlled())
2295 if (minion->IsPet())
2296 _player->PetSpellInitialize();
2298 _player->CharmSpellInitialize();
2304 SF_LOG_DEBUG(
"network",
"WORLD: CMSG_SET_TAXI_BENCHMARK_MODE");
2306 UInt8Request request = ReadUInt8Request(recvData);
2310 SF_LOG_DEBUG(
"network",
"Client used \"/timetest %d\" command", request.value);
2315 GuidRequest request = ReadQueryInspectAchievementsRequest(recvData);
2329 UInt32Request request = ReadUInt32Request(recvData);
2332 guild->GetAchievementMgr().SendAchievementInfo(
_player, request.value);
2338 SF_LOG_DEBUG(
"network",
"WORLD: CMSG_WORLD_STATE_UI_TIMER_UPDATE");
2341 data <<
uint32(time(NULL));
2348 SF_LOG_DEBUG(
"network",
"WORLD: CMSG_READY_FOR_ACCOUNT_DATA_TIMES");
2362 data <<
uint32(phaseIds.size()) * 2;
2363 for (std::set<uint32>::const_iterator itr = phaseIds.begin(); itr != phaseIds.end(); ++itr)
2374 data <<
uint32(worldMapAreas.size()) * 2;
2375 for (std::set<uint32>::const_iterator itr = worldMapAreas.begin(); itr != worldMapAreas.end(); ++itr)
2378 data <<
uint32(terrainswaps.size()) * 2;
2379 for (std::set<uint32>::const_iterator itr = terrainswaps.begin(); itr != terrainswaps.end(); ++itr)
2384 data <<
uint32(phaseIds.size() ? 0 : 8);
2392 SF_LOG_DEBUG(
"network",
"WORLD: CMSG_AREA_SPIRIT_HEALER_QUERY");
2396 GuidRequest request = ReadAreaSpiritHealerQueryRequest(recvData);
2409 bf->SendAreaSpiritHealerQueryOpcode(
_player, request.guid);
2414 SF_LOG_DEBUG(
"network",
"WORLD: CMSG_AREA_SPIRIT_HEALER_QUEUE");
2418 GuidRequest request = ReadAreaSpiritHealerQueueRequest(recvData);
2431 bf->AddPlayerToResurrectQueue(request.guid,
_player->GetGUID());
2450 _player->ResurrectPlayer(100);
2456 BoolRequest request = ReadInstanceLockResponseRequest(recvPacket);
2458 if (!
_player->HasPendingBind())
2460 SF_LOG_INFO(
"network",
"InstanceLockResponse: Player %s (guid %u) tried to bind himself/teleport to graveyard without a pending bind!",
2470 _player->SetPendingBind(0, 0);
2476 bool AlwaysSkipHotfixReply(
uint32 type)
2494 bool IsPlausibleHotfixEntry(
uint32 entry)
2496 return entry != 0 && entry <= 0x00FFFFFF;
2501 if (AlwaysSkipHotfixReply(type))
2503 return IsPlausibleHotfixEntry(entry);
2510 data <<
uint32(time(NULL));
2515 SF_LOG_INFO(
"network",
"SMSG_DB_REPLY: empty hotfix entry %u type %u (%s)", entry, type, reason);
2518 bool IsKnownHotfixType(
uint32 type)
2592 bool const knownHotfixType = IsKnownHotfixType(type);
2593 bool const knownUnsupportedType = !store && knownHotfixType;
2594 if (!store && !knownUnsupportedType)
2596 SF_LOG_ERROR(
"network",
"CMSG_REQUEST_HOTFIX: Received unknown hotfix type: %u", type);
2603 std::vector<ObjectGuid> guids(count);
2604 for (
uint32 i = 0; i < count; ++i)
2606 recvPacket.
ReadGuidMask(guids[i], 6, 3, 0, 1, 4, 5, 7, 2);
2609 std::vector<uint32> entries(count);
2610 for (
uint32 i = 0; i < count; ++i)
2613 recvPacket >> entries[i];
2617 if (knownUnsupportedType)
2619 for (
uint32 i = 0; i < count; ++i)
2621 if (!ShouldSendHotfixReply(type, entries[i]))
2623 SF_LOG_INFO(
"network",
"CMSG_REQUEST_HOTFIX: skipped entry %u type %u", entries[i], type);
2627 SendEmptyDbReply(
this, entries[i], type,
"unsupported store");
2633 for (
uint32 i = 0; i < count; ++i)
2635 if (!ShouldSendHotfixReply(type, entries[i]))
2637 SF_LOG_INFO(
"network",
"CMSG_REQUEST_HOTFIX: skipped entry %u type %u", entries[i], type);
2644 SF_LOG_INFO(
"network",
"SMSG_DB_REPLY: broadcast text hotfix entry %u (gossip hack)", entries[i]);
2656 data <<
uint32(entries[i]);
2657 data <<
uint32(time(NULL));
2664 SF_LOG_DEBUG(
"network",
"SMSG_DB_REPLY: Sent hotfix entry: %u type: %u", entries[i], type);
2676 std::string defaultText =
"Greetings, $n";
2680 uint16 nrmTextLength = pGossip ? pGossip->
Options[0].
Text_0.length() : defaultText.length();
2681 uint16 altTextLength = pGossip ? pGossip->
Options[0].
Text_1.length() : defaultText.length();
2685 buffer <<
uint16(nrmTextLength);
2688 buffer << std::string(pGossip ? pGossip->
Options[0].
Text_0 : defaultText);
2690 buffer <<
uint16(altTextLength);
2693 buffer << std::string(pGossip ? pGossip->
Options[0].
Text_1 : defaultText);
2702 data <<
uint32(time(NULL));
2712 SF_LOG_DEBUG(
"network",
"WORLD: CMSG_UPDATE_MISSILE_TRAJECTORY");
2714 UpdateMissileTrajectoryRequest request = ReadUpdateMissileTrajectoryRequest(recvPacket);
2725 pos.
Relocate(request.curX, request.curY, request.curZ);
2729 pos.
Relocate(request.targetX, request.targetY, request.targetZ);
2735 if (request.moveStop)
2738 recvPacket >> opcode;
2746 ReadUInt8Request(recvPacket);
2753 GuidRequest request = ReadObjectUpdateFailedRequest(recvPacket);
2756 if (request.guid ==
GetPlayer()->GetGUID())
2774 SF_LOG_DEBUG(
"network",
"WORLD: CMSG_SAVE_CUF_PROFILES");
2788 for (
uint8 i = 0; i < count; ++i)
2819 for (
uint8 i = 0; i < count; ++i)
2822 recvPacket >> profiles[i]->
Unk146;
2825 recvPacket >> profiles[i]->
Unk148;
2826 recvPacket >> profiles[i]->
SortBy;
2827 recvPacket >> profiles[i]->
Unk150;
2829 recvPacket >> profiles[i]->
Unk147;
2830 recvPacket >> profiles[i]->
Unk152;
2831 recvPacket >> profiles[i]->
Unk154;
2901#define JOIN_THE_ALLIANCE 1
2902#define JOIN_THE_HORDE 0
2906 UInt32Request request = ReadUInt32Request(recvPacket);
2916 WorldLocation location(1, 1357.62f, -4373.55f, 26.13f, 0.13f);
2917 _player->TeleportTo(location);
2918 _player->SetHomebind(location, 363);
2919 _player->learnSpell(669,
false);
2920 _player->learnSpell(108127,
false);
2927 WorldLocation location(0, -8960.02f, 516.10f, 96.36f, 0.67f);
2928 _player->TeleportTo(location);
2929 _player->SetHomebind(location, 9);
2930 _player->learnSpell(668,
false);
2931 _player->learnSpell(108127,
false);
2935 _player->KilledMonsterCredit(64594);
2942 SF_LOG_DEBUG(
"network",
"WORLD: CMSG_DISCARDED_TIME_SYNC_ACKS");
2944 DiscardedTimeSyncAcksRequest request = ReadDiscardedTimeSyncAcksRequest(recvData);
2948 if (!request.hasCounter)
2951 while (!
_player->m_timeSyncQueue.empty())
2954 _player->m_timeSyncQueue.pop();
2956 SF_LOG_DEBUG(
"network",
"Discarded time sync ack %u from player %s, removed pending counter %u",
2957 request.counter,
_player->GetName().c_str(), counter);
2959 if (counter >= request.counter)
2967 data <<
uint32(SoundKitID);
2976 _player->SendDirectMessage(&data);
2982 SceneCompletedRequest request = ReadSceneCompletedRequest(recvPacket);
2983 SF_LOG_ERROR(
"network",
"hasData %u", request.hasData);
2993 data <<
uint32(drunkenState);
2995 _player->SendMessageToSet(&data,
true);
@ CHAR_SEL_GUID_RACE_ACC_BY_NAME
#define CORPSE_RECLAIM_RADIUS
@ CORPSE_RESURRECTABLE_PVP
DB2StorageBase const * GetDB2Storage(uint32 type)
@ AREA_FLAG_WINTERGRASP_2
DBCStorage< AreaTableEntry > sAreaStore(AreaTableEntryfmt)
DBCStorage< AreaTriggerEntry > sAreaTriggerStore(AreaTriggerEntryfmt)
DBCStorage< DifficultyEntry > sDifficultyStore(Difficultyfmt)
AreaTableEntry const * GetAreaEntryByAreaID(uint32 area_id)
@ LANG_PLAYER_NOT_EXIST_OR_OFFLINE
@ LANG_ACCOUNT_FOR_PLAYER_NOT_FOUND
@ LANG_DEBUG_AREATRIGGER_REACHED
@ LANG_YOU_NOT_HAVE_PERMISSION
@ LANG_NEED_CHARACTER_NAME
#define SF_LOG_DEBUG(filterType__,...)
#define SF_LOG_ERROR(filterType__,...)
#define SF_LOG_INFO(filterType__,...)
@ LOGIN_SEL_ACCOUNT_WHOIS
@ INSTANCE_RESET_CHANGE_DIFFICULTY
#define JOIN_THE_ALLIANCE
#define MAX_GOSSIP_TEXT_OPTIONS
uint32 GUID_LOPART(uint64 x)
bool IS_GAMEOBJECT_GUID(uint64 guid)
bool IS_CRE_OR_VEH_GUID(uint64 guid)
uint64 MAKE_NEW_GUID(uint32 l, uint32 e, uint32 h)
uint32 GUID_HIPART(uint64 guid)
bool normalizePlayerName(std::string &name)
@ TELE_TO_NOT_LEAVE_TRANSPORT
@ PLAYER_FLAGS_TAXI_BENCHMARK
#define ACTION_BUTTON_TYPE(X)
@ CUF_DISPLAY_NON_BOSS_DEBUFFS
@ CUF_AUTO_ACTIVATE_40_PLAYERS
@ CUF_DISPLAY_HEAL_PREDICTION
@ CUF_AUTO_ACTIVATE_5_PLAYERS
@ CUF_AUTO_ACTIVATE_3_PLAYERS
@ CUF_DISPLAY_HORIZONTAL_GROUPS
@ CUF_AUTO_ACTIVATE_SPEC_1
@ CUF_DISPLAY_MAIN_TANK_AND_ASSIST
@ CUF_DISPLAY_ONLY_DISPELLABLE_DEBUFFS
@ CUF_AUTO_ACTIVATE_SPEC_2
@ CUF_AUTO_ACTIVATE_2_PLAYERS
@ CUF_DISPLAY_AGGRO_HIGHLIGHT
@ CUF_AUTO_ACTIVATE_25_PLAYERS
@ CUF_KEEP_GROUPS_TOGETHER
@ CUF_AUTO_ACTIVATE_10_PLAYERS
@ CUF_AUTO_ACTIVATE_15_PLAYERS
#define ACTION_BUTTON_ACTION(X)
#define MAX_CUF_PROFILES
Maximum number of CompactUnitFrames profiles.
Skyfire::AutoPtr< PreparedResultSet, Skyfire::Mutex > PreparedQueryResult
@ QUEST_STATUS_INCOMPLETE
FriendsResult
Results of friend related commands.
@ FRIEND_IGNORE_NOT_FOUND
@ SPELL_AURA_PREVENT_RESURRECTION
@ UNIT_MASK_CONTROLABLE_GUARDIAN
#define MAX_DECLINED_NAME_CASES
@ UNIT_BYTE2_FLAG_FFA_PVP
@ UNIT_FIELD_SHAPESHIFT_FORM
@ PLAYER_FIELD_FARSIGHT_OBJECT
@ PLAYER_FIELD_LIFETIME_MAX_RANK
@ PLAYER_FIELD_YESTERDAY_HONORABLE_KILLS
@ PLAYER_FIELD_PLAYER_TITLE
@ PLAYER_FIELD_LIFETIME_HONORABLE_KILLS
@ PLAYER_FIELD_PLAYER_FLAGS
bool Utf8FitTo(const std::string &str, const std::wstring &search)
bool Utf8toWStr(char const *utf8str, size_t csize, wchar_t *wstr, size_t &wsize)
void wstrToLower(std::wstring &str)
static AccountTypes GetSecurity(uint32 accountId)
static bool IsPlayerAccount(AccountTypes gmlevel)
void AddPlayerToResurrectQueue(uint64 npc_guid, uint64 player_guid)
void WriteGuidBytes(const ObjectGuid &guid, Offsets... offsets)
bool WriteBit(uint32 bit)
void WriteGuidMask(const ObjectGuid &guid, Offsets... offsets)
size_t bitwpos() const
Returns position of last written bit.
void WriteString(std::string const &str)
uint32 ReadBits(size_t bits)
void ReadGuidBytes(ObjectGuid &guid, Offsets... offsets)
void resize(size_t newsize)
void ReadByteSeq(uint8 &b)
std::string ReadString(size_t length)
void PutBits(size_t pos, T value, uint32 bitCount)
void ReadGuidMask(ObjectGuid &guid, Offsets... offsets)
void WriteBits(T value, size_t bits)
void WriteByteSeq(uint8 b)
void PSendSysMessage(const char *format,...) ATTR_PRINTF(2
virtual void SendSysMessage(const char *str)
time_t const & GetGhostTime() const
CorpseType GetType() const
CreatureTemplate const * GetCreatureTemplate() const
Interface class for common access.
virtual void WriteRecord(uint32 id, uint32 locale, ByteBuffer &buffer) const =0
virtual bool HasRecord(uint32 id) const =0
std::string GetString() const
virtual bool GossipSelectCode(Player *, uint32, uint32, char const *)
virtual bool GossipSelect(Player *, uint32, uint32)
GameObjectTemplate const * GetGOInfo() const
GameObjectAI * AI() const
void SetDungeonDifficulty(DifficultyID difficulty)
void SetRaidDifficulty(DifficultyID difficulty)
GroupReference * GetFirstMember()
bool IsLeader(uint64 guid) const
void ResetInstances(InstanceResetMethod method, bool isRaid, Player *SendMsgTo)
static SF_SHARED_MUTEX * GetLock()
UNORDERED_MAP< uint64, T * > MapType
Creature * GetCreature(uint64 guid)
bool IsNonRaidInstance() const
static WorldObject * GetWorldObject(WorldObject const &, uint64)
static Unit * GetUnit(WorldObject const &, uint64 guid)
static Player * FindPlayer(uint64)
void SetByteValue(uint16 index, uint8 offset, uint8 value)
uint32 GetUInt32Value(uint16 index) const
uint16 GetUInt16Value(uint16 index, uint8 offset) const
uint32 GetGUIDLow() const
void SetFlag(uint16 index, uint32 newFlag)
void RemoveFlag(uint16 index, uint32 oldFlag)
void ApplyModFlag(uint16 index, uint32 flag, bool apply)
void RemoveByteFlag(uint16 index, uint8 offset, uint8 newFlag)
bool HasFlag(uint16 index, uint32 flag) const
void SetUInt32Value(uint16 index, uint32 value)
void ToggleFlag(uint16 index, uint32 flag)
void removeActionButton(uint8 button)
uint8 GetCUFProfilesCount() const
uint32 GetGuildId() const
void InnEnter(time_t time, uint32 mapid, float x, float y, float z, float radius=0.0f, float boxX=0.0f, float boxY=0.0f, float boxZ=0.0f, float boxOrientation=0.0f)
void UpdateZone(uint32 newZone, uint32 newArea)
void SaveCUFProfile(uint8 id, CUFProfile *profile)
void ResurectUsingRequestData()
WorldSession * GetSession() const
OutdoorPvP * GetOutdoorPvP() const
static uint32 TeamForRace(uint8 race)
void SendRespondInspectAchievements(Player *player) const
void UpdateVisibilityForPlayer()
void ClearResurrectRequestData()
void SetRestType(RestType n_r_type)
void RemovePet(Pet *pet, PetSaveMode mode, bool returnreagent=false)
bool TeleportToBGEntryPoint()
Corpse * GetCorpse() const
Battleground * GetBattleground() const
Creature * GetNPCIfCanInteractWith(uint64 guid, uint32 npcflagmask)
CUFProfile * GetCUFProfile(uint8 id) const
bool TeleportTo(uint32 mapid, float x, float y, float z, float orientation, uint32 options=0)
bool IsVisibleGloballyFor(Player const *player) const
void AreaExploredOrEventHappens(uint32 questId)
QuestStatus GetQuestStatus(uint32 quest_id) const
PlayerSocial * GetSocial()
ActionButton * addActionButton(uint8 button, uint32 action, ActionButtonType type)
void UpdatePvP(bool state, bool override=false)
RestType GetRestType() const
PlayerMenu * PlayerTalkClass
void ResurrectPlayer(float restore_percent, bool applySickness=false)
void SetFriendNote(uint32 friendGuid, std::string note)
void setString(const uint8 index, const std::string &value)
void setUInt32(const uint8 index, const uint32 value)
void ModDst(Position const &pos)
void SetSpeed(float speed)
void SetElevation(float elevation)
void ModSrc(Position const &pos)
Position const * GetSrcPos() const
WorldLocation const * GetDstPos() const
SpellCastTargets m_targets
SpellInfo const *const m_spellInfo
virtual void sGossipSelectCode(Player *, uint32, uint32, char const *)
virtual void sGossipSelect(Player *, uint32, uint32)
void SetRooted(bool apply, bool packetOnly=false)
void RemoveAurasByType(AuraType auraType, uint64 casterGUID=0, Aura *except=NULL, bool negative=true, bool positive=true)
void SetStandState(uint8 state)
bool IsSpiritService() const
Spell * GetCurrentSpell(CurrentSpellTypes spellType) const
bool IsWithinDistInMap(WorldObject const *obj, float dist2compare, bool is3D=true) const
std::string const & GetName() const
float GetDistance(WorldObject const *obj) const
void GetZoneAndAreaId(uint32 &zoneid, uint32 &areaid) const
bool IsInMap(WorldObject const *obj) const
void SetOpcode(Opcodes opcode)
Player session in the World.
void SendBroadcastText(uint32 entry)
void HandleGossipSelectOptionOpcode(WorldPacket &recvPacket)
void LogoutPlayer(bool save)
Log the player out
AccountData * GetAccountData(AccountDataType type)
void HandleSetDungeonDifficultyOpcode(WorldPacket &recvData)
void HandleSetSelectionOpcode(WorldPacket &recvPacket)
void HandleInspectOpcode(WorldPacket &recvPacket)
void HandleTimeSyncResp(WorldPacket &recvData)
void HandleDiscardedTimeSyncAcks(WorldPacket &recvData)
void HandleCompleteCinematic(WorldPacket &recvPacket)
void HandleSceneCompleted(WorldPacket &recvPacket)
void HandleNextCinematicCamera(WorldPacket &recvPacket)
void HandleViolenceLevel(WorldPacket &recvPacket)
void LogoutRequest(time_t requestTime)
Engage the logout process for the user.
void HandleAddFriendOpcodeCallBack(PreparedQueryResult result, std::string const &friendNote)
void HandlePlayedTime(WorldPacket &recvPacket)
void HandleLogoutRequestOpcode(WorldPacket &recvPacket)
void HandleResetInstancesOpcode(WorldPacket &recvData)
void SendNotification(const char *format,...) ATTR_PRINTF(2
void HandleWorldStateUITimerUpdate(WorldPacket &recvData)
uint32 GetGuidLow() const
Get player guid if available. Use for logging purposes only.
void HandleMoveRootAck(WorldPacket &recvPacket)
void HandleRequestAccountData(WorldPacket &recvPacket)
void HandleWhoisOpcode(WorldPacket &recvData)
AccountTypes GetSecurity() const
void HandleAddIgnoreOpcodeCallBack(PreparedQueryResult result)
void HandleSetActionButtonOpcode(WorldPacket &recvPacket)
void HandleComplainOpcode(WorldPacket &recvData)
void HandleDelIgnoreOpcode(WorldPacket &recvPacket)
void HandleWhoOpcode(WorldPacket &recvPacket)
void SendLoadCUFProfiles()
void HandleMoveTimeSkippedOpcode(WorldPacket &recvData)
void HandleRepopRequestOpcode(WorldPacket &recvPacket)
QueryCallback< PreparedQueryResult, std::string > _addFriendCallback
void HandleCancelMountAuraOpcode(WorldPacket &recvData)
void HandleMovementOpcodes(WorldPacket &recvPacket)
void HandleResurrectResponseOpcode(WorldPacket &recvPacket)
LocaleConstant GetSessionDbcLocale() const
void HandleSelectFactionOpcode(WorldPacket &recvPacket)
void HandleSaveCUFProfiles(WorldPacket &recvPacket)
void SendCrossedInebriationThreshold(ObjectGuid guid, uint32 ItemID, DrunkenState drunkenState)
void HandleGuildAchievementProgressQuery(WorldPacket &recvData)
Player * GetPlayer() const
void HandleDelFriendOpcode(WorldPacket &recvPacket)
void HandleBugOpcode(WorldPacket &recvPacket)
void HandleContactListOpcode(WorldPacket &recvPacket)
void HandlePlayerLogoutOpcode(WorldPacket &recvPacket)
PreparedQueryResultFuture _addIgnoreCallback
void SendPageText(ObjectGuid GameObjectGUID)
void HandleReturnToGraveyard(WorldPacket &recvPacket)
void HandleSetRaidDifficultyOpcode(WorldPacket &recvData)
uint32 GetVirtualRealmID() const
void HandleStandStateChangeOpcode(WorldPacket &recvPacket)
void HandleReadyForAccountDataTimes(WorldPacket &recvData)
void SendTitleEarned(uint32 TitleIndex)
void HandleUpdateMissileTrajectory(WorldPacket &recvPacket)
void HandleLogoutCancelOpcode(WorldPacket &recvPacket)
void HandleMoveUnRootAck(WorldPacket &recvPacket)
bool HasPermission(uint32 permissionId)
void HandleAreaTriggerOpcode(WorldPacket &recvPacket)
void SendPacket(WorldPacket const *packet, bool forced=false)
Send a packet to the client.
void HandleAreaSpiritHealerQueryOpcode(WorldPacket &recvData)
time_t timeLastWhoCommand
uint32 GetAccountId() const
void HandleObjectUpdateFailedOpcode(WorldPacket &recvPacket)
void HandleUpdateAccountData(WorldPacket &recvPacket)
void HandleTogglePvP(WorldPacket &recvPacket)
void HandleRequestHotfix(WorldPacket &recvPacket)
void HandleInstanceLockResponse(WorldPacket &recvPacket)
void HandleSetContactNotesOpcode(WorldPacket &recvPacket)
void HandleFarSightOpcode(WorldPacket &recvData)
int32 HandleEnableNagleAlgorithm()
void HandleSetPvP(WorldPacket &recvPacket)
uint32 GetLatency() const
void HandleSetActionBarToggles(WorldPacket &recvData)
void HandleSetTitleOpcode(WorldPacket &recvData)
void HandleReclaimCorpseOpcode(WorldPacket &recvPacket)
void HandleWorldTeleportOpcode(WorldPacket &recvData)
void HandleAddIgnoreOpcode(WorldPacket &recvPacket)
void HandleAddFriendOpcode(WorldPacket &recvPacket)
void SendSetPhaseShift(std::set< uint32 > const &phaseIds, std::set< uint32 > const &terrainswaps, std::set< uint32 > const &worldAreas)
void SendPlayMusic(uint32 SoundKitID)
void DoLootRelease(uint64 lguid)
void HandleQueryInspectAchievements(WorldPacket &recvData)
void HandleSetTaxiBenchmarkOpcode(WorldPacket &recvData)
void HandleHearthAndResurrect(WorldPacket &recvData)
void SendAccountDataTimes(uint32 mask)
void HandleMoveGravityAck(WorldPacket &recvData)
void HandleRequestCemeteryList(WorldPacket &recvPacket)
void HandleAreaSpiritHealerQueueOpcode(WorldPacket &recvData)
void SendTitleLost(uint32 TitleIndex)
std::string const & GetPlayerName() const
void HandleZoneUpdateOpcode(WorldPacket &recvPacket)
void HandleRequestPetInfoOpcode(WorldPacket &recvData)
void HandleRealmSplitOpcode(WorldPacket &recvData)
void SetAccountData(AccountDataType type, time_t tm, std::string const &data)
void HandleInspectHonorStatsOpcode(WorldPacket &recvPacket)
void HandleFeatherFallAck(WorldPacket &recvData)
CharacterDatabaseWorkerPool CharacterDatabase
Accessor to the character database.
#define DB2_REPLY_GAMEOBJECTS
#define DB2_REPLY_DEVICE_BLACKLIST
#define DB2_REPLY_SPELL_VISUAL_EFFECT_NAME
#define DB2_REPLY_WB_ACCESS_CONTROL_LIST
#define DB2_REPLY_BATTLE_PET_VISUAL
#define DB2_REPLY_BATTLE_PET_ABILITY_TURN
#define DB2_REPLY_LOCATION
#define DB2_REPLY_BATTLE_PET_ABILITY_STATE
#define DB2_REPLY_ITEM_UPGRADE
#define DB2_REPLY_QUEST_PACKAGE_ITEM
#define DB2_REPLY_SPELL_REAGENTS
#define DB2_REPLY_ITEM_TO_MOUNT_SPELL
#define DB2_REPLY_BATTLE_PET_SPECIES
#define DB2_REPLY_SPELL_VISUAL_KIT
#define DB2_REPLY_PATH_NODE_PROPERTY
#define DB2_REPLY_SCENE_SCRIPT_PACKAGE
#define DB2_REPLY_SPELL_MISSILE
#define DB2_REPLY_BATTLE_PET_ABILITY
#define DB2_REPLY_BATTLE_PET_ABILITY_EFFECT
#define DB2_REPLY_PATH_PROPERTY
#define DB2_REPLY_PATH_NODE
#define DB2_REPLY_WB_PERMISSIONS
#define DB2_REPLY_CREATURE_DIFFICULTY
#define DB2_REPLY_SPELL_VISUAL_MISSILE
#define DB2_REPLY_VIGNETTE
#define DB2_REPLY_SPELL_EFFECT_CAMERA_SHAKES
#define DB2_REPLY_ITEM_TO_BATTLE_PET
#define DB2_REPLY_KEYCHAIN
#define DB2_REPLY_SPELL_VISUAL
#define DB2_REPLY_ITEM_EXTENDED_COST
#define DB2_REPLY_CURVE_POINT
#define DB2_REPLY_BATTLE_PET_STATE
#define DB2_REPLY_SCENE_SCRIPT_PACKAGE_MEMBER
#define DB2_REPLY_ITEM_SPARSE
#define DB2_REPLY_BATTLE_PET_BREED_STATE
#define DB2_REPLY_SCENE_SCRIPT
#define DB2_REPLY_BATTLE_PET_SPECIES_STATE
#define DB2_REPLY_BATTLE_PET_BREED_QUALITY
#define DB2_REPLY_WB_CERT_BLACKLIST
#define DB2_REPLY_RULE_SET_RAID_LOOT_UPGRADE
#define GLOBAL_CACHE_MASK
#define DB2_REPLY_DRIVER_BLACKLIST
#define DB2_REPLY_ITEM_CURRENCY_COST
#define DB2_REPLY_MAP_CHALLENGE_MODE
#define DB2_REPLY_CREATURE
#define DB2_REPLY_RULE_SET_ITEM_UPGRADE
#define DB2_REPLY_BROADCAST_TEXT
#define DB2_REPLY_SPELL_MISSILE_MOTION
#define DB2_REPLY_BATTLE_PET_SPECIESX_ABILITY
#define DB2_REPLY_BATTLE_PET_EFFECT_PROPERTIES
#define DB2_REPLY_BATTLE_PET_NPC_TEAM_MEMBER
#define DB2_REPLY_WB_CERT_WHITELIST
#define DB2_REPLY_MARKETING_PROMOTIONS_X_LOCALE
#define DB2_REPLY_SPELL_VISUAL_KIT_MODEL_ATTACH
@ SMSG_CROSSED_INEBRIATION_THRESHOLD
@ SMSG_INSPECT_HONOR_STATS
@ SMSG_UPDATE_ACCOUNT_DATA
@ SMSG_REQUEST_CEMETERY_LIST_RESPONSE
@ SMSG_PHASE_SHIFT_CHANGE
@ SMSG_UPDATE_ACCOUNT_DATA_COMPLETE
uint32 realmID
Id of the realm.
@ CONFIG_GM_LEVEL_IN_WHO_LIST
@ RBAC_PERM_ALLOW_GM_FRIEND
@ RBAC_PERM_WHO_SEE_ALL_SEC_LEVELS
@ RBAC_PERM_OPCODE_WORLD_TELEPORT
@ RBAC_PERM_TWO_SIDE_WHO_LIST
@ RBAC_PERM_TWO_SIDE_ADD_FRIEND
@ RBAC_PERM_INSTANT_LOGOUT
LoginDatabaseWorkerPool LoginDatabase
Represents a CompactUnitFrame profile.
std::bitset< CUF_BOOL_OPTIONS_COUNT > BoolOptions
GossipTextOption Options[MAX_GOSSIP_TEXT_OPTIONS]
float GetPositionZ() const
float GetPositionX() const
float GetPositionY() const
void Relocate(float x, float y)