mirror of
https://github.com/kwsch/NHSE.git
synced 2026-03-22 09:44:49 -05:00
98 lines
2.4 KiB
C#
98 lines
2.4 KiB
C#
using System;
|
|
using System.Windows.Forms;
|
|
using NHSE.Injection;
|
|
|
|
namespace NHSE.WinForms;
|
|
|
|
public sealed class SysBotController(InjectionType type)
|
|
{
|
|
public readonly SysBot Bot = new();
|
|
|
|
private static SysBotSettings Config => Program.Settings.SysBot;
|
|
|
|
public string IP => Config.IP;
|
|
public string Port => Config.Port.ToString();
|
|
|
|
public bool Connect(string ip, string port)
|
|
{
|
|
if (!int.TryParse(port, out var p))
|
|
p = 6000;
|
|
|
|
try
|
|
{
|
|
Bot.Connect(ip, p);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
WinFormsUtil.Error(ex.Message);
|
|
return false;
|
|
}
|
|
|
|
Config.IP = ip;
|
|
Config.Port = p;
|
|
|
|
return true;
|
|
}
|
|
|
|
public uint GetDefaultOffset() => type switch
|
|
{
|
|
InjectionType.Generic => Config.GenericOffset,
|
|
InjectionType.Pouch => Config.PouchOffset,
|
|
_ => throw new ArgumentOutOfRangeException(nameof(type), type, null),
|
|
};
|
|
|
|
public void SetOffset(uint value)
|
|
{
|
|
switch (type)
|
|
{
|
|
case InjectionType.Generic: Config.GenericOffset = value; break;
|
|
case InjectionType.Pouch: Config.PouchOffset = value; break;
|
|
default: return;
|
|
}
|
|
}
|
|
|
|
public void HexEdit(uint offset, int length)
|
|
{
|
|
var read = ReadBytes(offset, length);
|
|
using var ram = new SimpleHexEditor(read);
|
|
if (ram.ShowDialog() != DialogResult.OK)
|
|
return;
|
|
|
|
var write = ram.Bytes;
|
|
if (read.Length != write.Length)
|
|
{
|
|
var prompt = WinFormsUtil.Prompt(MessageBoxButtons.OKCancel,
|
|
string.Format(MessageStrings.MsgDataSizeMismatchRAM, read.Length, write.Length),
|
|
MessageStrings.MsgAskWriteAnyway);
|
|
|
|
if (prompt != DialogResult.OK)
|
|
return;
|
|
}
|
|
|
|
WriteBytes(ram.Bytes, offset);
|
|
SetOffset(offset);
|
|
System.Media.SystemSounds.Asterisk.Play();
|
|
}
|
|
|
|
public void PopPrompt()
|
|
{
|
|
if (Config.Prompted)
|
|
return;
|
|
|
|
WinFormsUtil.Alert(MessageStrings.MsgSysBotInfo, MessageStrings.MsgSysBotRequired);
|
|
Config.Prompted = true;
|
|
}
|
|
|
|
public void WriteBytes(byte[] data, uint offset)
|
|
{
|
|
Bot.WriteBytes(data, offset);
|
|
SetOffset(offset);
|
|
}
|
|
|
|
public byte[] ReadBytes(uint offset, int length)
|
|
{
|
|
var result = Bot.ReadBytes(offset, length);
|
|
SetOffset(offset);
|
|
return result;
|
|
}
|
|
} |