31struct PetActionRequest
34 ObjectGuid targetGuid;
41struct PetNameQueryRequest
47struct PetSetActionRequest
54struct PetRenameRequest
56 DeclinedName declinedName;
59 bool hasDeclinedNames;
62struct PetSpellAutocastRequest
69struct PetCastSpellRequest
71 ObjectGuid targetGuid;
72 ObjectGuid transportDstGuid;
74 ObjectGuid transportSrcGuid;
86struct SetPetSpecializationRequest
92PetGuidRequest ReadDismissCritterRequest(
WorldPacket& recvData)
94 PetGuidRequest request;
95 recvData.
ReadGuidMask(request.guid, 4, 6, 7, 5, 1, 0, 2, 3);
100PetActionRequest ReadPetActionRequest(
WorldPacket& recvData)
102 PetActionRequest request;
103 recvData >> request.action;
106 recvData >> request.y >> request.z >> request.x;
108 request.petGuid[1] = recvData.
ReadBit();
109 request.petGuid[0] = recvData.
ReadBit();
110 request.petGuid[6] = recvData.
ReadBit();
111 request.petGuid[7] = recvData.
ReadBit();
112 request.petGuid[5] = recvData.
ReadBit();
113 request.targetGuid[7] = recvData.
ReadBit();
114 request.petGuid[2] = recvData.
ReadBit();
115 request.petGuid[3] = recvData.
ReadBit();
116 request.targetGuid[6] = recvData.
ReadBit();
117 request.targetGuid[3] = recvData.
ReadBit();
118 request.targetGuid[0] = recvData.
ReadBit();
119 request.targetGuid[2] = recvData.
ReadBit();
120 request.targetGuid[5] = recvData.
ReadBit();
121 request.petGuid[4] = recvData.
ReadBit();
122 request.targetGuid[4] = recvData.
ReadBit();
123 request.targetGuid[1] = recvData.
ReadBit();
145PetGuidRequest ReadPetStopAttackRequest(
WorldPacket& recvData)
147 PetGuidRequest request;
149 request.guid[7] = recvData.
ReadBit();
150 request.guid[5] = recvData.
ReadBit();
151 request.guid[1] = recvData.
ReadBit();
152 request.guid[6] = recvData.
ReadBit();
153 request.guid[0] = recvData.
ReadBit();
154 request.guid[2] = recvData.
ReadBit();
155 request.guid[4] = recvData.
ReadBit();
156 request.guid[3] = recvData.
ReadBit();
170PetNameQueryRequest ReadPetNameQueryRequest(
WorldPacket& recvData)
172 PetNameQueryRequest request;
174 request.petNumber[0] = recvData.
ReadBit();
175 request.petNumber[5] = recvData.
ReadBit();
176 request.petGuid[1] = recvData.
ReadBit();
177 request.petGuid[7] = recvData.
ReadBit();
178 request.petNumber[7] = recvData.
ReadBit();
179 request.petGuid[6] = recvData.
ReadBit();
180 request.petGuid[4] = recvData.
ReadBit();
181 request.petGuid[5] = recvData.
ReadBit();
182 request.petGuid[0] = recvData.
ReadBit();
183 request.petNumber[3] = recvData.
ReadBit();
184 request.petNumber[6] = recvData.
ReadBit();
185 request.petNumber[2] = recvData.
ReadBit();
186 request.petGuid[3] = recvData.
ReadBit();
187 request.petGuid[2] = recvData.
ReadBit();
188 request.petNumber[1] = recvData.
ReadBit();
189 request.petNumber[4] = recvData.
ReadBit();
211PetSetActionRequest ReadPetSetActionRequest(
WorldPacket& recvData)
213 PetSetActionRequest request;
214 recvData >> request.index;
215 recvData >> request.action;
216 recvData.
ReadGuidMask(request.petGuid, 1, 0, 5, 3, 2, 7, 6, 4);
217 recvData.
ReadGuidBytes(request.petGuid, 5, 6, 7, 3, 2, 1, 4, 0);
221PetRenameRequest ReadPetRenameRequest(
WorldPacket& recvData)
223 PetRenameRequest request;
226 recvData >> request.petNumber;
227 bool hasName = !recvData.
ReadBit();
228 request.hasDeclinedNames = recvData.
ReadBit();
229 if (request.hasDeclinedNames)
231 declinedNamesLength[i] = recvData.
ReadBits(7);
234 if (request.hasDeclinedNames)
236 request.declinedName.
name[i] = recvData.
ReadString(declinedNamesLength[i]);
241PetGuidRequest ReadPetAbandonRequest(
WorldPacket& recvData)
243 PetGuidRequest request;
245 request.guid[7] = recvData.
ReadBit();
246 request.guid[3] = recvData.
ReadBit();
247 request.guid[4] = recvData.
ReadBit();
248 request.guid[2] = recvData.
ReadBit();
249 request.guid[5] = recvData.
ReadBit();
250 request.guid[6] = recvData.
ReadBit();
251 request.guid[1] = recvData.
ReadBit();
252 request.guid[0] = recvData.
ReadBit();
266PetSpellAutocastRequest ReadPetSpellAutocastRequest(
WorldPacket& recvPacket)
268 PetSpellAutocastRequest request;
270 recvPacket >> request.spellId;
271 recvPacket.
ReadGuidMask(request.petGuid, 0, 4, 2, 6, 1, 5, 3, 7);
272 request.state = recvPacket.
ReadBit();
273 recvPacket.
ReadGuidBytes(request.petGuid, 5, 0, 4, 1, 7, 2, 3, 6);
278PetCastSpellRequest ReadPetCastSpellRequest(
WorldPacket& recvPacket)
280 PetCastSpellRequest request = PetCastSpellRequest();
284 bool hasUnkMovementField =
false;
285 bool hasTransport =
false;
286 bool hasTransportTime2 =
false;
287 bool hasTransportTime3 =
false;
288 bool hasMovementFlags =
false;
289 bool hasMovementFlags2 =
false;
290 bool hasFallDirection =
false;
291 bool hasFallData =
false;
292 bool hasPitch =
false;
293 bool hasOrientation =
false;
294 bool hasSplineElevation =
false;
295 bool hasTimestamp =
false;
297 uint32 targetStrLength = 0;
298 uint32 movementForcesCount = 0;
299 uint32 archeologyCount = 0;
301 bool hasDestLocation = recvPacket.
ReadBit();
302 request.petGuid[7] = recvPacket.
ReadBit();
303 bool hasMissileSpeed = !recvPacket.
ReadBit();
304 bool hasSrcLocation = recvPacket.
ReadBit();
305 request.petGuid[1] = recvPacket.
ReadBit();
306 archeologyCount = recvPacket.
ReadBits(2);
307 bool hasTargetMask = !recvPacket.
ReadBit();
308 request.petGuid[4] = recvPacket.
ReadBit();
310 request.petGuid[6] = recvPacket.
ReadBit();
311 bool hasTargetString = !recvPacket.
ReadBit();
313 bool hasMovement = recvPacket.
ReadBit();
314 bool hasCastFlags = !recvPacket.
ReadBit();
315 bool hasSpellId = !recvPacket.
ReadBit();
316 request.petGuid[0] = recvPacket.
ReadBit();
317 request.petGuid[5] = recvPacket.
ReadBit();
318 request.petGuid[2] = recvPacket.
ReadBit();
319 for (
uint32 i = 0; i < archeologyCount; ++i)
321 request.petGuid[3] = recvPacket.
ReadBit();
322 bool hasGlyphIndex = !recvPacket.
ReadBit();
323 bool hasCastCount = !recvPacket.
ReadBit();
324 bool hasElevation = !recvPacket.
ReadBit();
328 hasOrientation = !recvPacket.
ReadBit();
329 hasSplineElevation = !recvPacket.
ReadBit();
331 movementGuid[5] = recvPacket.
ReadBit();
332 movementGuid[7] = recvPacket.
ReadBit();
333 hasMovementFlags2 = !recvPacket.
ReadBit();
334 hasTimestamp = !recvPacket.
ReadBit();
335 hasFallData = recvPacket.
ReadBit();
336 hasMovementFlags = !recvPacket.
ReadBit();
337 hasUnkMovementField = !recvPacket.
ReadBit();
339 if (hasMovementFlags)
343 movementGuid[6] = recvPacket.
ReadBit();
344 hasTransport = recvPacket.
ReadBit();
345 movementGuid[0] = recvPacket.
ReadBit();
346 movementForcesCount = recvPacket.
ReadBits(22);
350 hasTransportTime2 = recvPacket.
ReadBit();
351 hasTransportTime3 = recvPacket.
ReadBit();
352 transportGuid[5] = recvPacket.
ReadBit();
353 transportGuid[6] = recvPacket.
ReadBit();
354 transportGuid[4] = recvPacket.
ReadBit();
355 transportGuid[0] = recvPacket.
ReadBit();
356 transportGuid[1] = recvPacket.
ReadBit();
357 transportGuid[2] = recvPacket.
ReadBit();
358 transportGuid[7] = recvPacket.
ReadBit();
359 transportGuid[3] = recvPacket.
ReadBit();
362 movementGuid[1] = recvPacket.
ReadBit();
364 if (hasMovementFlags2)
367 movementGuid[3] = recvPacket.
ReadBit();
368 movementGuid[2] = recvPacket.
ReadBit();
370 hasPitch = !recvPacket.
ReadBit();
371 movementGuid[4] = recvPacket.
ReadBit();
374 hasFallDirection = recvPacket.
ReadBit();
378 recvPacket.
ReadGuidMask(request.transportDstGuid, 2, 0, 1, 4, 5, 6, 3, 7);
381 request.castFlags = recvPacket.
ReadBits(5);
383 recvPacket.
ReadGuidMask(request.itemGuid, 2, 4, 7, 0, 6, 1, 5, 3);
386 request.targetFlags = recvPacket.
ReadBits(20);
389 targetStrLength = recvPacket.
ReadBits(7);
392 recvPacket.
ReadGuidMask(request.transportSrcGuid, 2, 0, 3, 1, 6, 7, 4, 5);
394 recvPacket.
ReadGuidMask(request.targetGuid, 6, 0, 3, 4, 2, 1, 5, 7);
398 for (
uint32 i = 0; i < archeologyCount; ++i)
407 recvPacket.
ReadByteSeq(request.transportDstGuid[4]);
408 recvPacket.
ReadByteSeq(request.transportDstGuid[1]);
409 recvPacket.
ReadByteSeq(request.transportDstGuid[7]);
412 recvPacket.
ReadByteSeq(request.transportDstGuid[6]);
413 recvPacket.
ReadByteSeq(request.transportDstGuid[3]);
415 recvPacket.
ReadByteSeq(request.transportDstGuid[2]);
416 recvPacket.
ReadByteSeq(request.transportDstGuid[5]);
417 recvPacket.
ReadByteSeq(request.transportDstGuid[0]);
427 if (hasTransportTime3)
430 if (hasTransportTime2)
449 if (hasUnkMovementField)
452 for (
uint32 i = 0; i < movementForcesCount; ++i)
466 if (hasFallDirection)
488 if (hasSplineElevation)
494 recvPacket.
ReadByteSeq(request.transportSrcGuid[3]);
495 recvPacket.
ReadByteSeq(request.transportSrcGuid[4]);
496 recvPacket.
ReadByteSeq(request.transportSrcGuid[2]);
497 recvPacket.
ReadByteSeq(request.transportSrcGuid[1]);
498 recvPacket.
ReadByteSeq(request.transportSrcGuid[0]);
499 recvPacket.
ReadByteSeq(request.transportSrcGuid[7]);
501 recvPacket.
ReadByteSeq(request.transportSrcGuid[6]);
502 recvPacket.
ReadByteSeq(request.transportSrcGuid[5]);
508 request.missileSpeed = recvPacket.
read<
float>();
510 recvPacket.
ReadGuidBytes(request.itemGuid, 1, 2, 5, 7, 4, 6, 3, 0);
512 recvPacket.
ReadGuidBytes(request.targetGuid, 1, 5, 7, 3, 0, 2, 4, 6);
515 request.elevation = recvPacket.
read<
float>();
518 request.castCount = recvPacket.
read<
uint8>();
532SetPetSpecializationRequest ReadSetPetSpecializationRequest(
WorldPacket& recvData)
534 SetPetSpecializationRequest request;
535 recvData >> request.talentTab;
536 recvData.
ReadGuidMask(request.petGuid, 5, 7, 3, 0, 6, 4, 1, 2);
537 recvData.
ReadGuidBytes(request.petGuid, 7, 5, 4, 3, 0, 2, 6, 1);
572Unit* ValidatePetStopAttackRequest(
Player* player, PetGuidRequest& request)
583 SF_LOG_ERROR(
"network",
"HandlePetStopAttack: Pet GUID %u isn't a pet or charmed creature of player %s",
594Unit* ValidatePetSetActionRequest(
Player* player, PetSetActionRequest& request,
CharmInfo*& charmInfo)
608 SF_LOG_ERROR(
"network",
"WorldSession::HandlePetSetAction: object (GUID: %u TypeId: %u) is considered pet-like but doesn't have a charminfo!", pet->
GetGUIDLow(),
uint8(pet->
GetTypeId()));
619Pet* ValidatePetRenameTarget(
Player* player)
631bool ValidatePetRenameName(
WorldSession* session, PetRenameRequest& request)
649bool ValidatePetDeclinedNames(
WorldSession* session, PetRenameRequest& request)
664Creature* ValidatePetAbandonRequest(
Player* player, PetGuidRequest& request)
690 spellInfo =
sSpellMgr->GetSpellInfo(request.spellId);
698 SF_LOG_ERROR(
"network",
"WorldSession::HandlePetSpellAutocastOpcod: object (GUID: %u TypeId: %u) is considered pet-like but doesn't have a charminfo!", pet->
GetGUIDLow(),
uint8(pet->
GetTypeId()));
705Unit* ValidatePetCastRequest(
Player* player, PetCastSpellRequest& request,
SpellInfo const*& spellInfo)
720 spellInfo =
sSpellMgr->GetSpellInfo(request.spellId);
723 SF_LOG_ERROR(
"network",
"WORLD: unknown PET spell id %i", request.spellId);
734Pet* ValidatePetSpecializationRequest(
Player* player, SetPetSpecializationRequest& request)
750 PetGuidRequest request = ReadDismissCritterRequest(recvData);
758 SF_LOG_DEBUG(
"network",
"Vanitypet (guid: %u) does not exist - player '%s' (guid: %u / account: %u) attempted to dismiss it (possibly lagged out)",
772 PetActionRequest request = ReadPetActionRequest(recvData);
780 Unit* pet = ValidatePetActionRequest(
GetPlayer(), request, Flag, SpellID);
784 if (
GetPlayer()->m_Controlled.size() == 1)
785 HandlePetActionHelper(pet, request.petGuid, SpellID, Flag, request.targetGuid, request.x, request.y, request.z);
789 std::vector<Unit*> controlled;
790 for (Unit::ControlList::iterator itr =
GetPlayer()->m_Controlled.begin(); itr !=
GetPlayer()->m_Controlled.end(); ++itr)
791 if ((*itr)->GetEntry() == pet->
GetEntry() && (*itr)->IsAlive())
792 controlled.push_back(*itr);
793 for (std::vector<Unit*>::iterator itr = controlled.begin(); itr != controlled.end(); ++itr)
794 HandlePetActionHelper(*itr, request.petGuid, SpellID, Flag, request.targetGuid, request.x, request.y, request.z);
800 PetGuidRequest request = ReadPetStopAttackRequest(recvData);
804 Unit* pet = ValidatePetStopAttackRequest(
GetPlayer(), request);
816 SF_LOG_ERROR(
"network",
"WorldSession::HandlePetAction(petGuid: " UI64FMTD ", tagGuid: " UI64FMTD ", spellId: %u, flag: %u): object (entry: %u TypeId: %u) is considered pet-like but doesn't have a charminfo!",
867 if (!owner->IsValidAttackTarget(TargetUnit))
907 pet->
Attack(TargetUnit,
true);
929 ((
Minion*)pet)->UnSummon();
946 SF_LOG_ERROR(
"network",
"WORLD: unknown PET flag Action %i and spellid %i.",
uint32(flag), spellid);
966 Unit* unit_target = NULL;
975 SF_LOG_ERROR(
"network",
"WORLD: unknown PET spell id %i", spellid);
1076 SF_LOG_ERROR(
"network",
"WORLD: unknown PET flag Action %i and spellid %i.",
uint32(flag), spellid);
1082 SF_LOG_INFO(
"network",
"HandlePetNameQuery. CMSG_PET_NAME_QUERY");
1084 PetNameQueryRequest request = ReadPetNameQueryRequest(recvData);
1096 data <<
uint64(petNumber);
1098 _player->GetSession()->SendPacket(&data);
1105 bool declinedNames = pet->
IsPet() && ((
Pet*)pet)->GetDeclinedNames();
1110 data.
WriteBits(((
Pet*)pet)->GetDeclinedNames()->name[i].size(), 7);
1125 data <<
uint64(petNumber);
1127 _player->GetSession()->SendPacket(&data);
1146 SF_LOG_DEBUG(
"network",
"Stablemaster (GUID:%u) not found or you can't interact with him.",
GUID_LOPART(guid));
1155 SF_LOG_INFO(
"network",
"HandlePetSetAction. CMSG_PET_SET_ACTION");
1157 PetSetActionRequest request = ReadPetSetActionRequest(recvData);
1160 Unit* pet = ValidatePetSetActionRequest(
GetPlayer(), request, charmInfo);
1167 SF_LOG_INFO(
"network",
"Player %s has changed pet spell action. Position: %u, Spell: %u, State: 0x%X",
1168 _player->GetName().c_str(), request.index, spell_id,
uint32(act_state));
1179 ((
Pet*)pet)->ToggleAutocast(spellInfo,
true);
1181 for (Unit::ControlList::iterator itr =
GetPlayer()->m_Controlled.begin(); itr !=
GetPlayer()->m_Controlled.end(); ++itr)
1182 if ((*itr)->GetEntry() == pet->
GetEntry())
1183 (*itr)->GetCharmInfo()->ToggleCreatureAutocast(spellInfo,
true);
1189 ((
Pet*)pet)->ToggleAutocast(spellInfo,
false);
1191 for (Unit::ControlList::iterator itr =
GetPlayer()->m_Controlled.begin(); itr !=
GetPlayer()->m_Controlled.end(); ++itr)
1192 if ((*itr)->GetEntry() == pet->
GetEntry())
1193 (*itr)->GetCharmInfo()->ToggleCreatureAutocast(spellInfo,
false);
1202 SF_LOG_INFO(
"network",
"HandlePetRename. CMSG_PET_RENAME");
1204 PetRenameRequest request = ReadPetRenameRequest(recvData);
1210 if (!ValidatePetRenameName(
this, request))
1220 if (request.hasDeclinedNames)
1221 if (!ValidatePetDeclinedNames(
this, request))
1225 if (request.hasDeclinedNames)
1229 trans->Append(stmt);
1234 for (
uint8 i = 0; i < 5; i++)
1237 trans->Append(stmt);
1244 trans->Append(stmt);
1253 PetGuidRequest request = ReadPetAbandonRequest(recvData);
1270 SF_LOG_INFO(
"network",
"CMSG_PET_SPELL_AUTOCAST");
1272 PetSpellAutocastRequest request = ReadPetSpellAutocastRequest(recvPacket);
1276 Creature* pet = ValidatePetAutocastRequest(
GetPlayer(), request, spellInfo, charmInfo);
1281 ((
Pet*)pet)->ToggleAutocast(spellInfo, request.state);
1292 PetCastSpellRequest request = ReadPetCastSpellRequest(recvPacket);
1294 SF_LOG_DEBUG(
"network",
"WORLD: CMSG_PET_CAST_SPELL, guid: " UI64FMTD ", castCount: %u, spellId %u, castFlags %u",
uint64(request.petGuid), request.castCount, request.spellId, request.castFlags);
1297 Unit* caster = ValidatePetCastRequest(
GetPlayer(), request, spellInfo);
1302 targets.
Initialize(request.targetFlags, request.targetGuid, request.itemGuid, request.transportDstGuid, request.dstLoc, request.transportSrcGuid, request.srcLoc);
1304 targets.
SetSpeed(request.missileSpeed);
1324 creature->AddCreatureSpellCooldown(request.spellId);
1361 data.
WriteBit(declinedName ? 1 : 0);
1374 data <<
uint8(error);
1375 data <<
uint32(petNumber);
1382 SF_LOG_DEBUG(
"network",
"WORLD: CMSG_PET_LEARN_TALENT");
1387 SF_LOG_DEBUG(
"network",
"CMSG_LEARN_PREVIEW_TALENTS_PET");
1392 SF_LOG_DEBUG(
"network",
"CMSG_SET_PET_SPECIALIZATION");
1394 SetPetSpecializationRequest request = ReadSetPetSpecializationRequest(recvData);
1396 Pet* pet = ValidatePetSpecializationRequest(
GetPlayer(), request);
@ CHAR_ADD_CHAR_PET_DECLINEDNAME
@ CHAR_DEL_CHAR_PET_DECLINEDNAME
#define MAX_SPELL_EFFECTS
@ GROUP_UPDATE_FLAG_PET_NAME
#define SF_LOG_DEBUG(filterType__,...)
#define SF_LOG_ERROR(filterType__,...)
#define SF_LOG_INFO(filterType__,...)
uint32 GUID_LOPART(uint64 x)
@ SPELL_ATTR0_CASTABLE_WHILE_DEAD
@ TARGET_DEST_DYNOBJ_ENEMY
@ TARGET_UNIT_DEST_AREA_ENEMY
@ TARGET_UNIT_SRC_AREA_ENEMY
@ PET_NAME_DECLENSION_DOESNT_MATCH_BASE_NAME
@ SPELL_FAILED_UNIT_NOT_INFRONT
Skyfire::AutoPtr< Transaction, Skyfire::Mutex > SQLTransaction
@ UNIT_NPC_FLAG_STABLEMASTER
#define MAX_UNIT_ACTION_BAR_INDEX
#define UNIT_ACTION_BUTTON_ACTION(X)
#define MAX_DECLINED_NAME_CASES
#define UNIT_ACTION_BUTTON_TYPE(X)
@ UNIT_FIELD_SHAPESHIFT_FORM
@ UNIT_FIELD_PET_NAME_TIMESTAMP
bool Utf8toWStr(char const *utf8str, size_t csize, wchar_t *wstr, size_t &wsize)
bool WriteBit(uint32 bit)
void WriteString(std::string const &str)
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 SetReactState(ReactStates st)
void AddCreatureSpellCooldown(uint32 spellid)
bool HasSpell(uint32 spellID) const OVERRIDE
bool HasSpellCooldown(uint32 spell_id) const
void MoveFollow(Unit *target, float dist, float angle, MovementSlot slot=MOTION_SLOT_ACTIVE)
void MovePoint(uint32 id, Position const &pos, bool generatePath=true)
void Clear(bool reset=true)
static Creature * GetCreatureOrPetOrVehicle(WorldObject const &, uint64)
static Unit * GetUnit(WorldObject const &, uint64 guid)
static Player * FindPlayer(uint64)
static Pet * GetPet(WorldObject const &, uint64 guid)
uint32 GetUInt32Value(uint16 index) const
uint32 GetGUIDLow() const
void RemoveByteFlag(uint16 index, uint8 offset, uint8 newFlag)
bool HasByteFlag(uint16 index, uint8 offset, uint8 flag) const
void SendUpdateToPlayer(Player *player)
void SetUInt32Value(uint16 index, uint32 value)
static bool CheckDeclinedNames(const std::wstring &w_ownname, DeclinedName const &names)
static PetNameInvalidReason CheckPetName(std::string const &name)
void setDeathState(DeathState s)
PetType getPetType() const
uint16 GetPetSpecByTalentTab(uint16 talenttab)
void SetSpec(uint16 spec)
bool HasSpellCooldown(uint32 spell_id) const
void RemovePet(Pet *pet, PetSaveMode mode, bool returnreagent=false)
void SendClearCooldown(uint32 spell_id, Unit *target)
void setString(const uint8 index, const std::string &value)
void setUInt32(const uint8 index, const uint32 value)
void SetSpeed(float speed)
void Initialize(uint32 flags, uint64 target, uint64 itemTarget, uint64 dest, WorldLocation destPos, uint64 src, WorldLocation srcPos)
void SetElevation(float elevation)
Unit * GetUnitTarget() const
void Update(Unit *caster)
SpellImplicitTargetInfo TargetA
static void SendCastResult(Player *caster, SpellInfo const *spellInfo, uint8 cast_count, SpellCastResult result, SpellCustomErrors customError=SPELL_CUSTOM_ERROR_NONE, Opcodes opcode=SMSG_CAST_FAILED)
SpellCastTargets m_targets
void SendPetCastResult(SpellCastResult result)
void prepare(SpellCastTargets const *targets, AuraEffect const *triggeredByAura=NULL)
SpellCastResult CheckPetCast(Unit *target)
void finish(bool ok=true)
Targets GetTarget() const
SpellEffectInfo Effects[MAX_SPELL_EFFECTS]
bool IsAutocastable() const
virtual void UnSummon(uint32 msTime=0)
virtual void AttackStart(Unit *)
void ClearUnitState(uint32 f)
void InterruptNonMeleeSpells(bool withDelayed, uint32 spellid=0, bool withInstant=true)
MotionMaster * GetMotionMaster()
void StopMoving()
-------—End of Pet responses methods-------—
TempSummon * ToTempSummon()
CharmInfo * GetCharmInfo()
uint64 GetCharmerGUID() const
virtual bool HasSpell(uint32) const
Unit * GetCharmerOrOwner() const
bool Attack(Unit *victim, bool meleeAttack)
void SendPetTalk(uint32 pettalk) const
virtual float GetFollowAngle() const
Unit * GetFirstControlled() const
uint32 HasUnitTypeMask(uint32 mask) const
uint64 GetOwnerGUID() const
void SetInFront(WorldObject const *target)
Vehicle * GetVehicleKit() const
Guardian * GetGuardianPet() const
void SendPetAIReaction(ObjectGuid UnitGUID) const
Unit * GetPassenger(int8 seatId) const
Gets a passenger on specified seat.
void SetName(std::string const &newname)
std::string const & GetName() const
Player session in the World.
void HandleDismissCritter(WorldPacket &recvData)
void HandlePetRename(WorldPacket &recvData)
void HandlePetCastSpellOpcode(WorldPacket &recvPacket)
bool CheckStableMaster(uint64 guid)
void SendPetNameInvalid(uint32 error, std::string const &name, DeclinedName *declinedName, uint32 petNumber)
void HandleSetPetSpecialization(WorldPacket &recvData)
Player * GetPlayer() const
void HandlePetSetAction(WorldPacket &recvData)
void HandleLearnPreviewTalentsPet(WorldPacket &recvPacket)
void HandlePetSpellAutocastOpcode(WorldPacket &recvPacket)
void HandlePetAction(WorldPacket &recvData)
void SendPacket(WorldPacket const *packet, bool forced=false)
Send a packet to the client.
uint32 GetAccountId() const
void HandlePetAbandon(WorldPacket &recvData)
void HandlePetLearnTalent(WorldPacket &recvPacket)
void HandlePetNameQuery(WorldPacket &recvData)
void HandlePetActionHelper(Unit *pet, uint64 guid1, uint32 spellid, uint16 flag, uint64 guid2, float x, float y, float z)
void SendPetNameQuery(ObjectGuid guid, uint64 petNumber)
void HandlePetStopAttack(WorldPacket &recvData)
CharacterDatabaseWorkerPool CharacterDatabase
Accessor to the character database.
@ SMSG_PET_NAME_QUERY_RESPONSE
bool IsCommandAttack() const
void SetIsCommandFollow(bool val)
uint32 GetPetNumber() const
void SetActionBar(uint8 index, uint32 spellOrAction, ActiveStates type)
void SetIsAtStay(bool val)
void SetIsFollowing(bool val)
void SetIsReturning(bool val)
void SetSpellAutocast(SpellInfo const *spellInfo, bool state)
void ToggleCreatureAutocast(SpellInfo const *spellInfo, bool apply)
void SetCommandState(CommandStates st)
void SetIsCommandAttack(bool val)
std::string name[MAX_DECLINED_NAME_CASES]