Как добавить методу четыре параметра и изменять данные в параметрах при нажатии разных кнопок? - C#
Формулировка задачи:
Как добавить методу что ниже, четыре параметра и изменять данные в параметрах при нажатии разных кнопок?
Например:
1) При нажатии 1-ой кнопки в строке Можно в других строках также задавать параметры?
2) Например: При нажатии 1-ой кнопки в строке
unsafe void PatchFilesLevel5()
{
long[] offsets = { 0x111, 0x111 + 0xB8, 0x111 + 0x170 }; /* здесь нужно
делать замену смещений при нажатии разных кнопок*/
byte[] buf4 = new byte[4];
decimal mulitplyBy = numericUpDown111.Value; /* здесь нужно
делать замену ипользуемого numericUpDown при разных кнопках*/
foreach (string fileName in Directory.EnumerateFiles(Application.StartupPath + @"\unpacked2", "scene*"))
{
Match m = Regex.Match(Path.GetFileName(fileName), @"^scene(\d+)$");
if (m.Success)
{
int p = int.Parse(m.Groups[1].Value);
if ((p >= 9 && p <= 11) || p == 12 || p == 14) /*здесь, если вообще можно,
делать замену ипользуемых ((p >= 9 && p <= 11) || p == 12 || p == 14) при разных кнопках*/
{
using (var fstream = new FileStream(fileName, FileMode.Open, FileAccess.ReadWrite, FileShare.None))
{
foreach (long offset in offsets)
{
if (offset + 4 < fstream.Length)
{
fstream.Position = offset;
fstream.Read(buf4, 0, 4);
int n = (int)(mulitplyBy * BitConverter.ToInt32(buf4, 0)); /* здесь нужно
делать замену формулы при нажатии разных кнопок (например при 1-ой кнопке одна формула:
(int)(mulitplyBy * BitConverter.ToInt32(buf4, 0)); при 2-ой кнопке формула меняется */
if (n > 99)
{
n = 99;
}
fixed (byte* b = buf4)
{
*((int*)b) = n;
}
fstream.Position -= 4;
fstream.Write(buf4, 0, 4);
}
}
}
}
}
}
}long[] offsets = { 0x111, 0x111 + 0xB8, 0x111 + 0x170 }; нужно чтоб использовались смещения: { 0x111, 0x111 + 0xB8, 0x111 + 0x170 }); При нажатии 2-ой кнопки чтоб в строке использовались смещения: { 0x222, 0x222 + 0xB8, 0x222 + 0x170 };
Обьяснили как сделать. Можно добавить методу PatchFilesLevel5 параметр offsets типа long unsafe void PatchFilesLevel5(long[] offsets) а в метод нажимаемой кнопки в виде аргумента задавать смещения: buttonPatch1_Click(object sender, EventArgs e)
{
PatchFilesLevel5(new long[]{ 0x111, 0x111 + 0xB8, 0x111 + 0x170 });
}decimal mulitplyBy = numericUpDown111.Value; нужно чтоб использовался numericUpDown111.Value. При нажатии 2-ой кнопки используется numericUpDown222.Value. Меняется используемый numericUpDown.
3) Например: При 1-ой кнопке в строке int n = (int)(mulitplyBy * BitConverter.ToInt32(buf4, 0)); нужно чтоб использовалась одна формула: (int)(mulitplyBy * BitConverter.ToInt32(buf4, 0)); При 2-ой кнопке формула меняется например на (int)(mulitplyBy * BitConverter.ToInt32(buf4, 0)/100); .
4) (Если это возможно сделать) Например: При 1-ой кнопке в строке if ((p >= 9 && p <= 11) || p == 12 || p == 14) нужно чтоб использовались: ((p >= 9 && p <= 11) || p == 12 || p == 14) При 2-ой кнопке например: ((p >= 5 && p <= 20) || p == 50). Решение задачи: «Как добавить методу четыре параметра и изменять данные в параметрах при нажатии разных кнопок?»
textual
Листинг программы
unsafe void PatchFilesLevel5(long[] offsets, Func<int,bool> fileSelector, Func<int,int> intConverter)
{
byte[] buf4 = new byte[4];
foreach (string fileName in Directory.EnumerateFiles(Application.StartupPath + @"\unpacked2", "scene*"))
{
Match m = Regex.Match(Path.GetFileName(fileName), @"^scene(\d+)$");
if (m.Success)
{
int p = int.Parse(m.Groups[1].Value);
if (fileSelector(p))
{
using (var fstream = new FileStream(fileName, FileMode.Open, FileAccess.ReadWrite, FileShare.None))
{
foreach (long offset in offsets)
{
if (offset + 4 < fstream.Length)
{
fstream.Position = offset;
fstream.Read(buf4, 0, 4);
int n = intConverter(BitConverter.ToInt32(buf4, 0));
if (n > 99)
{
n = 99;
}
fixed (byte* b = buf4)
{
*((int*)b) = n;
}
fstream.Position -= 4;
fstream.Write(buf4, 0, 4);
}
}
}
}
}
}
}