Skip to content

Commit 343c242

Browse files
committed
Merge remote-tracking branch 'origin/master' into housing
2 parents 5c0a03e + fcdd4e5 commit 343c242

16 files changed

+96
-113
lines changed

WowPacketParser/Enums/ClientVersionBuild.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -651,6 +651,7 @@ public enum ClientVersionBuild
651651
V11_2_7_64797 = 64797,
652652
V11_2_7_64877 = 64877,
653653
V11_2_7_64978 = 64978,
654+
V11_2_7_65299 = 65299,
654655

655656
// Classic
656657
V1_13_2_31446 = 31446,

WowPacketParser/Enums/ItemFieldFlags.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,11 @@
22

33
namespace WowPacketParser.Enums
44
{
5-
// TODO: use when reading ITEM_FIELD_FLAGS
65
[Flags]
76
public enum ItemFieldFlags : uint
87
{
9-
Souldbound = 0x00000001, // Item is soulbound and cannot be traded
10-
Unk1 = 0x00000002, // ?
8+
Soulbound = 0x00000001, // Item is soulbound and cannot be traded
9+
Translated = 0x00000002, // Translates pagetext to lang id in query
1110
Unlocked = 0x00000004, // Item had lock but can be opened now
1211
Wrapped = 0x00000008, // Item is wrapped and contains another item
1312
Unk2 = 0x00000010, // ?

WowPacketParser/Enums/UpdateFields.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ public enum ItemField
6767
ITEM_FIELD_ENCHANTMENT_8_3,
6868
ITEM_FIELD_ENCHANTMENT_9_1,
6969
ITEM_FIELD_ENCHANTMENT_9_3,
70+
[UpdateField(UpdateFieldType.Enum, typeof(ItemFieldFlags))]
7071
ITEM_FIELD_FLAGS,
7172
[UpdateField(UpdateFieldType.Guid)]
7273
ITEM_FIELD_GIFTCREATOR,

WowPacketParser/Enums/Version/Opcodes.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -834,6 +834,7 @@ public static ClientVersionBuild GetOpcodeDefiningBuild(ClientVersionBuild build
834834
return ClientVersionBuild.V11_2_7_64632;
835835
case ClientVersionBuild.V11_2_7_64877:
836836
case ClientVersionBuild.V11_2_7_64978:
837+
case ClientVersionBuild.V11_2_7_65299:
837838
return ClientVersionBuild.V11_2_7_64877;
838839
case ClientVersionBuild.V1_13_2_31446:
839840
case ClientVersionBuild.V1_13_2_31650:
@@ -1361,7 +1362,6 @@ public static BiDictionary<Opcode, int> GetOpcodeDictionary(ClientVersionBuild b
13611362
case ClientVersionBuild.V11_2_7_64632:
13621363
return Opcodes_11_2_7.Opcodes(direction);
13631364
case ClientVersionBuild.V11_2_7_64877:
1364-
case ClientVersionBuild.V11_2_7_64978:
13651365
return Opcodes_11_2_7_64877.Opcodes(direction);
13661366

13671367
case ClientVersionBuild.V1_13_2_31446:

WowPacketParser/Enums/Version/UpdateFields.cs

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ public class UpdateFieldInfo
1616
public string Name;
1717
public int Size;
1818
public UpdateFieldType Format;
19+
public Type EnumType;
1920
}
2021

2122
public static class UpdateFields
@@ -64,15 +65,15 @@ private static bool LoadUFDictionariesInto(Dictionary<Type, SortedList<int, Upda
6465
};
6566

6667
bool loaded = false;
67-
foreach (Type enumType in enumTypes)
68+
foreach (Type ufEnumType in enumTypes)
6869
{
6970
string vTypeString =
70-
$"WowPacketParserModule.{GetUpdateFieldDictionaryBuildName(build)}.Enums.{enumType.Name}";
71+
$"WowPacketParserModule.{GetUpdateFieldDictionaryBuildName(build)}.Enums.{ufEnumType.Name}";
7172
Type vEnumType = asm.GetType(vTypeString);
7273
if (vEnumType == null)
7374
{
7475
vTypeString =
75-
$"WowPacketParser.Enums.Version.{GetUpdateFieldDictionaryBuildName(build)}.{enumType.Name}";
76+
$"WowPacketParser.Enums.Version.{GetUpdateFieldDictionaryBuildName(build)}.{ufEnumType.Name}";
7677
vEnumType = Assembly.GetExecutingAssembly().GetType(vTypeString);
7778
if (vEnumType == null)
7879
continue; // versions prior to 4.3.0 do not have AreaTriggerField
@@ -86,22 +87,22 @@ private static bool LoadUFDictionariesInto(Dictionary<Type, SortedList<int, Upda
8687

8788
for (int i = 0; i < vValues.Length; ++i)
8889
{
89-
var format = enumType.GetMember(vNames[i])
90+
UpdateFieldAttribute attribute = (UpdateFieldAttribute)ufEnumType.GetMember(vNames[i])
9091
.SelectMany(member => member.GetCustomAttributes(typeof(UpdateFieldAttribute), false))
9192
.Where(attribute => ((UpdateFieldAttribute)attribute).Version <= ClientVersion.VersionDefiningBuild)
92-
.OrderByDescending(attribute => ((UpdateFieldAttribute)attribute).Version)
93-
.Select(attribute => ((UpdateFieldAttribute)attribute).UFAttribute)
94-
.DefaultIfEmpty(UpdateFieldType.Default).First();
93+
.OrderByDescending(attribute => ((UpdateFieldAttribute)attribute).Version).FirstOrDefault();;
94+
UpdateFieldType format = attribute?.UFAttribute ?? UpdateFieldType.Default;
95+
Type enumType = attribute?.EnumType ?? null;
9596

96-
result.Add((int)vValues.GetValue(i), new UpdateFieldInfo() { Value = (int)vValues.GetValue(i), Name = vNames[i], Size = 0, Format = format });
97+
result.Add((int)vValues.GetValue(i), new UpdateFieldInfo() { Value = (int)vValues.GetValue(i), Name = vNames[i], Size = 0, Format = format, EnumType = enumType });
9798
namesResult.Add(vNames[i], (int)vValues.GetValue(i));
9899
}
99100

100101
for (var i = 0; i < result.Count - 1; ++i)
101102
result.Values[i].Size = result.Keys[i + 1] - result.Keys[i];
102103

103-
dicts.Add(enumType, result);
104-
nameToValueDict.Add(enumType, namesResult);
104+
dicts.Add(ufEnumType, result);
105+
nameToValueDict.Add(ufEnumType, namesResult);
105106
loaded = true;
106107
}
107108

@@ -1009,6 +1010,7 @@ private static string GetUpdateFieldDictionaryBuildName(ClientVersionBuild build
10091010
case ClientVersionBuild.V11_2_7_64797:
10101011
case ClientVersionBuild.V11_2_7_64877:
10111012
case ClientVersionBuild.V11_2_7_64978:
1013+
case ClientVersionBuild.V11_2_7_65299:
10121014
{
10131015
return "V11_2_7_64632";
10141016
}

WowPacketParser/Loading/BinaryPacketReader.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ namespace WowPacketParser.Loading
1010
{
1111
public sealed class BinaryPacketReader : IPacketReader
1212
{
13-
enum PktVersion
13+
public enum PktVersion
1414
{
1515
NoHeader = 0,
1616
// ReSharper disable InconsistentNaming

WowPacketParser/Loading/SniffFile.cs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
using System.IO;
77
using System.IO.Compression;
88
using System.Linq;
9-
using System.Text;
109
using System.Threading;
1110
using WowPacketParser.Enums;
1211
using WowPacketParser.Enums.Version;
@@ -542,31 +541,31 @@ public List<Packet> ReadPackets()
542541
private void FusionDump(ICollection<Packet> packets)
543542
{
544543
Trace.WriteLine($"{_logPrefix}: Merge {packets.Count} packets to a file...");
545-
FusionBinaryPacketWriter.Write(packets, Encoding.ASCII);
544+
FusionBinaryPacketWriter.Write(packets);
546545
}
547546

548547
private void SplitBinaryDump(ICollection<Packet> packets)
549548
{
550549
Trace.WriteLine($"{_logPrefix}: Splitting {packets.Count} packets to multiple files...");
551-
SplitBinaryPacketWriter.Write(packets, Encoding.ASCII);
550+
SplitBinaryPacketWriter.Write(packets);
552551
}
553552

554553
private void DirectionSplitBinaryDump(ICollection<Packet> packets)
555554
{
556555
Trace.WriteLine($"{_logPrefix}: Splitting {packets.Count} packets to multiple files...");
557-
SplitDirectionBinaryPacketWriter.Write(packets, Encoding.ASCII);
556+
SplitDirectionBinaryPacketWriter.Write(packets);
558557
}
559558

560559
private void SessionSplitBinaryDump(ICollection<Packet> packets)
561560
{
562561
Trace.WriteLine($"{_logPrefix}: Splitting {packets.Count} packets to multiple files...");
563-
SplitSessionBinaryPacketWriter.Write(packets, Encoding.ASCII);
562+
SplitSessionBinaryPacketWriter.Write(packets);
564563
}
565564

566565
private void BinaryDump(string fileName, ICollection<Packet> packets)
567566
{
568567
Trace.WriteLine($"{_logPrefix}: Copying {packets.Count} packets to .pkt format...");
569-
BinaryPacketWriter.Write(SniffType.Pkt, fileName, Encoding.ASCII, packets);
568+
BinaryPacketWriter.Write(fileName, FileMode.Create, packets);
570569
}
571570

572571
private void WriteSQLs(Packets packets)

WowPacketParser/Misc/ClientVersion.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -656,6 +656,7 @@ public static class ClientVersion
656656
new KeyValuePair<ClientVersionBuild, DateTime>(ClientVersionBuild.V11_2_7_64797, new DateTime(2025, 12, 10)),
657657
new KeyValuePair<ClientVersionBuild, DateTime>(ClientVersionBuild.V11_2_7_64877, new DateTime(2025, 12, 11)),
658658
new KeyValuePair<ClientVersionBuild, DateTime>(ClientVersionBuild.V11_2_7_64978, new DateTime(2025, 12, 19)),
659+
new KeyValuePair<ClientVersionBuild, DateTime>(ClientVersionBuild.V11_2_7_65299, new DateTime(2026, 01, 10)),
659660

660661
// no classic info, pkt contain build in header
661662
};
@@ -1300,6 +1301,7 @@ public static ClientVersionBuild GetVersionDefiningBuild(ClientVersionBuild buil
13001301
case ClientVersionBuild.V11_2_7_64797:
13011302
case ClientVersionBuild.V11_2_7_64877:
13021303
case ClientVersionBuild.V11_2_7_64978:
1304+
case ClientVersionBuild.V11_2_7_65299:
13031305
return ClientVersionBuild.V11_0_0_55666;
13041306
//Classic
13051307
case ClientVersionBuild.V1_13_2_31446:

WowPacketParser/Parsing/Parsers/PetHandler.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -323,5 +323,11 @@ public static void HandlePetSpellAutocast(Packet packet)
323323
packet.ReadUInt32<SpellId>("Spell Id");
324324
packet.ReadByte("State");
325325
}
326+
327+
[Parser(Opcode.SMSG_STABLE_RESULT)]
328+
public static void HandleStableResult(Packet packet)
329+
{
330+
packet.ReadByte("Stable Result");
331+
}
326332
}
327333
}

WowPacketParser/Parsing/Parsers/UpdateHandler.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
using System;
22
using System.Collections;
33
using System.Collections.Generic;
4+
using System.Globalization;
5+
using System.Xml.Linq;
46
using WowPacketParser.Enums;
57
using WowPacketParser.Enums.Version;
68
using WowPacketParser.Misc;
@@ -349,12 +351,14 @@ private static Dictionary<int, UpdateField> ReadValuesUpdateBlock(Packet packet,
349351
int start = i;
350352
int size = 1;
351353
UpdateFieldType updateFieldType = UpdateFieldType.Default;
354+
System.Type enumType = null;
352355
if (fieldInfo != null)
353356
{
354357
key = fieldInfo.Name;
355358
size = fieldInfo.Size;
356359
start = fieldInfo.Value;
357360
updateFieldType = fieldInfo.Format;
361+
enumType = fieldInfo.EnumType;
358362
}
359363

360364
List<UpdateField> fieldData = new List<UpdateField>();
@@ -529,6 +533,13 @@ private static Dictionary<int, UpdateField> ReadValuesUpdateBlock(Packet packet,
529533
}
530534
break;
531535
}
536+
case UpdateFieldType.Enum:
537+
{
538+
IConvertible enumValue = (IConvertible)System.Enum.ToObject(enumType, fieldData[0].Int32Value);
539+
packet.AddValue(key, Convert.ToInt64(enumValue) + " (" + enumValue.ToString(CultureInfo.InvariantCulture) + ")", index);
540+
updateValues.Ints[key] = fieldData[0].Int32Value;
541+
break;
542+
}
532543
default:
533544
for (int k = 0; k < fieldData.Count; ++k)
534545
if (mask[start + k] && (!isCreating || fieldData[k].UInt32Value != 0))

0 commit comments

Comments
 (0)