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

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

    Там вы можете купить
    всё что касается игровых серверов
  • Не хотите бан?

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

    Пользуйтесь услугами гаранта
    Мы сделаем вашу сделку безопасной
  • 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 (история изменений)

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


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

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

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

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

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

Важная информация

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