Ku2zoff
Ах да. Я эту проблему для игрока решил запихав скорость игрока в vuser, и в delta передавал с сервера на клиент. Не знаю, ест ли много траффика, но зато эту скорость можно для боба и вообще для разных целей использовать. Мб тебе для каждого монстра открыть поле какое-нибудь в delta? Хотя тебе же нужна синхронизация для хитбоксов.
Мб тогда будешь передавать frame, sequence и gaitframe, gaitsequence? Таким образом тебе не нужно будет считать анимацию на клиенте и хитбоксы будут сихронизированы. Хотя инфу о переходах не передашь через сеть.
Тогда возникает новый вопрос. Вот у тебя с двух сторон одинаковый код просчета анимаций, но они точно идут в такт? Т. е. не надо там никаких предсказываний? Вдруг на клиенте анимация идет с мелким запозданием.
ILZM писал: Мб тебе для каждого монстра открыть поле какое-нибудь в delta? Хотя тебе же нужна синхронизация для хитбоксов.
Не-не-не. Нехороший подход. Правильный подход, это когда на клиенте делается зеркало для серверной функции. Ну и наоборот. Ну вот глянь сорцы халфовской клиентки и сорцы ксашдвижка. StduioModelRenderer сделан и на клиенте и в движке. И без всяких левых полей в дельте синхронизируется. И спользуются только те поля, которые нужны для работы ещё нескольких механизмов и вообще всей сети.
Цитата:
ILZM писал: Мб тогда будешь передавать frame, sequence и gaitframe, gaitsequence?
Ты видел, как это работает у нелокального игрока? Работает настолько плохо, насколько высок пинг.
Цитата:
ILZM писал: Тогда возникает новый вопрос. Вот у тебя с двух сторон одинаковый код просчета анимаций, но они точно идут в такт? Т. е. не надо там никаких предсказываний? Вдруг на клиенте анимация идет с мелким запозданием.
Она и так идёт с запозданием. Скопипасти код с китайской каэсочки. Серверный gaitframe будет отставать от клиентского. Но это ж никого не волнует. Каэсочка, вон, 15 лет уже спросом у задротов пользуется. И никто не жаловался, что серверные хитбоксы ног отстают от клиентской визуализации этих самых ног на полсекунды.
Это не скорость игрока. Это скорость камеры. Поверти резко мышью в движении - скорость увеличится. Скорость игрока это player->curstate.velocity. Которая, кстати, не отлавливается в коде студиомодельрендерера. Поэтому там заведено такое говно как prevgaitorigin и est_velocity.
Ku2zoff Ну если зажать вперед и стрейф, то тоже увеличится, да и скорость игрока увеличивается по сути при поворотах мыши, а то зачем башкой вертеть при распрыгах? Вон взять кридз плагины на коэс и поглядеть изменение скорости игрока при стрейфах и направлении вперед/назад, а так же при повороте мышью.
PLut эта скорость только для локального игрока. А мы говорили о студиомодельрендерере и о той скорости, которая передаётся через дельту в секции player_encode. Ну то есть она там как раз не передаётся
Ku2zoff А вот это факт, да. Чтобы получить скорость других игроков нужно её передавать. Просто там про боб словечко было, а для боба локальной скорости достаточно. Я долго парился чтобы правильно игрокам партиклевые эффекты в бдефе рисовать, некоторые эффекты вызываются эвентом и я думал как можно получить велосити серверной энтити на клиенте, думал, что оно передаётся в эвенте само, оказалось, что нет, попробовал запихнуть вместо углов, получилась каша из углов и велосити. Пришлось юзать 2 флоата в эвенте, для партиклей у меня они не нужны всё-равно.
в delta.lst в секцию entity_state_player_t gamedll Player_Encode. (Не забыв при этом строчку в client.cpp) И не мучиться с эвентами. Правда, это стоит делать, если velocity игроков нужна на клиенте постоянно, а не на пару секунд для партиклевого эффекта. Например, если gaitmovement надо считать. Но т.к. origin уже передаётся, то gaitmovement высчитывается из разницы ориджинов в текущем и предыдущем кадре.
~ X ~ а зачем считать bob на лестницах? Когда я сделал собственный bob с раскачиванием пушки по двум осям, я отключил раскачивание по одной из осей, когда игрок плавает, прыгает или летит. Так красивее смотрится. Если уделять внимание таким мелочам, как раскачивание камеры и вьюмодели оружия, можно добавить неплохую динамику игре. Единственное, что я не сделал, не завёл квары для отключения. Бывает, что не всем нравится качание. Но мне нравится, я в первом анриле и УТ1 всегда на максимум ставлю.
Добавлено 02-10-2015 в 14:37:
Цитата:
~ X ~ писал: вполне грамотный подход.
Ну это как сказать. Зачем передавать velocity игрока каждый кадр, если этот вектор нужен не всегда?
PLut я не вальве спрашивал, а тебя. У вальве боб. А скорость на клиенте считается просто Length(). К тому же твой камент про simvel, а двумя постами выше уже сказали, что это вообще другая вещь.
Ku2zoff я не про боб а про линейную скорость игрока вообще.