In short terms there is this issue of the bullets which are being shot from a gun which i had scripted and the bullets appear laggy and behind the player and not exact where the player had shot it.

Sorry my about my code being unclean.

Server CODE:




--main
local remote = game.ReplicatedStorage.RemoteEwents.Remote1


disabled = false

remote.OnServerEvent:connect(function(player,barrelpos,mousepos,distance,name)
	

	local plr = game.Players.LocalPlayer
local chr = player.Character
local tool = chr:FindFirstChild(name)
local dmg = tool.Handle.Damage.Value
local ammo = tool.Handle.Ammo
local reloadtime = tool.Handle.Reloadtime	
local reloading = false
local maxammo = tool.Handle.MaxAmmo

		local function reload()
		reloading = false
		ammo.Value = maxammo.Value
		disabled = true
		tool.Handle.Reload:Play()
		wait(tool.Handle.Reloadtime.Value)
		disabled = false
		end
		--creator
	
	
	if ammo.Value <= 0 then
		reloading = true
		if reloading == true then
			reload()
			wait(reloadtime.Value)
		end
	end
	
	local function onKeyPress(inputObject, gameProcessedEvent)
		if inputObject.KeyCode == Enum.KeyCode.R then
			reloading = true
		    if reloading == true then
			reload()
			wait(reloadtime.Value)
		end
		end
	end
 
game:GetService("UserInputService").InputBegan:connect(onKeyPress)
	
	
	
	if ammo.Value >=1 and reloading == false and disabled == false then 
		
		local ray = Ray.new(barrelpos, (mousepos - barrelpos).unit * 3000)
		local part,position = game.Workspace:FindPartOnRay(ray, player.Character,false,true)
		local bullet = Instance.new("Part")
		ammo.Value = ammo.Value - 1
		tool.Handle.Fire:Play()
		bullet.Anchored = true
		bullet.CanCollide = false
		bullet.BrickColor = player.TeamColor
		bullet.FormFactor = "Custom"
		local dist = (barrelpos - mousepos).magnitude
		bullet.Size = Vector3.new(0.3,0.3,dist)
		bullet.Parent = workspace
		bullet.TopSurface = "Smooth"
		bullet.BottomSurface = "Smooth"
		bullet.Transparency = 0.5
		
		game.Debris:AddItem(bullet,0.1)	
		
		for i = 0, dist,6 do
			bullet.CFrame = CFrame.new(tool.Barrel.CFrame.p,position) * CFrame.new(0,0, -dist/2)
		end
		if part then
		local humanoid = part.Parent:FindFirstChild("Humanoid")	
		
		
		if humanoid then
			local plrname = part.Parent.Name
			local players = game.Players:FindFirstChild(plrname)
			print(plrname)
			

			
			local plrname1 = player.Name
			
			if  player.TeamColor ~= players.TeamColor and tool.Handle.Teamkill.Value == false then
				humanoid:TakeDamage(dmg)
				tool.Handle.Click:Play()
			else
				print("isinteam")
				if tool.Handle.Teamkill.Value == true then
					humanoid:TakeDamage(dmg)
				end
			end
			local killed = false
			local creator = Instance.new("StringValue")
			if humanoid.Health <= 0 then
				
	
				
				
			end
			
			
			
			end
		end
	end	

end)




Client code:

local Player = game.Players.LocalPlayer
wait(0.5)
local gun = script.Parent
local remote = game.ReplicatedStorage.RemoteEwents.Remote1
local pgui = Player.PlayerGui.ammo.Frame
local maxammo = script.Parent.Handle.MaxAmmo
local ammo = script.Parent.Handle.Ammo


gun.Equipped:Connect(function(mouse)
	
	pgui.Visible = true
	gun.Unequipped:connect(function()
		pgui.Visible = false
	end)
	
	mouse.Icon = 'rbxassetid://131581677'
	local friendly = "http://www.roblox.com/asset/?id=131718487"
	local enemy = "http://www.roblox.com/asset/?id=131718495"
	
	
	local auto = script.Parent.Handle.Auto
	mouse.Button1Down:connect(function()
		
		
		if auto.Value == false then
			local name = gun.Name
			local distance1 = require(script.ModuleScript)
			local distance = nil
			remote:FireServer(gun.Barrel.CFrame.p, mouse.Hit.p, distance,name)
			
		end
	
	end)
	-- if its auto
	local inptSrvc = game:GetService("UserInputService")
	local name = gun.Name
	local distance1 = require(script.ModuleScript)
	local distance = nil
	local firerate =  script.Parent.Handle.FireRate
	
		while true do
			wait(0)
		    if inptSrvc:IsMouseButtonPressed(0) then
			
		        if auto.Value == true then
			        wait(firerate.Value)
					local function update()
						
						
						
						-- 
						
						pgui:WaitForChild("Maxammo")
						pgui:WaitForChild("Maxammo")
						pgui.Maxammo.Text = maxammo.Value
	 					pgui.ammoval.Text = ammo.Value
						if pgui.ammoval.Text == 0 then
							wait(2)
						end		
					end
					
					
					-- Whilewait
					update()
					
					
					remote:FireServer(gun.Barrel.CFrame.p, mouse.Hit.p, distance,name)
				end
		    end
       end
end)