Skip to content

Commit d3f64cb

Browse files
committed
Add 5.5.0 handlers for ClientAreaTrigger group
SMSG_AREA_TRIGGER_RE_PATH SMSG_AREA_TRIGGER_DENIED
1 parent b7b41b0 commit d3f64cb

2 files changed

Lines changed: 132 additions & 5 deletions

File tree

WowPacketParser/Enums/Version/V5_5_0_61735/Opcodes.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -813,14 +813,14 @@ public static BiDictionary<Opcode, int> Opcodes(Direction direction)
813813
{ Opcode.SMSG_AREA_POI_UPDATE_RESPONSE, 0x4F0018 },
814814
{ Opcode.SMSG_AREA_SPIRIT_HEALER_TIME, 0x3C01DF },
815815
{ Opcode.SMSG_AREA_TRIGGER_DENIED, 0x3D0009 },
816-
{ Opcode.SMSG_AREA_TRIGGER_FORCE_SET_POSITION_AND_FACING, 0x3D0006 },
816+
{ Opcode.SMSG_AREA_TRIGGER_FORCE_SET_POSITION_AND_FACING, 0x3D0006 }, // NYI
817817
{ Opcode.SMSG_AREA_TRIGGER_MESSAGE, 0x3C0307 },
818818
{ Opcode.SMSG_AREA_TRIGGER_NO_CORPSE, 0x3C01B6 },
819-
{ Opcode.SMSG_AREA_TRIGGER_PLAY_SPELL_VISUAL, 0x3D0004 },
819+
{ Opcode.SMSG_AREA_TRIGGER_PLAY_SPELL_VISUAL, 0x3D0004 }, // NYI
820820
{ Opcode.SMSG_AREA_TRIGGER_RE_PATH, 0x3D0003 },
821-
{ Opcode.SMSG_AREA_TRIGGER_RE_SHAPE, 0x3D0008 },
822-
{ Opcode.SMSG_AREA_TRIGGER_UNATTACH, 0x3D0007 },
823-
{ Opcode.SMSG_AREA_TRIGGER_UPDATE_DECAL_PROPERTIES, 0x3D0005 },
821+
{ Opcode.SMSG_AREA_TRIGGER_RE_SHAPE, 0x3D0008 }, // NYI
822+
{ Opcode.SMSG_AREA_TRIGGER_UNATTACH, 0x3D0007 }, // NYI
823+
{ Opcode.SMSG_AREA_TRIGGER_UPDATE_DECAL_PROPERTIES, 0x3D0005 }, // NYI
824824
{ Opcode.SMSG_ARENA_CLEAR_OPPONENTS, 0x3C00E5 },
825825
{ Opcode.SMSG_ARENA_CROWD_CONTROL_SPELL_RESULT, 0x3C00CE },
826826
{ Opcode.SMSG_ARENA_PREP_OPPONENT_SPECIALIZATIONS, 0x3C00E4 },
Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using WowPacketParser.Enums;
4+
using WowPacketParser.Misc;
5+
using WowPacketParser.Parsing;
6+
using WowPacketParser.Store;
7+
using WowPacketParser.Store.Objects;
8+
9+
namespace WowPacketParserModule.V5_5_0_61735.Parsers
10+
{
11+
public static class AreaTriggerHandler
12+
{
13+
public static List<AreaTriggerCreatePropertiesSplinePoint> ReadAreaTriggerSpline(AreaTriggerCreateProperties createProperties, Packet packet, params object[] indexes)
14+
{
15+
var moveTime = packet.ReadInt32("TimeToTarget", indexes);
16+
packet.ReadInt32("ElapsedTimeForMovement", indexes);
17+
18+
packet.ResetBitReader();
19+
20+
var pointCount = (int)packet.ReadBits("PointsCount", 16, indexes);
21+
var points = new List<AreaTriggerCreatePropertiesSplinePoint>(pointCount);
22+
var distance = 0.0;
23+
var prevPoint = new Vector3();
24+
25+
for (var i = 0u; i < pointCount; ++i)
26+
{
27+
var point = packet.ReadVector3("Points", indexes, i);
28+
if (createProperties != null)
29+
{
30+
points.Add(new AreaTriggerCreatePropertiesSplinePoint()
31+
{
32+
areatriggerGuid = createProperties.Guid,
33+
Idx = i,
34+
X = point.X,
35+
Y = point.Y,
36+
Z = point.Z
37+
});
38+
}
39+
40+
if (i > 1 && i < pointCount - 1) // ignore first and last points (dummy spline points)
41+
distance += Vector3.GetDistance(prevPoint, point);
42+
43+
prevPoint = point;
44+
}
45+
46+
if (distance > 0)
47+
{
48+
packet.AddValue("Computed Distance", distance, indexes);
49+
double speed = packet.AddValue("Computed Speed", (distance / moveTime) * 1000, indexes);
50+
if (createProperties != null)
51+
createProperties.Speed = (float)speed;
52+
}
53+
54+
return points;
55+
}
56+
57+
public static void ReadAreaTriggerMovementScript(Packet packet, params object[] indexes)
58+
{
59+
packet.ReadInt32("SpellScriptID", indexes);
60+
packet.ReadVector3("Center", indexes);
61+
}
62+
63+
public static AreaTriggerCreatePropertiesOrbit ReadAreaTriggerOrbit(AreaTriggerCreateProperties createProperties, Packet packet, params object[] indexes)
64+
{
65+
packet.ResetBitReader();
66+
var orbit = new AreaTriggerCreatePropertiesOrbit();
67+
orbit.CreateProperties = createProperties;
68+
69+
var hasTarget = packet.ReadBit("HasPathTarget", indexes);
70+
var hasCenter = packet.ReadBit("HasCenter", indexes);
71+
orbit.CounterClockwise = packet.ReadBit("CounterClockwise", indexes);
72+
orbit.CanLoop = packet.ReadBit("CanLoop", indexes);
73+
74+
var moveTime = packet.ReadUInt32("TimeToTarget", indexes);
75+
packet.ReadInt32("ElapsedTimeForMovement", indexes);
76+
orbit.StartDelay = packet.ReadUInt32("StartDelay", indexes);
77+
orbit.CircleRadius = packet.ReadSingle("Radius", indexes);
78+
orbit.BlendFromRadius = packet.ReadSingle("BlendFromRadius", indexes);
79+
orbit.InitialAngle = packet.ReadSingle("InitialAngle", indexes);
80+
orbit.ZOffset = packet.ReadSingle("ZOffset", indexes);
81+
82+
if (hasTarget)
83+
packet.ReadPackedGuid128("PathTarget", indexes);
84+
85+
if (hasCenter)
86+
packet.ReadVector3("Center", indexes);
87+
88+
var distance = 2 * Math.PI * orbit.CircleRadius.Value;
89+
packet.AddValue("Computed Distance", distance, indexes);
90+
var speed = packet.AddValue("Computed Speed", (distance / moveTime) * 1000, indexes);
91+
if (createProperties != null)
92+
createProperties.Speed = (float)speed;
93+
94+
return orbit;
95+
}
96+
97+
[Parser(Opcode.SMSG_AREA_TRIGGER_RE_PATH)]
98+
public static void HandleAreaTriggerRePath(Packet packet)
99+
{
100+
var areaTriggerGuid = packet.ReadPackedGuid128("TriggerGUID");
101+
packet.ReadPackedGuid128("Unused_1100");
102+
103+
Storage.Objects.TryGetValue(areaTriggerGuid, out WoWObject createProperties);
104+
105+
packet.ResetBitReader();
106+
var hasAreaTriggerSpline = packet.ReadBit("HasAreaTriggerSpline");
107+
var hasAreaTriggerOrbit = packet.ReadBit("HasAreaTriggerOrbit");
108+
var hasAreaTriggerMovementScript = packet.ReadBit("HasAreaTriggerMovementScript");
109+
110+
if (hasAreaTriggerSpline)
111+
ReadAreaTriggerSpline((AreaTriggerCreateProperties)createProperties, packet, "Spline");
112+
113+
if (hasAreaTriggerMovementScript)
114+
ReadAreaTriggerMovementScript(packet, "MovementScript");
115+
116+
if (hasAreaTriggerOrbit)
117+
ReadAreaTriggerOrbit((AreaTriggerCreateProperties)createProperties, packet, "Orbit");
118+
}
119+
120+
[Parser(Opcode.SMSG_AREA_TRIGGER_DENIED)]
121+
public static void HandleAreaTriggerDenied(Packet packet)
122+
{
123+
packet.ReadInt32("AreaTriggerID");
124+
packet.ReadBit("Entered");
125+
}
126+
}
127+
}

0 commit comments

Comments
 (0)