mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-16 21:33:46 +03:00
80 lines
2.3 KiB
Lua
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
|