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

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

Игра 2004 года, как найти значение скорости, чтобы сделать примитивное резкое увеличение скорости.

Как не пробовал искать значения скорости, никогда не получается находить. Хотя в том же киберпанке за минут 5 все ищется.

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

9 минут назад, Xipho сказал:

Расскажи, как пробовал

Банально, искал по байтам, флотам. Везде пробовал и напрямую писать значения со спидометра и с неизвестного значения по классике - больше/меньше/не изменилось. Там есть поинты, поинты 4 байта сразу ищутся, пробовал искать по маске отталкиваясь от поинтов, но тоже тухло.

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

Обычно большинство параметров техники хранится в памяти игры рядом с частотами вращения колес.

Когда колесо раскручивается вперед, частота его вращения в памяти во float будет увеличиваться и будет больше нуля. Тоже самое наоборот.

Чтобы понять какие параметры/адреса техники на что влияют, можно сделать такой трюк,

- найти технику с изначально большой скоростью,

- скопировать блок памяти с параметрами в блокнот,

- загрузить другую технику, с изначально малой скоростью,

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

- если техника после этого поедет быстрее, значит повезло, можно теперь брать блоки меньшими порциями, чтобы выйти на такие параметры/адреса

которые реально влияют на скорость.

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

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

Обычно большинство параметров техники хранится в памяти игры рядом с частотами вращения колес.

Когда колесо раскручивается вперед, частота его вращения в памяти во float будет увеличиваться и будет больше нуля. Тоже самое наоборот.

Чтобы понять какие параметры/адреса техники на что влияют, можно сделать такой трюк,

- найти технику с изначально большой скоростью,

- скопировать блок памяти с параметрами в блокнот,

- загрузить другую технику, с изначально малой скоростью,

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

- если техника после этого поедет быстрее, значит повезло, можно теперь брать блоки меньшими порциями, чтобы выйти на такие параметры/адреса

которые реально влияют на скорость.

Спасибо, затестим.

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

Всё нормально ищется. Ищи координаты. Как найдёшь в их структуре уже ищи значения.

При наборе скорости если значение координаты увеличивается то ищи значение как увеличилось 

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

Когда стоишь отсеивай как диапазон от -1 до +1.

Так найдешь значения отвечающие за ускорение. На каждой координате оно своё.

 

 

 

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

Положу это сюда. Может кому пригодится.

 

Спойлер
[ENABLE]
{$lua}
function SpeedHack1()
boost = 1.5
if (readBytes('[coord_X_Y]') ~= nil) then
writeFloat ('[coord_X_Y]+18', readFloat('[coord_X_Y]+18')*boost)
writeFloat ('[coord_X_Y]+20', readFloat('[coord_X_Y]+20')*boost)
end
end
createHotkey(SpeedHack1, VK_UP)

function SpeedHack2()
boost = 0.1
if (readBytes('[coord_X_Y]') ~= nil) then
writeFloat ('[coord_X_Y]+18', readFloat('[coord_X_Y]+18')*boost)
writeFloat ('[coord_X_Y]+20', readFloat('[coord_X_Y]+20')*boost)
end
end
createHotkey(SpeedHack2, VK_DOWN)

{$asm}
aobscanmodule(SpeedXY,MTX.exe,D9 ? ? D9 ? ? ? D8 ? ? D9 ? ? D9 ? ? ? ? ? D9 ? D8)
alloc(newmem,$1000)
label(return)
label(coord_X_Y)
registersymbol(coord_X_Y)
registersymbol(SpeedXY)

newmem:
  mov [coord_X_Y],esi
  fstp dword ptr [esi+20]
  fld dword ptr [esp+14]
  jmp return

coord_X_Y:
db 00

SpeedXY:
  jmp newmem
  nop 2
return:
[DISABLE]

