add sborka

This commit is contained in:
2026-03-31 10:27:04 +03:00
commit f5e5f56c84
2345 changed files with 382127 additions and 0 deletions

View File

@@ -0,0 +1,140 @@
local lasermat = Material("effects/laser1")
local flaremat = Material("effects/whiteflare")
function SWEP:DrawLaser(pos, ang, strength, thirdperson)
strength = strength or 1
local alwaysacc = self:GetValue("LaserAlwaysAccurate")
local behavior = (self:GetValue("ScopeHideWeapon") and self:IsInScope())
local vm = self:GetOwner():IsPlayer() and self:GetOwner():GetViewModel()
local curr_seq = IsValid(vm) and vm:GetSequenceName(vm:GetSequence())
local delta = behavior and 1 or 0
if IsValid(vm) and (alwaysacc or TacRP.ConVars["true_laser"]:GetBool()) and (self:GetBlindFireMode() <= 1) and !self:GetCustomize() and !behavior then
local d1 = (CurTime() - self:GetNextSecondaryFire()) / 1
if alwaysacc then
d1 = 1
elseif TacRP.ConVars["laser_beam"]:GetBool() then
d1 = math.min((CurTime() - self:GetNextPrimaryFire()) / 2, (CurTime() - self:GetNextSecondaryFire()) / 1)
elseif self:GetValue("RPM") < 120 then
d1 = math.min((CurTime() - self:GetNextPrimaryFire()) / 0.5, (CurTime() - self:GetNextSecondaryFire()) / 1)
end
local d2 = (curr_seq == "reload_start") and 0 or 1
local d3 = (1 - math.min(self:GetAnimLockTime() - CurTime()) / vm:SequenceDuration(vm:GetSequence()))
local d4 = self:CanShootInSprint() and 1 or (1 - self:GetSprintDelta()) ^ 2
if self:DoForceSightsBehavior() then d4 = self:GetSprintDelta() * self:GetSightDelta() end
local cutoff = 0.85
d3 = math.max(d3 - cutoff, 0) / (1 - cutoff)
delta = math.Clamp(self:GetReloading() and 0 or math.min(d1, d2, d3, d4), 0, 1)
end
local pos_tr = self:GetMuzzleOrigin()
if behavior then
ang = self:GetShootDir()
else
ang = LerpAngle(delta, ang, self:GetShootDir())
end
local tr = util.TraceLine({
start = pos_tr,
endpos = pos_tr + (ang:Forward() * 30000),
mask = MASK_OPAQUE,
filter = self:GetOwner()
})
if tr.StartSolid then return end
local laser_pos = tr.HitPos + tr.HitNormal
local adjusted_pos = thirdperson and laser_pos or TacRP.FormatViewModelAttachment(self.ViewModelFOV, laser_pos, false)
laser_pos = LerpVector(delta, laser_pos, adjusted_pos)
if behavior then
cam.Start3D()
pos = pos - (ang:Forward() * 256)
end
local col = self:GetValue("LaserColor")
if TacRP.ConVars["laser_beam"]:GetBool() then
local width = math.Rand(0.1, 0.2) * strength
render.SetMaterial(lasermat)
render.DrawBeam(pos, laser_pos, width * 0.3, 0, 1, Color(200, 200, 200))
render.DrawBeam(pos, laser_pos, width, 0, 1, col)
end
if tr.Hit and !tr.HitSky then
local mul = strength
local rad = math.Rand(4, 6) * mul
render.SetMaterial(flaremat)
render.DrawSprite(laser_pos, rad, rad, col)
render.DrawSprite(laser_pos, rad * 0.3, rad * 0.3, Color(200, 200, 200))
debugoverlay.Cross(tr.HitPos, 4, FrameTime() * 2, col)
end
if behavior then
cam.End3D()
end
end
function SWEP:DrawLasers(wm)
wm = wm or false
if self.Laser and self:GetTactical() then
local power = self.LaserPower or 2
if wm and self.LaserQCAttachmentWM then
local att = self:GetAttachment(self.LaserQCAttachmentWM)
if att then
self:DrawLaser(att.Pos, att.Ang, power, true)
end
elseif IsValid(self:GetOwner():GetViewModel()) and self.LaserQCAttachmentVM then
local vm = self:GetOwner():GetViewModel()
local att = vm:GetAttachment(self.LaserQCAttachmentVM)
if att then
local pos = TacRP.FormatViewModelAttachment(self.ViewModelFOV, att.Pos, false)
self:DrawLaser(pos, att.Ang, power)
end
end
end
for i, k in pairs(self.Attachments) do
if !k.Installed then continue end
local atttbl = TacRP.GetAttTable(k.Installed)
local power = atttbl.LaserPower or 2
if atttbl.Laser and self:GetTactical() then
if wm then
if atttbl.LaserQCAttachmentWM then
local att = self:GetAttachment(atttbl.LaserQCAttachmentWM)
if att then
self:DrawLaser(att.Pos, self:GetOwner():IsPlayer() and self:GetShootDir() or att.Ang, power, true)
end
elseif IsValid(k.WModel) then
if self:GetOwner():IsPlayer() then
self:DrawLaser(k.WModel:GetPos(), self:GetShootDir(), power, true)
else
self:DrawLaser(k.WModel:GetPos(), k.WModel:GetAngles(), power, true)
end
end
else
if IsValid(self:GetOwner():GetViewModel()) and atttbl.LaserQCAttachmentVM then
local vm = self:GetOwner():GetViewModel()
local att = vm:GetAttachment(atttbl.LaserQCAttachmentVM)
if att then
local pos = TacRP.FormatViewModelAttachment(self.ViewModelFOV, att.Pos, false)
self:DrawLaser(pos, att.Ang, power)
end
elseif IsValid(k.VModel) then
self:DrawLaser(k.VModel:GetPos() + (k.VModel:GetAngles():Up() * 0.75), k.VModel:GetAngles(), power)
end
end
end
end
end