I am busy with an open source survival game and would love to have my resources regenerate overtime.
I myself have no clue how to do such a thing and thought the best place to get help is here.
I have found 2 scripts that might could help me.
Script 1 found at: https://developer.roblox.com/en-us/recipes/Regenerate-Models-
local model, button, enabled = Workspace.Model, Workspace.Button, true
local clone = model:Clone()
button.Touched:connect(function(hit)
if game.Players:FindFirstChild(hit.Parent.Name) and enabled then
enabled = false
model:Destroy()
wait(5)
local lclone = clone:Clone()
lclone.Parent = Workspace
model = lclone
enabled = true
end
end)
Script 2 found at: https://www.roblox.com/games/429735644/DUSK-UNCOPYLOCKED
objects_to_regen = {
--Name, regen time, model(false) Part(true)
{'Rock', {120,240}, true},
{'Large Rock', {360,600}, true},
{'Stone', {180,300}, true},
{'Wheat', {120,240}, true},
{'Kelp', {120,240}, true},
{'Pond Water', {240,320}, true},
{'Corn', {240,360}, true},
{'Mushroom', {80,160}, true},
{'Onion', {240,360}, true},
{'Pumpkin', {300,420}, true},
{'Rice', {80,140}, true},
-- models
{'Berry Bush', {180,240}, false},
{'Tree', {180, 300}, false},
{'Large Tree', {360,600}, false},
{'Fancy Tree', {240,360}, false},
{'Bush', {120,240}, false},
{'Coal Rock', {180, 300}, false},
{'Copper Rock', {240,360}, false},
{'Iron Rock', {440,600}, false},
{'Adurite Rock', {900,1300}, false},
{'Magnatite Rock', {3600,6000}, false},
}
function check(input)
for i,v in pairs(objects_to_regen) do
if v[1] == input then
return {true, v[2], v[3]}
end
end
return {false, nil, nil}
end
function part(object, wt)
local new = object:Clone()
object.AncestryChanged:connect(function()
--print(object.Name, ' was removed, regen.')
wait(math.random(wt[1], wt[2]))
new.Parent = workspace
if new.Name == "Water" then
local val = Instance.new("IntValue",new)
val.Value = 400
val.Name = "Amount"
end
part(new, wt)
end)
end
function model(object, wt)
local new = object:Clone()
object.ChildRemoved:connect(function()
if object:FindFirstChild'DB' then return end
Instance.new('ObjectValue', object).Name = 'DB'
--print('An object from ',object.Name, ' was removed, regen.')
wait(math.random(wt[1], wt[2]))
object:Destroy()
new.Parent = workspace
new:MakeJoints()
if new.Name == "Bush" then
local weld = Instance.new("ManualWeld")
weld.Part0 = new:WaitForChild("Leaves")
weld.Part1 = new:WaitForChild("Wood")
weld.C0 = new:WaitForChild("Leaves").CFrame:inverse() * new:WaitForChild("Wood").CFrame
weld.Parent = new:WaitForChild("Leaves")
end
if new.Name == "Tree" then
for i,v in pairs(new:GetChildren()) do
if v.Name == "Orangeberry" then
local weld = Instance.new("ManualWeld")
weld.Part0 = v
weld.Part1 = new:WaitForChild("Leaves")
weld.C0 = v.CFrame:inverse() * new:WaitForChild("Leaves").CFrame
weld.Parent = v
end
end
end
model(new, wt)
end)
end
for i,v in pairs(workspace:GetChildren()) do
local test = check(v.Name)
if test[1] then
if test[3] then
part(v, test[2])
else
model(v, test[2])
end
end
end
The most important thing here is that resources such as berries, iron ores, trees, sand, rocks and other resource types in the future can regenerated and gathered by new or existing players.
Already thanks for the help.
Link to the open source game: https://devforum.roblox.com/t/os-game-survival-game-prototype-0-0-2/347122
