Перейти к содержанию

Возможно ли в форму, которую создает CE вставить три адреса


Razi

Рекомендуемые сообщения

1) Мне интересно, можно ли в форму(окошко), которую создает Cheat Engine засунуть три адреса по одному байту, по горизонтали? То есть, у меня есть три адреса по одному байту, общего игрового времени: первый адрес(1 байт) это часы, второй адрес(1 байт) минуты, третий адрес(1 байт) секунды. И вот эти адреса, я хочу вставить по горизонтали в окошко, что создает CE. Чтоб получилось как часы. Никто незнает, можно ли такое сделать?

 

2) И еще. У меня есть еще четырехбайтный адрес, который отображает общее игровое время (только) в секундах. Можно ли в форму(окошко), которую создает Cheat Engine вставить четырехбайтный адрес, но так, чтоб эти общие секунды отображались как часы? То есть по горизонтали в первой ячейке - часы, второй - минуты, третей - секунды. Например, в адресе показывает 360,000 секунд, а в форме например отображается 100 часов, 0 минут, 0 секунд. Возможно такое сделать?

Ссылка на комментарий
Поделиться на другие сайты

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 введи соответствующий адрес.

Ну и думаю ты понимаешь, что ассемблерная часть скрипта тебе не нужна в твоём первом случае. 

Изменено пользователем Garik66
  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

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)

 

 

Изменено пользователем Razi
Ссылка на комментарий
Поделиться на другие сайты

18 минуту назад, Razi сказал:

Что значит в скрипте UDF1_CELabel5 ?

UDF1 - имя формы.

CELabel - имя лейбла, 1,2,3 и т.д. - номер лейбла по порядку,

Вот посмотри видео из этого сообщения:

 

  

  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

Хорошо попробую счас, за часа 2-3 наверно разберусь. И конечно у меня может не получится и после того как попробую, свяжусь, здесь в этой теме.

Ссылка на комментарий
Поделиться на другие сайты

24 минуты назад, Razi сказал:

Как изменить размер отображаемых цифр?

Выдели нужный лейбл на форме.

Перейди в "Object Inspector" 

Вкладка "Properties"

"Font"

Выбери нужный шрифт и размер.

32 минуты назад, Razi сказал:

А есть еще другие ссылки где создаются формы?

 

 

  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

C размером разобрался, теперь нужно узнать как надписи делать в этой форме? т.е. как написать часы, минуты над цифрами в форме? Думал, что сам разберусь, не получилось.

Ссылка на комментарий
Поделиться на другие сайты

1 минуту назад, Razi сказал:

C размером разобрался, теперь нужно узнать как надписи делать в этой форме? т.е. как написать часы, минуты над цифрами в форме? Думал, что сам разберусь, не получилось.

Такие же лейблы :

Кинь лейбл на форму

Выдели его

Перейди в "Object Inspector" 

Вкладка "Properties"

"Caption"

и пиши любой текст, какой захочешь.

 

 

 

PS:  По трейнерам:

Вот ещё нашёл у нас на форуме, вроде целый цикл видео-уроков, я его не смотрел, но должен подойти:

 

 

  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

Спасибо. А по второму вопросу, если делать все точно также, как по первому вопросу, то разве будет работать? потому что, в том четырехбайтном адресе отображаются только секунды, а мне нужно чтоб в форме отображались и секунды и минуты и часы.

Ссылка на комментарий
Поделиться на другие сайты

3 минуты назад, Razi сказал:

Спасибо. А по второму вопросу, если делать все точно также, как по первому вопросу, то разве будет работать? потому что, в том четырехбайтном адресе отображаются только секунды, а мне нужно чтоб в форме отображались и секунды и минуты и часы.

А для этого я тебе и кинул в самом начале именно скрипт, в котором в ассемблерной вставке идёт пересчёт секунд -> в секунды и минуты, Тебе нужно в нём разобраться и доделать его для расчёта ещё и часов.

А вообще я тебе ещё ранее давал ссылку на свою статью - 

Ссылка на комментарий
Поделиться на другие сайты

Если б не сказал, что в скрипте ассемблерная вставка пересчитывает в минуты, то я бы даже если б пару раз просмотрел  этот скрипт, все равно бы не догадался, что этот скрипт вот такое делает.

Забыл спросить. Я в форме которую создал по первому вопросу, сначала вставлял таймер CETimer1 на часы, CETimer2 на минуты, CETimer3 на секунды. А потом забрал эти таймеры из формы, потому что внутри Lua скрипта и так есть один таймер. Можно убирать эти CETimer1,2,3 таймеры из формы?

Твою тему просматривал раньше, но просматривал только то, что мне было нужно.

Ссылка на комментарий
Поделиться на другие сайты

15 минуту назад, Razi сказал:

Если б не сказал, что в скрипте ассемблерная вставка пересчитывает в минуты, то я бы даже если б пару раз просмотрел  этот скрипт, все равно бы не догадался, что этот скрипт вот такое делает.

Ну на видео, если внимательно смотреть видно. 

