示例#1
0
        private static int GetOpcode(Opcode opcode, ClientVersionBuild build)
        {
            int opcodeId;

            GetOpcodeDictionary(build).TryGetValue(opcode, out opcodeId);
            return(opcodeId);
        }
 // [addedInVersion, removedInVersion[
 public ParserAttribute(Opcode opcode, ClientVersionBuild addedInVersion, ClientVersionBuild removedInVersion)
 {
     if (ClientVersion.AddedInVersion(addedInVersion) && ClientVersion.RemovedInVersion(removedInVersion))
     {
         Opcode = opcode;
     }
 }
 // [addedInVersion, removedInVersion[
 public ParserAttribute(Opcode opcode, ClientVersionBuild addedInVersion, ClientVersionBuild removedInVersion)
 {
     if (ClientVersion.AddedInVersion(addedInVersion) && ClientVersion.RemovedInVersion(removedInVersion))
         Opcode = Opcodes.GetOpcode(opcode);
     else
         Opcode = 0;
 }
示例#4
0
        public static void SetVersion(ClientVersionBuild version)
        {
            if (Build == version)
            {
                return;
            }

            Build      = version;
            _expansion = GetExpansion(version);

            Opcodes.InitializeOpcodeDictionary();
            Handler.ResetHandlers();
            UpdateFields.ResetUFDictionaries();
            try
            {
                var asm = Assembly.Load($"WowPacketParserModule.{VersionDefiningBuild}");
                Trace.WriteLine($"Loading module WowPacketParserModule.{VersionDefiningBuild}.dll");

                Handler.LoadHandlers(asm, VersionDefiningBuild);
                Handler.LoadBattlenetHandlers(asm);

                // This is a huge hack to handle the abnormal situation that appeared with builds 6.0 and 6.1 having mostly the same packet structures
                if (!UpdateFields.LoadUFDictionaries(asm, version))
                {
                    UpdateFields.LoadUFDictionaries(asm, VersionDefiningBuild);
                }
            }
            catch (FileNotFoundException)
            {
                // No dll found, try to load the data in the executable itself
                UpdateFields.LoadUFDictionaries(Assembly.GetExecutingAssembly(), Build);
            }
        }
        private static ClientType GetExpansion(ClientVersionBuild build)
        {
            if (build >= ClientVersionBuild.V6_0_2_19033)
            {
                return(ClientType.WarlordsOfDraenor);
            }
            if (build >= ClientVersionBuild.V5_0_4_16016)
            {
                return(ClientType.MistsOfPandaria);
            }
            if (build >= ClientVersionBuild.V4_0_3_13329)
            {
                return(ClientType.Cataclysm);
            }
            if (build >= ClientVersionBuild.V3_0_3_9183)
            {
                return(ClientType.WrathOfTheLichKing);
            }
            if (build >= ClientVersionBuild.V2_0_3_6299)
            {
                return(ClientType.TheBurningCrusade);
            }

            return(ClientType.WorldOfWarcraft);
        }
 public ParserAttribute(int opcode, ClientVersionBuild addedInVersion, ClientVersionBuild removedInVersion)
 {
     if (ClientVersion.AddedInVersion(addedInVersion) && ClientVersion.RemovedInVersion(removedInVersion))
     {
         Opcode = Opcodes.GetOpcode(opcode);
     }
 }
        public static void SetVersion(ClientVersionBuild version)
        {
            if (Build == version)
            {
                return;
            }

            Build      = version;
            _expansion = GetExpansion(version);

            Opcodes.InitializeOpcodeDictionary();
            Handler.ResetHandlers();
            UpdateFields.ResetUFDictionaries();
            try
            {
                var asm = Assembly.LoadFrom(string.Format(AppDomain.CurrentDomain.BaseDirectory + "/" + "WowPacketParserModule.{0}.dll", VersionDefiningBuild));
                Trace.WriteLine(string.Format("Loading module WowPacketParserModule.{0}.dll", VersionDefiningBuild));
                Handler.LoadHandlers(asm, VersionDefiningBuild);
                UpdateFields.LoadUFDictionaries(asm, VersionDefiningBuild);
            }
            catch (FileNotFoundException)
            {
                // No dll found, try to load the data in the executable itself
                UpdateFields.LoadUFDictionaries(Assembly.GetExecutingAssembly(), Build);
            }
        }
 // [addedInVersion, removedInVersion[
 public ParserAttribute(int opcode, ClientVersionBuild addedInVersion, ClientVersionBuild removedInVersion)
 {
     if (ClientVersion.AddedInVersion(addedInVersion) && ClientVersion.RemovedInVersion(removedInVersion))
         Opcode = opcode;
     else
         Opcode = 0;
 }
 public HotfixStructureAttribute(DB2Hash hash, ClientVersionBuild addedInVersion, ClientVersionBuild removedInVersion)
 {
     if (ClientVersion.InVersion(addedInVersion, removedInVersion))
     {
         Hash = hash;
     }
 }
示例#10
0
 public ParserAttribute(Opcode opcode, ClientVersionBuild addedInVersion)
 {
     if (ClientVersion.AddedInVersion(addedInVersion))
     {
         Opcode = Opcodes.GetOpcode(opcode);
     }
 }
 public HotfixStructureAttribute(DB2Hash hash, ClientVersionBuild addedInVersio)
 {
     if (ClientVersion.AddedInVersion(addedInVersio))
     {
         Hash = hash;
     }
 }
示例#12
0
        public static string GetOpcodeName(int opcodeId, ClientVersionBuild versionBuild)
        {
            foreach (var pair in GetOpcodeDictionary(versionBuild))
                if (pair.Value == opcodeId)
                    return pair.Key.ToString();

            return opcodeId.ToString();
        }
示例#13
0
 // [addedInVersion, +inf[
 public ParserAttribute(int opcode, ClientVersionBuild addedInVersion)
 {
     if (ClientVersion.AddedInVersion(addedInVersion))
     {
         Opcode = opcode;
     }
     else
     {
         Opcode = 0;
     }
 }
示例#14
0
 private static Dictionary<Opcode, int> GetOpcodeDictionary(ClientVersionBuild versionBuild)
 {
     switch (versionBuild)
     {
         case ClientVersionBuild.V2_4_3_8606:
         case ClientVersionBuild.V3_0_2_9056:
         case ClientVersionBuild.V3_0_3_9183:
         case ClientVersionBuild.V3_0_8_9464:
         case ClientVersionBuild.V3_0_8a_9506:
         case ClientVersionBuild.V3_0_9_9551:
         case ClientVersionBuild.V3_1_0_9767:
         case ClientVersionBuild.V3_1_1_9806:
         case ClientVersionBuild.V3_1_1a_9835:
         case ClientVersionBuild.V3_1_2_9901:
         case ClientVersionBuild.V3_1_3_9947:
         case ClientVersionBuild.V3_2_0_10192:
         case ClientVersionBuild.V3_2_0a_10314:
         case ClientVersionBuild.V3_2_2_10482:
         case ClientVersionBuild.V3_2_2a_10505:
         case ClientVersionBuild.V3_3_0_10958:
         case ClientVersionBuild.V3_3_0a_11159:
         case ClientVersionBuild.V3_3_3_11685:
         case ClientVersionBuild.V3_3_5a_12340:
         {
             return _V3_3_5_opcodes;
         }
         case ClientVersionBuild.V4_0_3_13329:
         {
             return _V4_0_3_opcodes;
         }
         case ClientVersionBuild.V4_0_6_13596:
         case ClientVersionBuild.V4_0_6a_13623:
         {
             return _V4_0_6_opcodes;
         }
         case ClientVersionBuild.V4_1_0_13914:
         case ClientVersionBuild.V4_1_0a_14007:
         {
             return _V4_1_0_opcodes;
         }
         case ClientVersionBuild.V4_2_0_14333:
         case ClientVersionBuild.V4_2_0a_14480:
         {
             return _V4_2_0_opcodes;
         }
         case ClientVersionBuild.V4_2_2_14545:
         {
             return _V4_2_2_opcodes;
         }
     }
     return _V3_3_5_opcodes; // Default case, should pick a better one
 }
 /// <summary>
 /// [addedInVersion, removedInVersion[
 /// </summary>
 /// <param name="name">database field name</param>
 /// <param name="addedInVersion">initial version</param>
 /// <param name="removedInVersion">final version</param>
 public DBFieldNameAttribute(string name, ClientVersionBuild addedInVersion, ClientVersionBuild removedInVersion)
 {
     if (ClientVersion.AddedInVersion(addedInVersion) && ClientVersion.RemovedInVersion(removedInVersion))
     {
         Name = name;
         Count = 1;
     }
     else
     {
         Name = null;
         Count = 0;
     }
 }
示例#16
0
 /// <summary>
 /// [addedInVersion, +inf[
 /// </summary>
 /// <param name="name">database field name</param>
 /// <param name="addedInVersion">initial version</param>
 /// <param name="locale">initial locale</param>
 public DBFieldNameAttribute(string name, ClientVersionBuild addedInVersion, LocaleConstant locale)
 {
     if (ClientVersion.AddedInVersion(addedInVersion) && BinaryPacketReader.GetLocale() == locale)
     {
         Name  = name;
         Count = 1;
     }
     else
     {
         Name  = null;
         Count = 0;
     }
 }
 /// <summary>
 /// [addedInVersion, removedInVersion[
 /// </summary>
 /// <param name="name">database field name</param>
 /// <param name="addedInVersion">initial version</param>
 /// <param name="removedInVersion">final version</param>
 public DBFieldNameAttribute(string name, ClientVersionBuild addedInVersion, ClientVersionBuild removedInVersion)
 {
     if (ClientVersion.AddedInVersion(addedInVersion) && ClientVersion.RemovedInVersion(removedInVersion))
     {
         Name  = name;
         Count = 1;
     }
     else
     {
         Name  = null;
         Count = 0;
     }
 }
示例#18
0
        public static ClientVersionBuild FallbackVersionDefiningBuild(ClientVersionBuild definingbuild)
        {
            switch (definingbuild)
            {
            case ClientVersionBuild.V7_0_3_22248:
                return(ClientVersionBuild.V6_0_2_19033);

            case ClientVersionBuild.V8_0_1_27101:
                return(ClientVersionBuild.V7_0_3_22248);

            default:
                return(ClientVersionBuild.Zero);
            }
        }
        /// <summary>
        /// [addedInVersion, removedInVersion[
        /// </summary>
        /// <param name="name">database field name</param>
        /// <param name="addedInVersion">initial version</param>
        /// <param name="removedInVersion">final version</param>
        /// <param name="count">number of fields</param>
        /// <param name="startAtZero">true if fields name start at 0</param>
        public DBFieldNameAttribute(string name, ClientVersionBuild addedInVersion, ClientVersionBuild removedInVersion, int count, bool startAtZero = false)
        {
            if (ClientVersion.AddedInVersion(addedInVersion) && ClientVersion.RemovedInVersion(removedInVersion))
            {
                Name  = name;
                Count = count;
            }
            else
            {
                Name  = null;
                Count = 0;
            }

            StartAtZero     = startAtZero;
            _multipleFields = true;
        }
示例#20
0
        private static ClientType GetExpansion(ClientVersionBuild build)
        {
            if (build >= ClientVersionBuild.V4_0_3_13329)
            {
                return(ClientType.Cataclysm);
            }
            if (build >= ClientVersionBuild.V3_0_3_9183)
            {
                return(ClientType.WrathOfTheLichKing);
            }
            if (build >= ClientVersionBuild.V2_0_3_6299)
            {
                return(ClientType.TheBurningCrusade);
            }

            return(ClientType.WorldOfWarcraft);
        }
示例#21
0
        public static void LoadUFHandlers(Assembly asm, ClientVersionBuild assemblyBuild)
        {
            var handlers = asm.GetTypes().Where(type => type.BaseType == typeof(UpdateFieldsHandlerBase));

            var namespaceRegex = new Regex($"WowPacketParserModule\\.{assemblyBuild}\\.UpdateFields\\.(.*)$");

            foreach (var handlerType in handlers)
            {
                var buildMatch = namespaceRegex.Match(handlerType.Namespace);
                if (buildMatch.Success)
                {
                    var group = buildMatch.Groups[1];
                    ClientVersionBuild handlerBuild;
                    if (Enum.TryParse(group.Value, out handlerBuild))
                    {
                        UpdateFieldsHandlers.Add(handlerBuild, (UpdateFieldsHandlerBase)Activator.CreateInstance(handlerType));
                    }
                }
            }
        }
示例#22
0
        private static Opcode GetOpcode(int opcodeId, ClientVersionBuild build)
        {
            /* Remove this comment block if you need to find duplicated opcode
             * values in the opcode dictionaries.
             * This is not enabled by default because it is slow as sh*t.
             *
            var dict = GetOpcodeDictionary(build);
            var newDict = new Dictionary<Opcode, int>();
            foreach (var pair in dict)
            {
                if (newDict.ContainsKey(pair.Key) || newDict.ContainsValue(pair.Value))
                    throw new Exception(string.Format("Opcode dictionary got duplicated key ({0}) or value ({1}).",
                                                      pair.Key, pair.Value));
                newDict.Add(pair.Key, pair.Value);
            }*/

            foreach (var pair in GetOpcodeDictionary(build).Where(pair => pair.Value == opcodeId))
                return pair.Key;

            return (Opcode)opcodeId;
        }
示例#23
0
        private static Opcode GetOpcode(int opcodeId, ClientVersionBuild build)
        {
            /* Remove this comment block if you need to find duplicated opcode
             * values in the opcode dictionaries.
             * This is not enabled by default because it is slow as sh*t.
             *
             * var dict = GetOpcodeDictionary(build);
             * var newDict = new Dictionary<Opcode, int>();
             * foreach (var pair in dict)
             * {
             *  if (newDict.ContainsKey(pair.Key) || newDict.ContainsValue(pair.Value))
             *      throw new Exception(string.Format("Opcode dictionary got duplicated key ({0}) or value ({1}).",
             *                                        pair.Key, pair.Value));
             *  newDict.Add(pair.Key, pair.Value);
             * }*/

            foreach (var pair in GetOpcodeDictionary(build).Where(pair => pair.Value == opcodeId))
            {
                return(pair.Key);
            }

            return((Opcode)opcodeId);
        }
示例#24
0
 public static bool AddedInVersion(ClientVersionBuild build)
 {
     return _build >= build;
 }
示例#25
0
 public static void SetVersion(ClientVersionBuild version)
 {
     _build = version;
     _expansion = GetExpansion(version);
 }
示例#26
0
 private static BiDictionary<Opcode, int> GetOpcodeDictionary(ClientVersionBuild build)
 {
     switch (build)
     {
         case ClientVersionBuild.V2_4_3_8606:
         case ClientVersionBuild.V3_0_2_9056:
         case ClientVersionBuild.V3_0_3_9183:
         case ClientVersionBuild.V3_0_8_9464:
         case ClientVersionBuild.V3_0_8a_9506:
         case ClientVersionBuild.V3_0_9_9551:
         case ClientVersionBuild.V3_1_0_9767:
         case ClientVersionBuild.V3_1_1_9806:
         case ClientVersionBuild.V3_1_1a_9835:
         case ClientVersionBuild.V3_1_2_9901:
         case ClientVersionBuild.V3_1_3_9947:
         case ClientVersionBuild.V3_2_0_10192:
         case ClientVersionBuild.V3_2_0a_10314:
         case ClientVersionBuild.V3_2_2_10482:
         case ClientVersionBuild.V3_2_2a_10505:
         case ClientVersionBuild.V3_3_0_10958:
         case ClientVersionBuild.V3_3_0a_11159:
         case ClientVersionBuild.V3_3_3_11685:
         case ClientVersionBuild.V3_3_3a_11723:
         case ClientVersionBuild.V3_3_5a_12340:
         {
             return Opcodes_3_3_5.Opcodes();
         }
         case ClientVersionBuild.V4_0_3_13329:
         {
             return Opcodes_4_0_3.Opcodes();
         }
         case ClientVersionBuild.V4_0_6_13596:
         case ClientVersionBuild.V4_0_6a_13623:
         {
             return Opcodes_4_0_6.Opcodes();
         }
         case ClientVersionBuild.V4_1_0_13914:
         case ClientVersionBuild.V4_1_0a_14007:
         {
             return Opcodes_4_1_0.Opcodes();
         }
         case ClientVersionBuild.V4_2_0_14333:
         case ClientVersionBuild.V4_2_0a_14480:
         {
             return Opcodes_4_2_0.Opcodes();
         }
         case ClientVersionBuild.V4_2_2_14545:
         {
             return Opcodes_4_2_2.Opcodes();
         }
         case ClientVersionBuild.V4_3_0_15005:
         case ClientVersionBuild.V4_3_0_15050:
         {
             return Opcodes_4_3_0.Opcodes();
         }
         case ClientVersionBuild.V4_3_2_15211:
         {
             return Opcodes_4_3_2.Opcodes();
         }
         case ClientVersionBuild.V4_3_3_15354:
         {
             return Opcodes_4_3_3.Opcodes();
         }
         case ClientVersionBuild.V4_3_4_15595:
         {
             return Opcodes_4_3_4.Opcodes();
         }
         default:
         {
             return Opcodes_3_3_5.Opcodes();
         }
     }
 }
