![]() |
Показать все 22 сообщений этой темы на одной странице |
HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Half-Life SDK (https://hlfx.ru/forum/forumdisplay.php?forumid=8)
-- Получение информации о энтитях на стороне клиента (https://hlfx.ru/forum/showthread.php?threadid=5420)
Получение информации о энтитях на стороне клиента
Пробую значица я получить такие элементарные вещи как origin и velocity в структурке cl_entity_t, а она оказываться чуть ли не полностью забита нулями. То есть там нет даже той информации о энтитях, которой клиент реально обладает. Где ж её тогда взять?
Код для этих всех дел такой вот:
для игрока оригин предиктится и не пишется в cl_entity_t. Велосити - аналогично. Для обычных энтить его можно в дельту прописать, чтобы он передавался, но обычно это не требуется. Там поля зарезервированы, но в delta.lst не указаны, вот там и нули.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
В StudioSetupTransform
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша ох, кажется я это делал в Hud_Redraw. А если в Hud_AddEntity? Вообще, в какие моменты инфа об энтитях на клиенте может быть недоступна?
Я в Hud_Redraw выцеплял монстриков, чтобы рисовать их в виде красных прицелов на экране упровляемой рокеты редемира и никаких проблем не возникало.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша ну это ты монстриков. А я-то брашевые энтити. func_rot_button, например. Ориджин-то у них на месте. А вот англсы пустые. Хотя в pm_shared всё с англсами прекрасно.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
curstate.origin
curstate.angles
там тоже нули?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
SNMetamorph ты или не ту энтить проверяешь или не там смотришь.
А моветип её чему равен, для начала? Как ты вообще берёшь энтити?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
А, ну так неудивительно что оно тебе нули возвращает.
cl_entity_t *entity = GET_ENTITY(gEngfuncs.pEventAPI->EV_IndexFromTrace( &traceData )); |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Яж говорю, надо всем несолидным энтитям на сервере задать ббокс.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Вообще как бы визэнтитей не так уж и много и можно просто линейным поиском перебрать все, и нужная скорее всего найдётся. А они еще и в памяти все друг за другом располагаются, круто.
Добавлено 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. Находим ббокс для каждой энтити: для студиомоделей у меня примерно такой вот код
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 | } |
__________________
SNMetamorph's Personal Blog
Xash3D Modding Discord
Временная зона GMT. Текущее время 19:33. | Показать все 22 сообщений этой темы на одной странице |
На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024