pcall() функция может вызывать функцию, которая может вызывать исключение.
Возвращает статус в виде булевой о том, есть ли исключение или нет и возвращает текст исключения.
Источник
Как этим пользоваться? Если вдруг знаем, что может произойти ошибка, то можно её обработать и выполнить правильное действие не останавливая работу Lua скрипта.
Или например если не выполняется условие, то можем сами создать ошибку с помощью функции error, что остановит скрипт.
1. WebSite-Watcher позволяет отслеживать изменения на веб-страницах в том числе по по регулярным выражениям. Можно отслеживать изменения на сайтах Cheat Engine и других. Форум отслеживать смысла особого нет. Проще подписаться на обновление и почтовый клиент поставить.
2. Программы тестирования и автоматизации под разные ОС:
Sikuli — открытая кросс-платформенная визуальная среда создания сценариев-скриптов
AirTest IDE — почти как Sikuli и более того, китайские разработчики
UserData в Lua это пользовательский тип. Точно не знаю, но я думаю в документации в CE Lua (celua.txt или здесь на офф. сайте) тип userData у всех классов или большинства классов. Например, проверим, что главная форма CE это userData тип
local mainFormCE = getMainForm()
print(type(mainFormCE))
> userdata (вывод из консоли)
Выводим список свойств следующим образом через getmetatable функцию. Метатаблица — это особая таблица свойств Lua-переменной (подробнее здесь)
local mainF
Довольно интересная функция, мне понравилась.
showSelectionList() позволяет просмотреть список класса Strings и выбрать свойство через список.
Как пример посмотрим список свойств главной формы и выберем любое свойство
local mainForm = getMainForm()
local listProperties = getPropertyList(mainForm)
local allowCustomInput = false
local id, name = showSelectionList("Title", "Caption", listProperties, allowCustomInput)
print ('Index: '..id..", Name: "..name)
--> Примеры выполне
В оригинале, если нет всех компонентов рецепта, то нельзя скрафтить вещь.
Цель: скрафтить без компонетов по нажатию кнопки
Игра на Unity и можно пробовать использовать в dnSpy модифицировать файл Assembly-CSharp.dll
Открываем файлик и смотрим на классы связанные с крафтом
Так находим кнопку, которая создаст указанное количество вещей крафта в CreateItem
Задача скрафтить по имеющемуся рецепту любую вещь. Для этого я добавляю проверку количес
В версии Unity 2018 довольно много интересного.
1. Это Unity Hub. Та штука, которая позволяет быть в курсе новых версий Unity.
2. PackageManager. Покажет пакаджи установленный в проекте.
3. Pro Builder. Довольно интересный инструмент, который позволяет моделить оркужение в Unity и творить простые локации, здания и создавать примитивы с наложением текстур... там очень много чего, я не не смотрел особо. Это альтернатива террейну. Фишка в том, что мы не являясь художниками (2
Почти месяц ковыряюсь со сборкой апк, которая не запускается на инструментальном тестировании в Firebase
Рис.1 Сборка апк на инструментальное тестирование TestLab от Firebase. Окно AirTest IDE
Две апк-шки создается.
1. В Unity, с иvпортом Poco SDK
2. В Плагине как на рисунке
Затем обе апк-шки отправляются на инструметальное тестирование в Firebase
Запускаю тест. Шесть секунд видео со стандартной заставкой и конец теста.
Была задача получить два списка из документа, в котором было с пару десятков тысяч строк. На практике выяснилось, что искать текст после ключевого слова легче чем искать текст до ключевого слова. Об этом и будет дальше
В утилите, которую я делал "Lua Regular Expressions (v. 1.0)"
Текст во вкладке "gmatch"
Game1
gameCompany
DAU
53.21k
-20%
Game2
gameCompany
DAU
20.35k
-20%
Поиск элемента после строки
"DAU "DAU%
Долго не могу решить проблему
Traceback (most recent call last):
File "C:\air test\plugins\firebase\build.py", line 124, in run
self.SIGNAL_INSERT_LOGVIEW.emit(_str.decode("GB2312").encode("utf-8"))
UnicodeDecodeError: 'gb2312' codec can't decode bytes in position 11-12: illegal multibyte sequence
QObject::~QObject: Timers cannot be stopped from another thread
Если кто шарит на питоне просьба помочь. Питон 2.7
Основная строка
self.SIGNAL_INSERT_LOGVIEW.emit(_str.deco
Уже была запись про тестирование производительности.
В этом примере тестируем разное обращение к функции со средним арифметическим значением
Результаты при 4-х запусках
avg = 0.93333998758048
avg = 1.0322099291325
avg = 0.92657961891689
avg = 1.1883763135947
Вывод. Разница не существенная.
Пример, который показывает как снять стек вызовов функций
function A0()
-- Здесь можно удалить ":gsub('\n','\r\n')", но тогда в консоли текст будет в одну строку
print(debug.traceback():gsub('\n','\r\n'))
end
function A1() A0() end
function A2() A1() end
function A3() for i=1,3 do A2() end end
A3()
Можно поставить пошаговую отладку в консоли Lua (как на скриншоте) и пройти по шагам
Я обратил внимание на следующие поведения записи и чтения
1. Срабатывают только инструкции чтения до изменения параметра, адрес рабочий
С адресом работают инструкции на чтение, но если в друг в этом адресе что-то поменять (например в CE), тот тут же выскочат инструкции на запись. Нельзя однозначно утверждать, что адрес является настроечным параметром, но и нельзя утверждать, что это не рабочий адрес. Какая-то инструкция может жестко менять значение, а может быть будет "стараться" измен
Немного комментариев к этой версии.
1. Исправлены смещения
2. Добавлены также инструкции на запись
На скриноте ниже пример сравнения текущей структуры с координатами в СТАЛКЕРЕ Зов Припяти с копией структуры.
Проведено огромное количество опытов над структурами. Много переделок.
Очень кратко напишу, что поменялось.
1. Название структуры состоит из адреса, количества адресов в ней и времени в миллисекундах на один байт в структуре.
Подчеркнуто красным
2. Смещения отбираются только те, на которых за X времени не было обнаружено ни одной инструкции на запись. Чем больше та самая чувствительность, тем точнее результат
3. В именах структур теперь ценная информ
Охота на структуры и удивительное путешествие в мир структур в L4D2
1. Игру L4D2 в оконный режим
2. Установка плагина (позже)
3. Установка VEH отладчика, иначе вылеты
4. Первая миссия. Ищем адрес патронов. Бряк на адрес. Нашли инструкцию
Красным показано, что я не всю структуру проанализирую позже. Долго было ждать. Структура больше 5К байт...
5. Делаем сигнатуру любой инструкции при работе с патронами на всякий случай, если игра вылетит.
se
Конечно не секрет, что типы данных не правильно определяются. Вот пример для 50-ти адресов
Слева как определил данные CE. Справа как определил их я по логу ниже
Понравились данные с размером в 1 байт, привлекают в нимание. Как только я переключил на ноль или 1, то персонаж перестал двигаться и не реагировал на движение.
Лог инструкций
Пытаюсь по логам определить алгоритм для Lua, чтобы скрипт сам ставил тип и смещение. Конечно есть сюрпризы, когда
Решил попробовать написать CE Lua скрипт, который прочесывает структуру и в Dissect data/structures окне создавал бы структуру только со смещениями, с которыми код работает, т.е. читает или пишет.
Например, мой персонаж прогуливается по городу, а каждые 200 мс ставится брейкпоинт на смещение +1 до гипотетической N границы структуры (например до 4096).
Я не успел сделать определение типа, но смещения внутри структуры получить я успел.
Итак, находим начало стру
1. Персонаж падает с большой высоты и разбивается
Ищем адрес скорости прыжка прыгая под speedhack. Находим эту скорость. Ставим бряк на доступ. Прыгаем.
Инструкции на чтение добавляем в список адресов и там начинаем нопить
- Либо по одной
- Либо рискнем по половине от половины
- Либо рискнем и все сразу занопим
Если повезет, а должно повезти, то инструкция не прочитает то значение скорости, которое уложило бы персонажа на землю и можно будет прыгать на
Наконец-то дошли руки до третий части.
Речь пойдет о создании структур программно. Пример, что будет в конце записи
Сразу к делу. Нужен поинтер и процесс.
Запустим туториал из Cheat Engine из меню Health->Cheat Engine Tutorial.
Прохождение туториала подробно описано здесь
Подключаемся к процессу идем на 8-мой шаг. В руководстве есть поинтер
[[[["Tutorial-i386.exe"+XXXXXX]+C]+14]+0]+18
Вместо XXXXXX может быть любое
Как контролировать включение и выключение скриптов в таблице
AA или "Autoassembler code" код похожий на язык программирования ассемблера.
Обычный АА-скрипт состоит из двух директив и добавляется в таблицу CE как запись
// Код срабатывающий как при активации, так и при деактивации
[ENABLE]
// Код активации
[DISABLE]
// Код деактивации
Чтобы код активировался, нужно включить галку напротив записи в таблице и наоборот выключить.
Есть такие директивы как {
Где писать Lua код?
Lua Engine окно, которое вызывается из главного окна CE.
Lua Console окно, которое вызывается из окна отладки CE.
Окно Autoassembler скрипта с вставки {$lua}, {$asm}
Lua Engine окно и Autoassembler-ные скрипты могут сохраняться в файлах Cheat Engine *.CT. *.CETRAINER, *.EXE
Lua Console для пошаговой отладки Lua кода и просмотров результатов ошибок и функции print()
Моя первая программа
Сначала узнаем версию для CE 6.7 и это