////////////////////////////////////////////////////////////////////////////////////////////////
 /*--------------------------------------------------------------------------------------------*/
 public PropertyMapping(DomainProperty pDom, ApiProperty pApi,
                        CustomDir pCustom = CustomDir.Neither)
 {
     Domain = pDom;
     Api    = pApi;
     Custom = pCustom;
 }
        public override void Execute(CustomDirectoriesViewModel contextViewModel, object parameter)
        {
            if (parameter is not CustomDirectory customDir)
            {
                customDir = new CustomDirectory();
            }

            Helper.OpenWindow <AdonisWindow>("Custom Directory", () =>
            {
                var index  = contextViewModel.GetIndex(customDir);
                var input  = new CustomDir(customDir);
                var result = input.ShowDialog();
                if (!result.HasValue || !result.Value || string.IsNullOrEmpty(customDir.Header) && string.IsNullOrEmpty(customDir.DirectoryPath))
                {
                    return;
                }

                if (index > 1)
                {
                    contextViewModel.Edit(index, customDir);
                }
                else
                {
                    contextViewModel.Add(customDir);
                }
            });
        }
Exemple #3
0
        internal static void CheckArguments()
        {
            if (CmdLineChecked)
            {
                return;
            }
            CmdLineChecked = true;
            string[] Commands = Environment.GetCommandLineArgs();

            if (Ini.GetConfigStatus(CfgName, "WorkingDir;WorkDir;DataDir", IniPath) == Ini.ConfigStatus.Ok)
            {
                CustomDir = Ini.GetConfig(CfgName, "WorkingDir;WorkDir;DataDir", IniPath, true);
                if (!CustomDir.EndsWith("\\"))
                {
                    CustomDir += '\\';
                }
            }

            if (Ini.GetConfig(CfgName, "Debug", IniPath, false).ToLower() == "true")
            {
                AppendArray(ref Commands, "-debug");
            }
            if (Ini.GetConfig(CfgName, "Delay", IniPath, false).ToLower() == "true")
            {
                AppendArray(ref Commands, "-delay");
            }
            if (Ini.GetConfig(CfgName, "Log;LogAll", IniPath, false).ToLower() == "true")
            {
                AppendArray(ref Commands, "-log");
            }
            if (Ini.GetConfig(CfgName, "LogInput;LogIn", IniPath, false).ToLower() == "true")
            {
                AppendArray(ref Commands, "-loginput");
            }
            if (Ini.GetConfig(CfgName, "LogOutput;LogOut", IniPath, false).ToLower() == "true")
            {
                AppendArray(ref Commands, "-logoutput");
            }
            if (Ini.GetConfig(CfgName, "Unsafe", IniPath, false).ToLower() == "true")
            {
                AppendArray(ref Commands, "-unsafe");
            }
            if (Ini.GetConfig(CfgName, "LogFile", IniPath, false).ToLower() == "true")
            {
                AppendArray(ref Commands, "-logfile");
            }
            if (Ini.GetConfig(CfgName, "DetectText", IniPath, false).ToLower() == "true")
            {
                AppendArray(ref Commands, "-detectstr");
            }
            if (Ini.GetConfig(CfgName, "Dump", IniPath, false).ToLower() == "true")
            {
                AppendArray(ref Commands, "-dump");
            }
            if (Ini.GetConfig(CfgName, "DumpRetail", IniPath, false).ToLower() == "true")
            {
                AppendArray(ref Commands, "-dumpretail");
            }

            if (Commands?.Length == 0)
            {
                return;
            }

            foreach (string Command in Commands)
            {
                switch (Command.ToLower().TrimStart('-', '/', '\\', ' '))
                {
                case "litemode":
                case "fastmode":
                case "compatibilitymode":
                case "compatibility":
                    LiteMode = true;
                    break;

                case "showlogwindow":
                case "showconsole":
                case "console":
                case "debug":
                    Debugging = true;
                    break;

                case "logdelay":
                case "delaytest":
                case "pingtest":
                case "delay":
                    Log("Delay Test Mode - Enabled");
                    DelayTest = true;
                    break;

                case "recovery":
                case "recoverytl":
                case "dumptranslation":
                case "dump":
                    if (!File.Exists(TLMap))
                    {
                        Log("How you want dump the string if you don't have one?");
                        continue;
                    }
                    DumpData();
                    break;

                case "dumporiginal":
                case "restorelist":
                case "retranslate":
                case "dumptotl":
                case "dumpretail":
                    if (!File.Exists(TLMap))
                    {
                        Log("How you want dump the string if you don't have one?");
                        continue;
                    }
                    DumpData(true);
                    break;

                case "reloaddb":
                case "updatedb":
                case "refreshdb":
                case "refreshdatabase":
                case "reconstruct":
                case "rebuild":
                    if (!File.Exists(TLMapSrc))
                    {
                        continue;
                    }
                    if (File.Exists(TLMap))
                    {
                        File.Delete(TLMap);
                    }
                    CompileStrMap();
                    break;

                case "unsafe":
                case "nodialogcheck":
                case "noverifyfrist":
                    DialogFound = true;
                    break;

                case "log":
                case "debugstring":
                case "debugencoding":
                case "encodingtest":
                    Log("String Deubugger Enabled", true);
                    LogAll = true;
                    break;

                case "loginput":
                case "login":
                    Log("Input Log Enabled", true);
                    LogInput = true;
                    break;

                case "logout":
                case "logoutput":
                    Log("Output Log Enabled", true);
                    LogOutput = true;
                    break;

                case "dumptext":
                case "dumpstr":
                case "detectstr":
                case "detectstring":
                case "detecttext":
                case "detecttxt":
                    Log("String Dumping Filter Enabled", true);
                    DumpStrOnly = true;
                    break;

                case "about":
                case "credits":
                    Log("Credits:\n-String Reloader - Soft-Translation Engine\nCreated by Marcussacana");
                    break;

                case "logfile":
                case "fileoutput":
                case "debugfile":
                    LogFile = true;
                    break;

                case "whatisthis":
                case "wtf":
                case "help":
                case "?":
                    Log("Help:\nParameters:\tAction:\nDump\t\tDump all content of the Strings.srl to the game directory\nUnsafe\t\tDon't ignore strings while don't recive a text line.\nDumpText\tEnable Dialog Filter in the debugger dump (Latim only)\nDumpRetail\tDump the text to Retranslation\nRebuild\t\tForce rebuild the Strings.srl from the Strings.lst\nLogFile\tWrite debug output to a plain text file.\n\nDelay Test\tShow the delay from a string reload\nLog\t\tLog all string input/output bytes\nCredits\t\tShow credits message\nHelp\t\tShow this message");
                    break;
                }
            }
        }
