Antonshka Опубликовано 26 сентября, 2020 Поделиться Опубликовано 26 сентября, 2020 Привет, сделал лимит скорости передвижения автомобиля, посредством 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. Ссылка на комментарий Поделиться на другие сайты Поделиться
Antonshka Опубликовано 26 сентября, 2020 Автор Поделиться Опубликовано 26 сентября, 2020 Может попробовать подключить к этому вычислению косинус и синус Yaw машины ?. Опять же, нужно чтобы скорость ограничивалась и когда машина едет назад... Ссылка на комментарий Поделиться на другие сайты Поделиться
Antonshka Опубликовано 4 октября, 2020 Автор Поделиться Опубликовано 4 октября, 2020 Решение придумалось. Нужно вычислять дистанцию, используя только 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 Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения