Ill only include beam code here, since the projectile script is pretty similar.
Hierarchy: StarterPack --> Tool --> LocalScript(Main) --> RemoteEvent(Function) --> Script(Handle) --> Bunch of particles
Here in the LocalScript(Main), I'm getting a userinput and on E press, I pass the mouse.hit.p to the remoteevent
game:GetService("UserInputService").InputBegan:Connect(function(input) if input.KeyCode == Enum.KeyCode.E and equipped == true and eCoolDown == false and isTyping == false and mainCoolDown == false then local BG = Instance.new("BodyGyro", humanoidRootPart) BG.maxTorque = Vector3.new(250000, 250000, 250000) BG.P = 6000 BG.D = 150 local BP = Instance.new("BodyPosition", humanoidRootPart) BP.MaxForce = Vector3.new(math.huge, math.huge, math.huge) local pos = humanoidRootPart.Position BP.P = 6000 BP.D = 150 script.Function:FireServer("KeyDown", "E") keydown = true local timer = 45 while keydown and timer > 0 do BP.Position = pos BG.CFrame = CFrame.new(humanoidRootPart.Position, mouse.hit.p) timer = timer - 1 wait() end local firePosition = mouse.hit.p wait(0.3) spawn(function() wait(1.2) BP:Destroy() BG:Destroy() end) script.Function:FireServer("KeyReleased", "E", firePosition) mainCoolDown = true spawn(function() wait(1.3) mainCoolDown = false end) eCoolDown = true wait(2) eCoolDown = false end end)
Script(Handle) receives and creates the laser beam
keydown = false mousePosition = nil RegMod = require(game.ReplicatedStorage.RegionModule) onCooldown = false script.Parent.OnServerEvent:Connect(function(player, command, ability, LastMousePosition) local c = player.Character or player.CharacterAdded:wait() if command == "KeyReleased" then keydown = false mousePosition = LastMousePosition end if command == "KeyDown" then keydown = true while keydown do wait(0.03) end if ability == "E" then local Beam = Instance.new("Part", game.Workspace.Beams) Beam.Shape = "Cylinder" Beam.BrickColor = BrickColor.new("Bright orange") Beam.Material = "Neon" Beam.Transparency = 0.1 Beam.CanCollide = false Beam.Anchored = true Beam.CFrame = c.HumanoidRootPart.CFrame Beam.CFrame = CFrame.new(c.HumanoidRootPart.Position, mousePosition) * CFrame.Angles(math.rad(0),math.rad(-90),math.rad(0)) Beam.CFrame = Beam.CFrame * CFrame.new(-2.5,1.5,0) Beam.Size = Vector3.new(0.1,0.1,0.1) local ignore = {c, workspace.Beams, workspace.FX, workspace.Junk, workspace.Projectiles} local RayStart = c.HumanoidRootPart.Position local RayEnd = mousePosition local Length = 200 local FireRay = Ray.new(RayStart, (RayEnd-RayStart).unit*Length) local HitPart,BeamPosition = game.Workspace:FindPartOnRayWithIgnoreList(FireRay, ignore) print(CFrame.new(c.HumanoidRootPart.Position, BeamPosition)) print(CFrame.new(c.HumanoidRootPart.Position, mousePosition)) print(CFrame.new(c.HumanoidRootPart.Position, Beam.CFrame.Position)) --These all print the same thing, so I think the error has to do with where mouse.hit.p actually is local BeamLength = Instance.new("NumberValue", Beam) BeamLength.Name = "BeamLength" BeamLength.Value = (BeamPosition - c.HumanoidRootPart.Position).magnitude --Rest of the script just registers damage and effects end end)
https://gyazo.com/3e11885d71c3dedde63aadaf73b4fa5f
Especially in the second cast, you can see the error. Any help would be appreciated :^)