示例#27
0
        private static BiDictionary<Opcode, int> GetOpcodeDictionary(ClientVersionBuild build)
        {
            switch (build)
            {
                case ClientVersionBuild.V2_4_3_8606:
                case ClientVersionBuild.V3_0_2_9056:
                case ClientVersionBuild.V3_0_3_9183:
                case ClientVersionBuild.V3_0_8_9464:
                case ClientVersionBuild.V3_0_8a_9506:
                case ClientVersionBuild.V3_0_9_9551:
                case ClientVersionBuild.V3_1_0_9767:
                case ClientVersionBuild.V3_1_1_9806:
                case ClientVersionBuild.V3_1_1a_9835:
                case ClientVersionBuild.V3_1_2_9901:
                case ClientVersionBuild.V3_1_3_9947:
                case ClientVersionBuild.V3_2_0_10192:
                case ClientVersionBuild.V3_2_0a_10314:
                case ClientVersionBuild.V3_2_2_10482:
                case ClientVersionBuild.V3_2_2a_10505:
                case ClientVersionBuild.V3_3_0_10958:
                case ClientVersionBuild.V3_3_0a_11159:
                case ClientVersionBuild.V3_3_3_11685:
                case ClientVersionBuild.V3_3_3a_11723:
                case ClientVersionBuild.V3_3_5a_12340:
                {
                    return Opcodes_3_3_5.Opcodes();
                }
                case ClientVersionBuild.V4_0_3_13329:
                {
                    return Opcodes_4_0_3.Opcodes();
                }
                case ClientVersionBuild.V4_0_6_13596:
                case ClientVersionBuild.V4_0_6a_13623:
                {
                    return Opcodes_4_0_6.Opcodes();
                }
                case ClientVersionBuild.V4_1_0_13914:
                case ClientVersionBuild.V4_1_0a_14007:
                {
                    return Opcodes_4_1_0.Opcodes();
                }
                case ClientVersionBuild.V4_2_0_14333:
                case ClientVersionBuild.V4_2_0a_14480:
                {
                    return Opcodes_4_2_0.Opcodes();
                }
                case ClientVersionBuild.V4_2_2_14545:
                {
                    return Opcodes_4_2_2.Opcodes();
                }
                case ClientVersionBuild.V4_3_0_15005:
                case ClientVersionBuild.V4_3_0a_15050:
                {
                    return Opcodes_4_3_0.Opcodes();
                }
                case ClientVersionBuild.V4_3_2_15211:
                {
                    return Opcodes_4_3_2.Opcodes();
                }
                case ClientVersionBuild.V4_3_3_15354:
                {
                    return Opcodes_4_3_3.Opcodes();
                }
                case ClientVersionBuild.V4_3_4_15595:
                {
                    return Opcodes_4_3_4.Opcodes();
                }
                case ClientVersionBuild.V5_0_4_16016:
                {
                    return Opcodes_5_0_4.Opcodes();
                }
                case ClientVersionBuild.V5_0_5_16048:
                case ClientVersionBuild.V5_0_5a_16057:
                case ClientVersionBuild.V5_0_5b_16135:
                {
                    return Opcodes_5_0_5.Opcodes();
                }
                case ClientVersionBuild.V5_1_0_16309:
                case ClientVersionBuild.V5_1_0a_16357:
                {
                    return Opcodes_5_1_0.Opcodes();
                }
                case ClientVersionBuild.V5_2_0_16650:
                case ClientVersionBuild.V5_2_0_16669:
                case ClientVersionBuild.V5_2_0_16683:
                case ClientVersionBuild.V5_2_0_16685:
                case ClientVersionBuild.V5_2_0_16701:
                case ClientVersionBuild.V5_2_0_16709:
                case ClientVersionBuild.V5_2_0_16716:
                case ClientVersionBuild.V5_2_0_16733:
                case ClientVersionBuild.V5_2_0_16769:
                case ClientVersionBuild.V5_2_0_16826:
                {
                    return Opcodes_5_2_0.Opcodes();
                }
                case ClientVersionBuild.V5_3_0_16981:
                case ClientVersionBuild.V5_3_0_16983:
                case ClientVersionBuild.V5_3_0_16992:
                case ClientVersionBuild.V5_3_0_17055:
                case ClientVersionBuild.V5_3_0_17116:
                case ClientVersionBuild.V5_3_0_17128:
                {
                    return Opcodes_5_3_0.Opcodes();
                }
                case ClientVersionBuild.V5_4_1_17538:
                    return Opcodes_5_4_1.Opcodes();

                case ClientVersionBuild.V5_4_2_17658:
                case ClientVersionBuild.V5_4_2_17688:
                    return Opcodes_5_4_2.Opcodes();
                case ClientVersionBuild.V5_4_7_17930:
                {
                    return Opcodes_5_4_7.Opcodes();
                }
                default:
                {
                    return Opcodes_3_3_5.Opcodes();
                }
            }
        }
示例#28
0
 public static void LoadHandlers(Assembly asm, ClientVersionBuild build)
 {
     LoadHandlersInto(VersionHandlers, asm, build);
 }
        public static void SetVersion(ClientVersionBuild version)
        {
            if (Build == version)
                return;

            Build = version;
            _expansion = GetExpansion(version);

            Opcodes.InitializeOpcodeDictionary();
            Handler.ResetHandlers();
            UpdateFields.ResetUFDictionaries();
            try
            {
                var asm = Assembly.LoadFrom(string.Format(AppDomain.CurrentDomain.BaseDirectory + "/" + "WowPacketParserModule.{0}.dll", ClientVersion.VersionDefiningBuild));
                Trace.WriteLine(string.Format("Loading module WowPacketParserModule.{0}.dll", ClientVersion.VersionDefiningBuild));
                Handler.LoadHandlers(asm, ClientVersion.VersionDefiningBuild);
                UpdateFields.LoadUFDictionaries(asm, ClientVersion.VersionDefiningBuild);
            }
            catch (FileNotFoundException)
            {
                // No dll found, try to load the data in the executable itself
                UpdateFields.LoadUFDictionaries(Assembly.GetExecutingAssembly(), ClientVersion.Build);
            }
        }
示例#30
0
 public static BiDictionary<Opcode, int> GetOpcodeDictionary(ClientVersionBuild build, Direction direction)
 {
     switch (build)
     {
         case ClientVersionBuild.V2_4_3_8606:
         case ClientVersionBuild.V3_0_2_9056:
         case ClientVersionBuild.V3_0_3_9183:
         case ClientVersionBuild.V3_0_8_9464:
         case ClientVersionBuild.V3_0_8a_9506:
         case ClientVersionBuild.V3_0_9_9551:
         case ClientVersionBuild.V3_1_0_9767:
         case ClientVersionBuild.V3_1_1_9806:
         case ClientVersionBuild.V3_1_1a_9835:
         case ClientVersionBuild.V3_1_2_9901:
         case ClientVersionBuild.V3_1_3_9947:
         case ClientVersionBuild.V3_2_0_10192:
         case ClientVersionBuild.V3_2_0a_10314:
         case ClientVersionBuild.V3_2_2_10482:
         case ClientVersionBuild.V3_2_2a_10505:
         case ClientVersionBuild.V3_3_0_10958:
         case ClientVersionBuild.V3_3_0a_11159:
         case ClientVersionBuild.V3_3_3_11685:
         case ClientVersionBuild.V3_3_3a_11723:
         case ClientVersionBuild.V3_3_5a_12340:
         {
             return Opcodes_3_3_5.Opcodes(direction);
         }
         case ClientVersionBuild.V4_0_3_13329:
         {
             return Opcodes_4_0_3.Opcodes(direction);
         }
         case ClientVersionBuild.V4_0_6_13596:
         case ClientVersionBuild.V4_0_6a_13623:
         {
             return Opcodes_4_0_6.Opcodes(direction);
         }
         case ClientVersionBuild.V4_1_0_13914:
         case ClientVersionBuild.V4_1_0a_14007:
         {
             return Opcodes_4_1_0.Opcodes(direction);
         }
         case ClientVersionBuild.V4_2_0_14333:
         case ClientVersionBuild.V4_2_0a_14480:
         {
             return Opcodes_4_2_0.Opcodes(direction);
         }
         case ClientVersionBuild.V4_2_2_14545:
         {
             return Opcodes_4_2_2.Opcodes(direction);
         }
         case ClientVersionBuild.V4_3_0_15005:
         case ClientVersionBuild.V4_3_0a_15050:
         {
             return Opcodes_4_3_0.Opcodes(direction);
         }
         case ClientVersionBuild.V4_3_2_15211:
         {
             return Opcodes_4_3_2.Opcodes(direction);
         }
         case ClientVersionBuild.V4_3_3_15354:
         {
             return Opcodes_4_3_3.Opcodes(direction);
         }
         case ClientVersionBuild.V4_3_4_15595:
         {
             return Opcodes_4_3_4.Opcodes(direction);
         }
         case ClientVersionBuild.V5_0_4_16016:
         {
             return Opcodes_5_0_4.Opcodes(direction);
         }
         case ClientVersionBuild.V5_0_5_16048:
         case ClientVersionBuild.V5_0_5a_16057:
         case ClientVersionBuild.V5_0_5b_16135:
         {
             return Opcodes_5_0_5.Opcodes(direction);
         }
         case ClientVersionBuild.V5_1_0_16309:
         case ClientVersionBuild.V5_1_0a_16357:
         {
             return Opcodes_5_1_0.Opcodes(direction);
         }
         case ClientVersionBuild.V5_2_0_16650:
         case ClientVersionBuild.V5_2_0_16669:
         case ClientVersionBuild.V5_2_0_16683:
         case ClientVersionBuild.V5_2_0_16685:
         case ClientVersionBuild.V5_2_0_16701:
         case ClientVersionBuild.V5_2_0_16709:
         case ClientVersionBuild.V5_2_0_16716:
         case ClientVersionBuild.V5_2_0_16733:
         case ClientVersionBuild.V5_2_0_16769:
         case ClientVersionBuild.V5_2_0_16826:
         {
             return Opcodes_5_2_0.Opcodes(direction);
         }
         case ClientVersionBuild.V5_3_0_16981:
         case ClientVersionBuild.V5_3_0_16983:
         case ClientVersionBuild.V5_3_0_16992:
         case ClientVersionBuild.V5_3_0_17055:
         case ClientVersionBuild.V5_3_0_17116:
         case ClientVersionBuild.V5_3_0_17128:
         {
             return Opcodes_5_3_0.Opcodes(direction);
         }
         case ClientVersionBuild.V5_4_0_17359:
         case ClientVersionBuild.V5_4_0_17371:
         case ClientVersionBuild.V5_4_0_17399:
         {
             return Opcodes_5_4_0.Opcodes(direction);
         }
         case ClientVersionBuild.V5_4_1_17538:
         {
             return Opcodes_5_4_1.Opcodes(direction);
         }
         case ClientVersionBuild.V5_4_2_17658:
         case ClientVersionBuild.V5_4_2_17688:
         {
             return Opcodes_5_4_2.Opcodes(direction);
         }
         case ClientVersionBuild.V5_4_7_17898:
         case ClientVersionBuild.V5_4_7_17930:
         case ClientVersionBuild.V5_4_7_17956:
         case ClientVersionBuild.V5_4_7_18019:
         {
             return Opcodes_5_4_7.Opcodes(direction);
         }
         case ClientVersionBuild.V5_4_8_18291:
         case ClientVersionBuild.V5_4_8_18414:
         {
             return Opcodes_5_4_8.Opcodes(direction);
         }
         case ClientVersionBuild.V6_0_2_19033:
         case ClientVersionBuild.V6_0_2_19034:
         {
             return Opcodes_6_0_2.Opcodes(direction);
         }
         case ClientVersionBuild.V6_0_3_19103:
         case ClientVersionBuild.V6_0_3_19116:
         case ClientVersionBuild.V6_0_3_19243:
         case ClientVersionBuild.V6_0_3_19342:
         {
             return Opcodes_6_0_3.Opcodes(direction);
         }
         case ClientVersionBuild.V6_1_0_19678:
         case ClientVersionBuild.V6_1_0_19702:
         {
             return Opcodes_6_1_0.Opcodes(direction);
         }
         case ClientVersionBuild.V6_1_2_19802:
         case ClientVersionBuild.V6_1_2_19831:
         case ClientVersionBuild.V6_1_2_19865:
         {
             return Opcodes_6_1_2.Opcodes(direction);
         }
         case ClientVersionBuild.V6_2_0_20173:
         case ClientVersionBuild.V6_2_0_20182:
         case ClientVersionBuild.V6_2_0_20201:
         case ClientVersionBuild.V6_2_0_20216:
         case ClientVersionBuild.V6_2_0_20253:
         case ClientVersionBuild.V6_2_0_20338:
         {
             return Opcodes_6_2_0.Opcodes(direction);
         }
         case ClientVersionBuild.V6_2_2_20444:
         case ClientVersionBuild.V6_2_2a_20490:
         case ClientVersionBuild.V6_2_2a_20574:
         {
             return Opcodes_6_2_2.Opcodes(direction);
         }
         default:
         {
             return Opcodes_3_3_5.Opcodes(direction);
         }
     }
 }
示例#31
0
        private static void LoadHandlersInto(Dictionary<KeyValuePair<ClientVersionBuild, Opcode>, Action<Packet>> handlers, Assembly asm, ClientVersionBuild build)
        {
            var types = asm.GetTypes();
            foreach (Type type in types)
            {
                //if (type.Namespace != "WowPacketParser.Parsing.Parsers")
                //    continue;

                if (!type.IsAbstract)
                    continue;

                if (!type.IsPublic)
                    continue;

                var methods = type.GetMethods();

                foreach (MethodInfo method in methods)
                {
                    if (!method.IsPublic)
                        continue;

                    var attrs = (ParserAttribute[])method.GetCustomAttributes(typeof(ParserAttribute), false);

                    if (attrs.Length <= 0)
                        continue;

                    var parms = method.GetParameters();

                    if (parms.Length <= 0)
                        continue;

                    if (parms[0].ParameterType != typeof(Packet))
                        continue;

                    foreach (ParserAttribute attr in attrs)
                    {
                        Opcode opc = attr.Opcode;
                        if (opc == Opcode.NULL_OPCODE)
                            continue;

                        var key = new KeyValuePair<ClientVersionBuild, Opcode>(build, opc);

                        var del = (Action<Packet>)Delegate.CreateDelegate(typeof(Action<Packet>), method);

                        if (handlers.ContainsKey(key))
                        {
                            // @TODO This is a hack to keep things easy regarding declaration of opcodes.
                            // Ideally, we would split the opcodes into three different enums:
                            // ClientOpcodes, ServerOpcodes, BidirectionalOpcodes
                            // The first two are obvious as to what they would contain.
                            // The last one would be MSG_, UMSG_, TEST_, etc... opcodes
                            // However that's just too much pain to do considering the mess Blizzard does
                            // by naming their opcodes sometimes without following their own rules.
                            Direction direction = attr.Opcode.ToString()[0] == 'S' ? Direction.ServerToClient : Direction.ClientToServer;
                            // ReSharper disable once UseStringInterpolation
                            Trace.WriteLine(string.Format("Error: (Build: {0}) tried to overwrite delegate for opcode {1} ({2}); new handler: {3}; old handler: {4}",
                                ClientVersion.Build, Opcodes.GetOpcode(attr.Opcode, direction), attr.Opcode, del.Method, handlers[key].Method));
                            continue;
                        }

                        handlers[key] = del;
                    }
                }
            }
        }