SpeedXY:
db D9 5E 20 D9 44 24 14
unregistersymbol(*)
dealloc(newmem)
{
// ORIGINAL CODE - INJECTION POINT: MTX.exe+BB15C
MTX.exe+BB13C: D9 C9              - fxch st(1)
MTX.exe+BB13E: D8 4E 34           - fmul dword ptr [esi+34]
MTX.exe+BB141: D9 5C 24 14        - fstp dword ptr [esp+14]
MTX.exe+BB145: D8 46 18           - fadd dword ptr [esi+18]
MTX.exe+BB148: D9 5E 18           - fstp dword ptr [esi+18]
MTX.exe+BB14B: D9 44 24 0C        - fld dword ptr [esp+0C]
MTX.exe+BB14F: D8 46 1C           - fadd dword ptr [esi+1C]
MTX.exe+BB152: D9 5E 1C           - fstp dword ptr [esi+1C]
MTX.exe+BB155: D9 44 24 10        - fld dword ptr [esp+10]
MTX.exe+BB159: D8 46 20           - fadd dword ptr [esi+20]
// ---------- INJECTING HERE ----------
MTX.exe+BB15C: D9 5E 20           - fstp dword ptr [esi+20]
// ---------- DONE INJECTING  ----------
MTX.exe+BB15F: D9 44 24 14        - fld dword ptr [esp+14]
MTX.exe+BB163: D8 46 24           - fadd dword ptr [esi+24]
MTX.exe+BB166: D9 5E 24           - fstp dword ptr [esi+24]
MTX.exe+BB169: D9 86 C0 04 00 00  - fld dword ptr [esi+000004C0]
MTX.exe+BB16F: D9 C0              - fld st(0)
MTX.exe+BB171: D8 4E 58           - fmul dword ptr [esi+58]
MTX.exe+BB174: D9 C1              - fld st(1)
MTX.exe+BB176: D8 4E 5C           - fmul dword ptr [esi+5C]
MTX.exe+BB179: D9 5C 24 0C        - fstp dword ptr [esp+0C]
MTX.exe+BB17D: D9 C1              - fld st(1)
}

 

 

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

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

Положу это сюда. Может кому пригодится.

В скрипте нужно еще учитывать углы поворота транспорта. Для лучшего эффекта. Иначе при движении по дуге и при использовании спидхака транспорт будет уезжать с дороги. Это насколько я помню.

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

  • 2 недели спустя...
В 26.10.2022 в 21:00, Antonshka сказал:

В скрипте нужно еще учитывать углы поворота транспорта. Для лучшего эффекта. Иначе при движении по дуге и при использовании спидхака транспорт будет уезжать с дороги. Это насколько я помню.

Конечно нужно. Но способ рабочий. Причём не только для этой игры но и для тех игр где можно найти velocity. 

Как пример.

Спойлер
[ENABLE]
{$lua}
function SpeedHack1()
boost = 1.5
if (readBytes('[_date_01]') ~= nil) then
writeFloat ('[_date_01]', readFloat('[_date_01]')*boost)
writeFloat ('[_date_01]+04', readFloat('[_date_01]+04')*boost)
end
end
createHotkey(SpeedHack1, VK_XBUTTON1)

function SpeedHack2()
boost = 0.5
if (readBytes('[_date_01]') ~= nil) then
writeFloat ('[_date_01]', readFloat('[_date_01]')*boost)
writeFloat ('[_date_01]+04', readFloat('[_date_01]+04')*boost)
end
end
createHotkey(SpeedHack2, VK_XBUTTON2)
{$asm}
aobscanmodule(Boost,GTA5.exe,F3 ? ? ? F3 ? ? ? ? F3 ? ? ? F3 ? ? ? F3 ? ? ? ? ? ? ? 44 39)
alloc(newmem,$1000,Boost)
label(return)
label(_date_01)
registersymbol(_date_01)
registersymbol(Boost)

newmem:
  mov [_date_01],rax
  mulss xmm0,[rax]
  mulss xmm6,[rax+08]
  jmp return

_date_01:
dq 00

Boost:
  jmp newmem
  nop 4
return:

