Многоугольные зоны -
Seregamil1 - 13.05.2013
Добрый день!
Многие часто задавались вопросом: реально ли сделать в сампе многоугольные границы?
Часто ответ был таков: это не мта, в сампе можно делать по одной зоне.
Но это суждение - неверное.
Хочу представить вам свою "разработку", если ее такой можно назвать.
Суть этой системы такова:
Она загружает из файла определенное количество зон, создает их, и прогоняет игроков на нахождение в них.
В этой системе я для примера сделал 3 зоны, при выходе из которой игрока возвращает на последнюю координату в зоне, кому нужно - изменят под себя
Теперь о коде:
В самой системе я разрешил создавать не более 3-х зон, но вы можете сделать это под себя, достаточно будет изменить строки:
PHP Code:
#define m_a 12//12 - максимум зон * 4, т.к. гангзоны содержат 4 координаты
#define m_z 3//максимальное количество зон
Для прогрузки зоны используется mxINI
Цикл загрузки зон остановится в 3-х условиях
PHP Code:
Координаты тупо нету
Прогрузилось все что есть
Где-то допущена координата 0.00000
Если вы допустили кол-во координат, которое не делится на 4 - зоны попросту не создадутся.
Для загрузки зоны используйте
PHP Code:
readFileZone("тут размещение вашего файла с координатами");
Папка с файлом с тестовыми координатами (засунуть в директорию scriptfiles):
http://rghost.ru/45963410
Для тех, кто вообще ничерта не понял:
http://www.youtube.com/watch?v=oxiMW...ature=*********
Ну и ссылка на скачивание:
http://pastebin.com/k1fg73gS
Автор:
Seregamil
Re: Многоугольные зоны -
Stepashka - 13.05.2013
Чтение файла внутри
main() плохая идея, для этого существует
OnFilterScriptInit.
Quote:
Originally Posted by Seregamil1
Если вы допустили кол-во координат, которое не делится на 4 - зоны попросту не создадутся.
|
не стоит так делать, конечный "потребитель" не должен этим заморачиваться, этим должен заморачиваться ваш скрипт.
а зачем
index передавать по ссылке если он используется только для проверки?
null - очень, просто ужас какое плохое имя для переменной!
И внутри функция можно было бы использовать не
i, а смело использовать
playerid, код станет более читаемый.
Оформление кода почему-то хромает от одного вида к другому. Как и типы функций.
Часть кода можно упростить, избавиться от ненужных конструкций, например:
pawn Code:
search(playerid, index) {
for (new i; i != index; i++) {
if (InTheGangZone(playerid, pos[i][0], pos[i][1], pos[i][2], pos[i][3])) {
save(playerid);
escape(playerid);
return 1;
}
}
return 0;
}
Re: Многоугольные зоны -
Seregamil1 - 13.05.2013
Quote:
Чтение файла внутри main() плохая идея, для этого существует OnFilterScriptInit.
|
хорошо, возьму на заметку
Quote:
null - очень, просто ужас какое плохое имя для переменной!
|
неимеет значение
Quote:
И внутри функция можно было бы использовать не i, а смело использовать playerid, код станет более читаемый.
|
код писался лично для себя, и тут уже мой выбор
Quote:
if (InTheGangZone(playerid, pos[i][0], pos[i][1], pos[i][2], pos[i][3])) {
save(playerid);
escape(playerid);
return 1;
}
|
а вот тут вы неправы, если верить вашему коду, игрока сохранит и тут же вернет
Re: Многоугольные зоны -
Stepashka - 13.05.2013
Quote:
Originally Posted by Seregamil1
неимеет значение
|
даже в
pawn есть
null, так что имеет!
Quote:
Originally Posted by Seregamil1
код писался лично для себя, и тут уже мой выбор
|
Зачем вы тогда его опубликовали, если он "лично для себя", опубликовали код, будьте любезны его привести в удобочитаемый вид. Это не только упростит его понимание, но и улучшит отношение к автору.
Quote:
Originally Posted by Seregamil1
а вот тут вы неправы, если верить вашему коду, игрока сохранит и тут же вернет
|
Согласен, не доглядел, читаемость кода подвела. Но лишняя переменная тут явно не нужна.
Re: Многоугольные зоны -
Seregamil1 - 13.05.2013
Quote:
даже в pawn есть null, так что имеет!
|
Quote:
Зачем вы тогда его опубликовали, если он "лично для себя", опубликовали код, будьте любезны его привести в удобочитаемый вид. Это не только упростит его понимание, но и улучшит отношение к автору.
|
переделал, так лучше?
Quote:
Но лишняя переменная тут явно не нужна.
|
если вы про select - то по какой то причине при проверке всех зон, реагировала только нулевая, остальные не подавали признаки жизни
Re: Многоугольные зоны -
stabker - 13.05.2013
Эту возможность предоставляет
стример от Инкогнито
pawn Code:
native CreateDynamicPolygon(Float:points[], Float:minz = -FLOAT_INFINITY, Float:maxz = FLOAT_INFINITY, maxpoints = sizeof points, worldid = -1, interiorid = -1, playerid = -1);
с возможностью их динамического использования. А учитывая то, что этот стример использует большенство пользователей, я думаю им будет куда удобнее использовать его функцию
Re: Многоугольные зоны -
Seregamil1 - 14.05.2013
Quote:
с возможностью их динамического использования. А учитывая то, что этот стример использует большенство пользователей, я думаю им будет куда удобнее использовать его функцию
|
я уж думаю ненапишут...
данный скрипт делался в качестве прототипа этой функции,
помимо того, что многие юзают стример, есть люди, которые ненуждаются в нем, так зачем подключать доп. плагины ради одной функции?
Re: Многоугольные зоны -
-Stranger- - 14.05.2013
Seregamil1, ради скорости?! Мне кажется плагин быстрее обсчитает чем код. Поправьте если ошибаюсь.
Re: Многоугольные зоны -
Seregamil1 - 15.05.2013
Quote:
Originally Posted by -Stranger-
Seregamil1, ради скорости?! Мне кажется плагин быстрее обсчитает чем код. Поправьте если ошибаюсь.
|
свой код протестировал, незнаю, верно или нет, но:
Загрузка 48 арен
PHP Code:
[14:43:57] Количество арен:48
[14:43:57] На поиски потрачено: 3ms
Код теста:
PHP Code:
readCoords(arg[])
{
new time = GetTickCount();
/*Весь код этой функции*/
printf("На поиски потрачено: %ims", GetTickCount()-time);
return 1;
}
И тест поиска по этим 48 зонам, хотя больше чем уверен что это бред, ID=0
PHP Code:
[14:40:03] На поиски потрачено: 0ms
[14:40:04] На поиски потрачено: 1ms
[14:40:04] На поиски потрачено: 0ms
[14:40:05] На поиски потрачено: 0ms
Re: Многоугольные зоны -
-Stranger- - 15.05.2013
Seregamil1, что-то нето, покажите весь код теста.