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

Cheat Engine скрипт с интервалом


vikkz

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

Доброе время суток. Вообщем такая у меня проблема - нашёл я игрушку (понравилась), хочется немного почитерить. Хочу написать скрипт, но нечего в этом не понимаю, только заморозить и найти данные в Cheatn Engine. Может кто поможет, вот я нашел значение и мне бы хотелось, чтоб это значение менялось с интервалом. например при нажатии кнопки значение менялось на хххх (любое число) на секунд 10, потом это значение менялось на 1-500, на 1-2 секунды, потом назад на хххх (круговорот). Кто может помочь?

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

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

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

Если ты используешь Chea Engine, то необязательно делать это с помощью ассемблерной вставки. Ну, то есть, она тоже понадобится, возможно. Но обрати свое внимание на Lua в СЕ. 

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

Здравствуйте @vikkz! Могу предложить вам такой вариант:

Скрытый текст

function vikkz(timer)
--
local date = os.date("*t") --print(date.sec)

if(date.sec > 1 and date.sec <= 15) then
	-- от 0 до 15 сек = 15 значение
	writeFloat('2762CD1C', 15) -- установить значение на 15
	-- writeInteger можно так
end

if(date.sec > 15 and date.sec <= 30) then
	 writeFloat('2762CD1C', 500) -- установить значение на 500
end

if(date.sec > 30 and date.sec <= 45) then
	writeFloat('2762CD1C', 15) -- установить значение на 15
end

if(date.sec > 45 and date.sec <= 60) then
	writeFloat('2762CD1C', 500) -- установить значение на 500
end

-- timer.destroy() чтоб остановить
-- object_destroy(timer)
--
end
t=createTimer(true)
timer_setInterval(t,10)
timer_onTimer(t,vikkz)

 

Демонстрация работы:

Скрытый текст

 

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

43 минуты назад, vagingameh сказал:

Здравствуйте @vikkz! Могу предложить вам такой вариант:

Полностью кмк бесполезный скрипт. Причина? Таймер же память жрет причем нормально так..

Пример такой:
 

Скрытый текст

[ENABLE]
aobscanmodule(Test,Tutorial-x86_64.exe+2AF59,81xxxxxxxxxxxxxxxxxx75xx48xxxxxxxxxxxxbaxxxxxxxx48xxxxxxxxxxxx48xxxxffxxxxxxxxxx48xxxxxxxxxxxxbaxxxxxxxx48xxxxxxxxxxxx48xxxxffxxxxxxxxxxxx48xxxxxxxxxxxx00xx00xx00xx00xx00xx00xxxx8dxxxxxx48xxxx48xxxx48)
alloc(newmem,$1000,Tutorial-x86_64.exe+2AF59)
label(code)
label(return)
label(cTimer)

newmem:
  call GetTickCount64
  cmp [cTimer],0
  jnz @f					// как только таймер будет 0 выполняем этот участок кода если таймера не 0 то выполняет прыжок на @
  mov [cTimer],#5			// помещаем в [cTimer],#5 ( 5 секунд в даном случае # можно не писать но уже привык )
  mov [rbx+00000790],#777	// и меняем значение на #777 ( # - обозначает что послее нее пишем число в 10системе если не ставить ее то число будет 									// записывать как 16системе )
@:
  sub [cTimer],1			// понижаем таймер на 1 секунду
code:
  cmp [rbx+00000790],000003E8
  jmp return

cTimer:
  dd 0

Test:
  jmp newmem
  db 90 90 90 90 90
return:
registersymbol(Test)
registersymbol(cTimer)

[DISABLE]
Test:
  db 81 BB 90 07 00 00 E8 03 00 00
unregistersymbol(Test)
unregistersymbol(cTimer)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: Tutorial-x86_64.exe+2AF59

