maksam07 Posted April 9, 2015 Share Posted April 9, 2015 Всем доброго дня и ночи! Хочу узнать, можно ли как-то получить позицию Z, если x y z заданы рандомно? Мучался минут 15 с событием getGroundPosition, а оно мне всегда выдавало Z = 0, еще раз внимательно прочитав об этом событии в вики, а именно вторую строку, я понял что игрок (как я понял - любой) должен быть недалеко от позиции указанной рандомно и тогда я смогу получить позицию Z. Но мне такой вариант не подходит, мне нужно чтобы оно получало Z вне зависимости от того где находятся игроки, есть какие-то варианты? Буду искренне благодарен если найдется не сложный вариант. Суть скрипта: получаем рандомные X, Y, затем Z (при помощи getGroundPosition) и там выполняем к примеру создание маркера. И, хотелось бы, чтобы этот маркер был на земле. Link to comment
Kenix Posted April 9, 2015 Share Posted April 9, 2015 Я бы сделал так: Создаешь на рандомных координатах кулшейп. createColCircle На клиенте создаешь обработчик для данного кулшейпа (onClientElementStreamIn) и создаешь маркер используя сначала getGroundPosition после того как ты узнаешь координаты оси Z, то на земле создаешь маркер createMarker и после того как уходишь из зоны стрима (onClientElementStreamOut), ты удаляешь объект маркера destroyElement Если вариант с onClientElementStreamIn/onClientElementStreamOut тебя не устраивает, можешь сделать свою проверку по таймеру и дистанции игрока до колшейпа, чтобы создать маркер. setTimer getDistanceBetweenPoints3D Link to comment
maksam07 Posted April 9, 2015 Author Share Posted April 9, 2015 Я бы сделал так Да, кажется твой первый вариант подойдет больше чем таймер. Получается Z можно дать позицию 0, а при приближении игрока сделать setElementPosition. Но это еще не точно, завтра буду голову ломать и смотреть подробнее. Стрим ведь используется в клиентской части, а это тоже немного не то что нужно, и тогда тут подходит вариант 2. Но еще один лишний таймер тоже не очень хорошо. Жаль что событие не дописано нормально, из-за этого код нужно увеличивать и делать ненужные действия спасибо за помощь, как что-то потестирую или еще придумаю - отпишусь сюда. Вообще мне нужно создать одноразовый пикап на земле, я в шапке не то указал. Просто задавать точки вручную - скучно. А рандомная на всю карту - кажется как то оригинально. Хоть могут быть и свои проблемы с этим. Link to comment
Kenix Posted April 10, 2015 Share Posted April 10, 2015 Я имел ввиду, что именно сам клиент будет создавать и позиционировать маркер (основываясь на серверном колшейпе). Link to comment
FranklinRoosevelt Posted April 10, 2015 Share Posted April 10, 2015 Я имел ввиду, что именно сам клиент будет создавать и позиционировать маркер (основываясь на серверном кулшейпе). Он здесь может быть одно "но": когда игрок на воздушном транспорте или просто в воздухе на парашюте например. Link to comment
Kenix Posted April 10, 2015 Share Posted April 10, 2015 Значит надо таймер вешать на проверку если игрок вошел в зону (на высоте больше >150-300) т.е с учетом максимального маппинга. Link to comment
FranklinRoosevelt Posted April 10, 2015 Share Posted April 10, 2015 Значит надо таймер вешать на проверку если игрок вошел в зону (на высоте больше >150-300) т.е с учетом максимального маппинга. Или просто сделать проверку на то ли игрок в воздушном транс. или летит ещё на парашюте. Link to comment
Hitori Posted April 11, 2015 Share Posted April 11, 2015 Для ГТА СА есть карта высот. Правда, только для целых координат, но это мелочи. Все это счастье помещается в файлике размером 72 000 000 байт. Можно забрать отсюда: https://dl.dropboxusercontent.com/u/158 ... _full.hmap Мы ее используем для создания в случайных координатах пакетов с наркотиками, которые игроки собирают в лесу =) Link to comment
Fabervox Posted April 14, 2015 Share Posted April 14, 2015 Hitori, а кроме самповского MapAndreas чем ещё формат читается или конвертируется? Link to comment
Hitori Posted April 14, 2015 Share Posted April 14, 2015 Простенькой луа функцией. К сожалению, не могу выложить реализацию, считайте, что связан соглашением о неразглашении =) Формат данных очевиден. Там сетка из 6000 на 6000 высот, на каждое значение два байта. Первое значение - высота в левом верхнем углу (-3000, -3000). Последнее, соответственно, напротив. Плюс полученное значение нужно будет разделить на 100. Link to comment
obuhhh Posted April 24, 2015 Share Posted April 24, 2015 Как самый примитивный и глупый вариант, но эффективный - телепортируйте игрока в позицию (х, у, 0), таймер на 0.1-0.5 секунды, юзайте getGroundPosition и после телепортируйте в нормальные (x, y, z). Сработает по идее нормально, т.к. игрок уже 0.5 секунд будет находится возле нужной точки и ф-я вернет правильное значение. Link to comment
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now