Перейти к содержанию
Авторизация  
Antonshka

Лимит скорости передвижения

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

Привет, сделал лимит скорости передвижения автомобиля, посредством Velocity X и Y, но почему-то иногда машина движется с разной скоростью.

К примеру, если выставить максимальное допустимое Velocity 5, то в этом случае если X будет равен 0, а Y будет равен 5, скорость будет 10 км/ч. А если Х будет равен 0.5, а Y будет равен 4.5, то скорость будет 8 км/ч.

Словом, когда одна из осей равна 0, а другая равна максимально допустимой, тогда скорость машины наибольшая.

 

Код для лимита

Спойлер

fld dword ptr [r10+rax] // Velocity Х
fabs
fld dword ptr [r10+rax+8] // Velocity Y
fabs
faddp
fcomp dword ptr [Car_Speed_Limit_Value] // (float)5
push rax
fstsw ax
sahf
pop rax
jbe @f
call Write_Car_Velocity_XYZ_scr_1_Right_Adress_Car_Speed_Limit_Reset_Down
@@:
popfq
jmp BACKWrite_Car_Velocity_XYZ_scr_1


Write_Car_Velocity_XYZ_scr_1_Right_Adress_Car_Speed_Limit_Reset_Down://Write_Car_Velocity_XYZ_scr_1_Right_Adress_Car_Speed_Limit_Reset_Down
fld dword ptr [r10+rax]
fdiv dword ptr [Car_Speed_Limit_Value_For_Sub] // (float)1.03
fstp dword ptr [r10+rax]
fld dword ptr [r10+rax+8]
fdiv dword ptr [Car_Speed_Limit_Value_For_Sub]
fstp dword ptr [r10+rax+8]
ret

 

 

@imaginary насколько я помню, ты знакома с координатами и с тем что с ними связано не понаслышке.

Вот здесь такая задача, - сделать лимит скорости передвижения объекта, независимо от направления его движения.

 

Мне даже не столько важно найти решение, как посоревноваться с тобой и с другими участниками. Посоревноваться, подумать вместе, вместе искать решение. Это интересно.

Как когда/то мы искали с @Garik66 способ сделать обход античита для ассасина, или искали способ сделать декриптор imul.

 

Поделиться сообщением


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

Может попробовать подключить к этому вычислению косинус и синус Yaw машины 🤔. Опять же, нужно чтобы скорость ограничивалась и когда машина едет назад...

Поделиться сообщением


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

Решение придумалось. Нужно вычислять дистанцию, используя только Velocity X и Y (Z не нужно). Далее просто сравнивать полученную дистанцию с максимально заданной.

 

 

Спойлер

fld dword ptr [r10+rax] // Velocity X
fmul st(0)
fld dword ptr [r10+rax+8] // Velocity Y
fmul st(0)
faddp st(1),st(0)
fsqrt
fcomp dword ptr [Car_Speed_Limit_Value] // Максимальная допустимая скорость, она же максимальная допустимая дистанция
push rax
fstsw ax
sahf
pop rax
jbe @f
call Write_Car_Velocity_XYZ_scr_1_Right_Adress_Car_Speed_Limit_Reset_Down
@@:
popfq
jmp BACKWrite_Car_Velocity_XYZ_scr_1


Write_Car_Velocity_XYZ_scr_1_Right_Adress_Car_Speed_Limit_Reset_Down://Write_Car_Velocity_XYZ_scr_1_Right_Adress_Car_Speed_Limit_Reset_Down
fld dword ptr [r10+rax]
fdiv dword ptr [Car_Speed_Limit_Value_For_Sub] // Делитель для уменьшения Velocity - (float)1.02
fstp dword ptr [r10+rax]
fld dword ptr [r10+rax+8]
fdiv dword ptr [Car_Speed_Limit_Value_For_Sub]
fstp dword ptr [r10+rax+8]
ret

 

 

Поделиться сообщением


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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Предпросмотр
Авторизация  

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

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

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