aliast Опубликовано 11 февраля, 2014 Поделиться Опубликовано 11 февраля, 2014 Пробовал ли кто-нибудь выводить в окне игры изменяемое значение из таблицы? Например, я нашёл игровое время и хочу сделать игровые часы, которых в игре нет В CE такое доступно?UPD: так.. форму сделал, на форме всё работает, но как сделать поверх игры... Игра Assassin's Creed Revelations вылетает при хуке DirectX, может это просто игра проблемная.. Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 12 февраля, 2014 Поделиться Опубликовано 12 февраля, 2014 Пример показывает сообщение на 2 секунды после нажатия на CTRL+1.Заменить " processName = '[Game.exe]' "Созать текстовый документ *.CETRAINER с кодировкой "utf-8" без BOM в программе Notepad++<?xml version="1.0" encoding="utf-8"?><CheatTable CheatEngineTableVersion="14"><LuaScript>processName = 'Game.exe'isD3dhook_initializeHook = falseisTimerShowingMessageInGameMenu = falsefunction OnCloseClick(sender)closeCE()return caFreeendtrainerForm = createForm()form_onClose(trainerForm, OnCloseClick)control_setCaption(trainerForm, 'Trainer Form v1.0 (in game message)')form_centerScreen(trainerForm)exitBtn = createButton(trainerForm)control_setCaption(exitBtn, 'Exit')control_onClick(exitBtn, OnCloseClick)control_setSize(exitBtn, 200, 70)control_setPosition(exitBtn, 62, 130)labelCaption1 = createLabel(trainerForm)control_setCaption(labelCaption1, 'Press in game: CTRL + 1')control_setPosition(labelCaption1, 62, 30)form_show(trainerForm)autoAttachList = getAutoAttachList()stringlist_add(autoAttachList, processName);function onOpenProcess(processid)if not isD3dhook_initializeHook thenreinitializeSymbolhandler()d3dhook_initializeHook()isD3dhook_initializeHook = trueShowMessageInGame('d3dhook initialize Hook!', 400, 100, 2)createHotkey(OnKeyPressSomeActivate, VK_CONTROL, VK_1)endendfunction OnTickTimerShowingMessageInGameMenu(senderTimer)timer_setEnabled(senderTimer, false)object_destroy(senderTimer)object_destroy(displayedTextObject)object_destroy(fontmap)object_destroy(font)isTimerShowingMessageInGameMenu = falseendfunction ShowMessageInGame(stringMessage, fontWidthTextContainer, fontHeightTextContainer, timeShowing)font = createFont()font_setSize(font, 24)font_setColor(font,0x0000ff) --red rgbfontmap = d3dhook_createFontmap(font)displayedTextObject = d3dhook_createTextContainer(fontmap, fontWidthTextContainer, fontHeightTextContainer, stringMessage )d3dhook_renderobject_setY(displayedTextObject, -1)d3dhook_renderobject_setX(displayedTextObject, -1)messageTimer = createTimer(nil, false)timer_setInterval(messageTimer, timeShowing * 1000)timer_onTimer(messageTimer, OnTickTimerShowingMessageInGameMenu)timer_setEnabled(messageTimer, true)isTimerShowingMessageInGameMenu = trueendpressCount = 0function OnKeyPressSomeActivate()if not isTimerShowingMessageInGameMenu thenpressCount = pressCount + 1ShowMessageInGame('Message count №'..pressCount..' !', 400, 100, 2)endend</LuaScript></CheatTable>Дарк Байт советовал не разрушать/создавать font. А создать его один раз после хука.Если будут сложности с пониманием как и что тут работает, то не стесняйся я ответу на любые вопросы по примеру, потому что этот пример я сам делал. Тебе нужно изменить пример под свою задачу. Ссылка на комментарий Поделиться на другие сайты Поделиться
aliast Опубликовано 12 февраля, 2014 Автор Поделиться Опубликовано 12 февраля, 2014 Пример показывает сообщение на 2 секунды после нажатия на CTRL+1.Да, асассин крид вылетает при запуске тренера. На FarCry3 работает. Значит это игра проблемная попалась( Ссылка на комментарий Поделиться на другие сайты Поделиться
Vlad2 Опубликовано 12 февраля, 2014 Поделиться Опубликовано 12 февраля, 2014 а у меня вообще кроме создания файла "bla.png" на диски С нечего не происходит))) Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 12 февраля, 2014 Поделиться Опубликовано 12 февраля, 2014 Да, асассин крид вылетает при запуске тренера. На FarCry3 работает. Значит это игра проблемная попалась(У меня был случай. Хук не проходил в полноэкранном режиме, а в оконном работало. Два пути решения пытаться на Lua что-то придумывать или например делать на C++. Вообще интересно найти проблему почему на Lua на получается Ссылка на комментарий Поделиться на другие сайты Поделиться
aliast Опубликовано 12 февраля, 2014 Автор Поделиться Опубликовано 12 февраля, 2014 У меня был случай. Хук не проходил в полноэкранном режиме, а в оконном работало. Подтверждаю - в окне работает! Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 12 февраля, 2014 Поделиться Опубликовано 12 февраля, 2014 Вот что мне писал Дарк Байтand of course as always, don't do hook stuff in onOpenProcess. That is too soon at that point(If it does work when doing single line command manually, then try using a one time run timer. As that will run after the process initialization instead of before)Мне сложно перевести эту цитату, т.к. я не очень понял смысл её, кроме как не использовать хук в onOpenProcess, т.к. это рановато... используйте таймер.Если полазить по скриптам на форуме Cheat Engine, то там d3dhook_initializeHook не стоит в функции открытии процесса.aliast, можешь попробовать1. d3dhook_initializeHook запустить при запуске скрипта вне функции открытия процесса2. d3dhook_initializeHook запустить через некотрое время по таймеру (запускаемому в onOpenProcess)3. поискать примеры по ключевому слову d3dhook_initializeHook Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 13 февраля, 2014 Поделиться Опубликовано 13 февраля, 2014 and of course as always, don't do hook stuff in onOpenProcess. That is too soon at that point(If it does work when doing single line command manually, then try using a one time run timer. As that will run after the process initialization instead of before)И конечно же, как всегда, не выполняйте ничего связанного с хуком по событию onOpenProcess. Это слишком рано (если работает через ручной запуск однострочной команды, тогда попробуйте "одноразовый" таймер, так как он сработает ПОСЛЕ инициализации процесса, а не ДО.)Примерно такой перевод. Да, "одноразовый" в данном случае - это таймер, который сработает всего один раз. Ссылка на комментарий Поделиться на другие сайты Поделиться
aliast Опубликовано 6 января, 2016 Автор Поделиться Опубликовано 6 января, 2016 (изменено) Возвращаясь к этому вопросу. Почему кодtest = readInteger('["Dishonored.exe"]')function OnKeyPressSomeActivate()if (test == nil) thentest = 0endShowMessageInGame('Message count №'..test..' !', 400, 100, 2)endвыдаёт надпись Message count № 0 т.е. test = readInteger('["Dishonored.exe"]') ничего не прочитывает? Весь скрипт целиком выше, я изменил только этот кусок.Upd: вот рабочий скриптfunction OnKeyPressSomeActivate()CurCoins = readFloat('[[[["Dishonored.exe"+010654A4]+754]+0]+6b0]+70')TotalCoins = readInteger('[[[["Dishonored.exe"+010654A4]+754]+0]+6b0]+74')if (CurCoins == nil or TotalCoins == nil) then ShowMessageInGame('ERROR!', 400, 100, 2)endShowMessageInGame('Coins collected: '..CurCoins..' from '..TotalCoins..' !', 400, 100, 2)endЗаметил странный глюк. Создал несколько функций, показывающие значения разных адресов. Навесил на них хоткеи Ctrl+1,2,3,4,5. Иногда сообщение появляется и так и остается висеть на экране. Закрываю тренер, ничего в коде не меняю, снова нажимаю хоткей - глюк может повториться, а может и не повториться или появиться на другом сообщении (на другом хоткее). Насколько я разобрался глюк появляется если попытаться вывести другую надпись до того, как первая исчезнет с экрана, либо даже сразу после её исчезновения. Первая надпись при этом должна исчезнуть, а вот вторая зависнет. Изменено 6 января, 2016 пользователем aliast Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 6 января, 2016 Поделиться Опубликовано 6 января, 2016 test = readInteger('["Dishonored.exe"]')Правильно test = readInteger('Dishonored.exe')По поводу глюков. Сообщение внутри игры должно показаться и скрыться. Пока оно не скрылось нельзя вызывать снова ShowMessageInGame и нельзя закрывать CE или трейнер CE, потому что там общие переменные и не они не работают с отдельными сообщениями или одновременными сообщениями. Так написан скрипт. Так что его придется переписывать. Ссылка на комментарий Поделиться на другие сайты Поделиться
aliast Опубликовано 6 января, 2016 Автор Поделиться Опубликовано 6 января, 2016 Так написан скрипт. Так что его придется переписывать.В принципе я вроде пофиксил этот баг, добавив в начале каждой функции перед выводом нового сообщения строчку object_destroy(displayedTextObject). Подозреваю что это не идеальный вариант решения, но вроде как работает. При таком раскладе новое сообщение будет гореть на экране не 2 секунды (или сколько там будет указано в скрипте), а столько, сколько осталось гореть предыдущему сообщению на экране. Для меня это не существенно. Не успел прочитать - жмакни хоткей ещё раз и читай заданные 2 секунды Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения