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

Update a Moving Handle From Tool Using RenderStepped? [Client-Server-Client]

Basically whenever a player presses a certain button it will act on the player's client, which will fire through the server, and then replicate back to everyone's client.

Here's the scripts:

Local-Script [FireServer]:

local Tool = script.Parent
local Events = Tool:WaitForChild("Events")
local V = Tool:WaitForChild("HandValue").Value
local debris = game:GetService("Debris")

local Player = game.Players.LocalPlayer
local UIS = game:GetService("UserInputService")

local character = Player.Character or Player.CharacterAdded:wait()
repeat wait() until character
local humanoid = character:WaitForChild("Humanoid")

local AroundLeft = Events:WaitForChild("AroundLeft")

local RS = game:GetService("RunService")
local d = true
local GripPos = Tool.GripPos

UIS.InputBegan:Connect(function(input, gameProcessed)
	if not gameProcessed then
	if input.UserInputType == Enum.UserInputType.Keyboard then
		if input.KeyCode == Enum.KeyCode.G then
			if d then
			d = false
			Tool.rMovement.Disabled=true
			Tool.lMovement.Disabled=true
			Tool.HandValue.Value = 1
			Tool.GripPos = Vector3.new(0.5, -0.5, -0.3)
			RS.RenderStepped:wait()
			AroundLeft:FireServer(GripPos)
			Tool.GripPos = Vector3.new(0.5, -0.75, -0.15)
			RS.RenderStepped:wait()
			AroundLeft:FireServer(GripPos)
			Tool.GripPos = Vector3.new(0.5, -1, 0)
			RS.RenderStepped:wait()
			AroundLeft:FireServer(GripPos)
			Tool.GripPos = Vector3.new(0.5, -1.25, 0.25)
			RS.RenderStepped:wait()
			AroundLeft:FireServer(GripPos)
			Tool.GripPos = Vector3.new(0.5, -1.5, 0.5)
			RS.RenderStepped:wait()
			AroundLeft:FireServer(GripPos)
			Tool.GripPos = Vector3.new(0.5, -1.5, 0.75)
			RS.RenderStepped:wait()
			AroundLeft:FireServer(GripPos)
			Tool.GripPos = Vector3.new(0.5, -1.5, 1)
			RS.RenderStepped:wait()
			AroundLeft:FireServer(GripPos)
			Tool.GripPos = Vector3.new(0.5, -1.5, 1.25)
			RS.RenderStepped:wait()
			AroundLeft:FireServer(GripPos)
			Tool.GripPos = Vector3.new(0.5, -1.5, 1.5)
			RS.RenderStepped:wait()
			AroundLeft:FireServer(GripPos)
			Tool.GripPos = Vector3.new(0.5, -1.25, 1.75)
			RS.RenderStepped:wait()
			AroundLeft:FireServer(GripPos)
			Tool.GripPos = Vector3.new(0.5, -1, 2)
			RS.RenderStepped:wait()
			AroundLeft:FireServer(GripPos)
			Tool.GripPos = Vector3.new(0.75, -0.75, 2.25)
			RS.RenderStepped:wait()
			AroundLeft:FireServer(GripPos)
			Tool.GripPos = Vector3.new(1, -0.5, 2.5)
			RS.RenderStepped:wait()
			AroundLeft:FireServer(GripPos)
			Tool.GripPos = Vector3.new(1.25, -0.25, 2.75)
			RS.RenderStepped:wait()
			AroundLeft:FireServer(GripPos)
			Tool.GripPos = Vector3.new(1.5, 0, 3)
			RS.RenderStepped:wait()
			AroundLeft:FireServer(GripPos)
			Tool.GripPos = Vector3.new(1.75, 0.25, 3)
			RS.RenderStepped:wait()
			AroundLeft:FireServer(GripPos)
			Tool.GripPos = Vector3.new(2, 0.5, 3)
			RS.RenderStepped:wait()
			AroundLeft:FireServer(GripPos)
			Tool.GripPos = Vector3.new(2.25, 0.75, 3)
			RS.RenderStepped:wait()
			AroundLeft:FireServer(GripPos)
			Tool.GripPos = Vector3.new(2.5, 1, 3)
			RS.RenderStepped:wait()
			AroundLeft:FireServer(GripPos)
			Tool.GripPos = Vector3.new(2.75, 1.25, 3)
			RS.RenderStepped:wait()
			AroundLeft:FireServer(GripPos)
			Tool.GripPos = Vector3.new(3, 1.5, 3)
			RS.RenderStepped:wait()
			AroundLeft:FireServer(GripPos)
			Tool.GripPos = Vector3.new(2.75, 1.75, 2.75)
			RS.RenderStepped:wait()
			AroundLeft:FireServer(GripPos)
			Tool.GripPos = Vector3.new(2.5, 2, 2.5)
			RS.RenderStepped:wait()
			AroundLeft:FireServer(GripPos)
			Tool.GripPos = Vector3.new(2.25, 2.25, 2.25)
			RS.RenderStepped:wait()
			AroundLeft:FireServer(GripPos)
			Tool.GripPos = Vector3.new(2, 2.5, 2)
			RS.RenderStepped:wait()
			AroundLeft:FireServer(GripPos)
			Tool.GripPos = Vector3.new(1.75, 2.75, 1.75)
			RS.RenderStepped:wait()
			AroundLeft:FireServer(GripPos)
			Tool.GripPos = Vector3.new(1.5, 3, 1.5)
			RS.RenderStepped:wait()
			AroundLeft:FireServer(GripPos)
			Tool.GripPos = Vector3.new(1.25, 3.25, 1.75)
			RS.RenderStepped:wait()
			AroundLeft:FireServer(GripPos)
			Tool.GripPos = Vector3.new(1, 3.5, 1)
			RS.RenderStepped:wait()
			AroundLeft:FireServer(GripPos)
			Tool.GripPos = Vector3.new(0.75, 3.25, 0.75)
			RS.RenderStepped:wait()
			AroundLeft:FireServer(GripPos)
			Tool.GripPos = Vector3.new(0.5, 3, 0.5)
			RS.RenderStepped:wait()
			AroundLeft:FireServer(GripPos)
			Tool.GripPos = Vector3.new(0.5, 2.75, 0.25)
			RS.RenderStepped:wait()
			AroundLeft:FireServer(GripPos)
			Tool.GripPos = Vector3.new(0.5, 2.25, 0)
			RS.RenderStepped:wait()
			AroundLeft:FireServer(GripPos)
			Tool.GripPos = Vector3.new(0.5, 2.5, 0)
			RS.RenderStepped:wait()
			AroundLeft:FireServer(GripPos)
			Tool.lMovement.Disabled=false
			d=true
			end
		end
	end
	end
end)

