Статус темы:
Закрыта.
  1. HelBot Младший Cержант

    Регистрация:
    22 фев 2014
    Сообщения:
    107
    Симпатии:
    23
    Репутация:
    20
    Пол:
    Мужской

    Cheat engine 6.2. часть 3. прочные основы создания трейнеров на lua

    Тема в разделе "Cheat Engine", создана пользователем HelBot, 19 мар 2014.

    Cheat Engine 6.2. Часть 3. Прочные основы создания трейнеров на Lua

    Lua это язык программирования, который позволяет в упрощённом виде командовать какими-то уже готовыми функциями Cheat Engine. Т.е. Lua это своего рода упрощённый язык управления, который поможет нам логически и последовательно показывать (или ещё перед этим создавать) форму трейнера, скрывать те или иные окна, размещать окна, изменять заголовок окна, изменять текст надписей и т.п. При чем мы можем скрыть все окна Cheat Engine и работать только с одной формой – формой Lua-трейнера.



    Если кто-то уже генерировал трейнеры на CE не как *.exe, а как формат *.CETRAINER чтобы подсмотреть XML разметку, то наверно кто-то мог придти в некоторый шок от той сложности Lua-скрипта, которую он увидел. Если неподготовленный человек увидит эту сложность, то он точно скажет «ой, нет это точно не для меня». Мы же рассмотрим и создадим нечто очень простое. Скрипты почти один в один похожи на те что были в части1, но объяснение будет более подробное.

    В первую очередь нам нужно разобраться, где будем запускать Lua-скрипты.

    Этап1. Где выполнять тестовые Lua – скрипты и как при закрытии формы корректно закрывать Cheat Engine

    Для тестирования Lua-скриптов нам не нужно каждый раз создавать или редактировать файл *.CETRAINER и запускать его двойным кликом. Для этих целей существует два окна исполнения Lua-скриптов в режиме работы Cheat Engine.

    Для примера давайте напишем скрипт создания окна и закрытия этого окна.

    function onCloseClick(sender)
    closeCE()
    return caFree
    end

    trainerForm = createForm()
    form_onClose(trainerForm, onCloseClick)

    Функция createForm() – создаёт окно, а ссылку на это окно помещает в переменную trainerForm. Вы можете назвать её любым именем.
    Функция form_onClose(trainerForm, onCloseClick) – связывает форму trainerForm и функцию onCloseClick таким образом, что когда форма trainerForm закрывается, то вызывается функция onCloseClick.
    closeCE() – даёт команду на закрытие Cheat Engine
    return caFree – если closeCE() корректно по каким-то причинам не срабывает, то return caFree точно сработает.

    Первое окно Lua исполнения находится по пути: Главное окно CE — Table — Show Cheat Table Lua Script.

    [​IMG]
    Рис. 1

    Второе окно Lua исполнения находится по пути: Главное окно CE – кнопка Memory View—Tools – Lua Engine

    [​IMG]
    Рис. 2

    Как видим на рис. 2 второе Lua окно имеет лог «output», а первое окно не имеет. Поэтому если вам нужен этот лог, то используйте второе окно, если не нужен, то используйте первое. Я чаще использую первое окно.

    Если выполнить скрипт в первом и втором окне, то мы увидим две формы.

    [​IMG]
    Рис. 3

    Выполняя каждый раз скрипт, этих форм можно сделать множество. Если закрыть одну форму, то закроются все формы.

    Помните важный момент. Если все окна Cheat Engine скрыты и вы закрываете окно трейнера, то процесс Cheat Engine автоматически не закроется. Этот факт нам потребуется в *.CETRAINER, когда закрывая форму трейнера нам нужно закрыть и процесс Cheat Engine все окна которого по умолчанию скрыты. Если вы не будите закрывать процесс Cheat Engine, то он будет работать в системе и его можно будет видеть в диспечере задач, который запускается по CTRL+ALT+DEL.

    Итак, мы узнали, где можно запускать скрипты для тестирования, а также узнали про корректное закрытие формы в *.CETRAINER

    Этап2. Планирование создания Lua-трейнера

    Планирование это важный этап создания Lua трейнера. Но сразу спланировать все детали невозможно, поэтому нужно планировать наиболее общие моменты. Такие как жизненный цикл работы Lua-трейнера. Я предлагаю для примера свой наиболее простой план жизненного цикла работы программы. При чем он наиболее общий.

    [​IMG]
    Рис. 4

    Теперь уже что-то – у нас есть классный план. Теперь нужно узнать синтаксис языка программирования Lua и поддерживаемые функции CE Lua Engine для того чтобы осуществить этот план.

    Этап3. Реализация жизненного цикла Lua-трейнера

    Открываем окно по вводу Lua кода и открываем справочную информацию по CE Lua Engine:
    1) Понадобится для применения функций CE: ссылка
    2) Понадобится для горячих клавиш: ссылка

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

    function onCloseClick(sender)
    closeCE()
    return caFree
    end

    trainerForm = createForm()
    form_onClose(trainerForm, onCloseClick)

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

    function onCloseClick(sender)
    closeCE()
    return caFree
    end

    trainerForm = createForm()
    form_onClose(trainerForm, onCloseClick)

    autoAttachList = getAutoAttachList()
    stringlist_add(autoAttachList,» calc.exe»);

    function onOpenProcess(processid)
    — активация цикла проверки горячих клавиш
    end

    Мы реализовали уже чуть больше половины алгоритма жизненного цикла программы. Теперь сделаем реакцию на пару горячих клавиш L и K. Здесь придётся применить таймер.

    function onCloseClick(sender)
    closeCE()
    return caFree
    end

    trainerForm = createForm()
    form_onClose(trainerForm, onCloseClick)

    autoAttachList = getAutoAttachList()
    stringlist_add(autoAttachList,»calc.exe»);

    function OnCheckHotkeys()

    if isKeyPressed(VK_K) then
    — сделать какое-то действие
    return
    end

    if isKeyPressed(VK_L) then
    — сделать какое-то действие
    return
    end

    end

    function onOpenProcess(processid)
    hotKeyTimer = createTimer(trainerForm)
    timer_setInterval(hotKeyTimer, 100)
    timer_onTimer(hotKeyTimer, OnCheckHotkeys)
    end

    Жизненный цикл программы запрограммирован! Теперь давайте это дело проверять визуально через функцию print()

    function onCloseClick(sender)
    closeCE()
    return caFree
    end

    trainerForm = createForm()
    form_onClose(trainerForm, onCloseClick)

    autoAttachList = getAutoAttachList()
    stringlist_add(autoAttachList,»calc.exe»);

    function OnCheckHotkeys()

    if isKeyPressed(VK_K) then
    — сделать какое-то действие
    print(«Hot-key K»)
    return
    end

    if isKeyPressed(VK_L) then
    — сделать какое-то действие
    print(«Hot-key L»)
    return
    end

    end

    function onOpenProcess(processid)
    print(«Найден процесс игры. Запускаю проверку горячих клавиш»)
    hotKeyTimer = createTimer(trainerForm)
    timer_setInterval(hotKeyTimer, 100)
    timer_onTimer(hotKeyTimer, OnCheckHotkeys)
    end

    Запускаем скрипт. Появляется окно. Запускаем калькулятор. Через секунды две появляется сообщение о том что процесс найден. Теперь если нажать на клавишу K или L, то мы увидим сообщение.
    Проверки прошли успешно.

    Важно понять, что мы запрограммировали жизненный цикл программы, т.е. её основную деятельность и цель. А теперь остаются только мелочи. Мы можем добавлять в функцию OnCheckHotkeys() свои горячие клавиши и добавлять реакцию на них. Но наша форма совсем какая-то неприглядная и появляется не по центру. Вот тут начинаются поверхностные доработки, которые я не стал включать в жизненный цикл программы.

    Этап4. О том как работать со справочной информацией

    Наверно, читатели обратили внимание. Ну откуда я могу столько знать, что и как работает. Не скрою тот факт, что у меня есть неплохие навыки программирования на различных языках программирования. Но дело не в этом. Дело в умении понимать документацию, которую вам предоставляет разработчик Cheat Engine. Эта документация очень плохая ссылки на неё я давал выше. Другой документации нет. Поэтому хотите вы или нет читать и понимать документацию, то придётся это делать. Многие неясности обсуждаются на нашем форуме и на форуме Cheat Engine. Те, кто эти неясности и ответы читает, тот человек хорошо понимает возможности CE Lua Engine. Этим человеком являюсь и я.

    Итак я вам расскажу о том как работать с имеющейся справочной системой очень коротко. В первую очередь вам нужно использовать поиск слов на странице и нужен googl – переводчик.
    Давайте найдём функцию, которая расположит форму по центру. Для этого ищем слово “form” и слово “center” ну и находим описание.

    form_centerScreen(form); : Places the form at the center of the screen

    По этому описанию сразу ясно, что мы должны сделать. В аргумент передать форму трейнера.

    —… код вырезеан
    trainerForm = createForm()
    form_onClose(trainerForm, onCloseClick)
    form_centerScreen(trainerForm)
    —… код вырезеан

    Вот так происходит работа с документацией.

    Ещё один момент. Можно найти такую строчку:

    Form Class: (Inheritance: ScrollingWinControl->CustomControl->WinControl->Control->Component->Object)

    Эта информация для нас довольно важна. Это говорит нам о том что с формой могут работать функции выше описанных классов, т.е. классы : ScrollingWinControl->CustomControl->WinControl->Control->Component->Object

    Ну, ладно. Если будут вопросы по этому случаю задавайте их на форуме.

    Итог этой статьи
    Жизненный цикл программы мы должны строить прежде всего, а далее наращивать функционал. Используйте документацию Cheat Engine для наращивания функционала. Ищите и разбирайте примеры Lua-кода на нашем форуме и на форуме Cheat Engine. Вы можете узнать как расположить картинку на форме вашего трейнера, как убрать границу окна формы и сделать её перетаскиваемой за любую область.
Статус темы:
Закрыта.
Ключевые слова
  1. cheat engine создание скриптов