HLFX.Ru Forum Страницы (264): « Первая ... « 163 164 165 166 [167] 168 169 170 171 » ... Последняя »
Показать все 3960 сообщений этой темы на одной странице

HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Half-Life SDK (https://hlfx.ru/forum/forumdisplay.php?forumid=8)
-- Нубские вопросы от <censored> и других нубов (https://hlfx.ru/forum/showthread.php?threadid=4535)


Отправлено Ku2zoff 11-10-2020 в 00:12:

Цитата:
FreeSlave писал:
Проблем с PlayerUse.
******
В чём загвоздка?

Если не брезгуешь залезть в сорцы серверной дллки, сделай дайрект юз. То есть по трейсу. На какую энтитю смотришь, та и будет юзаться. Дядя Миша тебе правильно подсказывает, игра перебирает ближайшие энтити в радиусе по порядку, как они сохранены в том самом лумпе карты. Изменишь порядок в карте - изменится порядок обращения при юзаньи.

Добавлено 11-10-2020 в 07:12:

Цитата:
Vadiman писал:
Да, временно закоментил существующую, иначе игра вылетала.

А как ты добился вылетов? В итоге у тебя iuser4 никуда не делся, просто теперь называется по-другому: iJumpTime. Так делать крайне не рекомендуется.
Кстати, все эти иузеры, фузеры, вузеры и еузеры надо вручную сохранять. То есть заводить соответствующую переменную для энтити, и оперировать ей в сейв/ресторе.


Отправлено FreeSlave 11-10-2020 в 09:18:

Ku2zoff, Дядя Миша там проблема не в порядке энтить. Если рядом других энтить нет, то и не юзается та, что прямо перед игроком, когда тот стоит вплотную. Это просто какой-то краевой случай, который приводит к тому, что PlayerUse считает, что объект не перед игроком. Я сделал выставление размера в SetSize в зависимости от Yaw-угла и оно заработало как надо.

__________________
I'm on github
I'm on opendesktop.org


Отправлено Дядя Миша 11-10-2020 в 11:24:

Цитата:
FreeSlave писал:
там проблема не в порядке энтить

PlayerUse перебирает энтити по сфере перед игроком. А попадание в сферу тестирует с начала списка энтить.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено FreeSlave 12-10-2020 в 09:23:

Цитата:
Дядя Миша писал:
PlayerUse перебирает энтити по сфере перед игроком. А попадание в сферу тестирует с начала списка энтить.


Есть же ещё проверка на нахождение перед игроком (и выбор объекта с наибольшим dotproduct). Именно её объект не проходит, если подойти вплотную к клипбрашу (в UTIL_ClampVectorToBox получаем нулевой вектор).
То, что Use попадает на соседний объект - следствие непрохода этой проверки и геометрического расположения объектов на карте, а не их порядка в списке энтить. Прикрепляю карту, где объекты расположены в отдалении друг от друга на противоположных стенах, чтобы не было путаницы. Два из них при подходе вплотную неюзабельны, как я и описывал.

__________________
I'm on github
I'm on opendesktop.org


Отправлено Chyvachok 12-10-2020 в 09:35:

Мне интересно можно ли в халве вместо аттачементов использовать положение кости? К примеру для острела конечностей спавнить на месте кости гибс и эффект крови.


Отправлено Дядя Миша 12-10-2020 в 11:54:

Chyvachok можно, но это неудобно. Как ты найдешь нужную кость? По имени? По номеру?

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Aynekko 12-10-2020 в 11:57:

Народ, подскажите. Как изменить размер трейсеров пуль, уж слишком они огромные. Все, что смог нарыть, это вот:
#define TE_TRACER 6 // tracer effect from point to point
и это:

MESSAGE_BEGIN( MSG_PAS, SVC_TEMPENTITY, vecTracerSrc );
WRITE_BYTE( TE_TRACER );
WRITE_COORD( vecTracerSrc.x );
WRITE_COORD( vecTracerSrc.y );
WRITE_COORD( vecTracerSrc.z );
WRITE_COORD( tr.vecEndPos.x );
WRITE_COORD( tr.vecEndPos.y );
WRITE_COORD( tr.vecEndPos.z );
MESSAGE_END();


Это же вроде спрайт какой-то или что? Все облазил, не могу найти.

__________________
Мой мод на Xash


Отправлено JPEG 12-10-2020 в 14:00:

Цитата:
Aynekko писал:
Народ, подскажите. Как изменить размер трейсеров пуль, уж слишком они огромные. Все, что смог нарыть, это вот:
#define TE_TRACER 6 // tracer effect from point to point
и это:

MESSAGE_BEGIN( MSG_PAS, SVC_TEMPENTITY, vecTracerSrc );
WRITE_BYTE( TE_TRACER );
WRITE_COORD( vecTracerSrc.x );
WRITE_COORD( vecTracerSrc.y );
WRITE_COORD( vecTracerSrc.z );
WRITE_COORD( tr.vecEndPos.x );
WRITE_COORD( tr.vecEndPos.y );
WRITE_COORD( tr.vecEndPos.z );
MESSAGE_END();


Это же вроде спрайт какой-то или что? Все облазил, не могу найти.

можно консольной переменной tracerlength 4 // Чем значение больше, тем уже трейсер

__________________
МОЙ НОВЫЙ ПАБЛИК ПО ХЛ))


