Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 6 из 6
  1. #1
    Аватар для KakbeYura
    Пользователь

    Статус
    Оффлайн
    Регистрация
    21.11.2013
    Сообщений
    72
    Репутация:
    16 ±

    Функция, которая бы проверяла, стоит на чём то транспортное средство.

    Собственно весь вопрос в заголовке. Есть возможность проверять?

    Мне для дрифт-счётчика. Во всех дрифт-счётчиках есть такой баг, когда падаешь с высоты боком, с горы Чилиад, например, то тебе насчитываются дрифт-очки. Баг досадный, есть высокие зоны, с которых можно долго падать на ТС и зарабатывать много скр. И да, если вы скажите проверять на повреждения, то это есть, только есть нюансы: 1) можно упасть на колёса и ХП авто не снимается, 2) можно упасть в воду, где ХП тоже не снимается.

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,439
    Репутация:
    1920 ±
    Цитата Сообщение от KakbeYura Посмотреть сообщение
    Собственно весь вопрос в заголовке. Есть возможность проверять?

    Мне для дрифт-счётчика. Во всех дрифт-счётчиках есть такой баг, когда падаешь с высоты боком, с горы Чилиад, например, то тебе насчитываются дрифт-очки. Баг досадный, есть высокие зоны, с которых можно долго падать на ТС и зарабатывать много скр. И да, если вы скажите проверять на повреждения, то это есть, только есть нюансы: 1) можно упасть на колёса и ХП авто не снимается, 2) можно упасть в воду, где ХП тоже не снимается.
    GetVehicleVelocity возвращает ускорение не только по осям X и Y, но и по оси Z. Если оно отрицательное, просто обрывай выполнение функции с подсчётом дрифта. Какие проблемы?

    P.S. Дабы предотвратить возможные вопросы, поясню. Если ускорение по оси Z отрицательное, значит игрок падает. Следовательно, просто не засчитываем в этот момент дрифт очки

    UPD: Только стоит сделать замеры и обрывать выполнение когда, например, ускорение по оси Z больше 50.
    Последний раз редактировалось DeimoS; 17.02.2014 в 23:11.
    Связаться со мной в VK можно через личные сообщения этой группы

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

    Steve Pavlina

  3. #3
    Аватар для ^_^
    Übermensch

    Статус
    Оффлайн
    Регистрация
    25.11.2013
    Сообщений
    157
    Репутация:
    243 ±
    Естественно есть выход, и для обоих случаях одновременно: плагин MapAndreas - который позволяет узнавать высоту рельефа на каждые координаты X,Y (подробнее: КЛАЦ).
    Собственно, прототип проверки:
    PHP код:
    stock IsPlayerOnEarth(playerid)
    {
        new 
    Float:XFloat:YFloat:ZFloat:MaxZ;
        
    GetPlayerPos(playeridXYZ);
        
    MapAndreas_FindAverageZ(XYMaxZ);
        if(
    MaxZ+0.5 || MaxZ-0.5) return 0;
        return 
    1;

    Дальше в проверку на угол поворота нужно просто добавить условие && IsPlayerOnEarth(playerid)
    P.S: Это лишь прототип.
    Последний раз редактировалось ^_^; 17.02.2014 в 23:10.

  4. 3 пользователя(ей) сказали cпасибо:
    Osetin (17.02.2014) semen7907 (17.03.2014) [ForD] (18.02.2014)
  5. #4
    Аватар для KakbeYura
    Пользователь

    Статус
    Оффлайн
    Регистрация
    21.11.2013
    Сообщений
    72
    Репутация:
    16 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    GetVehicleVelocity возвращает ускорение не только по осям X и Y, но и по оси Z. Если оно отрицательное, просто обрывай выполнение функции с подсчётом дрифта. Какие проблемы?

    P.S. Дабы предотвратить возможные вопросы, поясню. Если ускорение по оси Z отрицательное, значит игрок падает. Следовательно, просто не засчитываем в этот момент дрифт очки

    UPD: Только стоит сделать замеры и обрывать выполнение когда, например, ускорение по оси Z больше 50.
    Браво, я не додумался. Спасибо.

    Только вот не 50 это точно, у меня команда /slap подкидывает авто на 100-200 метров, с указанием ускорением 0.5
    PHP код:
    SetVehicleVelocity(GetPlayerVehicleID(pl),0.0,0.0,0.5); 
    А вот игрока намного ниже подкидает, метров на 30-50, с указанием ускорения 200.0:
    PHP код:
    SetPlayerVelocity(pl,0.0,0.0,200.0); 
    Очень странные различия, как по мне.

    Все спидометры же как определяют скорость:
    PHP код:
    GetVehicleVelocity(GetPlayerVehicleID(g), XzYzZz);
            
    BySpeed floatround(floatsqroot(Xz*Xz+Yz*Yz+Zz*Zz)*195); 
    Корень с суммы квадратов ускорений, умноженый на 195. Если не умножать, то скорость будет показывать 1.

    И про MapAndreas - он только стандартную карту опознаёт, а если объекты свои - зась.

    - - - Добавлено - - -

    Цитата Сообщение от ^_^ Посмотреть сообщение
    Естественно есть выход, и для обоих случаях одновременно: плагин MapAndreas - который позволяет узнавать высоту рельефа на каждые координаты X,Y (подробнее: КЛАЦ).
    Собственно, прототип проверки:
    PHP код:
    stock IsPlayerOnEarth(playerid)
    {
        new 
    Float:XFloat:YFloat:ZFloat:MaxZ;
        
    GetPlayerPos(playeridXYZ);
        
    MapAndreas_FindAverageZ(XYMaxZ);
        if(
    MaxZ+0.5 || MaxZ-0.5) return 0;
        return 
    1;

    Дальше в проверку на угол поворота нужно просто добавить условие && IsPlayerOnEarth(playerid)
    P.S: Это лишь прототип.
    Слишком уж много памяти он жрёт. Да и поставленные объекты не учитывает.

  6. #5
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,439
    Репутация:
    1920 ±
    Цитата Сообщение от KakbeYura Посмотреть сообщение
    Браво, я не додумался. Спасибо.

    Только вот не 50 это точно, у меня команда /slap подкидывает авто на 100-200 метров, с указанием ускорением 0.5
    PHP код:
    SetVehicleVelocity(GetPlayerVehicleID(pl),0.0,0.0,0.5); 
    А вот игрока намного ниже подкидает, метров на 30-50, с указанием ускорения 200.0:
    PHP код:
    SetPlayerVelocity(pl,0.0,0.0,200.0); 
    Очень странные различия, как по мне.

    Все спидометры же как определяют скорость:
    PHP код:
    GetVehicleVelocity(GetPlayerVehicleID(g), XzYzZz);
            
    BySpeed floatround(floatsqroot(Xz*Xz+Yz*Yz+Zz*Zz)*195); 
    Корень с суммы квадратов ускорений, умноженый на 195. Если не умножать, то скорость будет показывать 1.
    Я сказал лишь самый примитивный вариант :0 А уж как его развивать - дело ваше. Можно спокойно сделать переменную-маркер, которую будем ровнять единице, если в момент падения, например, нужно засчитывать очки и ровнять нулю когда ускорение по оси Z равно 0.
    Просто стоит учесть, что даже спускаясь с какой-нибудь горке (дрифт по той же горе Чиллиад. Хотя моет я ошибаюсь), ускорение по Z тоже будет отрицательное. И я говорил именно о том, чтоб найти максимум этого самого "легального" ускорения, дабы настроить эту самую защиту правильно
    P.S. Таким методом легко настроить античит на скорость, предотвратив ложные срабатывания :)
    Связаться со мной в VK можно через личные сообщения этой группы

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

    Steve Pavlina

  7. #6
    Аватар для KakbeYura
    Пользователь

    Статус
    Оффлайн
    Регистрация
    21.11.2013
    Сообщений
    72
    Репутация:
    16 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Я сказал лишь самый примитивный вариант :0 А уж как его развивать - дело ваше. Можно спокойно сделать переменную-маркер, которую будем ровнять единице, если в момент падения, например, нужно засчитывать очки и ровнять нулю когда ускорение по оси Z равно 0.
    Просто стоит учесть, что даже спускаясь с какой-нибудь горке (дрифт по той же горе Чиллиад. Хотя моет я ошибаюсь), ускорение по Z тоже будет отрицательное. И я говорил именно о том, чтоб найти максимум этого самого "легального" ускорения, дабы настроить эту самую защиту правильно
    P.S. Таким методом легко настроить античит на скорость, предотвратив ложные срабатывания :)
    Весь код, что я дописал, для исправления бага:
    PHP код:
    && Zz > (-0.15
    Строка GetVehicleVelocity(GetPlayerVehicleID(g), Xz, Yz, Zz); была уже, для того, что бы не дрифтить AirBrake'ом (проверка скорости).

    А про баг думал долго, не дошло до меня учесть скорость.

    И если он будет спускатся по горке дрифтом, то дрифтом я это не считаю, так что всё отлично.
    Благодарю за помощь, тему закрывайте.
    Последний раз редактировалось KakbeYura; 19.02.2014 в 01:41.

 

 

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

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

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

Ваши права

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