示例#32
0
        public static BiDictionary <Opcode, int> GetOpcodeDictionary(ClientVersionBuild build, Direction direction)
        {
            switch (build)
            {
            case ClientVersionBuild.V1_12_1_5875:
            case ClientVersionBuild.V2_0_1_6180:
            case ClientVersionBuild.V2_0_3_6299:
            case ClientVersionBuild.V2_0_6_6337:
            case ClientVersionBuild.V2_1_0_6692:
            case ClientVersionBuild.V2_1_1_6739:
            case ClientVersionBuild.V2_1_2_6803:
            case ClientVersionBuild.V2_1_3_6898:
            case ClientVersionBuild.V2_2_0_7272:
            case ClientVersionBuild.V2_2_2_7318:
            case ClientVersionBuild.V2_2_3_7359:
            case ClientVersionBuild.V2_3_0_7561:
            case ClientVersionBuild.V2_3_2_7741:
            case ClientVersionBuild.V2_3_3_7799:
            case ClientVersionBuild.V2_4_0_8089:
            case ClientVersionBuild.V2_4_1_8125:
            case ClientVersionBuild.V2_4_2_8209:
            case ClientVersionBuild.V2_4_3_8606:
            case ClientVersionBuild.V3_0_2_9056:
            case ClientVersionBuild.V3_0_3_9183:
            case ClientVersionBuild.V3_0_8_9464:
            case ClientVersionBuild.V3_0_8a_9506:
            case ClientVersionBuild.V3_0_9_9551:
            case ClientVersionBuild.V3_1_0_9767:
            case ClientVersionBuild.V3_1_1_9806:
            case ClientVersionBuild.V3_1_1a_9835:
            case ClientVersionBuild.V3_1_2_9901:
            case ClientVersionBuild.V3_1_3_9947:
            case ClientVersionBuild.V3_2_0_10192:
            case ClientVersionBuild.V3_2_0a_10314:
            case ClientVersionBuild.V3_2_2_10482:
            case ClientVersionBuild.V3_2_2a_10505:
            case ClientVersionBuild.V3_3_0_10958:
            case ClientVersionBuild.V3_3_0a_11159:
            case ClientVersionBuild.V3_3_3_11685:
            case ClientVersionBuild.V3_3_3a_11723:
            case ClientVersionBuild.V3_3_5_12213:
            case ClientVersionBuild.V3_3_5a_12340:
            {
                return(Opcodes_3_3_5.Opcodes(direction));
            }

            case ClientVersionBuild.V4_0_1_13164:
            case ClientVersionBuild.V4_0_1a_13205:
            case ClientVersionBuild.V4_0_3_13329:
            {
                return(Opcodes_4_0_3.Opcodes(direction));
            }

            case ClientVersionBuild.V4_0_6_13596:
            case ClientVersionBuild.V4_0_6a_13623:
            {
                return(Opcodes_4_0_6.Opcodes(direction));
            }

            case ClientVersionBuild.V4_1_0_13914:
            case ClientVersionBuild.V4_1_0a_14007:
            {
                return(Opcodes_4_1_0.Opcodes(direction));
            }

            case ClientVersionBuild.V4_2_0_14333:
            case ClientVersionBuild.V4_2_0a_14480:
            {
                return(Opcodes_4_2_0.Opcodes(direction));
            }

            case ClientVersionBuild.V4_2_2_14545:
            {
                return(Opcodes_4_2_2.Opcodes(direction));
            }

            case ClientVersionBuild.V4_3_0_15005:
            case ClientVersionBuild.V4_3_0a_15050:
            {
                return(Opcodes_4_3_0.Opcodes(direction));
            }

            case ClientVersionBuild.V4_3_2_15211:
            {
                return(Opcodes_4_3_2.Opcodes(direction));
            }

            case ClientVersionBuild.V4_3_3_15354:
            {
                return(Opcodes_4_3_3.Opcodes(direction));
            }

            case ClientVersionBuild.V4_3_4_15595:
            {
                return(Opcodes_4_3_4.Opcodes(direction));
            }

            case ClientVersionBuild.V5_0_4_16016:
            {
                return(Opcodes_5_0_4.Opcodes(direction));
            }

            case ClientVersionBuild.V5_0_5_16048:
            case ClientVersionBuild.V5_0_5a_16057:
            case ClientVersionBuild.V5_0_5b_16135:
            {
                return(Opcodes_5_0_5.Opcodes(direction));
            }

            case ClientVersionBuild.V5_1_0_16309:
            case ClientVersionBuild.V5_1_0a_16357:
            {
                return(Opcodes_5_1_0.Opcodes(direction));
            }

            case ClientVersionBuild.V5_2_0_16650:
            case ClientVersionBuild.V5_2_0_16669:
            case ClientVersionBuild.V5_2_0_16683:
            case ClientVersionBuild.V5_2_0_16685:
            case ClientVersionBuild.V5_2_0_16701:
            case ClientVersionBuild.V5_2_0_16709:
            case ClientVersionBuild.V5_2_0_16716:
            case ClientVersionBuild.V5_2_0_16733:
            case ClientVersionBuild.V5_2_0_16769:
            case ClientVersionBuild.V5_2_0_16826:
            {
                return(Opcodes_5_2_0.Opcodes(direction));
            }

            case ClientVersionBuild.V5_3_0_16981:
            case ClientVersionBuild.V5_3_0_16983:
            case ClientVersionBuild.V5_3_0_16992:
            case ClientVersionBuild.V5_3_0_17055:
            case ClientVersionBuild.V5_3_0_17116:
            case ClientVersionBuild.V5_3_0_17128:
            {
                return(Opcodes_5_3_0.Opcodes(direction));
            }

            case ClientVersionBuild.V5_4_0_17359:
            case ClientVersionBuild.V5_4_0_17371:
            case ClientVersionBuild.V5_4_0_17399:
            {
                return(Opcodes_5_4_0.Opcodes(direction));
            }

            case ClientVersionBuild.V5_4_1_17538:
            {
                return(Opcodes_5_4_1.Opcodes(direction));
            }

            case ClientVersionBuild.V5_4_2_17658:
            case ClientVersionBuild.V5_4_2_17688:
            {
                return(Opcodes_5_4_2.Opcodes(direction));
            }

            case ClientVersionBuild.V5_4_7_17898:
            case ClientVersionBuild.V5_4_7_17930:
            case ClientVersionBuild.V5_4_7_17956:
            case ClientVersionBuild.V5_4_7_18019:
            {
                return(Opcodes_5_4_7.Opcodes(direction));
            }

            case ClientVersionBuild.V5_4_8_18291:
            case ClientVersionBuild.V5_4_8_18414:
            {
                return(Opcodes_5_4_8.Opcodes(direction));
            }

            case ClientVersionBuild.V6_0_2_19033:
            case ClientVersionBuild.V6_0_2_19034:
            {
                return(Opcodes_6_0_2.Opcodes(direction));
            }

            case ClientVersionBuild.V6_0_3_19103:
            case ClientVersionBuild.V6_0_3_19116:
            case ClientVersionBuild.V6_0_3_19243:
            case ClientVersionBuild.V6_0_3_19342:
            {
                return(Opcodes_6_0_3.Opcodes(direction));
            }

            case ClientVersionBuild.V6_1_0_19678:
            case ClientVersionBuild.V6_1_0_19702:
            {
                return(Opcodes_6_1_0.Opcodes(direction));
            }

            case ClientVersionBuild.V6_1_2_19802:
            case ClientVersionBuild.V6_1_2_19831:
            case ClientVersionBuild.V6_1_2_19865:
            {
                return(Opcodes_6_1_2.Opcodes(direction));
            }

            case ClientVersionBuild.V6_2_0_20173:
            case ClientVersionBuild.V6_2_0_20182:
            case ClientVersionBuild.V6_2_0_20201:
            case ClientVersionBuild.V6_2_0_20216:
            case ClientVersionBuild.V6_2_0_20253:
            case ClientVersionBuild.V6_2_0_20338:
            {
                return(Opcodes_6_2_0.Opcodes(direction));
            }

            case ClientVersionBuild.V6_2_2_20444:
            case ClientVersionBuild.V6_2_2a_20490:
            case ClientVersionBuild.V6_2_2a_20574:
            {
                return(Opcodes_6_2_2.Opcodes(direction));
            }

            case ClientVersionBuild.V6_2_3_20726:
            case ClientVersionBuild.V6_2_3_20779:
            case ClientVersionBuild.V6_2_3_20886:
            {
                return(Opcodes_6_2_3.Opcodes(direction));
            }

            case ClientVersionBuild.V6_2_4_21315:
            case ClientVersionBuild.V6_2_4_21336:
            case ClientVersionBuild.V6_2_4_21343:
            case ClientVersionBuild.V6_2_4_21345:
            case ClientVersionBuild.V6_2_4_21348:
            case ClientVersionBuild.V6_2_4_21355:
            case ClientVersionBuild.V6_2_4_21463:
            case ClientVersionBuild.V6_2_4_21676:
            case ClientVersionBuild.V6_2_4_21742:
            {
                return(Opcodes_6_2_4.Opcodes(direction));
            }

            case ClientVersionBuild.V7_0_3_22248:
            case ClientVersionBuild.V7_0_3_22280:
            case ClientVersionBuild.V7_0_3_22289:
            case ClientVersionBuild.V7_0_3_22293:
            case ClientVersionBuild.V7_0_3_22345:
            case ClientVersionBuild.V7_0_3_22396:
            case ClientVersionBuild.V7_0_3_22410:
            case ClientVersionBuild.V7_0_3_22423:
            case ClientVersionBuild.V7_0_3_22445:
            case ClientVersionBuild.V7_0_3_22498:
            case ClientVersionBuild.V7_0_3_22522:
            case ClientVersionBuild.V7_0_3_22566:
            case ClientVersionBuild.V7_0_3_22594:
            case ClientVersionBuild.V7_0_3_22624:
            case ClientVersionBuild.V7_0_3_22747:
            case ClientVersionBuild.V7_0_3_22810:
            {
                return(Opcodes_7_0_3.Opcodes(direction));
            }

            case ClientVersionBuild.V7_1_0_22900:
            case ClientVersionBuild.V7_1_0_22908:
            case ClientVersionBuild.V7_1_0_22950:
            case ClientVersionBuild.V7_1_0_22989:
            case ClientVersionBuild.V7_1_0_22995:
            case ClientVersionBuild.V7_1_0_22996:
            case ClientVersionBuild.V7_1_0_23171:
            case ClientVersionBuild.V7_1_0_23222:
            {
                return(Opcodes_7_1_0.Opcodes(direction));
            }

            case ClientVersionBuild.V7_1_5_23360:
            case ClientVersionBuild.V7_1_5_23420:
            {
                return(Opcodes_7_1_5.Opcodes(direction));
            }

            case ClientVersionBuild.V7_2_0_23706:
            case ClientVersionBuild.V7_2_0_23826:
            case ClientVersionBuild.V7_2_0_23835:
            case ClientVersionBuild.V7_2_0_23836:
            case ClientVersionBuild.V7_2_0_23846:
            case ClientVersionBuild.V7_2_0_23852:
            case ClientVersionBuild.V7_2_0_23857:
            case ClientVersionBuild.V7_2_0_23877:
            case ClientVersionBuild.V7_2_0_23911:
            case ClientVersionBuild.V7_2_0_23937:
            case ClientVersionBuild.V7_2_0_24015:
            {
                return(Opcodes_7_2_0.Opcodes(direction));
            }

            case ClientVersionBuild.V7_2_5_24330:
            case ClientVersionBuild.V7_2_5_24367:
            case ClientVersionBuild.V7_2_5_24414:
            case ClientVersionBuild.V7_2_5_24415:
            case ClientVersionBuild.V7_2_5_24430:
            case ClientVersionBuild.V7_2_5_24461:
            case ClientVersionBuild.V7_2_5_24742:
            {
                return(Opcodes_7_2_5.Opcodes(direction));
            }

            case ClientVersionBuild.V7_3_0_24920:
            case ClientVersionBuild.V7_3_0_24931:
            case ClientVersionBuild.V7_3_0_24956:
            case ClientVersionBuild.V7_3_0_24970:
            case ClientVersionBuild.V7_3_0_24974:
            case ClientVersionBuild.V7_3_0_25021:
            case ClientVersionBuild.V7_3_0_25195:
            {
                return(Opcodes_7_3_0.Opcodes(direction));
            }

            case ClientVersionBuild.V7_3_2_25383:
            case ClientVersionBuild.V7_3_2_25442:
            case ClientVersionBuild.V7_3_2_25455:
            case ClientVersionBuild.V7_3_2_25477:
            case ClientVersionBuild.V7_3_2_25480:
            case ClientVersionBuild.V7_3_2_25497:
            case ClientVersionBuild.V7_3_2_25549:
            {
                return(Opcodes_7_3_2.Opcodes(direction));
            }

            case ClientVersionBuild.V7_3_5_25848:
            case ClientVersionBuild.V7_3_5_25860:
            case ClientVersionBuild.V7_3_5_25864:
            case ClientVersionBuild.V7_3_5_25875:
            case ClientVersionBuild.V7_3_5_25881:
            case ClientVersionBuild.V7_3_5_25901:
            case ClientVersionBuild.V7_3_5_25928:
            case ClientVersionBuild.V7_3_5_25937:
            case ClientVersionBuild.V7_3_5_25944:
            case ClientVersionBuild.V7_3_5_25946:
            case ClientVersionBuild.V7_3_5_25950:
            case ClientVersionBuild.V7_3_5_25961:
            case ClientVersionBuild.V7_3_5_25996:
            case ClientVersionBuild.V7_3_5_26124:
            case ClientVersionBuild.V7_3_5_26365:
            case ClientVersionBuild.V7_3_5_26654:
            case ClientVersionBuild.V7_3_5_26755:
            case ClientVersionBuild.V7_3_5_26822:
            case ClientVersionBuild.V7_3_5_26899:
            case ClientVersionBuild.V7_3_5_26972:
            {
                return(Opcodes_7_3_5.Opcodes(direction));
            }

            case ClientVersionBuild.V8_0_1_27101:
            case ClientVersionBuild.V8_0_1_27144:
            case ClientVersionBuild.V8_0_1_27165:
            case ClientVersionBuild.V8_0_1_27178:
            case ClientVersionBuild.V8_0_1_27219:
            case ClientVersionBuild.V8_0_1_27291:
            case ClientVersionBuild.V8_0_1_27326:
            case ClientVersionBuild.V8_0_1_27355:
            case ClientVersionBuild.V8_0_1_27356:
            case ClientVersionBuild.V8_0_1_27366:
            case ClientVersionBuild.V8_0_1_27377:
            case ClientVersionBuild.V8_0_1_27404:
            case ClientVersionBuild.V8_0_1_27481:
            case ClientVersionBuild.V8_0_1_27547:
            case ClientVersionBuild.V8_0_1_27602:
            case ClientVersionBuild.V8_0_1_27791:
            case ClientVersionBuild.V8_0_1_27843:
            case ClientVersionBuild.V8_0_1_27980:
            case ClientVersionBuild.V8_0_1_28153:
            {
                return(Opcodes_8_0_1.Opcodes(direction));
            }

            case ClientVersionBuild.V8_1_0_28724:
            case ClientVersionBuild.V8_1_0_28768:
            case ClientVersionBuild.V8_1_0_28807:
            case ClientVersionBuild.V8_1_0_28822:
            case ClientVersionBuild.V8_1_0_28833:
            case ClientVersionBuild.V8_1_0_29088:
            case ClientVersionBuild.V8_1_0_29139:
            case ClientVersionBuild.V8_1_0_29235:
            case ClientVersionBuild.V8_1_0_29285:
            case ClientVersionBuild.V8_1_0_29297:
            case ClientVersionBuild.V8_1_0_29482:
            case ClientVersionBuild.V8_1_0_29600:
            case ClientVersionBuild.V8_1_0_29621:
            {
                return(Opcodes_8_1_0.Opcodes(direction));
            }

            case ClientVersionBuild.V8_1_5_29683:
            case ClientVersionBuild.V8_1_5_29701:
            case ClientVersionBuild.V8_1_5_29704:
            case ClientVersionBuild.V8_1_5_29705:
            case ClientVersionBuild.V8_1_5_29718:
            case ClientVersionBuild.V8_1_5_29732:
            case ClientVersionBuild.V8_1_5_29737:
            case ClientVersionBuild.V8_1_5_29814:
            case ClientVersionBuild.V8_1_5_29869:
            case ClientVersionBuild.V8_1_5_29896:
            case ClientVersionBuild.V8_1_5_29981:
            case ClientVersionBuild.V8_1_5_30477:
            case ClientVersionBuild.V8_1_5_30706:
            {
                return(Opcodes_8_1_5.Opcodes(direction));
            }

            case ClientVersionBuild.V8_2_0_30898:
            case ClientVersionBuild.V8_2_0_30918:
            case ClientVersionBuild.V8_2_0_30920:
            case ClientVersionBuild.V8_2_0_30948:
            case ClientVersionBuild.V8_2_0_30993:
            case ClientVersionBuild.V8_2_0_31229:
            case ClientVersionBuild.V8_2_0_31429:
            {
                return(Opcodes_8_2_0.Opcodes(direction));
            }

            default:
            {
                return(Opcodes_3_3_5.Opcodes(direction));
            }
            }
        }