[DISABLE]
Boost:
db F3 0F 59 00 F3 0F 59 70 08
unregistersymbol(*)
dealloc(newmem)
{
// ORIGINAL CODE - INJECTION POINT: GTA5.exe+A54169
GTA5.exe+A54140: 0F 84 05 01 00 00        - je GTA5.exe+A5424B
GTA5.exe+A54146: 48 8B 07                 - mov rax,[rdi]
GTA5.exe+A54149: 0F 28 77 70              - movaps xmm6,[rdi+70]
GTA5.exe+A5414D: 48 8B CF                 - mov rcx,rdi
GTA5.exe+A54150: FF 90 70 03 00 00        - call qword ptr [rax+00000370]
GTA5.exe+A54156: 0F 28 FE                 - movaps xmm7,xmm6
GTA5.exe+A54159: 0F 28 C6                 - movaps xmm0,xmm6
GTA5.exe+A5415C: 0F C6 FE 55              - shufps xmm7,xmm6,55
GTA5.exe+A54160: 0F C6 F6 AA              - shufps xmm6,xmm6,-56
GTA5.exe+A54164: F3 0F 59 78 04           - mulss xmm7,[rax+04]
// ---------- INJECTING HERE ----------
GTA5.exe+A54169: F3 0F 59 00              - mulss xmm0,[rax]
// ---------- DONE INJECTING  ----------
GTA5.exe+A5416D: F3 0F 59 70 08           - mulss xmm6,[rax+08]
GTA5.exe+A54172: F3 0F 58 F8              - addss xmm7,xmm0
GTA5.exe+A54176: F3 0F 58 FE              - addss xmm7,xmm6
GTA5.exe+A5417A: F3 0F 59 3D DA 3E FB 00  - mulss xmm7,[GTA5.exe+1A0805C]
GTA5.exe+A54182: 44 39 BD 98 00 00 00     - cmp [rbp+00000098],r15d
GTA5.exe+A54189: 0F 84 89 00 00 00        - je GTA5.exe+A54218
GTA5.exe+A5418F: 48 8B CF                 - mov rcx,rdi
GTA5.exe+A54192: E8 E1 74 4C 00           - call GTA5.exe+F1B678
GTA5.exe+A54197: 84 C0                    - test al,al
GTA5.exe+A54199: 74 7D                    - je GTA5.exe+A54218
}

 

V. 1.0.2699/1.63

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

Я про домножение velocity узнал из трейнера флинга, кажется 🙊. Помню как включал эту опцию и изучал место инъекции. У него, насколько я помню, ускорение было такое же резкое как и у тебя. Но как по мне, лучше дать самому потоку плавно домножать velocity. Так смотрится более естественно. А горячие клавиши поставить на флаги.

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

В 10.11.2022 в 07:43, Antonshka сказал:

Но как по мне, лучше дать самому потоку плавно домножать velocity. 

Согласень так лучше смотрелось бы. Вопрос реализации.

Показал бы как хоть на той же МТХ.

А про горячие кнопки....???? Смысл?

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

56 минут назад, Partizan сказал:

Согласень так лучше смотрелось бы. Вопрос реализации.

Показал бы как хоть на той же МТХ.

А про горячие кнопки....???? Смысл?

Да, это для плавности. Домножение должно осуществляться в самой игровой функции, самим игровым потоком. Через FPU или SSE.

А горячие клавиши луа лишь устанавливают или сбрасывают флаги для такого осуществления.

Можно также обойтись без луа клавиш. Вместо них для тех же целей можно вызывать из игровой функции GetAsyncKeyState.

 

А про то как использовать и углы поворота, - я подзабыл. Кажется синус и косинус Yaw умноженные на Velocity.

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

19 часов назад, Antonshka сказал:

Да, это для плавности. Домножение должно осуществляться в самой игровой функции, самим игровым потоком. Через FPU или SSE.

Я поток не создавал. Использовал созданый игрой. А чем плохо умножение Float через xmm/

 

Спойлер

Я бы сказал у xmm даже есть приимущество по сравнению с FPU процессором

Можно в 1 регистр записать сразу 4 значения.

 

Я не гнушаюсь и FPU.

Спойлер

 

 

