void PacketBuilder::WriteCreateBits(MoveSpline const& moveSpline, ByteBuffer& data) { data.WriteBits(uint8(moveSpline.spline.mode()), 2); data.WriteBit(moveSpline.splineflags & (MoveSplineFlag::Parabolic | MoveSplineFlag::Animation)); data.WriteBits(moveSpline.getPath().size(), 22); switch (moveSpline.splineflags & MoveSplineFlag::Mask_Final_Facing) { case MoveSplineFlag::Final_Target: { uint64 targetGuid = moveSpline.facing.target; data.WriteBits(2, 2); uint8 guidMask[] = { 4, 3, 7, 2, 6, 1, 0, 5 }; data.WriteGuidMask(moveSpline.facing.target, guidMask, 8, 0); break; } case MoveSplineFlag::Final_Angle: data.WriteBits(0, 2); break; case MoveSplineFlag::Final_Point: data.WriteBits(1, 2); break; default: data.WriteBits(3, 2); break; } data.WriteBit((moveSpline.splineflags & MoveSplineFlag::Parabolic) && moveSpline.effect_start_time < moveSpline.Duration()); data.WriteBits(moveSpline.splineflags.raw(), 25); }
void PacketBuilder::WriteStopMovement(Vector3 const& pos, uint32 splineId, ByteBuffer& data, Unit* unit) { ObjectGuid guid = unit->GetGUID(); ObjectGuid transport = unit->GetTransGUID(); data << float(pos.z); data << float(pos.x); data << uint32(splineId); data << float(pos.y); data << float(0.f); // Most likely transport Y data << float(0.f); // Most likely transport Z data << float(0.f); // Most likely transport X data.WriteBit(1); // Parabolic speed // esi+4Ch data.WriteBit(guid[0]); data.WriteBits(MonsterMoveStop, 3); data.WriteBit(1); data.WriteBit(1); data.WriteBit(1); data.WriteBits(0, 20); data.WriteBit(1); data.WriteBit(guid[3]); data.WriteBit(1); data.WriteBit(1); data.WriteBit(1); data.WriteBit(1); data.WriteGuidMask(guid, 7, 4); data.WriteBit(1); data.WriteBit(guid[5]); data.WriteBits(0, 22); // WP count data.WriteBit(guid[6]); data.WriteBit(0); // Fake bit data.WriteGuidMask(transport, 7, 1, 3, 0, 6, 4, 5, 2); data.WriteBit(0); // Send no block data.WriteBit(0); data.WriteGuidMask(guid, 2, 1); data.FlushBits(); data.WriteByteSeq(guid[1]); data.WriteGuidBytes(transport, 6, 4, 1, 7, 0, 3, 5, 2); data.WriteGuidBytes(guid, 5, 3, 6, 0, 7, 2, 4); }
void PacketBuilder::WriteFacingTargetPart(MoveSpline const& moveSpline, ByteBuffer& data) { if (GetMonsterMoveType(moveSpline) == MonsterMoveFacingTarget && !moveSpline.Finalized()) { ObjectGuid facingGuid = moveSpline.facing.target; data.WriteGuidMask(facingGuid, 4, 7, 0, 5, 1, 2, 3, 6); data.WriteGuidBytes(facingGuid, 4, 2, 0, 5, 6, 3, 1, 7); } }
void PacketBuilder::WriteBytes(const MoveSpline& move_spline, ByteBuffer& data) { MoveSplineFlag splineFlags = move_spline.splineflags; uint32 nodes = move_spline.getPath().size(); data.WriteBits(SPLINEMODE_LINEAR, 2); data.WriteBit(false); data.WriteBits(nodes, 22); data.WriteBits(SPLINETYPE_NORMAL, 2); if (splineFlags.walkmode) { uint8 guidMask[] = { 4, 3, 7, 2, 6, 1, 0, 5 }; data.WriteGuidMask(move_spline.facing.target, guidMask, 8); } }
void PacketBuilder::WriteBytes(const MoveSpline& move_spline, ByteBuffer& data) { MoveSplineFlag splineFlags = move_spline.splineflags; uint32 nodes = move_spline.getPath().size(); data.WriteBits(SPLINEMODE_LINEAR, 2); data.WriteBit(1); data.WriteBits(nodes, 22); data.WriteBits(SPLINETYPE_NORMAL, 2); if (splineFlags.final_target) { uint64 Guid = move_spline.facing.target; uint8 guidMask[] = { 4, 3, 7, 2, 6, 1, 0, 5 }; data.WriteGuidMask(Guid, guidMask, 8); } data.WriteBit(0); data.WriteBits(0, 25); }