Jump to content

Получение позиции Z с помощью getGroundPosition


Recommended Posts

Всем доброго дня и ночи! Хочу узнать, можно ли как-то получить позицию Z, если x y z заданы рандомно? Мучался минут 15 с событием getGroundPosition, а оно мне всегда выдавало Z = 0, еще раз внимательно прочитав об этом событии в вики, а именно вторую строку, я понял что игрок (как я понял - любой) должен быть недалеко от позиции указанной рандомно и тогда я смогу получить позицию Z. Но мне такой вариант не подходит, мне нужно чтобы оно получало Z вне зависимости от того где находятся игроки, есть какие-то варианты? Буду искренне благодарен если найдется не сложный вариант.

Суть скрипта: получаем рандомные X, Y, затем Z (при помощи getGroundPosition) и там выполняем к примеру создание маркера. И, хотелось бы, чтобы этот маркер был на земле.

Link to comment

Я бы сделал так:

Создаешь на рандомных координатах кулшейп.

createColCircle 

На клиенте создаешь обработчик для данного кулшейпа (onClientElementStreamIn) и создаешь маркер используя сначала

getGroundPosition 

после того как ты узнаешь координаты оси Z, то на земле создаешь маркер

createMarker 

и после того как уходишь из зоны стрима (onClientElementStreamOut), ты удаляешь объект маркера

destroyElement 

Если вариант с onClientElementStreamIn/onClientElementStreamOut тебя не устраивает, можешь сделать свою проверку по таймеру и дистанции игрока до колшейпа, чтобы создать маркер.

setTimer 
getDistanceBetweenPoints3D 

Link to comment
Я бы сделал так

Да, кажется твой первый вариант подойдет больше чем таймер. Получается Z можно дать позицию 0, а при приближении игрока сделать setElementPosition. Но это еще не точно, завтра буду голову ломать и смотреть подробнее. Стрим ведь используется в клиентской части, а это тоже немного не то что нужно, и тогда тут подходит вариант 2. Но еще один лишний таймер тоже не очень хорошо. Жаль что событие не дописано нормально, из-за этого код нужно увеличивать и делать ненужные действия :( спасибо за помощь, как что-то потестирую или еще придумаю - отпишусь сюда.

Вообще мне нужно создать одноразовый пикап на земле, я в шапке не то указал. Просто задавать точки вручную - скучно. А рандомная на всю карту - кажется как то оригинально. Хоть могут быть и свои проблемы с этим.

Link to comment
Я имел ввиду, что именно сам клиент будет создавать и позиционировать маркер (основываясь на серверном кулшейпе).

Он здесь может быть одно "но": когда игрок на воздушном транспорте или просто в воздухе на парашюте например.

Link to comment

Значит надо таймер вешать на проверку если игрок вошел в зону (на высоте больше >150-300) т.е с учетом максимального маппинга.

Link to comment
Значит надо таймер вешать на проверку если игрок вошел в зону (на высоте больше >150-300) т.е с учетом максимального маппинга.

Или просто сделать проверку на то ли игрок в воздушном транс. или летит ещё на парашюте.

Link to comment

Для ГТА СА есть карта высот. Правда, только для целых координат, но это мелочи.

Все это счастье помещается в файлике размером 72 000 000 байт.

Можно забрать отсюда: https://dl.dropboxusercontent.com/u/158 ... _full.hmap

Мы ее используем для создания в случайных координатах пакетов с наркотиками, которые игроки собирают в лесу =)

Link to comment

Простенькой луа функцией. К сожалению, не могу выложить реализацию, считайте, что связан соглашением о неразглашении =)

Формат данных очевиден. Там сетка из 6000 на 6000 высот, на каждое значение два байта.

Первое значение - высота в левом верхнем углу (-3000, -3000). Последнее, соответственно, напротив.

Плюс полученное значение нужно будет разделить на 100.

Link to comment
  • 2 weeks later...

Как самый примитивный и глупый вариант, но эффективный - телепортируйте игрока в позицию (х, у, 0), таймер на 0.1-0.5 секунды, юзайте getGroundPosition и после телепортируйте в нормальные (x, y, z).

Сработает по идее нормально, т.к. игрок уже 0.5 секунд будет находится возле нужной точки и ф-я вернет правильное значение.

Link to comment

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...