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

Активация дочерних читов


Pitronic

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

Когда то на форуме нашёл полезный Lua скрипт по авто активации чита.

Спойлер
function SetStateRecord(description, state)
local addressList = getAddressList()
local memoryRecord = addressList.getMemoryRecordByDescription(description)
memoryRecord.Active = state
end

timerAutorun = createTimer(nil,true)
timerAutorun.Interval = 1000
timerAutorun.OnTimer = function ()
if (getProcessIDFromProcessName("FarCry.exe")~=nil) then
OpenProcess("FarCry.exe")
--getAddressList().getMemoryRecordByDescription('EnableCheckbox1').Active = true

end
end

 

Сейчас возникла необходимость исползоват этот код в таблице. но придобавлении в таблицу он не добавляется пишет что не весь код годенн к инекции

Спойлер
{$lua}
function SetStateRecord(description, state)
local addressList = getAddressList()
local memoryRecord = addressList.getMemoryRecordByDescription(description)
memoryRecord.Active = state
end

timerAutorun = createTimer(nil,true)
timerAutorun.Interval = 1000
timerAutorun.OnTimer = function ()
if (getProcessIDFromProcessName("FarCry.exe")~=nil) then
OpenProcess("FarCry.exe")
--getAddressList().getMemoryRecordByDescription('EnableCheckbox1').Active = true

end
end
{$asm}

 

Как правильно написать этот скрипт для табличного варианта?

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

Какую логику работы скриптов хотим получить?

 

Вариант1
1. Если нажали на галку в таблице CE, то делать автоматически аттач к процессу?
2. Как только подключился процесс, то активировать другую галку?

 

Или вариант2

1. Чтобы нажали на галку и начался поиск процесса

2. Как только процесс найден, то все вложенные записи под этой же галкой показались(развернулись)?

 

Критерий "Как правильно написать этот скрипт для табличного варианта?" мне пока не совсем понятен.

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

1 час назад, MasterGH сказал:

мне пока не совсем понятен

Этот скрипт пишется в луа в верху таьлици и активирует скрипт в таблице сразу после запуска игры, мне нужен этот скрипт именно в таблице, чтоб при активации скрипта активировался другой скрипт указаный в этом месте 

getAddressList().getMemoryRecordByDescription('EnableCheckbox1').Active = true -- поиск по имени скрипта

он у меня не добавляется в таблицу вот такая ошибка.

Спойлер

2022-09-07-104926.png

 

Изменено пользователем Pitronic
Дополнение
Ссылка на комментарий
Поделиться на другие сайты

В общем мне даже не обязательно подключение к процессу се уже подключено, мне нужна активация диактивация дочерних скриптов в таблице. Активировал один он автоматом активировал другой.

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

9 часов назад, Pitronic сказал:

В общем мне даже не обязательно подключение к процессу се уже подключено, мне нужна активация диактивация дочерних скриптов в таблице. Активировал один он автоматом активировал другой.

 

Хотя ответ был, но я приведу функции, которые могут пригодится

 

1. Открытие процесса: openProcess("Tutorial-i386.exe")

2. Добавить процесс в список процессов для автоподкючения: getAutoAttachList().add("Tutorial-i386.exe") 

3. Функция, которая срабатывает, когда процесс подключился: 

function onOpenProcess(processid)
  // здесь некоторый код
end

4. Активация записи по её имени: getAddressList().getMemoryRecordByDescription("Название записи в таблице CE").Active = true.

Если такой записи еще в таблице нет, то вызовет ошибку. 

5. При добавлении записи в CE сразу вызывается код в АА-скрипте.

Так CE проверяет все, что там находится. Это может создать лишний таймер. Как это проверить? Через логи  и print()

Спойлер
// перед добавлением скрипта, запись уже уже должна быть создана в таблице с пустыми [ENABLE] и [DISABLE]
{$lua}
print('инициализирован "'..memrec.Description..'"')
{$asm}
[ENABLE]
{$lua}
print('активирован "'..memrec.Description..'"')
{$asm}

[DISABLE]
{$lua}
print('не активирован "'..memrec.Description..'"')
{$asm}

 

 

6. Если объединить пункты выше и отказаться от таймера, то получится что-то вроде этого.

Спойлер
[ENABLE]
{$lua}
process_name = 'Tutorial-i386.exe'      -- Название процесса
record_name = 'Активирующий скрипт'     -- Название записи
getAutoAttachList().add(process_name)   -- Автоподключение

function onOpenProcess(process_id)      -- Обработчик подключения
    -- активация record записи
    getAddressList().getMemoryRecordByDescription(record_name).Active = true
end

[DISABLE]

 

 

9 часов назад, Pitronic сказал:

он у меня не добавляется в таблицу вот такая ошибка.

7. Ошибка, очень похоже, связана с названием записи напротив галки. Т.е. она отсутствует.

 

8. Ну, а как программное разворачивать вложенные читы и активировать их?

Идем в документацию и что-то вроде этого ищем про memoryRecord.Options. Выставляnm Options можно как вручную так и скриптом

