void RadiusFlash(Vector vecSrc, entvars_t *pevInflictor, entvars_t *pevAttacker, float flDamage, int iClassIgnore, int bitsDamageType) { CBaseEntity *pEntity = NULL; TraceResult tr; float flAdjustedDamage, falloff; Vector vecSpot; float flRadius = 1500; if (flRadius) falloff = flDamage / flRadius; else falloff = 1; int bInWater = (UTIL_PointContents(vecSrc) == CONTENTS_WATER); vecSrc.z += 1; while ((pEntity = UTIL_FindEntityInSphere(pEntity, vecSrc, 1500.0)) != NULL) { TraceResult tr2; Vector vecLOS; float flDot; float fadeTime; float fadeHold; int alpha; CBasePlayer *pPlayer; float currentHoldTime; if (!pEntity->IsPlayer()) continue; pPlayer = (CBasePlayer *)pEntity; if (pPlayer->pev->takedamage == DAMAGE_NO || pPlayer->pev->deadflag != DEAD_NO) continue; if (bInWater && pPlayer->pev->waterlevel == 0) continue; if (!bInWater && pPlayer->pev->waterlevel == 3) continue; vecSpot = pPlayer->BodyTarget(vecSrc); UTIL_TraceLine(vecSrc, vecSpot, dont_ignore_monsters, ENT(pevInflictor), &tr); g_ReGameHookchains.m_RadiusFlash_TraceLine.callChain(NULL, pPlayer, pevInflictor, pevAttacker, vecSrc, vecSpot, &tr); if (tr.flFraction != 1.0f && tr.pHit != pPlayer->pev->pContainingEntity) continue; #ifndef REGAMEDLL_FIXES UTIL_TraceLine(vecSpot, vecSrc, dont_ignore_monsters, tr.pHit, &tr2); if (tr2.flFraction >= 1.0) #endif { if (tr.fStartSolid) { tr.vecEndPos = vecSrc; tr.flFraction = 0; } flAdjustedDamage = flDamage - (vecSrc - tr.vecEndPos).Length() * falloff; if (flAdjustedDamage < 0) flAdjustedDamage = 0; UTIL_MakeVectors(pPlayer->pev->v_angle); vecLOS = vecSrc - pPlayer->EarPosition(); flDot = DotProduct(vecLOS, gpGlobals->v_forward); if (flDot < 0) { alpha = 200; fadeTime = flAdjustedDamage * 1.75; fadeHold = flAdjustedDamage / 3.5; } else { alpha = 255; fadeTime = flAdjustedDamage * 3; fadeHold = flAdjustedDamage / 1.5; } currentHoldTime = pPlayer->m_blindStartTime + pPlayer->m_blindHoldTime - gpGlobals->time; if (currentHoldTime > 0.0 && alpha == 255) fadeHold += currentHoldTime; if (pPlayer->m_blindStartTime != 0.0f && pPlayer->m_blindFadeTime != 0.0f) { if ((pPlayer->m_blindStartTime + pPlayer->m_blindFadeTime + pPlayer->m_blindHoldTime) > gpGlobals->time) { if (pPlayer->m_blindFadeTime > fadeTime) fadeTime = pPlayer->m_blindFadeTime; if (pPlayer->m_blindAlpha >= alpha) alpha = pPlayer->m_blindAlpha; } } Vector color(255, 255, 255); g_ReGameHookchains.m_PlayerBlind.callChain(PlayerBlind, pPlayer, pevInflictor, pevAttacker, fadeTime, fadeHold, alpha, color); } } }