HLFX.Ru Forum
профиль •  правила •  регистрация •  календарь •  народ •  FAQ •  поиск •  новое •  сутки •  главная •  выход  
HLFX.Ru Forum HLFX.Ru Forum > Теория и практика > Half-Life SDK > Получение информации о энтитях на стороне клиента
Страницы (2): « 1 [2]   Предыдущая тема   Следующая тема
Автор
Тема Новая тема    Ответить
SNMetamorph
Житель форума

Дата регистрации: Jun 2018
Проживает: Ижевск
Сообщений: 560

Рейтинг



Цитата:
Дядя Миша писал:
Как ты вообще берёшь энтити?

Ну вот тут код можно поглядеть.
https://github.com/SNMetamorph/gold...rawing.cpp#L156

Сообщить модератору | | IP: Записан
Сообщение: 187944

Старое сообщение 19-12-2019 11:51
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32188
Нанёс повреждений: 392 ед.

Рейтинг



А, ну так неудивительно что оно тебе нули возвращает.

C++ Source Code:
cl_entity_t *entity = GET_ENTITY(gEngfuncs.pEventAPI->EV_IndexFromTrace( &traceData ));

вот как надо. У тебя же pmove возвращает индекс не клиентской энтити, а собственный локальный индекс в pmove->physents, который еще надо сконвертировать в индекс клиентской.

Добавлено 19-12-2019 в 15:29:

Единственное, для чего эти индексы всегда совпадают - это для мира и для локального игрока.

__________________
My Projects: download page

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

Цитата:

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

Сообщить модератору | | IP: Записан
Сообщение: 187951

Старое сообщение 19-12-2019 12:29
-
SNMetamorph
Житель форума

Дата регистрации: Jun 2018
Проживает: Ижевск
Сообщений: 560

Рейтинг



Цитата:
Дядя Миша писал:
вот как надо. У тебя же pmove возвращает индекс не клиентской энтити, а собственный локальный индекс в pmove->physents, который еще надо сконвертировать в индекс клиентской.

Воооооо, с этим благодарствую, теперь всё замечательно.

Добавлено 19-12-2019 в 21:44:

А можно как-то сделать, чтобы трейс срабатывал на энтити без коллизии, например как ammo_357 какое-нибудь?

Сообщить модератору | | IP: Записан
Сообщение: 187956

Старое сообщение 19-12-2019 12:44
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32188
Нанёс повреждений: 392 ед.

Рейтинг



Цитата:
SNMetamorph писал:
А можно как-то сделать, чтобы трейс срабатывал на энтити без коллизии, например как ammo_357 какое-нибудь?

да лихко. Трассируй не physents а visents. Они для тово и нужны. Правда тут засада есть - в халфе кажется нет экспорта для конвертации визэнтити в клиентскую. В ксаше-то я понятное дело это вывел.

Добавлено 19-12-2019 в 16:07:

А вообще блин, посмотрел я так, прикинул. Нет, наверное только под ксашем это будет работать. У несолидных же энтить, надо как минимум ббокс задать и на клиент его отослать. Ксаш эту ситуацию сам умеет разруливать, а халфа нет.

__________________
My Projects: download page

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

Цитата:

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

Сообщить модератору | | IP: Записан
Сообщение: 187957

Старое сообщение 19-12-2019 13:07
-
SNMetamorph
Житель форума

Дата регистрации: Jun 2018
Проживает: Ижевск
Сообщений: 560

Рейтинг



Цитата:
Дядя Миша писал:
да лихко. Трассируй не physents а visents. Они для тово и нужны. Правда тут засада есть - в халфе кажется нет экспорта для конвертации визэнтити в клиентскую. В ксаше-то я понятное дело это вывел.

Добавлено 19-12-2019 в 16:07:

А вообще блин, посмотрел я так, прикинул. Нет, наверное только под ксашем это будет работать. У несолидных же энтить, надо как минимум ббокс задать и на клиент его отослать. Ксаш эту ситуацию сам умеет разруливать, а халфа нет.