示例#33
0
 public static bool AddedInVersion(ClientVersionBuild build)
 {
     return(_build >= build);
 }
示例#34
0
        public static BiDictionary <Opcode, int> GetOpcodeDictionary(ClientVersionBuild build, Direction direction)
        {
            switch (GetOpcodeDefiningBuild(build))
            {
            case ClientVersionBuild.V3_3_5a_12340:
                return(Opcodes_3_3_5.Opcodes(direction));

            case ClientVersionBuild.V4_0_3_13329:
                return(Opcodes_4_0_3.Opcodes(direction));

            case ClientVersionBuild.V4_0_6_13596:
                return(Opcodes_4_0_6.Opcodes(direction));

            case ClientVersionBuild.V4_1_0_13914:
                return(Opcodes_4_1_0.Opcodes(direction));

            case ClientVersionBuild.V4_2_0_14333:
                return(Opcodes_4_2_0.Opcodes(direction));

            case ClientVersionBuild.V4_2_2_14545:
                return(Opcodes_4_2_2.Opcodes(direction));

            case ClientVersionBuild.V4_3_0_15005:
                return(Opcodes_4_3_0.Opcodes(direction));

            case ClientVersionBuild.V4_3_2_15211:
                return(Opcodes_4_3_2.Opcodes(direction));

            case ClientVersionBuild.V4_3_3_15354:
                return(Opcodes_4_3_3.Opcodes(direction));

            case ClientVersionBuild.V4_3_4_15595:
                return(Opcodes_4_3_4.Opcodes(direction));

            case ClientVersionBuild.V5_0_4_16016:
                return(Opcodes_5_0_4.Opcodes(direction));

            case ClientVersionBuild.V5_0_5_16048:
                return(Opcodes_5_0_5.Opcodes(direction));

            case ClientVersionBuild.V5_1_0_16309:
                return(Opcodes_5_1_0.Opcodes(direction));

            case ClientVersionBuild.V5_2_0_16650:
                return(Opcodes_5_2_0.Opcodes(direction));

            case ClientVersionBuild.V5_3_0_16981:
                return(Opcodes_5_3_0.Opcodes(direction));

            case ClientVersionBuild.V5_4_0_17359:
                return(Opcodes_5_4_0.Opcodes(direction));

            case ClientVersionBuild.V5_4_1_17538:
                return(Opcodes_5_4_1.Opcodes(direction));

            case ClientVersionBuild.V5_4_2_17658:
                return(Opcodes_5_4_2.Opcodes(direction));

            case ClientVersionBuild.V5_4_7_17898:
                return(Opcodes_5_4_7.Opcodes(direction));

            case ClientVersionBuild.V5_4_8_18291:
                return(Opcodes_5_4_8.Opcodes(direction));

            case ClientVersionBuild.V6_0_2_19033:
                return(Opcodes_6_0_2.Opcodes(direction));

            case ClientVersionBuild.V6_0_3_19103:
                return(Opcodes_6_0_3.Opcodes(direction));

            case ClientVersionBuild.V6_1_0_19678:
                return(Opcodes_6_1_0.Opcodes(direction));

            case ClientVersionBuild.V6_1_2_19802:
                return(Opcodes_6_1_2.Opcodes(direction));

            case ClientVersionBuild.V6_2_0_20173:
                return(Opcodes_6_2_0.Opcodes(direction));

            case ClientVersionBuild.V6_2_2_20444:
                return(Opcodes_6_2_2.Opcodes(direction));

            case ClientVersionBuild.V6_2_3_20726:
                return(Opcodes_6_2_3.Opcodes(direction));

            case ClientVersionBuild.V6_2_4_21315:
                return(Opcodes_6_2_4.Opcodes(direction));

            case ClientVersionBuild.V7_0_3_22248:
                return(Opcodes_7_0_3.Opcodes(direction));

            case ClientVersionBuild.V7_1_0_22900:
                return(Opcodes_7_1_0.Opcodes(direction));

            case ClientVersionBuild.V7_1_5_23360:
                return(Opcodes_7_1_5.Opcodes(direction));

            case ClientVersionBuild.V7_2_0_23706:
                return(Opcodes_7_2_0.Opcodes(direction));

            case ClientVersionBuild.V7_2_5_24330:
                return(Opcodes_7_2_5.Opcodes(direction));

            case ClientVersionBuild.V7_3_0_24920:
                return(Opcodes_7_3_0.Opcodes(direction));

            case ClientVersionBuild.V7_3_2_25383:
                return(Opcodes_7_3_2.Opcodes(direction));

            case ClientVersionBuild.V7_3_5_25848:
                return(Opcodes_7_3_5.Opcodes(direction));

            case ClientVersionBuild.V8_0_1_27101:
                return(Opcodes_8_0_1.Opcodes(direction));

            case ClientVersionBuild.V8_1_0_28724:
                return(Opcodes_8_1_0.Opcodes(direction));

            case ClientVersionBuild.V8_1_5_29683:
                return(Opcodes_8_1_5.Opcodes(direction));

            case ClientVersionBuild.V8_2_0_30898:
                return(Opcodes_8_2_0.Opcodes(direction));

            case ClientVersionBuild.V8_2_5_31921:
                return(Opcodes_8_2_5.Opcodes(direction));

            case ClientVersionBuild.V8_3_0_33062:
                return(Opcodes_8_3_0.Opcodes(direction));

            case ClientVersionBuild.V8_3_7_35249:
                return(Opcodes_8_3_7.Opcodes(direction));

            case ClientVersionBuild.V9_0_1_36216:
                return(Opcodes_9_0_1.Opcodes(direction));

            case ClientVersionBuild.V9_0_2_36639:
                return(Opcodes_9_0_2.Opcodes(direction));

            case ClientVersionBuild.V1_13_2_31446:
                return(Opcodes_1_13_2.Opcodes(direction));

            case ClientVersionBuild.V1_13_4_33598:
                return(Opcodes_1_13_4.Opcodes(direction));

            case ClientVersionBuild.v1_13_5_34713:
                return(Opcodes_1_13_5.Opcodes(direction));

            case ClientVersionBuild.V1_13_6_36714:
                return(Opcodes_1_13_6.Opcodes(direction));

            default:
                return(Opcodes_3_3_5.Opcodes(direction));
            }
        }
示例#35
0
 public static BiDictionary<Opcode, int> GetOpcodeDictionary(ClientVersionBuild build, Direction direction)
 {
     switch (build)
     {
         case ClientVersionBuild.V1_12_1_5875:
         case ClientVersionBuild.V2_0_1_6180:
         case ClientVersionBuild.V2_0_3_6299:
         case ClientVersionBuild.V2_0_6_6337:
         case ClientVersionBuild.V2_1_0_6692:
         case ClientVersionBuild.V2_1_1_6739:
         case ClientVersionBuild.V2_1_2_6803:
         case ClientVersionBuild.V2_1_3_6898:
         case ClientVersionBuild.V2_2_0_7272:
         case ClientVersionBuild.V2_2_2_7318:
         case ClientVersionBuild.V2_2_3_7359:
         case ClientVersionBuild.V2_3_0_7561:
         case ClientVersionBuild.V2_3_2_7741:
         case ClientVersionBuild.V2_3_3_7799:
         case ClientVersionBuild.V2_4_0_8089:
         case ClientVersionBuild.V2_4_1_8125:
         case ClientVersionBuild.V2_4_2_8209:
         case ClientVersionBuild.V2_4_3_8606:
         case ClientVersionBuild.V3_0_2_9056:
         case ClientVersionBuild.V3_0_3_9183:
         case ClientVersionBuild.V3_0_8_9464:
         case ClientVersionBuild.V3_0_8a_9506:
         case ClientVersionBuild.V3_0_9_9551:
         case ClientVersionBuild.V3_1_0_9767:
         case ClientVersionBuild.V3_1_1_9806:
         case ClientVersionBuild.V3_1_1a_9835:
         case ClientVersionBuild.V3_1_2_9901:
         case ClientVersionBuild.V3_1_3_9947:
         case ClientVersionBuild.V3_2_0_10192:
         case ClientVersionBuild.V3_2_0a_10314:
         case ClientVersionBuild.V3_2_2_10482:
         case ClientVersionBuild.V3_2_2a_10505:
         case ClientVersionBuild.V3_3_0_10958:
         case ClientVersionBuild.V3_3_0a_11159:
         case ClientVersionBuild.V3_3_3_11685:
         case ClientVersionBuild.V3_3_3a_11723:
         case ClientVersionBuild.V3_3_5_12213:
         case ClientVersionBuild.V3_3_5a_12340:
         {
             return Opcodes_3_3_5.Opcodes(direction);
         }
         case ClientVersionBuild.V4_0_1_13164:
         case ClientVersionBuild.V4_0_1a_13205:
         case ClientVersionBuild.V4_0_3_13329:
         {
             return Opcodes_4_0_3.Opcodes(direction);
         }
         case ClientVersionBuild.V4_0_6_13596:
         case ClientVersionBuild.V4_0_6a_13623:
         {
             return Opcodes_4_0_6.Opcodes(direction);
         }
         case ClientVersionBuild.V4_1_0_13914:
         case ClientVersionBuild.V4_1_0a_14007:
         {
             return Opcodes_4_1_0.Opcodes(direction);
         }
         case ClientVersionBuild.V4_2_0_14333:
         case ClientVersionBuild.V4_2_0a_14480:
         {
             return Opcodes_4_2_0.Opcodes(direction);
         }
         case ClientVersionBuild.V4_2_2_14545:
         {
             return Opcodes_4_2_2.Opcodes(direction);
         }
         case ClientVersionBuild.V4_3_0_15005:
         case ClientVersionBuild.V4_3_0a_15050:
         {
             return Opcodes_4_3_0.Opcodes(direction);
         }
         case ClientVersionBuild.V4_3_2_15211:
         {
             return Opcodes_4_3_2.Opcodes(direction);
         }
         case ClientVersionBuild.V4_3_3_15354:
         {
             return Opcodes_4_3_3.Opcodes(direction);
         }
         case ClientVersionBuild.V4_3_4_15595:
         {
             return Opcodes_4_3_4.Opcodes(direction);
         }
         case ClientVersionBuild.V5_0_4_16016:
         {
             return Opcodes_5_0_4.Opcodes(direction);
         }
         case ClientVersionBuild.V5_0_5_16048:
         case ClientVersionBuild.V5_0_5a_16057:
         case ClientVersionBuild.V5_0_5b_16135:
         {
             return Opcodes_5_0_5.Opcodes(direction);
         }
         case ClientVersionBuild.V5_1_0_16309:
         case ClientVersionBuild.V5_1_0a_16357:
         {
             return Opcodes_5_1_0.Opcodes(direction);
         }
         case ClientVersionBuild.V5_2_0_16650:
         case ClientVersionBuild.V5_2_0_16669:
         case ClientVersionBuild.V5_2_0_16683:
         case ClientVersionBuild.V5_2_0_16685:
         case ClientVersionBuild.V5_2_0_16701:
         case ClientVersionBuild.V5_2_0_16709:
         case ClientVersionBuild.V5_2_0_16716:
         case ClientVersionBuild.V5_2_0_16733:
         case ClientVersionBuild.V5_2_0_16769:
         case ClientVersionBuild.V5_2_0_16826:
         {
             return Opcodes_5_2_0.Opcodes(direction);
         }
         case ClientVersionBuild.V5_3_0_16981:
         case ClientVersionBuild.V5_3_0_16983:
         case ClientVersionBuild.V5_3_0_16992:
         case ClientVersionBuild.V5_3_0_17055:
         case ClientVersionBuild.V5_3_0_17116:
         case ClientVersionBuild.V5_3_0_17128:
         {
             return Opcodes_5_3_0.Opcodes(direction);
         }
         case ClientVersionBuild.V5_4_0_17359:
         case ClientVersionBuild.V5_4_0_17371:
         case ClientVersionBuild.V5_4_0_17399:
         {
             return Opcodes_5_4_0.Opcodes(direction);
         }
         case ClientVersionBuild.V5_4_1_17538:
         {
             return Opcodes_5_4_1.Opcodes(direction);
         }
         case ClientVersionBuild.V5_4_2_17658:
         case ClientVersionBuild.V5_4_2_17688:
         {
             return Opcodes_5_4_2.Opcodes(direction);
         }
         case ClientVersionBuild.V5_4_7_17898:
         case ClientVersionBuild.V5_4_7_17930:
         case ClientVersionBuild.V5_4_7_17956:
         case ClientVersionBuild.V5_4_7_18019:
         {
             return Opcodes_5_4_7.Opcodes(direction);
         }
         case ClientVersionBuild.V5_4_8_18291:
         case ClientVersionBuild.V5_4_8_18414:
         {
             return Opcodes_5_4_8a.Opcodes(direction);
         }
         case ClientVersionBuild.V6_0_2_19033:
         case ClientVersionBuild.V6_0_2_19034:
         {
             return Opcodes_6_0_2.Opcodes(direction);
         }
         case ClientVersionBuild.V6_0_3_19103:
         case ClientVersionBuild.V6_0_3_19116:
         case ClientVersionBuild.V6_0_3_19243:
         case ClientVersionBuild.V6_0_3_19342:
         {
             return Opcodes_6_0_3.Opcodes(direction);
         }
         case ClientVersionBuild.V6_1_0_19678:
         case ClientVersionBuild.V6_1_0_19702:
         {
             return Opcodes_6_1_0.Opcodes(direction);
         }
         case ClientVersionBuild.V6_1_2_19793:
         case ClientVersionBuild.V6_1_2_19802:
         case ClientVersionBuild.V6_1_2_19831:
         case ClientVersionBuild.V6_1_2_19865:
         {
             return Opcodes_6_1_2.Opcodes(direction);
         }
         case ClientVersionBuild.V6_2_0_20173:
         case ClientVersionBuild.V6_2_0_20182:
         case ClientVersionBuild.V6_2_0_20201:
         case ClientVersionBuild.V6_2_0_20216:
         case ClientVersionBuild.V6_2_0_20253:
         case ClientVersionBuild.V6_2_0_20338:
         {
             return Opcodes_6_2_0.Opcodes(direction);
         }
         case ClientVersionBuild.V6_2_2_20444:
         case ClientVersionBuild.V6_2_2a_20490:
         case ClientVersionBuild.V6_2_2a_20574:
         {
             return Opcodes_6_2_2.Opcodes(direction);
         }
         case ClientVersionBuild.V6_2_3_20726:
         case ClientVersionBuild.V6_2_3_20779:
         case ClientVersionBuild.V6_2_3_20886:
         {
             return Opcodes_6_2_3.Opcodes(direction);
         }
         case ClientVersionBuild.V6_2_4_21315:
         case ClientVersionBuild.V6_2_4_21336:
         case ClientVersionBuild.V6_2_4_21343:
         case ClientVersionBuild.V6_2_4_21345:
         case ClientVersionBuild.V6_2_4_21348:
         case ClientVersionBuild.V6_2_4_21355:
         case ClientVersionBuild.V6_2_4_21463:
         case ClientVersionBuild.V6_2_4_21676:
         case ClientVersionBuild.V6_2_4_21742:
         {
             return Opcodes_6_2_4.Opcodes(direction);
         }
         case ClientVersionBuild.V7_0_3_22248:
         case ClientVersionBuild.V7_0_3_22280:
         case ClientVersionBuild.V7_0_3_22289:
         case ClientVersionBuild.V7_0_3_22293:
         case ClientVersionBuild.V7_0_3_22345:
         case ClientVersionBuild.V7_0_3_22396:
         case ClientVersionBuild.V7_0_3_22410:
         case ClientVersionBuild.V7_0_3_22423:
         case ClientVersionBuild.V7_0_3_22445:
         case ClientVersionBuild.V7_0_3_22498:
         case ClientVersionBuild.V7_0_3_22522:
         case ClientVersionBuild.V7_0_3_22566:
         case ClientVersionBuild.V7_0_3_22594:
         case ClientVersionBuild.V7_0_3_22624:
         case ClientVersionBuild.V7_0_3_22747:
         case ClientVersionBuild.V7_0_3_22810:
         {
             return Opcodes_7_0_3.Opcodes(direction);
         }
         case ClientVersionBuild.V7_1_0_22900:
         case ClientVersionBuild.V7_1_0_22908:
         {
             return Opcodes_7_1_0.Opcodes(direction);
         }
         default:
         {
             return Opcodes_3_3_5.Opcodes(direction);
         }
     }
 }
 public HotfixVersionAttribute(ClientVersionBuild build, bool removedInVersion)
 {
     Build = build;
     RemovedInVersion = removedInVersion;
 }
 public ParserAttribute(int opcode, ClientVersionBuild addedInVersion)
 {
     if (ClientVersion.AddedInVersion(addedInVersion))
         Opcodes.GetOpcode(opcode);
 }
 // [addedInVersion, +inf[
 public ParserAttribute(Opcode opcode, ClientVersionBuild addedInVersion)
 {
     if (ClientVersion.AddedInVersion(addedInVersion))
         Opcode = opcode;
 }