Отправлено Aynekko 12-10-2020 в 14:08:

JPEG, большое спасибо.

__________________
Мой мод на Xash


Отправлено Ku2zoff 12-10-2020 в 15:03:

Как можно гарантированно определить на клиенте, что энтитя сдохла? curstate.health всегда 0, хотя в дельту строчка добавлена и в AddToFullPack строчка передачи подправлена. curstate.solid не катит - не меняется, даже когда на энтитю применено UTIL_Remove. GetEntityByIndex всё равно продолжает возвращать несуществующую энтитю, видимо, клиентский массив cl_entities не обновляется при удалении энтити с карты.
Или это только с брашами такая засада?

Добавлено 12-10-2020 в 22:03:

Цитата:
Aynekko писал:
Как изменить размер трейсеров пуль, уж слишком они огромные.

C++ Source Code:
1
TE_USERTRACER:
2
WRITE_COORD - pos1.x
3
WRITE_COORD - pos1.y
4
WRITE_COORD - pos1.z
5
WRITE_COORD - pos2.x
6
WRITE_COORD - pos2.y
7
WRITE_COORD - pos2.z
8
WRITE_BYTE - life
9
WRITE_BYTE - color
10
WRITE_BYTE - scale

Scale должен отвечать за толщину. Life - за длину, чем больше, тем длиннее трейсер и "медленнее" он летит. Color - тут я цифры не помню, тебе придётся подбирать наугад. Life и Scale желательно умножить перед отправкой на 10, т.к. при приёме на клиенте они умножаются на 0.1.


Отправлено Дядя Миша 12-10-2020 в 16:36:

C++ Source Code:
1
if( !alive )
2
{
3
  CL_KillDeadBeams( ent ); // release dead beams
4
#if 0
5
  // this is for reference
6
  if( state->number == -1 )
7
    Con_DPrintf( "Entity %i was removed from server\n", newnum );
8
  else Con_Dprintf( "Entity %i was removed from delta-message\n", newnum );
9
#endif
10
  return;
11
}

В ксаше curstate.number будет равен -1.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Ku2zoff 12-10-2020 в 16:44:

Дядя Миша понятно, значит никак. Только каким-нибудь хаком.


Отправлено Дядя Миша 12-10-2020 в 16:57:

Можно от локального игрока взять messagenum и сравнивать с энтитью, которую хочешь проверить. Правда оно не совпадёт, если энтить просто выйдет из PVS. В халфе непросто понять, что энтить реально удалена с сервера.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Ku2zoff 12-10-2020 в 17:23:

