Razi Опубликовано 7 марта, 2016 Поделиться Опубликовано 7 марта, 2016 1) Мне интересно, можно ли в форму(окошко), которую создает Cheat Engine засунуть три адреса по одному байту, по горизонтали? То есть, у меня есть три адреса по одному байту, общего игрового времени: первый адрес(1 байт) это часы, второй адрес(1 байт) минуты, третий адрес(1 байт) секунды. И вот эти адреса, я хочу вставить по горизонтали в окошко, что создает CE. Чтоб получилось как часы. Никто незнает, можно ли такое сделать? 2) И еще. У меня есть еще четырехбайтный адрес, который отображает общее игровое время (только) в секундах. Можно ли в форму(окошко), которую создает Cheat Engine вставить четырехбайтный адрес, но так, чтоб эти общие секунды отображались как часы? То есть по горизонтали в первой ячейке - часы, второй - минуты, третей - секунды. Например, в адресе показывает 360,000 секунд, а в форме например отображается 100 часов, 0 минут, 0 секунд. Возможно такое сделать? Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 7 марта, 2016 Поделиться Опубликовано 7 марта, 2016 (изменено) 17 час назад, Razi сказал: 1) Мне интересно, можно ли в форму(окошко), 2) Можно ли в форму(окошко), Я уже тебе писал в ЛС - можно. Видео: скрипт: Скрытый текст [ENABLE] {$LUA} timer = createTimer(true) timer:setInterval(100) timer.OnTimer = function() Seconds = getAddressList().getMemoryRecordByID("87").Value Minute = getAddressList().getMemoryRecordByID("88").Value control_setCaption(UDF1_CELabel5,Minute) control_setCaption(UDF1_CELabel7,Seconds) end {$ASM} aobscan(aob_TimerMission,xx89xxxxxxxxc2xxxxxxxxxxxxxxxxxxxxxxxxxx8bxxxx85xx74xx8bxxxxxxxxxx8bxxffxxxxxxxxxx85) alloc(newmem_TimerMission,2048) label(returnhere_TimerMission) label(code) label(code1) label(code2) label(timer1) registersymbol(timer1) label(timer2) registersymbol(timer2) label(timer3) registersymbol(timer3) label(once) label(Coefficient) registersymbol(aob_TimerMission) newmem_TimerMission: cmp [once],1 jne code1 mov dword ptr [timer2],eax fild dword ptr [timer2] fdiv [Coefficient] push eax lea eax,[timer2] db DB 08 pop eax push eax push ebx push ecx mov ebx,[timer2] mov ecx,0 imul ecx,ebx,#60 cmp eax,ecx sub eax,ecx mov [timer3],eax jmp code2 code2: pop ecx pop ebx pop eax mov [once],0 code1: inc eax inc [timer3] cmp [timer3],#60 jne code mov [timer3],0 inc [timer2] code: mov dword ptr [timer1],eax mov [ecx+08],eax pop esi jmp returnhere_TimerMission timer1: dd 0 timer2: dd 0 timer3: dd 0 once: dd 1 Coefficient: dd (float)60 aob_TimerMission: jmp newmem_TimerMission returnhere_TimerMission: [DISABLE] {$LUA} timer:setEnabled(false) {$ASM} aob_TimerMission: // 016674EC db 40 89 41 08 5E unregistersymbol(timer1) unregistersymbol(timer2) unregistersymbol(timer3) unregistersymbol(aob_TimerMission) dealloc(newmem_TimerMission) Для твоего случая нужно будет заменить соответствующие строчки секунд и минут: Seconds = getAddressList().getMemoryRecordByID("87").Value на Seconds = readBytes('009F2C47',1) // вместо 009F2C47 введи соответствующий адрес. Ну и думаю ты понимаешь, что ассемблерная часть скрипта тебе не нужна в твоём первом случае. Изменено 7 марта, 2016 пользователем Garik66 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Razi Опубликовано 7 марта, 2016 Автор Поделиться Опубликовано 7 марта, 2016 (изменено) 6 часов назад, Garik66 сказал: Для твоего случая нужно будет заменить соответствующие строчки секунд и мину Что значит в скрипте UDF1_CELabel5 ? Пока сделал и подправил скрипт вот так, но что-то не работает: Скрытый текст [ENABLE] {$LUA} timer = createTimer(true) timer:setInterval(100) timer.OnTimer = function() Hours = readBytes('009E9184',1) Minutes = readBytes('009E9185',1) Seconds = readBytes('009E9186',1) control_setCaption(UDF1_CELabel3,Hours) control_setCaption(UDF1_CELabel5,Minute) control_setCaption(UDF1_CELabel7,Seconds) end [DISABLE] {$LUA} timer:setEnabled(false) Изменено 7 марта, 2016 пользователем Razi Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 7 марта, 2016 Поделиться Опубликовано 7 марта, 2016 18 минуту назад, Razi сказал: Что значит в скрипте UDF1_CELabel5 ? UDF1 - имя формы. CELabel - имя лейбла, 1,2,3 и т.д. - номер лейбла по порядку, Вот посмотри видео из этого сообщения: 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Razi Опубликовано 7 марта, 2016 Автор Поделиться Опубликовано 7 марта, 2016 Хорошо попробую счас, за часа 2-3 наверно разберусь. И конечно у меня может не получится и после того как попробую, свяжусь, здесь в этой теме. Ссылка на комментарий Поделиться на другие сайты Поделиться
Razi Опубликовано 7 марта, 2016 Автор Поделиться Опубликовано 7 марта, 2016 (изменено) А есть еще другие ссылки где создаются формы? Как изменить размер отображаемых цифр? Изменено 7 марта, 2016 пользователем Razi Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 7 марта, 2016 Поделиться Опубликовано 7 марта, 2016 24 минуты назад, Razi сказал: Как изменить размер отображаемых цифр? Выдели нужный лейбл на форме. Перейди в "Object Inspector" Вкладка "Properties" "Font" Выбери нужный шрифт и размер. 32 минуты назад, Razi сказал: А есть еще другие ссылки где создаются формы? 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Razi Опубликовано 7 марта, 2016 Автор Поделиться Опубликовано 7 марта, 2016 C размером разобрался, теперь нужно узнать как надписи делать в этой форме? т.е. как написать часы, минуты над цифрами в форме? Думал, что сам разберусь, не получилось. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 7 марта, 2016 Поделиться Опубликовано 7 марта, 2016 1 минуту назад, Razi сказал: C размером разобрался, теперь нужно узнать как надписи делать в этой форме? т.е. как написать часы, минуты над цифрами в форме? Думал, что сам разберусь, не получилось. Такие же лейблы : Кинь лейбл на форму Выдели его Перейди в "Object Inspector" Вкладка "Properties" "Caption" и пиши любой текст, какой захочешь. PS: По трейнерам: Вот ещё нашёл у нас на форуме, вроде целый цикл видео-уроков, я его не смотрел, но должен подойти: 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Razi Опубликовано 7 марта, 2016 Автор Поделиться Опубликовано 7 марта, 2016 Спасибо. А по второму вопросу, если делать все точно также, как по первому вопросу, то разве будет работать? потому что, в том четырехбайтном адресе отображаются только секунды, а мне нужно чтоб в форме отображались и секунды и минуты и часы. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 7 марта, 2016 Поделиться Опубликовано 7 марта, 2016 3 минуты назад, Razi сказал: Спасибо. А по второму вопросу, если делать все точно также, как по первому вопросу, то разве будет работать? потому что, в том четырехбайтном адресе отображаются только секунды, а мне нужно чтоб в форме отображались и секунды и минуты и часы. А для этого я тебе и кинул в самом начале именно скрипт, в котором в ассемблерной вставке идёт пересчёт секунд -> в секунды и минуты, Тебе нужно в нём разобраться и доделать его для расчёта ещё и часов. А вообще я тебе ещё ранее давал ссылку на свою статью - Работа с игровыми таймерами. Ссылка на комментарий Поделиться на другие сайты Поделиться
Razi Опубликовано 7 марта, 2016 Автор Поделиться Опубликовано 7 марта, 2016 Если б не сказал, что в скрипте ассемблерная вставка пересчитывает в минуты, то я бы даже если б пару раз просмотрел этот скрипт, все равно бы не догадался, что этот скрипт вот такое делает. Забыл спросить. Я в форме которую создал по первому вопросу, сначала вставлял таймер CETimer1 на часы, CETimer2 на минуты, CETimer3 на секунды. А потом забрал эти таймеры из формы, потому что внутри Lua скрипта и так есть один таймер. Можно убирать эти CETimer1,2,3 таймеры из формы? Твою тему просматривал раньше, но просматривал только то, что мне было нужно. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 7 марта, 2016 Поделиться Опубликовано 7 марта, 2016 (изменено) 15 минуту назад, Razi сказал: Если б не сказал, что в скрипте ассемблерная вставка пересчитывает в минуты, то я бы даже если б пару раз просмотрел этот скрипт, все равно бы не догадался, что этот скрипт вот такое делает. Ну на видео, если внимательно смотреть видно. Я тебе давал уже ссылку на статью раньше (и думал, что ты её посмотришь внимательно), что ты её не смотрел полностью не моя вина. А намёк очевиден -> я объединил оба твоих вопроса при ответе. Да и пора уже начинать пользоваться поисковиком форума самому. Изменено 7 марта, 2016 пользователем Garik66 Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 7 марта, 2016 Поделиться Опубликовано 7 марта, 2016 22 минуты назад, Razi сказал: Можно убирать эти CETimer1,2,3 таймеры из формы? Да - выдели на форме не нужный объект и нажми кнопку "Delete" на клавиатуре компьютера. Ссылка на комментарий Поделиться на другие сайты Поделиться
Razi Опубликовано 7 марта, 2016 Автор Поделиться Опубликовано 7 марта, 2016 (изменено) Имею виду, нужны ли эти таймеры CETimer1,2,3 в форме, для правильной работы формы? Ведь можно и обойтись тем таймером, что в Lua скрипте? Как правильнее? Цитата А намёк очевиден -> я объединил оба твоих вопроса при ответе. Вот это, мне и показалось подозрительным. Изменено 7 марта, 2016 пользователем Razi Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 7 марта, 2016 Поделиться Опубликовано 7 марта, 2016 25 минуты назад, Razi сказал: Имею виду, нужны ли эти таймеры CETimer1,2,3 в форме, для правильной работы формы? Ведь можно и обойтись тем таймером, что в Lua скрипте? Как правильнее? Если делаешь как у меня в скрипте, то эти таймеры CETimer1,2,3 в форме не нужны. Ссылка на комментарий Поделиться на другие сайты Поделиться
Razi Опубликовано 7 марта, 2016 Автор Поделиться Опубликовано 7 марта, 2016 А вот по второму вопросу в разы сложнее будет. Я подправлю скрипт под свои условия, но конечно нужно будет, чтоб ты поправил то, что будет не верно, хорошо? Скрипт выложу сюда. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 7 марта, 2016 Поделиться Опубликовано 7 марта, 2016 (изменено) 3 минуты назад, Razi сказал: хорошо? Хорошо, как будет время. И тебе ещё нужно разобраться как он работает, попробуй его закомментировать, полностью (чтобы было тебе понятней). Пользуйся комментариями в моей статье Работа с игровыми таймерами. Изменено 7 марта, 2016 пользователем Garik66 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 7 марта, 2016 Поделиться Опубликовано 7 марта, 2016 ЗЫ: А с 1 вопросом всё доделал? Работает у тебя? Ссылка на комментарий Поделиться на другие сайты Поделиться
Razi Опубликовано 7 марта, 2016 Автор Поделиться Опубликовано 7 марта, 2016 (изменено) 15 минуту назад, Garik66 сказал: А с 1 вопросом всё доделал? Работает у тебя? Да, разобрался, все работает, спасибо. Есть только один нюанс, но с этим, так понял ниче не сделаешь. Когда от 1 до 9 в форме, то показывает только одну циферку, например "5" секунд, а хотелось бы чтоб отображалось "05" секунд, как в часах. Но я и так рад, что так как есть, работает. Изменено 7 марта, 2016 пользователем Razi Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 7 марта, 2016 Поделиться Опубликовано 7 марта, 2016 Только что, Razi сказал: а хотелось бы чтоб отображалось "05" секунд, как в часах. Это тоже можно сделать. Сделать можно всё что угодно, только нужно разобраться. Я же тебе говорил LUA я не знаю, начал писать на LUA, отвечая на твои вопросы и вопросы Baracuda. Это видео и скрипт я написал за 10 минут. И это только один из вариантов решения твоей задачи, а решений может быть сколько угодно. Можно использовать другой объект на форме, можно использовать только один лайбл и чтобы в нём писались и часы и минуты и секунды, короче вариантов может быть много. Передо мной такая задача не стояла, у меня была задача показать, что это можно сделать. Если нужно то покопайся, поизучай и сделай именно так как нужно тебе. И начинай писать сам, чем больше будешь писать сам, тем лучше разберёшься. Ссылка на комментарий Поделиться на другие сайты Поделиться
Razi Опубликовано 8 марта, 2016 Автор Поделиться Опубликовано 8 марта, 2016 (изменено) Если учесть, что я с первым вариантом разбирался 3 с половиной часа, то при написании скрипта по второму варианту, у меня возникнет не меньше 20 вопросов. И даже если я получу ответы на вопросы, то если смогу написать скрипт, то написание у меня займет не меньше десяти часов с учетом времени на вопросы и ответы. Попробовал закоментировать скрипт, но так как половина того что там написано, я незнаю что оно значит, то для меня чересчур сложно даже закоментировать такой скрипт. И чересчур сложное задание для меня, написать такой скрипт. У меня просто не хватит терпения. Вот рабочий скрипт по первому варианту: Скрытый текст [ENABLE] {$LUA} timer = createTimer(true) timer:setInterval(300) timer.OnTimer = function() Hours = readBytes('009E9184',1) Minutes = readBytes('009E9185',1) Seconds = readBytes('009E9186',1) control_setCaption(UDF1_CELabel1,Hours) control_setCaption(UDF1_CELabel2,Minutes) control_setCaption(UDF1_CELabel3,Seconds) end [DISABLE] {$LUA} timer:setEnabled(false) По второму варианту я догадываюсь, что нужно отталкиваться что когда 60 минут, то поднять на 1 таймер, там где показывает часы, и обнулить таймер с минутами. В скрипте уже есть такое же, только секунды поднимают на 1 таймер, там где показывает минуты. Изменено 8 марта, 2016 пользователем Razi Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 8 марта, 2016 Поделиться Опубликовано 8 марта, 2016 По второму вопросу - в моём скрипте самый сложный участок - это разовый пересчёт таймера из секунд в минуты и секунды в случае, если пользователь включил скрипт не сначала работы таймера. Этот разовый пересчёт можно тебе выкинуть (пусть пользователь с самого начала включает скрипт), тогда сам скрипт будет простым. Вот основной код (без разового пересчёта): inc eax inc [timer3] cmp [timer3],#60 jne code mov [timer3],0 inc [timer2] code: mov [ecx+08],eax pop esi jmp returnhere у меня timer2 - мин, timer3 - сек. тебе нужны три таймера -> таймер1 сек, таймер2 мин и таймер3 часы. т.е. добавь ещё один таймер, а дальше попробуй написать скрипт, тем более задачу ты понимаешь: 3 часа назад, Razi сказал: По второму варианту я догадываюсь, что нужно отталкиваться что когда 60 минут, то поднять на 1 таймер, там где показывает часы, и обнулить таймер с минутами. Ссылка на комментарий Поделиться на другие сайты Поделиться
Razi Опубликовано 8 марта, 2016 Автор Поделиться Опубликовано 8 марта, 2016 (изменено) Меня сбивают с толку регистры в скрипте, меня это почти сразу запутывает. Дело еще и в том, что у тебя в скрипте три таймера: один - минуты, второй - секунды, это понятно, а вот зачем третий таймер еще не понял. Подумал сначала, что ты вставил таймер для часов. 5 часов назад, Garik66 сказал: пусть пользователь с самого начала включает скрипт Пересчет прийдется оставить, у тебя это кстати самая полезная часть в скрипте. Потому что, таймер расчитан на больше чем 1000 часов игры, а это где-то пять-шесть месяцев игры. То по-моему тут пересчет очень нужен, особенно если загружать сохраненную игру, где время уже 100 или 200 часов игры. А вообще этот четырехбайтный адрес, который считает секунды, расчитан на 136 лет игры с копейками и после этого, читал что он должен обнулиться и начать идти заново. Изменено 8 марта, 2016 пользователем Razi Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 8 марта, 2016 Поделиться Опубликовано 8 марта, 2016 (изменено) 2 часа назад, Razi сказал: а вот зачем третий таймер еще не понял В статье Работа с игровыми таймерами., если читать полностью с начала до конца, всё объяснено. label(timer1) // timer1 добавлен в скрипт и в таблицу для большей // наглядности, в самом чите он не нужен. а, если ещё посмотреть видео, то видно, что в таблице timer1 называется "Timer Mission" - т.е. это игровой таймер (в сек). В предыдущем сообщении я тебе намекнул, что задачу можно разделить на две: 1. Задача - работа самого таймера, но уже в часах, минутах и секундах. 2. Задача - разовый пересчёт из показаний в сек. - в сек, мин и часы. 2 часа назад, Razi сказал: у тебя это кстати самая полезная часть в скрипте Не самая полезная, так как без первой части скрипт бессмыслен, но довольно трудная для новичков. Первая часть очень проста, тело скрипта у тебя будет выглядеть так: inc [timer3] // таймер в секундах cmp [timer3],#60 jne code mov [timer3],0 inc [timer2] // таймер в минутах cmp [timer2],#60 jne code mov [timer2],0 inc [timer1] // таймер в часах code: Изменено 8 марта, 2016 пользователем Garik66 Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения