Решил расказать о том, как находить, в периметре квадрата ли игрок или нет. Не знаю, продолжу ли я эту серию уроков, но это я опишу.
И так, для того что бы узнать в переметре квадрата ли игрок, нам нужно вспомнить математику. Квадрат, имеет четыре стороны, чтобы узнать в периметре ли игрок квадрата, нужно найти кординаты углов квадрата, дабы разметить его площать, и если игрок находится в нутри квадрата (его площади), то он в периметре квадрата.
И так, ищем углы, у меня будет проверка только на X и Y, то есть это будет именно квадрат. Дабы найти в кубе, нужно будет еще найти высоту (минимальную и максимальную). И так, я сейчас беру из головы кординаты углов, у меня это будет... Допустим 1.5 X минимальный, 5.0 X максимальный, -5.3 Y минемальный, 3.253 Y максимальный. Сейчас если изобразить это в виде рисунка, соеденив все точки по методу "X min с X max, Y min с Y max", у нас получатся две паралельных прямых, но если соеденить еще и X min с Y min, и Y max с X max, мы получим квадрат. Собственно, по этому методу мы и находим граници периметра, и то что в них и является зоной периметра, площадью. Дальше все просто, нам нужно определить по кординатом игрока, что не одна из указаных кординат, не выходит за рамки нашего периметра:
Code
new Float:x,Float:y,Float:z;
GetPlayerPos(playerid,x,y,z);
if(x > 1.5 && x < 5.0 && y > -5.3 && y < 3.253)
{
// Вот здесь будет выполнятся условие, если игрок находится в периметре
// моего квадрата. То есть:
// Если кордината X у игрока больше 1.5 (X min), X
// меньше 5.0 (X max), и кордината Y больше -5.3 (Y min) и Y меньше 3,253
// (Y max), условие выполняется.
}
Проверять это можно везде, но если делать какую либо зону, в которую игрок может просто войти, без каких либо команд, то нужно использовать это в паблике OnPlayerUpdate.
Так же можно проверить окружность игрока стандартной функцией, но если нужен именно квадрат и радиус покрытия большой (к примеру нужно узнать что игрок находится на военной базе 51), то погрешность стандартной функции будет слишком велика, т.к. она проверяет на окружность. В этом случае следует использовать мой пример.
Теперь довайте сделаем функцию, которая будет првоерять это, она будет возвращать 1 если игрок в периметре, 0 если вне периметра.
Code
stock IsPlayerInZone(playerid,Float:xmin,Float:xmax,Float:yminFloat:ymax)
{
new Float:x,Float:y,Float:z;
GetPlayerPos(playerid,x,y,z);
if(x > xmin && x < xmax && y > ymin && y < ymax) return 1;
else return 0;
}
Вот такой просто, но очень важный код. Использовать его можно так:
Code
if(IsPlayerInZone(playerid,0.0,4.4,5.0,33.33))
Естественно, если надо проверить что игрок вне периметра, то используем так:
Code
if(!IsPlayerInZone(playerid,0.0,4.4,5.0,33.33))
Дабы узнать, в периметре куба ли, находится игрок, нужно добавить проверку на zmin и zmax.
Собсно все.