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

    Статус
    Оффлайн
    Регистрация
    26.08.2015
    Адрес
    Новокузнецк
    Сообщений
    54
    Репутация:
    2 ±

    Вычислить ближайшую точку

    Задача: После смерти персонажа - спавн в ближайшей больнице.

    Если умер у любой из 7 точек кроме самой первой (верхней), то когда умираешь в месте, где ближайшая точка первая - спавнит на любой из 6 точек, где умирал в предпоследний раз.

    При включении мода, 1я строка координат работает, до тех пор пока не попробовать на любую другую координату не заспавнится.
    Дальше если умирать у 1й области, на неё не спавнит как должно, а спавнит на предпоследнюю любую из 6ти.

    Код:
    new Float: Deathposx[MAX_PLAYERS];
    new Float: Deathposy[MAX_PLAYERS];
    new Float: Deathposz[MAX_PLAYERS];
    
    new Float:StationPos[][] =
    {
            {1863.7524,-1931.4460,4.9223,281.3866},// - эту строку перебивают нижние строки координат.
            {2484.0522,-239.5500,5.8655,87.8277},
            {1115.3075,-1420.5315,7.5683,268.5078},
            {1176.9838,191.8112,6.8687,358.2674},
            {-203.7157,1202.7660,14.9085,87.3823},
            {-1167.3390,1781.3202,16.1761,177.9131},
            {-2599.4739,1661.1277,58.9695,89.2162}
    };
    enum StationPosInfo
    {
            Float:Position[3],
            StationId
    };
    new StantionInfo[StationPosInfo];
    
    
    stock DistancePointToPoint(Float: x, Float: y, Float: z, Float: fx, Float:fy, Float: fz) return floatround(floatsqroot(floatpower(fx - x, 2) + floatpower(fy - y, 2) + floatpower(fz - z, 2)));
    
    
    public OnPlayerDeath(playerid, killerid, reason)
    {
            GetPlayerPos(playerid, Deathposx[playerid], Deathposy[playerid], Deathposz[playerid]);//Когда умер, записываем координаты персонажа в переменные
            return 1;
    }
    
    stock ToHospital(playerid)//Здесь рассчитываем ближайшую точку больницы к месту, где умер персонаж.
    {
            if(PlayerInfo[playerid][pInterior] == 0)
            {
                    StantionInfo[Position][0] = DistancePointToPoint(Deathposx[playerid], Deathposy[playerid], Deathposz[playerid], StationPos[0][0], StationPos[0][1], StationPos[0][2]);
                    for(new i; i < sizeof(StationPos); ++i)
                    {
                            if(StantionInfo[Position][0] <= (StantionInfo[Position][1] = DistancePointToPoint(Deathposx[playerid], Deathposy[playerid], Deathposz[playerid], StationPos[i][0], StationPos[i][1], StationPos[i][2]))) continue;
                            StantionInfo[Position][0] = StantionInfo[Position][1];
                            StantionInfo[StationId] = i;
                    }
                    SetPlayerPos(playerid, StationPos[StantionInfo[StationId]][0], StationPos[StantionInfo[StationId]][1], StationPos[StantionInfo[StationId]][2]);
                    SetPlayerFacingAngle(playerid, StationPos[StantionInfo[StationId]][3]);
                    SetCameraBehindPlayer(playerid);
                    SetPlayerInterior(playerid, 0);
                    SetPlayerVirtualWorld(playerid, 0);
            }
    }

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

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Вот простейший пример поиска минимального значения в массиве. Надеюсь, под свою задачу сможете адаптировать.
    PHP код:
    new Float:arr[10];

    new 
    Float:min arr[0];
    for (new 
    1sizeof(arr); ++i)
        if(
    min arr[i])
            
    arr[i] = min
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

 

 

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

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

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

Ваши права

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