49 ObjectGuid targetGuid;
50 ObjectGuid itemTargetGuid;
51 ObjectGuid destTransportGuid;
52 ObjectGuid srcTransportGuid;
55 std::string targetString;
56 SpellResearchData researchData;
60struct CastSpellRequest
69 ObjectGuid targetGuid;
70 ObjectGuid itemTargetGuid;
71 ObjectGuid destTransportGuid;
72 ObjectGuid srcTransportGuid;
75 std::string targetString;
76 SpellResearchData researchData;
80struct CancelCastRequest
86struct CancelAuraRequest
92struct PetCancelAuraRequest
98struct TotemDestroyedRequest
104struct SpellClickRequest
107 bool tryAutoDismount;
110struct ProjectilePositionRequest
120UseItemRequest ReadUseItemRequest(
WorldPacket& recvPacket,
Unit* caster)
122 UseItemRequest request = UseItemRequest();
123 request.hasResearchData =
false;
125 uint32 targetStringLength = 0;
126 uint8 researchTypes[4] = { 0, 0, 0, 0 };
132 bool hasTransport =
false;
133 bool hasTransportTime2 =
false;
134 bool hasTransportTime3 =
false;
135 bool hasFallData =
false;
136 bool hasFallDirection =
false;
137 bool hasTimestamp =
false;
138 bool hasSplineElevation =
false;
139 bool hasPitch =
false;
140 bool hasOrientation =
false;
141 bool hasUnkMovementField =
false;
142 uint32 unkMovementLoopCounter = 0;
144 recvPacket >> request.slot >> request.bagIndex;
146 bool hasElevation = !recvPacket.
ReadBit();
147 request.itemGuid[6] = recvPacket.
ReadBit();
148 bool hasTargetString = !recvPacket.
ReadBit();
149 request.itemGuid[1] = recvPacket.
ReadBit();
150 bool hasCastFlags = !recvPacket.
ReadBit();
151 bool hasDestLocation = recvPacket.
ReadBit();
152 request.itemGuid[2] = recvPacket.
ReadBit();
153 request.itemGuid[7] = recvPacket.
ReadBit();
154 request.itemGuid[0] = recvPacket.
ReadBit();
155 bool hasTargetMask = !recvPacket.
ReadBit();
156 bool hasMissileSpeed = !recvPacket.
ReadBit();
157 bool hasMovement = recvPacket.
ReadBit();
158 bool hasCastCount = !recvPacket.
ReadBit();
159 bool hasSpellId = !recvPacket.
ReadBit();
161 bool hasGlyphIndex = !recvPacket.
ReadBit();
163 request.itemGuid[4] = recvPacket.
ReadBit();
164 bool hasSrcLocation = recvPacket.
ReadBit();
165 request.itemGuid[3] = recvPacket.
ReadBit();
166 request.itemGuid[5] = recvPacket.
ReadBit();
169 for (
uint8 i = 0; i < researchDataCount; ++i)
170 researchTypes[i] = recvPacket.
ReadBits(2);
174 hasPitch = !recvPacket.
ReadBit();
175 hasTransport = recvPacket.
ReadBit();
180 movementTransportGuid[7] = recvPacket.
ReadBit();
181 movementTransportGuid[2] = recvPacket.
ReadBit();
182 movementTransportGuid[4] = recvPacket.
ReadBit();
183 movementTransportGuid[5] = recvPacket.
ReadBit();
184 movementTransportGuid[6] = recvPacket.
ReadBit();
185 movementTransportGuid[0] = recvPacket.
ReadBit();
186 movementTransportGuid[1] = recvPacket.
ReadBit();
187 hasTransportTime3 = recvPacket.
ReadBit();
188 movementTransportGuid[4] = recvPacket.
ReadBit();
189 hasTransportTime2 = recvPacket.
ReadBit();
192 movementGuid[6] = recvPacket.
ReadBit();
193 movementGuid[2] = recvPacket.
ReadBit();
194 movementGuid[1] = recvPacket.
ReadBit();
195 unkMovementLoopCounter = recvPacket.
ReadBits(22);
197 bool hasMovementFlags2 = !recvPacket.
ReadBit();
198 hasFallData = recvPacket.
ReadBit();
199 movementGuid[5] = recvPacket.
ReadBit();
200 hasSplineElevation = !recvPacket.
ReadBit();
202 movementGuid[7] = recvPacket.
ReadBit();
203 movementGuid[0] = recvPacket.
ReadBit();
206 hasFallDirection = recvPacket.
ReadBit();
208 hasOrientation = !recvPacket.
ReadBit();
209 movementGuid[4] = recvPacket.
ReadBit();
210 movementGuid[3] = recvPacket.
ReadBit();
211 hasTimestamp = !recvPacket.
ReadBit();
212 hasUnkMovementField = !recvPacket.
ReadBit();
213 bool hasMovementFlags = !recvPacket.
ReadBit();
215 if (hasMovementFlags2)
224 request.srcTransportGuid[3] = recvPacket.
ReadBit();
225 request.srcTransportGuid[1] = recvPacket.
ReadBit();
226 request.srcTransportGuid[7] = recvPacket.
ReadBit();
227 request.srcTransportGuid[4] = recvPacket.
ReadBit();
228 request.srcTransportGuid[2] = recvPacket.
ReadBit();
229 request.srcTransportGuid[0] = recvPacket.
ReadBit();
230 request.srcTransportGuid[6] = recvPacket.
ReadBit();
231 request.srcTransportGuid[5] = recvPacket.
ReadBit();
236 request.destTransportGuid[2] = recvPacket.
ReadBit();
237 request.destTransportGuid[4] = recvPacket.
ReadBit();
238 request.destTransportGuid[1] = recvPacket.
ReadBit();
239 request.destTransportGuid[7] = recvPacket.
ReadBit();
240 request.destTransportGuid[6] = recvPacket.
ReadBit();
241 request.destTransportGuid[0] = recvPacket.
ReadBit();
242 request.destTransportGuid[3] = recvPacket.
ReadBit();
243 request.destTransportGuid[5] = recvPacket.
ReadBit();
247 targetStringLength = recvPacket.
ReadBits(7);
249 request.targetGuid[1] = recvPacket.
ReadBit();
250 request.targetGuid[0] = recvPacket.
ReadBit();
251 request.targetGuid[5] = recvPacket.
ReadBit();
252 request.targetGuid[3] = recvPacket.
ReadBit();
253 request.targetGuid[6] = recvPacket.
ReadBit();
254 request.targetGuid[4] = recvPacket.
ReadBit();
255 request.targetGuid[7] = recvPacket.
ReadBit();
256 request.targetGuid[2] = recvPacket.
ReadBit();
258 request.itemTargetGuid[4] = recvPacket.
ReadBit();
259 request.itemTargetGuid[5] = recvPacket.
ReadBit();
260 request.itemTargetGuid[0] = recvPacket.
ReadBit();
261 request.itemTargetGuid[1] = recvPacket.
ReadBit();
262 request.itemTargetGuid[3] = recvPacket.
ReadBit();
263 request.itemTargetGuid[7] = recvPacket.
ReadBit();
264 request.itemTargetGuid[6] = recvPacket.
ReadBit();
265 request.itemTargetGuid[2] = recvPacket.
ReadBit();
268 request.castFlags = recvPacket.
ReadBits(5);
271 request.targetMask = recvPacket.
ReadBits(20);
281 for (
uint8 i = 0; i < researchDataCount; ++i)
286 recvPacket >> usedCount;
289 switch (researchTypes[i])
294 request.hasResearchData =
true;
299 request.hasResearchData =
true;
310 for (
uint8 i = 0; i != unkMovementLoopCounter; i++)
319 if (hasTransportTime3)
334 if (hasTransportTime2)
342 if (hasFallDirection)
358 if (hasSplineElevation)
361 if (hasUnkMovementField)
371 recvPacket >> movementInfo.
time;
378 movementInfo.
pitch = G3D::wrap(recvPacket.
read<
float>(),
float(-
M_PI),
float(
M_PI));
387 recvPacket.
ReadByteSeq(request.destTransportGuid[7]);
389 recvPacket.
ReadByteSeq(request.destTransportGuid[0]);
390 recvPacket.
ReadByteSeq(request.destTransportGuid[6]);
391 recvPacket.
ReadByteSeq(request.destTransportGuid[1]);
392 recvPacket.
ReadByteSeq(request.destTransportGuid[3]);
394 recvPacket.
ReadByteSeq(request.destTransportGuid[5]);
396 recvPacket.
ReadByteSeq(request.destTransportGuid[4]);
397 recvPacket.
ReadByteSeq(request.destTransportGuid[2]);
405 if (request.destTransportGuid)
424 recvPacket.
ReadByteSeq(request.srcTransportGuid[7]);
426 recvPacket.
ReadByteSeq(request.srcTransportGuid[1]);
427 recvPacket.
ReadByteSeq(request.srcTransportGuid[5]);
428 recvPacket.
ReadByteSeq(request.srcTransportGuid[4]);
430 recvPacket.
ReadByteSeq(request.srcTransportGuid[6]);
431 recvPacket.
ReadByteSeq(request.srcTransportGuid[0]);
432 recvPacket.
ReadByteSeq(request.srcTransportGuid[3]);
434 recvPacket.
ReadByteSeq(request.srcTransportGuid[2]);
441 if (request.srcTransportGuid)
448 recvPacket >> request.spellId;
460 request.targetString = recvPacket.
ReadString(targetStringLength);
463 recvPacket >> request.elevation;
466 recvPacket >> request.glyphIndex;
469 recvPacket >> request.missileSpeed;
472 recvPacket >> request.castCount;
477OpenItemRequest ReadOpenItemRequest(
WorldPacket& recvPacket)
479 OpenItemRequest request = OpenItemRequest();
480 recvPacket >> request.bagIndex >> request.slot;
484GuidRequest ReadGameObjectUseRequest(
WorldPacket& recvData)
486 GuidRequest request = GuidRequest();
488 request.guid[6] = recvData.
ReadBit();
489 request.guid[1] = recvData.
ReadBit();
490 request.guid[3] = recvData.
ReadBit();
491 request.guid[4] = recvData.
ReadBit();
492 request.guid[0] = recvData.
ReadBit();
493 request.guid[5] = recvData.
ReadBit();
494 request.guid[7] = recvData.
ReadBit();
495 request.guid[2] = recvData.
ReadBit();
509GuidRequest ReadGameObjectReportUseRequest(
WorldPacket& recvPacket)
511 GuidRequest request = GuidRequest();
513 request.guid[4] = recvPacket.
ReadBit();
514 request.guid[7] = recvPacket.
ReadBit();
515 request.guid[5] = recvPacket.
ReadBit();
516 request.guid[3] = recvPacket.
ReadBit();
517 request.guid[6] = recvPacket.
ReadBit();
518 request.guid[1] = recvPacket.
ReadBit();
519 request.guid[2] = recvPacket.
ReadBit();
520 request.guid[0] = recvPacket.
ReadBit();
534CastSpellRequest ReadCastSpellRequest(
WorldPacket& recvPacket,
Unit* caster)
536 CastSpellRequest request = CastSpellRequest();
537 request.hasResearchData =
false;
539 uint32 targetStringLength = 0;
540 uint8 researchTypes[4] = { 0, 0, 0, 0 };
546 bool hasTransport =
false;
547 bool hasTransportTime2 =
false;
548 bool hasTransportTime3 =
false;
549 bool hasFallData =
false;
550 bool hasFallDirection =
false;
551 bool hasTimestamp =
false;
552 bool hasSplineElevation =
false;
553 bool hasPitch =
false;
554 bool hasOrientation =
false;
555 bool hasUnkMovementField =
false;
556 uint32 unkMovementLoopCounter = 0;
559 bool hasTargetString = !recvPacket.
ReadBit();
561 bool hasCastCount = !recvPacket.
ReadBit();
562 bool hasSrcLocation = recvPacket.
ReadBit();
563 bool hasDestLocation = recvPacket.
ReadBit();
564 bool hasSpellId = !recvPacket.
ReadBit();
566 bool hasTargetMask = !recvPacket.
ReadBit();
567 bool hasMissileSpeed = !recvPacket.
ReadBit();
569 for (
uint8 i = 0; i < researchDataCount; ++i)
570 researchTypes[i] = recvPacket.
ReadBits(2);
572 bool hasGlyphIndex = !recvPacket.
ReadBit();
573 bool hasMovement = recvPacket.
ReadBit();
574 bool hasElevation = !recvPacket.
ReadBit();
575 bool hasCastFlags = !recvPacket.
ReadBit();
577 request.targetGuid[5] = recvPacket.
ReadBit();
578 request.targetGuid[4] = recvPacket.
ReadBit();
579 request.targetGuid[2] = recvPacket.
ReadBit();
580 request.targetGuid[7] = recvPacket.
ReadBit();
581 request.targetGuid[1] = recvPacket.
ReadBit();
582 request.targetGuid[6] = recvPacket.
ReadBit();
583 request.targetGuid[3] = recvPacket.
ReadBit();
584 request.targetGuid[0] = recvPacket.
ReadBit();
588 request.destTransportGuid[1] = recvPacket.
ReadBit();
589 request.destTransportGuid[3] = recvPacket.
ReadBit();
590 request.destTransportGuid[5] = recvPacket.
ReadBit();
591 request.destTransportGuid[0] = recvPacket.
ReadBit();
592 request.destTransportGuid[2] = recvPacket.
ReadBit();
593 request.destTransportGuid[6] = recvPacket.
ReadBit();
594 request.destTransportGuid[7] = recvPacket.
ReadBit();
595 request.destTransportGuid[4] = recvPacket.
ReadBit();
601 unkMovementLoopCounter = recvPacket.
ReadBits(22);
603 movementGuid[4] = recvPacket.
ReadBit();
604 hasTransport = recvPacket.
ReadBit();
608 hasTransportTime2 = recvPacket.
ReadBit();
609 movementTransportGuid[7] = recvPacket.
ReadBit();
610 movementTransportGuid[4] = recvPacket.
ReadBit();
611 movementTransportGuid[1] = recvPacket.
ReadBit();
612 movementTransportGuid[0] = recvPacket.
ReadBit();
613 movementTransportGuid[6] = recvPacket.
ReadBit();
614 movementTransportGuid[3] = recvPacket.
ReadBit();
615 movementTransportGuid[5] = recvPacket.
ReadBit();
616 hasTransportTime3 = recvPacket.
ReadBit();
617 movementTransportGuid[2] = recvPacket.
ReadBit();
621 movementGuid[7] = recvPacket.
ReadBit();
622 hasOrientation = !recvPacket.
ReadBit();
623 movementGuid[6] = recvPacket.
ReadBit();
624 hasSplineElevation = !recvPacket.
ReadBit();
625 hasPitch = !recvPacket.
ReadBit();
626 movementGuid[0] = recvPacket.
ReadBit();
628 bool hasMovementFlags = !recvPacket.
ReadBit();
629 hasTimestamp = !recvPacket.
ReadBit();
630 hasUnkMovementField = !recvPacket.
ReadBit();
632 if (hasMovementFlags)
635 movementGuid[1] = recvPacket.
ReadBit();
636 movementGuid[3] = recvPacket.
ReadBit();
637 movementGuid[2] = recvPacket.
ReadBit();
638 movementGuid[5] = recvPacket.
ReadBit();
639 hasFallData = recvPacket.
ReadBit();
642 hasFallDirection = recvPacket.
ReadBit();
644 bool hasMovementFlags2 = !recvPacket.
ReadBit();
646 if (hasMovementFlags2)
650 request.itemTargetGuid[1] = recvPacket.
ReadBit();
651 request.itemTargetGuid[0] = recvPacket.
ReadBit();
652 request.itemTargetGuid[7] = recvPacket.
ReadBit();
653 request.itemTargetGuid[4] = recvPacket.
ReadBit();
654 request.itemTargetGuid[6] = recvPacket.
ReadBit();
655 request.itemTargetGuid[5] = recvPacket.
ReadBit();
656 request.itemTargetGuid[3] = recvPacket.
ReadBit();
657 request.itemTargetGuid[2] = recvPacket.
ReadBit();
661 request.srcTransportGuid[4] = recvPacket.
ReadBit();
662 request.srcTransportGuid[5] = recvPacket.
ReadBit();
663 request.srcTransportGuid[3] = recvPacket.
ReadBit();
664 request.srcTransportGuid[0] = recvPacket.
ReadBit();
665 request.srcTransportGuid[7] = recvPacket.
ReadBit();
666 request.srcTransportGuid[1] = recvPacket.
ReadBit();
667 request.srcTransportGuid[6] = recvPacket.
ReadBit();
668 request.srcTransportGuid[2] = recvPacket.
ReadBit();
672 request.targetMask = recvPacket.
ReadBits(20);
675 request.castFlags = recvPacket.
ReadBits(5);
678 targetStringLength = recvPacket.
ReadBits(7);
680 for (
uint8 i = 0; i < researchDataCount; ++i)
685 recvPacket >> usedCount;
688 switch (researchTypes[i])
693 request.hasResearchData =
true;
698 request.hasResearchData =
true;
719 if (hasTransportTime3)
731 if (hasTransportTime2)
745 if (hasFallDirection)
753 if (hasSplineElevation)
758 if (hasUnkMovementField)
767 recvPacket >> movementInfo.
time;
772 movementInfo.
pitch = G3D::wrap(recvPacket.
read<
float>(),
float(-
M_PI),
float(
M_PI));
776 for (
uint8 i = 0; i != unkMovementLoopCounter; i++)
797 recvPacket.
ReadByteSeq(request.destTransportGuid[2]);
799 recvPacket.
ReadByteSeq(request.destTransportGuid[4]);
800 recvPacket.
ReadByteSeq(request.destTransportGuid[1]);
801 recvPacket.
ReadByteSeq(request.destTransportGuid[0]);
802 recvPacket.
ReadByteSeq(request.destTransportGuid[3]);
804 recvPacket.
ReadByteSeq(request.destTransportGuid[7]);
806 recvPacket.
ReadByteSeq(request.destTransportGuid[5]);
807 recvPacket.
ReadByteSeq(request.destTransportGuid[6]);
813 if (request.destTransportGuid)
832 recvPacket.
ReadByteSeq(request.srcTransportGuid[5]);
833 recvPacket.
ReadByteSeq(request.srcTransportGuid[1]);
834 recvPacket.
ReadByteSeq(request.srcTransportGuid[7]);
835 recvPacket.
ReadByteSeq(request.srcTransportGuid[6]);
837 recvPacket.
ReadByteSeq(request.srcTransportGuid[3]);
838 recvPacket.
ReadByteSeq(request.srcTransportGuid[2]);
839 recvPacket.
ReadByteSeq(request.srcTransportGuid[0]);
840 recvPacket.
ReadByteSeq(request.srcTransportGuid[4]);
847 if (request.srcTransportGuid)
854 request.targetString = recvPacket.
ReadString(targetStringLength);
857 recvPacket >> request.missileSpeed;
860 recvPacket >> request.elevation;
863 recvPacket >> request.castCount;
866 recvPacket >> request.spellId;
869 recvPacket >> request.glyphIndex;
874CancelCastRequest ReadCancelCastRequest(
WorldPacket& recvPacket)
876 CancelCastRequest request = CancelCastRequest();
878 bool hasCounter = !recvPacket.
ReadBit();
879 bool hasSpellId = !recvPacket.
ReadBit();
884 recvPacket >> request.spellId;
887 recvPacket >> request.counter;
892CancelAuraRequest ReadCancelAuraRequest(
WorldPacket& recvPacket)
894 CancelAuraRequest request = CancelAuraRequest();
896 recvPacket >> request.spellId;
899 request.guid[6] = recvPacket.
ReadBit();
900 request.guid[5] = recvPacket.
ReadBit();
901 request.guid[1] = recvPacket.
ReadBit();
902 request.guid[0] = recvPacket.
ReadBit();
903 request.guid[4] = recvPacket.
ReadBit();
904 request.guid[3] = recvPacket.
ReadBit();
905 request.guid[2] = recvPacket.
ReadBit();
906 request.guid[7] = recvPacket.
ReadBit();
922PetCancelAuraRequest ReadPetCancelAuraRequest(
WorldPacket& recvPacket)
924 PetCancelAuraRequest request = PetCancelAuraRequest();
927 recvPacket.
ReadGuidMask(request.guid, 0, 3, 1, 4, 6, 2, 7, 5);
928 recvPacket.
ReadGuidBytes(request.guid, 0, 5, 3, 4, 7, 2, 6, 1);
933void ReadCancelChannelingRequest(
WorldPacket& recvData)
938TotemDestroyedRequest ReadTotemDestroyedRequest(
WorldPacket& recvPacket)
940 TotemDestroyedRequest request = TotemDestroyedRequest();
942 recvPacket >> request.slotId;
944 request.guid[4] = recvPacket.
ReadBit();
945 request.guid[2] = recvPacket.
ReadBit();
946 request.guid[1] = recvPacket.
ReadBit();
947 request.guid[3] = recvPacket.
ReadBit();
948 request.guid[0] = recvPacket.
ReadBit();
949 request.guid[6] = recvPacket.
ReadBit();
950 request.guid[7] = recvPacket.
ReadBit();
951 request.guid[5] = recvPacket.
ReadBit();
965SpellClickRequest ReadSpellClickRequest(
WorldPacket& recvData)
967 SpellClickRequest request = SpellClickRequest();
970 request.tryAutoDismount = recvData.
ReadBit();
972 recvData.
ReadGuidBytes(request.guid, 6, 1, 5, 4, 7, 2, 3, 0);
977GuidRequest ReadMirrorImageDataRequest(
WorldPacket& recvData)
979 GuidRequest request = GuidRequest();
983 request.guid[0] = recvData.
ReadBit();
984 request.guid[2] = recvData.
ReadBit();
985 request.guid[1] = recvData.
ReadBit();
986 request.guid[6] = recvData.
ReadBit();
987 request.guid[5] = recvData.
ReadBit();
988 request.guid[4] = recvData.
ReadBit();
989 request.guid[7] = recvData.
ReadBit();
990 request.guid[3] = recvData.
ReadBit();
1004ProjectilePositionRequest ReadUpdateProjectilePositionRequest(
WorldPacket& recvPacket)
1006 ProjectilePositionRequest request = ProjectilePositionRequest();
1008 recvPacket >> request.casterGuid;
1009 recvPacket >> request.spellId;
1010 recvPacket >> request.castCount;
1011 recvPacket >> request.x;
1012 recvPacket >> request.y;
1013 recvPacket >> request.z;
1018bool CanProcessUseItemRequest(
Player* player,
Unit* mover)
1020 return mover == player;
1023bool ValidateUseItemSelection(
Player* player, UseItemRequest& request,
Item*& item)
1040 if (item->
GetGUID() != request.itemGuid)
1058 if (!spellInfo->CanBeUsedInCombat())
1106 return ValidateUseItemCombat(player, item, proto);
1125 SF_LOG_ERROR(
"network",
"WORLD: unknown spell id %u", spellId);
1189SpellInfo const* ValidateCancelAuraSpell(CancelAuraRequest
const& request)
1208 if (curSpell->m_spellInfo->Id == spellId)
1214bool IsPlayerCancelableAura(
SpellInfo const* spellInfo)
1221Creature* ValidatePetCancelAuraRequest(
Player* player, PetCancelAuraRequest& request)
1226 SF_LOG_ERROR(
"network",
"WORLD: unknown PET spell id %u", request.spellId);
1234 SF_LOG_ERROR(
"network",
"HandlePetCancelAura: Attempt to cancel an aura for non-existant pet %u by player '%s'",
uint32(
GUID_LOPART(request.guid)), player->
GetName().c_str());
1257 if (castFlags & 0x02)
1260 float elevation, speed;
1261 recvPacket >> elevation;
1262 recvPacket >> speed;
1267 uint8 hasMovementData;
1268 recvPacket >> hasMovementData;
1269 if (hasMovementData)
1272 else if (castFlags & 0x8)
1274 uint32 count, entry, usedCount;
1276 recvPacket >> count;
1277 for (
uint32 i = 0; i < count; ++i)
1283 recvPacket >> entry;
1284 recvPacket >> usedCount;
1287 recvPacket >> entry;
1288 recvPacket >> usedCount;
1302 if (!CanProcessUseItemRequest(pUser, mover))
1305 UseItemRequest request = ReadUseItemRequest(recvPacket, mover);
1306 Unit* caster = mover;
1309 if (!ValidateUseItemSelection(pUser, request, pItem))
1312 SF_LOG_DEBUG(
"network",
"WORLD: CMSG_USE_ITEM packet, bagIndex: %u, slot: %u, castCount: %u, spellId: %u, Item: %u, glyphIndex: %u, data length = %i", request.bagIndex, request.slot, request.castCount, request.spellId, pItem->
GetEntry(), request.glyphIndex, (
uint32)recvPacket.
size());
1315 if (!ValidateUseItemTemplate(pUser, pItem, proto))
1328 SpellCastTargets targets(caster, request.targetMask, request.targetGuid, request.itemTargetGuid, request.srcTransportGuid, request.destTransportGuid, request.srcPos, request.destPos, request.elevation, request.missileSpeed, request.targetString);
1331 if (!
sScriptMgr->OnItemUse(pUser, pItem, targets))
1334 pUser->
CastItemUseSpell(pItem, targets, request.castCount, request.glyphIndex,
1335 request.hasResearchData ? &request.researchData : NULL);
1349 OpenItemRequest request = ReadOpenItemRequest(recvPacket);
1351 SF_LOG_INFO(
"network",
"bagIndex: %u, slot: %u", request.bagIndex, request.slot);
1371 SF_LOG_ERROR(
"network",
"Possible hacking attempt: Player %s [guid: %u] tried to open item [guid: %u, entry: %u] which is not openable!",
1385 SF_LOG_ERROR(
"network",
"WORLD::OpenItem: item [guid = %u] has an unknown lockId: %u!", item->
GetGUIDLow(), lockId);
1407 Field* fields = result->Fetch();
1418 SF_LOG_ERROR(
"network",
"Wrapped item %u don't have record in character_gifts table and will deleted", item->
GetGUIDLow());
1435 GuidRequest request = ReadGameObjectUseRequest(recvData);
1444 if (!(
_player->IsOnVehicle(
_player->m_mover) ||
_player->IsMounted()) && !obj->GetGOInfo()->IsUsableMounted())
1453 GuidRequest request = ReadGameObjectReportUseRequest(recvPacket);
1483 if (!CanProcessCastSpellRequest(recvPacket,
_player, mover))
1486 CastSpellRequest request = ReadCastSpellRequest(recvPacket, mover);
1487 Unit* caster = mover;
1488 uint8 castCount = request.castCount;
1489 uint8 castFlags = request.castFlags;
1490 uint32 spellId = request.spellId;
1491 uint32 glyphIndex = request.glyphIndex;
1493 SF_LOG_DEBUG(
"network",
"WORLD: got cast spell packet, castCount: %u, spellId: %u, castFlags: %u, data length = %u", castCount, spellId, castFlags, (
uint32)recvPacket.
size());
1495 SpellInfo const* spellInfo = ValidateCastSpellInfo(recvPacket, spellId);
1499 if (!ValidateCastSource(recvPacket,
_player, caster, spellInfo, spellId))
1505 if (!swaps2.empty())
1506 swaps.insert(swaps.end(), swaps2.begin(), swaps2.end());
1510 for (Unit::AuraEffectList::const_iterator itr = swaps.begin(); itr != swaps.end(); ++itr)
1512 if ((*itr)->IsAffectingSpell(spellInfo))
1524 spellInfo = newInfo;
1525 spellId = newInfo->
Id;
1534 if (SpecializationID)
1539 if (!specializationInfo)
1557 spellInfo = newInfo;
1558 spellId = newInfo->
Id;
1593 spellInfo = newInfo;
1594 spellId = newInfo->
Id;
1601 if (!ValidateCastExecution(recvPacket,
_player, caster, spellInfo))
1605 SpellCastTargets targets(caster, request.targetMask, request.targetGuid, request.itemTargetGuid, request.srcTransportGuid, request.destTransportGuid, request.srcPos, request.destPos, request.elevation, request.missileSpeed, request.targetString);
1613 if (actualSpellInfo)
1614 spellInfo = actualSpellInfo;
1621 if (request.hasResearchData)
1624 *researchData = request.researchData;
1633 CancelCastRequest request = ReadCancelCastRequest(recvPacket);
1635 if (
_player->IsNonMeleeSpellCasted(
false))
1636 _player->InterruptNonMeleeSpells(
false, request.spellId,
false);
1641 CancelAuraRequest request = ReadCancelAuraRequest(recvPacket);
1643 SpellInfo const* spellInfo = ValidateCancelAuraSpell(request);
1648 if (TryInterruptMatchingChannel(
_player, spellInfo, request.spellId))
1651 if (!IsPlayerCancelableAura(spellInfo))
1660 PetCancelAuraRequest request = ReadPetCancelAuraRequest(recvPacket);
1682 ReadCancelChannelingRequest(recvData);
1698 TotemDestroyedRequest request = ReadTotemDestroyedRequest(recvPacket);
1704 if (!
_player->m_SummonSlot[request.slotId])
1708 if (totem && totem->
IsTotem() && totem->
GetGUID() == request.guid)
1733 SpellClickRequest request = ReadSpellClickRequest(recvData);
1745 if (
_player->IsMounted() && request.tryAutoDismount)
1753 SF_LOG_DEBUG(
"network",
"WORLD: CMSG_GET_MIRROR_IMAGE_DATA");
1755 GuidRequest request = ReadMirrorImageDataRequest(recvData);
1870 SF_LOG_DEBUG(
"network",
"WORLD: CMSG_UPDATE_PROJECTILE_POSITION");
1872 ProjectilePositionRequest request = ReadUpdateProjectilePositionRequest(recvPacket);
1883 pos.
Relocate(request.x, request.y, request.z);
1887 data <<
uint64(request.casterGuid);
1888 data <<
uint8(request.castCount);
1889 data << float(request.x);
1890 data << float(request.y);
1891 data << float(request.z);
1897 std::map<uint32, int32> categoryMods;
1899 for (Unit::AuraEffectList::const_iterator itr = categoryCooldownAuras.begin(); itr != categoryCooldownAuras.end(); ++itr)
1901 std::map<uint32, int32>::iterator cItr = categoryMods.find((*itr)->GetMiscValue());
1902 if (cItr == categoryMods.end())
1903 categoryMods[(*itr)->GetMiscValue()] = (*itr)->GetAmount();
1905 cItr->second += (*itr)->GetAmount();
1909 data.
WriteBits(categoryMods.size(), 21);
1912 for (std::map<uint32, int32>::const_iterator itr = categoryMods.begin(); itr != categoryMods.end(); ++itr)
1914 data <<
int32(-itr->second);
1915 data <<
uint32(itr->first);
1925 data <<
uint32(Duration);
1928 data <<
uint8(Slot);
1930 _player->SendDirectMessage(&data);
1938 data <<
int32(DeltaTime);
@ CHAR_SEL_CHARACTER_GIFT_BY_ITEM
@ ACHIEVEMENT_CRITERIA_TYPE_USE_GAMEOBJECT
DBCStorage< LockEntry > sLockStore(LockEntryfmt)
DBCStorage< TalentEntry > sTalentStore(TalentEntryfmt)
DBCStorage< SpecializationSpellsEntry > sSpecializationSpellsStore(SpecializationSpellsfmt)
@ EQUIP_ERR_NOT_DURING_ARENA_MATCH
@ EQUIP_ERR_CLIENT_LOCKED_OUT
@ EQUIP_ERR_NOT_IN_COMBAT
@ EQUIP_ERR_ITEM_NOT_FOUND
@ ITEM_PROTO_FLAG_NOT_USEABLE_IN_ARENA
@ ITEM_PROTO_FLAG_USEABLE_IN_ARENA
@ ITEM_PROTO_FLAG_OPENABLE
#define MAX_ITEM_PROTO_SPELLS
#define SF_LOG_DEBUG(filterType__,...)
#define SF_LOG_ERROR(filterType__,...)
#define SF_LOG_INFO(filterType__,...)
#define INTERACTION_DISTANCE
uint32 GUID_LOPART(uint64 x)
@ PLAYER_FLAGS_HIDE_CLOAK
@ EQUIPMENT_SLOT_SHOULDERS
#define INVENTORY_SLOT_BAG_0
Skyfire::AutoPtr< PreparedResultSet, Skyfire::Mutex > PreparedQueryResult
@ SPELL_ATTR0_CANT_CANCEL
#define MAX_GLYPH_SLOT_INDEX
@ SPELL_AURA_PREVENT_RESURRECTION
@ SPELL_AURA_CLONE_CASTER
@ SPELL_AURA_OVERRIDE_ACTIONBAR_SPELLS_2
@ SPELL_AURA_MOD_SPELL_CATEGORY_COOLDOWN
@ SPELL_AURA_OVERRIDE_ACTIONBAR_SPELLS
@ CURRENT_CHANNELED_SPELL
@ CURRENT_AUTOREPEAT_SPELL
@ ITEM_FIELD_GIFT_CREATOR
@ ITEM_FIELD_DYNAMIC_FLAGS
@ PLAYER_FIELD_HAIR_COLOR_ID
@ PLAYER_FIELD_SELF_RES_SPELL
@ PLAYER_FIELD_PLAYER_FLAGS
@ PLAYER_FIELD_REST_STATE
void WriteGuidBytes(const ObjectGuid &guid, Offsets... offsets)
bool WriteBit(uint32 bit)
void WriteGuidMask(const ObjectGuid &guid, Offsets... offsets)
uint32 ReadBits(size_t bits)
void ReadGuidBytes(ObjectGuid &guid, Offsets... offsets)
void ReadByteSeq(uint8 &b)
std::string ReadString(size_t length)
void ReadGuidMask(ObjectGuid &guid, Offsets... offsets)
void WriteBits(T value, size_t bits)
void WriteByteSeq(uint8 b)
void AddCreatureSpellCooldown(uint32 spellid)
bool HasSpell(uint32 spellID) const OVERRIDE
virtual bool GossipHello(Player *)
GameObjectAI * AI() const
void SetBinding(bool val)
void SetState(ItemUpdateState state, Player *forplayer=NULL)
ItemTemplate const * GetTemplate() const
GameObject * GetGameObject(uint64 guid)
Creature * GetCreature(uint64 guid)
static Creature * GetCreatureOrPetOrVehicle(WorldObject const &, uint64)
static Unit * GetUnit(WorldObject const &, uint64 guid)
static T * GetObjectInWorld(uint64 guid, T *)
uint8 GetByteValue(uint16 index, uint8 offset) const
uint32 GetGUIDLow() const
bool HasFlag(uint16 index, uint32 flag) const
void SetEntry(uint32 entry)
void SetUInt32Value(uint16 index, uint32 value)
void SetUInt64Value(uint16 index, uint64 value)
void SendEquipError(InventoryResult msg, Item *pItem, Item *pItem2=NULL, uint32 itemid=0)
bool HasResearchingProject(uint32 projectId) const
uint32 GetTalentSpecialization(uint8 spec) const
Item * GetUseableItemByPos(uint8 bag, uint8 slot) const
bool HasActiveSpell(uint32 spell) const
Item * GetItemByPos(uint16 pos) const
void DestroyItem(uint8 bag, uint8 slot, bool update)
uint8 GetActiveSpec() const
void SendLoot(uint64 guid, LootType loot_type, bool isAoE=false)
void CastItemUseSpell(Item *item, SpellCastTargets const &targets, uint8 cast_count, uint32 glyphIndex, SpellResearchData const *researchData=NULL)
InventoryResult CanUseItem(Item *pItem, bool not_loading=true) const
void setUInt32(const uint8 index, const uint32 value)
void ModDst(Position const &pos)
void SetSpeed(float speed)
void SetElevation(float elevation)
Unit * GetUnitTarget() const
WorldLocation const * GetDstPos() const
SpellCastTargets m_targets
SpellResearchData const * m_researchData
void prepare(SpellCastTargets const *targets, AuraEffect const *triggeredByAura=NULL)
SpellInfo const *const m_spellInfo
SpellInfo const * GetAuraRankForLevel(uint8 level) const
SpellCastResult CheckVehicle(Unit const *caster) const
bool IsAutoRepeatRangedSpell() const
void UnSummon(uint32 msTime=0) OVERRIDE
void RemoveOwnedAura(AuraMap::iterator &i, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
AuraEffectList const & GetAuraEffectsByType(AuraType type) const
void SendPetActionFeedback(uint8 msg) const
-------—Pet responses methods--------------—
Spell * FindCurrentSpellBySpellId(uint32 spell_id) const
bool IsOnVehicle(const Unit *vehicle) const
uint32 GetDisplayId() const
bool isPossessing() const
uint64 GetTransGUID() const override
bool HasAuraType(AuraType auraType) const
bool HandleSpellClick(Unit *clicker, int8 seatId=-1)
std::list< AuraEffect * > AuraEffectList
Guardian * GetGuardianPet() const
void InterruptSpell(CurrentSpellTypes spellType, bool withDelayed=true, bool withInstant=true)
Spell * GetCurrentSpell(CurrentSpellTypes spellType) const
bool IsWithinDistInMap(WorldObject const *obj, float dist2compare, bool is3D=true) const
float GetTransOffsetX() const
float GetTransOffsetY() const
std::string const & GetName() const
float GetTransOffsetZ() const
float GetTransOffsetO() const
virtual void SendMessageToSet(WorldPacket *data, bool self)
void HandleCancelGrowthAuraOpcode(WorldPacket &recvPacket)
void HandlePetCancelAuraOpcode(WorldPacket &recvPacket)
void HandleOpenItemOpcode(WorldPacket &recvPacket)
void HandleGameObjectUseOpcode(WorldPacket &recPacket)
void HandleMovementOpcodes(WorldPacket &recvPacket)
void HandleUpdateProjectilePosition(WorldPacket &recvPacket)
Player * GetPlayer() const
void HandleCancelCastOpcode(WorldPacket &recvPacket)
void HandleSelfResOpcode(WorldPacket &recvData)
void HandleCastSpellOpcode(WorldPacket &recvPacket)
void HandleMirrorImageDataRequest(WorldPacket &recvData)
void HandleTotemDestroyed(WorldPacket &recvData)
void HandleGameobjectReportUse(WorldPacket &recvPacket)
void HandleRequestCategoryCooldowns(WorldPacket &recvPacket)
void SendPacket(WorldPacket const *packet, bool forced=false)
Send a packet to the client.
void HandleCancelChanneling(WorldPacket &recvData)
void HandleCancelAutoRepeatSpellOpcode(WorldPacket &recvPacket)
void SendModifyCooldown(ObjectGuid UnitGUID, int32 DeltaTime, int32 SpellID)
void HandleUseItemOpcode(WorldPacket &recvPacket)
void HandleClientCastFlags(WorldPacket &recvPacket, uint8 castFlags, SpellCastTargets &targets)
void HandleSpellClick(WorldPacket &recvData)
void SendTotemCreated(ObjectGuid TotemGUID, uint32 Duration, uint32 SpellID, uint8 Slot)
void HandleCancelAuraOpcode(WorldPacket &recvPacket)
CharacterDatabaseWorkerPool CharacterDatabase
Accessor to the character database.
@ SMSG_SET_PROJECTILE_POSITION
@ SMSG_MIRROR_IMAGE_CREATURE_DATA
@ SMSG_MIRROR_IMAGE_COMPONENTED_DATA
_Spell Spells[MAX_ITEM_PROTO_SPELLS]
struct MovementInfo::JumpInfo jump
struct MovementInfo::TransportInfo transport
void SetOrientation(float orientation)
void Relocate(float x, float y)
uint32 fragmentCurrencyId