示例#39
0
 public static int GetOpcode(Opcode opcode, ClientVersionBuild versionBuild)
 {
     int opcodeId;
     GetOpcodeDictionary(versionBuild).TryGetValue(opcode, out opcodeId);
     return opcodeId;
 }
示例#40
0
 private static int GetOpcode(Opcode opcode, ClientVersionBuild build)
 {
     int opcodeId;
     GetOpcodeDictionary(build).TryGetValue(opcode, out opcodeId);
     return opcodeId;
 }
示例#41
0
 public static bool InVersion(ClientVersionBuild build1, ClientVersionBuild build2)
 {
     return(AddedInVersion(build1) && RemovedInVersion(build2));
 }
示例#42
0
        public static void SetVersion(ClientVersionBuild version)
        {
            if (Build == version)
                return;

            Build = version;
            _expansion = GetExpansion(version);

            Opcodes.InitializeOpcodeDictionary();
            Handler.ResetHandlers();
            UpdateFields.ResetUFDictionaries();
            try
            {
                var asm = Assembly.Load($"WowPacketParserModule.{VersionDefiningBuild}");
                Trace.WriteLine($"Loading module WowPacketParserModule.{VersionDefiningBuild}.dll");

                Handler.LoadHandlers(asm, VersionDefiningBuild);

                // This is a huge hack to handle the abnormal situation that appeared with builds 6.0 and 6.1 having mostly the same packet structures
                if (!UpdateFields.LoadUFDictionaries(asm, version))
                    UpdateFields.LoadUFDictionaries(asm, VersionDefiningBuild);
            }
            catch (FileNotFoundException)
            {
                // No dll found, try to load the data in the executable itself
                UpdateFields.LoadUFDictionaries(Assembly.GetExecutingAssembly(), Build);
            }
        }
        private static ClientType GetExpansion(ClientVersionBuild build)
        {
            if (build >= ClientVersionBuild.V5_0_4_16016)
                return ClientType.MistsOfPandaria;
            if (build >= ClientVersionBuild.V4_0_3_13329)
                return ClientType.Cataclysm;
            if (build >= ClientVersionBuild.V3_0_3_9183)
                return ClientType.WrathOfTheLichKing;
            if (build >= ClientVersionBuild.V2_0_3_6299)
                return ClientType.TheBurningCrusade;

            return ClientType.WorldOfWarcraft;
        }
示例#44
0
        private static string GetUpdateFieldDictionaryBuildName(ClientVersionBuild build)
        {
            switch (build)
            {
            case ClientVersionBuild.V1_12_1_5875:
            case ClientVersionBuild.V2_0_1_6180:
            case ClientVersionBuild.V2_0_3_6299:
            case ClientVersionBuild.V2_0_6_6337:
            case ClientVersionBuild.V2_1_0_6692:
            case ClientVersionBuild.V2_1_1_6739:
            case ClientVersionBuild.V2_1_2_6803:
            case ClientVersionBuild.V2_1_3_6898:
            case ClientVersionBuild.V2_2_0_7272:
            case ClientVersionBuild.V2_2_2_7318:
            case ClientVersionBuild.V2_2_3_7359:
            case ClientVersionBuild.V2_3_0_7561:
            case ClientVersionBuild.V2_3_2_7741:
            case ClientVersionBuild.V2_3_3_7799:
            case ClientVersionBuild.V2_4_0_8089:
            case ClientVersionBuild.V2_4_1_8125:
            case ClientVersionBuild.V2_4_2_8209:
            case ClientVersionBuild.V2_4_3_8606:
                return("V2_4_3_8606");

            case ClientVersionBuild.V3_0_2_9056:
            case ClientVersionBuild.V3_0_3_9183:
            case ClientVersionBuild.V3_0_8_9464:
            case ClientVersionBuild.V3_0_8a_9506:
            case ClientVersionBuild.V3_0_9_9551:
                return("V3_0_9_9551");

            case ClientVersionBuild.V3_1_0_9767:
            case ClientVersionBuild.V3_1_1_9806:
            case ClientVersionBuild.V3_1_1a_9835:
            case ClientVersionBuild.V3_1_2_9901:
            case ClientVersionBuild.V3_1_3_9947:
            case ClientVersionBuild.V3_2_0_10192:
            case ClientVersionBuild.V3_2_0a_10314:
            case ClientVersionBuild.V3_2_2_10482:
            case ClientVersionBuild.V3_2_2a_10505:
            case ClientVersionBuild.V3_3_0_10958:
            case ClientVersionBuild.V3_3_0a_11159:
            {
                return("V3_3_0_10958");
            }

            case ClientVersionBuild.V3_3_3_11685:
            case ClientVersionBuild.V3_3_3a_11723:
            case ClientVersionBuild.V3_3_5_12213:
            case ClientVersionBuild.V3_3_5a_12340:
            {
                return("V3_3_5a_12340");
            }

            case ClientVersionBuild.V4_0_1_13164:
            case ClientVersionBuild.V4_0_1a_13205:
            case ClientVersionBuild.V4_0_3_13329:
            {
                return("V4_0_3_13329");
            }

            case ClientVersionBuild.V4_0_6_13596:
            case ClientVersionBuild.V4_0_6a_13623:
            {
                return("V4_0_6_13596");
            }

            case ClientVersionBuild.V4_1_0_13914:
            case ClientVersionBuild.V4_1_0a_14007:
            {
                return("V4_1_0_13914");
            }

            case ClientVersionBuild.V4_2_0_14333:
            case ClientVersionBuild.V4_2_0a_14480:
            {
                return("V4_2_0_14480");
            }

            case ClientVersionBuild.V4_2_2_14545:
            {
                return("V4_2_2_14545");
            }

            case ClientVersionBuild.V4_3_0_15005:
            case ClientVersionBuild.V4_3_0a_15050:
            {
                return("V4_3_0_15005");
            }

            case ClientVersionBuild.V4_3_2_15211:
            {
                return("V4_3_2_15211");
            }

            case ClientVersionBuild.V4_3_3_15354:
            {
                return("V4_3_3_15354");
            }

            case ClientVersionBuild.V4_3_4_15595:
            {
                return("V4_3_4_15595");
            }

            case ClientVersionBuild.V5_0_4_16016:
            {
                return("V5_0_4_16016");
            }

            case ClientVersionBuild.V5_0_5_16048:
            case ClientVersionBuild.V5_0_5a_16057:
            case ClientVersionBuild.V5_0_5b_16135:
            {
                return("V5_0_5_16048");
            }

            case ClientVersionBuild.V5_1_0_16309:
            case ClientVersionBuild.V5_1_0a_16357:
            {
                return("V5_1_0_16309");
            }

            case ClientVersionBuild.V5_2_0_16650:
            case ClientVersionBuild.V5_2_0_16669:
            case ClientVersionBuild.V5_2_0_16683:
            case ClientVersionBuild.V5_2_0_16685:
            case ClientVersionBuild.V5_2_0_16701:
            case ClientVersionBuild.V5_2_0_16709:
            case ClientVersionBuild.V5_2_0_16716:
            case ClientVersionBuild.V5_2_0_16733:
            case ClientVersionBuild.V5_2_0_16769:
            case ClientVersionBuild.V5_2_0_16826:
            {
                return("V5_2_0_16650");
            }

            case ClientVersionBuild.V5_3_0_16981:
            case ClientVersionBuild.V5_3_0_16983:
            case ClientVersionBuild.V5_3_0_16992:
            case ClientVersionBuild.V5_3_0_17055:
            case ClientVersionBuild.V5_3_0_17116:
            case ClientVersionBuild.V5_3_0_17128:
            {
                return("V5_3_0_16981");
            }

            case ClientVersionBuild.V5_4_0_17359:
            case ClientVersionBuild.V5_4_0_17371:
            case ClientVersionBuild.V5_4_0_17399:
            {
                return("V5_4_0_17359");
            }

            case ClientVersionBuild.V5_4_1_17538:
            {
                return("V5_4_1_17538");
            }

            case ClientVersionBuild.V5_4_2_17658:
            case ClientVersionBuild.V5_4_2_17688:
            {
                return("V5_4_2_17688");
            }

            case ClientVersionBuild.V5_4_7_17898:
            case ClientVersionBuild.V5_4_7_17930:
            case ClientVersionBuild.V5_4_7_17956:
            case ClientVersionBuild.V5_4_7_18019:
            {
                return("V5_4_7_17898");
            }

            case ClientVersionBuild.V5_4_8_18291:
            case ClientVersionBuild.V5_4_8_18414:
            {
                return("V5_4_8_18291");
            }

            case ClientVersionBuild.V6_0_2_19033:
            case ClientVersionBuild.V6_0_2_19034:
            {
                return("V6_0_2_19033");
            }

            case ClientVersionBuild.V6_0_3_19103:
            case ClientVersionBuild.V6_0_3_19116:
            case ClientVersionBuild.V6_0_3_19243:
            case ClientVersionBuild.V6_0_3_19342:
            {
                return("V6_0_3_19103");
            }

            case ClientVersionBuild.V6_1_0_19678:
            case ClientVersionBuild.V6_1_0_19702:
            case ClientVersionBuild.V6_1_2_19802:
            case ClientVersionBuild.V6_1_2_19831:
            case ClientVersionBuild.V6_1_2_19865:
            {
                return("V6_1_2_19802");
            }

            case ClientVersionBuild.V6_2_0_20173:
            case ClientVersionBuild.V6_2_0_20182:
            case ClientVersionBuild.V6_2_0_20201:
            case ClientVersionBuild.V6_2_0_20216:
            case ClientVersionBuild.V6_2_0_20253:
            case ClientVersionBuild.V6_2_0_20338:
            {
                return("V6_2_0_20173");
            }

            case ClientVersionBuild.V6_2_2_20444:
            case ClientVersionBuild.V6_2_2a_20490:
            case ClientVersionBuild.V6_2_2a_20574:
            {
                return("V6_2_2_20444");
            }

            case ClientVersionBuild.V6_2_3_20726:
            case ClientVersionBuild.V6_2_3_20779:
            case ClientVersionBuild.V6_2_3_20886:
            {
                return("V6_2_3_20726");
            }

            case ClientVersionBuild.V6_2_4_21315:
            case ClientVersionBuild.V6_2_4_21336:
            case ClientVersionBuild.V6_2_4_21343:
            case ClientVersionBuild.V6_2_4_21345:
            case ClientVersionBuild.V6_2_4_21348:
            case ClientVersionBuild.V6_2_4_21355:
            case ClientVersionBuild.V6_2_4_21463:
            case ClientVersionBuild.V6_2_4_21676:
            case ClientVersionBuild.V6_2_4_21742:
            {
                return("V6_2_4_21315");
            }

            case ClientVersionBuild.V7_0_3_22248:
            case ClientVersionBuild.V7_0_3_22280:
            case ClientVersionBuild.V7_0_3_22289:
            case ClientVersionBuild.V7_0_3_22293:
            case ClientVersionBuild.V7_0_3_22345:
            case ClientVersionBuild.V7_0_3_22396:
            case ClientVersionBuild.V7_0_3_22410:
            case ClientVersionBuild.V7_0_3_22423:
            case ClientVersionBuild.V7_0_3_22445:
            case ClientVersionBuild.V7_0_3_22498:
            case ClientVersionBuild.V7_0_3_22522:
            case ClientVersionBuild.V7_0_3_22566:
            case ClientVersionBuild.V7_0_3_22594:
            case ClientVersionBuild.V7_0_3_22624:
            case ClientVersionBuild.V7_0_3_22747:
            case ClientVersionBuild.V7_0_3_22810:
            {
                return("V7_0_3_22248");
            }

            case ClientVersionBuild.V7_1_0_22900:
            case ClientVersionBuild.V7_1_0_22908:
            case ClientVersionBuild.V7_1_0_22950:
            case ClientVersionBuild.V7_1_0_22989:
            case ClientVersionBuild.V7_1_0_22995:
            case ClientVersionBuild.V7_1_0_22996:
            case ClientVersionBuild.V7_1_0_23171:
            case ClientVersionBuild.V7_1_0_23222:
            {
                return("V7_1_0_22900");
            }

            case ClientVersionBuild.V7_1_5_23360:
            case ClientVersionBuild.V7_1_5_23420:
            {
                return("V7_1_5_23360");
            }

            case ClientVersionBuild.V7_2_0_23706:
            case ClientVersionBuild.V7_2_0_23826:
            case ClientVersionBuild.V7_2_0_23835:
            case ClientVersionBuild.V7_2_0_23836:
            case ClientVersionBuild.V7_2_0_23846:
            case ClientVersionBuild.V7_2_0_23852:
            case ClientVersionBuild.V7_2_0_23857:
            case ClientVersionBuild.V7_2_0_23877:
            case ClientVersionBuild.V7_2_0_23911:
            case ClientVersionBuild.V7_2_0_23937:
            case ClientVersionBuild.V7_2_0_24015:
            {
                return("V7_2_0_23826");
            }

            case ClientVersionBuild.V7_2_5_24330:
            case ClientVersionBuild.V7_2_5_24367:
            case ClientVersionBuild.V7_2_5_24414:
            case ClientVersionBuild.V7_2_5_24415:
            case ClientVersionBuild.V7_2_5_24430:
            case ClientVersionBuild.V7_2_5_24461:
            case ClientVersionBuild.V7_2_5_24742:
            {
                return("V7_2_5_24330");
            }

            case ClientVersionBuild.V7_3_0_24920:
            case ClientVersionBuild.V7_3_0_24931:
            case ClientVersionBuild.V7_3_0_24956:
            case ClientVersionBuild.V7_3_0_24970:
            case ClientVersionBuild.V7_3_0_24974:
            case ClientVersionBuild.V7_3_0_25021:
            case ClientVersionBuild.V7_3_0_25195:
            {
                return("V7_3_0_24920");
            }

            case ClientVersionBuild.V7_3_2_25383:
            case ClientVersionBuild.V7_3_2_25442:
            case ClientVersionBuild.V7_3_2_25455:
            case ClientVersionBuild.V7_3_2_25477:
            case ClientVersionBuild.V7_3_2_25480:
            case ClientVersionBuild.V7_3_2_25497:
            case ClientVersionBuild.V7_3_2_25549:
            {
                return("V7_3_2_25383");
            }

            case ClientVersionBuild.V7_3_5_25848:
            case ClientVersionBuild.V7_3_5_25860:
            case ClientVersionBuild.V7_3_5_25864:
            case ClientVersionBuild.V7_3_5_25875:
            case ClientVersionBuild.V7_3_5_25881:
            case ClientVersionBuild.V7_3_5_25901:
            case ClientVersionBuild.V7_3_5_25928:
            case ClientVersionBuild.V7_3_5_25937:
            case ClientVersionBuild.V7_3_5_25944:
            case ClientVersionBuild.V7_3_5_25946:
            case ClientVersionBuild.V7_3_5_25950:
            case ClientVersionBuild.V7_3_5_25961:
            case ClientVersionBuild.V7_3_5_25996:
            case ClientVersionBuild.V7_3_5_26124:
            case ClientVersionBuild.V7_3_5_26365:
            case ClientVersionBuild.V7_3_5_26654:
            case ClientVersionBuild.V7_3_5_26755:
            case ClientVersionBuild.V7_3_5_26822:
            case ClientVersionBuild.V7_3_5_26899:
            case ClientVersionBuild.V7_3_5_26972:
            {
                return("V7_3_5_25848");
            }

            case ClientVersionBuild.V8_0_1_27101:
            case ClientVersionBuild.V8_0_1_27144:
            case ClientVersionBuild.V8_0_1_27165:
            case ClientVersionBuild.V8_0_1_27178:
            case ClientVersionBuild.V8_0_1_27219:
            case ClientVersionBuild.V8_0_1_27291:
            case ClientVersionBuild.V8_0_1_27326:
            case ClientVersionBuild.V8_0_1_27355:
            case ClientVersionBuild.V8_0_1_27356:
            case ClientVersionBuild.V8_0_1_27366:
            case ClientVersionBuild.V8_0_1_27377:
            case ClientVersionBuild.V8_0_1_27404:
            case ClientVersionBuild.V8_0_1_27481:
            case ClientVersionBuild.V8_0_1_27547:
            case ClientVersionBuild.V8_0_1_27602:
            case ClientVersionBuild.V8_0_1_27791:
            case ClientVersionBuild.V8_0_1_27843:
            case ClientVersionBuild.V8_0_1_27980:
            case ClientVersionBuild.V8_0_1_28153:
            {
                return("V8_0_1_27101");
            }

            case ClientVersionBuild.V8_1_0_28724:
            case ClientVersionBuild.V8_1_0_28768:
            case ClientVersionBuild.V8_1_0_28807:
            case ClientVersionBuild.V8_1_0_28822:
            case ClientVersionBuild.V8_1_0_28833:
            case ClientVersionBuild.V8_1_0_29088:
            case ClientVersionBuild.V8_1_0_29139:
            case ClientVersionBuild.V8_1_0_29235:
            case ClientVersionBuild.V8_1_0_29285:
            case ClientVersionBuild.V8_1_0_29297:
            case ClientVersionBuild.V8_1_0_29482:
            case ClientVersionBuild.V8_1_0_29600:
            case ClientVersionBuild.V8_1_0_29621:
            {
                return("V8_1_0_28724");
            }

            case ClientVersionBuild.V8_1_5_29683:
            case ClientVersionBuild.V8_1_5_29701:
            case ClientVersionBuild.V8_1_5_29704:
            case ClientVersionBuild.V8_1_5_29705:
            case ClientVersionBuild.V8_1_5_29718:
            case ClientVersionBuild.V8_1_5_29732:
            case ClientVersionBuild.V8_1_5_29737:
            case ClientVersionBuild.V8_1_5_29814:
            case ClientVersionBuild.V8_1_5_29869:
            case ClientVersionBuild.V8_1_5_29896:
            case ClientVersionBuild.V8_1_5_29981:
            case ClientVersionBuild.V8_1_5_30477:
            case ClientVersionBuild.V8_1_5_30706:
            {
                return("V8_1_5_29683");
            }

            case ClientVersionBuild.V8_2_0_30898:
            case ClientVersionBuild.V8_2_0_30918:
            case ClientVersionBuild.V8_2_0_30920:
            case ClientVersionBuild.V8_2_0_30948:
            case ClientVersionBuild.V8_2_0_30993:
            case ClientVersionBuild.V8_2_0_31229:
            case ClientVersionBuild.V8_2_0_31429:
            case ClientVersionBuild.V8_2_0_31478:
            {
                return("V8_2_0_30898");
            }

            case ClientVersionBuild.V8_2_5_31921:
            case ClientVersionBuild.V8_2_5_31958:
            case ClientVersionBuild.V8_2_5_31960:
            case ClientVersionBuild.V8_2_5_31961:
            case ClientVersionBuild.V8_2_5_31984:
            case ClientVersionBuild.V8_2_5_32028:
            case ClientVersionBuild.V8_2_5_32144:
            case ClientVersionBuild.V8_2_5_32185:
            case ClientVersionBuild.V8_2_5_32265:
            case ClientVersionBuild.V8_2_5_32294:
            case ClientVersionBuild.V8_2_5_32305:
            case ClientVersionBuild.V8_2_5_32494:
            case ClientVersionBuild.V8_2_5_32580:
            case ClientVersionBuild.V8_2_5_32638:
            case ClientVersionBuild.V8_2_5_32722:
            case ClientVersionBuild.V8_2_5_32750:
            {
                return("V8_2_5_31921");
            }

            case ClientVersionBuild.V1_13_2_31446:
            case ClientVersionBuild.V1_13_2_31650:
            case ClientVersionBuild.V1_13_2_31687:
            case ClientVersionBuild.V1_13_2_31727:
            case ClientVersionBuild.V1_13_2_31830:
            case ClientVersionBuild.V1_13_2_31882:
            case ClientVersionBuild.V1_13_2_32089:
            case ClientVersionBuild.V1_13_2_32421:
            case ClientVersionBuild.V1_13_2_32600:
            {
                return("V1_13_2_31446");
            }

            default:
            {
                return("V3_3_5a_12340");
            }
            }
        }
