С точностью до тысячной доли секунды можно посчитать задержку выполнения кода, что можно применить как счет производительности.
local x = os.clock()
local s = 0
for i=1,100000 do s = s + i end
print(string.format("elapsed time: %.3f\n", os.clock() - x))
После выполнения, показывает 2 тысячных секунды или 2 мс
elapsed time: 0.002
Можно посчитать прошедшее время для другой цели. Например, если цикл в отладке выполняется более 3 секунд, то это вероятно корневой цикл, а если менее, то
Наткнувшись на тему вспомнил, что не все написал. В прошлом посте блога рассматривал бряк через DBVM. К сожалению, та версия dbvm из поста блога пропускала очень много инструкций и практически смысла нет её юзать. Например она определяла 16 инструкций, когда их было несколько тысяч, т.е. например 500 оффестов и на каждой по 10 инструкций. По DBVM надо, конечно, писать Дарк Байту, но желания нет.
Так вот. Не только с DBVM можно ставить бряки на участок памяти. Есть еще тип брейкп
В игровом движке может быть следующая архитектура
Менеджер сцен
Список сцен
Сцена1
Менеджер игровых объектов
Список игровых объектов
Игровой объект1
Игровой объект2
Игровой объект3
Сцена2
Менеджер игровых объектов
Список игровых объектов
Напишем функцию, которая в 3.2 раз быстрее кода ниже
splitDisassembledString(disassemble(address))
Сравнивая скорости получаем оптимизацию в ~3.20 раза быстрее.
Пример использования
function GetDebugString2(address)
local clearString = string.gsub(disassemble(address), '%s','')
return string.match(clearString, '^(.-)%-(.-)%-(.-)$')
end
local address, bytes, opcode = GetDebugString2(0x0045464A)
print(address)
print(bytes)
print(opcode)
gsub очищает пробелы
У меня бывают такие случаи, когда увидишь простой пример кода после которого захочется заняться разработкой какой-нибудь игры.
Вот один из таких примеров о том, как сделать подъем и опускание предмета и затем его вращение. Это 5 строчек "таких" и 5 строчек "таких", вот подъем и вращение
На видео код можно применять для левитации предметов и вражеских персонажей, которых можем поднимать, удерживать и бросать.
Сложность: 1/5.
В этом видео рассматривается самый простой способ взлома игр "Заморозка значения".
Ссылка на скачивание Cheat Engine
Ссылка на типы данных
На видео показано рисование через поток и рисование без потока
Когда происходит рисование без потока, то окно нельзя подвинуть, не работает кнопка и даже не возможно работать с Cheat Engine
Код:
&
Нет времени, пока напишу заметки.
1. Можно сделать плагин с визуализацией счетчиков обращений к видимым данным в MemoryView с подключенным DBVM.
2. По аналогии в Dessect Data Scanner сделать выбор DBVM режима.
DBVM позволяет обойти ограничение в 4 аппаратных брейкопинта и в реальном времени визуализировать данные, которые обращаются к памяти на чтение, запись. Показывать счетчик обращения и даже показывать спискок инструкций при наведении курсором на байт или иные да
В этой записи блога не будет чего-то, что показало бы "вау, это что-то новое и есть результат". Все сырое и результат пока мне только снится — быстрый поиск условий и включение, и выключение ветвей по этим условиям. Мыслю я не инструкциями, не группой инструкций, а ветвлениями кода и условиями, которые их запускают. Проще 20 ветвлений по 5 окон, чем тонна инструкций... Жаль пока теория, практики с результатом нет.
Рисунок. На нем слева п
Для тех кому интересно, вопрос к ним. Какие критерии можно добавить спрашивая оценку плагина?
Например, по 5-ти бальной шкале спрашивать оценку у пользователей:
Необходимость плагина в Cheat Engine
Работает без ошибок
Понятно как пользоваться
Интерфейс плагина
Удобство плагина
Нравится
Простая установка
Думаю, прикрутить аналитику прямо в плагины. Там будет как аналитика использования плагина, та
В архиве два файла. Функции
1. Контекстное меню. Компактное/ не компактное окно CE
2. Сохранение и загрузка положения и размера формы CE
3. Сохранение и загрузка компактного состояния формы или не компактного
Сделано на энтузиазме после написания класса сохранения и загрузки параметров.
После запуска, CE будет там, где её (CE) закрыли с по
Скрипт позволит вывести иерархию компонентов CE в виде текста.
Иерархия компонентов CE нужна для написания плагинов.
Например, для ColorPicker и для смены шрифта (подобротнее об этом было где-то было в блоге).
Скрипт:
Для CE 6.7
CT таблица для составления регулярных выражений 4-х функций
string.match (s, pattern [, init])
string.gmatch (s, pattern)
string.gsub (s, pattern, repl [, n])
string.find (s, pattern [, init [, plain]])
Функция string.gsub может принимать в аргумент функции "repl" таблицу (тогда будет замена по ключам значений из таблицы ) или в аргумент "repl" может попадать некоторая другая функция с аргументом найденного слова (тогда будет вызов этой другой функции при каждом захвате символа или
На скриншоте 22 ветви трассеровки от адреса патронов не входя в call-ы до корневого цикла. Корневой цикл определяется, когда поиск происходит более трех секунд и не находит ничего. Вполне хватает этого времени. Буду еще повторно тестить и проверять доходит ли он цикла или надо еще что-то придумывать.
Желтым выделяется точка, вертикальная полоса ветви и связи с такими же узлами. Узел это адрес выхода из ret
Пример раскрашивания адресов без каких-либо условий
source
1) Из прошлой записи блога нашли "MainForm.Foundlist3" для работы с TListView (компонент от Lazarus среды разработки)
2) OnCustomDrawSubItem — функция обработчик раскрашивания вложенных элементов в Item. Не поленитесь, зайдите в файл документации (C:\Program Files\Cheat Engine 7.4\celua.txt)
Также есть OnCustomDrawItem — раскрашивание невложенных элементов.
Этот способ раскрашивания можно использо
Уже была запись про тестирование производительности.
В этом примере тестируем разное обращение к функции со средним арифметическим значением
Результаты при 4-х запусках
avg = 0.93333998758048
avg = 1.0322099291325
avg = 0.92657961891689
avg = 1.1883763135947
Вывод. Разница не существенная.
В версии Unity 2018 довольно много интересного.
1. Это Unity Hub. Та штука, которая позволяет быть в курсе новых версий Unity.
2. PackageManager. Покажет пакаджи установленный в проекте.
3. Pro Builder. Довольно интересный инструмент, который позволяет моделить оркужение в Unity и творить простые локации, здания и создавать примитивы с наложением текстур... там очень много чего, я не не смотрел особо. Это альтернатива террейну. Фишка в том, что мы не являясь художниками (2
Нажали checkbox — заполнились данные по базовому адресу
Отжали checkbox — удалились данные
Если проще руками забить и поставить опцию раскрытия, то можно и без скрипта.
Ниже находится обучающий пример плагина для CE Lua с установкой компактного режима применяя парадигму ООП — инкапсуляции.
Для программирования плагинов на Lua могут пригодится приемы ООП. Это касается сущностей, их поведений и взаимодействий между ними. В данном примере CECompactView — описание класса на основе мета-таблицы и оно является сущностью. Функции класса — uncompact() и compact(), которые реализуют поведения этой сущности. Основной скрипт с описанием сущности можно помести