Интересует, как можно сохранить значение переменной в сейв и как его загрузить.
Например, хочу, чтобы при надевании костюма(или смене оружия) менялась скорость(увеличивалась или уменьшалась, не важно).
Надеваю, сохраняюсь, вдруг убили, загружаюсь, а скорость опять дефолтная.
Я так понял это все через IMPLEMENT_SAVERESTORE или что-то вроде того, но как это все работает?
__________________
Sometimes you have to get knocked down lower than you've even been to stand up taller than you everwere.
You so sad. No, i just die everyday...
I can't do anything around here without everybody getting up in my shit...
The aim of life is self-development.
Как я понял, ему надо сделать просто:
с сервера послать сигнал "начинаю зум" с финальным значением (эвент)
на сервере поменять pev->fov на желаемый
на клиенте поймать сигнал, начать плавно менять fov от текущего значения до пришедшего в эвенте.
в процессе изменения фова поймать и проигнорировать резкое изменение pev->fov игрока с сервера (т.е. не допустить "попадания его на экран")
когда процесс интерполяции фова закончен, перестать игнорить серверный фов
сравнить получившийся фов и серверный, при несовпадении вылететь в синий экран, повесить операционку, испортить бутсектор и бесконечно пытаться отправить багрепорт на несуществующий адрес
sas писал: И еще вопрос, можно ли сделать приближение у арбалета плавным, как в хл2?
Цитата:
~ X ~ писал: если с регулировкой, как в Unreal
И то и то не круто на самом деле, касаемо снайперки. Первый вариант годится для ironsight. Второй неудобен тем, что степень приближения регулируется только в большую сторону. Надо делать как в кс, скачками (с плавным изменением между ними, как в первом варианте), только регулировать колесом мыши туда и обратно. Чтоли накодить такое себе, пока есть желание?
Добавлено 12-04-2017 в 02:05:
Так. Сам ступенчатый зум сделал. Осталось только отключить перелистывание оружий в худе, и сделать, чтобы зум работал только для арбалета в режиме прицеливания. Ну и добавить плавность при переходах.
Добавлено 12-04-2017 в 02:23:
А вот, впрочем, более-менее рабочий вариант, написанный на коленке:
В crossbow.cpp приводим указанные ниже строки к такому виду:
if ( gHUD.m_fPlayerDead || (gHUD.m_iHideHUDDisplay & (HIDEHUD_WEAPONS | HIDEHUD_ALL)) )
5
return;
6
7
if (gHUD.m_iFOV != 90)
8
{
9
gEngfuncs.pfnClientCmd("zoom_out\n");
10
return;
11
}
12
// остальной код функции
13
}
14
15
// Selects the previous item in the menu
16
void CHudAmmo::UserCmd_PrevWeapon(void)
17
{
18
if ( gHUD.m_fPlayerDead || (gHUD.m_iHideHUDDisplay & (HIDEHUD_WEAPONS | HIDEHUD_ALL)) )
19
return;
20
21
if (gHUD.m_iFOV != 90)
22
{
23
gEngfuncs.pfnClientCmd("zoom_in\n");
24
return;
25
};
26
// остальной код функции
27
}
Плавность пока неохота делать.
Добавлено 12-04-2017 в 02:30:
З.Ы. тут как ни крути, идёт привязка к командам invnext и invprev. У меня колесо вверх - invprev, колесо вниз - invnext, как в халфе по-умолчанию. Поэтому приближение/удаление как бы противоположны пред/след оружию. Если у вас наоборот, то наверное будет удобнее поменять коды в UserCmd_NextWeapon и UserCmd_PrevWeapon местами.
PLut не считая того, что придётся лишний раз ковырять код UpdateClientData и посылать на клиент iGunMode. Всего-то ничего для новичка, связаться с клиентскими оружиями.
Немного плавности в тему:
Код в функции void CHud::Think
C++ Source Code:
1
if ( newfov == 0 )
2
{
3
m_iFOV = default_fov->value;
4
}
5
else
6
{
7
m_iFOV = newfov;
8
}
Нужно заменить на такой:
C++ Source Code:
1
float speed = 5.0;
2
3
if (newfov == 0)
4
{
5
newfov = default_fov->value;
6
7
if (m_iFOV < 80)
8
speed = 15.0;
9
}
10
11
float mod = newfov - m_iFOV;
12
if (mod < 0) mod *= -1;
13
if (mod < 30) mod = 30;
14
15
if (m_iFOV < newfov)
16
{
17
m_iFOV += gHUD.m_flTimeDelta * speed * mod;
18
19
if (m_iFOV > newfov)
20
m_iFOV = newfov;
21
}
22
23
if (m_iFOV > newfov)
24
{
25
m_iFOV -= gHUD.m_flTimeDelta * speed * mod;
26
27
if (m_iFOV < newfov)
28
m_iFOV = newfov;
29
}
Тоже на коленке написан, за 10 минут. С оглядкой на сорцы паранойи. Вроде работает нормально. Если к первой половине пояснения были не нужны, то тут я кое-что поясню. speed - скорость зумирования. Зачем вообще разные значения? Чтобы при резком отключении зума вообще (выкл прицела), фов возвращался в нормальный быстрее. Например, при смене на другое оружие. Значение m_iFOV = 80 это минимальный зум для арбалета, указанный в первой половине кода. Ну а остальное всё из паранойи. Можно конечно сделать ещё красивее, и поиграться со значениями.
Добавлено 12-04-2017 в 19:14:
Кстати, плавность не работает при отключенных клиентских пушках. Но это легко исправить.