Как конвертировать IEnumerable <long>в long - PullRequest
0 голосов
/ 29 декабря 2018

Я делаю проверку версии для игры.Мы нигде не видим версию игры.Мы только что нашли строку версии с чит-движком.И это адрес строки версии = 56 32 2E ?? ?? ?? 00 00

Я использую Memory.DLL для сканирования ArrayOfBytes, затем я хочу изменить его на строку.

Я пробовал много методов, но яне могу это исправить.

ОШИБКА НА ЗДЕСЬ:

using Memory;

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
        while (true)
        {
            int pID = m.getProcIDFromName("Growtopia");

            bool openProc = false;

            if (pID > 0) openProc = m.OpenProcess(pID);
            long myAobScan = m.AoBScan(0x700000000000, 0x7FFFFFFFFFFF, "56 32 2E ?? ?? ?? 00 00").Result; //ERROR AT HERE... // VERSION ADDRESS
            vers.Text = myAobScan.ToString();

            if (openProc)
            {
                m.writeMemory("0x7FF6F22818C7", "bytes", "0x90 0x90"); // BAN BYPASS
            }
        }
}

IEnumerable Params:

public async Task<IEnumerable<long>> AoBScan(long start, long end, string search, bool writable = false, bool executable = true, string file = "")

1 Ответ

0 голосов
/ 29 декабря 2018

IEnumerable может содержать от 0 до нескольких сотен тысяч длин.Итак, ваша проблема в том, что вам нужно знать, КАКОЙ вы долго хотите использовать.

Не зная, как ведет себя AoBScan (просто зная, что параметры не очень полезны для понимания того, что делает метод), трудно сказать, если выожидают от него только одну длинную или если есть из чего выбирать.

При этом для преобразования IEnumerable в один экземпляр необходимо выбрать один из элементов.Есть несколько способов сделать это ...

Вы можете использовать ниже, чтобы вытащить первый

long myAobScan = m.AoBScan(0x700000000000, 0x7FFFFFFFFFFF, "56 32 2E ?? ?? ?? 00 00").Result.First();

Или ниже, чтобы вытащить последний

long myAobScan = m.AoBScan(0x700000000000, 0x7FFFFFFFFFFF, "56 32 2E ?? ?? ?? 00 00").Result.Last();

Или напишите предикат Where, чтобы вытянуть тот, который соответствует критериям, которые вы ожидаете

long myAobScan = m.AoBScan(0x700000000000, 0x7FFFFFFFFFFF, "56 32 2E ?? ?? ?? 00 00").Result.Where(lng => lng > 10);

Все это вытянет ОДНО долго из IEnumerable.Если вам нужно вытащить ВСЕ из них и преобразовать их в строку, это совсем другой вопрос.

...