It's not making the number of the GUi go up
local Player = script.Parent.Parent local mouse = Player:GetMouse() function Dig() if mouse.Target.Name == "Nope" then script.Parent.Disabled = true end if mouse.Target ~= nil then if mouse.Target.Name == "Dirt" then mouse.Target.Transparency = mouse.Target.Transparency +1 if mouse.Target.Transparency > 0.9 then mouse.Target:remove() script.Parent.Parent.PlayerGui.ScreenGui.Frame.Dirt.Value.Value = script.Parent.Parent.PlayerGui.ScreenGui.Frame.Dirt.Value.Value +1 end end if mouse.Target.Name == "Silver" then mouse.Target.Transparency = mouse.Target.Transparency +0.5 if mouse.Target.Transparency > 0.9 then mouse.Target:remove() script.Parent.Parent.PlayerGui.ScreenGui.Frame.Silver.Value.Value = script.Parent.Parent.PlayerGui.ScreenGui.Frame.Silver.Value.Value +1 end end if mouse.Target.Name == "Diamond" then mouse.Target.Transparency = mouse.Target.Transparency +0.3 if mouse.Target.Transparency > 0.9 then mouse.Target:remove() script.Parent.Parent.PlayerGui.ScreenGui.Frame.Diamond.Value.Value = script.Parent.Parent.PlayerGui.ScreenGui.Frame.Diamond.Value.Value +1 end end if mouse.Target.Name == "Ruby" then mouse.Target.Transparency = mouse.Target.Transparency +0.2 if mouse.Target.Transparency > 0.9 then mouse.Target:remove() script.Parent.Parent.PlayerGui.ScreenGui.Frame.Ruby.Value.Value = script.Parent.Parent.PlayerGui.ScreenGui.Frame.Ruby.Value.Value +1 end end if mouse.Target.Name == "Emerald" then mouse.Target.Transparency = mouse.Target.Transparency +0.16 if mouse.Target.Transparency > 0.9 then mouse.Target:remove() script.Parent.Parent.PlayerGui.ScreenGui.Frame.Emerald.Value.Value = script.Parent.Parent.PlayerGui.ScreenGui.Frame.Emerald.Value.Value +1 end end if mouse.Target.Name == "Gold" then mouse.Target.Transparency = mouse.Target.Transparency +0.01 if mouse.Target.Transparency > 0.9 then mouse.Target:remove() script.Parent.Parent.PlayerGui.ScreenGui.Frame.Gold.Value.Value = script.Parent.Parent.PlayerGui.ScreenGui.Frame.Gold.Value.Value +1 end end end end mouse.Button1Down:connect(Dig)
First: tab your code correctly.
Issue:
You check if mouse.Target
is not nil
after using it (line 5)
You use script.Parent.Parent
over and over even though you have Player
defined to be the same thing
After fixing those, have a massive amount of code reuse. For instance, just mouse.Target
appears 32 times.
Simple fix: let hover = mouse.Target
.
Let's get rid of the "Nope"
case. It doesn't make sense to disable scripts -- that's dangerous. It also doesn't fit in with the rest of what's going on.
function Dig() local hover = mouse.Target if hover then -- Not nil if hover.Name == "Dirt" then hover.Transparency = hover.Transparency +1 if hover.Transparency > 0.9 then hover:remove() Player.PlayerGui.ScreenGui.Frame.Dirt.Value.Value = Player.PlayerGui.ScreenGui.Frame.Dirt.Value.Value +1 end end ....
Now we are repeatedly looking at hover.Name
. Let's use kind
and also use elseif
s.
function Dig() local hover = mouse.Target if hover then -- Not nil local kind = hover.Name if kind == "Dirt" then hover.Transparency = hover.Transparency +1 if hover.Transparency > 0.9 then hover:remove() Player.PlayerGui.ScreenGui.Frame.Dirt.Value.Value = Player.PlayerGui.ScreenGui.Frame.Dirt.Value.Value +1 end elseif kind == "Silver" then hover.Transparency = hover.Transparency +0.5 if hover.Transparency > 0.9 then hover:remove() Player.PlayerGui.ScreenGui.Frame.Silver.Value.Value = Player.PlayerGui.ScreenGui.Frame.Silver.Value.Value +1 end ....
Now there is still a massive amount of reuse.
This chunk appears over and over:
hover.Transparency = hover.Transparency + AAA if hover.Transparency > 0.9 then hover:Remove() Player.PlayerGui.ScreenGui.Frame.BBB.Value.Value = Player.Parent.PlayerGui.ScreenGui.Frame.BBB.Value.Value +1 end
The only difference is that AAA
depends on the kind of material, and BBB
is the name of hover
.
Let's use that, and instead of repeating ourselves, use the same code to do this:
function Dig() local hover = mouse.Target if hover then -- Not nil local kind = hover.Name local rates = { Dirt = 1, Silver = 0.5, Diamond = 0.3, Ruby = 0.2, Emerald = 0.16, Gold = 0.01 } local rate = rates[kind] if rate then -- It is a kind of block we can mine hover.Transparency = hover.Transparency + rate if hover.Transparency > 0.9 then hover:Remove() Player.PlayerGui.ScreenGui.Frame[kind].Value.Value = Player.PlayerGui.ScreenGui.Frame[kind].Value.Value + 1 end end end end
We should probably just have a reference to the inventory = Player.PlayerGui.ScreenGui.Frame
to avoid that extra long line (and let us move it later, if need be)
local Player = script.Parent.Parent local mouse = Player:GetMouse() local inventory = Player.PlayerGui.ScreenGui.Frame .... inventory[kind].Value.Value = inventory[kind].Value.Value + 1 ....
What does it do instead? Is there an error? Have you tried anything at all to figure out what's wrong yourself?
Are you sure there is a Value object called Value
inside of, e.g., inventory.Dirt
? Are you sure that Dirt
isn't just the Vlaue object?