示例#45
0
        private static void LoadHandlersInto(Dictionary<KeyValuePair<ClientVersionBuild, Opcode>, Action<Packet>> handlers, Assembly asm, ClientVersionBuild build)
        {
            var types = asm.GetTypes();
            foreach (var type in types)
            {
                //if (type.Namespace != "WowPacketParser.Parsing.Parsers")
                //    continue;

                if (!type.IsAbstract)
                    continue;

                if (!type.IsPublic)
                    continue;

                var methods = type.GetMethods();

                foreach (var method in methods)
                {
                    if (!method.IsPublic)
                        continue;

                    var attrs = (ParserAttribute[])method.GetCustomAttributes(typeof(ParserAttribute), false);

                    if (attrs.Length <= 0)
                        continue;

                    var parms = method.GetParameters();

                    if (parms.Length <= 0)
                        continue;

                    if (parms[0].ParameterType != typeof(Packet))
                        continue;

                    foreach (var attr in attrs)
                    {
                        var opc = attr.Opcode;
                        if (opc == Opcode.NULL_OPCODE)
                            continue;

                        var key = new KeyValuePair<ClientVersionBuild, Opcode>(build, opc);

                        var del = (Action<Packet>)Delegate.CreateDelegate(typeof(Action<Packet>), method);

                        if (handlers.ContainsKey(key))
                        {
                            Trace.WriteLine(string.Format("Error: (Build: {0}) tried to overwrite delegate for opcode {1} ({2}); new handler: {3}; old handler: {4}",
                                ClientVersion.Build, Opcodes.GetOpcode(attr.Opcode), attr.Opcode, del.Method, handlers[key].Method));
                            continue;
                        }

                        handlers[key] = del;
                    }
                }
            }
        }
示例#46
0
 public static bool InVersion(ClientVersionBuild build1, ClientVersionBuild build2)
 {
     return AddedInVersion(build1) && RemovedInVersion(build2);
 }
示例#47
0
 public static void SetVersion(DateTime time)
 {
     Build = GetVersion(time);
 }
示例#48
0
 public static bool LoadUFDictionaries(Assembly asm, ClientVersionBuild build)
 {
     return(LoadUFDictionariesInto(UpdateFieldDictionary, UpdateFieldNameDictionary, asm, build));
 }
示例#49
0
 public static bool RemovedInVersion(ClientVersionBuild build)
 {
     return _build < build;
 }
示例#50
0
        private static bool LoadUFDictionariesInto(Dictionary <Type, SortedList <int, UpdateFieldInfo> > dicts,
                                                   Dictionary <Type, Dictionary <string, int> > nameToValueDict,
                                                   Assembly asm, ClientVersionBuild build)
        {
            Type[] enumTypes =
            {
                typeof(ObjectField),        typeof(ItemField),                typeof(ContainerField),          typeof(AzeriteEmpoweredItemField),        typeof(AzeriteItemField),        typeof(UnitField),
                typeof(PlayerField),        typeof(ActivePlayerField),        typeof(GameObjectField),         typeof(DynamicObjectField),
                typeof(CorpseField),        typeof(AreaTriggerField),         typeof(SceneObjectField),        typeof(ConversationField),
                typeof(ObjectDynamicField), typeof(ItemDynamicField),         typeof(ContainerDynamicField),   typeof(AzeriteEmpoweredItemDynamicField), typeof(AzeriteItemDynamicField), typeof(UnitDynamicField),
                typeof(PlayerDynamicField), typeof(ActivePlayerDynamicField), typeof(GameObjectDynamicField),  typeof(DynamicObjectDynamicField),
                typeof(CorpseDynamicField), typeof(AreaTriggerDynamicField),  typeof(SceneObjectDynamicField), typeof(ConversationDynamicField)
            };

            bool loaded = false;

            foreach (Type enumType in enumTypes)
            {
                string vTypeString =
                    $"WowPacketParserModule.{GetUpdateFieldDictionaryBuildName(build)}.Enums.{enumType.Name}";
                Type vEnumType = asm.GetType(vTypeString);
                if (vEnumType == null)
                {
                    vTypeString =
                        $"WowPacketParser.Enums.Version.{GetUpdateFieldDictionaryBuildName(build)}.{enumType.Name}";
                    vEnumType = Assembly.GetExecutingAssembly().GetType(vTypeString);
                    if (vEnumType == null)
                    {
                        continue;   // versions prior to 4.3.0 do not have AreaTriggerField
                    }
                }

                Array vValues = Enum.GetValues(vEnumType);
                var   vNames  = Enum.GetNames(vEnumType);

                var result      = new SortedList <int, UpdateFieldInfo>(vValues.Length);
                var namesResult = new Dictionary <string, int>(vNames.Length);

                for (int i = 0; i < vValues.Length; ++i)
                {
                    var format = enumType.GetMember(vNames[i])
                                 .SelectMany(member => member.GetCustomAttributes(typeof(UpdateFieldAttribute), false))
                                 .Where(attribute => ((UpdateFieldAttribute)attribute).Version <= ClientVersion.VersionDefiningBuild)
                                 .OrderByDescending(attribute => ((UpdateFieldAttribute)attribute).Version)
                                 .Select(attribute => ((UpdateFieldAttribute)attribute).UFAttribute)
                                 .DefaultIfEmpty(UpdateFieldType.Default).First();

                    result.Add((int)vValues.GetValue(i), new UpdateFieldInfo()
                    {
                        Value = (int)vValues.GetValue(i), Name = vNames[i], Size = 0, Format = format
                    });
                    namesResult.Add(vNames[i], (int)vValues.GetValue(i));
                }

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

                dicts.Add(enumType, result);
                nameToValueDict.Add(enumType, namesResult);
                loaded = true;
            }

            return(loaded);
        }
示例#51
0
 private static ClientType GetExpansion(ClientVersionBuild build)
 {
     if (build >= ClientVersionBuild.V4_0_3_13329)
         return ClientType.Cataclysm;
     else if (build >= ClientVersionBuild.V3_0_3_9183)
         return ClientType.WrathOfTheLichKing;
     else if (build >= ClientVersionBuild.V2_0_3_6299)
         return ClientType.TheBurningCrusade;
     else
         return ClientType.WorldOfWarcraft;
 }
        /// <summary>
        /// [addedInVersion, removedInVersion[
        /// </summary>
        /// <param name="name">database field name</param>
        /// <param name="addedInVersion">initial version</param>
        /// <param name="removedInVersion">final version</param>
        /// <param name="count">number of fields</param>
        /// <param name="startAtZero">true if fields name start at 0</param>
        public DBFieldNameAttribute(string name, ClientVersionBuild addedInVersion, ClientVersionBuild removedInVersion, int count, bool startAtZero = false)
        {
            if (ClientVersion.AddedInVersion(addedInVersion) && ClientVersion.RemovedInVersion(removedInVersion))
            {
                Name = name;
                Count = count;
            }
            else
            {
                Name = null;
                Count = 0;
            }

            StartAtZero = startAtZero;
            _multipleFields = true;
        }
