HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Half-Life SDK (https://hlfx.ru/forum/forumdisplay.php?forumid=8)
-- FireBullets и рикошеты (https://hlfx.ru/forum/showthread.php?threadid=4496)
Отправлено Cybermax 21-11-2014 в 15:28:
Цитата:
~ X ~ писал:
Почему?
Я отказываюсь отвечать на этот вопрос. Скорее всего после него последует какая-то провакация в мой адрес в виде обвинения меня в упоротости и картинки на пол экрана и кучи смайлов а оно мне надо? Нет не надо.__________________
ㅤ
Отправлено GioHAUS0n 21-11-2014 в 16:07:
Цитата:
Cybermax писал:
Потому что в реале даже от одной пули 9мм можно убить особенно в голову.
А это забыл?
http://cs620025.vk.me/v620025081/165cc/IVxkL5bmwPM.jpg
Отправлено Cybermax 22-11-2014 в 01:06:
GioHAUS0n скажи у тебя есть справка из пнд гласящая о том что ты нормальный?
__________________
ㅤ
Отправлено GioHAUS0n 22-11-2014 в 04:48:
Цитата:
Cybermax писал:
GioHAUS0n скажи у тебя есть справка из пнд гласящая о том что ты нормальный?
- Есть в РесВК и РВК. Может вам сначала провериться, там?
- Это самая безвредная картинка. Вас тошнило или пропал аппетит на рагу?
- Не всегда хотел быть патологоанатомом, но думал об этом. Чтобы быть рядом с реальностью, а не иллюзией или манией величия.
Добавлено 22-11-2014 в 13:48:
- *Приблизительные* последствия в реальности от Gauss-Gun или Lightning-Gun:
http://cs617831.vk.me/v617831887/fdf8/ZCVeJhDtQRo.jpg
Отправлено Ku2zoff 24-11-2014 в 04:49:
Вот вам ещё одна версия. Эта мне больше нравится. Внимание! Не использует типы пуль, только урон. Типы пуль можно добавить, через них регулировать всякие там "шансы" рикошета, и индивидуальную пробивную силу.
C++ Source Code:
1 | Vector CBaseEntity::FireBulletsPlayer(ULONG cShots, Vector vecSrc, Vector vecDirShooting, Vector vecSpread, float flDistance, int iBulletType, int iTracerFreq, int iDamage, entvars_t *pevAttacker, int shared_rand) |
18 | gMultiDamage.type = DMG_BULLET | DMG_NEVERGIB; |
20 | for (ULONG iShot = 1; iShot <= cShots; iShot++) |
22 | x = UTIL_SharedRandomFloat( shared_rand + iShot, -0.5, 0.5 ) + UTIL_SharedRandomFloat( shared_rand + ( 1 + iShot ) , -0.5, 0.5 ); |
23 | y = UTIL_SharedRandomFloat( shared_rand + ( 2 + iShot ), -0.5, 0.5 ) + UTIL_SharedRandomFloat( shared_rand + ( 3 + iShot ), -0.5, 0.5 ); |
25 | vecDir = vecDirShooting + x * vecSpread.x * gpGlobals->v_right + y * vecSpread.y * gpGlobals->v_up; |
26 | vecEnd = vecSrc + vecDir * flDistance; |
28 | pentIgnore = ENT(pev); |
30 | UTIL_TraceLine(vecSrc, vecEnd, dont_ignore_monsters, pentIgnore, &tr); |
32 | int m_iDamageSaved = iDamage / 10; |
34 | while (iDamage > m_iDamageSaved) |
36 | if (tr.flFraction != 1.0) |
38 | pEntity = CBaseEntity::Instance(tr.pHit); |
40 | pEntity->TraceAttack(pevAttacker, iDamage, vecDir, &tr, DMG_BULLET); |
41 | DecalGunshot(&tr, iBulletType); |
43 | float n = -DotProduct(tr.vecPlaneNormal, vecDir); |
45 | if ((pEntity->pev->solid == SOLID_BSP) && (n < 0.5)) |
47 | Vector dirRic = 2.0 * tr.vecPlaneNormal * n + vecDir; |
48 | Vector srcRic = tr.vecEndPos + dirRic * 8; |
49 | Vector endRic = srcRic + dirRic * flDistance; |
51 | UTIL_Ricochet(srcRic, 1.0); |
56 | iDamage *= (0.65 - n); |
58 | // ALERT(at_console, "Damage: %i\n", iDamage); |
64 | UTIL_TraceLine(srcRic, endRic, dont_ignore_monsters, pentIgnore, &tr); |
68 | Vector endPos = tr.vecEndPos; |
70 | UTIL_TraceLine(tr.vecEndPos + vecDir * 8, vecEnd, dont_ignore_monsters, pentIgnore, &tr); |
74 | UTIL_TraceLine(tr.vecEndPos, endPos, dont_ignore_monsters, pentIgnore, &tr); |
76 | float n = (tr.vecEndPos - endPos).Length(); |
81 | if (tr.flFraction != 1.0) |
82 | DecalGunshot(&tr, iBulletType); |
90 | UTIL_TraceLine(tr.vecEndPos, vecEnd, dont_ignore_monsters, pentIgnore, &tr); |
97 | UTIL_BubbleTrail(vecSrc, tr.vecEndPos, (flDistance * tr.flFraction) / 64.0); |
100 | ApplyMultiDamage(pev, pevAttacker); |
102 | return Vector( x * vecSpread.x, y * vecSpread.y, 0.0 ); |
Добавлено 24-11-2014 в 10:49:
Эта реализация, кстати, рикошетит правильно, как гаусс, а так же отнимает правильно урон, только один раз в случае с дробовиком, а не на каждую пульку, как было в предыдущей. Есть один недостаток: эффект рикошета рисуется, и стенка простреливается, когда урон меньше 1/10, но после рикошета и прострела в конце новой трассы не ставится декаль и не наносится урон. Но это легко поправить.
Отправлено ~ X ~ 24-11-2014 в 10:53:
Цитата:
Ku2zoff писал:
правильно, как гаусс
Не забываем, что в гауссе до сих пор официально не исправлена ошибка, которая вызывает self-headshot. 
Выглядит, вроде бы, неплохо, но кажется, будто чего-то не хватает... Почему-то у меня этот код раза в четыре длиннее... 
__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]
Отправлено Ku2zoff 24-11-2014 в 14:09:
Цитата:
~ X ~ писал:
но кажется, будто чего-то не хватает
Да вроде бы всё в норме. Кстати, вылет обнаружился. Уже исправлено. Но сюда не выложу. Кому надо, сами догадаются 
Цитата:
~ X ~ писал:
не исправлена ошибка, которая вызывает self-headshot.
а я как раз с ней столкнулся в процессе написания этого кода. Только вот уже не припомню, в каком случае она возникала. То ли при переназначении vecSrc после рикошета, то ли vecDir. Причём застрелиться можно было АБСОЛЮТНО ВСЕГДА, а не так как с гауссом, при выстреле под 90 градусов в глухую стенку.
Добавлено 24-11-2014 в 20:09:
Цитата:
~ X ~ писал:
Не забываем, что в гауссе до сих пор официально не исправлена ошибка
Опять всплыло, кстати. Беспорядочные какие-то рикошеты появились. То рикошетит в ту же точку, куда попало первый раз, то в игрока. А почему это возникает? Я заметил, что всегда проявляется в каком-то определённом месте на карте, при попадании в определённую стенку под определённым углом.
Отправлено ONeiLL 24-11-2014 в 18:30:
Проще это написать рекурсивно, а потом, при желании, переделать на стэк
Отправлено Ku2zoff 24-11-2014 в 20:26:
Ещё раз переписал, избавился от одной неприятной вещи, когда при простреле сам прострел не делался, а новая трасса попадала в первую точку попадания (всегда проявляется в каком-то определённом месте на карте, при попадании в определённую стенку под определённым углом), и получалось, что один выстрел наносил урона раз в 20-30 больше положенного. Избавился от селф-хедшота, правда рикошеты теперь не как у гаусса, а строго под 90 градусов от первоначальной трассы. Ну может оно и к лучшему, можно стрелять за угол 
Отправлено ~ X ~ 25-11-2014 в 12:38:
Цитата:
Ku2zoff писал:
Ещё раз переписал
я же говорил... 
Нипынимаю, что такого страшного в рикошетах? Вот передавать их и синхронизировать по сети - да...
Добавлено 25-11-2014 в 15:38:
Кстати, о нехватании. Для затравки: какой может быть рикошет от matGrass, matWood, matFlesh? как оно поведёт себя на картах с 3d sky? 
Вариантов массы 
__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]