Короче заметил что в КС при стрельбе есть разброс пуль, чего увы не наблюдается в ХЛ, также при прыжке увеличивается разброс, когда на лестнице, и даже при самой стрельбе прицел поднимается и патроны тоже как бы летят выше, а в Хл прицел тупо поднимается, но патроны летят в одно место, кто нибудь может скинуть или написать тутор про отдачу и всё остальное. заранее спасибо.
Нашел в инете статью про рекоил, но она на Немецком кто поможет перевести и разобратся, я зделал примерно, но у меня один баг при стрельбе прицел поднимается вверх, когда я нестреляю он нехочет возвращатся на место а остаётся где был, мне бы сделать так чтобы он возвращался на место после стрельбы. Вот ссылка на статью : http://www.resourcecode.de/view.php?id=1722
Recoil
31.122 003, 16:29 ч. - 2 примечания
Примечание: содержание этой стороны содержит 2 Tutorials к теме Recoil.
От HankY:
В этом делении речь идет о Recoil, оружие путешествует кое-что после Наверху и качается к сторонам, и не как в уже реализованном V_PunchAxis.
Теперь, как точно ты вдалбливаешь однажды в код, второстепенен, возможности были бы:
- событию стоимости Recoil дают с собой,
- FireBullets функция в клиенте вокруг этого Paraneter расширяют
- для каждого Waffenenvent Recoil делают ... это, однако, Performance пожирает!
Мы расширим функцию FireBullets вокруг параметра, а именно его Funktionsdefenition а также Funkion:
void EV_HLDM_FireBullets (int idx, колеблись *forward, колеблись *right, колеблись *up, int cShots, колеблись *vecSrc, колеблись *vecDirShooting, колеблись flDistance, int iBulletType,
int iTracerFreq, int *tracerCount, колеблись flSpreadX, колеблись flSpreadY, колеблись recoil=0);
и в функции:
void EV_HLDM_FireBullets (int idx, колеблись *forward, колеблись *right, колеблись *up, int cShots, колеблись *vecSrc, колеблись *vecDirShooting, колеблись flDistance, int iBulletType,
int iTracerFreq, int *tracerCount, колеблись flSpreadX, колеблись flSpreadY, колеблись recoil)
{...
Там мы связываем теперь следующее в них Там мы связываем теперь следующее в "for (iShot = 1 ; iShot <= cShots ; iShot ++)" шлифует:
if (EV_IsLocal (idx))
{
vec3_t vec_Recoil;
gEngfuncs. GetViewAngles (vec_Recoil);
vec_Recoil.x - = recoil;
gEngfuncs. SetViewAngles (vec_Recoil);
}
Что могли бы горячий?
" if (EV_IsLocal (idx)) " является к страхуют, который только он, который стреляет, который recoil получает,
с "vec3_t vec_Recoil ;" мы достаем нам в первый раз vec3_t переменные величины по имени vec_Recoil.
"gEngfuncs . GetViewAngles (vec_Recoil ;" пишут актуальный "ViewAngle" (где взглядывают как) в vec_recoil переменных величинах.
vec_Recoil.x - = recoil; позволяет x стоимость vec_Recoil переменных величин уменьшать кое-что, а именно вокруг recoil стоимости, к которой я прихожу прибывать дальше внизу. (рвет, однако упорствуй "-" наверх!)
Если ты не понимаешь, почему ось абсцисс, мы хотим, все же, oben/unten beinflussen: это поворачивается, не откладывается!
Тот, кто имеет желание, умеет себе Recoil также еще по ссылкам / rechts, vorne/hinten устанавливают с той же самой переменной величиной.
z. B.:
gEngfuncs. GetViewAngles (vec_Recoil);
vec_Recoil.x - = recoil;
int i = gEngfuncs.pfnRandomLong (0, 1);
if (i)
{
vec_Recoil.y - = recoill / 2; // пол-укрепляет
vec_Recoil.z - = recoill / 2; // даже пол!
}
else
{
vec_Recoil.y + = recoill / 2; // пол-сильный </щепку>
vec_Recoil.z + = recoill / 2; // даже пол!
}
//не протестированный
gEngfuncs. SetViewAngles (vec_Recoil); // ставит ViewAngle на vec_Recoil.
Если так хорошо, еще нельзя компилировать, так как там отсутствует еще кое-что важное:
В каждом Waffevent у клиента мы имеем строку, которую легко нужно перепутывать со следующими:
EV_HLDM_FireBullets (idx, forward, right, up, 1, vecSrc, vecAiming, 8 192, BULLET_PLAYER_357, 0,0, args-> fparam1, args-> fparam2);
Там должен идти теперь (смотри наверху) еще наш Recoil параметр чисто:
EV_HLDM_FireBullets (idx, forward, right, up, 1, vecSrc, vecAiming, 8 192, BULLET_PLAYER_357, 0,0, args-> fparam1, args-> fparam2, WAFFENNAME_RECOIL);
wärs тогда уже, #Definiere лучше всего в seppereaten recoil.h Recoilwerte, например, 1.2 или 0.8, однако, не гораздо выше!
Кто может давать с собой подходящий Recoilvariable, конечно, поднимается PLAYBACK_EVENT в сервере, например, args-> iparam1.
EV_HLDM_FireBullets (idx, forward, right, up, 1, vecSrc, vecAiming, 8 192, BULLET_PLAYER_357, 0,0, args-> fparam1, args-> fparam2, <span class = "changed"> args-> iparam1 </щепку> );
===============================================================================
От мистера Т:
Легко вводимый Recoil
Иди в ev_hldm.cpp (лежит в клиенте).
Теперь ты идешь к оружию при ты у Recoil хотел вводить.
Я беру однажды как пример MP5:
......
//======================
// СТАРТ MP5
//======================
void EV_FireMP5 (event_args_t *args)
{
int idx;
vec3_t origin;
vec3_t angles;
vec3_t velocity;
// Мистер Т Рекойль-Штарт
vec3_t viewangles;
int staerkedesrecoils = 2.00; // Здесь указывается сила Recoils
// Мистер Т Рекойль Энде
>>Мистер Т Рекойль-Штарт и Мистер Т Рекойль Энде
>> делают ... это,
И что они такое делают ?
З.Ы. не доверяй электронным переводчикам имхо бред выходит однако хоть вступление я перевел
Мистер Т Рекойль-Штарт и Мистер Т Рекойль Энде мда ...
Примечание: содержание этой страницы содержит 2 туториала на тему "Отдача" .
От HankY:
Здесь пойдет речь об реализации отдачи , как оружие передвигается при стрельбе , и уже не реализуется как в V_PunchAxis.
Теперь если бы мы записывали в код , являющийся второстепенным , возможности были бы: ....
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
ToMMuk всё это просто - разброс при стрельбе в кс зависит от скорости игрока и его положения
(сидит или стоит) + есть ли у него под ногами почва. Вот, это стрельба патронами:
Заменяем Vector( 0.02, 0.02, 0.02 ) на (Vector( 0.02, 0.02, 0.02 )*accuracy). accuracy это некая переменная, которая варьируется в зависимости от вышеперечисленных
условий. К примеру:
C++ Source Code:
float accuracy = m_pPlayer->pev->velocity;
// Разброс зависит от скорости игрока, если она равна нулю, то меткость идеальная: Vector( 0.02, 0.02, 0.02 )*0 получается Vector( 0.0, 0.0, 0.0 ) - отклонение пуль по осям x,y,z - нулевое
accuracy = accuracy*1.5; // когда игрок не имеет почвы под ногами разброс больше в полтора раза
12
}
Это всё лишь предположение, я не проверял. Может что-то неправильно. Но идею, надеюсь, ты уловил.
Ещё можно указать условие, когда игрок на лестнице, кажется тогда у него MOVETYPE_FLY.
По поводу того, что с каждым следующим выстрелом разброс увеличивается, то тут можно зацепиться
за количество патронов в обойме(вернее их расход)...
З.Ы. меткость оружия указывается на сервере а не на клиенте. Это про отдачу (тряска экрана), а у нас про меткость вопрос.
ToMMuK я же писал, что это предположение. Кстати, если писать на клиенте V_PunchAxis, то только будет трястись экран...
Если на сервере - PunchAngle, то после нескольких выстрелов прицел по-страшному задирается, как в Day of Defeat. Добавить разброс - и все дела. Только чтобы он изменялся. ToMMuK делай не так
C++ Source Code:
1
(Vector( 0.02, 0.02, 0.02 )*accuracy
2
//А вот так<img src="images/smilies/smile.gif" border="0" alt="">