vikkz Опубликовано 26 декабря, 2017 Поделиться Опубликовано 26 декабря, 2017 Доброе время суток. Вообщем такая у меня проблема - нашёл я игрушку (понравилась), хочется немного почитерить. Хочу написать скрипт, но нечего в этом не понимаю, только заморозить и найти данные в Cheatn Engine. Может кто поможет, вот я нашел значение и мне бы хотелось, чтоб это значение менялось с интервалом. например при нажатии кнопки значение менялось на хххх (любое число) на секунд 10, потом это значение менялось на 1-500, на 1-2 секунды, потом назад на хххх (круговорот). Кто может помочь? Ссылка на комментарий Поделиться на другие сайты Поделиться
vikkz Опубликовано 26 декабря, 2017 Автор Поделиться Опубликовано 26 декабря, 2017 Картинка. Это пока все, что я сделал (первый день со скриптом учусь). Как бы сделать чтоб значение, которое на картинке держалось секунд 15 примерно, а потом менялось на другое значение, а потом опять на значение с 15 секундами. Буду рад любой помощи и сылкам. Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 27 декабря, 2017 Поделиться Опубликовано 27 декабря, 2017 Если ты используешь Chea Engine, то необязательно делать это с помощью ассемблерной вставки. Ну, то есть, она тоже понадобится, возможно. Но обрати свое внимание на Lua в СЕ. Ссылка на комментарий Поделиться на другие сайты Поделиться
vagingameh Опубликовано 27 декабря, 2017 Поделиться Опубликовано 27 декабря, 2017 (изменено) Здравствуйте @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) Демонстрация работы: Скрытый текст Изменено 27 декабря, 2017 пользователем vagingameh Ссылка на комментарий Поделиться на другие сайты Поделиться
ReWanet Опубликовано 27 декабря, 2017 Поделиться Опубликовано 27 декабря, 2017 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 туторе. Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 27 декабря, 2017 Поделиться Опубликовано 27 декабря, 2017 start: mov [counter],#15 @@: cmp [counter],0 //инструкция 1 mov eax, 1 call Sleep mov ebx, counter dec ebx jne @p //инструкция 2 jmp start Ссылка на комментарий Поделиться на другие сайты Поделиться
ReWanet Опубликовано 27 декабря, 2017 Поделиться Опубликовано 27 декабря, 2017 48 минут назад, kiwipapayamongoose сказал: Код Sleep весь процесс уводит в сон же.. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 27 декабря, 2017 Поделиться Опубликовано 27 декабря, 2017 7 часов назад, ReWanet сказал: Полностью кмк бесполезный скрипт. Причина? Таймер же память жрет причем нормально так.. @ReWanet, ты не прав. Смотреть тута: Скрытый текст Ссылка на комментарий Поделиться на другие сайты Поделиться
ReWanet Опубликовано 27 декабря, 2017 Поделиться Опубликовано 27 декабря, 2017 (изменено) 18 минут назад, Garik66 сказал: ты не прав. Я не прав скорее только в том что "причем нормально так.." оно как не крути будет память подкушивать. Но тут даже не в памяти дело скрипт делать способом который я скинул куда удобнее. Я только что проверил скрипт @vagingameh активный съел 15мб ( и растет потихоньку ( прям тихонько )). Который я предоставил выше съел 300кб. Изменено 27 декабря, 2017 пользователем ReWanet Ссылка на комментарий Поделиться на другие сайты Поделиться
LIRW Опубликовано 27 декабря, 2017 Поделиться Опубликовано 27 декабря, 2017 Если не хочешь подобные коменты,то лучше учитывать память. Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 27 декабря, 2017 Поделиться Опубликовано 27 декабря, 2017 2 часа назад, ReWanet сказал: Sleep весь процесс уводит в сон же. может быть, я таким способом пользовался только в отдельном потоке и все отлично работало, но по идее не должно уводить весь процесс в сон. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 28 декабря, 2017 Поделиться Опубликовано 28 декабря, 2017 6 часов назад, ReWanet сказал: скрипт делать способом который я скинул куда удобнее. @ReWanet, проблема с твоим скриптом в том, что временные интервалы зависят от выбранной инструкции, Ты пишешь 5 сек. Но на самом деле будет не пять сек. А инструкции в играх работают с разной скоростью (таймеры заданы разработчиками). Поэтому, если нужны точные интервалы, нужно создавать отдельный поток и писать значение непосредственно в адрес. Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 28 декабря, 2017 Поделиться Опубликовано 28 декабря, 2017 Sleep уводит в сон только тот поток, в котором был вызван. Это точно. Другое дело, если в этом потоке используются какие-то переменные, которые используются и в другом потоке. В этом случае, если Sleep был вызван до того, как переменная была освобождена, первый поток встанет, и за ним следом встанут все потоки, которые используют эту переменную, так как будут ждать ее освобождения. Но это не обязательно, ведь другие потоки могут заниматься своими делами, и лишь проверять переменную на занятость. Все зависит от реализации работы с общими для потоков переменными. Ссылка на комментарий Поделиться на другие сайты Поделиться
ReWanet Опубликовано 28 декабря, 2017 Поделиться Опубликовано 28 декабря, 2017 6 часов назад, Garik66 сказал: Ты пишешь 5 сек. Но на самом деле будет не пять сек. Мм и сколько же будет? 6 часов назад, Garik66 сказал: А инструкции в играх работают с разной скоростью (таймеры заданы разработчиками). Найти выход можно всегда но опять же смысла использовать таймер нет ибо при активной работе он сжирает память не много но сжирает. 6 часов назад, Garik66 сказал: Поэтому, если нужны точные интервалы, нужно создавать отдельный поток и писать значение непосредственно в адрес. Про этот выход я и говорил выше но мы не знаем что за инструкцию использует ТС. Ссылка на комментарий Поделиться на другие сайты Поделиться
ReWanet Опубликовано 28 декабря, 2017 Поделиться Опубликовано 28 декабря, 2017 4 часа назад, Xipho сказал: Sleep уводит в сон только тот поток, в котором был вызван. Да точно. Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 29 декабря, 2017 Поделиться Опубликовано 29 декабря, 2017 В 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) Ссылка на комментарий Поделиться на другие сайты Поделиться
vikkz Опубликовано 29 декабря, 2017 Автор Поделиться Опубликовано 29 декабря, 2017 Всем огромное спасибо за помощь, отдельный поклон Vagingameh, всё работает на ура. 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 30 декабря, 2017 Поделиться Опубликовано 30 декабря, 2017 6 часов назад, vikkz сказал: всё работает на ура. Мы очень любим, когда: 6 часов назад, vikkz сказал: всё работает и что топик не просто обрывается, а написано решение и оно работает. Так что от меня тебе плюсик. - с почином. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения