HLFX.Ru Forum
профиль •  правила •  регистрация •  календарь •  народ •  FAQ •  поиск •  новое •  сутки •  главная •  выход  
HLFX.Ru Forum HLFX.Ru Forum > Теория и практика > Half-Life SDK > [Xash3D/XashXT] получение данных или как там.
На примере gaitsequence.
  Предыдущая тема   Следующая тема
Автор
Тема Новая тема    Ответить
ILZM
LAW

Дата регистрации: Oct 2011
Проживает: Mega City One
Сообщений: 301

Рейтинг



[Xash3D/XashXT] получение данных или как там.

Привет всем! Извините, пожалуйста, за много букв. Пытаюсь ясно объяснить вопрос .
Как я слышал, данные энтити передаются тогда, когда они поменяются, т. е. если меняется pev->friction, то тогда это значение передаётся клиенту и остальные также.

Может тута

C++ Source Code:
1
/*
2
=========================
3
HUD_ProcessPlayerState
4
 
5
We have received entity_state_t for this player over the network.  We need to copy appropriate fields to the
6
playerstate structure
7
=========================
8
*/
9
void DLLEXPORT HUD_ProcessPlayerState( struct entity_state_s *dst, const struct entity_state_s *src )
10
{
11
  // Copy in network data
12
  dst->origin	= src->origin;
13
  dst->angles	= src->angles;
14
 
15
  dst->velocity	= src->velocity;
16
  dst->basevelocity	= src->basevelocity;
17
 
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;
26
 
27
  dst->solid	= src->solid;
28
 
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;
35
 
36
  dst->framerate	= src->framerate;
37
  dst->body		= src->body;
38
 
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;
46
 
47
  memcpy( &dst->controller[0], &src->controller[0], 4 * sizeof( byte ));
48
  memcpy( &dst->blending[0], &src->blending[0], 2 * sizeof( byte ));
49
 
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
52
 
53
  if( dst->number == player->index )
54
  {
55
    // always have valid PVS message
56
    r_currentMessageNum = src->messagenum;
57
  }
58
}


Или здесь
C++ Source Code:
1
/*
2
AddToFullPack
3
 
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
5
 
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
13
*/
14
int AddToFullPack( struct entity_state_s *state, int e, edict_t *ent, edict_t *host, int hostflags, int player, unsigned char *pSet )
15
{
16
  ...
17
 
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;
28
 
29
  state->aiment = 0;
30
  if ( ent->v.aiment )
31
  {
32
    state->aiment = ENTINDEX( ent->v.aiment );
33
  }
34
 
35
  state->owner = 0;
36
  if ( ent->v.owner )
37
  {
38
    int owner = ENTINDEX( ent->v.owner );
39
 
40
    // Only care if owned by a player
41
    if ( owner >= 1 && owner <= gpGlobals->maxClients )
42
    {
43
      state->owner = owner;
44
    }
45
  }
46
 
47
  // HACK:  Somewhat...
48
  // Class is overridden for non-players to signify a breakable glass object ( sort of a class? )
49
  if ( !player )
50
  {
51
    state->playerclass  = ent->v.playerclass;
52
  }
53
 
54
  // Special stuff for players only
55
  if ( player )
56
  {
57
    memcpy( state->basevelocity, ent->v.basevelocity, 3 * sizeof( float ) );
58
 
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;
63
 
64
    state->gravity      = ent->v.gravity;
65
    //		state->team			= ent->v.team;
66
    //
67
    state->usehull      = ( ent->v.flags & FL_DUCKING ) ? 1 : 0;
68
    state->health		= ent->v.health;
69
  }
70
 
71
  state->weaponmodel  = MODEL_INDEX( STRING( ent->v.weaponmodel ) );
72
  state->team	= ent->v.team;
73
 
74
  return 1;
75
}