Спойлер
[ENABLE]
aobscanmodule(MoveSpeed,cf3.exe,D9 00 D9 1B D9 40 04 D9 5B 04 D9 40 08 D9 5B 08 EB C4 56 E8 80)
aobscanmodule(MoveSpeed_02,cf3.exe,D9 00 D9 1B D9 40 04 D9 5B 04 D9 40 08 D9 5B 08 EB C4 56 E8 80)
alloc(newmem,$1000)
alloc(newmem_02,$1000)
label(return)
label(return_02)
label(imul_value)
registersymbol(imul_value)
registersymbol(MoveSpeed)
registersymbol(MoveSpeed_02)

newmem:
  fld dword ptr [eax]
  cmp [esp+38],80000000
  jne short @F
  fmul [imul_value]
@@:
  fstp dword ptr [ebx]
  fld dword ptr [eax+04]
  jmp return

newmem_02:
  fld dword ptr [eax+08]
  cmp [esp+38],80000000
  jne short @F
  fmul [imul_value]
@@:
  fstp dword ptr [ebx+08]
  jmp return_02

imul_value:
dd (float)2

MoveSpeed:
  jmp newmem
  nop 2
return:

MoveSpeed_02+0A:
  jmp newmem_02
  nop
return_02:

[DISABLE]
MoveSpeed:
db D9 00 D9 1B D9 40 04
MoveSpeed_02+0A:
db D9 40 08 D9 5B 08
unregistersymbol(*)
dealloc(*)
{
// ORIGINAL CODE - INJECTION POINT: cf3.exe+3EB828
cf3.exe+3EB811: E8 EA 21 FD FF  - call cf3.exe+3BDA00
cf3.exe+3EB816: 83 C4 0C        - add esp,0C
cf3.exe+3EB819: 5F              - pop edi
cf3.exe+3EB81A: 5D              - pop ebp
cf3.exe+3EB81B: 5B              - pop ebx
cf3.exe+3EB81C: B8 01 00 00 00  - mov eax,00000001
cf3.exe+3EB821: 5E              - pop esi
cf3.exe+3EB822: 59              - pop ecx
cf3.exe+3EB823: C3              - ret 
cf3.exe+3EB824: 8B 44 24 10     - mov eax,[esp+10]
// ---------- INJECTING HERE ----------
cf3.exe+3EB828: D9 00           - fld dword ptr [eax]
// ---------- DONE INJECTING  ----------
cf3.exe+3EB82A: D9 1B           - fstp dword ptr [ebx]
cf3.exe+3EB82C: D9 40 04        - fld dword ptr [eax+04]
cf3.exe+3EB82F: D9 5B 04        - fstp dword ptr [ebx+04]
cf3.exe+3EB832: D9 40 08        - fld dword ptr [eax+08]
cf3.exe+3EB835: D9 5B 08        - fstp dword ptr [ebx+08]
cf3.exe+3EB838: EB C4           - jmp cf3.exe+3EB7FE
cf3.exe+3EB83A: 56              - push esi
cf3.exe+3EB83B: E8 80 FA FF FF  - call cf3.exe+3EB2C0
cf3.exe+3EB840: 83 C4 04        - add esp,04
cf3.exe+3EB843: 5E              - pop esi
}

 

 

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

А, понятно. У тебя постоянное домножение.

Мне больше нравится эффект нитро, - машина ускоряется.пока зажата клавиша. Если к этому прикрутить еще и принудительные: динамическое изменение FOV, увеличение значения тахометра, увеличение частот вращения задних колес, так чтобы дым пошел, небольшое приподнятие передка машины через углы поворота, чуть-чуть тряски камеры, через DirectSound звук закиси азота, - было бы забавно.

 

Кстати, у тебя скрипт можно объединить в один. Так как у тебя инструкции рядом. Я в своем время также как и ты для каждой инструкции писал отдельный скрипт, потом мне это надоело.

Спойлер
cf3.exe+3EB828: D9 00           - fld dword ptr [eax]
cf3.exe+3EB82A: D9 1B           - fstp dword ptr [ebx]
cf3.exe+3EB82C: D9 40 04        - fld dword ptr [eax+04]
cf3.exe+3EB82F: D9 5B 04        - fstp dword ptr [ebx+04]
cf3.exe+3EB832: D9 40 08        - fld dword ptr [eax+08]
cf3.exe+3EB835: D9 5B 08        - fstp dword ptr [ebx+08]

 

 

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

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

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

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