HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Half-Life SDK (https://hlfx.ru/forum/forumdisplay.php?forumid=8)
-- Нубские вопросы от <censored> и других нубов (https://hlfx.ru/forum/showthread.php?threadid=4535)
Отправлено Aynekko 05-08-2021 в 07:05:
Цитата:
Ku2zoff писал:
При деактивации камеры делается вызов SET_VIEW на игрока
Это в Stop. А я про FollowTarget. Попробуй сам. Поставь двум камерам время -1, чтобы не выключались автоматом. Потом активируй камеру 1. Не выключая ее, активируй камеру 2. Потом выключи камеру 2. А первую-то не выключили. Я выводил туда алерт, FollowTarget как работал, так и работает. И если ты попытаешься активировать камеру 1, то ничего не произойдет, потому что сначала будет деактивация. Нажмешь еще раз, тогда уже активируешь.__________________
Мой мод на Xash
Отправлено Aynekko 14-08-2021 в 13:45:
На ксаше. В общем у меня стоит punchangle из сорса, который вычисляется в playermove.
Ситуация - создаю дедикатед сервер. Потом подключаюсь с двух компов - на одном более 200 фпс, на другом 30.
Когда заходит один клиент, любой - панч ведет себя нормально.
Если у обоих клиентов одинаковый фпс - то у обоих все нормально.
Но, если у одного клиента 30 фпс, а у другого 200, то у первого панч ооочень медленный, а у другого наоборот ускоренный. Фпс у обоих клиентов должен быть полностью одинаков, чтобы все нормально работало. Как это побороть?
Код панча:
C++ Source Code:
1 | void PM_DropPunchAngle ( Vector &punchangle ) |
4 | float springForceMagnitude; |
6 | if ( punchangle.Length() > 0.001 || pmove->vuser3.Length() > 0.001 ) |
8 | punchangle += pmove->vuser3 * pmove->frametime; |
9 | damping = 1.0f - (PUNCH_DAMPING * pmove->frametime); |
14 | pmove->vuser3 *= damping; |
17 | // UNDONE: Per-axis spring constant? |
18 | springForceMagnitude = PUNCH_SPRING_CONSTANT * pmove->frametime; |
19 | springForceMagnitude = bound( 0, springForceMagnitude, 2 ); |
21 | pmove->vuser3 += punchangle * -springForceMagnitude; |
24 | punchangle[0] = bound( -89, punchangle[0], 89 ); |
25 | punchangle[1] = bound( -179, punchangle[1], 179 ); |
26 | punchangle[2] = bound( -89, punchangle[2], 89 ); |
__________________
Мой мод на Xash
Отправлено Дядя Миша 14-08-2021 в 13:50:
у меня DJVU или ты уже задавал этот вопрос?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено Aynekko 14-08-2021 в 14:18:
Цитата:
Дядя Миша писал:
у меня DJVU или ты уже задавал этот вопрос?
Был другой вопрос про "рваность" движения панча, это решилось увеличением дельты.
Добавлено 14-08-2021 в 17:18:
Цитата:
Aynekko писал:
если у одного клиента 30 фпс, а у другого 200, то у первого панч ооочень медленный, а у другого наоборот ускоренный. Фпс у обоих клиентов должен быть полностью одинаков, чтобы все нормально работало. Как это побороть?
Отбой - проблема решилась.
Кому надо, вот решение:
В игрока кидаем
C++ Source Code:
1 | void CBasePlayer::PunchAngle(void) |
3 | float PUNCH_DAMPING = 9.0f; // bigger number makes the response more damped, smaller is less damped |
4 | // currently the system will overshoot, with larger damping values it won't |
5 | float PUNCH_SPRING_CONSTANT = 65.0f; // bigger number increases the speed at which the view corrects |
8 | float springForceMagnitude; |
10 | if (pev->punchangle.Length() > 0.001 || pev->vuser3.Length() > 0.001) |
12 | pev->punchangle += pev->vuser3 * gpGlobals->frametime; |
13 | damping = 1.0f - (PUNCH_DAMPING * gpGlobals->frametime); |
18 | pev->vuser3 *= damping; |
21 | // UNDONE: Per-axis spring constant? |
22 | springForceMagnitude = PUNCH_SPRING_CONSTANT * gpGlobals->frametime; |
23 | springForceMagnitude = bound(0, springForceMagnitude, 2); |
25 | pev->vuser3 += pev->punchangle * -springForceMagnitude; |
28 | pev->punchangle[0] = bound(-89, pev->punchangle[0], 89); |
29 | pev->punchangle[1] = bound(-179, pev->punchangle[1], 179); |
30 | pev->punchangle[2] = bound(-89, pev->punchangle[2], 89); |
В postthink кидаем
C++ Source Code:
Из playermove вообще выкинуть этот панч.
Это слишком просто и гениально, поэтому буду искать, что сломалось 
__________________
Мой мод на Xash
Отправлено Дядя Миша 14-08-2021 в 14:30:
Цитата:
Aynekko писал:
Это слишком просто и гениально, поэтому буду искать, что сломалось
Мультик.__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено Aynekko 14-08-2021 в 14:37:
Цитата:
Дядя Миша писал:
Мультик.
Что конкретно могло сломаться? Я пока не обнаружил ничего такого. Пострелял гауссом, другой клиент видит все так же как и я (смотрю в оба экрана). Я не вижу никаких изменений, кроме позитивных - панч теперь у обоих клиентов одинаковый, и на любых фпс.__________________
Мой мод на Xash
Отправлено Дядя Миша 14-08-2021 в 15:21:
Этож по локалке. А так будут лаги, скорее всего.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено Aynekko 16-08-2021 в 19:33:
Не могу разобраться с параметром pparams->spectator на клиенте. Откуда он берется. Вот к примеру pmove->spectator говорит, что он активен, когда я переключаюсь в спектатора. В это же время в CalcRefDef pparams->spectator не активируется. Из-за этого я не могу применить некоторые настройки.
И другой вопрос. Как мне в этом refdef достать параметры клиента, вроде iuser1 и всякое такое прочее? Не могу никак найти.
__________________
Мой мод на Xash
Отправлено Ku2zoff 16-08-2021 в 19:58:
Цитата:
Aynekko писал:
Как мне в этом refdef достать параметры клиента, вроде iuser1
Для локального игрока - g_iUser. Для нелокального надо искать по индексу:
C++ Source Code:
gEngfuncs.GetEntityByIndex(player_index)->curstate.iuser1 |
Добавлено 17-08-2021 в 02:58:
Вообще, поле spectator имеется в секции Player_Encode в дельте. Так что по идее, для игроков этот параметр должен передаваться. Его нет в энтварсах, он есть в entity_state_t. Тут короче, надо задавать его вручную. А для локального клиента, как я уже писал - g_iUser1. Но я не уверен, что spectator вообще надо трогать. Скорее всего, это параметр для HLTV, то есть режима gEngfuncs.IsSpectateOnly.
Отправлено Aynekko 16-08-2021 в 20:01:
Цитата:
Ku2zoff писал:
Для локального игрока - g_iUser.
Спасибо, так и думал. Просто дело в том, что в ксашмоде их нет и вот я пытаюсь их как-то прикрутить (пока безуспешно). Извиняюсь, что сразу не упомянул про ксашмод. Надеялся, что есть более короткий путь.
Режим спектатора вот приделал на сервере, а с клиентом пока проблемы 
Добавлено 16-08-2021 в 23:01:
Цитата:
Ku2zoff писал:
поле spectator имеется в секции Player_Encode в дельте
Да, в дельте он есть, сейчас проверил. Странно тогда.__________________
Мой мод на Xash
Отправлено илья2 17-08-2021 в 15:55:
я кстати тоже спектатором интересуюсь пытаюсь добавить фишку как в dmc но все безуспешно. Как же все таки добавить эту фишку где её найти ? работает он как то так когда мы спавнимся то игрока самого нет он с пектаторе но когда мы нажимаем ок в меню то игрок спавниться.
__________________
илья
Отправлено Ku2zoff 17-08-2021 в 17:12:
Цитата:
илья2 писал:
игрока самого нет он с пектаторе
Не в спектаторе. Игрок невидим, несолиден, невосприимчив к урону, не может двигаться. Только вертеть головой.
Цитата:
илья2 писал:
пытаюсь добавить фишку как в dmc но все безуспешно
Чего там добавлять? Смотришь код MOTD из dmc, какая консольная команда отправляется при нажатии на кнопку OK. По этой команде всё находишь и копипастишь. Делов не больше, чем на пять минут.
Отправлено илья2 17-08-2021 в 17:46:
[QUOTE]Ku2zoff писал:
[B]Не в спектаторе. Игрок невидим, несолиден, невосприимчив к урону, не может двигаться. Только вертеть головой.
этот эффект я обнаружил в player.cpp в спавне игрока в этом ты прав.
неплохо бы спавн функцию игрока оттуда скопипастить в hl и будет как в dmc.
__________________
илья
Отправлено Aynekko 17-08-2021 в 18:26:
Цитата:
Aynekko писал:
Просто дело в том, что в ксашмоде их нет
Я тут со всем разобрался - в ксашмоде спектатор-режима вообще нет, там какие-то зачатки - StartObserver и… все. Я даже сомневаюсь что он работал. Наверное хлсдк очень древний брался за основу. g_iUser1 никакого тоже не было и в помине. В общем долго и упорно сверялся с актуальным хлсдк и более-менее собрал спектатора - правда без вида овервью карты. Эх, ксашмод, допиливать и допиливать еще. Но, быть может, соберу-таки мод, в который можно будет адекватно поиграть в мультик, а не только пройти сюжетку - благо перешел на FWGS недавно 
__________________
Мой мод на Xash
Отправлено илья2 17-08-2021 в 19:22:
ладно лучше не буду делать. это для тебя так легко для меня это целая эпопея.
__________________
илья