И как тогда отловить смену переменной gaitsequence и передать prevgaitsequence клиенту? Или же лучше сделать это на клиенте, а именно в void CStudioModelRenderer :: StudioSetupBones ( void )? Хотя в void CStudioModelRenderer :: StudioSetupBones ( void ) нежелательно, потому-что она и так часто вызывается, а тут ещё проверка такая
C++ Source Code:
1
if ( m_pPlayerInfo )
2
{
3
  if ( m_pPlayerInfo->iPrevGaitSeq != m_pPlayerInfo->gaitsequence )
4
  {
5
    /*if ( m_pPlayerInfo->iPrevGaitSeq < 0 || m_pPlayerInfo->iPrevGaitSeq >= m_pStudioHeader->numseq )
6
    			{
7
    				m_pPlayerInfo->iPrevGaitSeq = 0;
8
    			}*/
9
 
10
    ALERT ( at_console, "Prevoius %d %f, Current %d %f\n", m_pPlayerInfo->iPrevGaitSeq, m_pPlayerInfo->flPrevGaitFrame, m_pPlayerInfo->gaitsequence, m_pPlayerInfo->gaitframe );
11
 
12
    m_pPlayerInfo->gaitframe = 0;
13
  }
14
 
15
  m_pPlayerInfo->flPrevGaitFrame =	m_pPlayerInfo->gaitframe;
16
  m_pPlayerInfo->iPrevGaitSeq =		m_pPlayerInfo->gaitsequence;
17
}

Где находится место, которое не так часто вызывается и в которым можно сразу определить смену значения gaitsequence, можно сказать начальную функцию.

----------------------

И ищо немного не по теме вопросик:

C++ Source Code:
1
typedef struct player_info_s
2
{
3
  ....
4
 
5
  // Gait frame estimation
6
  int		gaitsequence;
7
  int		iPrevGaitSeq;
8
  float		gaitframe;
9
  float		flPrevGaitFrame;
10
  float		gaityaw;
11
  vec3_t		prevgaitorigin;
12
} player_info_t;
создаётся же для каждого игрока (За исключением местного игрока если он не от третьего лица)?

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

Старое сообщение 24-04-2014 06:47
- За что?
Ku2zoff
Мастер Ёда из Деревни Дуракоф

Дата регистрации: Apr 2007
Проживает: В Деревне дураков
Сообщений: 6848
Возраст: 34

Рейтинг



ILZM ты напиши, что конкретно ты хочешь сделать, отсюда и будем плясать. Естественно, гейтсеквенции и секвенции лучше отловить в коде студиомодельрендерера, т.к. там они обновляются каждый кадр, да и вообще имеется широкий доступ к параметрам модели. А ещё там можно получить доступ к некоторым энтварсам текущей энтити, для которой рисуется модель.

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

Старое сообщение 24-04-2014 08:22
- За что?
ILZM
LAW

Дата регистрации: Oct 2011
Проживает: Mega City One
Сообщений: 301

Рейтинг



Хочу переменную, которая хранит предыдущую gaitsequence, т. е. prevgaitsequence.

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

Старое сообщение 24-04-2014 09:15
- За что?
Ku2zoff
Мастер Ёда из Деревни Дуракоф

Дата регистрации: Apr 2007
Проживает: В Деревне дураков
Сообщений: 6848
Возраст: 34

Рейтинг



Цитата:
ILZM писал:
prevgaitsequence

ЕМНИП, то на клиенте в студимодельрендерере её не получить. Придётся отлавливать через обновление инфы игрока. Вообще, в структуре cl_entity_t->curstate нету prevgaitsequence, да и не нужно оно на клиенте. Поэтому придётся либо мессагой, либо эвентом. Вопрос зачем оно тебе надо? Что за задача такая?

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

Старое сообщение 24-04-2014 09:25
- За что?
ILZM
LAW

Дата регистрации: Oct 2011
Проживает: Mega City One
Сообщений: 301

Рейтинг