Tutorial-x86_64.exe+2AF3D: 90                               - nop 
Tutorial-x86_64.exe+2AF3E: 48 89 E9                         - mov rcx,rbp
Tutorial-x86_64.exe+2AF41: E8 9AFEFFFF                      - call 10002ADE0
Tutorial-x86_64.exe+2AF46: 48 8B 5D C0                      - mov rbx,[rbp-40]
Tutorial-x86_64.exe+2AF4A: 48 8D 65 00                      - lea rsp,[rbp+00]
Tutorial-x86_64.exe+2AF4E: 5D                               - pop rbp
Tutorial-x86_64.exe+2AF4F: C3                               - ret 
Tutorial-x86_64.exe+2AF50: 53                               - push rbx
Tutorial-x86_64.exe+2AF51: 48 8D 64 24 E0                   - lea rsp,[rsp-20]
Tutorial-x86_64.exe+2AF56: 48 89 CB                         - mov rbx,rcx
// ---------- INJECTING HERE -----------
Tutorial-x86_64.exe+2AF59: 81 BB 90070000 E8030000          - cmp [rbx+00000790],000003E8
// ---------- DONE INJECTING  ----------
Tutorial-x86_64.exe+2AF63: 75 38                            - jne 10002AF9D
Tutorial-x86_64.exe+2AF65: 48 8B 8B 60070000                - mov rcx,[rbx+00000760]
Tutorial-x86_64.exe+2AF6C: BA 01000000                      - mov edx,00000001
Tutorial-x86_64.exe+2AF71: 48 8B 83 60070000                - mov rax,[rbx+00000760]
Tutorial-x86_64.exe+2AF78: 48 8B 00                         - mov rax,[rax]
Tutorial-x86_64.exe+2AF7B: FF 90 40040000                   - call qword ptr [rax+00000440]
Tutorial-x86_64.exe+2AF81: 48 8B 8B 80070000                - mov rcx,[rbx+00000780]
Tutorial-x86_64.exe+2AF88: BA 00000000                      - mov edx,00000000
Tutorial-x86_64.exe+2AF8D: 48 8B 83 80070000                - mov rax,[rbx+00000780]
Tutorial-x86_64.exe+2AF94: 48 8B 00                         - mov rax,[rax]
}

 

Проверял на x64 туторе.

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

7 часов назад, ReWanet сказал:

Полностью кмк бесполезный скрипт. Причина? Таймер же память жрет причем нормально так..

@ReWanet, ты не прав.

Смотреть тута:

Скрытый текст

 

 

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

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

ты не прав.

Я не прав скорее только в том что "причем нормально так.." оно как не крути будет память подкушивать. Но тут даже не в памяти дело скрипт делать способом который я скинул куда удобнее. Я только что проверил скрипт @vagingameh активный съел 15мб ( и растет потихоньку ( прям тихонько )). Который я предоставил выше съел 300кб.

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

2 часа назад, ReWanet сказал:

Sleep весь процесс уводит в сон же.

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

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

6 часов назад, ReWanet сказал:

скрипт делать способом который я скинул куда удобнее.

@ReWanet, проблема с твоим скриптом в том, что временные интервалы зависят от выбранной инструкции, Ты пишешь  5 сек. Но на самом деле будет не пять сек.

А инструкции в играх работают с разной скоростью (таймеры заданы разработчиками).

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

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

Sleep уводит в сон только тот поток, в котором был вызван. Это точно. Другое дело, если в этом потоке используются какие-то переменные, которые используются и в другом потоке. В этом случае, если Sleep был вызван до того, как переменная была освобождена, первый поток встанет, и за ним следом встанут все потоки, которые используют эту переменную, так как будут ждать ее освобождения. Но это не обязательно, ведь другие потоки могут заниматься своими делами, и лишь проверять переменную на занятость. Все зависит от реализации работы с общими для потоков переменными.

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

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

Ты пишешь  5 сек. Но на самом деле будет не пять сек.

Мм и сколько же будет?
 

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

А инструкции в играх работают с разной скоростью (таймеры заданы разработчиками).

Найти выход можно всегда но опять же смысла использовать таймер нет ибо при активной работе он сжирает память не много но сжирает.
 

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

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

Про этот выход я и говорил выше но мы не знаем что за инструкцию использует ТС.

 

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

В 28.12.2017 в 03:48, ReWanet сказал:

Я не прав скорее только в том что "причем нормально так.." оно как не крути будет память подкушивать. Но тут даже не в памяти дело скрипт делать способом который я скинул куда удобнее. Я только что проверил скрипт @vagingameh активный съел 15мб ( и растет потихоньку ( прям тихонько )). Который я предоставил выше съел 300кб.

 

CE Lua может сделать много утечек памяти. Я бы написал одну функцию и попробовал бы использовать во всех CE Lua скриптах или некоторых

 

Скрытый текст

function startCollectgarbageProcess(interval, showStatus)
  local timer1 = createTimer(true)  
  timer1.Interval = interval  
  timer1.onTimer = function ()  
    if (showStatus) then
      print(string.format('Lua memory usage %.1f MiB',collectgarbage('count')/1024))
    end 
    collectgarbage("restart")
    collectgarbage("collect")    
    if (showStatus) then
      print(string.format('Lua memory usage %.1f MiB',collectgarbage('count')/1024))
    end    
  end
end

-- Собирать каждую 1 минуту и показать результат
startCollectgarbageProcess(60000, true)

 

 

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

6 часов назад, vikkz сказал:

всё работает на ура.

Мы очень любим, когда: 

6 часов назад, vikkz сказал:

всё работает

и что топик не просто обрывается, а написано решение и оно работает. Так что от меня тебе плюсик. - с почином.:D

 

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

Гость
Эта тема закрыта для публикации ответов.
×
×
  • Создать...

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

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