Как добавить методу четыре параметра и изменять данные в параметрах при нажатии разных кнопок? - 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); } } } } } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д