Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.

Реклама


**Как получить V.I.P** (Перейти)
Чтобы заказать рекламу на Pro-Pawn.Ru, обращайтесь в Skype.
Баннерная реклама 200руб/мес, Текстовая 100руб/мес.
Показано с 1 по 6 из 6
  1. #1
    Аватар для KakbeYura
    Пользователь

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

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

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

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

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

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

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

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

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

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

    Steve Pavlina

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

    Статус
    Оффлайн
    Регистрация
    25.11.2013
    Сообщений
    161
    Репутация:
    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
    Адрес
    Восточный Мордор
    Сообщений
    3,931
    Репутация:
    1502 ±
    Цитата Сообщение от 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. Таким методом легко настроить античит на скорость, предотвратив ложные срабатывания :)
    Связаться со мной можно в личных сообщениях этой группы

    Широко известно, что идеи стоят 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)

Ваши права

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