Files
wnsrc/lua/entities/arccw_uc_40mm_flash.lua
lifestorm 94063e4369 Upload
2024-08-04 22:55:00 +03:00

80 lines
2.3 KiB
Lua

--[[
| This file was obtained through the combined efforts
| of Madbluntz & Plymouth Antiquarian Society.
|
| Credits: lifestorm, Gregory Wayne Rossel JR.,
| Maloy, DrPepper10 @ RIP, Atle!
|
| Visit for more: https://plymouth.thetwilightzone.ru/
--]]
AddCSLuaFile()
ENT.Base = "arccw_uc_40mm_he"
ENT.PrintName = "40mm Flash Grenade"
ENT.GrenadeDamage = 50
ENT.GrenadeRadius = 150
ENT.ExplosionEffect = false
ENT.Scorch = false
function ENT:DoDetonation()
local effectdata = EffectData()
effectdata:SetOrigin(self:GetPos())
if self:WaterLevel() >= 1 then
util.Effect("WaterSurfaceExplosion", effectdata)
self:EmitSound("weapons/underwater_explode3.wav", 125, 100, 1, CHAN_AUTO)
else
effectdata:SetMagnitude(4)
effectdata:SetScale(1)
effectdata:SetRadius(4)
effectdata:SetNormal(self:GetVelocity():GetNormalized())
util.Effect("Sparks", effectdata)
self:EmitSound("physics/metal/metal_box_break1.wav", 100, 200, 0.5)
end
-- TODO: these sounds need to be replaced (dependency)!
self:EmitSound("weapons/arccw/flashbang/flashbang_explode1.wav", 100, 100, 1, CHAN_AUTO)
self:EmitSound("weapons/arccw/flashbang/flashbang_explode1_distant.wav", 140, 100, 1, CHAN_AUTO)
util.Effect( "arccw_flashexplosion", effectdata)
local flashorigin = self:GetPos()
local flashpower = 512
local targets = ents.FindInSphere(flashorigin, flashpower)
for _, k in pairs(targets) do
if k:IsPlayer() then
local dist = k:EyePos():Distance(flashorigin)
local dp = (k:EyePos() - flashorigin):Dot(k:EyeAngles():Forward())
local time = Lerp( dp, 2.5, 0.25 )
time = Lerp( dist / flashpower, time, 0 )
if k:VisibleVec( flashorigin ) then
k:ScreenFade( SCREENFADE.IN, Color( 255, 255, 255, 255 ), 2.5, time )
end
k:SetDSP(37, false)
elseif k:IsNPC() then
k:SetNPCState(NPC_STATE_PLAYDEAD)
if timer.Exists( k:EntIndex() .. "_arccw_flashtimer" ) then
timer.Remove( k:EntIndex() .. "_arccw_flashtimer" )
end
timer.Create( k:EntIndex() .. "_arccw_flashtimer", 10, 1, function()
if !k:IsValid() then return end
k:SetNPCState(NPC_STATE_ALERT)
end)
end
end
end