Skip to content

Commit 6276df5

Browse files
committed
Print jump spline height
1 parent cd71a61 commit 6276df5

File tree

10 files changed

+49
-46
lines changed

10 files changed

+49
-46
lines changed

WowPacketParser/Parsing/Parsers/MovementHandler.cs

Lines changed: 40 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -296,8 +296,9 @@ public static void HandleMonsterMove(Packet packet)
296296

297297
if (flags.HasAnyFlag(SplineFlag.Trajectory))
298298
{
299-
packet.ReadSingle("JumpGravity");
300-
packet.ReadInt32("SpecialTime");
299+
monsterMove.Jump = new();
300+
monsterMove.Jump.Gravity = packet.ReadSingle("JumpGravity");
301+
monsterMove.Jump.StartTime = packet.ReadUInt32("SpecialTime");
301302
}
302303

303304
double distance = 0;
@@ -335,8 +336,43 @@ public static void HandleMonsterMove(Packet packet)
335336
distance += Vector3.GetDistance(start, endpos);
336337
}
337338

338-
packet.WriteLine("Computed Distance: " + distance);
339-
packet.WriteLine("Computed Speed: " + distance / monsterMove.MoveTime * 1000);
339+
PrintComputedSplineMovementParams(packet, distance, monsterMove);
340+
}
341+
342+
public static void PrintComputedSplineMovementParams(Packet packet, double distance, PacketMonsterMove monsterMove, params object[] indexes)
343+
{
344+
packet.AddValue("Computed Distance", distance, indexes);
345+
packet.AddValue("Computed Speed", (distance / monsterMove.MoveTime) * 1000, indexes);
346+
if (monsterMove.Jump != null && monsterMove.Flags.HasFlag(UniversalSplineFlag.Parabolic))
347+
{
348+
const double defaultGravity = 19.29110336303710937;
349+
350+
static double ComputeFallElevation(double timePassed, double startVelocity, double gravity)
351+
{
352+
const double termVel = 60.148003;
353+
354+
if (startVelocity > termVel)
355+
startVelocity = termVel;
356+
357+
var terminalTime = (termVel - startVelocity) / gravity; // the time that needed to reach terminalVelocity
358+
359+
if (timePassed > terminalTime)
360+
return termVel * (timePassed - terminalTime) +
361+
startVelocity * terminalTime +
362+
gravity * terminalTime * terminalTime * 0.5f;
363+
364+
return timePassed * (startVelocity + timePassed * gravity * 0.5f);
365+
}
366+
367+
var speedZ = monsterMove.MoveTime * monsterMove.Jump.Gravity / 2.0 / 1000.0;
368+
var height = -ComputeFallElevation(monsterMove.MoveTime / 2.0 / 1000.0, -speedZ, monsterMove.Jump.Gravity);
369+
370+
var speedZWithDefaultGravity = monsterMove.MoveTime * defaultGravity / 2.0 / 1000.0;
371+
var heightWithDefaultGravity = -ComputeFallElevation(monsterMove.MoveTime / 2.0 / 1000.0, -speedZWithDefaultGravity, defaultGravity);
372+
373+
packet.AddValue("Computed Jump Height", height, indexes);
374+
packet.AddValue("Computed Jump Height (with default gravity)", heightWithDefaultGravity, indexes);
375+
}
340376
}
341377

342378
private static void ReadSplineMovement510(Packet packet, Vector3 pos)

WowPacketParserModule.V11_0_0_55666/Parsers/MovementHandler.cs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -136,10 +136,7 @@ public static void ReadMovementSpline(Packet packet, Vector3 pos, params object[
136136
}
137137

138138
if (endpos.X != 0 && endpos.Y != 0 && endpos.Z != 0)
139-
{
140-
packet.AddValue("Computed Distance", distance, indexes);
141-
packet.AddValue("Computed Speed", (distance / monsterMove.MoveTime) * 1000, indexes);
142-
}
139+
WowPacketParser.Parsing.Parsers.MovementHandler.PrintComputedSplineMovementParams(packet, distance, monsterMove, indexes);
143140
}
144141

