HLFX.Ru Forum
Показать все 13 сообщений этой темы на одной странице

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:

Half-Life Отдача от выстрела как в 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 ) )	// игрок сидит
2
{
3
  accuracy = accuracy/2; // точность выше в два раза (разброс меньше в два раза)
4
}
5
else if ( m_pPlayer->pev->button & IN_JUMP )	// прыжок
6
{
7
  accuracy = accuracy*2; // наоборот
8
}
9
else if( FBitSet( !m_pPlayer->pev->flags, FL_ONGROUND ) )
10
{
11
  accuracy = accuracy*1.5; // когда игрок не имеет почвы под ногами разброс больше в полтора раза
12
}

Это всё лишь предположение, я не проверял. Может что-то неправильно. Но идею, надеюсь, ты уловил.

Ещё можно указать условие, когда игрок на лестнице, кажется тогда у него 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="">
3
Vector accuracy;
4
 
5
float speed = m_pPlayer->pev->velocity.Length();
6
 
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
15
 
16
if ( m_pPlayer->pev->flags & FL_DUCKING )	// crouching
17
{
18
  accuracy = accuracy/2;  //It`s really works!
19
}
20
else
21
{
22
  accuracy = accuracy;
23
}
24
 
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 это осуществить?


Временная зона GMT. Текущее время 21:57.
Показать все 13 сообщений этой темы на одной странице

На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024