Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

Knockback

Статус пользователя Machette
сообщение 19.12.2014, 12:28
Сообщение #1


Стаж: 14 лет

Сообщений: 546
Благодарностей: 419
Полезность: 947

Здравствуйте c-s.net.ua
Нужна ваша помощь.
Дело в том, что у меня отброс от взрыва (мина/граната) работает не так, как должен работать.
Отброс отбрасывает в рандомную сторону (как бы не знает координатов взрыва, но координаты прописаны).
Вот код:
Цитата
make_knockback(iVictim, vOrigin, MINE_KNOCKBACK * float(Damage))

Цитата
stock make_knockback(victim, Float:origin[3], Float:maxspeed)
{
static Float:fVelocity[3];
set_pev(victim, pev_velocity, fVelocity);
kickback(victim, origin, maxspeed, fVelocity)
return (1);
}

Что же не так здесь?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя AndrewZ
сообщение 19.12.2014, 12:32
Сообщение #2


Иконка группы

Стаж: 18 лет
Город: Санкт-Петербург


Сообщений: 4700
Благодарностей: 2452
Полезность: 1018

Machette, ну может координаты кривые, откуда мы знаем?


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Machette
сообщение 19.12.2014, 18:40
Сообщение #3


Стаж: 14 лет

Сообщений: 546
Благодарностей: 419
Полезность: 947

Беруться координаты от обьекта, в моем случае это упавшая граната и координаты игрока.
Цитата
stock kickback(ent, Float:fOrigin[3], Float:fSpeed, Float:fVelocity[3])
{
new Float:fEntOrigin[3];
pev(ent, pev_origin, fEntOrigin)

new Float:fDistance[3];
fDistance[0] = fEntOrigin[0] - fOrigin[0];
fDistance[1] = fEntOrigin[1] - fOrigin[1];
fDistance[2] = fEntOrigin[2] - fOrigin[2];
new Float:fTime = (vector_distance( fEntOrigin,fOrigin ) / fSpeed);
fVelocity[0] = fDistance[0] / fTime;
fVelocity[1] = fDistance[1] / fTime;
fVelocity[2] = fDistance[2] / fTime;

return (fVelocity[0] && fVelocity[1] && fVelocity[2]);
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Radius
сообщение 19.12.2014, 18:56
Сообщение #4
Стаж: 12 лет

Сообщений: 454
Благодарностей: 418
Полезность: 330

Код:
set_pev(victim, pev_velocity, fVelocity);
kickback(victim, origin, maxspeed, fVelocity);

1ую строчку на 2ую, 2ую на первую. По-простому поменять местами.

Код:
kickback(victim, origin, maxspeed, fVelocity);
set_pev(victim, pev_velocity, fVelocity);


А вообще код не учитывает текущее velocity и ставит своё, что мягко говоря не реалистично. Например летел в одну сторону, от взырва гранаты изменил направление. Хотя взрыв должен оказывать влияние на первоначальный вектор движения.

Отредактировал: Radius, - 19.12.2014, 19:01
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Machette
сообщение 19.12.2014, 19:12
Сообщение #5


Стаж: 14 лет

Сообщений: 546
Благодарностей: 419
Полезность: 947

Radius, спасибо, помогло. yahoo.gif

Отредактировал: Machette, - 19.12.2014, 19:43
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: