HLFX.Ru Forum
Показать все 10 сообщений этой темы на одной странице

HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Half-Life SDK (https://hlfx.ru/forum/forumdisplay.php?forumid=8)
-- Скорость всех игроков в CStudioModelRender. (https://hlfx.ru/forum/showthread.php?threadid=4417)


Отправлено ILZM 27-05-2014 в 18:11:

Скорость всех игроков в CStudioModelRender.

Сам топик отсюда http://cs-mapping.com.ua/forum/show...406#post860406.
Вот передаётся скорость через vuser4. Но на клиенте не понятно у какой энтити она изменяется.
На сервере:

C++ Source Code:
1
void CBasePlayer::PostThink()
2
{
3
  ...
4
 
5
  pev->vuser4 = GetAbsVelocity ( );
6
  ...
7
}


На клиенте:
C++ Source Code:
1
void CStudioModelRenderer :: StudioProcessGait ( entity_state_t *pplayer )
2
{
3
  ...
4
 
5
  Vector				vecPlVel;
6
 
7
  //cl_entity_t *player;
8
  // get copy of player
9
  //player = GET_LOCAL_PLAYER();
10
 
11
  //entity_state_t player;
12
  //player = *(IEngineStudio.GetPlayerState( m_nPlayerIndex ))
13
  //vecPlVel = player->curstate.vuser4;
14
 
15
  vecPlVel = m_pCurrentEntity->curstate.vuser4;
16
  ...
17
}

И ни в одном из этих vuser4 нет этих значений с сервера, даже если GET_LOCAL_PLAYER(). В HL норм же идёт, а тут что не так?


Отправлено ~ X ~ 27-05-2014 в 18:42:

ILZM delta.lst, HUD_ProcessPlayerState, HUD_TxferLocalOverrides.
Если не понятно, то ты не достоин быть моддером сакрального Г-сорца (шутка, типа).

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


Отправлено XaeroX 27-05-2014 в 20:27:

AddToFullPack на сервере проверь, возможно, там vuser4 не копируется.
HUD_ProcessPlayerState нужен, если юзать IEngineStudio.GetPlayerState, а он юзает обычный curstate.

Добавлено 28-05-2014 в 03:26:

Второй вариант - покрутить UpdateClientData на сервере и HUD_TxferLocalOverrides на клиенте.

Добавлено 28-05-2014 в 03:27:

А хотя нет, vuser4 у клиентдаты уже заюзан.

__________________

xaerox on Vivino


Отправлено ILZM 28-05-2014 в 06:29:

~ X ~, недостоин я. Всего лишь полукровка-скриптер...

Спасибо вам за советы.
Но, к сожалению, ничего не выходит! Главное пишышь, пишышь инновации, которых девственный ХЛ никогда не касался, а тут вот такая глупая фигня, которая по сравнению с этими инновациями ничто.

Мб я делаю что-то не так?

Мне надо, чтобы у не локальных игроков, двигались ноги. Свои ноги от третьего лица работают, не зависимо от того что было заюзано. В обычном ХЛ всё норм же, а вот в Xash'e они не двигаются!!1!1!! Почему ?!

Чтобы проверять дополнительного игрока, запускаю 2 клиента: один просто хостует, а другой через SandBox. Один из них бегает, другой смотрит. В этом ничего подозрительного нету, потому-что это имитация игры по ланке.

Как говорилось, у локального игрока скорость принимается, а у других - нет!!
Пробовал вот так vecPlVel = m_pCurrentEntity->curstate.velocity;, вот так

C++ Source Code:
player = *(IEngineStudio.GetPlayerState( m_nPlayerIndex ))
vecPlVel = player.velocity;

И просто через entity_state_t *pplayer, которую принимает ф-я vecPlVel = player->velocity;
Сравнил с обычным ХЛ. Там есть одно лишь различие в HUD_TxferLocalOverrides в том, что нету state->velocity = client->velocity;, а в XashXT есть. Ну я и закомментил. И в результате даже у локального игрока скорость не принимается! delta.lst вроде бы идентичный.

Пожалуйста, покажите полностью что нужно делать, а то нуб по-ходу.


Отправлено ILZM 28-05-2014 в 12:56:

Как говорят, поспешишь - людей насмешишь . Но загадка со с полем velocity всё равно остаётся...

Зачем все эти clientdata, HUD_ProcessPlayerState, HUD_TxferLocalOverrides, если уже есть addtofullpack? Передаётся ли инфа дважды?


Отправлено XaeroX 28-05-2014 в 13:06:

Цитата:
ILZM писал:
Зачем все эти clientdata, HUD_ProcessPlayerState, HUD_TxferLocalOverrides, если уже есть addtofullpack? Передаётся ли инфа дважды?

Зачем клиентские функции, если есть серверные? Ну, подумай.

__________________

xaerox on Vivino


Отправлено ILZM 28-05-2014 в 14:23:

Конечно, это понятно. Одно отправляет, другое принимает. Но зачем эти расширения в delta.lst, которые повторяются? Ведь это значит, что одна и та же инфа отправляется. Не так ли?

C++ Source Code:
1
clientdata_t none
2
{
3
  DEFINE_DELTA( flTimeStepSound, DT_INTEGER, 10, 1.0 ),
4
  DEFINE_DELTA( origin[0], DT_SIGNED | DT_FLOAT, 24, 128.0 ),
5
  DEFINE_DELTA( origin[1], DT_SIGNED | DT_FLOAT, 24, 128.0 ),
6
  DEFINE_DELTA( velocity[0], DT_SIGNED | DT_FLOAT, 16, 8.0 ),
7
  DEFINE_DELTA( velocity[1], DT_SIGNED | DT_FLOAT, 16, 8.0 ),
8
 
9
  ...
10
}

C++ Source Code:
1
entity_state_t gamedll Entity_Encode
2
{
3
  DEFINE_DELTA( animtime, DT_TIMEWINDOW_8, 8, 1.0 ),
4
  DEFINE_DELTA( frame, DT_FLOAT, 10, 4.0 ),
5
  DEFINE_DELTA( origin[0], DT_SIGNED | DT_FLOAT, 24, 128.0 ),
6
  DEFINE_DELTA( angles[0], DT_ANGLE, 16, 1.0 ),
7
  DEFINE_DELTA( angles[1], DT_ANGLE, 16, 1.0 ),
8
  DEFINE_DELTA( origin[1], DT_SIGNED | DT_FLOAT, 24, 128.0 ),
9
  DEFINE_DELTA( origin[2], DT_SIGNED | DT_FLOAT, 24, 128.0 ),
10
  ...
11
}

C++ Source Code:
1
entity_state_player_t gamedll Player_Encode
2
{
3
  DEFINE_DELTA( animtime, DT_TIMEWINDOW_8, 8, 1.0 ),
4
  DEFINE_DELTA( frame, DT_FLOAT, 8, 1.0 ),
5
  DEFINE_DELTA( origin[0], DT_SIGNED | DT_FLOAT, 24, 128.0 ),
6
  DEFINE_DELTA( angles[0], DT_ANGLE, 16, 1.0 ),
7
  DEFINE_DELTA( angles[1], DT_ANGLE, 16, 1.0 ),
8
  DEFINE_DELTA( origin[1], DT_SIGNED | DT_FLOAT, 24, 128.0 ),
9
  DEFINE_DELTA( origin[2], DT_SIGNED | DT_FLOAT, 24, 128.0 ),
10
  ...
11
}


Отправлено Ku2zoff 28-05-2014 в 17:27:

Цитата:
ILZM писал:
Но зачем эти расширения в delta.lst, которые повторяются? Ведь это значит, что одна и та же инфа отправляется. Не так ли?

Дык тут же отдельно для обычных энтить, для игрока и для клиентдаты (правда, я не совсем понимаю, что это такое, клиентдата, потому что сетью толком не занимался и в инете не шарил). Каждое для своих задач сделано. То есть, мы можем не передавать какие-то энтварсы игрока на клиент, если в этом нет нужды, экономить сетевой траффик в мультиплеере.
ILZM я не могу понять, как у тебя может не передаваться велосити с сервера на клиент... Ты её пытаешься передать через vuser? Попробуй каждый из трёх компонентов вектора передать через fuser, может быть решит проблему.
И ещё. На сервере-то проверял? Может быть ты vuser4 приравниваешь к какому-то фуфлу, типа null.


Отправлено ~ X ~ 28-05-2014 в 19:17:

Цитата:
ILZM писал:
В обычном ХЛ всё норм же, а вот в Xash'e они не двигаются!!1!1!! Почему ?!



Ахем. Клиентдата более точная, часто передаваемая и предиктабельная. Короче, она нужна. Вопрос у меня в другом - КАК игроки двигаются, если у них нет велосити?! Ну ведь наверняка она есть, хоть в пм_шаред на клиенте. Хотя, мб я чего-то не понял. Задачу, например.

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


Отправлено XaeroX 28-05-2014 в 19:23:

Цитата:
~ X ~ писал:
Короче, она нужна.

На самом деле она не нужна, но в халфе есть - и с этим приходится мириться.
В халфовском сетевом коде на самом деле много чудачеств. Видимо, его много лет писали, отлаживали, тестировали разные идеи и т.д. Вот и получили мы всякие клиент-даты в результате, дублирующие энтити-стейт.
Цитата:
~ X ~ писал:
Ну ведь наверняка она есть, хоть в пм_шаред на клиенте.

На клиенте есть позишен-хистори.

__________________

xaerox on Vivino


Временная зона GMT. Текущее время 07:19.
Показать все 10 сообщений этой темы на одной странице

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