На данный момент в ксаше все трупы игроков твёрдые для клиента.
Нужно разобраться как отличить труп от живого игрока со стороны движка. Есть какие-то идеи?
ILZM сервер всё-таки знает от трупах. В дллках точно, в движке не знаю. CopyToBodyQue присваивает модель игрока специальной энтите bodycue, которая как раз и имеет свойство kRenderFxDeadPlayer. Я думаю, ничто не будет мешать завести проверку на этот рендермод и в серверной части движка.
Я пытался сделать трупы солидными, чтобы их можно было кусковать и расстреливать, но они имеют ббокс стоячего игрока (или копируют ббокс игрока, с которого скопированы). То есть, я думаю, пока игрок жив, его труп будет иметь такие же размеры для коллизии, как и сам игрок в текущий момент.
mittorn я перепутал. На клиенте же надо. ХЗ, ХЗ. По рендермоду бесполезно проверять. Мёртвый игрок не имеет kRenderFxDeadPlayer. В момент респавна создаётся bodyque с этим рендермодом. Надо подумать, что у мёртвого игрока можно отследить на клиенте. pev->deadflag? pev->view_ofs? pev->solid?
Та ещё фигня. В каэске для определения труп/нетруп и показания уровня здоровья в режиме спектатора вообще отдельные мессаги заведены. В рамках мода можно обойтись или мессагами, или добавить строчки в дельту. А вот в движке, чтобы не изломать совместимость, придётся подумать.
Ku2zoff у меня пашет. Хотя тоже гостелекомом обмазываюсь. Попробуй google dns.
Вот как раз solid не меняется. deadflag что-то нету. health нулевой. По view вроде неправильно, однако можно. Чекну. Как временныф фикс пойдёт.
Игрок мёртв однозначно, если у него MOVETYPE_NONE стоит.
C++ Source Code:
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;
Т.е. в CL_SetSolidPlayers надо добавить от это
C++ Source Code:
if( state->movetype == MOVETYPE_NONE )
continue; // dead
И еще, на ЗОГ-медко.
C++ Source Code:
if( state->effects & EF_NODRAW )
continue; // skip invisible
это невозможное условие. EF_NODRAW отсеивается на сервере и энтить с таким флагом просто не доходит до клиента. Тем более применительно к игроку вообще странная проверка.
В XHL не прокатит т.к. у мёртвых игроков мувтайпы могут разными быть -- источник багов.
Цитата:
Дядя Миша писал: Тем более применительно к игроку вообще странная проверка.
Кстати, ОЧЕНЬ хороший вариант посылки "мёртвости" на клиент, если это пропустить на сервере в АддТоФуллПак(). Но я бы, если б хотелось защититься от читерства, пересылал бы pev->health в виде 0/1.
Если речь идёт о поддержке стороннних модов, то тут я лично проверяю солидность.
Цитата:
Ku2zoff писал: CopyToBodyQue
О, этот старинный хак!! ))))
Сколько лет не видел %)