public bool BuildPacket(out UpdateObject packet) { packet = new UpdateObject(); packet.NumObjUpdates = BlockCount; packet.MapID = (ushort)MapId; WorldPacket buffer = new WorldPacket(); if (buffer.WriteBit(!outOfRangeGUIDs.Empty())) { buffer.WriteUInt16(0); // object limit to instantly destroy - objects before this index on m_outOfRangeGUIDs list get "smoothly phased out" buffer.WriteUInt32(outOfRangeGUIDs.Count); foreach (var guid in outOfRangeGUIDs) { buffer.WritePackedGuid(guid); } } var bytes = data.GetData(); buffer.WriteUInt32(bytes.Length); buffer.WriteBytes(bytes); packet.Data = buffer.GetData(); return(true); }
public bool BuildPacket(out UpdateObject packet) { packet = new UpdateObject(); packet.NumObjUpdates = BlockCount; packet.MapID = (ushort)MapId; WorldPacket buffer = new WorldPacket(); if (buffer.WriteBit(!outOfRangeGUIDs.Empty() || !destroyGUIDs.Empty())) { buffer.WriteUInt16((ushort)destroyGUIDs.Count); buffer.WriteInt32(destroyGUIDs.Count + outOfRangeGUIDs.Count); foreach (var destroyGuid in destroyGUIDs) { buffer.WritePackedGuid(destroyGuid); } foreach (var outOfRangeGuid in outOfRangeGUIDs) { buffer.WritePackedGuid(outOfRangeGuid); } } var bytes = data.GetData(); buffer.WriteInt32(bytes.Length); buffer.WriteBytes(bytes); packet.Data = buffer.GetData(); return(true); }
public void Write(WorldPacket data) { data.WriteInt64(ID); data.WriteInt32(RecordID); data.WriteBit(Data.HasValue); if (Data.HasValue) { data.WriteUInt32(Data.Value.GetSize()); data.WriteBytes(Data.Value); } }
public override void BuildValuesCreate(WorldPacket data, Player target) { UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target); WorldPacket buffer = new WorldPacket(); m_objectData.WriteCreate(buffer, flags, this, target); m_conversationData.WriteCreate(buffer, flags, this, target); data.WriteUInt32(buffer.GetSize()); data.WriteUInt8((byte)flags); data.WriteBytes(buffer); }
void BuildValuesUpdateForPlayerWithMask(UpdateData data, UpdateMask requestedObjectMask, UpdateMask requestedItemMask, UpdateMask requestedAzeriteItemMask, Player target) { UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target); UpdateMask valuesMask = new UpdateMask((int)TypeId.Max); if (requestedObjectMask.IsAnySet()) { valuesMask.Set((int)TypeId.Object); } m_itemData.FilterDisallowedFieldsMaskForFlag(requestedItemMask, flags); if (requestedItemMask.IsAnySet()) { valuesMask.Set((int)TypeId.Item); } m_azeriteItemData.FilterDisallowedFieldsMaskForFlag(requestedAzeriteItemMask, flags); if (requestedAzeriteItemMask.IsAnySet()) { valuesMask.Set((int)TypeId.AzeriteItem); } WorldPacket buffer = new WorldPacket(); buffer.WriteUInt32(valuesMask.GetBlock(0)); if (valuesMask[(int)TypeId.Object]) { m_objectData.WriteUpdate(buffer, requestedObjectMask, true, this, target); } if (valuesMask[(int)TypeId.Item]) { m_itemData.WriteUpdate(buffer, requestedItemMask, true, this, target); } if (valuesMask[(int)TypeId.AzeriteItem]) { m_azeriteItemData.WriteUpdate(buffer, requestedAzeriteItemMask, true, this, target); } WorldPacket buffer1 = new WorldPacket(); buffer1.WriteUInt8((byte)UpdateType.Values); buffer1.WritePackedGuid(GetGUID()); buffer1.WriteUInt32(buffer.GetSize()); buffer1.WriteBytes(buffer.GetData()); data.AddUpdateBlock(buffer1); }
public WorldSession(WorldServer server, VanillaWorld core, int connectionID, Socket connectionSocket) : base(connectionID, connectionSocket) { Server = server; Core = core; UpdatePacketBuilder = new UpdatePacketBuilder(this); // Connection Packet using (WorldPacket packet = new WorldPacket(WorldOpcodes.SMSG_AUTH_CHALLENGE)) { packet.WriteBytes(new byte[] { 0x33, 0x18, 0x34, 0xC8 }); SendPacket(packet); } }
public override void BuildValuesUpdate(WorldPacket data, Player target) { UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target); WorldPacket buffer = new WorldPacket(); buffer.WriteUInt32(m_values.GetChangedObjectTypeMask()); if (m_values.HasChanged(TypeId.Object)) { m_objectData.WriteUpdate(buffer, flags, this, target); } if (m_values.HasChanged(TypeId.Conversation)) { m_conversationData.WriteUpdate(buffer, flags, this, target); } data.WriteUInt32(buffer.GetSize()); data.WriteBytes(buffer); }
void BuildValuesUpdateForPlayerWithMask(UpdateData data, UpdateMask requestedObjectMask, UpdateMask requestedDynamicObjectMask, Player target) { UpdateMask valuesMask = new UpdateMask((int)TypeId.Max); if (requestedObjectMask.IsAnySet()) { valuesMask.Set((int)TypeId.Object); } if (requestedDynamicObjectMask.IsAnySet()) { valuesMask.Set((int)TypeId.DynamicObject); } WorldPacket buffer = new WorldPacket(); buffer.WriteUInt32(valuesMask.GetBlock(0)); if (valuesMask[(int)TypeId.Object]) { m_objectData.WriteUpdate(buffer, requestedObjectMask, true, this, target); } if (valuesMask[(int)TypeId.DynamicObject]) { m_dynamicObjectData.WriteUpdate(buffer, requestedDynamicObjectMask, true, this, target); } WorldPacket buffer1 = new WorldPacket(); buffer1.WriteUInt8((byte)UpdateType.Values); buffer1.WritePackedGuid(GetGUID()); buffer1.WriteUInt32(buffer.GetSize()); buffer1.WriteBytes(buffer.GetData()); data.AddUpdateBlock(buffer1); }
public override void BuildValuesUpdateWithFlag(WorldPacket data, UpdateFieldFlag flags, Player target) { UpdateMask valuesMask = new UpdateMask(14); valuesMask.Set((int)TypeId.Item); valuesMask.Set((int)TypeId.AzeriteItem); WorldPacket buffer = new WorldPacket(); buffer.WriteUInt32(valuesMask.GetBlock(0)); UpdateMask mask = new UpdateMask(40); m_itemData.AppendAllowedFieldsMaskForFlag(mask, flags); m_itemData.WriteUpdate(buffer, mask, true, this, target); UpdateMask mask2 = new UpdateMask(9); m_azeriteItemData.AppendAllowedFieldsMaskForFlag(mask2, flags); m_azeriteItemData.WriteUpdate(buffer, mask2, true, this, target); data.WriteUInt32(buffer.GetSize()); data.WriteBytes(buffer); }
public override void BuildValuesUpdate(WorldPacket data, Player target) { UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target); WorldPacket buffer = new(); if (m_values.HasChanged(TypeId.Object)) { m_objectData.WriteUpdate(buffer, flags, this, target); } if (m_values.HasChanged(TypeId.Item)) { m_itemData.WriteUpdate(buffer, flags, this, target); } if (m_values.HasChanged(TypeId.AzeriteEmpoweredItem)) { m_azeriteEmpoweredItemData.WriteUpdate(buffer, flags, this, target); } data.WriteUInt32(buffer.GetSize()); data.WriteUInt32(m_values.GetChangedObjectTypeMask()); data.WriteBytes(buffer); }