Поясню, что хочу сделать. Это до сих пор те самые спрайтовые декали из инвазиона. Прекрасно ходят через чейнджлевел, сохраняются, загружаются, двигаются вместе с энтитями. Есть охранный механизм: из ориджина декали делается трейс внутрь браша на полъюнита. Если там пустота - декаль удаляется. То есть разбили брейкаблю - её декали исчезли. Проблема в том, что когда любая энтитя выпадает из PVS, трейс возвращает пустоту, и декали исчезают. Я думаю, это происходит потому, что энтитя пропадает из массива физэнтить. Убрать охранный механизм - нехорошее решение, декали будут висеть в воздухе после исчезновения энтити. Пока что вижу одно решение - не ставить декали на брейкабли и ломаемые пушабли. Остальные энтити вроде дверей, ротатингов, кнопок и прочего не исчезают с карты. Правда, не тестировал ещё с глобальными энтитями, что ходят с карты на карту, непонятно что будет там. Хотелось бы найти способ заставить это дело работать нормально.

Добавлено 13-10-2020 в 00:17:

Дядя Миша а если есть доступ к model_t конкретного браша? Там какая-нибудь информация изменяется, если энтитя исчезает и больше не рендерится?

Добавлено 13-10-2020 в 00:23:

Подумал и придумал. Если совсем ничего не получится, придётся просто запретить определённым энтитям отсечение по PVS. Костыль, но ничего не поделаешь. Да и сколько может быть брейкаблей и пушаблей на карте? Даже если штук 50, это не должно сильно просадить фпс.


Отправлено Дядя Миша 12-10-2020 в 17:36:

Да какие трассы, какие полюнита, зачем такие сложности

Вот тебе очень простое соображение - если не видно бмодели, то значит не видно и декали. Нет ни одной ситуации, когда бы декали было видно, а бмодель - нет. Значит, мы просто напросто проверяем ent->visframe на валидность перед отрисовкой декали. И если энтить не видна - то и декаль не рисуем. И таким образом одним простым условием разрешаем вообще все проблемы. А уж по какой причине она исчезла - вышла из PVS или удалена с карты, нам неважно. Ну может быть еще имеет смысл добавить в декаль указатель на модель, на случай если энтить будет перезаюзана - брекабля-то уже не вернётся на карту назад, значит мы можем на это опираться.

Цитата:
Ku2zoff писал:
придётся просто запретить определённым энтитям отсечение по PVS

вот посмотри в каком ты думаешь направлении - всё изгадить, поломать но добиться своей цели. А ты думай наоборот - как бы одной строчкой решить вообще все проблемы просто и изящно. Неужели тебя не ломает делать какие-то там трейсы и прочую чертовщину? Расскажу историю забавную.
Совет Кодыр, когда выпустил XashXT CB 0.7 добавил же туда травку впервые, придумал концепцию. А я захотел её потестировать и создал grass_test (тогда еще первую версию). Ну и поставил туда этой травы от душы на все деньги. Корочи она у меня спавнилась где-то минут 10.
Оказалось, что он для каждого кустика во первых делал трейс вниз, чтобы найти точку пересечения с поверхностью, а во вторых выделял внутри структуры травы маллоком отдельные области. Движковый маллок из-за дефрагментации не особенно шустрый. Ради интереса можно сравнить его реализацию травы с моей и найти принципиальные отличия.
Ну к примеру зачем делать трассу, если нам надо просто найти псевдослучайную точку на треугольнике?
А это простейшее действие, чисто аналитическое. Раз в 500 быстрее трассы. Ну память ладно, с ней народ боится работать.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Временная зона GMT. Текущее время 08:14. Страницы (264): « Первая ... « 163 164 165 166 [167] 168 169 170 171 » ... Последняя »
Показать все 3960 сообщений этой темы на одной странице

На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024