Example #1
0
        public static void SetVersion(ClientVersionBuild version)
        {
            if (Build == version)
            {
                return;
            }

            Build      = version;
            _expansion = GetExpansion(version);

            Opcodes.InitializeOpcodeDictionary();
            Handler.ResetHandlers();
            UpdateFields.ResetUFDictionaries();

            ClientVersionBuild tmpFallback = FallbackVersionDefiningBuild(VersionDefiningBuild);

            while (tmpFallback != ClientVersionBuild.Zero)
            {
                try
                {
                    var asm = Assembly.Load($"WowPacketParserModule.{tmpFallback}");
                    Trace.WriteLine($"Loading module WowPacketParserModule.{tmpFallback}.dll (fallback)");

                    Handler.LoadHandlers(asm, tmpFallback);
                }
                catch (FileNotFoundException)
                {
                }
                tmpFallback = FallbackVersionDefiningBuild(tmpFallback);
            }

            try
            {
                var asm = Assembly.Load($"WowPacketParserModule.{VersionDefiningBuild}");
                Trace.WriteLine($"Loading module WowPacketParserModule.{VersionDefiningBuild}.dll");

                HotfixStoreMgr.LoadStores(asm);
                Handler.LoadHandlers(asm, VersionDefiningBuild);
                BattlenetHandler.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);
            }
        }