Created
June 1, 2014 03:46
-
-
Save Subv/e54cedfdbf936ee06281 to your computer and use it in GitHub Desktop.
WPP Modifications for phaseid prediction of spawns
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/WowPacketParser/Parsing/Parsers/MovementHandler.cs b/WowPacketParser/Parsing/Parsers/MovementHandler.cs | |
index fea17cd..dac557b 100644 | |
--- a/WowPacketParser/Parsing/Parsers/MovementHandler.cs | |
+++ b/WowPacketParser/Parsing/Parsers/MovementHandler.cs | |
@@ -1,4 +1,5 @@ | |
using System; | |
+using System.Collections.Generic; | |
using System.IO; | |
using WowPacketParser.Enums; | |
using WowPacketParser.Enums.Version; | |
@@ -15,6 +16,12 @@ namespace WowPacketParser.Parsing.Parsers | |
public static int CurrentPhaseMask = 1; | |
+ [ThreadStatic] | |
+ public static HashSet<ushort> PhaseIds = new HashSet<ushort>(); | |
+ | |
+ [ThreadStatic] | |
+ public static Dictionary<ushort, uint> phaseCounts = new Dictionary<ushort, uint>(); | |
+ | |
public static MovementInfo ReadMovementInfo(ref Packet packet, Guid guid, int index = -1) | |
{ | |
if (ClientVersion.Build == ClientVersionBuild.V4_2_0_14333) | |
diff --git a/WowPacketParser/SQL/Builders/Spawns.cs b/WowPacketParser/SQL/Builders/Spawns.cs | |
index 3b5b46f..0d847fb 100644 | |
--- a/WowPacketParser/SQL/Builders/Spawns.cs | |
+++ b/WowPacketParser/SQL/Builders/Spawns.cs | |
@@ -7,6 +7,7 @@ using WowPacketParser.Enums.Version; | |
using WowPacketParser.Misc; | |
using WowPacketParser.Store.Objects; | |
using Guid = WowPacketParser.Misc.Guid; | |
+using System.Linq; | |
namespace WowPacketParser.SQL.Builders | |
{ | |
@@ -53,7 +54,7 @@ namespace WowPacketParser.SQL.Builders | |
row.AddValue("id", entry); | |
row.AddValue("map", !creature.IsOnTransport() ? creature.Map : 0); // TODO: query transport template for map | |
row.AddValue("spawnMask", creature.GetDefaultSpawnMask()); | |
- row.AddValue("phaseMask", creature.PhaseMask); | |
+ row.AddValue("phaseMask", string.Join(" - ", creature.PossiblePhases.ToArray())); | |
if (!creature.IsOnTransport()) | |
{ | |
row.AddValue("position_x", creature.Movement.Position.X); | |
diff --git a/WowPacketParser/Store/Objects/WoWObject.cs b/WowPacketParser/Store/Objects/WoWObject.cs | |
index 24c2b9f..805f989 100644 | |
--- a/WowPacketParser/Store/Objects/WoWObject.cs | |
+++ b/WowPacketParser/Store/Objects/WoWObject.cs | |
@@ -20,6 +20,8 @@ namespace WowPacketParser.Store.Objects | |
public uint PhaseMask; | |
+ public HashSet<ushort> PossiblePhases; | |
+ | |
public bool ForceTemporarySpawn; | |
public virtual bool IsTemporarySpawn() | |
diff --git a/WowPacketParserModule.V4_3_4_15595/Parsers/MovementHandler.cs b/WowPacketParserModule.V4_3_4_15595/Parsers/MovementHandler.cs | |
index 603ea45..f48880f 100644 | |
--- a/WowPacketParserModule.V4_3_4_15595/Parsers/MovementHandler.cs | |
+++ b/WowPacketParserModule.V4_3_4_15595/Parsers/MovementHandler.cs | |
@@ -2738,8 +2738,14 @@ namespace WowPacketParserModule.V4_3_4_15595.Parsers | |
count = packet.ReadUInt32() / 2; | |
packet.WriteLine("Phases count: {0}", count); | |
+ CoreParsers.MovementHandler.PhaseIds.Clear(); | |
for (var i = 0; i < count; ++i) | |
- packet.ReadUInt16("Phase id", i); // Phase.dbc | |
+ { | |
+ ushort ph = packet.ReadUInt16("Phase id", i); | |
+ CoreParsers.MovementHandler.PhaseIds.Add(ph); // Phase.dbc | |
+ if (!CoreParsers.MovementHandler.phaseCounts.ContainsKey(ph)) | |
+ CoreParsers.MovementHandler.phaseCounts.Add(ph, 0); | |
+ } | |
packet.ReadXORByte(guid, 3); | |
packet.ReadXORByte(guid, 0); | |
diff --git a/WowPacketParserModule.V4_3_4_15595/Parsers/UpdateHandler.cs b/WowPacketParserModule.V4_3_4_15595/Parsers/UpdateHandler.cs | |
index e27c27f..007117a 100644 | |
--- a/WowPacketParserModule.V4_3_4_15595/Parsers/UpdateHandler.cs | |
+++ b/WowPacketParserModule.V4_3_4_15595/Parsers/UpdateHandler.cs | |
@@ -92,6 +92,7 @@ namespace WowPacketParserModule.V4_3_4_15595.Parsers | |
obj.Map = map; | |
obj.Area = CoreParsers.WorldStateHandler.CurrentAreaId; | |
obj.PhaseMask = (uint)CoreParsers.MovementHandler.CurrentPhaseMask; | |
+ obj.PossiblePhases = new HashSet<ushort>(CoreParsers.MovementHandler.PhaseIds); | |
// If this is the second time we see the same object (same guid, | |
// same position) update its phasemask |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment