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
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