HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Half-Life SDK (https://hlfx.ru/forum/forumdisplay.php?forumid=8)
-- Отдача от выстрела как в Counter-strike (https://hlfx.ru/forum/showthread.php?threadid=732)
Отправлено ToMMuK 11-06-2007 в 20:13:
Отдача от выстрела как в Counter-strike
Короче заметил что в КС при стрельбе есть разброс пуль, чего увы не наблюдается в ХЛ, также при прыжке увеличивается разброс, когда на лестнице, и даже при самой стрельбе прицел поднимается и патроны тоже как бы летят выше, а в Хл прицел тупо поднимается, но патроны летят в одно место, кто нибудь может скинуть или написать тутор про отдачу и всё остальное. заранее спасибо. 
__________________
Сайт латвийского мода
Игроки в халф лайф делятся на две больше группы - те, кто не доехал на поезде и те, кто прошел несколько раз.
Отправлено ToMMuK 13-06-2007 в 10:20:
Нашел в инете статью про рекоил, но она на Немецком кто поможет перевести и разобратся, я зделал примерно, но у меня один баг при стрельбе прицел поднимается вверх, когда я нестреляю он нехочет возвращатся на место а остаётся где был, мне бы сделать так чтобы он возвращался на место после стрельбы.
Вот ссылка на статью : http://www.resourcecode.de/view.php?id=1722
__________________
Сайт латвийского мода
Игроки в халф лайф делятся на две больше группы - те, кто не доехал на поезде и те, кто прошел несколько раз.
Отправлено fire64 13-06-2007 в 11:30:
сейчас выложу русский перевод
Добавлено 13-06-2007 в 15:30:
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 </щепку> );
При вопросах, и т. д. сообщение в [email protected]
© 2002, Hanky
===============================================================================
От мистера Т:
Легко вводимый 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
// Мистер Т Рекойль Энде
vec3_t ShellVelocity;
vec3_t ShellOrigin; int shell;
vec3_t vecSrc, vecAiming;
vec3_t up, right, forward;
колеблись flSpread = 0.01;
idx = args-> entindex;
VectorCopy (args-> origin, origin);
VectorCopy (args-> angles, angles);
VectorCopy (args-> velocity, velocity);
AngleVectors (angles, forward, right, up);
shell = gEngfuncs.pEventAPI-> EV_FindModelIndex ("модель / shell.mdl");
if (EV_IsLocal (idx))
{
// Мистер Т Рекойль-Штарт
gEngfuncs. GetViewAngles ((колеблись *) viewangles);
viewangles [PITCH] - = staerkedesrecoils;
gEngfuncs. SetViewAngles ((колеблись *) viewangles);
// Мистер Т Рекойль Энде
......
}
разбирайся сам я перевел промтом
__________________
Вся сила лысого кощея,
Сокрыта в башне из костей
Воздвигнутой, под небесами
На месте похорон людей
Отправлено ToMMuK 13-06-2007 в 11:43:
Пока читал, смеялься,
(колеблись)
Если честно то ничего непонял что тут написано 
__________________
Сайт латвийского мода
Игроки в халф лайф делятся на две больше группы - те, кто не доехал на поезде и те, кто прошел несколько раз.
Отправлено zimer 13-06-2007 в 12:11:
fire64 атлично перевел, маладец 
__________________
Рассыпалась соль - к ссоре.
Рассыпался сахар - к миру.
Рассыпался кокаин - к феерическим ощущениям и фантасмагорическим видениям.
Ласточки низко летают - будет дождь.
Коровы низко летают - рассыпался кокаин.
Отправлено FiEctro 13-06-2007 в 13:58:
>>Мистер Т Рекойль-Штарт и Мистер Т Рекойль Энде
>> делают ... это,
И что они такое делают ?
З.Ы. не доверяй электронным переводчикам имхо бред выходит однако хоть вступление я перевел 
Мистер Т Рекойль-Штарт и Мистер Т Рекойль Энде мда ...
Примечание: содержание этой страницы содержит 2 туториала на тему "Отдача" .
От HankY:
Здесь пойдет речь об реализации отдачи , как оружие передвигается при стрельбе , и уже не реализуется как в V_PunchAxis.
Теперь если бы мы записывали в код , являющийся второстепенным , возможности были бы: ....
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Отправлено JJoe 29-06-2007 в 19:46:
ToMMuK не знаю как у тебя. но у меня в Half-Life 1.1.1.1 есть разброс пуль и отдача
.
__________________
JJoe
Отправлено ToMMuK 29-06-2007 в 20:56:
То 1.1.1.1 а у меня то 1.1.1.0
__________________
Сайт латвийского мода
Игроки в халф лайф делятся на две больше группы - те, кто не доехал на поезде и те, кто прошел несколько раз.
Отправлено JJoe 30-06-2007 в 10:16:
Мне кажется тоже самое есть и в Half-Life 1.1.1.0.
__________________
JJoe
Отправлено Ku2zoff 04-07-2007 в 07:55:
ToMMuk всё это просто - разброс при стрельбе в кс зависит от скорости игрока и его положения
(сидит или стоит) + есть ли у него под ногами почва. Вот, это стрельба патронами:
C++ Source Code:
FireBulletsPlayer( 1, vecSrc, vecAiming, Vector( 0.02, 0.02, 0.02 ), 8192, BULLET_PLAYER_9MM, 0, 0, m_pPlayer->pev, m_pPlayer->random_seed ); |
Заменяем 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 - нулевое |
FireBulletsPlayer( 1, vecSrc, vecAiming, [b](Vector( 0.02, 0.02, 0.02 )*accuracy)[/b], 8192, BULLET_PLAYER_9MM, 0, 0, m_pPlayer->pev, m_pPlayer->random_seed ); |
ну или что-то подобное. Также можно сделать так:
C++ Source Code:
1 | if ( FBitSet( m_pPlayer->pev->flags, FL_DUCKING ) ) // игрок сидит |
3 | accuracy = accuracy/2; // точность выше в два раза (разброс меньше в два раза) |
5 | else if ( m_pPlayer->pev->button & IN_JUMP ) // прыжок |
7 | accuracy = accuracy*2; // наоборот |
9 | else if( FBitSet( !m_pPlayer->pev->flags, FL_ONGROUND ) ) |
11 | accuracy = accuracy*1.5; // когда игрок не имеет почвы под ногами разброс больше в полтора раза |
Это всё лишь предположение, я не проверял. Может что-то неправильно. Но идею, надеюсь, ты уловил.
Ещё можно указать условие, когда игрок на лестнице, кажется тогда у него MOVETYPE_FLY.
По поводу того, что с каждым следующим выстрелом разброс увеличивается, то тут можно зацепиться
за количество патронов в обойме(вернее их расход)...
З.Ы. меткость оружия указывается на сервере а не на клиенте. Это про отдачу (тряска экрана), а у нас про меткость вопрос.
Отправлено ToMMuK 04-07-2007 в 10:08:
Цитата:
Ku2zoff писал:
З.Ы. меткость оружия указывается на сервере а не на клиенте. Это про отдачу (тряска экрана), а у нас про меткость вопрос.
Ну так в КС Экран поднимается с разбросом пуль и трясётся именно так, вообще там непонятно что к чему но суть я уловил.
Добавлено 04-07-2007 в 12:52:
Ku2zoff ты поставь в ХЛ разброс по максимуму а пунч англ 0 я посмотрю как это выглядит, экран на месте а вся стена в дырках 
Добавлено 04-07-2007 в 14:08:
cannot convert from 'class Vector' to 'float'
(Vector( 0.02, 0.02, 0.02 )*accuracy) по другому надо как-то 
__________________
Сайт латвийского мода
Игроки в халф лайф делятся на две больше группы - те, кто не доехал на поезде и те, кто прошел несколько раз.
Отправлено Ku2zoff 23-07-2007 в 05:14:
Цитата:
cannot convert from 'class Vector' to 'float'
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=""> |
5 | float speed = m_pPlayer->pev->velocity.Length(); |
7 | if(speed >= 400) accuracy = Vector( 0.18, 0.18, 0.18 ); |
8 | if(speed >= 300 && speed < 400) accuracy = Vector( 0.16, 0.16, 0.16 ); |
9 | if(speed >= 200 && speed < 300) accuracy = Vector( 0.14, 0.14, 0.14 ); |
10 | if(speed >= 150 && speed < 200) accuracy = Vector( 0.12, 0.12, 0.12 ); |
11 | if(speed >= 100 && speed < 150) accuracy = Vector( 0.10, 0.10, 0.10 ); |
12 | if(speed >= 50 && speed < 100) accuracy = Vector( 0.08, 0.08, 0.08 ); |
13 | if(speed >= 0 && speed < 50) accuracy = Vector( 0.06, 0.06, 0.06 ); |
14 | else accuracy = Vector( 0.2, 0.2, 0.2 ); //This is my accuracy table |
16 | if ( m_pPlayer->pev->flags & FL_DUCKING ) // crouching |
18 | accuracy = accuracy/2; //It`s really works! |
25 | vecDir = m_pPlayer->FireBulletsPlayer( 1, vecSrc, vecAiming, accuracy, 8192, BULLET_PLAYER_357, 0, 0, m_pPlayer->pev, m_pPlayer->random_seed ); |
Отправлено Troll 05-08-2007 в 20:39:
А не проще через EventHook это осуществить?