Scripting HelpersARCHIVE
A little piece of Roblox history. Preserved for everyone, one question at a time.Read about the archive →
COMMUNITY QUESTION

[FE] How would I replicate mouse.Hit.p to the server?

I'm rather new to FE, but not to scripting. I'm not quite sure how this would work since mouse is client-side only..

LOCALSCRIPT

player = game.Players.LocalPlayer
repeat wait(.1) until player.Character
character = player.Character
mouse = player:GetMouse() 

mouse.Button1Down:connect(function(hit)
	game.Workspace.Events.Shoot:FireServer()
	script.Parent.Parent.V3.Value = mouse.Hit.p
end)

SERVERSCRIPT

repeat wait(.1) until script.Parent.Parent.Parent.Name ~= "StarterPack"
player = game.Players:FindFirstChild(script.Parent.Parent.Parent.Parent.Name)
character = player.Character
--
center = player.Character.UpperTorso
Cooldowns = player.Backpack.Cooldowns
Limit = Cooldowns.Limit
Current = Cooldowns.Current

game.Workspace.Events.Shoot.OnServerEvent:connect(function()
	if Cooldowns.Levitation.Value == 0 then
		local make = Instance.new("Part")
		make.Anchored = true
		make.CanCollide = false
		make.Transparency = 1
		make.Parent = character
		make.CFrame = player.Backpack.Vector3.Value --Basically here
		make.Name = "Target"
		if character.Ammo.Shot:FindFirstChild("Bullet") then
			local bullets = character.Ammo.Shot:GetChildren()
			for i=1,#bullets do
				if character:FindFirstChild("Target") then
					bullets[i].Propulsion.Target = character.Target
					bullets[i].Propulsion.MaxThrust = 10000
					bullets[i].Propulsion.TargetRadius = 25
					bullets[i].Propulsion.ThrustD = 0
					bullets[i].Anchored = false
					bullets[i]:FindFirstChild("Force"):destroy()
					bullets[i].Propulsion:Fire()
--					local touched = script.Touched:Clone()
--					touched.Parent = bullets[i]
--					touched.Disabled = false

					coroutine.resume(coroutine.create(function() 
						bullets[i].Touched:connect(function(hit)							
						if hit.Name ~= workspace.Name then
							if hit.Name ~= "Bullet" then
								if hit.Name ~= "Explosion" then
									if hit.Name == "Target" then
										local Target = character:FindFirstChild("Target")
										--
										local smoke = Instance.new("Smoke")
										local explode= Instance.new("Explosion")
											smoke.Parent = character:FindFirstChild("Target")
											explode.Parent = character:FindFirstChild("Target")
											Target.Name = "Explosion"
										bullets[i]:Destroy()
										
										local val = 0
											
										for i=1,20 do
										val = val+0.05
											if smoke ~= nil then
												smoke.Opacity = 0.05*(val)
												smoke.Size = 3
												explode.BlastPressure = 5
												explode.BlastRadius = 5
												explode.DestroyJointRadiusPercent = 0
												
										
												if smoke.Opacity == 1 then
													smoke:Destroy()
												end
											end
										end
										--
									else
										--	
										local Target = character:FindFirstChild("Target")
										--
										local smoke = Instance.new("Smoke")
										local explode= Instance.new("Explosion")
											smoke.Parent = hit
											explode.Parent = hit
											Target.Name = "Explosion"
										bullets[i]:Destroy()
										
										local val = 0
										
										for i=1,20 do
										val = val+0.05
											if smoke ~= nil then
											smoke.Opacity = 0.05*(val)
											smoke.Size = 3
										
												if smoke.Opacity == 1 then
													smoke:Destroy()
												end
											end
										end	
									end
								end
							end
						end		
						end)
					end))
					Cooldowns.Levitation.Value = 3
					Current.Value = Current.Value-1
				end
			end
		end
	end
end)

1 comment

0

Alright, what lines exactly are these happening on? Why not just send the tuple argument of the Hit.p to the server through the RemoteEvent?

1 answer

Simple enough..

In your LocalScript you would just send over the mouse's position when you fire the event

mouse.Button1Down:connect(function()
	local pos = mouse.Hit.p
	Event:FireServer(pos)
end
--This will send the mouse's position over to the server
--The ServerScript will read it as (PlrWhoFiredTheEvent, MousePositionInVector3)

So in your server script you'd just need to add another tuple argument to get the position which would be..

Event.OnServerEvent:connect(function(plr, mousepos)
	print(plr.Name.. ' clicked in this location: '..mousepos)	
	--first argument 'plr' is the person who fired the event (which is the first argument of server events) and the rest can be anything, but in this case 'mousepos' is the location of the mouse when we fired the event. 
end)

I think you should practice passing arguments with RemoteEvents if you're still having trouble.

You can place as many arguments as needed..

1 comment

0

I see, I just didn't know how to send something clientside to the server, but I think I understand it now.

This discussion is preserved as it was. New answers, comments, and votes are closed.