Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
  • Нужна помощь?

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

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

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

    Там вы можете купить
    Всё что касается игровых серверов
  • 0
Sign in to follow this  
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

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

 

Вот КАК???

 

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

 

 

 

 

 

Edited by BorizzK (see edit history)

Share this post


Link to post
Share on other sites

0 answers to this question

Recommended Posts

There have been no answers to this question yet

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
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site, you automaticly agree to our Guidelines and Privacy Policy.
We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.