![]() |
Показать все 24 сообщений этой темы на одной странице |
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=4855)
Как с клиента узнать что другой игрок мёртв?
На данный момент в ксаше все трупы игроков твёрдые для клиента.
Нужно разобраться как отличить труп от живого игрока со стороны движка. Есть какие-то идеи?
mittorn на сервере в движке скорее всего такого нету. Труп - это вроде только на клиенте рендерится, а сервер про него ничего не знает.
gl_studio.c
1 | static int R_StudioDrawModel( int flags ) |
2 | { |
3 | alight_t lighting; |
4 | vec3_t dir; |
5 |
6 | if( RI.currententity->curstate.renderfx == kRenderFxDeadPlayer ) |
7 | ... |
ILZM сервер всё-таки знает от трупах. В дллках точно, в движке не знаю. CopyToBodyQue присваивает модель игрока специальной энтите bodycue, которая как раз и имеет свойство kRenderFxDeadPlayer. Я думаю, ничто не будет мешать завести проверку на этот рендермод и в серверной части движка.
Я пытался сделать трупы солидными, чтобы их можно было кусковать и расстреливать, но они имеют ббокс стоячего игрока (или копируют ббокс игрока, с которого скопированы). То есть, я думаю, пока игрок жив, его труп будет иметь такие же размеры для коллизии, как и сам игрок в текущий момент.
ILZM сервер health проверяет. И не линкует эдикт в таёрдый мир если он не живой А на клиенте health всегда 0.
Добавлено 06-09-2016 в 07:26:
Ku2zoff такая проверка не нужна. Он уже SOLID_NOT.
Твёрдый игрок до респавна.
Добавлено 06-09-2016 в 07:32:
http://mittorn.the-swank.pp.ua/xash...528c16dfaf6719a
mittorn я перепутал. На клиенте же надо. ХЗ, ХЗ. По рендермоду бесполезно проверять. Мёртвый игрок не имеет kRenderFxDeadPlayer. В момент респавна создаётся bodyque с этим рендермодом. Надо подумать, что у мёртвого игрока можно отследить на клиенте. pev->deadflag? pev->view_ofs? pev->solid?
Та ещё фигня. В каэске для определения труп/нетруп и показания уровня здоровья в режиме спектатора вообще отдельные мессаги заведены. В рамках мода можно обойтись или мессагами, или добавить строчки в дельту. А вот в движке, чтобы не изломать совместимость, придётся подумать.
Добавлено 06-09-2016 в 11:41:
Ku2zoff у меня пашет. Хотя тоже гостелекомом обмазываюсь. Попробуй google dns.
Вот как раз solid не меняется. deadflag что-то нету. health нулевой. По view вроде неправильно, однако можно. Чекну. Как временныф фикс пойдёт.
// Set dead player view_offset |
if ( pmove->dead ) |
{ |
pmove->view_ofs[2] = PM_DEAD_VIEWHEIGHT; |
} |
Ku2zoff
Там везде так.
svgame->pmove ==NULL.
Ну и мне нужны данные других игроков.
BodyQue - это не игрок. Это вообще обманка такая, чёб трупы показывать.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша тут вроде уже сказали про это.
А баг именно с игроками. Возможно сервер просто скрыввет что они мертвы.
Игрок мёртв однозначно, если у него MOVETYPE_NONE стоит.
1 | // once we're done animating our death and we're on the ground, we want to set movetype to None so our dead body won't do collisions and stuff anymore |
2 | // this prevents a bug where the dead body would go to a player's head if he walked over it while the dead player was clicking their button to respawn |
3 | if ( pev->movetype != MOVETYPE_NONE && FBitSet(pev->flags, FL_ONGROUND) ) |
4 | pev->movetype = MOVETYPE_NONE; |
if( state->movetype == MOVETYPE_NONE ) |
continue; // dead |
if( state->effects & EF_NODRAW ) |
continue; // skip invisible |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Да, это лишнее.
Проверю movetype - может он отправляется корректно.
Пока подозреваю, что какие-то нужные данные просто не попадают на клиент.
В XHL не прокатит т.к. у мёртвых игроков мувтайпы могут разными быть -- источник багов.
__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
~ X ~ бодикью появился до изобретения темпенитей. В hl 0.52 он уже есть.
Первоквака, Quake-C
1 | void() set_suicide_frame; |
2 |
3 | // called by ClientKill and DeadThink |
4 | void() respawn = |
5 | { |
6 | if (coop) |
7 | { |
8 | // make a copy of the dead body for appearances sake |
9 | CopyToBodyQue (self); |
10 | // get the spawn parms as they were at level start |
11 | setspawnparms (self); |
12 | // respawn |
13 | PutClientInServer (); |
14 | } |
15 | else if (deathmatch) |
16 | { |
17 | // make a copy of the dead body for appearances sake |
18 | CopyToBodyQue (self); |
19 | // set default spawn parms |
20 | SetNewParms (); |
21 | // respawn |
22 | PutClientInServer (); |
23 | } |
24 | else |
25 | { // restart the entire server |
26 | localcmd ("restart\n"); |
27 | } |
28 | }; |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Видать, у меня какой-то врождённый детектор говнеца от id
__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]
Так вот откуда ноги растут. Небось W_Precache там тоже есть.
Взял сам проверил - всё ок. Можно пользоваться. Полагаю оно и в халфе так же.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
~ X ~ ну у тебя вообще мод на локалку по большей части расчитан - там это не так критично. тормоза в промежутке между смертью игрока и того, как его первый раз увидишь после респавна (до попадания в pvs он просто не шлётся клиенту, как и факт его исчезновения из pvs) ну и возможно у тебя оно вообще переделано, я не смотрел эту часть.
Добавлено 07-09-2016 в 17:14:
Дядя Миша Всё-таки в халфе проверка по active ( он выставляется когда игрок был передан с сервера) и solid.
Проверку по active добавлю (вчера я сделал точно такую же, угадав поведение GS)
В GS помимо всего происходит такое:
player->movetype = ei.frames[ei.parsecountmod].playerstate[i]movetype
player->solid = ei.frames[ei.parsecountmod].playerstate[i].solid
player->usehull = ei.frames[ei.parsecountmod].playerstate[i].usehull
при установке массива predicted_players (однако мне это не помогло)
Ещё он там EF_NODRAW зачем-то проверяет.
__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]
~ X ~ ты сам это говорил, когда я подметил отсутствие клиентского оружия
mittorn а, я немного в другом смысле. Ну да фиг с ним. Я примерно понял, что ты хотел сказать: при пинге clientdata дохлого игрока может не дойти и он будет числиться активным. Тут уж ХЗ что может помочь. ДесуНотис помогает обойти ПВС, но не пинг...
__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]
клиентдата шлётся только локальному
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Временная зона GMT. Текущее время 22:46. | Показать все 24 сообщений этой темы на одной странице |
На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024