Карта высот SA-MP -
^Woozie^ - 13.01.2010
Опять мне нечего делать по ночам и я продолжаю изобретать концепты скриптов для любимого мультиплеера.
В общем Anti-airbreak
Quote:
Dr.Psycho (00:48:41 14/01/2010)
хм
Dr.Psycho (00:48:43 14/01/2010)
как ты думаешь
Dr.Psycho (00:48:49 14/01/2010)
реально составить карту высот для SA-MP
Продавец кошмаров (00:49:05 14/01/2010)
типа
--- (00:49:15 14/01/2010)
на каждый x+y чтобы узнать z?
Dr.Psycho (00:49:18 14/01/2010)
типа анти айрбрейк нехуевый
Dr.Psycho (00:49:23 14/01/2010)
да
--- (00:49:27 14/01/2010)
заебешься
--- (00:49:33 14/01/2010)
если это вообще возможно сделать
Dr.Psycho (00:49:37 14/01/2010)
это возможно
--- (00:49:40 14/01/2010)
слишком глобально
Dr.Psycho (00:49:40 14/01/2010)
теоретически
Dr.Psycho (00:49:48 14/01/2010)
но можно ведь..хз
--- (00:49:57 14/01/2010)
человек 1000 найди кто это будет делать
--- (00:50:15 14/01/2010)
помоему все id объектов проверить и расписать какой из них что намного легче
Dr.Psycho (00:50:20 14/01/2010)
зачем все эти извращения?
--- (00:50:32 14/01/2010)
чтобы было реально сделать
Dr.Psycho (00:50:40 14/01/2010)
а вот нихуя
Dr.Psycho (00:50:48 14/01/2010)
делаешь короче
Dr.Psycho (00:50:50 14/01/2010)
тачку
Dr.Psycho (00:50:53 14/01/2010)
в воздухе
Dr.Psycho (00:51:00 14/01/2010)
она падает
Dr.Psycho (00:51:14 14/01/2010)
а ты замеряешь в какое время она будет стремительно терять z координату
Dr.Psycho (00:51:26 14/01/2010)
и когда эта стремительность пропадёт
Dr.Psycho (00:51:42 14/01/2010)
то всё
--- (00:51:56 14/01/2010)
проще летать по мапе и самостоятельно проверять
--- (00:51:58 14/01/2010)
нааамного
Dr.Psycho (00:52:00 14/01/2010)
замерять координату и писать её в файл
Dr.Psycho (00:52:06 14/01/2010)
ну можно обьехать весь са
Dr.Psycho (00:52:13 14/01/2010)
но на это уйдёт.. гм дохуя времени
--- (00:52:20 14/01/2010)
так уйдет больше
Dr.Psycho (00:52:24 14/01/2010)
но процесс можно автоматизировать
--- (00:52:34 14/01/2010)
придумай как и потом поговорим
Dr.Psycho (00:52:40 14/01/2010)
просто
Dr.Psycho (00:52:44 14/01/2010)
за месяц
Dr.Psycho (00:52:47 14/01/2010)
на паблике большом
Dr.Psycho (00:52:53 14/01/2010)
замерять все передвижения игроков
Dr.Psycho (00:53:00 14/01/2010)
и их высоты
Dr.Psycho (00:53:04 14/01/2010)
потом написать скрипт
Dr.Psycho (00:53:11 14/01/2010)
который убирает повторы среди этих высот
Dr.Psycho (00:53:15 14/01/2010)
и всё..
Dr.Psycho (00:53:17 14/01/2010)
готово
|
Кто что думает по этому поводу? Выгодно ли делать anti-airbreak, основываясь на карте высот?
Re: Карта высот SA-MP -
CrunkBankS - 14.01.2010
Ну для карт высот есть плагин
http://forum.sa-mp.com/index.php?topic=145196.0 жрет только много
Re: Карта высот SA-MP -
MX_Master - 14.01.2010
Kye замутил сам такой плагин. Как я понял, там просто у него есть список Z координат с шагом в 1 метр в XY стороны. В ОЗУ эта база ~ 70 Мб занимает. Попробуйте грубо подсчитать примерно 6000 кв.м. * 6000 кв.м. = 36000000 точек, допустим для каждой нужно по 2 байта. 36000000 *2 = 72000000 ~ 70 Мб. Но это я говорю, потому что не знаю, плагин не юзал, не смотрел его работу и коды..
-- немного позже --
Повозился я с ботами, от них толку нет в составлении каких-то карт, они даж с высоты не падают сами
Вощем, чтобы с помощью мультика составить любую карту координат поверхности, нужно каждую XY точку тестировать самим игроком. Только вручную бегать не надо. Нужен скриптик, который будет ставить игрока в нужную XY точку на большой высоте и потом с помощью SetPlayerVelocity посильней бить игрока о поверхность внизу. В колбэке смерти игрока, заморозить труп, взять Z от трупа, записывать куда хотите и запускать новую точку для падения игрока. XY шаг мона и побольше чем метр взять, все зависит от того какая точность нужна (: времени канеш уйдет немало
Если шаг 1 метр и макс размер карты 6км * 6км, то получится примерно 36 млн. точек Z, если хранить значение как Float, то получится 144 млн. байт (~140 Мб). Если хранить как целое число, потеряем точность до 1 метра (как у Kye), примерно 70 Мб получится, если брать 2 байтовые числа.
Возможны и более умные варианты, например объехать всю сушу вдоль берега, запоминая XY края суши. Потом каким-то способом просканировать только все XY точку на суше, т.к. на воде координата всего одна. Есь еще спорные моменты с тонелями, и с объектами, которые закрывают землю.
Можно полазить по data файлам игры и подчерпунть нужную инфу. Если Нужное найдется, можно сделать фс, который хранит все нужные данные и имеет public функции для обращения из других скриптов. К примеру, если фс для определния Z координат не нужен, его мона отключить.. и т.д. и т.п.
Re: Карта высот SA-MP -
MX_Master - 14.01.2010
есь небольшой, но весьма неточный способ определния координаты Z для какой-то XY точки - телепортировать игрока под землю, игра сама потом ставит игрока в точку земли. Правдо разнос бывает сильным.
Re: Карта высот SA-MP -
Riaz - 14.01.2010
Он возвращает его на ближайший путь пешеходов.
Re: Карта высот SA-MP -
MX_Master - 14.01.2010
Есть еще
SetPlayerPosFindZ, правда, просканировать карту ей можно только с помошью самого игрока, для ботов она не работает. Я подозреваю, что
SetPlayerPosFindZ, скорее всего, использует механизм игры и, видимо, поэтому
Kye решил создать карту высот заново и по-своему.
Re: Карта высот SA-MP -
Riaz - 14.01.2010
Мне ещё кажется что
SetPlayerPosFindZ учитывает интерьеры (если там сделаешь Z 9999 и попадётся интерьер, то установит позицию интерьера.
Re: Карта высот SA-MP -
MX_Master - 14.01.2010
Я проверил эту функцию полностью - она работает везде, и в интерьерах. Она помещает на любой уровень пола, даже в одно точке XY, смотря какое Z указать. К примеру, если стоять на мосту и Z указать чуть меньше текущего Z игрока, то игрока к примеру в воду поместят, или на пол, который ниже уровня моста.
Re: Карта высот SA-MP -
De[M]oN - 14.01.2010
Такая фигня этот его плагин, лучше бы использовал геометрию SA, и нормально бы определял Z координату наивысшей точки для любой пары X,Y, с учётом динамически созданных объектов и интерьеров. Мы с ним когда то уже обсуждали эту тему и он привёл причину, по которой он не может этого сделать, собственно проблема в том, что карта подгружается и просчитывается только вблизи игрока, но что мешает вызвать просчёт в других координатах он не сказал
Re: Карта высот SA-MP -
[JIeXa] - 14.01.2010
он ещё выложил карту с цветами(ярко зелёный - самая высокая точка)...
что если открывать эту картинку и по цветам на картинке определять высоту?
Re: Карта высот SA-MP -
De[M]oN - 14.01.2010
Quote:
|
Originally Posted by [JIeXa
]
он ещё выложил карту с цветами(ярко зелёный - самая высокая точка)...
что если открывать эту картинку и по цветам на картинке определять высоту?
|
А нах? Если есть плагин, который позволяет определить Z для любых целых X,Y. С таким качеством, с которым он выложил эту картинку, она подойдёт только для аннонса новости

Слишком маленькое разрешение, шоб по ней более менее точно определять.
Тем более есть режим низкого потребления памяти для этого плагина, но тогда с меньшей точностью будут определяться координаты.
Re: Карта высот SA-MP -
MX_Master - 14.01.2010
зачем тебе цвета на картинке, если бинарник со значениями рядом
Quote:
|
Originally Posted by DarkByte
Такая фигня этот его плагин, лучше бы использовал геометрию SA, и нормально бы определял Z координату наивысшей точки для любой пары X,Y, с учётом динамически созданных объектов и интерьеров. Мы с ним когда то уже обсуждали эту тему и он привёл причину, по которой он не может этого сделать, собственно проблема в том, что карта подгружается и просчитывается только вблизи игрока, но что мешает вызвать просчёт в других координатах он не сказал 
|
Мне стало интересно про этот механизм игровой. Спору нет, что Kye предложил рабочее решение. Но какими средствами это выполнено! (: нужно узнать что-то про механизм, или чтобы сделать легковесную альтернативу, придется использовать чтение с файла, но это тоже не совсем ОНО.
Re: Карта высот SA-MP -
De[M]oN - 14.01.2010
Quote:
|
Originally Posted by MX_Master
Мне стало интересно про этот механизм игровой. Спору нет, что Kye предложил рабочее решение. Но какими средствами это выполнено! (: нужно узнать что-то про механизм, или чтобы сделать легковесную альтернативу, придется использовать чтение с файла, но это тоже не совсем ОНО.
|
Ну вообще, тебе как минимум нужно знать устройство файлов ipl ide и col, но я бы не сказал что парсинг всех нужных файлов будет лучшим решением, чем предложил Kye. лучше было бы построить один полигон всей поверхности SA, в памяти он будет занимать гораздо меньше, чем в случае с Kyeвой картой, где 36млн точек.
Re: Карта высот SA-MP -
MX_Master - 14.01.2010
Опять же, смотря какая точность нужна, т.е. в некоторых прямых местах будет меньше вершинок, но где-то в городах их будет немало. Все упирается в точность. Плюс еще такой момент, в каких-то местах есть несколько уровней поверхности - мосты, балконы, казырьки, тоннели, бункеры и все подземные и надземные сооружения в 0 интерьере. Про другие интерьеры пока умолчим.
Думаю, формат IPLок не так сложен, раз под СА создают редакторы карт. Надо глянуть и найти логику. Человеки же придумали (:
Re: Карта высот SA-MP -
[JIeXa] - 15.01.2010
ну если бы kye предоставил картинку разрешением 1900x1600, то думаю это заняло бы куда меньше памяти чем хэш...
Re: Карта высот SA-MP -
De[M]oN - 15.01.2010
Quote:
|
Originally Posted by MX_Master
Опять же, смотря какая точность нужна, т.е. в некоторых прямых местах будет меньше вершинок, но где-то в городах их будет немало. Все упирается в точность. Плюс еще такой момент, в каких-то местах есть несколько уровней поверхности - мосты, балконы, казырьки, тоннели, бункеры и все подземные и надземные сооружения в 0 интерьере. Про другие интерьеры пока умолчим.
Думаю, формат IPLок не так сложен, раз под СА создают редакторы карт. Надо глянуть и найти логику. Человеки же придумали (:
|
Полигон только из наивысших точек, в GTA очень много прямых линий
Вроде бы в вики гта моддинга имеется описание формата этих файлов, формат очень простой и даже интуитивно понятен
Quote:
|
Originally Posted by [JIeXa
]
ну если бы kye предоставил картинку разрешением 1900x1600, то думаю это заняло бы куда меньше памяти чем хэш...
|
Предложил там ещё одну идею ему, она уже получше чем полигон, да и вообще она довольно проста как в реализации, так и в использовании, при этом плагин будет кушать минимум памяти
Re: Карта высот SA-MP -
MX_Master - 15.01.2010
Чтение с файла это наверно самый первый вариант, который пришел в голову Kye. Но по своим соображениям, он сделал иначе.
Re: Карта высот SA-MP -
De[M]oN - 15.01.2010
Quote:
|
Originally Posted by [JIeXa
]
ну если бы kye предоставил картинку разрешением 1900x1600, то думаю это заняло бы куда меньше памяти чем хэш...
|
Для того, чтобы нормально определять координату Z с точностью до целых X,Y, как это сделано сейчас, потребуется картинка не меньше 6000х6000px, которая в памяти будет занимать даже больше, а весить будет в зависимости от сжатия (без сжатия в 4 раза больше от текущего размера).
Quote:
|
Originally Posted by MX_Master
Чтение с файла это наверно самый первый вариант, который пришел в голову Kye. Но по своим соображениям, он сделал иначе.
|
Врядли он его вообще рассматривал, считая что это медленный вариант, но не стоит этот метод недооценивать, ведь mysql же не тормозит и работает с гигантскими объёмами данных очень быстро, а принцип тот же и памяти не кушает много, все данные хранятся в файлах, в памяти только данные, которые необходимы для текущей операции выборки. Вообще, жёсткий диск не в состоянии физически прочитать 1 байт, он читает кластерами, это уже потом ОСь вырезает нужный байт из набора (1024 обычно) и отдаёт программе, но кроме этого, у жёсткого диска имеется ещё и внутренний кеш, который активно используется. Например если система запросила прочитать указанный клайстер, то жёсткий диск может, как бэ предугадывая действия программы, прочитать и отложить себе в кеш несколько следующих клайстеров и когда программа обратится за следующей порцией данных, они уже будут считанные не с "блина" жёсткого диска, а из его кеша. Плюс сама ОСь выделяет часть оперативной памяти под кеширование файлов часто читаемых с диска
В общем я к чему, применимо к данной задаче, чтение из файла будет так же быстро, как и чтение из памяти

Яб это написал в англоязычной теме, но лень переводить, да и следующий экзамен не по английскому, а по теории вероятностей D:
Re: Карта высот SA-MP -
De[M]oN - 15.01.2010
В общем сделал версию NOCACHE, которая не хавает оперативу и работает так же быстро

Скачать сорцы и измёнённые файлы можно по ссылке
MapAndreas_v1_0_beta_NOCACHE.ZIP
Обновил файлы: инклуд для павно, тестовый скрипт, скомпиленные плагины для винды и никсов.
В архиве нету самого файла карты (SAfull.hmap), его можно взять из
оригинально архива (28.2мб).
Re: Карта высот SA-MP -
^Woozie^ - 18.01.2010
Никто не напишет скрипт который сохранит все эти точки в массив координат? Хочу посмотреть на реакцию моего хостера после запуска этого режима. Скрипт вроде бы не сложный, но я трудно себе представляю как это можно грамотно реализовать.
Кстати я тут подумал.. ведь можно вместо плагина который жрёт 70 мегабайт.. создать бота. Помещать бота в определённый участок и находить для него координату Z. Прокатит, не?