145142
public static void ReadMovementMonsterSpline(Packet packet, Vector3 pos, WowGuid guid, params object[] indexes)

WowPacketParserModule.V1_13_2_31446/Parsers/MovementHandler.cs

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -135,9 +135,7 @@ public static void ReadMovementSpline(Packet packet, Vector3 pos, params object[
135135
ReadMonsterSplineSpellEffectExtraData(packet, indexes, "MonsterSplineSpellEffectExtra");
136136

137137
if (hasJumpExtraData)
138-
{
139138
monsterMove.Jump = ReadMonsterSplineJumpExtraData(packet, indexes, "MonsterSplineJumpExtraData");
140-
}
141139

142140
if (hasAnimTier)
143141
{
@@ -148,10 +146,7 @@ public static void ReadMovementSpline(Packet packet, Vector3 pos, params object[
148146
}
149147

150148
if (endpos.X != 0 && endpos.Y != 0 && endpos.Z != 0)
151-
{
152-
packet.AddValue("Computed Distance", distance, indexes);
153-
packet.AddValue("Computed Speed", (distance / monsterMove.MoveTime) * 1000, indexes);
154-
}
149+
WowPacketParser.Parsing.Parsers.MovementHandler.PrintComputedSplineMovementParams(packet, distance, monsterMove, indexes);
155150
}
156151

157152
public static void ReadMovementMonsterSpline(Packet packet, Vector3 pos, params object[] indexes)

WowPacketParserModule.V3_4_0_45166/Parsers/MovementHandler.cs

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -141,9 +141,7 @@ public static void ReadMovementSpline(Packet packet, Vector3 pos, params object[
141141
ReadMonsterSplineSpellEffectExtraData(packet, indexes, "MonsterSplineSpellEffectExtra");
142142

143143
if (hasJumpExtraData)
144-
{
145144
monsterMove.Jump = ReadMonsterSplineJumpExtraData(packet, indexes, "MonsterSplineJumpExtraData");
146-
}
147145

148146
if (hasAnimTier)
149147
{
@@ -154,10 +152,7 @@ public static void ReadMovementSpline(Packet packet, Vector3 pos, params object[
154152
}
155153

156154
if (endpos.X != 0 && endpos.Y != 0 && endpos.Z != 0)
157-
{
158-
packet.AddValue("Computed Distance", distance, indexes);
159-
packet.AddValue("Computed Speed", (distance / monsterMove.MoveTime) * 1000, indexes);
160-
}
155+
WowPacketParser.Parsing.Parsers.MovementHandler.PrintComputedSplineMovementParams(packet, distance, monsterMove, indexes);
161156
}
162157

163158
public static void ReadMovementMonsterSpline(Packet packet, Vector3 pos, params object[] indexes)

WowPacketParserModule.V4_4_0_54481/Parsers/MovementHandler.cs

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -239,9 +239,7 @@ public static void ReadMovementSpline(Packet packet, Vector3 pos, params object[
239239
ReadMonsterSplineSpellEffectExtraData(packet, indexes, "MonsterSplineSpellEffectExtra");
240240

241241
if (hasJumpExtraData)
242-
{
243242
monsterMove.Jump = ReadMonsterSplineJumpExtraData(packet, indexes, "MonsterSplineJumpExtraData");
244-
}
245243

246244
if (hasAnimTier)
247245
{
@@ -252,10 +250,7 @@ public static void ReadMovementSpline(Packet packet, Vector3 pos, params object[
252250
}
253251

254252
if (endpos.X != 0 && endpos.Y != 0 && endpos.Z != 0)
255-
{
256-
packet.AddValue("Computed Distance", distance, indexes);
257-
packet.AddValue("Computed Speed", (distance / monsterMove.MoveTime) * 1000, indexes);
258-
}
253+
WowPacketParser.Parsing.Parsers.MovementHandler.PrintComputedSplineMovementParams(packet, distance, monsterMove, indexes);
259254
}
260255

261256
public static void ReadMovementMonsterSpline(Packet packet, Vector3 pos, params object[] indexes)

WowPacketParserModule.V5_5_0_61735/Parser/MovementHandler.cs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -213,10 +213,7 @@ public static void ReadMovementSpline(Packet packet, Vector3 pos, params object[
213213
}
214214

215215
if (endpos.X != 0 && endpos.Y != 0 && endpos.Z != 0)
216-
{
217-
packet.AddValue("Computed Distance", distance, indexes);
218-
packet.AddValue("Computed Speed", (distance / monsterMove.MoveTime) * 1000, indexes);
219-
}
216+
WowPacketParser.Parsing.Parsers.MovementHandler.PrintComputedSplineMovementParams(packet, distance, monsterMove, indexes);
220217
}
221218

222219
public static void ReadMovementMonsterSpline(Packet packet, Vector3 pos, WowGuid guid, params object[] indexes)

WowPacketParserModule.V5_5_0_61735/Parser/MovementHandler1158.cs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -201,10 +201,7 @@ public static void ReadMovementSpline(Packet packet, Vector3 pos, params object[
201201
}
202202

203203
if (endpos.X != 0 && endpos.Y != 0 && endpos.Z != 0)
204-
{
205-
packet.AddValue("Computed Distance", distance, indexes);
206-
packet.AddValue("Computed Speed", (distance / monsterMove.MoveTime) * 1000, indexes);
207-
}
204+
WowPacketParser.Parsing.Parsers.MovementHandler.PrintComputedSplineMovementParams(packet, distance, monsterMove, indexes);
208205
}
209206

210207
public static void ReadMovementMonsterSpline(Packet packet, Vector3 pos, WowGuid guid, params object[] indexes)

WowPacketParserModule.V6_0_2_19033/Parsers/MovementHandler.cs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -326,10 +326,7 @@ public static void ReadMovementSpline(Packet packet, Vector3 pos, params object[
326326
ReadMonsterSplineFilter(packet, indexes, "MonsterSplineFilter");
327327

328328
if (endpos.X != 0 && endpos.Y != 0 && endpos.Z != 0)
329-
{
330-
packet.AddValue("Computed Distance", distance, indexes);
331-
packet.AddValue("Computed Speed", (distance / monsterMove.MoveTime) * 1000, indexes);
332-
}
329+
WowPacketParser.Parsing.Parsers.MovementHandler.PrintComputedSplineMovementParams(packet, distance, monsterMove, indexes);
333330
}
334331

335332
public static void ReadMovementMonsterSpline(Packet packet, Vector3 pos, params object[] indexes)

WowPacketParserModule.V7_0_3_22248/Parsers/MovementHandler.cs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -153,10 +153,7 @@ public static void ReadMovementSpline(Packet packet, Vector3 pos, params object[
153153
ReadMonsterSplineSpellEffectExtraData(packet, "MonsterSplineSpellEffectExtra");
154154

155155
if (endpos.X != 0 && endpos.Y != 0 && endpos.Z != 0)
156-
{
157-
packet.AddValue("Computed Distance", distance, indexes);
158-
packet.AddValue("Computed Speed", (distance / monsterMove.MoveTime) * 1000, indexes);
159-
}
156+
WowPacketParser.Parsing.Parsers.MovementHandler.PrintComputedSplineMovementParams(packet, distance, monsterMove, indexes);
160157
}
161158

162159
[Parser(Opcode.SMSG_ON_MONSTER_MOVE)]

WowPacketParserModule.V8_0_1_27101/Parsers/MovementHandler.cs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -190,10 +190,7 @@ public static void ReadMovementSpline(Packet packet, Vector3 pos, params object[
190190
}
191191

192192
if (endpos.X != 0 && endpos.Y != 0 && endpos.Z != 0)
193-
{
194-
packet.AddValue("Computed Distance", distance, indexes);
195-
packet.AddValue("Computed Speed", (distance / monsterMove.MoveTime) * 1000, indexes);
196-
}
193+
WowPacketParser.Parsing.Parsers.MovementHandler.PrintComputedSplineMovementParams(packet, distance, monsterMove, indexes);
197194
}
198195

199196
public static void ReadMovementMonsterSpline(Packet packet, Vector3 pos, WowGuid guid, params object[] indexes)

0 commit comments

Comments
 (0)