Перейти к содержанию
Авторизация  
Razi

[Cheat Engine] Как лучше сделать трейнер на считку/запись из адреса?

Рекомендуемые сообщения

Тема CE Lua скриптов очень интересная. Жаль у меня мало свободного времени на эксперименты с таблицами на формах на  CE Lua.

 

22 часа назад, Razi сказал:

В визуальном плане в конструкторе форм получается все довольно неплохо. Выглядит нормально. Думал будет намного хуже.

 

Есть еще вариант написать модуль dll на Лазаре с таблицей. Работать с модулем через Cheat Engine

На Лазаре можно делать вот такие красивые таблички. Форму в модуль сохранить и работать с функциями модуля.

Но проблема с оптимизацией таким способом может не решаться.

 

22 часа назад, Razi сказал:

Но есть одна проблема. Через час после включения трейнер жрет 700 мб памяти и загружает процессор до 50%. (И с каждой секундой поглощение памяти увеличивается на 3 мб). Может можно что-то сделать, как-то оптимизировать код? Код написан в версии CE 6.5, может в версии 6.7 такого уже нет? В общем посоветуйте, что можно сделать? Если конечно можно.

 

1. Чистить кеш памяти. Я писал об этом в блоге.

2. Избегать постоянной записи в edit, если этого не требуется. Например кешировать значение в edit-е в переменной Lua, если это значение отличается, то только тогда обращаться к edit.

Т.е. не так

    local addr = addr + 0x84*6
    UDF1["CEEdit"..x].Text = readBytes(addr+(x-15*6))

А например так

    local value = readBytes(addr+(x-15*6))
    if table_Cash[i].cash == value then
      table_Cash[i].cash = value
      table_Cash[i].edit.Text = value
    end

И тут не используем конструкцию вида UDF1["CEEdit"..x], т.к. скорее всего это как раз увеличивает объемы мусора и нагрузку на его чистку. Т.е. сделать table_Cash = {} и запись разовую сделать по циклу для всех Edit-ов.

 

Как оптимизировать Lua код? Сравнивать его выполнение по скорости и объему мусора. Сравнение по скорости я писал в блоге, а сравнить кеш мусора до и после можно добавить.

print(string.format('Lua memory usage %.1f MiB',collectgarbage('count')/1024))

Вообще, это конечно CE Lua — это такие заморочки.  Даже мне неловко предлагать эти решения. Проще на том же Лазаре таблицу сделать, да чтение памяти и запись. И exe скорее всего будет меньше по размеру и таблички красивее

  • Понравилось 1
  • Плюс 2

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пробовал на версии 6.7, такой же результат, ест столько же памяти.

 

6 часов назад, MasterGH сказал:

Есть еще вариант написать модуль dll на Лазаре с таблицей. Работать с модулем через Cheat Engine

На Лазаре можно делать вот такие красивые таблички. Форму в модуль сохранить и работать с функциями модуля.

Ну если не смогу на CE Lua сделать адекватный трейнер, тогда можно будет смотреть на другие варианты. Таблички или editbox неважно. Главное чтоб трейнер работал, а как он будет выглядеть, не главное. Это 1-ый трейнер, который пытаюсь сделать.

 

6 часов назад, MasterGH сказал:

Чистить кеш памяти. Я писал об этом в блоге.

Делал это, помогает. Но что будет через 3-5 часов работы трейнера, не проверял, проверялось только час, не больше. А трейнер нужно чтоб работал по 10-15 часов. Если прохождение игры занимает 70-180 часов. И нужно чтоб трейнер был включен все это время, хотя бы часов 100-150.

 

6 часов назад, MasterGH сказал:

Избегать постоянной записи в edit, если этого не требуется.

А вот это надо попробовать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
В 26.02.2018 в 15:36, MasterGH сказал:

      table_Cash[i].edit.Text = value

Не очень понял эту конструкцию :(
А точнее что должно лежать в table_Cash?
К примеру там будет лежать
 

local table_Cash = { UDF1.CEEdit1, .. }

но тогда 
 

table_Cash[i].edit.Text = value

будет ругаться на "edit".

Изменено пользователем ReWanet

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
1 час назад, ReWanet сказал:

Не очень понял эту конструкцию :(

 

Сначала предварительно создается и заполняется таблица edit-ами. А потом с ними уже работаем :)

Спойлер

function CreateTable(form)
  tableEdits = {}
  for i=1,5 do
     tableEdits[i] = {}
     local edit = createEdit(UDF1)
     tableEdits[i].edit = edit
     tableEdits[i].lastText = edit.Text
     edit.Top = 20 + i * edit.Height + 2
     edit.Left = 10
  end
  return tableEdits
end

local cashTable = CreateTable(UDF1)
cashTable[1].edit.Text = 'ReWanet'

 

Спойлер

image.png

 

 Забыл, еще форму создать либо кодом, либо через инспектор

  • Плюс 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
39 минут назад, MasterGH сказал:

Сначала предварительно создается и заполняется таблица edit-ами. А потом с ними уже работаем :)

Ну то есть все же я правильно понял ( код ниже в том же сообщение )? 

local table_Cash = { UDF1.CEEdit1, .. }

Или же есть какая-то разница в заполнение? ( конечно это лишь пример заполнить можно и через цикл а не руками ) 

Изменено пользователем ReWanet

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
13 минут назад, ReWanet сказал:

Или же есть какая-то разница в заполнение?

Я могу тебе предложить узнать это. Я не знаю )

Проверять надо, в том числе на синтаксис, на скорость выполнения и на мусор в памяти. Тогда можно найти лучший вариант или выбрать любой

  • Плюс 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
1 минуту назад, MasterGH сказал:

Я могу тебе предложить узнать это. Я не знаю )

Ну пойду тогда узнаю ) Если что в комментарий этот же ответ напишу думаю ТС будет интересно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
33 minutes ago, ReWanet said:

Ну то есть все же я правильно понял

 

Да, всё примерно так, как ты и описываешь, за исключением что структура у Андрея получается следующая (можешь пока не смотреть и проверить меня как посмотришь сам :)):

Spoiler

local table_Cash = {
  {
    edit = UDF1.CEEdit1,
    lastText = ''
  },
  {
    edit = UDF1.CEEdit2,
    lastText = ''
  }
  -- ...
}

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
12 минут назад, srg91 сказал:

Да, всё примерно так, как ты и описываешь, за исключением что структура у Андрея получается следующая (можешь пока не смотреть и проверить меня как посмотришь сам :)):

Да понял. Ну и это удобней :D 

Изменено пользователем ReWanet

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Хороший тутор по работе с таблицами в том числе показаны варианты заполнения таблиц :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

чтоб не тормозило то можно ограничить перезапись значения текста, когда надо только

и если ты знаешь какие адреса нужно проверять

то может добавить запись в зареганный символ и его и считывать

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

×

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.