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

Why wont my mining script that i put in a tool and server storage work?

Asked by
Nozazxe 107
3 years ago

I have a mining script that makes a part spawn when it touched a part thats named "Rock". When you touch the rock, the script from the tool clones a script from server storage and it prints "Mineral Collected" when its touched, and destroys the part. But it does not print "Mineral Collected" and it does not destroy the part. Heres the script in the tool (the script that creates the part)

local tool = script.Parent
local canMine = true
local ServerStorage = game:GetService("ServerStorage")

tool.Handle.Touched:Connect(function(hit)
    if canMine == true then
    if hit.Name == "Rock" then
            print("Rock Hit")
            canMine = false
            local mineralMined = Instance.new("Part")
            mineralMined.Parent = game.Workspace
            mineralMined.Size = Vector3.new(2,1,2)
            mineralMined.Position = hit.Position + Vector3.new(math.random(-5,5), 5, math.random(-5,5)) 
            local mineralType = math.random(1,100)
            if mineralType > 50 then
                mineralMined.BrickColor = BrickColor.new("Medium stone grey")
            end
            if mineralType > 75 then
                mineralMined.BrickColor = BrickColor.new("Institutional white")
            end
            if mineralType > 100 then
                mineralMined.BrickColor = BrickColor.new("Teal")
                local collectMineral = game.ServerStorage.GetMineral:Clone()
                collectMineral.Parent = mineralMined
            end
        end
    end
end)

tool.Activated:Connect(function()
    local toolanim = Instance.new("StringValue")
    toolanim.Name = "toolanim"
    toolanim.Value = "Slash"
    toolanim.Parent = tool
    canMine = true
end)

heres the script in server storage. ( the script that prints "mineral collected)

local part = script.Parent

local function GetMineral(hit)
    local partParent = hit.Parent
    local humanoid = hit.Parent:FindFirstChildWhichIsA("Humanoid")
    if humanoid then
        local player = game.Players:GetPlayerFromCharacter(hit.Parent)
        if player then
            if part.BrickColor == BrickColor.new("Medium stone grey") then
                print("Rock Collected")
                part:Destroy()
            end
            if part.BrickColor == BrickColor.new("Institutional white") then
                print("Iron Collected")
                part:Destroy()
            end
            if part.BrickColor == BrickColor.new("Teal") then
                print("Diamond Collected")
                part:Destroy()
            end
        end
    end
end

part.Touched:Connect(GetMineral)
0
You are creating a part inside a local script, and then trying to remove that part with a server script. Anything created by a local script is created for that local player. The server cannot and will not detect that part, and therfor wont destroy it or collect it. You must use Remote Events to create the part on the server. WizyTheNinja 834 — 3y
0
Both of them are server scripts though. Nozazxe 107 — 3y
0
By server I mean normal. Like Scripts not Local Scripts Nozazxe 107 — 3y
0
Your collectMineral script is inside the "if mineralType > 100 then" statement. 9mze 193 — 3y
0
where would i put it? Nozazxe 107 — 3y

Answer this question