HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Half-Life SDK (https://hlfx.ru/forum/forumdisplay.php?forumid=8)
-- [Xash3D/XashXT] получение данных или как там. (https://hlfx.ru/forum/showthread.php?threadid=4374)
Отправлено ILZM 24-04-2014 в 06:47:
[Xash3D/XashXT] получение данных или как там.
Привет всем! Извините, пожалуйста, за много букв. Пытаюсь ясно объяснить вопрос
.
Как я слышал, данные энтити передаются тогда, когда они поменяются, т. е. если меняется pev->friction, то тогда это значение передаётся клиенту и остальные также.
Может тута
C++ Source Code:
2 | ========================= |
5 | We have received entity_state_t for this player over the network. We need to copy appropriate fields to the |
7 | ========================= |
9 | void DLLEXPORT HUD_ProcessPlayerState( struct entity_state_s *dst, const struct entity_state_s *src ) |
11 | // Copy in network data |
12 | dst->origin = src->origin; |
13 | dst->angles = src->angles; |
15 | dst->velocity = src->velocity; |
16 | dst->basevelocity = src->basevelocity; |
18 | dst->frame = src->frame; |
19 | dst->modelindex = src->modelindex; |
20 | dst->skin = src->skin; |
21 | dst->effects = src->effects; |
22 | dst->weaponmodel = src->weaponmodel; |
23 | dst->movetype = src->movetype; |
24 | dst->sequence = src->sequence; |
25 | dst->animtime = src->animtime; |
27 | dst->solid = src->solid; |
29 | dst->rendermode = src->rendermode; |
30 | dst->renderamt = src->renderamt; |
31 | dst->rendercolor.r = src->rendercolor.r; |
32 | dst->rendercolor.g = src->rendercolor.g; |
33 | dst->rendercolor.b = src->rendercolor.b; |
34 | dst->renderfx = src->renderfx; |
36 | dst->framerate = src->framerate; |
37 | dst->body = src->body; |
39 | dst->friction = src->friction; |
40 | dst->gravity = src->gravity; |
41 | dst->gaitsequence = src->gaitsequence; ................................................................................................................. |
42 | dst->usehull = src->usehull; |
43 | dst->playerclass = src->playerclass; |
44 | dst->team = src->team; |
45 | dst->colormap = src->colormap; |
47 | memcpy( &dst->controller[0], &src->controller[0], 4 * sizeof( byte )); |
48 | memcpy( &dst->blending[0], &src->blending[0], 2 * sizeof( byte )); |
50 | // Save off some data so other areas of the Client DLL can get to it |
51 | cl_entity_t *player = GET_LOCAL_PLAYER(); // Get the local player's index |
53 | if( dst->number == player->index ) |
55 | // always have valid PVS message |
56 | r_currentMessageNum = src->messagenum; |
Или здесь
C++ Source Code:
4 | Return 1 if the entity state has been filled in for the ent and the entity will be propagated to the client, 0 otherwise |
6 | state is the server maintained copy of the state info that is transmitted to the client |
7 | a MOD could alter values copied into state to send the "host" a different look for a particular entity update, etc. |
8 | e and ent are the entity that is being added to the update, if 1 is returned |
9 | host is the player's edict of the player whom we are sending the update to |
10 | player is 1 if the ent/e is a player and 0 otherwise |
11 | pSet is either the PAS or PVS that we previous set up. We can use it to ask the engine to filter the entity against the PAS or PVS. |
12 | we could also use the pas/ pvs that we set in SetupVisibility, if we wanted to. Caching the value is valid in that case, but still only for the current frame |
14 | int AddToFullPack( struct entity_state_s *state, int e, edict_t *ent, edict_t *host, int hostflags, int player, unsigned char *pSet ) |
18 | state->rendermode = ent->v.rendermode; |
19 | state->renderamt = ent->v.renderamt; |
20 | state->renderfx = ent->v.renderfx; |
21 | state->rendercolor.r = ent->v.rendercolor.x; |
22 | state->rendercolor.g = ent->v.rendercolor.y; |
23 | state->rendercolor.b = ent->v.rendercolor.z; |
24 | state->fuser2 = ent->v.fuser2; // FOV |
25 | state->iuser1 = ent->v.iuser1; // flags |
26 | state->iuser2 = ent->v.iuser2; // flags |
27 | state->vuser2 = ent->v.vuser2; |
32 | state->aiment = ENTINDEX( ent->v.aiment ); |
38 | int owner = ENTINDEX( ent->v.owner ); |
40 | // Only care if owned by a player |
41 | if ( owner >= 1 && owner <= gpGlobals->maxClients ) |
48 | // Class is overridden for non-players to signify a breakable glass object ( sort of a class? ) |
51 | state->playerclass = ent->v.playerclass; |
54 | // Special stuff for players only |
57 | memcpy( state->basevelocity, ent->v.basevelocity, 3 * sizeof( float ) ); |
59 | state->weaponmodel = MODEL_INDEX( STRING( ent->v.weaponmodel ) ); |
60 | state->gaitsequence = ent->v.gaitsequence;...................................................................................................................... |
61 | state->spectator = ent->v.flags & FL_SPECTATOR; |
62 | state->friction = ent->v.friction; |
64 | state->gravity = ent->v.gravity; |
65 | // state->team = ent->v.team; |
67 | state->usehull = ( ent->v.flags & FL_DUCKING ) ? 1 : 0; |
68 | state->health = ent->v.health; |
71 | state->weaponmodel = MODEL_INDEX( STRING( ent->v.weaponmodel ) ); |
72 | state->team = ent->v.team; |
И как тогда отловить смену переменной gaitsequence и передать prevgaitsequence клиенту? Или же лучше сделать это на клиенте, а именно в void CStudioModelRenderer :: StudioSetupBones ( void )? Хотя в void CStudioModelRenderer :: StudioSetupBones ( void ) нежелательно, потому-что она и так часто вызывается, а тут ещё проверка такая
C++ Source Code:
3 | if ( m_pPlayerInfo->iPrevGaitSeq != m_pPlayerInfo->gaitsequence ) |
5 | /*if ( m_pPlayerInfo->iPrevGaitSeq < 0 || m_pPlayerInfo->iPrevGaitSeq >= m_pStudioHeader->numseq ) |
7 | m_pPlayerInfo->iPrevGaitSeq = 0; |
10 | ALERT ( at_console, "Prevoius %d %f, Current %d %f\n", m_pPlayerInfo->iPrevGaitSeq, m_pPlayerInfo->flPrevGaitFrame, m_pPlayerInfo->gaitsequence, m_pPlayerInfo->gaitframe ); |
12 | m_pPlayerInfo->gaitframe = 0; |
15 | m_pPlayerInfo->flPrevGaitFrame = m_pPlayerInfo->gaitframe; |
16 | m_pPlayerInfo->iPrevGaitSeq = m_pPlayerInfo->gaitsequence; |
Где находится место, которое не так часто вызывается и в которым можно сразу определить смену значения gaitsequence, можно сказать начальную функцию.
----------------------
И ищо немного не по теме вопросик:
C++ Source Code:
1 | typedef struct player_info_s |
5 | // Gait frame estimation |
11 | vec3_t prevgaitorigin; |
создаётся же для каждого игрока (За исключением местного игрока если он не от третьего лица)?
Отправлено Ku2zoff 24-04-2014 в 08:22:
ILZM ты напиши, что конкретно ты хочешь сделать, отсюда и будем плясать. Естественно, гейтсеквенции и секвенции лучше отловить в коде студиомодельрендерера, т.к. там они обновляются каждый кадр, да и вообще имеется широкий доступ к параметрам модели. А ещё там можно получить доступ к некоторым энтварсам текущей энтити, для которой рисуется модель.
Отправлено ILZM 24-04-2014 в 09:15:
Хочу переменную, которая хранит предыдущую gaitsequence, т. е. prevgaitsequence.
Отправлено Ku2zoff 24-04-2014 в 09:25:
Цитата:
ILZM писал:
prevgaitsequence
ЕМНИП, то на клиенте в студимодельрендерере её не получить. Придётся отлавливать через обновление инфы игрока. Вообще, в структуре cl_entity_t->curstate нету prevgaitsequence, да и не нужно оно на клиенте. Поэтому придётся либо мессагой, либо эвентом. Вопрос зачем оно тебе надо? Что за задача такая?
Отправлено ILZM 24-04-2014 в 11:16:
Ku2zoff, а ничего если в
C++ Source Code:
1 | typedef struct player_info_s |
5 | // Gait frame estimation |
11 | vec3_t prevgaitorigin; |
добавятся ещё несколько переменных?
Это надо всё чтобы сделать плавный переход анимаций ног у игрока, а то как отмороженный бегает.
Отправлено Дядя Миша 24-04-2014 в 11:19:
Цитата:
ILZM писал:
Может тута
Цитата:
ILZM писал:
Или здесь
Это в движке и очень глубоко. Там абстрактный уровень. ты не отловишь свои pev->friction. Но если интересно - копай ent_encode.c функцию Delta_CompareField. Все сравнения происходят там.
Цитата:
ILZM писал:
создаётся же для каждого игрока (За исключением местного игрока если он не от третьего лица)?
Местный игрок? Эй, игрок, ты с какова раёна?
Для всех игроков он создается, без исключения.
Цитата:
ILZM писал:
Хочу переменную, которая хранит предыдущую gaitsequence, т. е. prevgaitsequence.
Хым. entity->prevstate.gaitsequence. Только зачем?
Добавлено 24-04-2014 в 15:19:
Цитата:
ILZM писал:
Это надо всё чтобы сделать плавный переход анимаций ног у игрока, а то как отмороженный бегает.
Бгг. Не сделаешь. Я уже делал, такая фигня получилась. И аналогично - блендинг между секвенциями вьюмодели.__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено ILZM 24-04-2014 в 12:15:
Дядя Миша, лол. Какая уж инверсная кинематика тогда?..
Отправлено Дядя Миша 24-04-2014 в 13:36:
Ну на стандартных моделях с гейтом - полная фигня. А для 9-way blending очень даже неплохо.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено Ku2zoff 24-04-2014 в 15:22:
Цитата:
Дядя Миша писал:
entity->prevstate.gaitsequence
О, я ж забыл про prevstate, точно, так можно отловить.
Добавлено 24-04-2014 в 22:22:
Цитата:
ILZM писал:
плавный переход анимаций ног у игрока
Пятнадцать лет всех устраивает резкий переход, и никто не жалуется. Да вообще, кто это заметит в мультиплеере, сам подумай.
Отправлено ILZM 24-04-2014 в 17:21:
Ku2zoff, и ещё 15 лет иметь деревянные анимации ног, которые делают из игрока хрен пойми что?)
Отправлено XaeroX 24-04-2014 в 18:40:
Цитата:
ILZM писал:
и ещё 15 лет иметь деревянные анимации ног, которые делают из игрока хрен пойми что
А ты зачем игрокам ниже пояса смотришь, озорник?__________________
Отправлено ILZM 24-04-2014 в 19:03:
XaeroX, а чо. Я на свои смотрю, а их нет!!
Отправлено ~ X ~ 26-04-2014 в 08:22:
БЕЗНОГNМ!
Кто посмотрит эти модели будет странный вещи.
ЗЫ: я перед релизом как раз много времени убил на гайты, вся эта системы вызывает у меня дикую ненависть... Но кое-что удалось пофиксить 
ILZM не забывай про дельту.лст - а то могут какие-нить кривые значения полезть.
__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]