• Страница 1 из 1
  • 1
Модератор форума: [east_side]_trane, drifter-dron, valych, admin  
[Кординаты] Урок 1: Периметр
Serega_ShiniwolfДата: Пятница, 04.02.2011, 17:25:32 | Сообщение # 1

Группа: Пользователи
Сообщений: 45
Решил расказать о том, как находить, в периметре квадрата ли игрок или нет. Не знаю, продолжу ли я эту серию уроков, но это я опишу.
И так, для того что бы узнать в переметре квадрата ли игрок, нам нужно вспомнить математику. Квадрат, имеет четыре стороны, чтобы узнать в периметре ли игрок квадрата, нужно найти кординаты углов квадрата, дабы разметить его площать, и если игрок находится в нутри квадрата (его площади), то он в периметре квадрата.
И так, ищем углы, у меня будет проверка только на 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.

Собсно все.


[color=red][i][b]Мои Разроботки![/b][/i][/color]
[b][i][FS] Just Click Admin 3 %100
[GM] Original Gangster Life v.2.7.9 %100
[GM] Game World v.1.0.0 %32[/i][/b]
 
СообщениеРешил расказать о том, как находить, в периметре квадрата ли игрок или нет. Не знаю, продолжу ли я эту серию уроков, но это я опишу.
И так, для того что бы узнать в переметре квадрата ли игрок, нам нужно вспомнить математику. Квадрат, имеет четыре стороны, чтобы узнать в периметре ли игрок квадрата, нужно найти кординаты углов квадрата, дабы разметить его площать, и если игрок находится в нутри квадрата (его площади), то он в периметре квадрата.
И так, ищем углы, у меня будет проверка только на 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.

Собсно все.


Автор - Serega_Shiniwolf
Дата добавления - 04.02.2011 в 17:25:32
  • Страница 1 из 1
  • 1
Поиск:
Загрузка страницы, займет меньше минуты...
Загрузка...

Статистика Форума
Последнии темы Читаемые темы Лучшие пользователи Новые пользователи
Система телефонов поломалась
Не в себе
фильм скалайн
Трансформеры 3
форсаж 6
Ищу [FS]Для админок на сервер
нужны координаты карты для отметки зон...
Помогите найти мод
pawno урок автоматические ворота
обращение к скриптерам.
Вопросы по скриптингу
Ваши ошибки при компиляции GM/FS

Вопросы по скриптингу

(1081)

Считаем до 1000

(274)

Ваши ошибки при компиляция gm

(260)

Набор в команду

(80)

Ваши ошибки при компиляции GM/FS

(71)

вопроосы по скриптингу от 22.04.2013

(64)

Баннеробмен

(64)

несколько команд на samp 0.3 c

(64)

Оценки сайта samp-pawno.ru

(55)

Заказ хостинга

(51)

Набор в команду(форум)

(45)

Урок №61 по созданию системы авто для GodFather

(45)

admin

(3869)

[east_side]_trane

(443)

TWiX

(316)

valych

(501)

drifter-dron

(477)

danik_rok

(317)

Dimka_71rus

(360)

Drifter96

(300)

MaNb9K

(220)

[MTA]MaPeR5518

(181)

Dima_Tkach

(107)

Nik_Ull

(184)

ps798829

(Среда 08:23:47)

system32xzxz

(Четверг 09:25:24)

torbin169

(Суббота 23:09:29)

kuchuk_00

(Суббота 17:10:14)

artem_boyko_3

(Суббота 15:57:37)

greggelbak

(Среда 18:29:37)

vladisvlavs

(Среда 13:51:57)

add02102002

(Понедельник 22:37:15)

Диман221

(Понедельник 18:12:45)

almas051004

(Воскресенье 11:05:32)

megasuccessms

(Суббота 14:15:36)

nawe

(Пятница 22:25:23)

Вверх
23:22:05
ОбновитьСмайлыУправление мини-чатом
ЧАТ-PAWNO
2010-2025

vkontakte :samp-pawno.ru: