mirror of
https://github.com/mangosfour/server.git
synced 2025-12-13 04:37:00 +00:00
[9551] Add and use PackedGuid wrapper.
Also * use more wide bytebuff << >> operators for objects * use at read packet faisl alsways exception way instead some time used bool results.
This commit is contained in:
parent
ad9243ebd0
commit
c8fd454a79
26 changed files with 351 additions and 340 deletions
|
|
@ -651,7 +651,7 @@ void AchievementMgr::SendAchievementEarned(AchievementEntry const* achievement)
|
|||
}
|
||||
|
||||
WorldPacket data(SMSG_ACHIEVEMENT_EARNED, 8+4+8);
|
||||
data.append(GetPlayer()->GetPackGUID());
|
||||
data << GetPlayer()->GetPackGUID();
|
||||
data << uint32(achievement->ID);
|
||||
data << uint32(secsToTimeBitFields(time(NULL)));
|
||||
data << uint32(0);
|
||||
|
|
@ -666,7 +666,7 @@ void AchievementMgr::SendCriteriaUpdate(uint32 id, CriteriaProgress const* progr
|
|||
// the counter is packed like a packed Guid
|
||||
data.appendPackGUID(progress->counter);
|
||||
|
||||
data.append(GetPlayer()->GetPackGUID());
|
||||
data << GetPlayer()->GetPackGUID();
|
||||
data << uint32(0);
|
||||
data << uint32(secsToTimeBitFields(progress->date));
|
||||
data << uint32(0); // timer 1
|
||||
|
|
@ -1855,7 +1855,7 @@ void AchievementMgr::SendRespondInspectAchievements(Player* player)
|
|||
{
|
||||
// since we don't know the exact size of the packed GUIDs this is just an approximation
|
||||
WorldPacket data(SMSG_RESPOND_INSPECT_ACHIEVEMENTS, 4+4*2+m_completedAchievements.size()*4*2+m_completedAchievements.size()*7*4);
|
||||
data.append(GetPlayer()->GetPackGUID());
|
||||
data << GetPlayer()->GetPackGUID();
|
||||
BuildAllDataPacket(&data);
|
||||
player->GetSession()->SendPacket(&data);
|
||||
}
|
||||
|
|
@ -1876,7 +1876,7 @@ void AchievementMgr::BuildAllDataPacket(WorldPacket *data)
|
|||
{
|
||||
*data << uint32(iter->first);
|
||||
data->appendPackGUID(iter->second.counter);
|
||||
data->append(GetPlayer()->GetPackGUID());
|
||||
*data << GetPlayer()->GetPackGUID();
|
||||
*data << uint32(0);
|
||||
*data << uint32(secsToTimeBitFields(iter->second.date));
|
||||
*data << uint32(0);
|
||||
|
|
|
|||
|
|
@ -1233,43 +1233,41 @@ void WorldSession::HandleEquipmentSetSave(WorldPacket &recv_data)
|
|||
{
|
||||
sLog.outDebug("CMSG_EQUIPMENT_SET_SAVE");
|
||||
|
||||
uint64 setGuid;
|
||||
if(!recv_data.readPackGUID(setGuid))
|
||||
return;
|
||||
|
||||
ObjectGuid setGuid;
|
||||
uint32 index;
|
||||
std::string name;
|
||||
std::string iconName;
|
||||
|
||||
recv_data >> setGuid.ReadAsPacked();
|
||||
recv_data >> index;
|
||||
recv_data >> name;
|
||||
recv_data >> iconName;
|
||||
|
||||
if(index >= MAX_EQUIPMENT_SET_INDEX) // client set slots amount
|
||||
return;
|
||||
|
||||
std::string name;
|
||||
recv_data >> name;
|
||||
|
||||
std::string iconName;
|
||||
recv_data >> iconName;
|
||||
|
||||
EquipmentSet eqSet;
|
||||
|
||||
eqSet.Guid = setGuid;
|
||||
eqSet.Guid = setGuid.GetRawValue();
|
||||
eqSet.Name = name;
|
||||
eqSet.IconName = iconName;
|
||||
eqSet.state = EQUIPMENT_SET_NEW;
|
||||
|
||||
for(uint32 i = 0; i < EQUIPMENT_SLOT_END; ++i)
|
||||
{
|
||||
uint64 itemGuid;
|
||||
if(!recv_data.readPackGUID(itemGuid))
|
||||
return;
|
||||
ObjectGuid itemGuid;
|
||||
|
||||
recv_data >> itemGuid.ReadAsPacked();
|
||||
|
||||
Item *item = _player->GetItemByPos(INVENTORY_SLOT_BAG_0, i);
|
||||
|
||||
if(!item && itemGuid) // cheating check 1
|
||||
if(!item && !itemGuid.IsEmpty()) // cheating check 1
|
||||
return;
|
||||
|
||||
if(item && item->GetGUID() != itemGuid) // cheating check 2
|
||||
if(item && item->GetGUID() != itemGuid.GetRawValue())// cheating check 2
|
||||
return;
|
||||
|
||||
eqSet.Items[i] = GUID_LOPART(itemGuid);
|
||||
eqSet.Items[i] = itemGuid.GetCounter();
|
||||
}
|
||||
|
||||
_player->SetEquipmentSet(index, eqSet);
|
||||
|
|
@ -1279,11 +1277,11 @@ void WorldSession::HandleEquipmentSetDelete(WorldPacket &recv_data)
|
|||
{
|
||||
sLog.outDebug("CMSG_EQUIPMENT_SET_DELETE");
|
||||
|
||||
uint64 setGuid;
|
||||
if(!recv_data.readPackGUID(setGuid))
|
||||
return;
|
||||
ObjectGuid setGuid;
|
||||
|
||||
_player->DeleteEquipmentSet(setGuid);
|
||||
recv_data >> setGuid.ReadAsPacked();
|
||||
|
||||
_player->DeleteEquipmentSet(setGuid.GetRawValue());
|
||||
}
|
||||
|
||||
void WorldSession::HandleEquipmentSetUse(WorldPacket &recv_data)
|
||||
|
|
@ -1293,16 +1291,15 @@ void WorldSession::HandleEquipmentSetUse(WorldPacket &recv_data)
|
|||
|
||||
for(uint32 i = 0; i < EQUIPMENT_SLOT_END; ++i)
|
||||
{
|
||||
uint64 itemGuid;
|
||||
if(!recv_data.readPackGUID(itemGuid))
|
||||
return;
|
||||
|
||||
ObjectGuid itemGuid;
|
||||
uint8 srcbag, srcslot;
|
||||
|
||||
recv_data >> itemGuid.ReadAsPacked();
|
||||
recv_data >> srcbag >> srcslot;
|
||||
|
||||
sLog.outDebug("Item " I64FMT ": srcbag %u, srcslot %u", itemGuid, srcbag, srcslot);
|
||||
|
||||
Item *item = _player->GetItemByGuid(itemGuid);
|
||||
Item *item = _player->GetItemByGuid(itemGuid.GetRawValue());
|
||||
|
||||
uint16 dstpos = i | (INVENTORY_SLOT_BAG_0 << 8);
|
||||
|
||||
|
|
|
|||
|
|
@ -89,8 +89,8 @@ void WorldSession::HandleSetSheathedOpcode( WorldPacket & recv_data )
|
|||
void WorldSession::SendAttackStop(Unit const* enemy)
|
||||
{
|
||||
WorldPacket data( SMSG_ATTACKSTOP, (4+20) ); // we guess size
|
||||
data.append(GetPlayer()->GetPackGUID());
|
||||
data.append(enemy ? enemy->GetPackGUID() : 0); // must be packed guid
|
||||
data << GetPlayer()->GetPackGUID();
|
||||
data << (enemy ? enemy->GetPackGUID() : PackedGuid()); // must be packed guid
|
||||
data << uint32(0); // unk, can be 1 also
|
||||
SendPacket(&data);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -635,7 +635,7 @@ void WorldSession::BuildPartyMemberStatsChangedPacket(Player *player, WorldPacke
|
|||
byteCount += GroupUpdateLength[i];
|
||||
|
||||
data->Initialize(SMSG_PARTY_MEMBER_STATS, 8 + 4 + byteCount);
|
||||
data->append(player->GetPackGUID());
|
||||
*data << player->GetPackGUID();
|
||||
*data << (uint32) mask;
|
||||
|
||||
if (mask & GROUP_UPDATE_FLAG_STATUS)
|
||||
|
|
@ -798,7 +798,7 @@ void WorldSession::HandleRequestPartyMemberStatsOpcode( WorldPacket &recv_data )
|
|||
|
||||
WorldPacket data(SMSG_PARTY_MEMBER_STATS_FULL, 4+2+2+2+1+2*6+8+1+8);
|
||||
data << uint8(0); // only for SMSG_PARTY_MEMBER_STATS_FULL, probably arena/bg related
|
||||
data.append(player->GetPackGUID());
|
||||
data << player->GetPackGUID();
|
||||
|
||||
uint32 mask1 = 0x00040BFF; // common mask, real flags used 0x000040BFF
|
||||
if(pet)
|
||||
|
|
|
|||
|
|
@ -1603,14 +1603,14 @@ bool ChatHandler::HandleModifyMountCommand(const char* args)
|
|||
chr->Mount(mId);
|
||||
|
||||
WorldPacket data( SMSG_FORCE_RUN_SPEED_CHANGE, (8+4+1+4) );
|
||||
data.append(chr->GetPackGUID());
|
||||
data << chr->GetPackGUID();
|
||||
data << (uint32)0;
|
||||
data << (uint8)0; //new 2.1.0
|
||||
data << float(speed);
|
||||
chr->SendMessageToSet( &data, true );
|
||||
|
||||
data.Initialize( SMSG_FORCE_SWIM_SPEED_CHANGE, (8+4+4) );
|
||||
data.append(chr->GetPackGUID());
|
||||
data << chr->GetPackGUID();
|
||||
data << (uint32)0;
|
||||
data << float(speed);
|
||||
chr->SendMessageToSet( &data, true );
|
||||
|
|
|
|||
|
|
@ -5429,7 +5429,7 @@ bool ChatHandler::HandleGMFlyCommand(const char* args)
|
|||
SendSysMessage(LANG_USE_BOL);
|
||||
return false;
|
||||
}
|
||||
data.append(target->GetPackGUID());
|
||||
data << target->GetPackGUID();
|
||||
data << uint32(0); // unknown
|
||||
target->SendMessageToSet(&data, true);
|
||||
PSendSysMessage(LANG_COMMAND_FLYMODE_STATUS, GetNameLink(target).c_str(), args);
|
||||
|
|
|
|||
|
|
@ -292,7 +292,7 @@ void WorldSession::HandleLogoutRequestOpcode( WorldPacket & /*recv_data*/ )
|
|||
GetPlayer()->SetStandState(UNIT_STAND_STATE_SIT);
|
||||
|
||||
WorldPacket data( SMSG_FORCE_MOVE_ROOT, (8+4) ); // guess size
|
||||
data.append(GetPlayer()->GetPackGUID());
|
||||
data << GetPlayer()->GetPackGUID();
|
||||
data << (uint32)2;
|
||||
SendPacket( &data );
|
||||
GetPlayer()->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED);
|
||||
|
|
@ -324,7 +324,7 @@ void WorldSession::HandleLogoutCancelOpcode( WorldPacket & /*recv_data*/ )
|
|||
{
|
||||
//!we can move again
|
||||
data.Initialize( SMSG_FORCE_MOVE_UNROOT, 8 ); // guess size
|
||||
data.append(GetPlayer()->GetPackGUID());
|
||||
data << GetPlayer()->GetPackGUID();
|
||||
data << uint32(0);
|
||||
SendPacket( &data );
|
||||
|
||||
|
|
@ -1004,13 +1004,11 @@ void WorldSession::HandleMoveTimeSkippedOpcode( WorldPacket & recv_data )
|
|||
/* WorldSession::Update( getMSTime() );*/
|
||||
DEBUG_LOG( "WORLD: Time Lag/Synchronization Resent/Update" );
|
||||
|
||||
uint64 guid;
|
||||
if(!recv_data.readPackGUID(guid))
|
||||
{
|
||||
recv_data.rpos(recv_data.wpos());
|
||||
return;
|
||||
}
|
||||
recv_data.read_skip<uint32>();
|
||||
ObjectGuid guid;
|
||||
|
||||
recv_data >> guid.ReadAsPacked();
|
||||
recv_data >> Unused<uint32>();
|
||||
|
||||
/*
|
||||
uint64 guid;
|
||||
uint32 time_skipped;
|
||||
|
|
@ -1133,7 +1131,7 @@ void WorldSession::HandleInspectOpcode(WorldPacket& recv_data)
|
|||
return;
|
||||
|
||||
WorldPacket data(SMSG_INSPECT_TALENT, 50);
|
||||
data.append(plr->GetPackGUID());
|
||||
data << plr->GetPackGUID();
|
||||
|
||||
if(sWorld.getConfig(CONFIG_BOOL_TALENTS_INSPECTING) || _player->isGameMaster())
|
||||
{
|
||||
|
|
@ -1517,15 +1515,13 @@ void WorldSession::HandleMoveSetCanFlyAckOpcode( WorldPacket & recv_data )
|
|||
sLog.outDebug("WORLD: CMSG_MOVE_SET_CAN_FLY_ACK");
|
||||
//recv_data.hexlike();
|
||||
|
||||
uint64 guid; // guid - unused
|
||||
if(!recv_data.readPackGUID(guid))
|
||||
return;
|
||||
ObjectGuid guid; // guid - unused
|
||||
MovementInfo movementInfo;
|
||||
|
||||
recv_data.read_skip<uint32>(); // unk
|
||||
|
||||
MovementInfo movementInfo(recv_data);
|
||||
|
||||
recv_data.read_skip<float>(); // unk2
|
||||
recv_data >> guid.ReadAsPacked();
|
||||
recv_data >> Unused<uint32>(); // unk
|
||||
recv_data >> movementInfo;
|
||||
recv_data >> Unused<float>(); // unk2
|
||||
|
||||
_player->m_movementInfo.SetMovementFlags(movementInfo.GetMovementFlags());
|
||||
}
|
||||
|
|
@ -1548,11 +1544,11 @@ void WorldSession::HandleSetTaxiBenchmarkOpcode( WorldPacket & recv_data )
|
|||
|
||||
void WorldSession::HandleQueryInspectAchievements( WorldPacket & recv_data )
|
||||
{
|
||||
uint64 guid;
|
||||
if(!recv_data.readPackGUID(guid))
|
||||
return;
|
||||
ObjectGuid guid;
|
||||
|
||||
if(Player *player = sObjectMgr.GetPlayer(guid))
|
||||
recv_data >> guid.ReadAsPacked();
|
||||
|
||||
if(Player *player = sObjectMgr.GetPlayer(guid.GetRawValue()))
|
||||
player->GetAchievementMgr().SendRespondInspectAchievements(_player);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -171,10 +171,10 @@ void WorldSession::HandleMoveWorldportAckOpcode()
|
|||
void WorldSession::HandleMoveTeleportAck(WorldPacket& recv_data)
|
||||
{
|
||||
sLog.outDebug("MSG_MOVE_TELEPORT_ACK");
|
||||
uint64 guid;
|
||||
|
||||
if(!recv_data.readPackGUID(guid))
|
||||
return;
|
||||
ObjectGuid guid;
|
||||
|
||||
recv_data >> guid.ReadAsPacked();
|
||||
|
||||
uint32 flags, time;
|
||||
recv_data >> flags >> time;
|
||||
|
|
@ -187,7 +187,7 @@ void WorldSession::HandleMoveTeleportAck(WorldPacket& recv_data)
|
|||
if(!plMover || !plMover->IsBeingTeleportedNear())
|
||||
return;
|
||||
|
||||
if(guid != plMover->GetGUID())
|
||||
if(guid.GetRawValue() != plMover->GetGUID())
|
||||
return;
|
||||
|
||||
plMover->SetSemaphoreTeleportNear(false);
|
||||
|
|
@ -234,12 +234,11 @@ void WorldSession::HandleMovementOpcodes( WorldPacket & recv_data )
|
|||
}
|
||||
|
||||
/* extract packet */
|
||||
uint64 guid;
|
||||
ObjectGuid guid;
|
||||
MovementInfo movementInfo;
|
||||
|
||||
if(!recv_data.readPackGUID(guid))
|
||||
return;
|
||||
|
||||
MovementInfo movementInfo(recv_data);
|
||||
recv_data >> guid.ReadAsPacked();
|
||||
recv_data >> movementInfo;
|
||||
/*----------------*/
|
||||
|
||||
if (!MaNGOS::IsValidMapCoord(movementInfo.GetPos()->x, movementInfo.GetPos()->y, movementInfo.GetPos()->z, movementInfo.GetPos()->o))
|
||||
|
|
@ -364,26 +363,21 @@ void WorldSession::HandleForceSpeedChangeAck(WorldPacket &recv_data)
|
|||
uint32 opcode = recv_data.GetOpcode();
|
||||
sLog.outDebug("WORLD: Recvd %s (%u, 0x%X) opcode", LookupOpcodeName(opcode), opcode, opcode);
|
||||
/* extract packet */
|
||||
uint64 guid;
|
||||
uint32 unk1;
|
||||
ObjectGuid guid;
|
||||
MovementInfo movementInfo;
|
||||
float newspeed;
|
||||
|
||||
if(!recv_data.readPackGUID(guid))
|
||||
return;
|
||||
recv_data >> guid.ReadAsPacked();
|
||||
recv_data >> Unused<uint32>(); // counter or moveEvent
|
||||
recv_data >> movementInfo;
|
||||
recv_data >> newspeed;
|
||||
|
||||
// now can skip not our packet
|
||||
if(_player->GetGUID() != guid)
|
||||
if(_player->GetGUID() != guid.GetRawValue())
|
||||
{
|
||||
recv_data.rpos(recv_data.wpos()); // prevent warnings spam
|
||||
return;
|
||||
}
|
||||
|
||||
// continue parse packet
|
||||
recv_data >> unk1; // counter or moveEvent
|
||||
|
||||
MovementInfo movementInfo(recv_data);
|
||||
|
||||
recv_data >> newspeed;
|
||||
/*----------------*/
|
||||
|
||||
// client ACK send one packet for mounted/run case and need skip all except last from its
|
||||
|
|
@ -455,20 +449,19 @@ void WorldSession::HandleMoveNotActiveMover(WorldPacket &recv_data)
|
|||
sLog.outDebug("WORLD: Recvd CMSG_MOVE_NOT_ACTIVE_MOVER");
|
||||
recv_data.hexlike();
|
||||
|
||||
uint64 old_mover_guid;
|
||||
ObjectGuid old_mover_guid;
|
||||
MovementInfo mi;
|
||||
|
||||
if(!recv_data.readPackGUID(old_mover_guid))
|
||||
return;
|
||||
recv_data >> old_mover_guid.ReadAsPacked();
|
||||
recv_data >> mi;
|
||||
|
||||
if(_player->m_mover->GetGUID() == old_mover_guid)
|
||||
if(_player->m_mover->GetGUID() == old_mover_guid.GetRawValue())
|
||||
{
|
||||
sLog.outError("HandleMoveNotActiveMover: incorrect mover guid: mover is " I64FMT " and should be " I64FMT " instead of " UI64FMTD, _player->m_mover->GetGUID(), _player->GetGUID(), old_mover_guid);
|
||||
recv_data.rpos(recv_data.wpos()); // prevent warnings spam
|
||||
return;
|
||||
}
|
||||
|
||||
MovementInfo mi(recv_data);
|
||||
|
||||
_player->m_movementInfo = mi;
|
||||
}
|
||||
|
||||
|
|
@ -477,20 +470,16 @@ void WorldSession::HandleDismissControlledVehicle(WorldPacket &recv_data)
|
|||
sLog.outDebug("WORLD: Recvd CMSG_DISMISS_CONTROLLED_VEHICLE");
|
||||
recv_data.hexlike();
|
||||
|
||||
ObjectGuid guid;
|
||||
MovementInfo mi;
|
||||
|
||||
recv_data >> guid.ReadAsPacked();
|
||||
recv_data >> mi;
|
||||
|
||||
uint64 vehicleGUID = _player->GetCharmGUID();
|
||||
|
||||
if(!vehicleGUID) // something wrong here...
|
||||
{
|
||||
recv_data.rpos(recv_data.wpos()); // prevent warnings spam
|
||||
return;
|
||||
}
|
||||
|
||||
uint64 guid;
|
||||
|
||||
if(!recv_data.readPackGUID(guid))
|
||||
return;
|
||||
|
||||
MovementInfo mi(recv_data);
|
||||
|
||||
_player->m_movementInfo = mi;
|
||||
|
||||
|
|
@ -516,43 +505,38 @@ void WorldSession::HandleMoveKnockBackAck( WorldPacket & recv_data )
|
|||
{
|
||||
sLog.outDebug("CMSG_MOVE_KNOCK_BACK_ACK");
|
||||
|
||||
uint64 guid; // guid - unused
|
||||
if(!recv_data.readPackGUID(guid))
|
||||
return;
|
||||
ObjectGuid guid; // guid - unused
|
||||
MovementInfo movementInfo;
|
||||
|
||||
recv_data.read_skip<uint32>(); // unk
|
||||
|
||||
MovementInfo movementInfo(recv_data);
|
||||
recv_data >> guid.ReadAsPacked();
|
||||
recv_data >> Unused<uint32>(); // unk
|
||||
recv_data >> movementInfo;
|
||||
}
|
||||
|
||||
void WorldSession::HandleMoveHoverAck( WorldPacket& recv_data )
|
||||
{
|
||||
sLog.outDebug("CMSG_MOVE_HOVER_ACK");
|
||||
|
||||
uint64 guid; // guid - unused
|
||||
if(!recv_data.readPackGUID(guid))
|
||||
return;
|
||||
ObjectGuid guid; // guid - unused
|
||||
MovementInfo movementInfo;
|
||||
|
||||
recv_data.read_skip<uint32>(); // unk
|
||||
|
||||
MovementInfo movementInfo(recv_data);
|
||||
|
||||
recv_data.read_skip<uint32>(); // unk2
|
||||
recv_data >> guid.ReadAsPacked();
|
||||
recv_data >> Unused<uint32>(); // unk1
|
||||
recv_data >> movementInfo;
|
||||
recv_data >> Unused<uint32>(); // unk2
|
||||
}
|
||||
|
||||
void WorldSession::HandleMoveWaterWalkAck(WorldPacket& recv_data)
|
||||
{
|
||||
sLog.outDebug("CMSG_MOVE_WATER_WALK_ACK");
|
||||
|
||||
uint64 guid; // guid - unused
|
||||
if(!recv_data.readPackGUID(guid))
|
||||
return;
|
||||
ObjectGuid guid; // guid - unused
|
||||
MovementInfo movementInfo;
|
||||
|
||||
recv_data.read_skip<uint32>(); // unk
|
||||
|
||||
MovementInfo movementInfo(recv_data);
|
||||
|
||||
recv_data.read_skip<uint32>(); // unk2
|
||||
recv_data >> guid.ReadAsPacked();
|
||||
recv_data >> Unused<uint32>(); // unk1
|
||||
recv_data >> movementInfo;
|
||||
recv_data >> Unused<uint32>(); // unk2
|
||||
}
|
||||
|
||||
void WorldSession::HandleSummonResponseOpcode(WorldPacket& recv_data)
|
||||
|
|
|
|||
|
|
@ -63,7 +63,7 @@ uint32 GuidHigh2TypeId(uint32 guid_hi)
|
|||
return TYPEID_OBJECT; // unknown
|
||||
}
|
||||
|
||||
Object::Object( ) : m_PackGUID(sizeof(uint64)+1)
|
||||
Object::Object( )
|
||||
{
|
||||
m_objectTypeId = TYPEID_OBJECT;
|
||||
m_objectType = TYPEMASK_OBJECT;
|
||||
|
|
@ -74,8 +74,6 @@ Object::Object( ) : m_PackGUID(sizeof(uint64)+1)
|
|||
|
||||
m_inWorld = false;
|
||||
m_objectUpdated = false;
|
||||
|
||||
m_PackGUID.appendPackGUID(0);
|
||||
}
|
||||
|
||||
Object::~Object( )
|
||||
|
|
@ -121,8 +119,7 @@ void Object::_Create( uint32 guidlow, uint32 entry, HighGuid guidhigh )
|
|||
uint64 guid = MAKE_NEW_GUID(guidlow, entry, guidhigh);
|
||||
SetUInt64Value(OBJECT_FIELD_GUID, guid);
|
||||
SetUInt32Value(OBJECT_FIELD_TYPE, m_objectType);
|
||||
m_PackGUID.wpos(0);
|
||||
m_PackGUID.appendPackGUID(GetGUID());
|
||||
m_PackGUID.Set(guid);
|
||||
}
|
||||
|
||||
void Object::BuildMovementUpdateBlock(UpdateData * data, uint16 flags ) const
|
||||
|
|
@ -130,7 +127,7 @@ void Object::BuildMovementUpdateBlock(UpdateData * data, uint16 flags ) const
|
|||
ByteBuffer buf(500);
|
||||
|
||||
buf << uint8(UPDATETYPE_MOVEMENT);
|
||||
buf.append(GetPackGUID());
|
||||
buf << GetPackGUID();
|
||||
|
||||
BuildMovementUpdate(&buf, flags);
|
||||
|
||||
|
|
@ -189,7 +186,7 @@ void Object::BuildCreateUpdateBlockForPlayer(UpdateData *data, Player *target) c
|
|||
|
||||
ByteBuffer buf(500);
|
||||
buf << uint8(updatetype);
|
||||
buf.append(GetPackGUID());
|
||||
buf << GetPackGUID();
|
||||
buf << uint8(m_objectTypeId);
|
||||
|
||||
BuildMovementUpdate(&buf, updateFlags);
|
||||
|
|
@ -217,7 +214,7 @@ void Object::BuildValuesUpdateBlockForPlayer(UpdateData *data, Player *target) c
|
|||
ByteBuffer buf(500);
|
||||
|
||||
buf << uint8(UPDATETYPE_VALUES);
|
||||
buf.append(GetPackGUID());
|
||||
buf << GetPackGUID();
|
||||
|
||||
UpdateMask updateMask;
|
||||
updateMask.SetCount(m_valuesCount);
|
||||
|
|
@ -510,7 +507,7 @@ void Object::BuildMovementUpdate(ByteBuffer * data, uint16 updateFlags) const
|
|||
if(updateFlags & UPDATEFLAG_HAS_ATTACKING_TARGET) // packed guid (current target guid)
|
||||
{
|
||||
if (((Unit*)this)->getVictim())
|
||||
data->append(((Unit*)this)->getVictim()->GetPackGUID());
|
||||
*data << ((Unit*)this)->getVictim()->GetPackGUID();
|
||||
else
|
||||
data->appendPackGUID(0);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -112,7 +112,7 @@ class MANGOS_DLL_SPEC Object
|
|||
uint32 GetGUIDLow() const { return GUID_LOPART(GetUInt64Value(0)); }
|
||||
uint32 GetGUIDMid() const { return GUID_ENPART(GetUInt64Value(0)); }
|
||||
uint32 GetGUIDHigh() const { return GUID_HIPART(GetUInt64Value(0)); }
|
||||
const ByteBuffer& GetPackGUID() const { return m_PackGUID; }
|
||||
PackedGuid const& GetPackGUID() const { return m_PackGUID; }
|
||||
uint32 GetEntry() const { return GetUInt32Value(OBJECT_FIELD_ENTRY); }
|
||||
void SetEntry(uint32 entry) { SetUInt32Value(OBJECT_FIELD_ENTRY, entry); }
|
||||
|
||||
|
|
@ -312,7 +312,7 @@ class MANGOS_DLL_SPEC Object
|
|||
private:
|
||||
bool m_inWorld;
|
||||
|
||||
ByteBuffer m_PackGUID;
|
||||
PackedGuid m_PackGUID;
|
||||
|
||||
// for output helpfull error messages from asserts
|
||||
bool PrintIndexError(uint32 index, bool set) const;
|
||||
|
|
|
|||
|
|
@ -17,7 +17,6 @@
|
|||
*/
|
||||
|
||||
#include "ObjectGuid.h"
|
||||
#include "ByteBuffer.h"
|
||||
#include <sstream>
|
||||
|
||||
char const* ObjectGuid::GetTypeName() const
|
||||
|
|
@ -60,3 +59,15 @@ ByteBuffer &operator>>(ByteBuffer& buf, ObjectGuid& guid)
|
|||
guid.Set(buf.read<uint64>());
|
||||
return buf;
|
||||
}
|
||||
|
||||
ByteBuffer& operator<< (ByteBuffer& buf, PackedGuid const& guid)
|
||||
{
|
||||
buf.append(guid.m_packedGuid);
|
||||
return buf;
|
||||
}
|
||||
|
||||
ByteBuffer &operator>>(ByteBuffer& buf, PackedGuidReader& guid)
|
||||
{
|
||||
guid.m_guidRef.Set(buf.readPackGUID());
|
||||
return buf;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,8 +20,7 @@
|
|||
#define MANGOS_OBJECT_GUID_H
|
||||
|
||||
#include "Common.h"
|
||||
|
||||
class ByteBuffer;
|
||||
#include "ByteBuffer.h"
|
||||
|
||||
enum TypeID
|
||||
{
|
||||
|
|
@ -114,6 +113,14 @@ inline bool IsGuidHaveEnPart(uint64 const& guid)
|
|||
#define GUID_LOPART(x) (IsGuidHaveEnPart(x) ? _GUID_LOPART_3(x) : _GUID_LOPART_2(x))
|
||||
|
||||
//*** Must be replaced by ObjectGuid use END ***
|
||||
class ObjectGuid;
|
||||
class PackedGuid;
|
||||
|
||||
struct PackedGuidReader
|
||||
{
|
||||
explicit PackedGuidReader(ObjectGuid& guid) : m_guidRef(guid) {}
|
||||
ObjectGuid& m_guidRef;
|
||||
};
|
||||
|
||||
class ObjectGuid
|
||||
{
|
||||
|
|
@ -123,6 +130,8 @@ class ObjectGuid
|
|||
ObjectGuid(HighGuid hi, uint32 entry, uint32 counter) : m_guid(uint64(counter) | (uint64(entry) << 24) | (uint64(hi) << 48)) {}
|
||||
|
||||
public: // modifiers
|
||||
PackedGuidReader ReadAsPacked() { return PackedGuidReader(*this); }
|
||||
|
||||
void Set(uint64 const& guid) { m_guid = guid; }
|
||||
|
||||
// Possible removed in future for more strict control type conversions
|
||||
|
|
@ -170,6 +179,8 @@ class ObjectGuid
|
|||
default: return TYPEID_OBJECT;
|
||||
}
|
||||
}
|
||||
|
||||
PackedGuid WriteAsPacked() const;
|
||||
public: // accessors - for debug
|
||||
char const* GetTypeName() const;
|
||||
std::string GetString() const;
|
||||
|
|
@ -198,7 +209,32 @@ class ObjectGuid
|
|||
uint64 m_guid;
|
||||
};
|
||||
|
||||
class PackedGuid
|
||||
{
|
||||
friend ByteBuffer& operator<< (ByteBuffer& buf, PackedGuid const& guid);
|
||||
|
||||
public: // constructors
|
||||
explicit PackedGuid() { m_packedGuid.appendPackGUID(0); }
|
||||
explicit PackedGuid(uint64 const& guid) { m_packedGuid.appendPackGUID(guid); }
|
||||
explicit PackedGuid(ObjectGuid const& guid) { m_packedGuid.appendPackGUID(guid.GetRawValue()); }
|
||||
|
||||
public: // modifiers
|
||||
void Set(uint64 const& guid) { m_packedGuid.wpos(0); m_packedGuid.appendPackGUID(guid); }
|
||||
void Set(ObjectGuid const& guid) { m_packedGuid.wpos(0); m_packedGuid.appendPackGUID(guid.GetRawValue()); }
|
||||
|
||||
public: // accessors
|
||||
size_t size() const { return m_packedGuid.size(); }
|
||||
|
||||
private: // fields
|
||||
ByteBuffer m_packedGuid;
|
||||
};
|
||||
|
||||
ByteBuffer& operator<< (ByteBuffer& buf, ObjectGuid const& guid);
|
||||
ByteBuffer& operator>> (ByteBuffer& buf, ObjectGuid& guid);
|
||||
|
||||
ByteBuffer& operator<< (ByteBuffer& buf, PackedGuid const& guid);
|
||||
ByteBuffer& operator>> (ByteBuffer& buf, PackedGuidReader& guid);
|
||||
|
||||
inline PackedGuid ObjectGuid::WriteAsPacked() const { return PackedGuid(*this); }
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -630,8 +630,8 @@ void WorldSession::HandlePetCastSpellOpcode( WorldPacket& recvPacket )
|
|||
return;
|
||||
|
||||
SpellCastTargets targets;
|
||||
if (!targets.read(&recvPacket,pet))
|
||||
return;
|
||||
|
||||
recvPacket >> targets.ReadForCaster(pet);
|
||||
|
||||
pet->clearUnitState(UNIT_STAT_MOVING);
|
||||
|
||||
|
|
|
|||
|
|
@ -4134,7 +4134,7 @@ void Player::SetMovement(PlayerMovementType pType)
|
|||
sLog.outError("Player::SetMovement: Unsupported move type (%d), data not sent to client.",pType);
|
||||
return;
|
||||
}
|
||||
data.append(GetPackGUID());
|
||||
data << GetPackGUID();
|
||||
data << uint32(0);
|
||||
GetSession()->SendPacket( &data );
|
||||
}
|
||||
|
|
@ -4146,7 +4146,7 @@ void Player::SetMovement(PlayerMovementType pType)
|
|||
void Player::BuildPlayerRepop()
|
||||
{
|
||||
WorldPacket data(SMSG_PRE_RESURRECT, GetPackGUID().size());
|
||||
data.append(GetPackGUID());
|
||||
data << GetPackGUID();
|
||||
GetSession()->SendPacket(&data);
|
||||
|
||||
if(getRace() == RACE_NIGHTELF)
|
||||
|
|
@ -16961,7 +16961,7 @@ void Player::SendAttackSwingBadFacingAttack()
|
|||
void Player::SendAutoRepeatCancel(Unit *target)
|
||||
{
|
||||
WorldPacket data(SMSG_CANCEL_AUTO_REPEAT, target->GetPackGUID().size());
|
||||
data.append(target->GetPackGUID()); // may be it's target guid
|
||||
data << target->GetPackGUID(); // may be it's target guid
|
||||
GetSession()->SendPacket( &data );
|
||||
}
|
||||
|
||||
|
|
@ -18936,7 +18936,7 @@ void Player::SendComboPoints()
|
|||
if (combotarget)
|
||||
{
|
||||
WorldPacket data(SMSG_UPDATE_COMBO_POINTS, combotarget->GetPackGUID().size()+1);
|
||||
data.append(combotarget->GetPackGUID());
|
||||
data << combotarget->GetPackGUID();
|
||||
data << uint8(m_comboPoints);
|
||||
GetSession()->SendPacket(&data);
|
||||
}
|
||||
|
|
@ -19096,7 +19096,7 @@ void Player::SendInitialPacketsAfterAddToMap()
|
|||
if(HasAuraType(SPELL_AURA_MOD_ROOT))
|
||||
{
|
||||
WorldPacket data2(SMSG_FORCE_MOVE_ROOT, 10);
|
||||
data2.append(GetPackGUID());
|
||||
data2 << GetPackGUID();
|
||||
data2 << (uint32)2;
|
||||
SendMessageToSet(&data2,true);
|
||||
}
|
||||
|
|
@ -19340,7 +19340,7 @@ void Player::SendAurasForTarget(Unit *target)
|
|||
return;
|
||||
|
||||
WorldPacket data(SMSG_AURA_UPDATE_ALL);
|
||||
data.append(target->GetPackGUID());
|
||||
data << target->GetPackGUID();
|
||||
|
||||
Unit::VisibleAuraMap const *visibleAuras = target->GetVisibleAuras();
|
||||
for(Unit::VisibleAuraMap::const_iterator itr = visibleAuras->begin(); itr != visibleAuras->end(); ++itr)
|
||||
|
|
@ -19983,7 +19983,7 @@ void Player::ResurectUsingRequestData()
|
|||
void Player::SetClientControl(Unit* target, uint8 allowMove)
|
||||
{
|
||||
WorldPacket data(SMSG_CLIENT_CONTROL_UPDATE, target->GetPackGUID().size()+1);
|
||||
data.append(target->GetPackGUID());
|
||||
data << target->GetPackGUID();
|
||||
data << uint8(allowMove);
|
||||
GetSession()->SendPacket(&data);
|
||||
}
|
||||
|
|
@ -20379,7 +20379,7 @@ void Player::EnterVehicle(Vehicle *vehicle)
|
|||
GetSession()->SendPacket(&data);
|
||||
|
||||
data.Initialize(MSG_MOVE_TELEPORT_ACK, 30);
|
||||
data.append(GetPackGUID());
|
||||
data << GetPackGUID();
|
||||
data << uint32(0); // counter?
|
||||
data << uint32(MOVEFLAG_ONTRANSPORT); // transport
|
||||
data << uint16(0); // special flags
|
||||
|
|
@ -20428,7 +20428,7 @@ void Player::ExitVehicle(Vehicle *vehicle)
|
|||
SetMover(NULL);
|
||||
|
||||
WorldPacket data(MSG_MOVE_TELEPORT_ACK, 30);
|
||||
data.append(GetPackGUID());
|
||||
data << GetPackGUID();
|
||||
data << uint32(0); // counter?
|
||||
data << uint32(MOVEFLAG_ROOT); // fly unk
|
||||
data << uint16(MOVEFLAG2_UNK4); // special flags
|
||||
|
|
@ -21586,7 +21586,7 @@ void Player::SendClearCooldown( uint32 spell_id, Unit* target )
|
|||
void Player::BuildTeleportAckMsg( WorldPacket *data, float x, float y, float z, float ang ) const
|
||||
{
|
||||
data->Initialize(MSG_MOVE_TELEPORT_ACK, 41);
|
||||
data->append(GetPackGUID());
|
||||
*data << GetPackGUID();
|
||||
*data << uint32(0); // this value increments every time
|
||||
*data << uint32(m_movementInfo.GetMovementFlags()); // movement flags
|
||||
*data << uint16(0); // 2.3.0
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@ void WorldSession::SendNameQueryOpcode(Player *p)
|
|||
return;
|
||||
// guess size
|
||||
WorldPacket data( SMSG_NAME_QUERY_RESPONSE, (8+1+1+1+1+1+10) );
|
||||
data.append(p->GetPackGUID()); // player guid
|
||||
data << p->GetPackGUID(); // player guid
|
||||
data << uint8(0); // added in 3.1; if > 1, then end of packet
|
||||
data << p->GetName(); // played name
|
||||
data << uint8(0); // realm name for cross realm BG usage
|
||||
|
|
|
|||
|
|
@ -183,33 +183,30 @@ void SpellCastTargets::setCorpseTarget(Corpse* corpse)
|
|||
|
||||
void SpellCastTargets::Update(Unit* caster)
|
||||
{
|
||||
m_GOTarget = m_GOTargetGUID ? caster->GetMap()->GetGameObject(m_GOTargetGUID) : NULL;
|
||||
m_unitTarget = m_unitTargetGUID ?
|
||||
( m_unitTargetGUID == caster->GetGUID() ? caster : ObjectAccessor::GetUnit(*caster, m_unitTargetGUID) ) :
|
||||
m_GOTarget = !m_GOTargetGUID.IsEmpty() ? caster->GetMap()->GetGameObject(m_GOTargetGUID.GetRawValue()) : NULL;
|
||||
m_unitTarget = !m_unitTargetGUID.IsEmpty() ?
|
||||
( m_unitTargetGUID.GetRawValue() == caster->GetGUID() ? caster : ObjectAccessor::GetUnit(*caster, m_unitTargetGUID.GetRawValue()) ) :
|
||||
NULL;
|
||||
|
||||
m_itemTarget = NULL;
|
||||
if(caster->GetTypeId() == TYPEID_PLAYER)
|
||||
{
|
||||
if(m_targetMask & TARGET_FLAG_ITEM)
|
||||
m_itemTarget = ((Player*)caster)->GetItemByGuid(m_itemTargetGUID);
|
||||
m_itemTarget = ((Player*)caster)->GetItemByGuid(m_itemTargetGUID.GetRawValue());
|
||||
else if(m_targetMask & TARGET_FLAG_TRADE_ITEM)
|
||||
{
|
||||
Player* pTrader = ((Player*)caster)->GetTrader();
|
||||
if(pTrader && m_itemTargetGUID < TRADE_SLOT_COUNT)
|
||||
m_itemTarget = pTrader->GetItemByPos(pTrader->GetItemPosByTradeSlot(uint32(m_itemTargetGUID)));
|
||||
if(pTrader && m_itemTargetGUID.GetRawValue() < TRADE_SLOT_COUNT)
|
||||
m_itemTarget = pTrader->GetItemByPos(pTrader->GetItemPosByTradeSlot(uint32(m_itemTargetGUID.GetRawValue())));
|
||||
}
|
||||
if(m_itemTarget)
|
||||
m_itemTargetEntry = m_itemTarget->GetEntry();
|
||||
}
|
||||
}
|
||||
|
||||
bool SpellCastTargets::read ( WorldPacket * data, Unit *caster )
|
||||
void SpellCastTargets::read( ByteBuffer& data, Unit *caster )
|
||||
{
|
||||
if(data->rpos() + 4 > data->size())
|
||||
return false;
|
||||
|
||||
*data >> m_targetMask;
|
||||
data >> m_targetMask;
|
||||
|
||||
if(m_targetMask == TARGET_FLAG_SELF)
|
||||
{
|
||||
|
|
@ -218,121 +215,101 @@ bool SpellCastTargets::read ( WorldPacket * data, Unit *caster )
|
|||
m_destZ = caster->GetPositionZ();
|
||||
m_unitTarget = caster;
|
||||
m_unitTargetGUID = caster->GetGUID();
|
||||
return true;
|
||||
return;
|
||||
}
|
||||
|
||||
// TARGET_FLAG_UNK2 is used for non-combat pets, maybe other?
|
||||
if( m_targetMask & ( TARGET_FLAG_UNIT | TARGET_FLAG_UNK2 ))
|
||||
if(!data->readPackGUID(m_unitTargetGUID))
|
||||
return false;
|
||||
data >> m_unitTargetGUID.ReadAsPacked();
|
||||
|
||||
if( m_targetMask & ( TARGET_FLAG_OBJECT ))
|
||||
if(!data->readPackGUID(m_GOTargetGUID))
|
||||
return false;
|
||||
data >> m_GOTargetGUID.ReadAsPacked();
|
||||
|
||||
if(( m_targetMask & ( TARGET_FLAG_ITEM | TARGET_FLAG_TRADE_ITEM )) && caster->GetTypeId() == TYPEID_PLAYER)
|
||||
if(!data->readPackGUID(m_itemTargetGUID))
|
||||
return false;
|
||||
data >> m_itemTargetGUID.ReadAsPacked();
|
||||
|
||||
if( m_targetMask & (TARGET_FLAG_CORPSE | TARGET_FLAG_PVP_CORPSE ) )
|
||||
if(!data->readPackGUID(m_CorpseTargetGUID))
|
||||
return false;
|
||||
data >> m_CorpseTargetGUID.ReadAsPacked();
|
||||
|
||||
if( m_targetMask & TARGET_FLAG_SOURCE_LOCATION )
|
||||
{
|
||||
if(data->rpos() + 1 + 4 + 4 + 4 > data->size())
|
||||
return false;
|
||||
|
||||
if(!data->readPackGUID(m_unitTargetGUID))
|
||||
return false;
|
||||
|
||||
*data >> m_srcX >> m_srcY >> m_srcZ;
|
||||
data >> m_unitTargetGUID.ReadAsPacked();
|
||||
data >> m_srcX >> m_srcY >> m_srcZ;
|
||||
if(!MaNGOS::IsValidMapCoord(m_srcX, m_srcY, m_srcZ))
|
||||
return false;
|
||||
throw ByteBufferException(false, data.rpos(), 0, data.size());
|
||||
}
|
||||
|
||||
if( m_targetMask & TARGET_FLAG_DEST_LOCATION )
|
||||
{
|
||||
if(data->rpos() + 1 + 4 + 4 + 4 > data->size())
|
||||
return false;
|
||||
|
||||
if(!data->readPackGUID(m_unitTargetGUID))
|
||||
return false;
|
||||
|
||||
*data >> m_destX >> m_destY >> m_destZ;
|
||||
data >> m_unitTargetGUID.ReadAsPacked();
|
||||
data >> m_destX >> m_destY >> m_destZ;
|
||||
if(!MaNGOS::IsValidMapCoord(m_destX, m_destY, m_destZ))
|
||||
return false;
|
||||
throw ByteBufferException(false, data.rpos(), 0, data.size());
|
||||
}
|
||||
|
||||
if( m_targetMask & TARGET_FLAG_STRING )
|
||||
{
|
||||
if(data->rpos() + 1 > data->size())
|
||||
return false;
|
||||
|
||||
*data >> m_strTarget;
|
||||
}
|
||||
data >> m_strTarget;
|
||||
|
||||
// find real units/GOs
|
||||
Update(caster);
|
||||
return true;
|
||||
}
|
||||
|
||||
void SpellCastTargets::write ( WorldPacket * data )
|
||||
void SpellCastTargets::write( ByteBuffer& data ) const
|
||||
{
|
||||
*data << uint32(m_targetMask);
|
||||
data << uint32(m_targetMask);
|
||||
|
||||
if( m_targetMask & ( TARGET_FLAG_UNIT | TARGET_FLAG_PVP_CORPSE | TARGET_FLAG_OBJECT | TARGET_FLAG_CORPSE | TARGET_FLAG_UNK2 ) )
|
||||
{
|
||||
if(m_targetMask & TARGET_FLAG_UNIT)
|
||||
{
|
||||
if(m_unitTarget)
|
||||
data->append(m_unitTarget->GetPackGUID());
|
||||
data << m_unitTarget->GetPackGUID();
|
||||
else
|
||||
*data << uint8(0);
|
||||
data << uint8(0);
|
||||
}
|
||||
else if( m_targetMask & TARGET_FLAG_OBJECT )
|
||||
{
|
||||
if(m_GOTarget)
|
||||
data->append(m_GOTarget->GetPackGUID());
|
||||
data << m_GOTarget->GetPackGUID();
|
||||
else
|
||||
*data << uint8(0);
|
||||
data << uint8(0);
|
||||
}
|
||||
else if( m_targetMask & ( TARGET_FLAG_CORPSE | TARGET_FLAG_PVP_CORPSE ) )
|
||||
data->appendPackGUID(m_CorpseTargetGUID);
|
||||
data << m_CorpseTargetGUID.WriteAsPacked();
|
||||
else
|
||||
*data << uint8(0);
|
||||
data << uint8(0);
|
||||
}
|
||||
|
||||
if( m_targetMask & ( TARGET_FLAG_ITEM | TARGET_FLAG_TRADE_ITEM ) )
|
||||
{
|
||||
if(m_itemTarget)
|
||||
data->append(m_itemTarget->GetPackGUID());
|
||||
data << m_itemTarget->GetPackGUID();
|
||||
else
|
||||
*data << uint8(0);
|
||||
data << uint8(0);
|
||||
}
|
||||
|
||||
if( m_targetMask & TARGET_FLAG_SOURCE_LOCATION )
|
||||
{
|
||||
if(m_unitTarget)
|
||||
data->append(m_unitTarget->GetPackGUID());
|
||||
data << m_unitTarget->GetPackGUID();
|
||||
else
|
||||
*data << uint8(0);
|
||||
data << uint8(0);
|
||||
|
||||
*data << m_srcX << m_srcY << m_srcZ;
|
||||
data << m_srcX << m_srcY << m_srcZ;
|
||||
}
|
||||
|
||||
if( m_targetMask & TARGET_FLAG_DEST_LOCATION )
|
||||
{
|
||||
if(m_unitTarget)
|
||||
data->append(m_unitTarget->GetPackGUID());
|
||||
data << m_unitTarget->GetPackGUID();
|
||||
else
|
||||
*data << uint8(0);
|
||||
data << uint8(0);
|
||||
|
||||
*data << m_destX << m_destY << m_destZ;
|
||||
data << m_destX << m_destY << m_destZ;
|
||||
}
|
||||
|
||||
if( m_targetMask & TARGET_FLAG_STRING )
|
||||
*data << m_strTarget;
|
||||
data << m_strTarget;
|
||||
}
|
||||
|
||||
Spell::Spell( Unit* Caster, SpellEntry const *info, bool triggered, uint64 originalCasterGUID, Spell** triggeringContainer )
|
||||
|
|
@ -3188,17 +3165,16 @@ void Spell::SendSpellStart()
|
|||
|
||||
WorldPacket data(SMSG_SPELL_START, (8+8+4+4+2));
|
||||
if (m_CastItem)
|
||||
data.append(m_CastItem->GetPackGUID());
|
||||
data << m_CastItem->GetPackGUID();
|
||||
else
|
||||
data.append(m_caster->GetPackGUID());
|
||||
data << m_caster->GetPackGUID();
|
||||
|
||||
data.append(m_caster->GetPackGUID());
|
||||
data << m_caster->GetPackGUID();
|
||||
data << uint8(m_cast_count); // pending spell cast?
|
||||
data << uint32(m_spellInfo->Id); // spellId
|
||||
data << uint32(castFlags); // cast flags
|
||||
data << uint32(m_timer); // delay?
|
||||
|
||||
m_targets.write(&data);
|
||||
data << m_targets;
|
||||
|
||||
if ( castFlags & CAST_FLAG_UNKNOWN6 ) // predicted power?
|
||||
data << uint32(0);
|
||||
|
|
@ -3252,11 +3228,11 @@ void Spell::SendSpellGo()
|
|||
WorldPacket data(SMSG_SPELL_GO, 50); // guess size
|
||||
|
||||
if(m_CastItem)
|
||||
data.append(m_CastItem->GetPackGUID());
|
||||
data << m_CastItem->GetPackGUID();
|
||||
else
|
||||
data.append(m_caster->GetPackGUID());
|
||||
data << m_caster->GetPackGUID();
|
||||
|
||||
data.append(m_caster->GetPackGUID());
|
||||
data << m_caster->GetPackGUID();
|
||||
data << uint8(m_cast_count); // pending spell cast?
|
||||
data << uint32(m_spellInfo->Id); // spellId
|
||||
data << uint32(castFlags); // cast flags
|
||||
|
|
@ -3264,7 +3240,7 @@ void Spell::SendSpellGo()
|
|||
|
||||
WriteSpellGoTargets(&data);
|
||||
|
||||
m_targets.write(&data);
|
||||
data << m_targets;
|
||||
|
||||
if ( castFlags & CAST_FLAG_UNKNOWN6 ) // unknown wotlk, predicted power?
|
||||
data << uint32(0);
|
||||
|
|
@ -3435,9 +3411,9 @@ void Spell::SendLogExecute()
|
|||
WorldPacket data(SMSG_SPELLLOGEXECUTE, (8+4+4+4+4+8));
|
||||
|
||||
if(m_caster->GetTypeId() == TYPEID_PLAYER)
|
||||
data.append(m_caster->GetPackGUID());
|
||||
data << m_caster->GetPackGUID();
|
||||
else
|
||||
data.append(target->GetPackGUID());
|
||||
data << target->GetPackGUID();
|
||||
|
||||
data << uint32(m_spellInfo->Id);
|
||||
uint32 count1 = 1;
|
||||
|
|
@ -3453,7 +3429,7 @@ void Spell::SendLogExecute()
|
|||
{
|
||||
case SPELL_EFFECT_POWER_DRAIN:
|
||||
if(Unit *unit = m_targets.getUnitTarget())
|
||||
data.append(unit->GetPackGUID());
|
||||
data << unit->GetPackGUID();
|
||||
else
|
||||
data << uint8(0);
|
||||
data << uint32(0);
|
||||
|
|
@ -3462,21 +3438,21 @@ void Spell::SendLogExecute()
|
|||
break;
|
||||
case SPELL_EFFECT_ADD_EXTRA_ATTACKS:
|
||||
if(Unit *unit = m_targets.getUnitTarget())
|
||||
data.append(unit->GetPackGUID());
|
||||
data << unit->GetPackGUID();
|
||||
else
|
||||
data << uint8(0);
|
||||
data << uint32(0); // count?
|
||||
break;
|
||||
case SPELL_EFFECT_INTERRUPT_CAST:
|
||||
if(Unit *unit = m_targets.getUnitTarget())
|
||||
data.append(unit->GetPackGUID());
|
||||
data << unit->GetPackGUID();
|
||||
else
|
||||
data << uint8(0);
|
||||
data << uint32(0); // spellid
|
||||
break;
|
||||
case SPELL_EFFECT_DURABILITY_DAMAGE:
|
||||
if(Unit *unit = m_targets.getUnitTarget())
|
||||
data.append(unit->GetPackGUID());
|
||||
data << unit->GetPackGUID();
|
||||
else
|
||||
data << uint8(0);
|
||||
data << uint32(0);
|
||||
|
|
@ -3484,7 +3460,7 @@ void Spell::SendLogExecute()
|
|||
break;
|
||||
case SPELL_EFFECT_OPEN_LOCK:
|
||||
if(Item *item = m_targets.getItemTarget())
|
||||
data.append(item->GetPackGUID());
|
||||
data << item->GetPackGUID();
|
||||
else
|
||||
data << uint8(0);
|
||||
break;
|
||||
|
|
@ -3503,11 +3479,11 @@ void Spell::SendLogExecute()
|
|||
case SPELL_EFFECT_SUMMON_OBJECT_SLOT3:
|
||||
case SPELL_EFFECT_SUMMON_OBJECT_SLOT4:
|
||||
if(Unit *unit = m_targets.getUnitTarget())
|
||||
data.append(unit->GetPackGUID());
|
||||
data << unit->GetPackGUID();
|
||||
else if(m_targets.getItemTargetGUID())
|
||||
data.appendPackGUID(m_targets.getItemTargetGUID());
|
||||
else if(GameObject *go = m_targets.getGOTarget())
|
||||
data.append(go->GetPackGUID());
|
||||
data << go->GetPackGUID();
|
||||
else
|
||||
data << uint8(0); // guid
|
||||
break;
|
||||
|
|
@ -3516,14 +3492,14 @@ void Spell::SendLogExecute()
|
|||
break;
|
||||
case SPELL_EFFECT_DISMISS_PET:
|
||||
if(Unit *unit = m_targets.getUnitTarget())
|
||||
data.append(unit->GetPackGUID());
|
||||
data << unit->GetPackGUID();
|
||||
else
|
||||
data << uint8(0);
|
||||
break;
|
||||
case SPELL_EFFECT_RESURRECT:
|
||||
case SPELL_EFFECT_RESURRECT_NEW:
|
||||
if(Unit *unit = m_targets.getUnitTarget())
|
||||
data.append(unit->GetPackGUID());
|
||||
data << unit->GetPackGUID();
|
||||
else
|
||||
data << uint8(0);
|
||||
break;
|
||||
|
|
@ -3539,14 +3515,14 @@ void Spell::SendLogExecute()
|
|||
void Spell::SendInterrupted(uint8 result)
|
||||
{
|
||||
WorldPacket data(SMSG_SPELL_FAILURE, (8+4+1));
|
||||
data.append(m_caster->GetPackGUID());
|
||||
data << m_caster->GetPackGUID();
|
||||
data << uint8(m_cast_count);
|
||||
data << uint32(m_spellInfo->Id);
|
||||
data << uint8(result);
|
||||
m_caster->SendMessageToSet(&data, true);
|
||||
|
||||
data.Initialize(SMSG_SPELL_FAILED_OTHER, (8+4));
|
||||
data.append(m_caster->GetPackGUID());
|
||||
data << m_caster->GetPackGUID();
|
||||
data << uint8(m_cast_count);
|
||||
data << uint32(m_spellInfo->Id);
|
||||
data << uint8(result);
|
||||
|
|
@ -3569,7 +3545,7 @@ void Spell::SendChannelUpdate(uint32 time)
|
|||
}
|
||||
|
||||
WorldPacket data( MSG_CHANNEL_UPDATE, 8+4 );
|
||||
data.append(m_caster->GetPackGUID());
|
||||
data << m_caster->GetPackGUID();
|
||||
data << uint32(time);
|
||||
m_caster->SendMessageToSet(&data, true);
|
||||
}
|
||||
|
|
@ -3603,7 +3579,7 @@ void Spell::SendChannelStart(uint32 duration)
|
|||
}
|
||||
|
||||
WorldPacket data( MSG_CHANNEL_START, (8+4+4) );
|
||||
data.append(m_caster->GetPackGUID());
|
||||
data << m_caster->GetPackGUID();
|
||||
data << uint32(m_spellInfo->Id);
|
||||
data << uint32(duration);
|
||||
m_caster->SendMessageToSet(&data, true);
|
||||
|
|
@ -5902,7 +5878,7 @@ void Spell::Delayed()
|
|||
sLog.outDetail("Spell %u partially interrupted for (%d) ms at damage", m_spellInfo->Id, delaytime);
|
||||
|
||||
WorldPacket data(SMSG_SPELL_DELAYED, 8+4);
|
||||
data.append(m_caster->GetPackGUID());
|
||||
data << m_caster->GetPackGUID();
|
||||
data << uint32(delaytime);
|
||||
|
||||
m_caster->SendMessageToSet(&data, true);
|
||||
|
|
|
|||
|
|
@ -102,14 +102,24 @@ namespace MaNGOS
|
|||
struct SpellNotifierCreatureAndPlayer;
|
||||
}
|
||||
|
||||
struct SpellCastTargetsReader
|
||||
{
|
||||
explicit SpellCastTargetsReader(SpellCastTargets& _targets, Unit* _caster) : targets(_targets), caster(_caster) {}
|
||||
|
||||
SpellCastTargets& targets;
|
||||
Unit* caster;
|
||||
};
|
||||
|
||||
class SpellCastTargets
|
||||
{
|
||||
public:
|
||||
SpellCastTargets();
|
||||
~SpellCastTargets();
|
||||
|
||||
bool read ( WorldPacket * data, Unit *caster );
|
||||
void write ( WorldPacket * data );
|
||||
void read( ByteBuffer& data, Unit *caster );
|
||||
void write( ByteBuffer& data ) const;
|
||||
|
||||
SpellCastTargetsReader ReadForCaster(Unit* caster) { return SpellCastTargetsReader(*this,caster); }
|
||||
|
||||
SpellCastTargets& operator=(const SpellCastTargets &target)
|
||||
{
|
||||
|
|
@ -139,19 +149,19 @@ class SpellCastTargets
|
|||
return *this;
|
||||
}
|
||||
|
||||
uint64 getUnitTargetGUID() const { return m_unitTargetGUID; }
|
||||
uint64 getUnitTargetGUID() const { return m_unitTargetGUID.GetRawValue(); }
|
||||
Unit *getUnitTarget() const { return m_unitTarget; }
|
||||
void setUnitTarget(Unit *target);
|
||||
void setDestination(float x, float y, float z);
|
||||
void setSource(float x, float y, float z);
|
||||
|
||||
uint64 getGOTargetGUID() const { return m_GOTargetGUID; }
|
||||
uint64 getGOTargetGUID() const { return m_GOTargetGUID.GetRawValue(); }
|
||||
GameObject *getGOTarget() const { return m_GOTarget; }
|
||||
void setGOTarget(GameObject *target);
|
||||
|
||||
uint64 getCorpseTargetGUID() const { return m_CorpseTargetGUID; }
|
||||
uint64 getCorpseTargetGUID() const { return m_CorpseTargetGUID.GetRawValue(); }
|
||||
void setCorpseTarget(Corpse* corpse);
|
||||
uint64 getItemTargetGUID() const { return m_itemTargetGUID; }
|
||||
uint64 getItemTargetGUID() const { return m_itemTargetGUID.GetRawValue(); }
|
||||
Item* getItemTarget() const { return m_itemTarget; }
|
||||
uint32 getItemTargetEntry() const { return m_itemTargetEntry; }
|
||||
void setItemTarget(Item* item);
|
||||
|
|
@ -164,7 +174,7 @@ class SpellCastTargets
|
|||
}
|
||||
}
|
||||
|
||||
bool IsEmpty() const { return m_GOTargetGUID==0 && m_unitTargetGUID==0 && m_itemTarget==0 && m_CorpseTargetGUID==0; }
|
||||
bool IsEmpty() const { return m_GOTargetGUID.IsEmpty() && m_unitTargetGUID.IsEmpty() && m_itemTarget==NULL && m_CorpseTargetGUID.IsEmpty(); }
|
||||
|
||||
void Update(Unit* caster);
|
||||
|
||||
|
|
@ -180,13 +190,25 @@ class SpellCastTargets
|
|||
Item *m_itemTarget;
|
||||
|
||||
// object GUID/etc, can be used always
|
||||
uint64 m_unitTargetGUID;
|
||||
uint64 m_GOTargetGUID;
|
||||
uint64 m_CorpseTargetGUID;
|
||||
uint64 m_itemTargetGUID;
|
||||
ObjectGuid m_unitTargetGUID;
|
||||
ObjectGuid m_GOTargetGUID;
|
||||
ObjectGuid m_CorpseTargetGUID;
|
||||
ObjectGuid m_itemTargetGUID;
|
||||
uint32 m_itemTargetEntry;
|
||||
};
|
||||
|
||||
inline ByteBuffer& operator<< (ByteBuffer& buf, SpellCastTargets const& targets)
|
||||
{
|
||||
targets.write(buf);
|
||||
return buf;
|
||||
}
|
||||
|
||||
inline ByteBuffer& operator>> (ByteBuffer& buf, SpellCastTargetsReader const& targets)
|
||||
{
|
||||
targets.targets.read(buf,targets.caster);
|
||||
return buf;
|
||||
}
|
||||
|
||||
enum SpellState
|
||||
{
|
||||
SPELL_STATE_NULL = 0,
|
||||
|
|
|
|||
|
|
@ -1232,7 +1232,7 @@ bool Aura::_RemoveAura()
|
|||
void Aura::SendAuraUpdate(bool remove)
|
||||
{
|
||||
WorldPacket data(SMSG_AURA_UPDATE);
|
||||
data.append(m_target->GetPackGUID());
|
||||
data << m_target->GetPackGUID();
|
||||
data << uint8(GetAuraSlot());
|
||||
data << uint32(remove ? 0 : GetId());
|
||||
|
||||
|
|
@ -2975,7 +2975,7 @@ void Aura::HandleAuraWaterWalk(bool apply, bool Real)
|
|||
data.Initialize(SMSG_MOVE_WATER_WALK, 8+4);
|
||||
else
|
||||
data.Initialize(SMSG_MOVE_LAND_WALK, 8+4);
|
||||
data.append(m_target->GetPackGUID());
|
||||
data << m_target->GetPackGUID();
|
||||
data << uint32(0);
|
||||
m_target->SendMessageToSet(&data, true);
|
||||
}
|
||||
|
|
@ -2991,7 +2991,7 @@ void Aura::HandleAuraFeatherFall(bool apply, bool Real)
|
|||
data.Initialize(SMSG_MOVE_FEATHER_FALL, 8+4);
|
||||
else
|
||||
data.Initialize(SMSG_MOVE_NORMAL_FALL, 8+4);
|
||||
data.append(m_target->GetPackGUID());
|
||||
data << m_target->GetPackGUID();
|
||||
data << uint32(0);
|
||||
m_target->SendMessageToSet(&data, true);
|
||||
|
||||
|
|
@ -3011,7 +3011,7 @@ void Aura::HandleAuraHover(bool apply, bool Real)
|
|||
data.Initialize(SMSG_MOVE_SET_HOVER, 8+4);
|
||||
else
|
||||
data.Initialize(SMSG_MOVE_UNSET_HOVER, 8+4);
|
||||
data.append(m_target->GetPackGUID());
|
||||
data << m_target->GetPackGUID();
|
||||
data << uint32(0);
|
||||
m_target->SendMessageToSet(&data, true);
|
||||
}
|
||||
|
|
@ -3914,7 +3914,7 @@ void Aura::HandleAuraModStun(bool apply, bool Real)
|
|||
}
|
||||
|
||||
WorldPacket data(SMSG_FORCE_MOVE_ROOT, 8);
|
||||
data.append(m_target->GetPackGUID());
|
||||
data << m_target->GetPackGUID();
|
||||
data << uint32(0);
|
||||
m_target->SendMessageToSet(&data, true);
|
||||
|
||||
|
|
@ -3972,7 +3972,7 @@ void Aura::HandleAuraModStun(bool apply, bool Real)
|
|||
m_target->SetTargetGUID(m_target->getVictim()->GetGUID());
|
||||
|
||||
WorldPacket data(SMSG_FORCE_MOVE_UNROOT, 8+4);
|
||||
data.append(m_target->GetPackGUID());
|
||||
data << m_target->GetPackGUID();
|
||||
data << uint32(0);
|
||||
m_target->SendMessageToSet(&data, true);
|
||||
}
|
||||
|
|
@ -4182,7 +4182,7 @@ void Aura::HandleAuraModRoot(bool apply, bool Real)
|
|||
if(m_target->GetTypeId() == TYPEID_PLAYER)
|
||||
{
|
||||
WorldPacket data(SMSG_FORCE_MOVE_ROOT, 10);
|
||||
data.append(m_target->GetPackGUID());
|
||||
data << m_target->GetPackGUID();
|
||||
data << (uint32)2;
|
||||
m_target->SendMessageToSet(&data, true);
|
||||
|
||||
|
|
@ -4231,7 +4231,7 @@ void Aura::HandleAuraModRoot(bool apply, bool Real)
|
|||
if(m_target->GetTypeId() == TYPEID_PLAYER)
|
||||
{
|
||||
WorldPacket data(SMSG_FORCE_MOVE_UNROOT, 10);
|
||||
data.append(m_target->GetPackGUID());
|
||||
data << m_target->GetPackGUID();
|
||||
data << (uint32)2;
|
||||
m_target->SendMessageToSet(&data, true);
|
||||
}
|
||||
|
|
@ -4386,7 +4386,7 @@ void Aura::HandleAuraModIncreaseFlightSpeed(bool apply, bool Real)
|
|||
data.Initialize(SMSG_MOVE_SET_CAN_FLY, 12);
|
||||
else
|
||||
data.Initialize(SMSG_MOVE_UNSET_CAN_FLY, 12);
|
||||
data.append(m_target->GetPackGUID());
|
||||
data << m_target->GetPackGUID();
|
||||
data << uint32(0); // unknown
|
||||
m_target->SendMessageToSet(&data, true);
|
||||
|
||||
|
|
@ -6649,7 +6649,7 @@ void Aura::HandleAuraAllowFlight(bool apply, bool Real)
|
|||
data.Initialize(SMSG_MOVE_SET_CAN_FLY, 12);
|
||||
else
|
||||
data.Initialize(SMSG_MOVE_UNSET_CAN_FLY, 12);
|
||||
data.append(m_target->GetPackGUID());
|
||||
data << m_target->GetPackGUID();
|
||||
data << uint32(0); // unk
|
||||
m_target->SendMessageToSet(&data, true);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4019,8 +4019,8 @@ void Spell::EffectDispel(SpellEffectIndex eff_idx)
|
|||
{
|
||||
int32 count = success_list.size();
|
||||
WorldPacket data(SMSG_SPELLDISPELLOG, 8+8+4+1+4+count*5);
|
||||
data.append(unitTarget->GetPackGUID()); // Victim GUID
|
||||
data.append(m_caster->GetPackGUID()); // Caster GUID
|
||||
data << unitTarget->GetPackGUID(); // Victim GUID
|
||||
data << m_caster->GetPackGUID(); // Caster GUID
|
||||
data << uint32(m_spellInfo->Id); // Dispel spell id
|
||||
data << uint8(0); // not used
|
||||
data << uint32(count); // count
|
||||
|
|
@ -7326,8 +7326,8 @@ void Spell::EffectStealBeneficialBuff(SpellEffectIndex eff_idx)
|
|||
{
|
||||
int32 count = success_list.size();
|
||||
WorldPacket data(SMSG_SPELLSTEALLOG, 8+8+4+1+4+count*5);
|
||||
data.append(unitTarget->GetPackGUID()); // Victim GUID
|
||||
data.append(m_caster->GetPackGUID()); // Caster GUID
|
||||
data << unitTarget->GetPackGUID(); // Victim GUID
|
||||
data << m_caster->GetPackGUID(); // Caster GUID
|
||||
data << uint32(m_spellInfo->Id); // Dispell spell id
|
||||
data << uint8(0); // not used
|
||||
data << uint32(count); // count
|
||||
|
|
|
|||
|
|
@ -125,8 +125,8 @@ void WorldSession::HandleUseItemOpcode(WorldPacket& recvPacket)
|
|||
}
|
||||
|
||||
SpellCastTargets targets;
|
||||
if (!targets.read(&recvPacket, pUser))
|
||||
return;
|
||||
|
||||
recvPacket >> targets.ReadForCaster(pUser);
|
||||
|
||||
targets.Update(pUser);
|
||||
|
||||
|
|
@ -334,27 +334,25 @@ void WorldSession::HandleCastSpellOpcode(WorldPacket& recvPacket)
|
|||
|
||||
// client provided targets
|
||||
SpellCastTargets targets;
|
||||
if(!targets.read(&recvPacket,mover))
|
||||
{
|
||||
recvPacket.rpos(recvPacket.wpos()); // prevent spam at ignore packet
|
||||
return;
|
||||
}
|
||||
|
||||
recvPacket >> targets.ReadForCaster(mover);
|
||||
|
||||
// some spell cast packet including more data (for projectiles?)
|
||||
if (unk_flags & 0x02)
|
||||
{
|
||||
recvPacket.read_skip<float>(); // unk1, coords?
|
||||
recvPacket.read_skip<float>(); // unk1, coords?
|
||||
uint8 unk1;
|
||||
|
||||
recvPacket >> Unused<float>(); // unk1, coords?
|
||||
recvPacket >> Unused<float>(); // unk1, coords?
|
||||
recvPacket >> unk1; // >> 1 or 0
|
||||
if(unk1)
|
||||
{
|
||||
recvPacket.read_skip<uint32>(); // >> MSG_MOVE_STOP
|
||||
uint64 guid; // guid - unused
|
||||
if(!recvPacket.readPackGUID(guid))
|
||||
return;
|
||||
ObjectGuid guid; // guid - unused
|
||||
MovementInfo movementInfo;
|
||||
|
||||
MovementInfo movementInfo(recvPacket);
|
||||
recvPacket >> Unused<uint32>(); // >> MSG_MOVE_STOP
|
||||
recvPacket >> guid.ReadAsPacked();
|
||||
recvPacket >> movementInfo;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -186,13 +186,12 @@ void WorldSession::HandleMoveSplineDoneOpcode(WorldPacket& recv_data)
|
|||
{
|
||||
sLog.outDebug( "WORLD: Received CMSG_MOVE_SPLINE_DONE" );
|
||||
|
||||
uint64 guid; // used only for proper packet read
|
||||
if(!recv_data.readPackGUID(guid))
|
||||
return;
|
||||
ObjectGuid guid; // used only for proper packet read
|
||||
MovementInfo movementInfo; // used only for proper packet read
|
||||
|
||||
MovementInfo movementInfo(recv_data); // used only for proper packet read
|
||||
|
||||
recv_data.read_skip<uint32>(); // unk
|
||||
recv_data >> guid.ReadAsPacked();
|
||||
recv_data >> movementInfo;
|
||||
recv_data >> Unused<uint32>(); // unk
|
||||
|
||||
|
||||
// in taxi flight packet received in 2 case:
|
||||
|
|
|
|||
|
|
@ -73,25 +73,6 @@ static bool isNonTriggerAura[TOTAL_AURAS];
|
|||
// Prepare lists
|
||||
static bool procPrepared = InitTriggerAuraData();
|
||||
|
||||
MovementInfo::MovementInfo(WorldPacket &data)
|
||||
{
|
||||
// Init fields
|
||||
moveFlags = MOVEFLAG_NONE;
|
||||
moveFlags2 = MOVEFLAG2_NONE;
|
||||
time = 0;
|
||||
t_guid = 0;
|
||||
t_time = 0;
|
||||
t_seat = -1;
|
||||
t_time2 = 0;
|
||||
s_pitch = 0.0f;
|
||||
fallTime = 0;
|
||||
j_velocity = j_sinAngle = j_cosAngle = j_xyspeed = 0.0f;
|
||||
u_unk1 = 0.0f;
|
||||
|
||||
// Read actual data
|
||||
Read(data);
|
||||
}
|
||||
|
||||
void MovementInfo::Read(ByteBuffer &data)
|
||||
{
|
||||
data >> moveFlags;
|
||||
|
|
@ -104,9 +85,7 @@ void MovementInfo::Read(ByteBuffer &data)
|
|||
|
||||
if(HasMovementFlag(MOVEFLAG_ONTRANSPORT))
|
||||
{
|
||||
if(!data.readPackGUID(t_guid))
|
||||
return;
|
||||
|
||||
data >> t_guid.ReadAsPacked();
|
||||
data >> t_pos.x;
|
||||
data >> t_pos.y;
|
||||
data >> t_pos.z;
|
||||
|
|
@ -139,7 +118,7 @@ void MovementInfo::Read(ByteBuffer &data)
|
|||
}
|
||||
}
|
||||
|
||||
void MovementInfo::Write(ByteBuffer &data)
|
||||
void MovementInfo::Write(ByteBuffer &data) const
|
||||
{
|
||||
data << moveFlags;
|
||||
data << moveFlags2;
|
||||
|
|
@ -151,8 +130,7 @@ void MovementInfo::Write(ByteBuffer &data)
|
|||
|
||||
if(HasMovementFlag(MOVEFLAG_ONTRANSPORT))
|
||||
{
|
||||
data.appendPackGUID(t_guid);
|
||||
|
||||
data << t_guid.WriteAsPacked();
|
||||
data << t_pos.x;
|
||||
data << t_pos.y;
|
||||
data << t_pos.z;
|
||||
|
|
@ -370,7 +348,7 @@ void Unit::SendMonsterMove(float NewPosX, float NewPosY, float NewPosZ, SplineTy
|
|||
float moveTime = (float)Time;
|
||||
|
||||
WorldPacket data( SMSG_MONSTER_MOVE, (41 + GetPackGUID().size()) );
|
||||
data.append(GetPackGUID());
|
||||
data << GetPackGUID();
|
||||
data << uint8(0); // new in 3.1
|
||||
data << GetPositionX() << GetPositionY() << GetPositionZ();
|
||||
data << uint32(getMSTime());
|
||||
|
|
@ -418,7 +396,7 @@ void Unit::SendMonsterMoveByPath(Path const& path, uint32 start, uint32 end, Spl
|
|||
uint32 pathSize = end - start;
|
||||
|
||||
WorldPacket data( SMSG_MONSTER_MOVE, (GetPackGUID().size()+1+4+4+4+4+1+4+4+4+pathSize*4*3) );
|
||||
data.append(GetPackGUID());
|
||||
data << GetPackGUID();
|
||||
data << uint8(0);
|
||||
data << GetPositionX();
|
||||
data << GetPositionY();
|
||||
|
|
@ -459,7 +437,7 @@ void Unit::BuildHeartBeatMsg(WorldPacket *data) const
|
|||
: MOVEFLAG_NONE;
|
||||
|
||||
data->Initialize(MSG_MOVE_HEARTBEAT, 32);
|
||||
data->append(GetPackGUID());
|
||||
*data << GetPackGUID();
|
||||
*data << uint32(move_flags); // movement flags
|
||||
*data << uint16(0); // 2.3.0
|
||||
*data << uint32(getMSTime()); // time
|
||||
|
|
@ -2651,8 +2629,8 @@ void Unit::SendMeleeAttackStop(Unit* victim)
|
|||
return;
|
||||
|
||||
WorldPacket data( SMSG_ATTACKSTOP, (4+16) ); // we guess size
|
||||
data.append(GetPackGUID());
|
||||
data.append(victim->GetPackGUID()); // can be 0x00...
|
||||
data << GetPackGUID();
|
||||
data << victim->GetPackGUID(); // can be 0x00...
|
||||
data << uint32(0); // can be 0x1
|
||||
SendMessageToSet(&data, true);
|
||||
sLog.outDetail("%s %u stopped attacking %s %u", (GetTypeId()==TYPEID_PLAYER ? "player" : "creature"), GetGUIDLow(), (victim->GetTypeId()==TYPEID_PLAYER ? "player" : "creature"),victim->GetGUIDLow());
|
||||
|
|
@ -4772,8 +4750,8 @@ void Unit::RemoveAllGameObjects()
|
|||
void Unit::SendSpellNonMeleeDamageLog(SpellNonMeleeDamage *log)
|
||||
{
|
||||
WorldPacket data(SMSG_SPELLNONMELEEDAMAGELOG, (16+4+4+4+1+4+4+1+1+4+4+1)); // we guess size
|
||||
data.append(log->target->GetPackGUID());
|
||||
data.append(log->attacker->GetPackGUID());
|
||||
data << log->target->GetPackGUID();
|
||||
data << log->attacker->GetPackGUID();
|
||||
data << uint32(log->SpellID);
|
||||
data << uint32(log->damage); // damage amount
|
||||
data << uint32(log->overkill); // overkill
|
||||
|
|
@ -4808,7 +4786,7 @@ void Unit::SendPeriodicAuraLog(SpellPeriodicAuraLogInfo *pInfo)
|
|||
Modifier *mod = aura->GetModifier();
|
||||
|
||||
WorldPacket data(SMSG_PERIODICAURALOG, 30);
|
||||
data.append(aura->GetTarget()->GetPackGUID());
|
||||
data << aura->GetTarget()->GetPackGUID();
|
||||
data.appendPackGUID(aura->GetCasterGUID());
|
||||
data << uint32(aura->GetId()); // spellId
|
||||
data << uint32(1); // count
|
||||
|
|
@ -4880,8 +4858,8 @@ void Unit::SendAttackStateUpdate(CalcDamageInfo *damageInfo)
|
|||
uint32 count = 1;
|
||||
WorldPacket data(SMSG_ATTACKERSTATEUPDATE, 16 + 45); // we guess size
|
||||
data << uint32(damageInfo->HitInfo);
|
||||
data.append(damageInfo->attacker->GetPackGUID());
|
||||
data.append(damageInfo->target->GetPackGUID());
|
||||
data << damageInfo->attacker->GetPackGUID();
|
||||
data << damageInfo->target->GetPackGUID();
|
||||
data << uint32(damageInfo->damage); // Full damage
|
||||
data << uint32(0); // overkill value
|
||||
data << uint8(count); // Sub damage count
|
||||
|
|
@ -8830,8 +8808,8 @@ void Unit::SendHealSpellLog(Unit *pVictim, uint32 SpellID, uint32 Damage, uint32
|
|||
{
|
||||
// we guess size
|
||||
WorldPacket data(SMSG_SPELLHEALLOG, (8+8+4+4+1));
|
||||
data.append(pVictim->GetPackGUID());
|
||||
data.append(GetPackGUID());
|
||||
data << pVictim->GetPackGUID();
|
||||
data << GetPackGUID();
|
||||
data << uint32(SpellID);
|
||||
data << uint32(Damage);
|
||||
data << uint32(OverHeal);
|
||||
|
|
@ -8843,8 +8821,8 @@ void Unit::SendHealSpellLog(Unit *pVictim, uint32 SpellID, uint32 Damage, uint32
|
|||
void Unit::SendEnergizeSpellLog(Unit *pVictim, uint32 SpellID, uint32 Damage, Powers powertype)
|
||||
{
|
||||
WorldPacket data(SMSG_SPELLENERGIZELOG, (8+8+4+4+4+1));
|
||||
data.append(pVictim->GetPackGUID());
|
||||
data.append(GetPackGUID());
|
||||
data << pVictim->GetPackGUID();
|
||||
data << GetPackGUID();
|
||||
data << uint32(SpellID);
|
||||
data << uint32(powertype);
|
||||
data << uint32(Damage);
|
||||
|
|
@ -10920,7 +10898,7 @@ void Unit::SetSpeedRate(UnitMoveType mtype, float rate, bool forced)
|
|||
return;
|
||||
}
|
||||
|
||||
data.append(GetPackGUID());
|
||||
data << GetPackGUID();
|
||||
data << uint32(0); // movement flags
|
||||
data << uint16(0); // unk flags
|
||||
data << uint32(getMSTime());
|
||||
|
|
@ -10974,7 +10952,7 @@ void Unit::SetSpeedRate(UnitMoveType mtype, float rate, bool forced)
|
|||
sLog.outError("Unit::SetSpeedRate: Unsupported move type (%d), data not sent to client.",mtype);
|
||||
return;
|
||||
}
|
||||
data.append(GetPackGUID());
|
||||
data << GetPackGUID();
|
||||
data << (uint32)0; // moveEvent, NUM_PMOVE_EVTS = 0x39
|
||||
if (mtype == MOVE_RUN)
|
||||
data << uint8(0); // new 2.1.0
|
||||
|
|
@ -11765,7 +11743,7 @@ void Unit::SetPower(Powers power, uint32 val)
|
|||
SetStatInt32Value(UNIT_FIELD_POWER1 + power, val);
|
||||
|
||||
WorldPacket data(SMSG_POWER_UPDATE);
|
||||
data.append(GetPackGUID());
|
||||
data << GetPackGUID();
|
||||
data << uint8(power);
|
||||
data << uint32(val);
|
||||
SendMessageToSet(&data, GetTypeId() == TYPEID_PLAYER ? true : false);
|
||||
|
|
@ -13515,7 +13493,7 @@ void Unit::KnockBackFrom(Unit* target, float horizontalSpeed, float verticalSpee
|
|||
if(GetTypeId()==TYPEID_PLAYER)
|
||||
{
|
||||
WorldPacket data(SMSG_MOVE_KNOCK_BACK, 8+4+4+4+4+4);
|
||||
data.append(GetPackGUID());
|
||||
data << GetPackGUID();
|
||||
data << uint32(0); // Sequence
|
||||
data << float(vcos); // x direction
|
||||
data << float(vsin); // y direction
|
||||
|
|
@ -13580,7 +13558,7 @@ void Unit::SendThreatUpdate()
|
|||
{
|
||||
sLog.outDebug( "WORLD: Send SMSG_THREAT_UPDATE Message" );
|
||||
WorldPacket data(SMSG_THREAT_UPDATE, 8 + count * 8);
|
||||
data.append(GetPackGUID());
|
||||
data << GetPackGUID();
|
||||
data << uint32(count);
|
||||
for (ThreatList::const_iterator itr = tlist.begin(); itr != tlist.end(); ++itr)
|
||||
{
|
||||
|
|
@ -13598,7 +13576,7 @@ void Unit::SendHighestThreatUpdate(HostileReference* pHostilReference)
|
|||
{
|
||||
sLog.outDebug( "WORLD: Send SMSG_HIGHEST_THREAT_UPDATE Message" );
|
||||
WorldPacket data(SMSG_HIGHEST_THREAT_UPDATE, 8 + 8 + count * 8);
|
||||
data.append(GetPackGUID());
|
||||
data << GetPackGUID();
|
||||
data.appendPackGUID(pHostilReference->getUnitGuid());
|
||||
data << uint32(count);
|
||||
for (ThreatList::const_iterator itr = tlist.begin(); itr != tlist.end(); ++itr)
|
||||
|
|
@ -13614,7 +13592,7 @@ void Unit::SendThreatClear()
|
|||
{
|
||||
sLog.outDebug( "WORLD: Send SMSG_THREAT_CLEAR Message" );
|
||||
WorldPacket data(SMSG_THREAT_CLEAR, 8);
|
||||
data.append(GetPackGUID());
|
||||
data << GetPackGUID();
|
||||
SendMessageToSet(&data, false);
|
||||
}
|
||||
|
||||
|
|
@ -13622,7 +13600,7 @@ void Unit::SendThreatRemove(HostileReference* pHostileReference)
|
|||
{
|
||||
sLog.outDebug( "WORLD: Send SMSG_THREAT_REMOVE Message" );
|
||||
WorldPacket data(SMSG_THREAT_REMOVE, 8 + 8);
|
||||
data.append(GetPackGUID());
|
||||
data << GetPackGUID();
|
||||
data.appendPackGUID(pHostileReference->getUnitGuid());
|
||||
SendMessageToSet(&data, false);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -745,15 +745,13 @@ struct Position
|
|||
class MovementInfo
|
||||
{
|
||||
public:
|
||||
MovementInfo() : moveFlags(MOVEFLAG_NONE), moveFlags2(MOVEFLAG2_NONE), time(0), t_guid(0),
|
||||
MovementInfo() : moveFlags(MOVEFLAG_NONE), moveFlags2(MOVEFLAG2_NONE), time(0),
|
||||
t_time(0), t_seat(-1), t_time2(0), s_pitch(0.0f), fallTime(0), j_velocity(0.0f), j_sinAngle(0.0f),
|
||||
j_cosAngle(0.0f), j_xyspeed(0.0f), u_unk1(0.0f) {}
|
||||
|
||||
MovementInfo(WorldPacket &data);
|
||||
|
||||
// Read/Write methods
|
||||
void Read(ByteBuffer &data);
|
||||
void Write(ByteBuffer &data);
|
||||
void Write(ByteBuffer &data) const;
|
||||
|
||||
// Movement flags manipulations
|
||||
void AddMovementFlag(MovementFlags f) { moveFlags |= f; }
|
||||
|
|
@ -775,7 +773,7 @@ class MovementInfo
|
|||
t_time = time;
|
||||
t_seat = seat;
|
||||
}
|
||||
uint64 GetTransportGuid() const { return t_guid; }
|
||||
uint64 GetTransportGuid() const { return t_guid.GetRawValue(); }
|
||||
Position const *GetTransportPos() const { return &t_pos; }
|
||||
int8 GetTransportSeat() const { return t_seat; }
|
||||
uint32 GetTransportTime() const { return t_time; }
|
||||
|
|
@ -790,7 +788,7 @@ class MovementInfo
|
|||
uint32 time;
|
||||
Position pos;
|
||||
// transport
|
||||
uint64 t_guid;
|
||||
ObjectGuid t_guid;
|
||||
Position t_pos;
|
||||
uint32 t_time;
|
||||
int8 t_seat;
|
||||
|
|
@ -805,6 +803,18 @@ class MovementInfo
|
|||
float u_unk1;
|
||||
};
|
||||
|
||||
inline ByteBuffer& operator<< (ByteBuffer& buf, MovementInfo const& mi)
|
||||
{
|
||||
mi.Write(buf);
|
||||
return buf;
|
||||
}
|
||||
|
||||
inline ByteBuffer& operator>> (ByteBuffer& buf, MovementInfo& mi)
|
||||
{
|
||||
mi.Read(buf);
|
||||
return buf;
|
||||
}
|
||||
|
||||
enum DiminishingLevels
|
||||
{
|
||||
DIMINISHING_LEVEL_1 = 0,
|
||||
|
|
|
|||
|
|
@ -183,7 +183,7 @@ bool ChatHandler::HandleDebugSendOpcodeCommand(const char* /*args*/)
|
|||
}
|
||||
else if(type == "pguid")
|
||||
{
|
||||
data.append(unit->GetPackGUID());
|
||||
data << unit->GetPackGUID();
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
|||
|
|
@ -45,6 +45,12 @@ class ByteBufferException
|
|||
size_t size;
|
||||
};
|
||||
|
||||
template<class T>
|
||||
struct Unused
|
||||
{
|
||||
Unused() {}
|
||||
};
|
||||
|
||||
class ByteBuffer
|
||||
{
|
||||
public:
|
||||
|
|
@ -233,6 +239,14 @@ class ByteBuffer
|
|||
return *this;
|
||||
}
|
||||
|
||||
template<class T>
|
||||
ByteBuffer &operator>>(Unused<T> &)
|
||||
{
|
||||
read_skip<T>();
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
||||
uint8 operator[](size_t pos) const
|
||||
{
|
||||
return read<uint8>(pos);
|
||||
|
|
@ -288,13 +302,9 @@ class ByteBuffer
|
|||
_rpos += len;
|
||||
}
|
||||
|
||||
bool readPackGUID(uint64& guid)
|
||||
uint64 readPackGUID()
|
||||
{
|
||||
if(rpos() + 1 > size())
|
||||
return false;
|
||||
|
||||
guid = 0;
|
||||
|
||||
uint64 guid = 0;
|
||||
uint8 guidmark = 0;
|
||||
(*this) >> guidmark;
|
||||
|
||||
|
|
@ -302,16 +312,13 @@ class ByteBuffer
|
|||
{
|
||||
if(guidmark & (uint8(1) << i))
|
||||
{
|
||||
if(rpos() + 1 > size())
|
||||
return false;
|
||||
|
||||
uint8 bit;
|
||||
(*this) >> bit;
|
||||
guid |= (uint64(bit) << (i * 8));
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
return guid;
|
||||
}
|
||||
|
||||
const uint8 *contents() const { return &_storage[0]; }
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
#ifndef __REVISION_NR_H__
|
||||
#define __REVISION_NR_H__
|
||||
#define REVISION_NR "9550"
|
||||
#define REVISION_NR "9551"
|
||||
#endif // __REVISION_NR_H__
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue