I made a simple raygun for my game, though when it fires, it fires from all humanoids. I have no idea why this is happening, any help?
gun link: https://www.roblox.com/catalog/02597468354/redirect
I made a simple raygun for my game, though when it fires, it fires from all humanoids. I have no idea why this is happening, any help?
gun link: https://www.roblox.com/catalog/02597468354/redirect
Here's the problem. The server script is being replicated across all clients and responds to that remote event. So, when one client fires the server, all the clients receive that event. Therefore, all clients are creating the laser from their gun. And here's a solution:
You could add the player as a parameter, and only fire the laser from their gun. It would work something like this.
Local Script
script.Parent.Activated:Connect(function()
local mouse = game.Players.LocalPlayer:GetMouse()
game.ReplicatedStorage.BulletHandler:FireServer(mouse.Hit.p, game.Players.LocalPlayer)
end)
Server Script
debounce = false
game.ReplicatedStorage.BulletHandler.OnServerEvent:Connect(function(plr, mousePos)
if plr == game.Players:GetPlayerFromCharacter(script.Parent.Parent) then
if debounce == false then
debounce = true
local beam = Instance.new("Part",game.Workspace)
beam.Material = "Neon"
--color Changes based on name
if script.Parent.Name == "RedGun" then
beam.BrickColor = BrickColor.Red()
elseif script.Parent.Name == "BluGun" then
beam.BrickColor = BrickColor.Blue()
end
-- will change to have color based on team
beam.Anchored = true
beam.CanCollide = false
local ray = Ray.new(script.Parent.Part.Position , (mousePos - script.Parent.Handle.Position).unit * 300)
local obj, endpoint = workspace:FindPartOnRay(ray, script.Parent.Parent)
local distance = (script.Parent.Handle.Position - endpoint).magnitude
beam.Size = Vector3.new(1,1, distance)
beam.CFrame = CFrame.new(script.Parent.Handle.Position, endpoint) * CFrame.new(0,0, -distance / 2)
if obj then
local humanoid = obj.Parent:FindFirstChild("Humanoid")
if humanoid then
humanoid:TakeDamage(20)
end
end
game:GetService("Debris"):AddItem(beam, .2)
wait(.5)
debounce = false
end
end
end)
This discussion is preserved as it was. New answers, comments, and votes are closed.
2 comments
script
plz