Может быть прокатит какой-нибудь костыль по типу FindEntityInSphere в месте столкновения трейса с землей?

Сообщить модератору | | IP: Записан
Сообщение: 187961

Старое сообщение 19-12-2019 13:11
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32188
Нанёс повреждений: 392 ед.

Рейтинг



Яж говорю, надо всем несолидным энтитям на сервере задать ббокс.

__________________
My Projects: download page

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

Цитата:

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

Сообщить модератору | | IP: Записан
Сообщение: 187966

Старое сообщение 19-12-2019 13:36
-
SNMetamorph
Житель форума

Дата регистрации: Jun 2018
Проживает: Ижевск
Сообщений: 560

Рейтинг



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

Добавлено 02-04-2020 в 10:35:

А как работает PM_TraceModel()?

Добавлено 02-04-2020 в 11:00:

Теоретически же вроде как со стороны клиента можно залезть в заголовок студиомодели и получить векторы AABB таким образом: http://articles.thewavelength.net/214/
Или нет?

Добавлено 02-04-2020 в 12:41:

Таки да. Метод, упомянутый выше, скорее всего работает.
Значит такой вот алгоритм трассировки несолидных энтить на стороне клиента.

1. Перебираем каждую визэнтить в массиве pmove->visents
2. Находим ббокс для каждой энтити: для студиомоделей у меня примерно такой вот код

C++ Source Code:
1
static studiohdr_t *GetStudioModelHeader(model_t *model)
2
{
3
  if (model && model->type == mod_studio)
4
    return (studiohdr_t*)model->cache.data;
5
  return nullptr;
6
}
7
 
8
physent_t &visEnt = g_pPlayerMove->visents[i];
9
cl_entity_t *traceEntity = g_pClientEngFuncs->GetEntityByIndex(visEnt.info);
10
studiohdr_t *studioHeader = GetStudioModelHeader(traceEntity->model);
11
 
12
if (studioHeader)
13
{
14
  mstudioseqdesc_t *pseqdesc;
15
  pseqdesc = (mstudioseqdesc_t *)((byte *)studioHeader + studioHeader->seqindex);
16
  vec3_t bboxMin = pseqdesc[traceEntity->curstate.sequence].bbmin;
17
  vec3_t bboxMax = pseqdesc[traceEntity->curstate.sequence].bbmax;
18
}

3. Проверяем, пересекается ли линия трейса с этим ббоксом
4. Если пересекается, то берём индекс этой энтити через visent->info и дальше делаем что душе угодно.

__________________
PrimeXT
GoldSrc Monitor
SMD Splitter
mdl-flip (gFlip analog)
Xash3D Modding Discord

Сообщить модератору | | IP: Записан
Сообщение: 191735

Старое сообщение 02-04-2020 03:41
- За что?
Тема: (Опционально)
Ваш ответ:



Переводчик транслита


[проверить длину сообщения]
Опции: Автоматическое формирование ссылок: автоматически добавлять [url] и [/url] вокруг интернет адресов.
Уведомление по E-Mail: отправить вам уведомление, если кто-то ответил в тему (только для зарегистрированных пользователей).
Отключить смайлики в сообщении: не преобразовывать текстовые смайлики в картинки.
Показать подпись: добавить вашу подпись в конец сообщения (только зарегистрированные пользователи могут иметь подписи).

Временная зона GMT. Текущее время 12:54. Новая тема    Ответить
Страницы (2): « 1 [2]   Предыдущая тема   Следующая тема
HLFX.Ru Forum HLFX.Ru Forum > Теория и практика > Half-Life SDK > Получение информации о энтитях на стороне клиента
Версия для печати | Отправить тему по E-Mail | Подписаться на эту тему

Быстрый переход:
Оцените эту тему:

Правила Форума:
Вы not можете создавать новые темы
Вы not можете отвечать в темы
Вы not можете прикреплять вложения
Вы not можете редактировать ваши сообщения
HTML Код ВЫКЛ
vB Код ВКЛ
Смайлики ВКЛ
[IMG] Код ВКЛ
 

< Обратная связь - HLFX.ru >

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