public static void Apply(Settings settings, int pid) { if (string.Equals(settings.LastUpdate, "unupdated", StringComparison.Ordinal)) { MessageBox.Show("Memory offsets need updating, click the update offsets button."); return; } using (var p = Process.GetProcessById(pid)) { var ptr = IntPtr.Zero; try { ptr = OpenProcess(ProcessFlags, false, pid); if (string.Equals(p.ProcessName, "ffxiv", StringComparison.Ordinal)) { ApplyX86(settings, p, ptr); } else if (string.Equals(p.ProcessName, "ffxiv_dx11", StringComparison.Ordinal)) { ApplyX64(settings, p, ptr); } } finally { if (ptr != IntPtr.Zero) { CloseHandle(ptr); } } } }
private static void ApplyX64(Settings settings, Process process, IntPtr ptr) { var addr = GetAddress(8, process, ptr, settings.DX11_StructureAddress, settings.DX11_ZoomMax); Write(settings.DesiredZoom, ptr, addr); addr = GetAddress(8, process, ptr, settings.DX11_StructureAddress, settings.DX11_ZoomCurrent); Write(settings.DesiredZoom, ptr, addr); addr = GetAddress(8, process, ptr, settings.DX11_StructureAddress, settings.DX11_FovCurrent); Write(settings.DesiredFov, ptr, addr); addr = GetAddress(8, process, ptr, settings.DX11_StructureAddress, settings.DX11_FovMax); Write(settings.DesiredFov, ptr, addr); }
public static Settings Load(string location = null) { var settings = new Settings(); try { var doc = XDocument.Load(location ?? SettingsFile); var root = doc.Element("Root"); foreach (var element in root.Elements()) { switch (element.Name.LocalName) { case "AutoApply": settings.AutoApply = bool.Parse(element.Value); break; case "DX9": settings.DX9_StructureAddress = element.Element("StructureAddress") .Value .Split(',') .Where(x => !string.IsNullOrEmpty(x)) .Select(x => int.Parse(x, NumberStyles.HexNumber, CultureInfo.InvariantCulture)) .ToArray(); settings.DX9_ZoomCurrent = int.Parse(element.Element("ZoomCurrent").Value, NumberStyles.HexNumber, CultureInfo.InvariantCulture); settings.DX9_ZoomMax = int.Parse(element.Element("ZoomMax").Value, NumberStyles.HexNumber, CultureInfo.InvariantCulture); settings.DX9_FovCurrent = int.Parse(element.Element("FovCurrent").Value, NumberStyles.HexNumber, CultureInfo.InvariantCulture); settings.DX9_FovMax = int.Parse(element.Element("FovMax").Value, NumberStyles.HexNumber, CultureInfo.InvariantCulture); break; case "DX11": settings.DX11_StructureAddress = element.Element("StructureAddress") .Value .Split(',') .Where(x => !string.IsNullOrEmpty(x)) .Select(x => int.Parse(x, NumberStyles.HexNumber, CultureInfo.InvariantCulture)) .ToArray(); settings.DX11_ZoomCurrent = int.Parse(element.Element("ZoomCurrent").Value, NumberStyles.HexNumber, CultureInfo.InvariantCulture); settings.DX11_ZoomMax = int.Parse(element.Element("ZoomMax").Value, NumberStyles.HexNumber, CultureInfo.InvariantCulture); settings.DX11_FovCurrent = int.Parse(element.Element("FovCurrent").Value, NumberStyles.HexNumber, CultureInfo.InvariantCulture); settings.DX11_FovMax = int.Parse(element.Element("FovMax").Value, NumberStyles.HexNumber, CultureInfo.InvariantCulture); break; case "DesiredZoom": settings.DesiredZoom = float.Parse(element.Value, CultureInfo.InvariantCulture); if (settings.DesiredZoom < 1f || settings.DesiredZoom > 1000f) { settings.DesiredZoom = 20f; } break; case "DesiredFov": settings.DesiredFov = float.Parse(element.Value, CultureInfo.InvariantCulture); if (settings.DesiredFov < 0.01f || settings.DesiredFov > 3f) { settings.DesiredFov = 0.78f; } break; case "LastUpdate": settings.LastUpdate = element.Value; break; } } } catch { /* xml failed to load, lose settings */ } return settings; }