Files
VnUtest/garrysmod/gamemodes/militaryrp/plugins/leyhitreg/leyhitreg/client/sendshots/fetchspreads.lua
2026-03-31 10:27:04 +03:00

138 lines
3.1 KiB
Lua

LeyHitreg.WeaponSpreads = {}
local vector_origin = vector_origin
function LeyHitreg:PlayerSwitchWeapon(ply, oldWep, newWep)
if (not IsValid(newWep)) then
return
end
local classname = newWep:GetClass()
if (not classname or self.WeaponSpreads[classname]) then
return
end
if (self:IsIgnoreWep(newWep)) then
self.WeaponSpreads[classname] = vector_origin
return
end
ply.LeyHitreg_NeedsSpreadForce = newWep
timer.Simple(1, function()
if (not IsValid(ply) or not IsValid(newWep)) then
return
end
ply.LeyHitreg_NeedsSpreadForce = nil
if (ply:GetActiveWeapon() != newWep) then
return
end
LeyHitreg.WeaponSpreads[classname] = LeyHitreg.WeaponSpreads[classname] or vector_origin
end)
LeyHitreg:SetFittingValidClip(newWep)
if (newWep.PrimaryAttack) then
newWep:PrimaryAttack()
elseif (newWep.Primary and newWep.Primary.Attack) then
newWep.Primary.Attack()
end
end
hook.Add("PlayerSwitchWeapon", "LeyHitreg:PlayerSwitchWeapon", function(...)
-- process switch at next frame so FireBullets uses proper wep
local t = {...}
timer.Simple(0, function()
LeyHitreg:PlayerSwitchWeapon(unpack(t))
end)
end)
function LeyHitreg:FetchSpreadFireBullets(ply, wep, bullet)
local spreadForceWep = ply.LeyHitreg_NeedsSpreadForce
local validSpreadForceWep = spreadForceWep != nil and IsValid(spreadForceWep)
-- if (validSpreadForceWep) then
-- wep = spreadForceWep
-- end
local weaponSpread = LeyHitreg:GetWeaponSpread(ply, wep, bullet)
self.WeaponSpreads[wep:GetClass()] = weaponSpread
if (validSpreadForceWep and wep == spreadForceWep) then
bullet.Damage = 1
bullet.Distance = 1
bullet.Src = Vector(-100000, -10000, -10000)
bullet.Dir = vector_origin
timer.Simple(0, function()
if (not IsValid(ply)) then
return
end
if (ply.LeyHitreg_NeedsSpreadForce == wep) then
ply.LeyHitreg_NeedsSpreadForce = nil
end
end)
return bullet
end
end
function LeyHitreg:EntityEmitSoundSpreadPrefire(data)
if (not data) then
return
end
local ent = data.Entity
if (not IsValid(ent)) then
return
end
if (ent:IsPlayer()) then
if (ent.LeyHitreg_NeedsSpreadForce) then
return false
end
local wep = ent:GetActiveWeapon()
if (not IsValid(wep)) then
return
end
if (wep.LeyHitreg_NeedsSpreadForce) then
return false
end
return
end
if (not ent:IsWeapon()) then
return
end
local ply = ent:GetOwner()
if (IsValid(ply) and ply:IsPlayer() and ply.LeyHitreg_NeedsSpreadForce) then
return false
end
if (ent.LeyHitreg_NeedsSpreadForce) then
return false
end
end
hook.Add("EntityEmitSound", "LeyHitreg:EntityEmitSoundSpreadPrefire", function(data)
local ret = LeyHitreg:EntityEmitSoundSpreadPrefire(data)
if (ret != nil) then
return ret
end
end)