Как добавить методу четыре параметра и изменять данные в параметрах при нажатии разных кнопок? - C#

Узнай цену своей работы

Формулировка задачи:

Как добавить методу что ниже, четыре параметра и изменять данные в параметрах при нажатии разных кнопок?
     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);
                                }
                            }
                        }
                    }
                }
            }
        }
Например: 1) При нажатии 1-ой кнопки в строке 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 }); 
}
Можно в других строках также задавать параметры? 2) Например: При нажатии 1-ой кнопки в строке 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);
                        }
                    }
                }
            }
        }
    }
}

Оцени полезность:

15   голосов , оценка 3.933 из 5
Похожие ответы