示例#53
0
        public static ClientVersionBuild GetOpcodeDefiningBuild(ClientVersionBuild build)
        {
            switch (build)
            {
            case ClientVersionBuild.V1_12_1_5875:
            case ClientVersionBuild.V2_0_1_6180:
            case ClientVersionBuild.V2_0_3_6299:
            case ClientVersionBuild.V2_0_6_6337:
            case ClientVersionBuild.V2_1_0_6692:
            case ClientVersionBuild.V2_1_1_6739:
            case ClientVersionBuild.V2_1_2_6803:
            case ClientVersionBuild.V2_1_3_6898:
            case ClientVersionBuild.V2_2_0_7272:
            case ClientVersionBuild.V2_2_2_7318:
            case ClientVersionBuild.V2_2_3_7359:
            case ClientVersionBuild.V2_3_0_7561:
            case ClientVersionBuild.V2_3_2_7741:
            case ClientVersionBuild.V2_3_3_7799:
            case ClientVersionBuild.V2_4_0_8089:
            case ClientVersionBuild.V2_4_1_8125:
            case ClientVersionBuild.V2_4_2_8209:
            case ClientVersionBuild.V2_4_3_8606:
            case ClientVersionBuild.V3_0_2_9056:
            case ClientVersionBuild.V3_0_3_9183:
            case ClientVersionBuild.V3_0_8_9464:
            case ClientVersionBuild.V3_0_8a_9506:
            case ClientVersionBuild.V3_0_9_9551:
            case ClientVersionBuild.V3_1_0_9767:
            case ClientVersionBuild.V3_1_1_9806:
            case ClientVersionBuild.V3_1_1a_9835:
            case ClientVersionBuild.V3_1_2_9901:
            case ClientVersionBuild.V3_1_3_9947:
            case ClientVersionBuild.V3_2_0_10192:
            case ClientVersionBuild.V3_2_0a_10314:
            case ClientVersionBuild.V3_2_2_10482:
            case ClientVersionBuild.V3_2_2a_10505:
            case ClientVersionBuild.V3_3_0_10958:
            case ClientVersionBuild.V3_3_0a_11159:
            case ClientVersionBuild.V3_3_3_11685:
            case ClientVersionBuild.V3_3_3a_11723:
            case ClientVersionBuild.V3_3_5_12213:
            case ClientVersionBuild.V3_3_5a_12340:
                return(ClientVersionBuild.V3_3_5a_12340);

            case ClientVersionBuild.V4_0_1_13164:
            case ClientVersionBuild.V4_0_1a_13205:
            case ClientVersionBuild.V4_0_3_13329:
                return(ClientVersionBuild.V4_0_3_13329);

            case ClientVersionBuild.V4_0_6_13596:
            case ClientVersionBuild.V4_0_6a_13623:
                return(ClientVersionBuild.V4_0_6_13596);

            case ClientVersionBuild.V4_1_0_13914:
            case ClientVersionBuild.V4_1_0a_14007:
                return(ClientVersionBuild.V4_1_0_13914);

            case ClientVersionBuild.V4_2_0_14333:
            case ClientVersionBuild.V4_2_0a_14480:
                return(ClientVersionBuild.V4_2_0_14333);

            case ClientVersionBuild.V4_2_2_14545:
                return(ClientVersionBuild.V4_2_2_14545);

            case ClientVersionBuild.V4_3_0_15005:
            case ClientVersionBuild.V4_3_0a_15050:
                return(ClientVersionBuild.V4_3_0_15005);

            case ClientVersionBuild.V4_3_2_15211:
                return(ClientVersionBuild.V4_3_2_15211);

            case ClientVersionBuild.V4_3_3_15354:
                return(ClientVersionBuild.V4_3_3_15354);

            case ClientVersionBuild.V4_3_4_15595:
                return(ClientVersionBuild.V4_3_4_15595);

            case ClientVersionBuild.V5_0_4_16016:
                return(ClientVersionBuild.V5_0_4_16016);

            case ClientVersionBuild.V5_0_5_16048:
            case ClientVersionBuild.V5_0_5a_16057:
            case ClientVersionBuild.V5_0_5b_16135:
                return(ClientVersionBuild.V5_0_5_16048);

            case ClientVersionBuild.V5_1_0_16309:
            case ClientVersionBuild.V5_1_0a_16357:
                return(ClientVersionBuild.V5_1_0_16309);

            case ClientVersionBuild.V5_2_0_16650:
            case ClientVersionBuild.V5_2_0_16669:
            case ClientVersionBuild.V5_2_0_16683:
            case ClientVersionBuild.V5_2_0_16685:
            case ClientVersionBuild.V5_2_0_16701:
            case ClientVersionBuild.V5_2_0_16709:
            case ClientVersionBuild.V5_2_0_16716:
            case ClientVersionBuild.V5_2_0_16733:
            case ClientVersionBuild.V5_2_0_16769:
            case ClientVersionBuild.V5_2_0_16826:
                return(ClientVersionBuild.V5_2_0_16650);

            case ClientVersionBuild.V5_3_0_16981:
            case ClientVersionBuild.V5_3_0_16983:
            case ClientVersionBuild.V5_3_0_16992:
            case ClientVersionBuild.V5_3_0_17055:
            case ClientVersionBuild.V5_3_0_17116:
            case ClientVersionBuild.V5_3_0_17128:
                return(ClientVersionBuild.V5_3_0_16981);

            case ClientVersionBuild.V5_4_0_17359:
            case ClientVersionBuild.V5_4_0_17371:
            case ClientVersionBuild.V5_4_0_17399:
                return(ClientVersionBuild.V5_4_0_17359);

            case ClientVersionBuild.V5_4_1_17538:
                return(ClientVersionBuild.V5_4_1_17538);

            case ClientVersionBuild.V5_4_2_17658:
            case ClientVersionBuild.V5_4_2_17688:
                return(ClientVersionBuild.V5_4_2_17658);

            case ClientVersionBuild.V5_4_7_17898:
            case ClientVersionBuild.V5_4_7_17930:
            case ClientVersionBuild.V5_4_7_17956:
            case ClientVersionBuild.V5_4_7_18019:
                return(ClientVersionBuild.V5_4_7_17898);

            case ClientVersionBuild.V5_4_8_18291:
            case ClientVersionBuild.V5_4_8_18414:
                return(ClientVersionBuild.V5_4_8_18291);

            case ClientVersionBuild.V6_0_2_19033:
            case ClientVersionBuild.V6_0_2_19034:
                return(ClientVersionBuild.V6_0_2_19033);

            case ClientVersionBuild.V6_0_3_19103:
            case ClientVersionBuild.V6_0_3_19116:
            case ClientVersionBuild.V6_0_3_19243:
            case ClientVersionBuild.V6_0_3_19342:
                return(ClientVersionBuild.V6_0_3_19103);

            case ClientVersionBuild.V6_1_0_19678:
            case ClientVersionBuild.V6_1_0_19702:
                return(ClientVersionBuild.V6_1_0_19678);

            case ClientVersionBuild.V6_1_2_19802:
            case ClientVersionBuild.V6_1_2_19831:
            case ClientVersionBuild.V6_1_2_19865:
                return(ClientVersionBuild.V6_1_2_19802);

            case ClientVersionBuild.V6_2_0_20173:
            case ClientVersionBuild.V6_2_0_20182:
            case ClientVersionBuild.V6_2_0_20201:
            case ClientVersionBuild.V6_2_0_20216:
            case ClientVersionBuild.V6_2_0_20253:
            case ClientVersionBuild.V6_2_0_20338:
                return(ClientVersionBuild.V6_2_0_20173);

            case ClientVersionBuild.V6_2_2_20444:
            case ClientVersionBuild.V6_2_2a_20490:
            case ClientVersionBuild.V6_2_2a_20574:
                return(ClientVersionBuild.V6_2_2_20444);

            case ClientVersionBuild.V6_2_3_20726:
            case ClientVersionBuild.V6_2_3_20779:
            case ClientVersionBuild.V6_2_3_20886:
                return(ClientVersionBuild.V6_2_3_20726);

            case ClientVersionBuild.V6_2_4_21315:
            case ClientVersionBuild.V6_2_4_21336:
            case ClientVersionBuild.V6_2_4_21343:
            case ClientVersionBuild.V6_2_4_21345:
            case ClientVersionBuild.V6_2_4_21348:
            case ClientVersionBuild.V6_2_4_21355:
            case ClientVersionBuild.V6_2_4_21463:
            case ClientVersionBuild.V6_2_4_21676:
            case ClientVersionBuild.V6_2_4_21742:
                return(ClientVersionBuild.V6_2_4_21315);

            case ClientVersionBuild.V7_0_3_22248:
            case ClientVersionBuild.V7_0_3_22267:
            case ClientVersionBuild.V7_0_3_22277:
            case ClientVersionBuild.V7_0_3_22280:
            case ClientVersionBuild.V7_0_3_22289:
            case ClientVersionBuild.V7_0_3_22293:
            case ClientVersionBuild.V7_0_3_22345:
            case ClientVersionBuild.V7_0_3_22396:
            case ClientVersionBuild.V7_0_3_22410:
            case ClientVersionBuild.V7_0_3_22423:
            case ClientVersionBuild.V7_0_3_22445:
            case ClientVersionBuild.V7_0_3_22498:
            case ClientVersionBuild.V7_0_3_22522:
            case ClientVersionBuild.V7_0_3_22566:
            case ClientVersionBuild.V7_0_3_22594:
            case ClientVersionBuild.V7_0_3_22624:
            case ClientVersionBuild.V7_0_3_22747:
            case ClientVersionBuild.V7_0_3_22810:
                return(ClientVersionBuild.V7_0_3_22248);

            case ClientVersionBuild.V7_1_0_22900:
            case ClientVersionBuild.V7_1_0_22908:
            case ClientVersionBuild.V7_1_0_22950:
            case ClientVersionBuild.V7_1_0_22989:
            case ClientVersionBuild.V7_1_0_22995:
            case ClientVersionBuild.V7_1_0_22996:
            case ClientVersionBuild.V7_1_0_23171:
            case ClientVersionBuild.V7_1_0_23222:
                return(ClientVersionBuild.V7_1_0_22900);

            case ClientVersionBuild.V7_1_5_23360:
            case ClientVersionBuild.V7_1_5_23420:
                return(ClientVersionBuild.V7_1_5_23360);

            case ClientVersionBuild.V7_2_0_23706:
            case ClientVersionBuild.V7_2_0_23826:
            case ClientVersionBuild.V7_2_0_23835:
            case ClientVersionBuild.V7_2_0_23836:
            case ClientVersionBuild.V7_2_0_23846:
            case ClientVersionBuild.V7_2_0_23852:
            case ClientVersionBuild.V7_2_0_23857:
            case ClientVersionBuild.V7_2_0_23877:
            case ClientVersionBuild.V7_2_0_23911:
            case ClientVersionBuild.V7_2_0_23937:
            case ClientVersionBuild.V7_2_0_24015:
                return(ClientVersionBuild.V7_2_0_23706);

            case ClientVersionBuild.V7_2_5_24330:
            case ClientVersionBuild.V7_2_5_24367:
            case ClientVersionBuild.V7_2_5_24414:
            case ClientVersionBuild.V7_2_5_24415:
            case ClientVersionBuild.V7_2_5_24430:
            case ClientVersionBuild.V7_2_5_24461:
            case ClientVersionBuild.V7_2_5_24742:
                return(ClientVersionBuild.V7_2_5_24330);

            case ClientVersionBuild.V7_3_0_24920:
            case ClientVersionBuild.V7_3_0_24931:
            case ClientVersionBuild.V7_3_0_24956:
            case ClientVersionBuild.V7_3_0_24970:
            case ClientVersionBuild.V7_3_0_24974:
            case ClientVersionBuild.V7_3_0_25021:
            case ClientVersionBuild.V7_3_0_25195:
                return(ClientVersionBuild.V7_3_0_24920);

            case ClientVersionBuild.V7_3_2_25383:
            case ClientVersionBuild.V7_3_2_25442:
            case ClientVersionBuild.V7_3_2_25455:
            case ClientVersionBuild.V7_3_2_25477:
            case ClientVersionBuild.V7_3_2_25480:
            case ClientVersionBuild.V7_3_2_25497:
            case ClientVersionBuild.V7_3_2_25549:
                return(ClientVersionBuild.V7_3_2_25383);

            case ClientVersionBuild.V7_3_5_25848:
            case ClientVersionBuild.V7_3_5_25860:
            case ClientVersionBuild.V7_3_5_25864:
            case ClientVersionBuild.V7_3_5_25875:
            case ClientVersionBuild.V7_3_5_25881:
            case ClientVersionBuild.V7_3_5_25901:
            case ClientVersionBuild.V7_3_5_25928:
            case ClientVersionBuild.V7_3_5_25937:
            case ClientVersionBuild.V7_3_5_25944:
            case ClientVersionBuild.V7_3_5_25946:
            case ClientVersionBuild.V7_3_5_25950:
            case ClientVersionBuild.V7_3_5_25961:
            case ClientVersionBuild.V7_3_5_25996:
            case ClientVersionBuild.V7_3_5_26124:
            case ClientVersionBuild.V7_3_5_26365:
            case ClientVersionBuild.V7_3_5_26654:
            case ClientVersionBuild.V7_3_5_26755:
            case ClientVersionBuild.V7_3_5_26822:
            case ClientVersionBuild.V7_3_5_26899:
            case ClientVersionBuild.V7_3_5_26972:
                return(ClientVersionBuild.V7_3_5_25848);

            case ClientVersionBuild.V8_0_1_27101:
            case ClientVersionBuild.V8_0_1_27144:
            case ClientVersionBuild.V8_0_1_27165:
            case ClientVersionBuild.V8_0_1_27178:
            case ClientVersionBuild.V8_0_1_27219:
            case ClientVersionBuild.V8_0_1_27291:
            case ClientVersionBuild.V8_0_1_27326:
            case ClientVersionBuild.V8_0_1_27355:
            case ClientVersionBuild.V8_0_1_27356:
            case ClientVersionBuild.V8_0_1_27366:
            case ClientVersionBuild.V8_0_1_27377:
            case ClientVersionBuild.V8_0_1_27404:
            case ClientVersionBuild.V8_0_1_27481:
            case ClientVersionBuild.V8_0_1_27547:
            case ClientVersionBuild.V8_0_1_27602:
            case ClientVersionBuild.V8_0_1_27791:
            case ClientVersionBuild.V8_0_1_27843:
            case ClientVersionBuild.V8_0_1_27980:
            case ClientVersionBuild.V8_0_1_28153:
                return(ClientVersionBuild.V8_0_1_27101);

            case ClientVersionBuild.V8_1_0_28724:
            case ClientVersionBuild.V8_1_0_28768:
            case ClientVersionBuild.V8_1_0_28807:
            case ClientVersionBuild.V8_1_0_28822:
            case ClientVersionBuild.V8_1_0_28833:
            case ClientVersionBuild.V8_1_0_29088:
            case ClientVersionBuild.V8_1_0_29139:
            case ClientVersionBuild.V8_1_0_29235:
            case ClientVersionBuild.V8_1_0_29285:
            case ClientVersionBuild.V8_1_0_29297:
            case ClientVersionBuild.V8_1_0_29482:
            case ClientVersionBuild.V8_1_0_29600:
            case ClientVersionBuild.V8_1_0_29621:
                return(ClientVersionBuild.V8_1_0_28724);

            case ClientVersionBuild.V8_1_5_29683:
            case ClientVersionBuild.V8_1_5_29701:
            case ClientVersionBuild.V8_1_5_29704:
            case ClientVersionBuild.V8_1_5_29705:
            case ClientVersionBuild.V8_1_5_29718:
            case ClientVersionBuild.V8_1_5_29732:
            case ClientVersionBuild.V8_1_5_29737:
            case ClientVersionBuild.V8_1_5_29814:
            case ClientVersionBuild.V8_1_5_29869:
            case ClientVersionBuild.V8_1_5_29896:
            case ClientVersionBuild.V8_1_5_29981:
            case ClientVersionBuild.V8_1_5_30477:
            case ClientVersionBuild.V8_1_5_30706:
                return(ClientVersionBuild.V8_1_5_29683);

            case ClientVersionBuild.V8_2_0_30898:
            case ClientVersionBuild.V8_2_0_30918:
            case ClientVersionBuild.V8_2_0_30920:
            case ClientVersionBuild.V8_2_0_30948:
            case ClientVersionBuild.V8_2_0_30993:
            case ClientVersionBuild.V8_2_0_31229:
            case ClientVersionBuild.V8_2_0_31429:
            case ClientVersionBuild.V8_2_0_31478:
                return(ClientVersionBuild.V8_2_0_30898);

            case ClientVersionBuild.V8_2_5_31921:
            case ClientVersionBuild.V8_2_5_31958:
            case ClientVersionBuild.V8_2_5_31960:
            case ClientVersionBuild.V8_2_5_31961:
            case ClientVersionBuild.V8_2_5_31984:
            case ClientVersionBuild.V8_2_5_32028:
            case ClientVersionBuild.V8_2_5_32144:
            case ClientVersionBuild.V8_2_5_32185:
            case ClientVersionBuild.V8_2_5_32265:
            case ClientVersionBuild.V8_2_5_32294:
            case ClientVersionBuild.V8_2_5_32305:
            case ClientVersionBuild.V8_2_5_32494:
            case ClientVersionBuild.V8_2_5_32580:
            case ClientVersionBuild.V8_2_5_32638:
            case ClientVersionBuild.V8_2_5_32722:
            case ClientVersionBuild.V8_2_5_32750:
            case ClientVersionBuild.V8_2_5_32978:
                return(ClientVersionBuild.V8_2_5_31921);

            case ClientVersionBuild.V8_3_0_33062:
            case ClientVersionBuild.V8_3_0_33073:
            case ClientVersionBuild.V8_3_0_33084:
            case ClientVersionBuild.V8_3_0_33095:
            case ClientVersionBuild.V8_3_0_33115:
            case ClientVersionBuild.V8_3_0_33169:
            case ClientVersionBuild.V8_3_0_33237:
            case ClientVersionBuild.V8_3_0_33369:
            case ClientVersionBuild.V8_3_0_33528:
            case ClientVersionBuild.V8_3_0_33724:
            case ClientVersionBuild.V8_3_0_33775:
            case ClientVersionBuild.V8_3_0_33941:
            case ClientVersionBuild.V8_3_0_34220:
            case ClientVersionBuild.V8_3_0_34601:
            case ClientVersionBuild.V8_3_0_34769:
            case ClientVersionBuild.V8_3_0_34963:
                return(ClientVersionBuild.V8_3_0_33062);

            case ClientVersionBuild.V8_3_7_35249:
            case ClientVersionBuild.V8_3_7_35284:
            case ClientVersionBuild.V8_3_7_35435:
            case ClientVersionBuild.V8_3_7_35662:
                return(ClientVersionBuild.V8_3_7_35249);

            case ClientVersionBuild.V9_0_1_36216:
            case ClientVersionBuild.V9_0_1_36228:
            case ClientVersionBuild.V9_0_1_36230:
            case ClientVersionBuild.V9_0_1_36247:
            case ClientVersionBuild.V9_0_1_36272:
            case ClientVersionBuild.V9_0_1_36322:
            case ClientVersionBuild.V9_0_1_36372:
            case ClientVersionBuild.V9_0_1_36492:
            case ClientVersionBuild.V9_0_1_36577:
                return(ClientVersionBuild.V9_0_1_36216);

            case ClientVersionBuild.V9_0_2_36639:
            case ClientVersionBuild.V9_0_2_36665:
            case ClientVersionBuild.V9_0_2_36671:
            case ClientVersionBuild.V9_0_2_36710:
            case ClientVersionBuild.V9_0_2_36734:
            case ClientVersionBuild.V9_0_2_36751:
            case ClientVersionBuild.V9_0_2_36753:
            case ClientVersionBuild.V9_0_2_36839:
            case ClientVersionBuild.V9_0_2_36949:
            case ClientVersionBuild.V9_0_2_37142:
                return(ClientVersionBuild.V9_0_2_36639);

            case ClientVersionBuild.V1_13_2_31446:
            case ClientVersionBuild.V1_13_2_31650:
            case ClientVersionBuild.V1_13_2_31687:
            case ClientVersionBuild.V1_13_2_31727:
            case ClientVersionBuild.V1_13_2_31830:
            case ClientVersionBuild.V1_13_2_31882:
            case ClientVersionBuild.V1_13_2_32089:
            case ClientVersionBuild.V1_13_2_32421:
            case ClientVersionBuild.V1_13_2_32600:
            case ClientVersionBuild.V1_13_3_32790:
            case ClientVersionBuild.V1_13_3_32836:
            case ClientVersionBuild.V1_13_3_32887:
            case ClientVersionBuild.V1_13_3_33155:
            case ClientVersionBuild.V1_13_3_33302:
            case ClientVersionBuild.V1_13_3_33526:
                return(ClientVersionBuild.V1_13_2_31446);

            case ClientVersionBuild.V1_13_4_33598:
            case ClientVersionBuild.V1_13_4_33645:
            case ClientVersionBuild.V1_13_4_33728:
            case ClientVersionBuild.V1_13_4_33920:
            case ClientVersionBuild.v1_13_4_34219:
            case ClientVersionBuild.v1_13_4_34266:
            case ClientVersionBuild.v1_13_4_34600:
                return(ClientVersionBuild.V1_13_4_33598);

            case ClientVersionBuild.v1_13_5_34713:
            case ClientVersionBuild.v1_13_5_34911:
            case ClientVersionBuild.V1_13_5_35100:
            case ClientVersionBuild.V1_13_5_35186:
            case ClientVersionBuild.V1_13_5_36035:
            case ClientVersionBuild.V1_13_5_36325:
                return(ClientVersionBuild.v1_13_5_34713);

            case ClientVersionBuild.V1_13_6_36714:
                return(ClientVersionBuild.V1_13_6_36714);

            default:
                return(ClientVersionBuild.V3_3_5a_12340);
            }
        }