Я тебе давал уже ссылку на статью раньше (и думал, что ты её посмотришь внимательно), что ты её не смотрел полностью не моя вина.

А намёк очевиден -> я объединил оба твоих вопроса при ответе.

Да и пора уже начинать пользоваться поисковиком форума самому.

Изменено пользователем Garik66
Ссылка на комментарий
Поделиться на другие сайты

22 минуты назад, Razi сказал:

Можно убирать эти CETimer1,2,3 таймеры из формы?

Да - выдели на форме не нужный объект и нажми кнопку "Delete" на клавиатуре компьютера.

Ссылка на комментарий
Поделиться на другие сайты

Имею виду, нужны ли  эти таймеры CETimer1,2,3 в форме, для правильной работы формы? Ведь можно и обойтись тем таймером, что в Lua скрипте? Как правильнее?

Цитата

А намёк очевиден -> я объединил оба твоих вопроса при ответе.

Вот это, мне и показалось подозрительным.

Изменено пользователем Razi
Ссылка на комментарий
Поделиться на другие сайты

25 минуты назад, Razi сказал:

Имею виду, нужны ли  эти таймеры CETimer1,2,3 в форме, для правильной работы формы? Ведь можно и обойтись тем таймером, что в Lua скрипте? Как правильнее?

Если делаешь как у меня в скрипте, то эти таймеры CETimer1,2,3 в форме не нужны.

Ссылка на комментарий
Поделиться на другие сайты

А вот по второму вопросу в разы сложнее будет. Я подправлю скрипт под свои условия, но конечно нужно будет, чтоб ты поправил то, что будет не верно, хорошо? Скрипт выложу сюда.

Ссылка на комментарий
Поделиться на другие сайты

3 минуты назад, Razi сказал:

хорошо?

Хорошо, как будет время.

И тебе ещё нужно разобраться как он работает, попробуй его закомментировать, полностью (чтобы было тебе понятней). Пользуйся комментариями в моей статье

Изменено пользователем Garik66
  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

15 минуту назад, Garik66 сказал:

А с 1 вопросом всё доделал? Работает у тебя?

 

Да, разобрался, все работает, спасибо. Есть только один нюанс, но с этим, так понял ниче не сделаешь. Когда от 1 до 9 в форме, то показывает только одну циферку, например "5" секунд, а хотелось бы чтоб отображалось "05" секунд, как в часах. Но я и так рад, что так как есть, работает.

Изменено пользователем Razi
Ссылка на комментарий
Поделиться на другие сайты

Только что, Razi сказал:

а хотелось бы чтоб отображалось "05" секунд, как в часах.

Это тоже можно сделать. Сделать можно всё что угодно, только нужно разобраться.

Я же тебе говорил LUA я не знаю, начал писать на LUA, отвечая на твои вопросы и вопросы Baracuda.

Это видео и скрипт я написал за 10 минут. И это только один из вариантов решения твоей задачи, а решений может быть сколько угодно.

Можно использовать другой объект на форме, можно использовать только один лайбл и чтобы в нём писались и часы и минуты и секунды, короче вариантов может быть много. Передо мной такая задача не стояла, у меня была задача показать, что это можно сделать. Если нужно то покопайся, поизучай и сделай именно так как нужно тебе. 

И начинай писать сам, чем больше будешь писать сам, тем лучше разберёшься. 

Ссылка на комментарий
Поделиться на другие сайты

Если учесть, что я с первым вариантом разбирался 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 таймер, там где показывает минуты.

Изменено пользователем Razi
Ссылка на комментарий
Поделиться на другие сайты

По второму вопросу - в моём скрипте самый сложный участок - это разовый пересчёт таймера из секунд в минуты и секунды в случае, если пользователь включил скрипт не сначала работы таймера.  

Этот разовый пересчёт можно тебе выкинуть (пусть пользователь с самого начала включает скрипт), тогда сам скрипт будет простым.

Вот основной код (без разового пересчёта):

 

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 таймер, там где показывает часы, и обнулить таймер с минутами.

 

Ссылка на комментарий
Поделиться на другие сайты

Меня сбивают с толку регистры в скрипте, меня это  почти сразу запутывает. Дело еще и в том, что у тебя в скрипте три таймера: один - минуты, второй - секунды, это понятно, а вот зачем третий таймер еще не понял. Подумал сначала, что ты вставил таймер для часов.

5 часов назад, Garik66 сказал:

пусть пользователь с самого начала включает скрипт

Пересчет прийдется оставить, у тебя это кстати самая полезная часть в скрипте. Потому что, таймер расчитан на больше чем 1000 часов игры, а это где-то пять-шесть месяцев игры. То по-моему тут пересчет очень нужен, особенно если загружать сохраненную игру, где время уже 100 или 200 часов игры. А вообще этот четырехбайтный адрес, который считает секунды, расчитан на 136 лет игры с копейками и после этого, читал что он должен обнулиться и начать идти заново.

Изменено пользователем Razi
Ссылка на комментарий
Поделиться на другие сайты

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:

     

Изменено пользователем Garik66
Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.