PDA

Просмотр полной версии : [Урок] Радиус в SA:MP



Salvacore
13.04.2014, 06:44
Вступление.
Радиус в SA:MP мало чем отличается от радиуса в математике.
Радиус — отрезок, соединяющий центр окружности (или сферы) с любой точкой, лежащей на окружности (или поверхности сферы), а также длина этого отрезка. Радиус составляет половину диаметра.
Мы будем использовать функцию IsPlayerInRangeOfPoint (http://wiki.sa-mp.com/wiki/IsPlayerInRangeOfPoint_RU)
Вот так это будет выглядеть в коде:


if(IsPlayerInRangeOfPoint(playerid, 7.0, 2695.6880, -1704.6300, 11.8438))
SendClientMessage(playerid,-1,"Вы находитесь около входа в стадион!");
Функция проверит , если человек в радиусе 7 метров от указанных XYZ(2695.6880, -1704.6300, 11.8438)
http://upload.wikimedia.org/wikipedia/commons/thumb/1/1b/Radius_and_diameter.png/220px-Radius_and_diameter.png

Центральная точка будет 2695.6880, -1704.6300, 11.8438 и от параметров функции, которые мы использовали.

Использование:


CMD:radius(playerid, params[])//DC_CMD
{
foreach(new i:Player)//foreach
{
if(IsPlayerInRangeOfPoint(i, 22.0, 55.0, 88.0, 21.0))
SendClientMessage(i,-1, "Вы в пределах 22 метров от точек 555.0, 88.0, 21.0!");
}
return 1;
}
ALTX:radius("/радиус");[/CENTER][/B][/I]

Библиотека:
Где найти DC_CMD? (http://pro-pawn.ru/showthread.php?1028-DC_CMD-v2-8-%2823-03-14%29)
Где найти foreach? (http://pastebin.com/iUFrMNtY)
IsPlayerInRangeOfPoint (http://wiki.sa-mp.com/wiki/IsPlayerInRangeOfPoint_RU)
SendClientMessage (http://wiki.sa-mp.com/wiki/SendClientMessage)

XemyL
13.04.2014, 15:59
Смотрю разобрался как работает, а то судя по последней работе (система AFK) не знал :D
Не обижайся, реально смешной косяк)

Salvacore
13.04.2014, 16:37
Смотрю разобрался как работает, а то судя по последней работе (система AFK) не знал :D
Не обижайся, реально смешной косяк)
Не обижаюсь

DmX
17.04.2014, 16:32
Хороший урок для новичка)

GeeRoN_ZeRO
04.07.2014, 00:46
обновите скрин, плиз.

Salvacore
30.07.2014, 05:21
Обновил скрин.

plakapenka
11.08.2014, 01:37
Вы в пределах 22 метров от точек 555.0, 88.0, 21.0!");

:shock: И я не уверен что растояние здесь в метрах

Salvacore
11.08.2014, 13:11
:shock: И я не уверен что растояние здесь в метрах
РаСтояние, а в чем?

iStrange
26.08.2014, 02:35
Вот жаль что не изобрели пока волшебную штуку, которая проверяла бы позицию игрока ежесекундно без использования таймера. :wacko:

DeimoS
26.08.2014, 08:08
Вот жаль что не изобрели пока волшебную штуку, которая проверяла бы позицию игрока ежесекундно без использования таймера. :wacko:

А на чём бы по-вашему была построена эта волшебная штука? Вы удивитесь, но даже пакеты синхронизации обновляются по таймеру. Просто он встроен в клиент

SteveStage
22.10.2019, 01:46
И как мне точно измерять метры/радиус в самп? Путем проб и ошибок? Это очень долго и требует тестера. А как иначе?

DeimoS
22.10.2019, 02:32
Эмм, встал в предполагаемый центр круга и сохранил координаты.
После встал на границу круга и так же сохранил координаты.
А после загнал координаты в функцию VectorSize по принципу:
VectorSize(x1-x2, y1-y2, z1-z2)
Где:
x1 - x-координата центра круга
x2 - x-координата края круга

В результате и получишь радиус.

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