Exemple #4
0
        /// <summary>
        /// Load All Configs from the INI file.
        /// </summary>
        private static void LoadConfig()
        {
            SpecialLineBreaker        = false;
            EnableWordWrap            = false;
            AntiCrash                 = false;
            DecodeCharactersFromInput = false;
            InvalidateWindow          = false;
            LiteralMaskMatch          = false;
            DisableMasks              = false;
            DialogCheck               = true;
            FreeOnExit                = false;
            CachePointers             = false;
            TrimRangeMismatch         = false;
            Unicode              = false;
            MultipleDatabases    = false;
            OverlayEnabled       = false;
            NoReload             = false;
            NoTrim               = false;
            ReloadMaskParameters = false;
            LiteMode             = false;
            RemoveIlegals        = false;
            AsianInput           = false;
            QuoteList            = new Quote[0];
            Sensitivity          = 3;
            UseDatabase          = false;
            AutoUnks             = false;
            UndoChars            = false;
            CaseSensitive        = false;
            ForceTrim            = false;
            NotCachedOnly        = false;
            AllowEmpty           = false;
            ImportHook           = false;
            HookCreateWindowEx   = false;
            HookShowWindow       = false;
            HookSetWindowPos     = false;
            HookMoveWindow       = false;
            CheckProportion      = false;
            Seconds              = 0;
            MinSize              = 0;

            DenyList   = new string[0];
            IgnoreList = new string[0];
            RldPrefix  = string.Empty;
            RldSufix   = string.Empty;

            SRLSettings      Settings;
            OverlaySettings  OverlaySettings;
            WordwrapSettings WordwrapSettings;
            FilterSettings   FilterSettings;
            HookSettings     HookSettings;
            IntroSettings    IntroSettings;

            AdvancedIni.FastOpen(out Settings, IniPath);
            AdvancedIni.FastOpen(out OverlaySettings, IniPath);
            AdvancedIni.FastOpen(out WordwrapSettings, IniPath);
            AdvancedIni.FastOpen(out FilterSettings, IniPath);
            AdvancedIni.FastOpen(out HookSettings, IniPath);
            AdvancedIni.FastOpen(out IntroSettings, IniPath);

            Log(Initialized ? "Reloading Settings..." : "Loading Settings...", true);


            if (Settings.LiteMode)
            {
                LiteMode = true;
            }

            if (Settings.InEncoding != null)
            {
                Log("Loading Read Encoding Config...", true);
                ReadEncoding = ParseEncodingName(Settings.InEncoding);
            }

            if (Settings.OutEncoding != null)
            {
                Log("Loading Write Encoding Config...", true);
                WriteEncoding = ParseEncodingName(Settings.OutEncoding);

                if (Debugging)
                {
                    Console.OutputEncoding = WriteEncoding;
                }
            }

            if (Settings.Wide)
            {
                Log("Wide Character Mode Enabled...", true);
                Unicode = true;
            }

            if (Settings.Multithread)
            {
                if (Initialized && !Multithread)
                {
                    Warning("The Multithread Settings Changed - Restart Required");
                }
                else
                {
                    Log("Multithreaded Game Support Enabled", true);
                    Multithread = true;
                }
            }
            else if (Initialized && Multithread)
            {
                Warning("The Multithread Settings Changed - Restart Required");
            }

            if (!string.IsNullOrWhiteSpace(FilterSettings.DenyList))
            {
                Log("Custom Denied Chars List Loaded...", true);
                DenyList = FilterSettings.DenyList.Split(',');
            }

            if (FilterSettings.UseDB)
            {
                Log("Filter with Database Enabled", true);
                UseDatabase = true;
            }

            if (Settings.TrimRangeMismatch)
            {
                Log("Trim Mismatch Ranges Enabled...", true);
                TrimRangeMismatch = true;
            }

            if (Settings.CachePointers)
            {
                Warning("Pointer Cache Enabled...", true);
                CachePointers = true;
            }

            if (Settings.FreeOnExit)
            {
                Warning("Memory Leak Prevention Enabled...", true);
                FreeOnExit = true;
            }

            if (Settings.NoDialogCheck)
            {
                Warning("Dialog Check Disabled...", true);
                DialogCheck = false;
            }

            if (Settings.LiteralMaskMatch)
            {
                Log("Literal Mask Matching Enabled...", true);
                LiteralMaskMatch = true;
            }
            if (Settings.MultiDatabase)
            {
                Log("Multidatabase's Matching Method Enabled...", true);
                MultipleDatabases = true;
            }

            if (Settings.AsianInput)
            {
                Log("Asian Text Mode Enabled...", true);
                AsianInput = true;
            }

            if (Settings.AutoUnks)
            {
                Log("Auto Unk Char Reload Enabled...", true);
                AutoUnks = true;
            }

            if (Settings.DisableMask)
            {
                DisableMasks = true;
                Log("Masks Reloader Disabled...", true);
            }

            if (Settings.WindowHook)
            {
                Log("Enabling Window Reloader...", true);
                new Thread(() => WindowHook()).Start();

                if (Settings.InvalidateWindow)
                {
                    Log("Invalidate Window Mode Enabled.", true);
                    InvalidateWindow = true;
                }
            }

            if (!string.IsNullOrWhiteSpace(Settings.AcceptableRanges))
            {
                LoadRanges();
            }

            if (Settings.DecodeFromInput)
            {
                Log("Enabling Character Reloader Decoding From Input...", true);
                DecodeCharactersFromInput = true;
            }

            if (Settings.NoTrim)
            {
                Log("Disabling Trim Service...", true);
                NoTrim = true;
            }

            if (Settings.ReloadMaskParameters)
            {
                Log("Enabling Mask Parameters Reloader...", true);
                ReloadMaskParameters = true;

                if (!Settings.Multithread)
                {
                    Warning("You can't use the PIPE service with the Mask Parameter Reloader Feature, Enabling Multithreaded Game Support...");
                    Settings.Multithread = true;
                    Multithread          = true;
                }
            }

            if (Settings.NoReload)
            {
                NoReload = true;
                Warning("String Injection Disabled by User...", true);
            }

            if (Settings.RemoveViolations)
            {
                RemoveIlegals = true;
                Warning("Violation remover enabled, please, consider manual repair...");
            }

            if (Settings.NotCachedOnly)
            {
                NotCachedOnly = true;
                Log("Not Cached Only Reloader Mode Enabled", true);
            }

            if (Settings.AllowEmptyReloads)
            {
                AllowEmpty = true;
                Log("Empty Reloader Filter Disabled", true);
            }

            if (!Initialized && Settings.AllowDuplicates)
            {
                AllowDuplicates = true;
                Log("Duplicate Reload Support Enabled", true);
            }
            else if (Settings.AllowDuplicates != AllowDuplicates)
            {
                Warning("Duplicate Reload Support Changed - Restart Required");
            }

            if (Settings.SetOutputEncoding)
            {
                Log("Console Output Encoding Changed", false);
                if (!Debugging)
                {
                    ConsoleShowed = false;
                    HideConsole();
                }
            }

            RldPrefix = Settings.ReloadedPrefix;
            RldSufix  = Settings.ReloadedSufix;

            CaseSensitive = Settings.CaseSensitive;

            if (OverlaySettings.Enable)
            {
                OverlayEnabled = true;
                ShowNonReloads = OverlaySettings.ShowNonReloaded;

                if (!File.Exists(OEDP))
                {
                    Error("Can't Enabled the Overlay Because the Overlay.dll is missing.");
                }
                else
                {
                    Log("Overlay Allowed.", true);
                }
            }

            if (!string.IsNullOrWhiteSpace(Settings.CustomCredits))
            {
                CustomCredits = Settings.CustomCredits;

                //Just if you wanna hide from kids trying fake it. :)
                if (CustomCredits.StartsWith("Fx"))
                {
                    byte[] Coded = ParseHex(CustomCredits.Replace("Fx", "0x"));
                    for (int i = 0; i < Coded.Length; i++)
                    {
                        Coded[i] ^= 0xFF;
                    }

                    CustomCredits = Encoding.UTF8.GetString(Coded);
                }

                if (CustomCredits.StartsWith("0x"))
                {
                    CustomCredits = Encoding.UTF8.GetString(ParseHex(CustomCredits));
                }
            }

            if (!string.IsNullOrWhiteSpace(OverlaySettings.Padding))
            {
                PaddingSeted = false;
                string Padding = OverlaySettings.Padding;
                foreach (string Parameter in Padding.Split('|'))
                {
                    try {
                        string Border = Parameter.Split(':')[0].Trim().ToLower();
                        int    Value  = int.Parse(Parameter.Split(':')[1].Trim());
                        switch (Border)
                        {
                        case "top":
                            OPaddingTop = Value;
                            break;

                        case "bottom":
                            OPaddinBottom = Value;
                            break;

                        case "rigth":
                            OPaddingRigth = Value;
                            break;

                        case "left":
                            OPaddinLeft = Value;
                            break;

                        default:
                            Error("\"{0}\" Isn't a valid Padding Border", Border);
                            break;
                        }
                    } catch {
                        Error("\"{0}\" Isn't a valid Padding Parameter", Parameter);
                    }
                }
            }

            if (Settings.LiveSettings)
            {
                if (SettingsWatcher == null)
                {
                    Log("Enabling Live Settings....", true);
                    SettingsWatcher = new Thread(() => {
                        DateTime Before = new FileInfo(IniPath).LastWriteTime;
                        while (true)
                        {
                            DateTime Now = new FileInfo(IniPath).LastWriteTime;
                            if (Before != Now)
                            {
                                Before = Now;
                                Thread.Sleep(500);
                                LoadConfig();
                            }
                            Thread.Sleep(500);
                        }
                    });
                    SettingsWatcher.Start();
                }
            }
            else if (SettingsWatcher != null)
            {
                SettingsWatcher.Abort();
                SettingsWatcher = null;
            }

            if (Settings.AntiCrash)
            {
                if (!Initialized)
                {
                    Log("Enabling Crash Handler...", true);
                    System.Windows.Forms.Application.ThreadException += ProcessOver;
                    AppDomain.CurrentDomain.UnhandledException       += ProcessOver;
                    AntiCrash = true;
                }
            }

            if (WordwrapSettings.Enabled)
            {
                Log("Wordwrap Enabled.", true);
                EnableWordWrap = true;
                MaxWidth       = WordwrapSettings.Width;
                Monospaced     = WordwrapSettings.Monospaced;
                FakeBreakLine  = WordwrapSettings.FakeBreakLine;

                if (!Monospaced)
                {
                    Font = new Font(WordwrapSettings.FontName, WordwrapSettings.Size, WordwrapSettings.Bold ? FontStyle.Bold : FontStyle.Regular, GraphicsUnit.Pixel);
                }
            }

            if (!string.IsNullOrEmpty(Settings.GameLineBreaker))
            {
                GameLineBreaker    = Settings.GameLineBreaker;
                SpecialLineBreaker = true;
            }

            if (!string.IsNullOrEmpty(FilterSettings.IgnoreList))
            {
                Log("Using Custom Ignore List...", true);
                string IgnoreList = FilterSettings.IgnoreList;
                if (!IgnoreList.StartsWith(">>"))
                {
                    MatchDel = new string[0];
                }
                else
                {
                    IgnoreList = IgnoreList.Substring(2);
                }
                foreach (string str in IgnoreList.Split(','))
                {
                    if (str.Trim().StartsWith("0x"))
                    {
                        string Del = Encoding.UTF8.GetString(ParseHex(str.Trim()));
                        AppendArray(ref MatchDel, Del, true);
                    }
                    else
                    {
                        AppendArray(ref MatchDel, str.Replace(BreakLineFlag, "\n").Replace(ReturnLineFlag, "\r"), true);
                    }
                }
            }

            if (!string.IsNullOrEmpty(FilterSettings.TrimList))
            {
                Log("Using Custom Trim List...", true);
                TrimChars = new string[0];
                foreach (string str in FilterSettings.TrimList.Split(','))
                {
                    if (str.Trim().StartsWith("0x"))
                    {
                        string Trim = Encoding.UTF8.GetString(ParseHex(str.Trim()));
                        AppendArray(ref TrimChars, Trim, true);
                    }
                    else
                    {
                        AppendArray(ref TrimChars, str.Replace(BreakLineFlag, "\n").Replace(ReturnLineFlag, "\r"), true);
                    }
                }
            }
            if (!string.IsNullOrEmpty(FilterSettings.QuoteList))
            {
                Log("Using Custom Quotes...", true);
                foreach (string str in FilterSettings.TrimList.Split(','))
                {
                    if (string.IsNullOrEmpty(str))
                    {
                        continue;
                    }
                    AppendArray(ref QuoteList, new Quote()
                    {
                        Start = str.First(),
                        End   = str.Last()
                    }, true);
                    Ranges.Add(new Range()
                    {
                        Min = str.First(),
                        Max = str.First()
                    });
                    Ranges.Add(new Range()
                    {
                        Min = str.Last(),
                        Max = str.Last()
                    });
                }
            }

            if (FilterSettings.Sensitivity != 2)
            {
                Log("Dialogue Sensitivity Level Changed to {0}", true, FilterSettings.Sensitivity);
                Sensitivity = FilterSettings.Sensitivity;
            }

            if (FilterSettings.ForceTrim)
            {
                Log("Dialogue Filter Trim Enforcement Enabled", true);
                ForceTrim = true;
            }

            if (!string.IsNullOrWhiteSpace(Settings.WorkDirectory))
            {
                CustomDir = Settings.WorkDirectory.TrimStart(' ', '\\', '/').Replace("/", "\\");
                if (!CustomDir.EndsWith("\\"))
                {
                    CustomDir += '\\';
                }

                if (!Directory.Exists(BaseDir))
                {
                    Directory.CreateDirectory(BaseDir);
                }

                Log("Custom Directory Loaded", true);
            }

            if (HookSettings.CreateFile)
            {
                if (!HookCreateFile)
                {
                    InstallCreateFileHooks();
                }
                HookCreateFile = true;
                Log("CreateFile Hook Enabled", true);
            }
            else if (HookGlyphOutline)
            {
                Warning("CreateFile Hook Settings Changed - Restart Required");
            }

            if (HookSettings.GetGlyphOutline)
            {
                if (!HookGlyphOutline)
                {
                    InstallGlyphHooks();
                }
                HookGlyphOutline = true;
                Log("GetGlyphOutline Hook Enabled", true);
            }
            else if (HookGlyphOutline)
            {
                Warning("GetGlyphOutline Hook Settings Changed - Restart Required");
            }

            if (HookSettings.TextOut)
            {
                if (!HookTextOut)
                {
                    InstallTextOutHooks();
                }
                HookTextOut = true;
                Log("TextOut Hook Enabled", true);
            }
            else if (HookTextOut)
            {
                Warning("TextOut Hook Settings Changed - Restart Required");
            }

            if (HookSettings.ExtTextOut)
            {
                if (!HookExtTextOut)
                {
                    InstallExtTextOutHooks();
                }
                HookExtTextOut = true;
                Log("ExtTextOut Hook Enabled", true);
            }
            else if (HookExtTextOut)
            {
                Warning("ExtTextOut Hook Settings Changed - Restart Required");
            }

            if (HookSettings.CreateFont)
            {
                if (!HookCreateFont)
                {
                    InstallCreateFontHooks();
                }
                HookCreateFont = true;
                Log("CreateFont Hook Enabled", true);
            }
            else if (HookCreateFont)
            {
                Warning("CreateFont Hook Settings Changed - Restart Required");
            }

            if (HookSettings.CreateFontIndirect)
            {
                if (!HookCreateFontIndirect)
                {
                    InstallCreateFontIndirectHooks();
                }
                HookCreateFontIndirect = true;
                Log("CreateFontIndirect Hook Enabled", true);
            }
            else if (HookCreateFontIndirect)
            {
                Warning("CreateFontIndirect Hook Settings Changed - Restart Required");
            }

#if DEBUG
            if (HookSettings.SendMessage)
            {
                if (!HookSendMessage)
                {
                    InstallSendMessageHooks();
                }
                HookSendMessage = true;
                Log("SendMessage Hook Enabled", true);
            }
            else if (HookSendMessage)
            {
                Warning("SendMessage Hook Settings Changed - Restart Required");
            }

            if (HookSettings.CreateWindow)
            {
                if (!HookCreateWindow)
                {
                    InstallCreateWindowHooks();
                }
                HookCreateWindow = true;
                Log("CreateWindow Hook Enabled", true);
            }
            else if (HookCreateWindow)
            {
                Warning("CreateWindow Hook Settings Changed - Restart Required");
            }

            if (HookSettings.CreateWindowEx)
            {
                if (!HookCreateWindowEx)
                {
                    InstallCreateWindowExHooks();
                }
                HookCreateWindowEx = true;
                Log("CreateWindowEx Hook Enabled", true);
            }
            else if (HookCreateWindowEx)
            {
                Warning("CreateWindowEx Hook Settings Changed - Restart Required");
            }
#endif
            if (HookSettings.SetWindowText)
            {
                if (!HookSetWindowText)
                {
                    InstallSetWindowTextHooks();
                }
                HookSetWindowText = true;
                Log("SetWindowText Hook Enabled", true);
            }
            else if (HookSetWindowText)
            {
                Warning("SetWindowText Hook Settings Changed - Restart Required");
            }
            new Thread(() => {
                while (!DialogFound)
                {
                    Thread.Sleep(100);
                }
                if (HookSettings.MultiByteToWideChar)
                {
                    if (!HookMultiByteToWideChar)
                    {
                        InstallMultiByteToWideChar();
                    }
                    HookMultiByteToWideChar = true;
                    Log("MultiByteToWideChar Hook Enabled", true);
                }
                else if (HookMultiByteToWideChar)
                {
                    Warning("MultiByteToWideChar Hook Settings Changed - Restart Required");
                }
            }).Start();

            if (HookSettings.UndoChars)
            {
                UndoChars = true;
                Log("Hook Char Reloader Restoration Enabled", true);
            }
            if (HookSettings.FontCharset != 0)
            {
                FontCharset = HookSettings.FontCharset;
                Log("Font Hook Charset 0x{0:X2}", true, FontCharset);
            }

            if (!string.IsNullOrWhiteSpace(HookSettings.FaceName))
            {
                FontFaceName = HookSettings.FaceName;
                Log("Font Hook FaceName: {0}", true, FontFaceName);
            }
            else
            {
                FontFaceName = string.Empty;
                while (Ini.GetConfigStatus($"Hook.Font.{FontReplaces.Count}", "FromFont;From;SourceFont;Source", IniPath) == Ini.ConfigStatus.Ok)
                {
                    string KEY = $"Hook.Font.{FontReplaces.Count}";
                    string FN  = Ini.GetConfig(KEY, "FromFont;From;SourceFont;Source", IniPath).Trim();
                    FontReplaces.Add(FN, new FontRedirect()
                    {
                        From = FN,
                        To   = Ini.GetConfig(KEY, "ToFont;To;TargetFont;Target", IniPath),
                        Size = Ini.GetConfig(KEY, "ChageSize;Size;DiffSize;NewSize", IniPath)
                    });
                }
                if (FontReplaces.Count != 0)
                {
                    Log("{0} Font Replacement Loaded", true, FontReplaces.Count);
                }
            }

            if (IntroSettings.CreateWindowEx)
            {
                HookCreateWindowEx = true;

                Log("Intro Injector (CreateWindowEx) Enabled", true);
            }

            if (IntroSettings.ShowWindow)
            {
                HookShowWindow = true;

                Log("Intro Injector (ShowWindow) Enabled", true);
            }

            if (IntroSettings.SetWindowPos)
            {
                HookSetWindowPos = true;

                Log("Intro Injector (SetWindowPos) Enabled", true);
            }
            if (IntroSettings.MoveWindow)
            {
                HookMoveWindow = true;

                Log("Intro Injector (MoveWindow) Enabled", true);
            }

            if (IntroSettings.CheckProportion)
            {
                CheckProportion = true;

                Log("Intro Injector Proportion Validator Enabled", true);
            }

            if (HookSettings.ImportHook)
            {
                ImportHook = true;
                Log("Import Table Hook Method Enabled", true);
            }

            if (IntroSettings.Seconds > 0)
            {
                Seconds = IntroSettings.Seconds;
            }

            if (IntroSettings.MinSize > 0)
            {
                MinSize = IntroSettings.MinSize;
            }

            Log("Settings Loaded.", true);

            if (Managed)
            {
                Log("Managed Mode Enabled, Enforcing Compatible Settings", true);
                //OverlayEnabled = false;
                WriteEncoding = ReadEncoding = Encoding.Unicode;
#if TRACE
                Multithread = true;
#endif
                if (Debugging)
                {
                    LogFile = true;
                }
            }
        }