Гость Опубликовано 26 февраля, 2016 Поделиться Опубликовано 26 февраля, 2016 Всем доброго времени. Наверное, не одному мне не нравится каждый раз выбирать нужный процесс для подключения СЕ, чтобы пользоваться таблицами. Примеров особого неудобства, связанным с этим моментом - может быть масса, но я приведу лишь два основных примера: Представьте, что вы взялись взламывать какую-то игру. Ищете значение, ставите бряк, идете в отладчик, написали скрипт, и "БАЦ" - игра вылетела/зависла. Такое бывает, но вам от этого не легче - нужно снова запускать игру, подключаться к ней, снова искать значение, и т.д. и т.п. Допустим, у вас есть любимая игра, или игра, в которую вы чаще всего играете (может, не всегда, а в последнее время). У вас есть для нее таблица, но трейнеров нет (как у меня, например - у меня все лежит в таблицах), и вам КАЖДЫЙ раз приходится искать нужный процесс в списке, подключаться к нему, а ведь для этого нужно также переключиться на окно СЕ, и не все игры адекватно реагируют на Alt+TAB, и на переключение окон - в целом. Знакомо? Думаю, что это знакомо многим. Кто-то может сказать, что в СЕ есть специальная для этого "плюшка" - список процессов для подключения, и, в какой-то степени, они будут правы, но тут вы столкнетесь с некоторыми "подводными камнями", например: Несколько процессов (забитых в этот список СЕ, для авто-подключения) запущены одновременно. Как думаете, к какому процессу СЕ подключится? К нужному вам? Или к какому-либо другому? Гадание на кофейной гуще - не наш метод. Что, если вашей таблицей будет пользоваться другой человек, не разбирающийся в СЕ, или даже не знающий имя процесса игры? Но ведь СЕ дает нам не только эту "плюшку", для авто-подключения, и не только возможность взламывать игры, но и запускать пользовательские скрипты, и я говорю не о тех скриптах, которые мы пишем для игр, типа бессмертия... Я говорю о немного другой, может, не всем известной возможности... Вступление как-то затянулось, так что перейдем уже к делу Итак, первым делом, откройте СЕ (если он у вас еще не запущен). Далее - проследуйте в меню (в главном окне): Table -> Show Cheat Table Lua Script (или нажмите комбинацию клавиш Ctrl+Alt+L), после чего откроется окно с большим полем ввода, и кнопкой "Execute Script". В поле ввода мы пишем следующий код: Скрытый текст function Process_Check() local ProcessName = "Tutorial-i386.exe" local bIsAttached = getOpenedProcessID() local dwPID = getProcessIDFromProcessName(ProcessName) if (bIsAttached == 0 and dwPID ~= 0) or (bIsAttached ~= 0 and dwPID ~= bIsAttached) then OpenProcess(ProcessName) end end function Timer_Manager(pTimerObj, dwMilliseconds, pTimerFunction, bTimerEnabled) pTimerObj.OnTimer = pTimerFunction pTimerObj.Interval = dwMilliseconds pTimerObj.Enabled = bTimerEnabled end Timer_AutoAttacher = createTimer(AutoAttach) Timer_Manager(Timer_AutoAttacher, 1000, Process_Check, true) Обратите внимание на переменную "ProcessName", в функции "Process_Check" - она содержит имя нужного нам процесса, к которому нужно подключаться. Следом стоит обратить внимание на параметр "1000", который мы передаем в функцию "Timer_Manager" - она отвечает за интервал срабатывания таймера (то есть, в примере, мы каждые 1000 миллисекунд проверяем список процессов). Примечание: 1000 миллисекунд - это всего-навсего 1 (одна) секунда, можете поставить меньший интервал, или наоборот - больший, но, на мой взгляд, одной секунды вполне достаточно для комфортного подключения к процессу, после запуска игры. После вставки кода, и настройки параметров - нажмите кнопку "Execute script", запустите игру, и вуаля - СЕ автоматически подключился к указанному нами процессу. Стоит только сказать, что если запущено две (или больше) игры одновременно, то, вероятнее всего, СЕ подключится к первому найденному процессу, а не к тому, к какому бы вам хотелось. Так что это стоит учитывать. Теперь вы можете сохранить таблицу, и при каждом ее открытии (даже при не запущенной игре) - этот скрипт будет работать, и будет искать нужный нам процесс, и если СЕ уже подключен к нужному процессу - отключения или переподключения к процессу не произойдет, что немаловажно. Поэтому вы можете спокойно работать с таблицей и игрой дальше, в обычном режиме. Собственно, это все, о чем я хотел рассказать, и, надеюсь, многим эта информация будет полезна. Напоследок лишь хотел бы сказать, что это лишь один пример того, как можно упростить себе жизнь, ведь лень - двигатель прогресса Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 26 февраля, 2016 Поделиться Опубликовано 26 февраля, 2016 if (bIsAttached == 0 and dwPID ~= 0) or (bIsAttached ~= 0 and dwPID ~= bIsAttached) ЕСЛИ (текущий процесс закрыт И найден другой) ИЛИ (текущий процесс открыт И найден другой) можно переделать на ЕСЛИ (текущий процесс НЕ является найденным другим) if (getOpenedProcessID() ~= getProcessIDFromProcessName("Tutorial-i386.exe")) Тоже самое local timerAutorun = createTimer(nil, true) timerAutorun.Interval = 1000 timerAutorun.OnTimer = function () if (getOpenedProcessID() ~= getProcessIDFromProcessName("Tutorial-i386.exe")) then OpenProcess("Tutorial-i386.exe") end end 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 26 февраля, 2016 Поделиться Опубликовано 26 февраля, 2016 Есть и такой вариант, но он разовый getAutoAttachList().add('Tutorial-i386.exe') 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Опубликовано 27 февраля, 2016 Поделиться Опубликовано 27 февраля, 2016 Способов построения условий много, согласен. Возможно в API CE даже есть возможность найти окно по его классу и заголовку, а не только по имени процесса, тогда скрипт может быть более уникальным. Я лишь предложил один способ, если его кто-то изменит у себя, и выложит в этой теме - я ничего не имею против. Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость NEO Опубликовано 3 марта, 2016 Поделиться Опубликовано 3 марта, 2016 (изменено) Что нужно добавить, что бы трейнер всегда мог определить процесс? Не в зависимости, что сначала запустили трейнер или игру. Данный вариант работает только, когда запускаешь сначала трейнер, потом игру, а если наоборот это сделать, то трейнер процесс не определяет и не работает вообщем то. function myattach(timer) if getProcessIDFromProcessName("Tutorial-i386.exe") ~= nil then object_destroy(timer) openProcess("Tutorial-i386.exe") end end t=createTimer(nil); timer_setInterval(t,10) timer_onTimer(t,myattach) Данный выше вариант работает наоборот Сначала запускаешь игру, её сворачиваешь, запускаешь трейнер и тогда всё работает) Если всё сделать наоборот, то нифига не работает=( Можно ли как то это всё объеденить? Изменено 3 марта, 2016 пользователем NEO Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 3 марта, 2016 Поделиться Опубликовано 3 марта, 2016 (изменено) 1 час назад, NEO сказал: Что нужно добавить, что бы трейнер всегда мог определить процесс? В твоём примере не работает таймер. Сделай так и всё заработает: Скрытый текст function myattach(timer) if getProcessIDFromProcessName("Tutorial-i386.exe") ~= nil then object_destroy(timer) openProcess("Tutorial-i386.exe") end end t=createTimer(true) timer_setInterval(t,10) timer_onTimer(t,myattach) Изменено 3 марта, 2016 пользователем Garik66 Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость NEO Опубликовано 3 марта, 2016 Поделиться Опубликовано 3 марта, 2016 17 минуту назад, Garik66 сказал: В твоём примере не работает таймер. Сделай так и всё заработает: Показать содержимое function myattach(timer) if getProcessIDFromProcessName("Tutorial-i386.exe") ~= nil then object_destroy(timer) openProcess("Tutorial-i386.exe") end end t=createTimer(true) timer_setInterval(t,10) timer_onTimer(t,myattach) Тогда вообще ничего не работает. Пробовал сначала запустить трейнер, потом игру, и наоборот. Эффекта 0. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 3 марта, 2016 Поделиться Опубликовано 3 марта, 2016 15 минуту назад, NEO сказал: Тогда вообще ничего не работает. Пробовал сначала запустить трейнер, потом игру, и наоборот. Эффекта 0. Почему всегда приходится записывать видео, чтобы доказать? NEO, ты точно попробовал? Видео: 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость NEO Опубликовано 3 марта, 2016 Поделиться Опубликовано 3 марта, 2016 16 минуту назад, Garik66 сказал: Почему всегда приходится записывать видео, чтобы доказать? NEO, ты точно попробовал? Видео: А вы попробуйте скомпилировать трейнер в exe формат, выключить Cheat Engine и проверить. Если у меня запущен Cheat Engine у меня тоже определяет процесс и работает всё, в скомпилированном виде нифига=( Уже попробовал раз 10. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 3 марта, 2016 Поделиться Опубликовано 3 марта, 2016 21 минуты назад, NEO сказал: А вы попробуйте скомпилировать трейнер в exe формат Вот Фома-неверующий . Видео: 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 4 марта, 2016 Поделиться Опубликовано 4 марта, 2016 18 час назад, NEO сказал: А вы попробуйте скомпилировать трейнер в exe формат, выключить Cheat Engine и проверить. NEO, ну что так и не получается? Снял для тебя ещё видео и в скрипт добавил не много для наглядности: Скрытый текст function CETimer1Timer(sender) if getProcessIDFromProcessName("Tutorial-i386.exe") ~= nil then openProcess("Tutorial-i386.exe") control_setCaption(UDF1_CELabel1, "Обучение СЕ запущено") Value = readInteger('["Tutorial-i386.exe"+2345D0]+480') if (Value ~= nil) then control_setCaption(UDF1_CEEdit1, Value) end object_destroy(CETimer1) else control_setCaption(UDF1_CELabel1, "Обучение СЕ не запущено") end end 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость NEO Опубликовано 4 марта, 2016 Поделиться Опубликовано 4 марта, 2016 28 минуты назад, Garik66 сказал: NEO, ну что так и не получается? Снял для тебя ещё видео и в скрипт добавил не много для наглядности: Показать содержимое function CETimer1Timer(sender) if getProcessIDFromProcessName("Tutorial-i386.exe") ~= nil then openProcess("Tutorial-i386.exe") control_setCaption(UDF1_CELabel1, "Обучение СЕ запущено") Value = readInteger('["Tutorial-i386.exe"+2345D0]+480') if (Value ~= nil) then control_setCaption(UDF1_CEEdit1, Value) end object_destroy(CETimer1) else control_setCaption(UDF1_CELabel1, "Обучение СЕ не запущено") end end Да блин( Ну капец!( Всё ровно не работает, я уже даже не знаю в чём дело О_О Спасибо вам огромное за помощь, буду разбираться, скорей всего что то не правильно в трейнере самом( Попробую поискать исходники других трейнеров, буду на их основе разбираться О_О Ещё раз спасибо вам) К сожалению плюсики ставить не могу пока=( Так бы уже закидал!) Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 14 мая, 2016 Поделиться Опубликовано 14 мая, 2016 А что если игра запускает несколько процессов с одинаковыми именами и нам нужен последний запущенный процесс? Например лаунчер и саму игру. Ссылка на комментарий Поделиться на другие сайты Поделиться
Submarina Опубликовано 6 ноября, 2016 Поделиться Опубликовано 6 ноября, 2016 (изменено) Привет всем, можно как то сделать, что бы при запуске процесс, ещё каким ни будь цветом загоралась, красным или синим например. Я в самой CE форме полазил, но что то не нашёл такого, я знаю что можно цвет поменять только на функциях которые прикрепляешь к форме, вот у них можно менять цвет активации, а на процесс нет, что то я не нашёл такого, подскажите пожалуйста. Изменено 6 ноября, 2016 пользователем Baracuda Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Опубликовано 6 ноября, 2016 Поделиться Опубликовано 6 ноября, 2016 UDF1.CElabel1.Font.Color = 0x00D27555 // синий Ссылка на комментарий Поделиться на другие сайты Поделиться
Submarina Опубликовано 6 ноября, 2016 Поделиться Опубликовано 6 ноября, 2016 можешь сказать, как самому цвета менять, где можно посмотреть и другие цвета. 0x00D27555 Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Опубликовано 6 ноября, 2016 Поделиться Опубликовано 6 ноября, 2016 7 минут назад, Baracuda сказал: можешь сказать, как самому цвета менять, где можно посмотреть и другие цвета. 0x00D27555 Скрытый текст Ссылка на комментарий Поделиться на другие сайты Поделиться
Submarina Опубликовано 6 ноября, 2016 Поделиться Опубликовано 6 ноября, 2016 (изменено) Я наверное не так объяснил, я имею веду, вот когда Trainer запускаешь, то Процесс ещё не найденный горит синим цветом, а когда процесс найден, чтобы загорался жёлтым цветом например. Как мене это сделать. А так как ты показал, он всегда будет гореть тем цветом который у кажешь, я это знаю. Но мене надо немного подругому Изменено 6 ноября, 2016 пользователем Baracuda Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Опубликовано 6 ноября, 2016 Поделиться Опубликовано 6 ноября, 2016 Скрытый текст function procctimer() if getProcessIDFromProcessName("Tutorial-i386.exe") == nil then UDF1.CElabel1.Font.Color = 0x00D27555 // синий else if getProcessIDFromProcessName("Tutorial-i386.exe") ~= nil then UDF1.CElabel1.Font.Color = 0x002E41C5 // красный end end end Ссылка на комментарий Поделиться на другие сайты Поделиться
Submarina Опубликовано 6 ноября, 2016 Поделиться Опубликовано 6 ноября, 2016 (изменено) появилась новая проблема, вот видео записал, не пойму что не так. http://dropmefiles.com/ckeUj Саму программу Cheat Engine, уже заново раз 10 перестанавливал и всё равно выдавало эту ошибку. Изменено 6 ноября, 2016 пользователем Baracuda Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 6 ноября, 2016 Поделиться Опубликовано 6 ноября, 2016 24 минуты назад, Baracuda сказал: появилась новая проблема, Это не проблема - это просто не дописанный скрипт (не верно написанный скрипт), если процесса нет - нужно отключить таймер. 25 минуты назад, Baracuda сказал: Саму программу Cheat Engine, уже заново раз 10 перестанавливал и всё равно выдавало эту ошибку. Дело не в СЕ. Ссылка на комментарий Поделиться на другие сайты Поделиться
Submarina Опубликовано 6 ноября, 2016 Поделиться Опубликовано 6 ноября, 2016 (изменено) Да но на видео от ForNEO, работало без проблем. Изменено 6 ноября, 2016 пользователем Baracuda Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 6 ноября, 2016 Поделиться Опубликовано 6 ноября, 2016 27 минуты назад, Baracuda сказал: Да но на видео от ForNEO, работало без проблем. Выложи сюда свой скрипт - поправим (только после кино - смотрю сейчас). А на видео ForNEO я уже не помню какой был скрипт. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 6 ноября, 2016 Поделиться Опубликовано 6 ноября, 2016 42 минуты назад, Baracuda сказал: Да но на видео от ForNEO, работало без проблем. А понял, так у меня на видео указатели найдены для версии СЕ 6,5 кажется, а у тебя версия 6,6. Сперва найди указатели для адреса Шага 2, замени в скрипте и будет тоже всё работать. Ссылка на комментарий Поделиться на другие сайты Поделиться
Submarina Опубликовано 6 ноября, 2016 Поделиться Опубликовано 6 ноября, 2016 Не это не помогает Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения