Hello, I made a script that damages the ore and the ore, if its HP = 0, then it becomes invisible. I had the following bug: When I break one stone, all other ores break as well
Tool Script:
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local collect = game:GetService("CollectionService")
local StarterGui = game:GetService("StarterGui")
local Players = game:GetService("Players")
local Tool = script.Parent
local Remotes = ReplicatedStorage:FindFirstChild("Remotes")
local player = Players.LocalPlayer
local character = player.Character
local humanoid = character:FindFirstChild("Humanoid")
local PickaxeSwingAnim = Instance.new("Animation")
PickaxeSwingAnim.AnimationId = "rbxassetid://11458130668"
local animationTrack1 = humanoid:LoadAnimation(PickaxeSwingAnim)
local ToolConfig = require(ReplicatedStorage:FindFirstChild("Config"):FindFirstChild("ToolConfig"))
local OreConfig = require(ReplicatedStorage:FindFirstChild("Config"):FindFirstChild("OreConfig"))
local inventory = player:FindFirstChild("inventory")
local pickaxeName2 = Tool.Name
print("Found", player.Name, "Pickaxe Equipped Name!")
local pickaxe = player.Character:FindFirstChild(pickaxeName2)
print (pickaxeName2)
local pickaxeDmg = ToolConfig[pickaxeName2].Damage
local Ore = player.leaderstats.Ore
Tool.Activated:Connect(function(player: Player)
if Tool.Enabled == true then
print("Tool.Enabled == true")
for tool, toolTable in pairs(ToolConfig) do
if tool == pickaxeName2 then
print(pickaxeName2)
Remotes.ToolActivated:FireServer()
animationTrack1:Play()
active = true
Tool.Enabled = false
game.StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType.Backpack, false)
humanoid.WalkSpeed = 0
wait(0.75)
Tool.Enabled = true
active = false
humanoid.WalkSpeed = 16
game.StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType.Backpack, true)
print("End")
end
end
end
end)
local Lezvie = script.Parent.Handle.Lezvie
punch = false
Lezvie.Touched:Connect(function(hit)
if punch == false then
print("Punch == false")
punch = true
if active == true then
print("Punch == true")
if collect:HasTag(hit, "RockHitbox") then
print("HasTag RockHitbox")
Remotes.OreDamaged:FireServer()
end
end
punch = false
end
end)
Remotes.OreDestroyed.OnClientEvent:Connect(function()
Remotes.OreDestroyed:FireServer()
end)
Remotes.OreRespawn.OnClientEvent:Connect(function()
Remotes.OreRespawn:FireServer()
end)
Ore Script:
local Players = game:GetService("Players")
local ServerStorage = game:GetService("ServerStorage")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Remotes = ReplicatedStorage:FindFirstChild("Remotes")
local ToolConfig = require(ReplicatedStorage:FindFirstChild("Config"):FindFirstChild("ToolConfig"))
local OreConfig = require(ReplicatedStorage:FindFirstChild("Config"):FindFirstChild("OreConfig"))
local OreName = script.Parent.Name
local Ore = script.Parent
print(OreName)
local miningSound = Instance.new("Sound", Ore)
miningSound.SoundId = "rbxassetid://5772362759"
miningSound.Name = "MiningSound"
local FailMiningSound = Instance.new("Sound", Ore)
FailMiningSound.SoundId = "rbxassetid://9119510368"
FailMiningSound.Name = "FailSound"
local OreDestroyed = false
Players.PlayerAdded:Connect(function()
if not OreName.Health then
local HP = Instance.new("IntValue", script.Parent)
HP.Name = "Health"
HP.Value = OreConfig[OreName].Health
end
end)
Remotes.OreDamaged.OnServerEvent:Connect(function(player: Player)
local OreL = player.leaderstats.Ore
local pickaxeName = player.inventory.EquippedTool.Value
local pickaxeDamage = ToolConfig[pickaxeName].Damage
local pickaxeSila = ToolConfig[pickaxeName].Sila
local oreSila = OreConfig[OreName].Sila
local Tool = player.Character:FindFirstChild(pickaxeName)
local HP = script.Parent.Health
print(pickaxeSila)
print(oreSila)
if OreDestroyed == false then
print("101")
--if oreSila == pickaxeSila or oreSila <= pickaxeSila then
HP.Value -= pickaxeDamage
OreL.Value += pickaxeDamage
miningSound:Play()
print(HP.Value, "Rock HP.")
if HP.Value == 0 then
Remotes.OreDestroyed:FireClient(player)
end
end
end)
--Remotes.OreDestroyed.OnServerEvent:Connect(function(player: Player)
-- OreDestroyed = true
-- Ore.Transparency = 1
-- Ore.CanCollide = false
-- Ore.CanTouch = false
-- Ore.Hitbox.CanCollide = false
-- Ore.Hitbox.CanTouch = false
-- Remotes.OreRespawn:FireClient(player)
--end)
Remotes.OreRespawn.OnServerEvent:Connect(function(player: player)
local RespawnTime = OreConfig[OreName].RespawnTime
wait(RespawnTime)
OreDestroyed = false
Ore.Transparency = 0
Ore.CanCollide = true
Ore.CanTouch = true
Ore.Hitbox.CanCollide = true
Ore.Hitbox.CanTouch = true
local Health = script.Parent.Health
Health.Value = OreConfig[OreName].Health
print(OreName, "Health after RESPAWN:", Health.Value)
end)

5 comments
Hello! I was only able to check the script today, now when I hit a stone, health can go in minus, and the damage still passes through two stones at once
And now the stones unbreakable
that... is weird.
one problem is that it only checks if the health is exactly 0, which it wont always be
I have edited my answer to fix that, as well as hopefully fixing the damage duplicating through