void PacketBuilder::WriteCreate(const MoveSpline& move_spline, ByteBuffer& data) { // WriteClientStatus(mov,data); // data.append<float>(&mov.m_float_values[SpeedWalk], SpeedMaxCount); // if (mov.SplineEnabled()) { MoveSplineFlag splineFlags = move_spline.splineflags; data << splineFlags.raw(); if (splineFlags.final_angle) { data << move_spline.facing.angle; } else if (splineFlags.final_target) { data << move_spline.facing.target; } else if (splineFlags.final_point) { data << move_spline.facing.f.x << move_spline.facing.f.y << move_spline.facing.f.z; } data << move_spline.timePassed(); data << move_spline.Duration(); data << move_spline.GetId(); uint32 nodes = move_spline.getPath().size(); data << nodes; data.append<Vector3>(&move_spline.getPath()[0], nodes); data << (move_spline.isCyclic() ? Vector3::zero() : move_spline.FinalDestination()); } }
void PacketBuilder::WriteCreateData(MoveSpline const& moveSpline, ByteBuffer& data) { if (!moveSpline.Finalized()) { MoveSplineFlag splineFlags = moveSpline.splineflags; if ((splineFlags & MoveSplineFlag::Parabolic) && moveSpline.effect_start_time < moveSpline.Duration()) data << moveSpline.vertical_acceleration; // added in 3.1 data << moveSpline.timePassed(); if (splineFlags.final_angle) data << moveSpline.facing.angle; else if (splineFlags.final_target) { ObjectGuid facingGuid = moveSpline.facing.target; data.WriteByteSeq(facingGuid[5]); data.WriteByteSeq(facingGuid[3]); data.WriteByteSeq(facingGuid[7]); data.WriteByteSeq(facingGuid[1]); data.WriteByteSeq(facingGuid[6]); data.WriteByteSeq(facingGuid[4]); data.WriteByteSeq(facingGuid[2]); data.WriteByteSeq(facingGuid[0]); } uint32 nodes = moveSpline.getPath().size(); for (uint32 i = 0; i < nodes; ++i) { data << float(moveSpline.getPath()[i].z); data << float(moveSpline.getPath()[i].x); data << float(moveSpline.getPath()[i].y); } if (splineFlags.final_point) data << moveSpline.facing.f.x << moveSpline.facing.f.z << moveSpline.facing.f.y; data << float(1.f); // splineInfo.duration_mod_next; added in 3.1 data << moveSpline.Duration(); if (splineFlags & (MoveSplineFlag::Parabolic | MoveSplineFlag::Animation)) data << moveSpline.effect_start_time; // added in 3.1 data << float(1.f); // splineInfo.duration_mod; added in 3.1 } if (!moveSpline.isCyclic()) { Vector3 dest = moveSpline.FinalDestination(); data << float(dest.z); data << float(dest.x); data << float(dest.y); } else data << Vector3::zero(); data << moveSpline.GetId(); }
void PacketBuilder::WriteCreateBytes(const MoveSpline& move_spline, ByteBuffer& data) { if (!move_spline.Finalized()) { MoveSplineFlag splineFlags = move_spline.splineflags; uint32 nodes = move_spline.getPath().size(); bool hasSplineStartTime = move_spline.splineflags & (MoveSplineFlag::Trajectory | MoveSplineFlag::Animation); bool hasSplineVerticalAcceleration = (move_spline.splineflags & MoveSplineFlag::Trajectory) && move_spline.effect_start_time < move_spline.Duration(); if (hasSplineVerticalAcceleration) data << float(move_spline.vertical_acceleration); // added in 3.1 data << int32(move_spline.timePassed()); if (move_spline.splineflags & MoveSplineFlag::Final_Angle) data << float(NormalizeOrientation(move_spline.facing.angle)); else if (move_spline.splineflags & MoveSplineFlag::Final_Target) data.WriteGuidBytes<5, 3, 7, 1, 6, 4, 2, 0>(ObjectGuid(move_spline.facing.target)); for (uint32 i = 0; i < nodes; ++i) { data << float(move_spline.getPath()[i].z); data << float(move_spline.getPath()[i].x); data << float(move_spline.getPath()[i].y); } if (move_spline.splineflags & MoveSplineFlag::Final_Point) data << float(move_spline.facing.f.x) << float(move_spline.facing.f.z) << float(move_spline.facing.f.y); data << float(1.f); data << int32(move_spline.Duration()); if (hasSplineStartTime) data << int32(move_spline.effect_start_time); // added in 3.1 data << float(1.f); } if (!move_spline.isCyclic()) { Vector3 dest = move_spline.FinalDestination(); data << float(dest.z); data << float(dest.x); data << float(dest.y); } else data << Vector3::zero(); data << uint32(move_spline.GetId()); }
void PacketBuilder::WriteCreateData(MoveSpline const& moveSpline, ByteBuffer& data, Unit* unit) { if (!moveSpline.Finalized()) { MoveSplineFlag splineFlags = moveSpline.splineflags; uint8 splineType = 0; if (splineFlags.final_point) splineType = 2; else if (splineFlags.final_angle) splineType = 4; else if ((splineFlags & MoveSplineFlag::Mask_Final_Facing) == MoveSplineFlag::Final_Target) splineType = MonsterMoveFacingTarget; data << uint8(splineType); data << float(1.f); // splineInfo.duration_mod; added in 3.1 uint32 nodes = moveSpline.getPath().size(); for (uint32 i = 0; i < nodes; ++i) { data << float(moveSpline.getPath()[i].z); data << float(moveSpline.getPath()[i].x); data << float(moveSpline.getPath()[i].y); } data << float(1.f); // splineInfo.duration_mod_next; added in 3.1 if (splineFlags.final_point) data << moveSpline.facing.f.z << moveSpline.facing.f.y << moveSpline.facing.f.x; if (splineFlags.final_angle) data << moveSpline.facing.angle; if ((splineFlags & MoveSplineFlag::Parabolic) && moveSpline.effect_start_time < moveSpline.Duration()) data << moveSpline.vertical_acceleration; // added in 3.1 if (splineFlags & (MoveSplineFlag::Parabolic | MoveSplineFlag::Animation)) data << moveSpline.effect_start_time; // added in 3.1 data << moveSpline.timePassed(); data << moveSpline.Duration(); } data << uint32(moveSpline.GetId()); data << float(unit->GetPositionZ()); data << float(unit->GetPositionX()); data << float(unit->GetPositionY()); }
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: { ObjectGuid targetGuid = moveSpline.facing.target; data.WriteBits(2, 2); data.WriteBit(targetGuid[4]); data.WriteBit(targetGuid[3]); data.WriteBit(targetGuid[7]); data.WriteBit(targetGuid[2]); data.WriteBit(targetGuid[6]); data.WriteBit(targetGuid[1]); data.WriteBit(targetGuid[0]); data.WriteBit(targetGuid[5]); 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::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::WriteCreateData(MoveSpline const& moveSpline, ByteBuffer& data) { if (!moveSpline.Finalized()) { MoveSplineFlag const& splineFlags = moveSpline.splineflags; MonsterMoveType type = GetMonsterMoveType(moveSpline); data << moveSpline.timePassed(); data << float(1.f); // splineInfo.duration_mod_next; added in 3.1 data << float(1.f); // splineInfo.duration_mod; added in 3.1 uint32 nodes = moveSpline.getPath().size(); for (uint32 i = 0; i < nodes; ++i) { data << float(moveSpline.getPath()[i].x); data << float(moveSpline.getPath()[i].z); data << float(moveSpline.getPath()[i].y); } if (splineFlags & (MoveSplineFlag::Parabolic | MoveSplineFlag::Animation)) data << moveSpline.effect_start_time; // added in 3.1 data << uint8(type); if (type == MonsterMoveFacingAngle) data << float(moveSpline.facing.angle); if (type == MonsterMoveFacingPoint) data << moveSpline.facing.f.x << moveSpline.facing.f.z << moveSpline.facing.f.y; if ((splineFlags & MoveSplineFlag::Parabolic) && moveSpline.effect_start_time < moveSpline.Duration()) data << float(moveSpline.vertical_acceleration); // added in 3.1 // NYI block here data << moveSpline.Duration(); } Vector3 destination = moveSpline.isCyclic() ? Vector3::zero() : moveSpline.FinalDestination(); data << float(destination.x); data << float(destination.z); data << moveSpline.GetId(); data << float(destination.y); }
void PacketBuilder::WriteCreateBits(MoveSpline const& moveSpline, ByteBuffer& data) { if (!data.WriteBit(!moveSpline.Finalized())) return; data.WriteBit(moveSpline.splineflags & (MoveSplineFlag::Parabolic | MoveSplineFlag::Animation)); // hasSplineStartTime = packet.ReadBit(); data.WriteBit((moveSpline.splineflags & MoveSplineFlag::Parabolic) && moveSpline.effect_start_time < moveSpline.Duration()); data.WriteBit(0); // unk data.WriteBits(moveSpline.getPath().size(), 25); // splineCount = packet.ReadBits("Spline Waypoints", 22, index); data.WriteBits(uint8(moveSpline.spline.mode()), 2); // packet.ReadEnum<SplineMode>("Spline Mode", 2, index); data.WriteBits(moveSpline.splineflags.raw(), 20); // packet.ReadEnum<SplineFlag434>("Spline flags", 20, index); }
void PacketBuilder::WriteCreateBits(MoveSpline const& moveSpline, ByteBuffer& data) { if (!data.WriteBit(!moveSpline.Finalized())) return; data.WriteBit(moveSpline.splineflags & (MoveSplineFlag::Parabolic | MoveSplineFlag::Animation)); data.WriteBit((moveSpline.splineflags & MoveSplineFlag::Parabolic) && moveSpline.effect_start_time < moveSpline.Duration()); data.WriteBit(0); // NYI Block data.WriteBits(moveSpline.getPath().size(), 20); data.WriteBits(moveSpline.spline.mode(), 2); data.WriteBits(moveSpline.splineflags.raw(), 25); }
void PacketBuilder::WriteData(const MoveSpline& move_spline, ByteBuffer& data) { MoveSplineFlag splineFlags = move_spline.splineflags; uint32 nodes = move_spline.getPath().size(); data << move_spline.timePassed(); if (splineFlags.orientationFixed) data << move_spline.facing.angle; if (splineFlags.final_target) { uint64 Guid = move_spline.facing.target; uint8 guidBytes[] = { 5, 3, 7, 1, 6, 4, 2, 0 }; data.WriteGuidBytes(Guid, guidBytes, 8, 0); } for (uint32 i = 0; i < nodes; i++) { data << move_spline.getPath()[0].z; data << move_spline.getPath()[0].x; data << move_spline.getPath()[0].y; } if(splineFlags.flying) data << move_spline.facing.f.x << move_spline.facing.f.z << move_spline.facing.f.y; data << float(1.f); data << uint32(0); data << move_spline.effect_start_time; data << float(1.f); data << move_spline.FinalDestination().z; data << move_spline.FinalDestination().x; data << move_spline.FinalDestination().y; data << move_spline.GetId(); }
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::WriteCreateBits(MoveSpline const& moveSpline, ByteBuffer& data) { ASSERT(!moveSpline.Finalized()); MoveSplineFlag flags = moveSpline.splineflags; data.WriteBit(true); data.WriteBit(flags.parabolic || flags.animation); data.WriteBits(uint8(moveSpline.spline.mode()), 2); data.WriteBits(moveSpline.getPath().size(), 20); data.WriteBits(flags.raw(), 25); data.WriteBit(flags.parabolic); data.WriteBit(false); if (false) { data.WriteBits(0, 2); data.WriteBits(0, 21); } }
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); }
void PacketBuilder::WriteCreateBits(MoveSpline const& moveSpline, ByteBuffer& data) { if (!data.WriteBit(!moveSpline.Finalized())) return; data.WriteBit(moveSpline.splineflags & (MoveSplineFlag::Parabolic | MoveSplineFlag::Animation)); // hasSplineStartTime = packet.ReadBit(); data.WriteBits(uint8(moveSpline.spline.mode()), 2); // packet.ReadEnum<SplineMode>("Spline Mode", 2, index); data.WriteBits(moveSpline.splineflags.raw(), 20); // packet.ReadEnum<SplineFlag434>("Spline flags", 20, index); data.WriteBit(0); // unk data.WriteBits(moveSpline.getPath().size(), 25); // splineCount = packet.ReadBits("Spline Waypoints", 22, index); data.WriteBit((moveSpline.splineflags & MoveSplineFlag::Parabolic) && moveSpline.effect_start_time < moveSpline.Duration()); /*switch (moveSpline.splineflags & MoveSplineFlag::Mask_Final_Facing) { case MoveSplineFlag::Final_Target: { ObjectGuid targetGuid = moveSpline.facing.target; data.WriteBits(0, 2); data.WriteBit(targetGuid[4]); data.WriteBit(targetGuid[5]); data.WriteBit(targetGuid[0]); data.WriteBit(targetGuid[7]); data.WriteBit(targetGuid[1]); data.WriteBit(targetGuid[3]); data.WriteBit(targetGuid[2]); data.WriteBit(targetGuid[6]); break; } case MoveSplineFlag::Final_Angle: data.WriteBits(3, 2); break; case MoveSplineFlag::Final_Point: data.WriteBits(1, 2); break; default: data.WriteBits(2, 2); break; }*/ }
void PacketBuilder::WriteCreateBits(const MoveSpline& move_spline, ByteBuffer& data) { if (!data.WriteBit(!move_spline.Finalized())) return; MoveSplineFlag splineFlags = move_spline.splineflags; uint32 nodes = move_spline.getPath().size(); bool hasSplineStartTime = move_spline.splineflags & (MoveSplineFlag::Trajectory | MoveSplineFlag::Animation); bool hasSplineVerticalAcceleration = (move_spline.splineflags & MoveSplineFlag::Trajectory) && move_spline.effect_start_time < move_spline.Duration(); data.WriteBits(uint8(move_spline.spline.mode()), 2); data.WriteBit(hasSplineStartTime); data.WriteBits(nodes, 22); switch (move_spline.splineflags & MoveSplineFlag::Mask_Final_Facing) { case MoveSplineFlag::Final_Target: { data.WriteBits(2, 2); data.WriteGuidMask<4, 3, 7, 2, 6, 1, 0, 5>(ObjectGuid(move_spline.facing.target)); 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(hasSplineVerticalAcceleration); data.WriteBits(move_spline.splineflags.raw(), 25); }
void PacketBuilder::WriteCreateData(MoveSpline const& moveSpline, ByteBuffer& data, Unit* unit) { if (/*!moveSpline.Finalized()*/true) { MoveSplineFlag splineFlags = moveSpline.splineflags; uint8 splineType = 0; switch (splineFlags & MoveSplineFlag::Mask_Final_Facing) { case MoveSplineFlag::Final_Target: splineType = MonsterMoveFacingTarget; break; case MoveSplineFlag::Final_Angle: splineType = MonsterMoveFacingAngle; break; case MoveSplineFlag::Final_Point: splineType = MonsterMoveFacingSpot; break; default: splineType = MonsterMoveNormal; break; } data << float(1.0f); // splineInfo.duration_mod_next; added in 3.1 uint32 nodes = moveSpline.getPath().size(); for (uint32 i = 0; i < nodes; ++i) { data << float(moveSpline.getPath()[i].z); data << float(moveSpline.getPath()[i].y); data << float(moveSpline.getPath()[i].x); } data << uint8(splineType); data << float(1.0f); // splineInfo.duration_mod; added in 3.1 if (splineFlags.final_point) data << moveSpline.facing.f.x << moveSpline.facing.f.y << moveSpline.facing.f.z; if (splineFlags.parabolic) data << moveSpline.vertical_acceleration; // added in 3.1 if (splineFlags.final_angle) data << moveSpline.facing.angle; data << moveSpline.Duration(); if (splineFlags.parabolic || splineFlags.animation) data << moveSpline.effect_start_time; // added in 3.1 data << moveSpline.timePassed(); } if (!moveSpline.isCyclic()) { Vector3 dest = moveSpline.FinalDestination(); data << moveSpline.GetId(); data << float(dest.x); data << float(dest.y); data << float(dest.z); } else { data << moveSpline.GetId(); data << float(0.0f); data << float(0.0f); data << float(0.0f); } }