示例#54
0
 public static Dictionary<KeyValuePair<ClientVersionBuild, Opcode>, Action<Packet>> LoadHandlers(Assembly asm, ClientVersionBuild build)
 {
     LoadHandlersInto(VersionHandlers, asm, build);
     return VersionHandlers;
 }
示例#55
0
 public static void SetVersion(ClientVersionBuild version)
 {
     _build     = version;
     _expansion = GetExpansion(version);
 }
示例#56
0
 public static void LoadHandlers(Assembly asm, ClientVersionBuild build)
 {
     LoadHandlersInto(VersionHandlers, asm, build);
 }
示例#57
0
 public static bool RemovedInVersion(ClientVersionBuild build)
 {
     return(_build < build);
 }
示例#58
0
        private static void LoadHandlersInto(Dictionary <KeyValuePair <ClientVersionBuild, Opcode>, Action <Packet> > handlers, Assembly asm, ClientVersionBuild build)
        {
            var types = asm.GetTypes();

            foreach (var type in types)
            {
                //if (type.Namespace != "WowPacketParser.Parsing.Parsers")
                //    continue;

                if (!type.IsAbstract)
                {
                    continue;
                }

                if (!type.IsPublic)
                {
                    continue;
                }

                var methods = type.GetMethods();

                foreach (var method in methods)
                {
                    if (!method.IsPublic)
                    {
                        continue;
                    }

                    var attrs = (ParserAttribute[])method.GetCustomAttributes(typeof(ParserAttribute), false);

                    if (attrs.Length <= 0)
                    {
                        continue;
                    }

                    var parms = method.GetParameters();

                    if (parms.Length <= 0)
                    {
                        continue;
                    }

                    if (parms[0].ParameterType != typeof(Packet))
                    {
                        continue;
                    }

                    foreach (var attr in attrs)
                    {
                        var opc = attr.Opcode;
                        if (opc == Opcode.NULL_OPCODE)
                        {
                            continue;
                        }

                        var key = new KeyValuePair <ClientVersionBuild, Opcode>(build, opc);

                        var del = (Action <Packet>)Delegate.CreateDelegate(typeof(Action <Packet>), method);

                        if (handlers.ContainsKey(key))
                        {
                            Trace.WriteLine(string.Format("Error: (Build: {0}) tried to overwrite delegate for opcode {1} ({2}); new handler: {3}; old handler: {4}",
                                                          ClientVersion.Build, Opcodes.GetOpcode(attr.Opcode), attr.Opcode, del.Method, handlers[key].Method));
                            continue;
                        }

                        handlers[key] = del;
                    }
                }
            }
        }
示例#59
0
        public static BiDictionary <Opcode, int> GetOpcodeDictionary(ClientVersionBuild build, Direction direction)
        {
            switch (build)
            {
            case ClientVersionBuild.V2_4_3_8606:
            case ClientVersionBuild.V3_0_2_9056:
            case ClientVersionBuild.V3_0_3_9183:
            case ClientVersionBuild.V3_0_8_9464:
            case ClientVersionBuild.V3_0_8a_9506:
            case ClientVersionBuild.V3_0_9_9551:
            case ClientVersionBuild.V3_1_0_9767:
            case ClientVersionBuild.V3_1_1_9806:
            case ClientVersionBuild.V3_1_1a_9835:
            case ClientVersionBuild.V3_1_2_9901:
            case ClientVersionBuild.V3_1_3_9947:
            case ClientVersionBuild.V3_2_0_10192:
            case ClientVersionBuild.V3_2_0a_10314:
            case ClientVersionBuild.V3_2_2_10482:
            case ClientVersionBuild.V3_2_2a_10505:
            case ClientVersionBuild.V3_3_0_10958:
            case ClientVersionBuild.V3_3_0a_11159:
            case ClientVersionBuild.V3_3_3_11685:
            case ClientVersionBuild.V3_3_3a_11723:
            case ClientVersionBuild.V3_3_5a_12340:
            {
                return(Opcodes_3_3_5.Opcodes(direction));
            }

            case ClientVersionBuild.V4_0_3_13329:
            {
                return(Opcodes_4_0_3.Opcodes(direction));
            }

            case ClientVersionBuild.V4_0_6_13596:
            case ClientVersionBuild.V4_0_6a_13623:
            {
                return(Opcodes_4_0_6.Opcodes(direction));
            }

            case ClientVersionBuild.V4_1_0_13914:
            case ClientVersionBuild.V4_1_0a_14007:
            {
                return(Opcodes_4_1_0.Opcodes(direction));
            }

            case ClientVersionBuild.V4_2_0_14333:
            case ClientVersionBuild.V4_2_0a_14480:
            {
                return(Opcodes_4_2_0.Opcodes(direction));
            }

            case ClientVersionBuild.V4_2_2_14545:
            {
                return(Opcodes_4_2_2.Opcodes(direction));
            }

            case ClientVersionBuild.V4_3_0_15005:
            case ClientVersionBuild.V4_3_0a_15050:
            {
                return(Opcodes_4_3_0.Opcodes(direction));
            }

            case ClientVersionBuild.V4_3_2_15211:
            {
                return(Opcodes_4_3_2.Opcodes(direction));
            }

            case ClientVersionBuild.V4_3_3_15354:
            {
                return(Opcodes_4_3_3.Opcodes(direction));
            }

            case ClientVersionBuild.V4_3_4_15595:
            {
                return(Opcodes_4_3_4.Opcodes(direction));
            }

            case ClientVersionBuild.V5_0_4_16016:
            {
                return(Opcodes_5_0_4.Opcodes(direction));
            }

            case ClientVersionBuild.V5_0_5_16048:
            case ClientVersionBuild.V5_0_5a_16057:
            case ClientVersionBuild.V5_0_5b_16135:
            {
                return(Opcodes_5_0_5.Opcodes(direction));
            }

            case ClientVersionBuild.V5_1_0_16309:
            case ClientVersionBuild.V5_1_0a_16357:
            {
                return(Opcodes_5_1_0.Opcodes(direction));
            }

            case ClientVersionBuild.V5_2_0_16650:
            case ClientVersionBuild.V5_2_0_16669:
            case ClientVersionBuild.V5_2_0_16683:
            case ClientVersionBuild.V5_2_0_16685:
            case ClientVersionBuild.V5_2_0_16701:
            case ClientVersionBuild.V5_2_0_16709:
            case ClientVersionBuild.V5_2_0_16716:
            case ClientVersionBuild.V5_2_0_16733:
            case ClientVersionBuild.V5_2_0_16769:
            case ClientVersionBuild.V5_2_0_16826:
            {
                return(Opcodes_5_2_0.Opcodes(direction));
            }

            case ClientVersionBuild.V5_3_0_16981:
            case ClientVersionBuild.V5_3_0_16983:
            case ClientVersionBuild.V5_3_0_16992:
            case ClientVersionBuild.V5_3_0_17055:
            case ClientVersionBuild.V5_3_0_17116:
            case ClientVersionBuild.V5_3_0_17128:
            {
                return(Opcodes_5_3_0.Opcodes(direction));
            }

            case ClientVersionBuild.V5_4_0_17359:
            case ClientVersionBuild.V5_4_0_17371:
            case ClientVersionBuild.V5_4_0_17399:
            {
                return(Opcodes_5_4_0.Opcodes(direction));
            }

            case ClientVersionBuild.V5_4_1_17538:
            {
                return(Opcodes_5_4_1.Opcodes(direction));
            }

            case ClientVersionBuild.V5_4_2_17658:
            case ClientVersionBuild.V5_4_2_17688:
            {
                return(Opcodes_5_4_2.Opcodes(direction));
            }

            case ClientVersionBuild.V5_4_7_17898:
            case ClientVersionBuild.V5_4_7_17930:
            case ClientVersionBuild.V5_4_7_17956:
            case ClientVersionBuild.V5_4_7_18019:
            {
                return(Opcodes_5_4_7.Opcodes(direction));
            }

            case ClientVersionBuild.V5_4_8_18291:
            case ClientVersionBuild.V5_4_8_18414:
            {
                return(Opcodes_5_4_8.Opcodes(direction));
            }

            case ClientVersionBuild.V6_0_2_19033:
            case ClientVersionBuild.V6_0_2_19034:
            {
                return(Opcodes_6_0_2.Opcodes(direction));
            }

            case ClientVersionBuild.V6_0_3_19103:
            case ClientVersionBuild.V6_0_3_19116:
            case ClientVersionBuild.V6_0_3_19243:
            case ClientVersionBuild.V6_0_3_19342:
            {
                return(Opcodes_6_0_3.Opcodes(direction));
            }

            case ClientVersionBuild.V6_1_0_19678:
            case ClientVersionBuild.V6_1_0_19702:
            {
                return(Opcodes_6_1_0.Opcodes(direction));
            }

            case ClientVersionBuild.V6_1_2_19802:
            case ClientVersionBuild.V6_1_2_19831:
            case ClientVersionBuild.V6_1_2_19865:
            {
                return(Opcodes_6_1_2.Opcodes(direction));
            }

            case ClientVersionBuild.V6_2_0_20173:
            case ClientVersionBuild.V6_2_0_20182:
            case ClientVersionBuild.V6_2_0_20201:
            case ClientVersionBuild.V6_2_0_20216:
            case ClientVersionBuild.V6_2_0_20253:
            case ClientVersionBuild.V6_2_0_20338:
            {
                return(Opcodes_6_2_0.Opcodes(direction));
            }

            case ClientVersionBuild.V6_2_2_20444:
            case ClientVersionBuild.V6_2_2a_20490:
            case ClientVersionBuild.V6_2_2a_20574:
            {
                return(Opcodes_6_2_2.Opcodes(direction));
            }

            case ClientVersionBuild.V6_2_3_20726:
            case ClientVersionBuild.V6_2_3_20779:
            case ClientVersionBuild.V6_2_3_20886:
            {
                return(Opcodes_6_2_3.Opcodes(direction));
            }

            case ClientVersionBuild.V6_2_4_21315:
            case ClientVersionBuild.V6_2_4_21336:
            case ClientVersionBuild.V6_2_4_21343:
            case ClientVersionBuild.V6_2_4_21345:
            case ClientVersionBuild.V6_2_4_21348:
            case ClientVersionBuild.V6_2_4_21355:
            case ClientVersionBuild.V6_2_4_21463:
            case ClientVersionBuild.V6_2_4_21676:
            case ClientVersionBuild.V6_2_4_21742:
            {
                return(Opcodes_6_2_4.Opcodes(direction));
            }

            default:
            {
                return(Opcodes_3_3_5.Opcodes(direction));
            }
            }
        }
 /// <summary>
 /// [addedInVersion, +inf[
 /// </summary>
 /// <param name="name">database field name</param>
 /// <param name="addedInVersion">initial version</param>
 /// <param name="locale">initial locale</param>
 public DBFieldNameAttribute(string name, ClientVersionBuild addedInVersion, LocaleConstant locale)
 {
     if (ClientVersion.AddedInVersion(addedInVersion) && BinaryPacketReader.GetLocale() == locale)
     {
         Name = name;
         Count = 1;
     }
     else
     {
         Name = null;
         Count = 0;
     }
 }