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::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::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::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); } }