Перейти к содержанию

[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
Ссылка на комментарий
Поделиться на другие сайты

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

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

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

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

×
×
  • Создать...

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

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