HLFX.Ru Forum Страницы (15): « Первая ... « 5 6 7 8 [9] 10 11 12 13 » ... Последняя »
Показать все 214 сообщений этой темы на одной странице

HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Наши проекты (https://hlfx.ru/forum/forumdisplay.php?forumid=1)
-- X-Half-Life Deathmatch v3.0.3.8 ALPHA (https://hlfx.ru/forum/showthread.php?threadid=4893)


Отправлено XaeroX 26-11-2016 в 19:33:

Garux
Ну так я ж уже привёл решение.

__________________

xaerox on Vivino


Отправлено Garux 26-11-2016 в 19:40:

Ну таки хотелось в нём разобраться


Отправлено XaeroX 26-11-2016 в 19:49:

Цитата:
Ghoul [BB] писал:
В команде у нас два говнокодера-неудачника, которые сами не знают толком, что кодят и как оно всё в итоге будет работать. Это ж очевидно.

Эво как ты Мастера-то...

Добавлено 27-11-2016 в 02:49:

Garux
Тебе надо к ним в команду, в качестве математика.
Я, конечно, не их эйчар, но подозреваю, что банановое довольствие и три топора по праздникам в качестве бонуса они тебе с Мастером обеспечат.

__________________

xaerox on Vivino


Отправлено Chyvachok 26-11-2016 в 22:40:

Цитата:
~ X ~ писал:
Сделал милость.
C++ Source Code:
Vector UTIL_VecEnemyPrediction( const Vector &vecSrc, const Vector &vecEnemyPos, const Vector &vecEnemyVel, float flProjectileSpeed )
{
____Vector v = vecSrc - vecEnemyPos;
____float d = DotProduct( v, vecEnemyVel );
____float a = DotProduct( vecEnemyVel, vecEnemyVel ) - flProjectileSpeed * flProjectileSpeed;
____float dsq = sqrtf( d * d - DotProduct( v, v ) * a );
____float t1 = ( d + dsq ) / a;
____float t2 = ( d - dsq ) / a;
____return ( vecEnemyVel - v / max( t1, t2 ) ) / flProjectileSpeed;
}


Функция возвращает направление, в котором надо стрелять с упреждением.
Если прожектайлы медленные или игрок далеко - то, т.к. упреждение рассчитывается в строго определённый момент, резкая остановка игрока приведёт к тому, что монстры будут сильно мазать. Я бы использовал такой код только в случае, если игрок - на двери/поезде (т.е. есть basevelocity), либо если прожектайлы очень быстрые, либо игрок довольно близко. В волатиле, пожалуй, именно так и сделаю.
Пример использования в коде булсквида:


Я конечно кодер и математик тоже не ахти, попробовал заюзать на примере буллсквида, добавил код UTIL_VecEnemyPrediction в util.cpp и util.h, писало ошибку на max, заменил своим аналогом, потом добавил буллсквиду атаку, попробовал на карте с1а1с посмотреть как оно работает, где буллсквид мочит хедкрабов на другой стороне канавы, если двигаться из стороны в сторону присядом то попадает, если бегать, то он берет сильно большое упреждение и промахивается, там у буллсквида был разброс в оригинале халвы, я его убрал, плюет он прямо в игрока если стоять. Из-за того что в 6 студии что-то оно не хотело компилироваться с max, я функцию так изменил:

code:
Vector UTIL_VecEnemyPrediction( const Vector &vecSrc, const Vector &vecEnemyPos, const Vector &vecEnemyVel, float flProjectileSpeed ) { Vector v = vecSrc - vecEnemyPos; float d = DotProduct( v, vecEnemyVel ); float a = DotProduct( vecEnemyVel, vecEnemyVel ) - flProjectileSpeed * flProjectileSpeed; float dsq = sqrtf( d * d - DotProduct( v, v ) * a ); float t; float t1 = ( d + dsq ) / a; float t2 = ( d - dsq ) / a; if (t1 > t2) t=t1; else t=t2; return ( vecEnemyVel - v / t ) / flProjectileSpeed; }


Отправлено XaeroX 27-11-2016 в 05:51:

Увы, ничем помочь тут не могу: у меня на с1а1с буллсквид прекрасно попадает в игрока с упреждением, а без - как и в халфе, сильно мажет.
Для вас, по-видимому, остаётся только коэффициент 1.75.

__________________

xaerox on Vivino


Отправлено Ghoul [BB] 27-11-2016 в 06:53:

Цитата:
XaeroX писал:
Эво как ты Мастера-то...


Это даже не "МЫ", а ВЫ! Ты посмотри, что несколькими постами ранее творилось! Какие выпады совершались...
Я лишь подвёл итоги и назвал вещи своими именами. Так, как сложилось о них мнение у тут присутствующих. Не более. Свои личные оценки я оставил за скобками.

П.С. Может, у мя не работает в силу других причин? Кто бы мог знать? Нужно проверить т.к. у моего буллсквида прожектайль летит по параболе, т.е. на него действует гравитация.

Добавлено 27-11-2016 в 09:53:

.... Поверил безгравитационные прожектайлы... не работают.
Слишком большое упреждение.

__________________
Ты топчешь мир своими ботинками,
Не замечая куда наступаешь,
А время от тебя уходит цветными картинками,
Но ты даже этого не понимаешь.

Компрометирую данные своей учётной записи.
ЛОГИН: Ghoul [BB]
ПАРОЛЬ: paladin_solo


Отправлено XaeroX 27-11-2016 в 07:11:

Цитата:
Ghoul [BB] писал:
Я лишь подвёл итоги и назвал вещи своими именами. Так, как сложилось о них мнение у тут присутствующих. Не более.

Ну зачем же ты судишь за всех присутствующих.
Цитата:
Ghoul [BB] писал:
Поверил безгравитационные прожектайлы... не работают.
Слишком большое упреждение.

Н-да. Не понимаю, может, вы как-то не так тестируете? Важно не менять направление и скорость с момента выплёвывания булсквидом прожектайла. Потому что, очевидно, он отныне не властен над ним, а предсказывать ломаные и неравномерные траектории такой простой код не в состоянии.

__________________

xaerox on Vivino


Отправлено Chyvachok 27-11-2016 в 09:14:

Цитата:
XaeroX писал:
Н-да. Не понимаю, может, вы как-то не так тестируете? Важно не менять направление и скорость с момента выплёвывания булсквидом прожектайла. Потому что, очевидно, он отныне не властен над ним, а предсказывать ломаные и неравномерные траектории такой простой код не в состоянии.


Я попробовал этот код заюзать в коде XashXT, у буллсквида естественно снаряд летит как в простой халве, без гравитации и прямо, бегаю линейно, не меняя направления, что-то он все равно мимо плюет, т.к. плюет дальше чем надо. В чем дело, понять не могу никак.


Отправлено XaeroX 27-11-2016 в 09:18:

Chyvachok
Вот дллка, которую я тестирую и у меня с ней всё ок. Проверь её, пожалуйста.
Если у тебя и с ней не работает - то мы явно тестируем по-разному.

__________________

xaerox on Vivino


Отправлено Chyvachok 27-11-2016 в 11:08:

XaeroX проверил - я где то все таки накосячил, вот залил видео с твоим упреждением, с твоей dll-кой он попадает, если двигаться линейно, у меня он стабильно берет больше чем надо и ни разу не попадает. Кстати может вопрос совсем нубский, а из-за чего код в util.cpp выбивает ошибку error C2065: 'max' : undeclared identifier? Компилил 6-ой студией с 5 сервис паком.


Отправлено XaeroX 27-11-2016 в 11:19:

Цитата:
Chyvachok писал:
Кстати может вопрос совсем нубский, а из-за чего код в util.cpp выбивает ошибку error C2065: 'max' : undeclared identifier?

Возможно, у тебя в extdll.h нет макроса max?
C++ Source Code:
#ifndef max
#define max(a,b)  (((a) > (b)) ? (a) : (b))
#endif

Цитата:
Chyvachok писал:
с твоей dll-кой он попадает, если двигаться линейно, у меня он стабильно берет больше чем надо и ни разу не попадает

Ну чудеса...

Добавлено 27-11-2016 в 18:19:

Кстати, после видео появилась идея по доработке кода. Делать трассу от игрока в направлении, куда он предположительно сдвинется, и если там стенка - то пересчитывать направление прожектайла так, чтобы он настигал игрока именно у этой стенки.

__________________

xaerox on Vivino


Отправлено Chyvachok 27-11-2016 в 11:23:

Из игр где реализована стрельба на упреждение, мне еще вспоминается Паркан Железная Стратегия, там АИ со всего оружия делает поправку, не только с пушек что прямо без гравитации летят, как плевки буллсквида но и с оружия что ведут огонь по баллистической траектории, огнемет там так сгустками стреляет как инсинератор из Fallout New Vegas, помню завхватить бункер с огнеметом там легко - его снаряды медленные, и от них легко уходить, а вот с пушками куда сложнее, тут уже не хило так вилять надо чтобы в него зайти.

Добавлено 27-11-2016 в 13:23:

Цитата:
XaeroX писал:
Возможно, у тебя в extdll.h нет макроса max?


Выходит что его нету в 6 студии.

Цитата:
XaeroX писал:
Делать трассу от игрока в направлении, куда он предположительно сдвинется, и если там стенка - то пересчитывать направление прожектайла так, чтобы он настигал игрока именно у этой стенки


Хорошая идея, кстати еще интересно, код работает с снарядами с баллистической траекторией, типа плевков гонарча?


Отправлено XaeroX 27-11-2016 в 11:29:

Цитата:
Chyvachok писал:
Выходит что его нету в 6 студии

Я использовал СДК, который выложен ссылкой в ветке "Half-Life SDK", вверху.
http://hlfx.ru/pub/HL1_src_vs2005.zip
Может быть, я сам добавлял туда этот макрос, когда портировал сдк под новые студии - этого я уже не помню, давно было.

Цитата:
Chyvachok писал:
код работает с снарядами с баллистической траекторией, типа плевков гонарча?

Нет, баллистическая траектория сложнее, там нужно учитывать ускорение (т.е. гравитацию). Но при желании можно составить уравнения и решить их.

Добавлено 27-11-2016 в 18:29:

Chyvachok
Покажи-ка свой bullsquid.cpp.

__________________

xaerox on Vivino


Отправлено Chyvachok 27-11-2016 в 11:44:

XaeroX вот, свой, и заодно не измененный из КсашХТ, т.к. есть отличие от кода из халвы, вместо ( m_hEnemy->pev->origin + m_hEnemy->pev->view_ofs ) там m_hEnemy->EyePosition(). Я еще мог сделать ошибку в замене макроса max, или дело в XashXT?

code:
float t; float t1 = ( d + dsq ) / a; float t2 = ( d - dsq ) / a; if (t1 >= t2) t=t1; else t=t2; return ( vecEnemyVel - v / t ) / flProjectileSpeed;


Отправлено XaeroX 27-11-2016 в 11:59:

Гм, выглядит нормально.
Ну попробуй вставить код в чистый хлсдк и проверить.
Если там всё будет ок - значит, дело действительно в КсашХТ.

__________________

xaerox on Vivino


Временная зона GMT. Текущее время 13:30. Страницы (15): « Первая ... « 5 6 7 8 [9] 10 11 12 13 » ... Последняя »
Показать все 214 сообщений этой темы на одной странице

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