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