Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
  • Нужна помощь?

    Создайте тему в соответствующем разделе
    Не нужно писать всё в чат!
  • Продаёте или покупаете?

    Пользуйтесь услугами гаранта
    Мы сделаем вашу сделку безопасной
  • Не хотите БАН?

    Пожалуйста, ознакомьтесь с нашими правилами
    Не нарушайте порядок
  • Загляните на рынок

    Там вы можете продать или купить
    Всё что касается игровых серверов
  • 0
BorizzK

Бааааги... SelectSpectator

Вопрос

Гнусные баги, мерзкие и неприятные...

 

По идее оно должно работать так

Указав identity (клиента), создаем обьект камеры для клиента по указанным координатам, камера создается, клиент отвязывается от обьекта перса и управляет камерой. В позиции камеры клиенту подгружается окружение ...

 

В реале дело обстоит иначе

1 обьект камеры создается и управление им передается клиенту

2 камера создается только в положении обьекта игрока, на координаты в параметрах ей насрать

3 управление обьектом игрока не отвязывается даж по  SelectPlayer(identity,NULL);

4 Окружение в положении камеры клиенту не подгружается, действует только то, что в положении обьекта игрока. Те отлетев камерой подальше, за пределы видимости, мы не увидим ни других игроков ни другие динамические обьекты, только обьекты жестко привязанные к карте...

 

Попробовал это обойти с помощью костыля хотя бы для наблюдения за отдельным игроком....

 

Поскольку setposition для синхра с клиентом требует время, пришлось делать отложенное создание камеры после телепорта и отложенное сокрытие обьекта игрока

 

Созраняем исходную позицию в профиль сервера

Телепортим будущего спектатора на 5м под обькт наблюдения, затем через 2 сек создаем камеру в этом положении(она в любом случае сощдается над поверхностью земли), затем вызываем функцию сокрытия с задержкой 1 сек параметром включения сокрытия

 

В ней мы отключаем обьекту игрока гравитацию и тэпэшим его на небеса метров на 700

 

И запускаем функцию контроля которая выполняется раз в 2 сек где мониторим положение обьекта за которым наблюдаем и двигаем обьект игрока на небе по x  и z за ним, сохраняя высоту...

 

Если наблюдаемый игрок выходит и его identity или player NULL просто удерживаем обьект на небе пока не будет команды на отключение режима или спектатор не отключится от сервера

 

Как только отключили режим или вышли

Убиваем мониторинг, тп обьект спектатора на исходную, включаем гравитацию, если спектатор не вышел, те его identity != NULL отключаем спектатора с помощью SelectPlayer(identity, pkayer); и стираем исходную в профиле

Если же вышел исходную в профиле оставляем, зачем, обьясню чуть позже

 

Однако

 

Есть принеприятнейший баг или фича?

 

Если наблюдаемый обьект выйдет с сервера, отключится, погибнет и камера будет рядом с ним, identity наблюдателя ОБНУЛЯЕТСЯ!!!! КАК?????

 

Выкрутился так

 

If (!identity) if (player.GetIdentity()) identity = player.GetIdentity();

 

После чего все норм и отключение камеры проходит нормально

 

Кроме того, во время обнуления identity

может включиться гравитация и обьект шлепнется на землю, а может и просто включиться сама по себе....

 

Вот КАК???

 

В богемии программеры индусы???????

 

 

 

 

 

Изменено пользователем BorizzK (история изменений)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Рекомендованные сообщения

Нет ответов на вопрос

Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.

Гость
Ответить на вопрос...

×   Вставлено в виде отформатированного текста.   Восстановить форматирование

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Загрузка...

×
×
  • Создать...