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

How would I make this work in-game, GetMouse() Method?

Asked by 6 years ago

How would I get this to work in game since a server script can only access the > GetMouse() < method in studio.

This is basically for a gas tank so when you press on a block you get a 'pipe' that follows your mouse and then when you hover over a 'FuelCap' on a vehicle it refuels it.

Help would be nice, thanks.

local active = false
local activePlayer = nil
local mouse = nil

local currentRay = nil

local currentCap = nil

local rayPart = Instance.new("Part")
rayPart.Name = "Pipe"
rayPart.Transparency = 0
rayPart.Anchored = true
rayPart.CanCollide = false
rayPart.TopSurface = Enum.SurfaceType.SmoothNoOutlines
rayPart.BottomSurface = Enum.SurfaceType.SmoothNoOutlines
rayPart.FrontSurface = Enum.SurfaceType.SmoothNoOutlines
rayPart.BackSurface = Enum.SurfaceType.SmoothNoOutlines
rayPart.LeftSurface = Enum.SurfaceType.SmoothNoOutlines
rayPart.RightSurface = Enum.SurfaceType.SmoothNoOutlines
rayPart.formFactor = Enum.FormFactor.Custom
rayPart.BrickColor = BrickColor.new("Storm blue")
rayPart.Reflectance = 0
rayPart.Material = Enum.Material.Metal

local function Reset()
    active = false
    activePlayer = nil
    mouse = nil
    if currentCap ~= nil then
        water.Refilling.Value = false 
    end
    if currentRay ~= nil then
        currentRay:Destroy()
    end
    currentCap = nil
    currentRay = nil
end

script.Parent.ClickDetector.MouseClick:Connect(function(player)
    if not active then
        Reset()
        activePlayer = player
        active = true
    elseif active then
        Reset()
    end
end)

while true do
    wait()
    if active and activePlayer ~= nil then
        local mouse = activePlayer:GetMouse()

        mouse.Button1Down:Connect(function()
            Reset()
        end)

        if currentRay ~= nil then
            mouse.TargetFilter = currentRay
        end

        if currentCap == nil then
            ray = Ray.new(script.Parent.Position, (mouse.Hit.p - script.Parent.Position).unit)
        else
            ray = Ray.new(script.Parent.Position, (currentCap.Position - script.Parent.Position).unit)
        end

        local hit = mouse.Target

        if hit ~= nil then
            if hit.Name == "WaterCap" and not hit:FindFirstChild("Connected") then
                currentCap = hit
                local connect = Instance.new("BoolValue")
                connect.Parent = currentCap
                water = currentCap.Parent.Parent:FindFirstChild("Water")
                if water then
                        water.Refilling.Value = true 
                end
            end
        end

        local distance = (mouse.Hit.p - script.Parent.Position).magnitude

        if distance > 100 then
            distance = 100
        end

        if currentRay == nil then
            pipe = rayPart:clone()
        else
            pipe = currentRay
        end

        if currentCap ~= nil then
            position = currentCap.Position
        else
            position = mouse.Hit.p
            distance = distance-1
        end

        pipe.Size = Vector3.new(0.5, distance, 0.5)
        pipe.CFrame = CFrame.new(position, script.Parent.Position) * CFrame.new(0, 0, -distance/2) * CFrame.Angles(math.rad(90),0,0)
        pipe.Parent = script.Parent.Parent

        currentRay = pipe

        if currentCap ~= nil then
            activePlayer = nil
            active = false
            mouse = nil
        end
    end
end

[If you would have to rewrite it then tell me what I need to change/do so I can do it myself. Don't want to be making you do it for me]

0
You would use a Remote Event. You would detect, on a local script, when the player clicks. Then, you would use a remote event to tell the server that. http://wiki.roblox.com/index.php?title=Remote_Events_and_Functions UgOsMiLy 1074 — 6y

Answer this question