Ku2zoff, а ничего если в

C++ Source Code:
1
typedef struct player_info_s
2
{
3
  ....
4
 
5
  // Gait frame estimation
6
  int    gaitsequence;
7
  int    iPrevGaitSeq;
8
  float    gaitframe;
9
  float    flPrevGaitFrame;
10
  float    gaityaw;
11
  vec3_t    prevgaitorigin;
12
} player_info_t;
добавятся ещё несколько переменных?

Это надо всё чтобы сделать плавный переход анимаций ног у игрока, а то как отмороженный бегает.

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

Старое сообщение 24-04-2014 11:16
- За что?
 Дядя Миша
racing for fish

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

Рейтинг



Цитата:
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'

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

Старое сообщение 24-04-2014 11:19
-
ILZM
LAW

Дата регистрации: Oct 2011
Проживает: Mega City One
Сообщений: 301

Рейтинг



Дядя Миша, лол. Какая уж инверсная кинематика тогда?..

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

Старое сообщение 24-04-2014 12:15
- За что?
 Дядя Миша
racing for fish

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

Рейтинг



Ну на стандартных моделях с гейтом - полная фигня. А для 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'

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

Старое сообщение 24-04-2014 13:36
-
Ku2zoff
Мастер Ёда из Деревни Дуракоф

Дата регистрации: Apr 2007
Проживает: В Деревне дураков
Сообщений: 6848
Возраст: 34

Рейтинг



Цитата:
Дядя Миша писал:
entity->prevstate.gaitsequence

О, я ж забыл про prevstate, точно, так можно отловить.

Добавлено 24-04-2014 в 22:22:

Цитата:
ILZM писал:
плавный переход анимаций ног у игрока

Пятнадцать лет всех устраивает резкий переход, и никто не жалуется. Да вообще, кто это заметит в мультиплеере, сам подумай.

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

Старое сообщение 24-04-2014 15:22
- За что?
ILZM
LAW

Дата регистрации: Oct 2011
Проживает: Mega City One
Сообщений: 301

Рейтинг



Ku2zoff, и ещё 15 лет иметь деревянные анимации ног, которые делают из игрока хрен пойми что?)

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

Старое сообщение 24-04-2014 17:21
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 35014
Нанёс повреждений: 514 ед.
Возраст: 38

Рейтинг



Награды
 
[1 награда]


Цитата:
ILZM писал:
и ещё 15 лет иметь деревянные анимации ног, которые делают из игрока хрен пойми что

А ты зачем игрокам ниже пояса смотришь, озорник?

__________________

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

Старое сообщение 24-04-2014 18:40
-
ILZM
LAW

Дата регистрации: Oct 2011
Проживает: Mega City One
Сообщений: 301

Рейтинг



XaeroX, а чо. Я на свои смотрю, а их нет!!

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

Старое сообщение 24-04-2014 19:03
- За что?
~ X ~
offline

Дата регистрации: Oct 2005
Проживает: Архангельск
Сообщений: 3619

Рейтинг



Награды
 
[1 награда]


БЕЗНОГNМ!
Кто посмотрит эти модели будет странный вещи.

ЗЫ: я перед релизом как раз много времени убил на гайты, вся эта системы вызывает у меня дикую ненависть... Но кое-что удалось пофиксить

ILZM не забывай про дельту.лст - а то могут какие-нить кривые значения полезть.

__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]

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

Старое сообщение 26-04-2014 08:22
- За что?
Тема: (Опционально)
Ваш ответ:



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


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

Временная зона GMT. Текущее время 12:40. Новая тема    Ответить
  Предыдущая тема   Следующая тема
HLFX.Ru Forum HLFX.Ru Forum > Теория и практика > Half-Life SDK > [Xash3D/XashXT] получение данных или как там.
На примере gaitsequence.
Версия для печати | Отправить тему по E-Mail | Подписаться на эту тему

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

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

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

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