Scripting Helpers is winding down operations and is now read-only. More info→
Ad
Log in to vote
0

How can i make GetMouse() without a localscript?

Asked by
Rukreep 15
3 years ago

I am doing a simple building script. I want to get the mouse of the localplayer to clone a part into a carpet on workspace. The script that i tested works (sort of), but what happens is that other players cannot see the blocks you placed. is there any way to get the mouse of a player without a localscript? Thank you!

0
thanks guys very cool Rukreep 15 — 3y

3 answers

Log in to vote
1
Answered by 3 years ago
Edited 3 years ago

No you can't do :GetMouse() on a normal script. This is because the server does not have a mouse - the server is not a player it is a machine. What you should be doing instead is using remote events and remote functions whenever you want something from the client to be sent over to the server, like pressing a button or getting the mouse's position.

-- in a local script
local Player = game:GetService("Players").LocalPlayer

while wait(1) do
    local Mouse = Player:GetMouse()
    RemoteEvent:FireServer(Mouse.Hit.p)
end)

And then:

-- in a server script

RemoteEvent.OnServerEvent:Connect(function(player, mousePosition)
    print(player.Name.." has his mouse at "..mousePosition)
end)

I think you are competent enough to know how to fit this into your script without further help.

Edit (you didn't know how to):

--this is located on ServerScriptService
local Plain = game.Lighting.Blocks.Plain
local build = Instance.new("RemoteEvent")
build.Parent = game.ReplicatedStorage
build.Name = "BuildEvent"

local function InsertPart (player, mousePosition)
    local Clone = Plain:Clone()
    Clone.Parent = game.Workspace.BuildParts
        Clone.Position = mousePosition
        script.Parent.Handle["Pop!"]:Play()
end
build.OnServerEvent:Connect(InsertPart)

-- in a local script in the tool
local player = game.Players.LocalPlayer
local build = game.ReplicatedStorage:WaitForChild("BuildEvent")

function onActivated()
    local mousePosition = player:GetMouse().Hit.p    
    build:FireServer(mousePosition)
end

script.Parent.Activated:connect(onActivated)
0
i have just heard about remoteevents, i have no idea what to do Rukreep 15 — 3y
0
Read through the Wiki, that's what. radiant_Light203 1166 — 3y
0
i've read it when danklua sent me the answer, still don't understand Rukreep 15 — 3y
0
i should also mention that i'm doing a tool Rukreep 15 — 3y
0
Create a remote event (it's an insertable object), and instead of creating a block on the client, fire the remote event with the mouse's position; connect a server script to that remote event and create the block there. radiant_Light203 1166 — 3y
Ad
Log in to vote
1
Answered by
danklua 72
3 years ago
Edited 3 years ago

:GetMouse() is only on the client, you would have to use RemoteEvents to transfer the data from the client to server here you can look what remote events are

0
i have no idea how to set that up Rukreep 15 — 3y
Log in to vote
0
Answered by
Rukreep 15
3 years ago

I have a new problem: I've followed the steps of this tutorial: https://www.youtube.com/watch?v=3wkPekjQvKg and the same problem happens when you put GetMouse() into a regular script i'll give you the piece of code

--this is located on ServerScriptService
local build = Instance.new("RemoteEvent")
build.Parent = game.ReplicatedStorage
build.Name = "BuildEvent"
local function InsertPart ()
    local Tool = script.Parent
    local Players = game:GetService("Players")
    local player = game.Players.LocalPlayer
    local mouse = player:GetMouse()

    --Building blocks--
    local Plain = game.Lighting.Blocks.Plain
    --Function--
    function onActivated()
        local clone = Plain:Clone()
        clone.Parent = game.Workspace.BuildParts
        Plain.Position = mouse.Hit.Position
        script.Parent.Handle["Pop!"]:Play()
    end
    script.Parent.Activated:connect(onActivated)

end
build.OnServerEvent:Connect(InsertPart)

and here's the tool

local build = game.ReplicatedStorage:WaitForChild("BuildEvent")
build:FireServer()
0
I've edited my answer have a look and tell me if it works. radiant_Light203 1166 — 3y
0
Did my answer work? Accept it if it did and if it didn't tell me what went wrong. radiant_Light203 1166 — 3y
0
Yes, it did. Rukreep 15 — 3y

Answer this question