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

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,369
    Репутация:
    113 ±

    Какая функция замера расстояния между игроком и координатой самая быстрая?

    Какая функция замера расстояния между игроком и x,y,z будет самая быстрая?
    Суть в том что нужно между игроком и рядом стоящим каром замерять дистанцию..
    Последний раз редактировалось vovandolg; 25.01.2016 в 06:48.

  2. #2
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Тут есть сразу 4 способа:
    1. Взять отдельно координаты игрока и машины (GetPlayerPos), GetVehiclePos), подсчитать расстояние между ними (VectorSize) и сравнить с нужным радиусом (следует заметить, что при сравнении вещественных чисел скрытым образом вызывается функция floatcmp) (итого 4 вызова нативных функций).
    2. Получить координаты машины, с помощью функции GetPlayerDistanceFromPoint определить расстояние от игрока до машины и сравнить с нужным радиусом (опять же, неявный вызов floatcmp) (3 вызова нативных функций).
    3. Получить координаты игрока и проверить, определить расстояние от машины до игрока (GetVehicleDistanceFromPoint), сравнить с радиусом (и здесь тоже вызов strcmp) (3 вызова нативных функций).
    4. Получить координаты машины и с помощью функции IsPlayerInRangeOfPoint определить, находится ли игрок в радиусе от машины (всего 2 вызова нативных функций).

    Про кол-во нативных функций я написал не зря, т.к. сами по себе они простые и потратится больше времени на сам вызов функций, чем на их работу.
    Поэтому я советую 4-й вариант, т.к. в данном случае чем меньше вызовов нативных функций, тем лучше.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

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

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,369
    Репутация:
    113 ±
    Если вот так сделаю, нормальный вариант будет, или можно что то подкрутить получше?
      Открыть/закрыть
    PHP код:
    //там там тарам там...
    //тут вначале проверка на скорость новым измерением по координатам, если более чем положено то заходим:
    new carsid GetNearestVehicle(playerid); //тут же на портале нашёл эту функцию с перебором в стриме
    new Float:cx,Float:cy,Float:cz;
    GetVehiclePos(carsidcxcycz);
    if(!
    IsPlayerInRangeOfPoint(25.0playeridcxcycz))//с дистанцией ещё подшаманить(возможно ещё и пинг придется проверять)
    {
        
    SetPVarInt(playerid,"KickPlayer",GetPVarInt(playerid,"KickPlayer")+1);
        if(
    GetPVarInt(playerid,"KickPlayer") == 2// Если вдруг ложное срабатывание - даём пинка(ещё унфриз можно будет добавить)
        
    {
            new 
    Float:SLx,Float:SLy,Float:SLz;
            
    GetPlayerPos(playerid,SLx,SLy,SLz);
            
    SetPlayerPos(playerid,SLx,SLy,SLz+2);
        }
        if(
    GetPVarInt(playerid,"KickPlayer") >= 6//Истинный момент выявления
        
    {
            
    SendClientMessage(playeridCOLOR_LIGHTRED"Вы кикнуты по подозрению в читерстве(#0025)");
            
    KickEx(playerid);
        }
    }

    //Так же ещё хочу какой нибудь таймер сделать или внутри таймера таймер на PVar'ax таймер сделать
    //и в нём будет через некоторое время обнулять "KickPlayer", так как ложных будет много, и ложные могут дойти до ложного кика,
    //а уменьшать истинный момент всё равно что давать летать понемногу, поэтому другого варианта не нашёл я пока что 

  5. #4
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Если вам потом нужны будут координаты игрока (в SetPlayerPos), то больше подойдёт 3-й способ.
    Касаемо координат в SetPlayerPos: click (пункт 9).
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

 

 

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

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

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

Ваши права

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