misha Опубликовано 7 ноября, 2012 Поделиться Опубликовано 7 ноября, 2012 Здравствуйте!Суть такова:1) Ищу адреса в виде массива2) По хоткею идет обработка массива вида:for i=1, 30 do writedouble (massiv_adresov[i], 100)endВ игре происходит мини подвисание, в чем может быть причина?ПС если разложить массив на отдельные адреса и каждый адрес прописывать отдельным writedouble, а не циклом, то никаких торможений не наблюдал. Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 7 ноября, 2012 Поделиться Опубликовано 7 ноября, 2012 Я думаю тут можно поэкспериментировать в одном случае с pairs() и в другом с типами массива (числовой массив или строковый). В первом случаеПопробуй через pairs() по аналогии с этим примеромlocal array = {a="А", b="Б", c="В", d="Г", e="Д", f="Е"}for key, value in pairs(array) doprint(key, value)endВо втором случае попробуй сделать чтобы адреса в массиве были только как number, т.е. числовые. Хотя адреса передаваемые в writedouble() могут быть в виде строки, тем не менее может быть и number-тип прокатит.Ещё есть класс Strings и метод strings_getString(list, index) для взятия строки из массива строк (например строк-адресов)Ещё есть вариант, что нет задержки между удержаниями горячих клавиш. Или не очень правильно составлен код проверки горячих клавиш (не оптимизирован). Ссылка на комментарий Поделиться на другие сайты Поделиться
misha Опубликовано 18 ноября, 2012 Автор Поделиться Опубликовано 18 ноября, 2012 Тему не буду новую открывать, итак напостил)Сталкивался уже давно, что дебаггер СЕ в скриптовом режиме плохо работает с высокочастотными инструкциями.К примеру беру в игре адрес,Выводит мне n-адресов. Пишу скрипт видаfunction debugger_onBreakpoint() debugState = 2 ONdebugger() return 1end........function ONdebugger(adres)............... adres0=EAX+10 print (adres0)endВ итоге скрипт не выводит ничего.Может есть какие-то скрытые параметры дебаггера СЕ или в чем может быть дело? Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 19 ноября, 2012 Поделиться Опубликовано 19 ноября, 2012 Дело в том, что надо ставить брейкпоинт на инструкции (выделить её и нажать F5).Когда брейкпоинт сработает, тогда сработает функция debugger_onBreakpoint() Ссылка на комментарий Поделиться на другие сайты Поделиться
misha Опубликовано 19 ноября, 2012 Автор Поделиться Опубликовано 19 ноября, 2012 Дело в том, что надо ставить брейкпоинт на инструкции (выделить её и нажать F5).Когда брейкпоинт сработает, тогда сработает функция debugger_onBreakpoint()Аналогично, проверял, вручную тормозится на все ссылаемые адреса (последовательное нажатие ф9 после запуска брейкпойнта по ф5).Инструкция ссылается на адреса около 2000раз в сек. Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 19 ноября, 2012 Поделиться Опубликовано 19 ноября, 2012 Для чего нужно "ускорять" работу функции debugger_onBreakpoint()? Если в ней функциия print(), то естественно будет тормозить. Ну допустим использование этой функции, даже пустой, нещадно тормозит игру. Если на одной инструкции куча вызовов и нужно профилировать какую-то информацию на этой инструкции, то ничего обычно не мешает сделать инъекцию кода с прыжком на новый написанный ассемблерный код анализирования данных регистров, стека и т.п. и когда что-то с чем-то совпадает не так часто, то можно сделать прыг на код с брейкпоинтом что приведёт к вызову debugger_onBreakpoint(). Ссылка на комментарий Поделиться на другие сайты Поделиться
misha Опубликовано 20 ноября, 2012 Автор Поделиться Опубликовано 20 ноября, 2012 print () я для наглядности привел, в оригин коде у меня все чисто. А с прыжком пойду попробую Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения