Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 2 из 3 ПерваяПервая 1 2 3 ПоследняяПоследняя
Показано с 11 по 20 из 21
  1. #11
    Аватар для Kazoox
    Пользователь

    Статус
    Оффлайн
    Регистрация
    25.04.2014
    Сообщений
    121
    Репутация:
    3 ±
    Цитата Сообщение от ziggi Посмотреть сообщение
    PHP код:
    stock Float:GetVehicleSpeed(vehicleid)
    {
        new
            
    Float:x,
            
    Float:y,
            
    Float:z;

        
    GetVehicleVelocity(vehicleidxyz);

        return 
    VectorSize(xyz) * 180.0;

    Вот только далеко не все значения скоростей в таблице верны, увы. У того же Landstalker'а максимум написан 160, а на самом деле при езде с какого-нибудь даже не очень крутого холма скорость развивается до 170 а то и 180 и в результаты получается куча ложных срабатываний у нашего чудесного античита. Конечно можно просто набросить там по 20-25 на каждый максимум, но ведь не везде будет такая огромная погрешность, в общем всё это очень не точно :C

  2. #12
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Цитата Сообщение от Kazoox Посмотреть сообщение
    Вот только далеко не все значения скоростей в таблице верны, увы. У того же Landstalker'а максимум написан 160, а на самом деле при езде с какого-нибудь даже не очень крутого холма скорость развивается до 170 а то и 180 и в результаты получается куча ложных срабатываний у нашего чудесного античита. Конечно можно просто набросить там по 20-25 на каждый максимум, но ведь не везде будет такая огромная погрешность, в общем всё это очень не точно :C
    Ну естественно, скорость транспорта - это его максимальная собственная скорость. Создатели автомобилей не пишут какой скорости могут достигать их изделия в процессе свободного падения.

    Чтобы исправить эту ситуацию, можно с помощью функции GetVehicleRotationQuat определить уровень наклона транспорта и увеличивать или уменьшать его максимально возможную скорость в этот момент.

    P.S. Мною эти данные были взяты из MTA, а они взяли это из самой GTA. Так что в актуальности этих данных сомневаться не приходится.

  3. Пользователь сказал cпасибо:
    Kazoox (19.03.2016)
  4. #13
    Аватар для Kazoox
    Пользователь

    Статус
    Оффлайн
    Регистрация
    25.04.2014
    Сообщений
    121
    Репутация:
    3 ±
    Цитата Сообщение от ziggi Посмотреть сообщение
    Ну естественно, скорость транспорта - это его максимальная собственная скорость. Создатели автомобилей не пишут какой скорости могут достигать их изделия в процессе свободного падения.

    Чтобы исправить эту ситуацию, можно с помощью функции GetVehicleRotationQuat определить уровень наклона транспорта и увеличивать или уменьшать его максимально возможную скорость в этот момент.

    P.S. Мною эти данные были взяты из MTA, а они взяли это из самой GTA. Так что в актуальности этих данных сомневаться не приходится.
    Случайно ты уже не пробовал "баловаться" с уровнем наклона? Чтобы не изобретать велосипед дважды. Буду благодарен.

  5. #14
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Цитата Сообщение от Kazoox Посмотреть сообщение
    Случайно ты уже не пробовал "баловаться" с уровнем наклона? Чтобы не изобретать велосипед дважды. Буду благодарен.
    Только на C++ (но перевести это на Pawn не сложно):

    PHP код:
    // based on ToMatrix function from MTA SA
    void CMath::GetMatrixFromQuaternion(float *fQuaternionMATRIX4X4 *m)
    {
        
    float xx fQuaternion[1] * fQuaternion[1];
        
    float xy fQuaternion[1] * fQuaternion[2];
        
    float xz fQuaternion[1] * fQuaternion[3];
        
    float xw fQuaternion[1] * fQuaternion[0];

        
    float yy fQuaternion[2] * fQuaternion[2];
        
    float yz fQuaternion[2] * fQuaternion[3];
        
    float yw fQuaternion[2] * fQuaternion[0];

        
    float zz fQuaternion[3] * fQuaternion[3];
        
    float zw fQuaternion[3] * fQuaternion[0];

        
    m->right.fX 1.0f 2.0f * (yy zz);
        
    m->right.fY 2.0f * (xy zw);
        
    m->right.fZ 2.0f * (xz yw);

        
    m->up.fX 2.0f * (xy zw);
        
    m->up.fY 1.0f 2.0f * (xx zz);
        
    m->up.fZ 2.0f * (yz xw);

        
    m->at.fX 2.0f * (xz yw);
        
    m->at.fY 2.0f * (yz xw);
        
    m->at.fZ 1.0f 2.0f * (xx yy);

    Сама структура MATRIX4X4 (позиция в данном случае не используется)
    PHP код:
    typedef struct _MATRIX4X4
    {
        
    CVector right;
        
    DWORD  flags;
        
    CVector up;
        
    float  pad_u;
        
    CVector at;
        
    float  pad_a;
        
    CVector pos;
        
    float  pad_p;
    MATRIX4X4, *PMATRIX4X4
    Тебе понадобится один из векторов.

  6. Пользователь сказал cпасибо:
    Kazoox (19.03.2016)
  7. #15
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от Kazoox Посмотреть сообщение
    Вот только далеко не все значения скоростей в таблице верны, увы. У того же Landstalker'а максимум написан 160, а на самом деле при езде с какого-нибудь даже не очень крутого холма скорость развивается до 170 а то и 180 и в результаты получается куча ложных срабатываний у нашего чудесного античита. Конечно можно просто набросить там по 20-25 на каждый максимум, но ведь не везде будет такая огромная погрешность, в общем всё это очень не точно :C
    Можно просто отлавливать силу ускорения по Z и если она больше предельной нормы (нас будет интересовать только отрицательное значение) - просто глушить античит.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  8. 3 пользователя(ей) сказали cпасибо:
    Daniel_Cortez (19.03.2016) Kazoox (19.03.2016) StevenH (19.03.2016)
  9. #16
    Аватар для StevenH
    Пользователь

    Статус
    Оффлайн
    Регистрация
    13.10.2015
    Сообщений
    516
    Репутация:
    21 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Можно просто отлавливать силу ускорения по Z и если она больше предельной нормы (нас будет интересовать только отрицательное значение) - просто глушить античит.
    Интересно, а как можно уловить скорость по Z?)

  10. #17
    Аватар для Kazoox
    Пользователь

    Статус
    Оффлайн
    Регистрация
    25.04.2014
    Сообщений
    121
    Репутация:
    3 ±
    Цитата Сообщение от StevenH Посмотреть сообщение
    Интересно, а как можно уловить скорость по Z?)
    Собственно последний параметр в GetVehicleVelocity

  11. #18
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    PHP код:
    stock Float:GetVehicleSpeed(vehicleid)
    {
        new
            
    Float:x,
            
    Float:y,
            
    Float:z;

        
    GetVehicleVelocity(vehicleidxyz);
        if(
    <= -5.0) return -1.0;
        else return 
    VectorSize(xyz) * 180.0;

    Например, так. А потом уже там, где используешь GetVehicleSpeed, проверять значение на -1.0 и обрывать проверку в античите.
    Только учти, что оба значения (-5.0 и -1.0) я взял из головы и тебе самому стоит их подобрать, дабы не было ложных срабатываний + такую функцию уже не получится использовать в обычном спидометре (если игрок начнёт спускаться с горы/падать, функция вернёт -1.0 и в спидометре будет соответствующее значение). Можно либо ещё одну функцию написать, ал-я
    PHP код:
    stock Float:GetVehicleSpeedAC(vehicleid)
    {
        new
            
    Float:x,
            
    Float:y,
            
    Float:z;

        
    GetVehicleVelocity(vehicleidxyz);
        if(
    <= -5.0) return -1.0;
        else return 
    VectorSize(xyz) * 180.0;

    И использовать её в античите


    Либо переделать эту функцию на такой ляд
    PHP код:
    stock Float:GetVehicleSpeed(vehicleidmode 0)
    {
        new
            
    Float:x,
            
    Float:y,
            
    Float:z;

        
    GetVehicleVelocity(vehicleidxyz);
        if(
    mode == && <= -5.0) return -1.0;
        else return 
    VectorSize(xyz) * 180.0;

    В античите используя уже так:
    PHP код:
    GetVehicleSpeed(vehicleid1); 


    Либо просто (я выбрал бы этот вариант) использовать код функции напрямую в античите, типа
    PHP код:
    new
            
    Float:x,
            
    Float:y,
            
    Float:z;

    GetVehicleVelocity(vehicleidxyz);
    if(
    <= -5.0) continue;//Если проверка циклом. Если это функция - просто return
    new Float:vehicle_speed VectorSize(xyz) * 180.0
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  12. Пользователь сказал cпасибо:
    Kazoox (19.03.2016)
  13. #19
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Можно просто отлавливать силу ускорения по Z и если она больше предельной нормы (нас будет интересовать только отрицательное значение) - просто глушить античит.
    Согласен, не подумал об этом)

  14. #20
    Аватар для Kazoox
    Пользователь

    Статус
    Оффлайн
    Регистрация
    25.04.2014
    Сообщений
    121
    Репутация:
    3 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    PHP код:
    stock Float:GetVehicleSpeed(vehicleid)
    {
        new
            
    Float:x,
            
    Float:y,
            
    Float:z;

        
    GetVehicleVelocity(vehicleidxyz);
        if(
    <= -5.0) return -1.0;
        else return 
    VectorSize(xyz) * 180.0;

    Например, так. А потом уже там, где используешь GetVehicleSpeed, проверять значение на -1.0 и обрывать проверку в античите.
    Только учти, что оба значения (-5.0 и -1.0) я взял из головы и тебе самому стоит их подобрать, дабы не было ложных срабатываний + такую функцию уже не получится использовать в обычном спидометре (если игрок начнёт спускаться с горы/падать, функция вернёт -1.0 и в спидометре будет соответствующее значение). Можно либо ещё одну функцию написать, ал-я
    PHP код:
    stock Float:GetVehicleSpeedAC(vehicleid)
    {
        new
            
    Float:x,
            
    Float:y,
            
    Float:z;

        
    GetVehicleVelocity(vehicleidxyz);
        if(
    <= -5.0) return -1.0;
        else return 
    VectorSize(xyz) * 180.0;

    И использовать её в античите


    Либо переделать эту функцию на такой ляд
    PHP код:
    stock Float:GetVehicleSpeed(vehicleidmode 0)
    {
        new
            
    Float:x,
            
    Float:y,
            
    Float:z;

        
    GetVehicleVelocity(vehicleidxyz);
        if(
    mode == && <= -5.0) return -1.0;
        else return 
    VectorSize(xyz) * 180.0;

    В античите используя уже так:
    PHP код:
    GetVehicleSpeed(vehicleid1); 


    Либо просто (я выбрал бы этот вариант) использовать код функции напрямую в античите, типа
    PHP код:
    new
            
    Float:x,
            
    Float:y,
            
    Float:z;

    GetVehicleVelocity(vehicleidxyz);
    if(
    <= -5.0) continue;//Если проверка циклом. Если это функция - просто return
    new Float:vehicle_speed VectorSize(xyz) * 180.0
    Да но вот только если игрок ехал стремительно вниз и тут резко дорога выровнялась (есть такие участки) в итоге получаем ложное срабатывание так как буквально там за секунду сила ускорения по Z изменилась с -6.5 на 0.1 а скорость за этот промежуток времени спала всего лишь на процентов там 10. Но я сам уже разобрался с этой проблемой. Благодарю

 

 
Страница 2 из 3 ПерваяПервая 1 2 3 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •