Files
2026-03-30 10:39:52 +03:00

83 lines
2.6 KiB
Lua

AddCSLuaFile("cl_init.lua")
AddCSLuaFile("shared.lua")
include("shared.lua")
ENT.Model = Model("models/viper/mw/attachments/crossbow/attachment_vm_sn_crossbow_mag_flashbolt.mdl")
ENT.AoeEntity = nil
local BaseClass = baseclass.Get(ENT.Base)
local function isCowerSupportedForNPC(npc)
for _, a in pairs(npc:GetSequenceList()) do
if (npc:GetSequenceActivity(npc:LookupSequence(a)) == ACT_COWER) then
return true
end
end
return false
end
--[[local supportedNpcs = {
["npc_antlion"] = "Flip1",
["npc_antlionguard"] = "Stunned01",
["npc_antlionguardian"] = "Stunned01",
["npc_hunter"] = "Shakeoff",
["npc_antlion_worker"] = "Flip1"
}]] --couldn't make these work
local lethalToNpcs = {"npc_barnacle", "npc_crow", "npc_pigeon", "npc_seagull"}
function ENT:Impact(tr, phys, bHull)
BaseClass.Impact(self, tr, phys, bHull)
if (tr.HitSky) then
return
end
self:EmitSound("MW19_Crossbow.Flashbang")
local radius = self.FlashRadius
local owner = self:GetOwner()
ParticleEffect("arrow_flashbang", tr.HitPos, Angle(), nil, 0)
util.Decal("Scorch", tr.HitPos, tr.HitPos - tr.HitNormal * 10, self)
timer.Simple(0.3, function() --ohshit moment
for _, e in pairs(ents.FindInSphere(tr.HitPos, radius)) do
if ((e:IsPlayer() || e:IsNPC()) && !e:IsLineOfSightClear(tr.HitPos + tr.HitNormal * 10)) then
continue
end
if (e:IsPlayer()) then
local dist = e:GetPos():DistToSqr(tr.HitPos)
local distDelta = 1 - math.Clamp(dist / (radius * radius), 0, 1)
local strength = Lerp(distDelta, 0, 2)
e:SendLua("LocalPlayer():EmitSound('MW19_Crossbow.Flashbang')")
local dot = e:EyeAngles():Forward():Dot((e:GetPos() - tr.HitPos):GetNormalized())
strength = strength * math.max(-dot, 0.1)
e:ScreenFade(SCREENFADE.IN, color_white, strength, strength * 0.5)
e:SetDSP(35)
continue
end
if (e:IsNPC()) then
e:StartEngineTask(89, 0) --task_sound_pain
if (isCowerSupportedForNPC(e)) then
e:SetSchedule(SCHED_COWER)
else
if (table.HasValue(lethalToNpcs, e:GetClass())) then
e:TakeDamage(e:Health(), self:GetOwner(), self || nil)
end
end
continue
end
end
end)
sound.EmitHint(SOUND_DANGER, self:GetPos(), self.FlashRadius, 6, nil) --needed for task (make them blinded for a little longer)
end