ServerScript [FireAllClients]:

local Tool = script.Parent
local Events = Tool:WaitForChild("Events")

local AroundLeft = Events:WaitForChild("AroundLeft")

local d = true
local GripPos = Tool.GripPos

AroundLeft.OnServerEvent:Connect(function(GripPosition) --What was given from firing the server
	if d then
		d = false
		AroundLeft:FireAllClients(GripPosition)
		wait()
		d = true
	end
end)

LocalScript [OnClientEvent]:

local Tool = script.Parent
local Events = Tool:FindFirstChild("Events")

local AroundLeft = Events:WaitForChild("AroundLeft")


local RS = game:GetService("RunService")

AroundLeft.OnClientEvent:Connect(function() --I've added GripPosition here, same result.
Tool.GripPos = Vector3.new(0.5, -0.5, -0.3) --then changed Tool.GripPos to GripPosition, nothing worked.
RS.RenderStepped:wait()
Tool.GripPos = Vector3.new(0.5, -0.75, -0.15)
RS.RenderStepped:wait()
Tool.GripPos = Vector3.new(0.5, -1, 0)
RS.RenderStepped:wait()
Tool.GripPos = Vector3.new(0.5, -1.25, 0.25)
RS.RenderStepped:wait()
Tool.GripPos = Vector3.new(0.5, -1.5, 0.5)
RS.RenderStepped:wait()
Tool.GripPos = Vector3.new(0.5, -1.5, 0.75)
RS.RenderStepped:wait()
Tool.GripPos = Vector3.new(0.5, -1.5, 1)
RS.RenderStepped:wait()
Tool.GripPos = Vector3.new(0.5, -1.5, 1.25)
RS.RenderStepped:wait()
Tool.GripPos = Vector3.new(0.5, -1.5, 1.5)
RS.RenderStepped:wait()
Tool.GripPos = Vector3.new(0.5, -1.25, 1.75)
RS.RenderStepped:wait()
Tool.GripPos = Vector3.new(0.5, -1, 2)
RS.RenderStepped:wait()
Tool.GripPos = Vector3.new(0.75, -0.75, 2.25)
RS.RenderStepped:wait()
Tool.GripPos = Vector3.new(1, -0.5, 2.5)
RS.RenderStepped:wait()
Tool.GripPos = Vector3.new(1.25, -0.25, 2.75)
RS.RenderStepped:wait()
Tool.GripPos = Vector3.new(1.5, 0, 3)
RS.RenderStepped:wait()
Tool.GripPos = Vector3.new(1.75, 0.25, 3)
RS.RenderStepped:wait()
Tool.GripPos = Vector3.new(2, 0.5, 3)
RS.RenderStepped:wait()
Tool.GripPos = Vector3.new(2.25, 0.75, 3)
RS.RenderStepped:wait()
Tool.GripPos = Vector3.new(2.5, 1, 3)
RS.RenderStepped:wait()
Tool.GripPos = Vector3.new(2.75, 1.25, 3)
RS.RenderStepped:wait()
Tool.GripPos = Vector3.new(3, 1.5, 3)
RS.RenderStepped:wait()
Tool.GripPos = Vector3.new(2.75, 1.75, 2.75)
RS.RenderStepped:wait()
Tool.GripPos = Vector3.new(2.5, 2, 2.5)
RS.RenderStepped:wait()
Tool.GripPos = Vector3.new(2.25, 2.25, 2.25)
RS.RenderStepped:wait()
Tool.GripPos = Vector3.new(2, 2.5, 2)
RS.RenderStepped:wait()
Tool.GripPos = Vector3.new(1.75, 2.75, 1.75)
RS.RenderStepped:wait()
Tool.GripPos = Vector3.new(1.5, 3, 1.5)
RS.RenderStepped:wait()
Tool.GripPos = Vector3.new(1.25, 3.25, 1.75)
RS.RenderStepped:wait()
Tool.GripPos = Vector3.new(1, 3.5, 1)
RS.RenderStepped:wait()
Tool.GripPos = Vector3.new(0.75, 3.25, 0.75)
RS.RenderStepped:wait()
Tool.GripPos = Vector3.new(0.5, 3, 0.5)
RS.RenderStepped:wait()
Tool.GripPos = Vector3.new(0.5, 2.75, 0.25)
RS.RenderStepped:wait()
Tool.GripPos = Vector3.new(0.5, 2.25, 0)
RS.RenderStepped:wait()
Tool.GripPos = Vector3.new(0.5, 2.5, 0)
RS.RenderStepped:wait()
end)

Disregard all the Tool.GripPos, I just need to know why this doesn't work when I'm in game. In all, I'm changing the Tool's Grip Position and moving it around, while making it move around 60 FPS compared to the 30 FPS ROBLOX has.

Thanks,

LukeGabrieI

1 answer

There's a problem in your server script.

The first parameter in OnServerEvent is the player who fired a remote, so GripPosition would be the second parameter.

just switch to this:

AroundLeft.OnServerEvent:Connect(function(plr, GripPosition)

and it should work even though I didn't really check the rest of the code

3 comments

0

it didn't work lol

0

also add gripPosition parameter in OnClientEvent

0

that didnt work either.

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