Спойлер
local addressList = getAddressList()
local memoryRecord = getAddressList().getMemoryRecordByDescription("Активирующий скрипт")
memoryRecord.Options = "moHideChildren, moActivateChildrenAsWell, moAllowManualCollapseAndExpand"
memoryRecord.Active = true

--[[  Options: String set - a string enclosed by square brackets filled with the options seperated by a comma.
Valid options are: moHideChildren, moActivateChildrenAsWell, moDeactivateChildrenAsWell, moRecursiveSetValue,
moAllowManualCollapseAndExpand, moManualExpandCollapse, moAlwaysHideChildren]]--

 

Спойлер

image.png

image.png

Таблица на всякий случай, если потребуется для изучения или проверки

Tutorial-i386.CT

 

Более полно все функции описаны в документации

image.png

 

Хотя там не все есть. Например, про "memrec" внутри уже созданного АА-скрипта. Тогда не нужно использовать local memoryRecord = getAddressList().getMemoryRecordByDescription("Активирующий скрипт"), а сразу memrec и с ним работать.

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

24 минуты назад, MasterGH сказал:

могут пригодится

Скопировал ваш код, скорее всего именно пригодится, я обычно трейнеры с чекбоксами делаю по готовой форме, что я когда-то сделал. Если без этого скрипта делать как мне советует, imaginary придётся форму править, а так добавил скрипт в таблицу. Дочерние скрипты в низ, и чекбоксы на исполняемые скрипты делать которые всегда наверху.

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

18 часов назад, Partizan сказал:

Может не в тему. Но как сделать средствами СЕ вменяемый тренер. Допустим на эту таблицу?

 

Ну, такой я предлагать не буду 😃

Спойлер

http://i.imgur.com/mhHAyN6.png

 

Ну, может такой вменямый (визуально)?

Спойлер

http://forum.cheatengine.org/files/capture2_108.jpg

 

Большое количество опций, наверно, лучше оставить в таблице как есть без трейнеров. Вот пример

Спойлер

tld9.png

Или вот такая вменяемая таблица?

Спойлер

ahdqcrk

 

Или такая

Спойлер

Image

 

Во всяком случае можно выбрать отдельные опции или сгруппировать их, что-то вроде этого вполне вменяемо (сделан на Cheat Engine)

Спойлер

Image

 

А если опций еще больше и нужны галки, то тогда использовать контролы. Списки, вкладки и т.п.

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

  • 3 месяца спустя...
В 07.09.2022 в 20:07, MasterGH сказал:

которые могут пригодится

В общем так, пустая таблица работает. А вот таблица с читами для игры хромает. Вот скрипт в луа что вверху вставляю.

Спойлер
local timerAutorun = createTimer(nil, true)
  timerAutorun.Interval = 1000
  timerAutorun.OnTimer = function ()

  if (getOpenedProcessID() ~= getProcessIDFromProcessName("engine.exe")) then
     OpenProcess("engine.exe")
  end

  if (getOpenedProcessID() ~= getProcessIDFromProcessName("game.exe")) then
     OpenProcess("game.exe")
  end

  if (getOpenedProcessID() ~= getProcessIDFromProcessName("Pet Show Craze.exe")) then
     OpenProcess("Pet Show Craze.exe")
  end

end

local addressList = getAddressList()
local memoryRecord = getAddressList().getMemoryRecordByDescription("Activation")
memoryRecord.Options = "moHideChildren, moActivateChildrenAsWell, moAllowManualCollapseAndExpand"
memoryRecord.Active = true

 

активирующий скрипт пустой. В дочерних читах скрипты асм. Как работает. Если таблицу запустить после игры и согласится выполнить скрипт работает нормально. А если тоже самой сделать до запуска игры. Активирующий скрипт включается дочерние читы остаются выключенными. Наверное там нужна проверка на присоединение к процессу.

Изменено пользователем Pitronic
исправление орфографии
Ссылка на комментарий
Поделиться на другие сайты

2 часа назад, Xipho сказал:

в чем проблема

Я не знаю как. Вообще луа не знаю. Пользуюсь тем что мне кто то когда то дал, или нашёл на просторах интернета. Единственное что получается, пробую изменять методом тыка уже готовое под себя, Как например здесь

Изменено пользователем Pitronic
исправление орфографии
Ссылка на комментарий
Поделиться на другие сайты

2 минуты назад, Pitronic сказал:

Я не знаю как. Вообще луа не знаю. Пользуюсь тем что мне кто то когда то дал, или нашёл на просторах интернета. Единственное что получается, пробую изменять методом тыка уже готовое под себя.

За то время, пока ты методом тыка пытаешься менять, уже можно было без проблем изучить основы Lua, тем более, что это очень простой язык.

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

1 минуту назад, Xipho сказал:

можно было без проблем изучить основы Lua

Язык может и простой если знать источник информации. А искать эти источники честно признаюсь лень, так как больше времени провожу в играх и взломах. Руки не доходят до всего остального. 

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

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

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

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