in Workspace you need a RBXAPI/RBXAPIServer/OnMined
ServerScriptService you need:
local rbxapi = require(workspace.RBXAPI)
local storage = game:GetService("ServerStorage")
local minerals = {}
local mineral_count = 0
local mineral_probability = {
{"Grass"},
{"Dirt"},
{"Dirt", "Dirt", "Dirt", "Coal", "Dirt", "Sand", "Dirt", "Dirt", "Dirt", "Stone", "Stone"},
{"Dirt", "Coal", "Dirt", "Dirt", "Dirt", "Stone", "Stone"},
{"Coal", "Dirt", "Dirt", "Copper", "Dirt", "Stone", "Stone", "Stone"},
{"Gold", "Iron", "Iron", "Stone", "Stone", "Coal", "Coal", "Dirt", "Dirt", "Sand", "Copper", "Stone", "Stone"},
{"Gold", "Iron", "Iron", "Stone", "Stone", "Coal", "Coal", "Dirt", "Dirt", "Sand", "Copper", "Stone", "Stone", "Gold", "Ruby"},
{"Gold", "Iron", "Iron", "Stone", "Stone", "Coal", "Coal", "Dirt", "Dirt", "Sand", "Copper", "Stone", "Stone", "Emerald", "Gold", "Gold", "Ruby"},
{"Gold", "Iron", "Gold", "Stone", "Coal", "Coal", "Stone", "Copper", "Copper", "Emerald", "Gold", "Ruby", "Ruby", "Ruby", "Emerald", "Stone", "Stone", "Stone", "Stone"},
{"Gold", "Iron", "Gold", "Stone", "Coal", "Coal", "Stone", "Copper", "Copper", "Emerald", "Gold", "Ruby", "Ruby", "Ruby", "Emerald", "Stone", "Stone", "Stone", "Stone"},
{"Gold", "Iron", "Gold", "Stone", "Coal", "Coal", "Stone", "Copper", "Copper", "Emerald", "Gold", "Ruby", "Ruby", "Ruby", "Emerald", "Stone", "Stone", "Stone", "Stone"},
{"Gold", "Gold", "Iron", "Iron", "Robloxium", "Copper", "Copper", "Emerald", "Emerald", "Emerald", "Ruby", "Ruby", "Stone", "Stone", "Stone", "Stone", "Dirt", "Stone", "Stone"},
{"Gold", "Gold", "Iron", "Iron", "Robloxium", "Copper", "Copper", "Emerald", "Emerald", "Emerald", "Ruby", "Ruby", "Stone", "Stone", "Stone", "Stone", "Dirt", "Stone", "Stone"},
{"Gold", "Gold", "Iron", "Iron", "Robloxium", "Copper", "Copper", "Emerald", "Emerald", "Emerald", "Ruby", "Ruby", "Stone", "Stone", "Stone", "Stone", "Dirt", "Stone", "Stone"},
{"Gold", "Gold", "Iron", "Iron", "Robloxium", "Copper", "Copper", "Emerald", "Emerald", "Emerald", "Ruby", "Ruby", "Stone", "Stone", "Stone", "Stone", "Dirt", "Stone", "Stone"},
{"Gold", "Gold", "Iron", "Iron", "Robloxium", "Copper", "Copper", "Emerald", "Emerald", "Emerald", "Ruby", "Ruby", "Stone", "Stone", "Stone", "Stone", "Dirt", "Stone", "Stone"},
{"Gold", "Gold", "Iron", "Iron", "Robloxium", "Copper", "Copper", "Emerald", "Emerald", "Emerald", "Ruby", "Ruby", "Stone", "Stone", "Stone", "Stone", "Dirt", "Stone", "Stone"},
{"Gold", "Gold", "Iron", "Iron", "Robloxium", "Copper", "Copper", "Emerald", "Emerald", "Emerald", "Ruby", "Ruby", "Stone", "Stone", "Stone", "Stone", "Dirt", "Stone", "Stone"},
{"Gold", "Gold", "Iron", "Iron", "Robloxium", "Copper", "Copper", "Emerald", "Emerald", "Emerald", "Ruby", "Ruby", "Stone", "Stone", "Stone", "Stone", "Dirt", "Stone", "Stone"},
{"Robloxium", "Robloxium", "Robloxium", "Copper", "Gold", "Gold", "Iron", "Iron", "Iron", "Ruby", "Ruby", "Emerald"},
{"Robloxium", "Robloxium", "Robloxium", "Copper", "Gold", "Gold", "Iron", "Iron", "Iron", "Ruby", "Ruby", "Emerald"},
{"Robloxium", "Robloxium", "Robloxium", "Copper", "Gold", "Gold", "Iron", "Iron", "Iron", "Ruby", "Ruby", "Emerald"},
{"Robloxium", "Robloxium", "Robloxium", "Copper", "Gold", "Gold", "Iron", "Iron", "Iron", "Ruby", "Ruby", "Emerald"},
{"Robloxium", "Robloxium", "Robloxium", "Copper", "Gold", "Gold", "Iron", "Iron", "Iron", "Ruby", "Ruby", "Emerald"},
{"Robloxium", "Robloxium", "Robloxium", "Copper", "Gold", "Gold", "Iron", "Iron", "Iron", "Ruby", "Ruby", "Emerald"},
{"Robloxium", "Robloxium", "Robloxium", "Copper", "Gold", "Gold", "Iron", "Iron", "Iron", "Ruby", "Ruby", "Emerald"},
{"Robloxium", "Robloxium", "Robloxium", "Copper", "Gold", "Gold", "Iron", "Iron", "Iron", "Ruby", "Ruby", "Emerald"},
{"Robloxium", "Robloxium", "Robloxium", "Copper", "Gold", "Gold", "Iron", "Iron", "Iron", "Ruby", "Ruby", "Emerald"},
{"Robloxium", "Robloxium", "Robloxium", "Copper", "Gold", "Gold", "Iron", "Iron", "Iron", "Ruby", "Ruby", "Emerald"},
{"Robloxium", "Robloxium", "Robloxium", "Copper", "Gold", "Gold", "Iron", "Iron", "Iron", "Ruby", "Ruby", "Emerald"},
{"Marble"}
}
local world = {}
local height
local size = {64, 64}
local blockSize = 8
local app = rbxapi.new("037af93efe04aaf6287fea99ae1c8d5ee0ca1b0c7292641445cd1a4360d49cc9")
local OnMinedFunction = workspace.OnMined
local RBXAPIService = workspace.RBXAPIServer
function OnMinedFunction.OnServerInvoke(player, layerData)
local x = layerData.x
local y = layerData.y
local layerID = layerData.z
Instantiate(world[layerID + 1], y, x, layerID + 1)
Instantiate(world[layerID - 1], y, x, layerID - 1)
Instantiate(world[layerID + 1], y + 1, x, layerID + 1)
Instantiate(world[layerID + 1], y, x + 1, layerID + 1)
Instantiate(world[layerID + 1], y - 1, x, layerID + 1)
Instantiate(world[layerID + 1], y, x - 1, layerID + 1)
Instantiate(world[layerID], y + 1, x, layerID)
Instantiate(world[layerID], y, x + 1, layerID)
Instantiate(world[layerID], y - 1, x, layerID)
Instantiate(world[layerID], y, x - 1, layerID)
Instantiate(world[layerID - 1], y + 1, x, layerID - 1)
Instantiate(world[layerID - 1], y, x + 1, layerID - 1)
Instantiate(world[layerID - 1], y - 1, x, layerID - 1)
Instantiate(world[layerID - 1], y, x - 1, layerID - 1)
end
function RBXAPIService.OnServerInvoke(player, method, key, value)
if method == "set" then
app:Set(player.Name .. " " .. key, value)
elseif method == "get" then
RBXAPIService:InvokeClient(player, key, app:Get(player.Name .. " " .. key).output)
end
end
function GetMineral(name)
return minerals[name] ~= nil and minerals[name] or nil
end
function GenerateLayer(y, width, depth)
local prob
print(y)
if y > #mineral_probability then
prob = mineral_probability[#mineral_probability]
elseif y < 1 then
return nil
else
prob = mineral_probability[y]
end
local layer = {}
for y = 1, depth do
layer[y] = {}
for x = 1, width do
layer[y][x] = {prob[math.random(1, #prob)], false, false}
end
end
return layer
end
function Instantiate(layer, y, x, i)
if layer == nil then
layer = GenerateLayer(i, size[1], size[2])
if layer == nil then return end
table.insert(world, layer)
end
if layer[y] == nil then layer[y] = {} end
if layer[y][x] == nil then
local prob
if i > #mineral_probability then
prob = mineral_probability[#mineral_probability]
else
prob = mineral_probability[i]
end
layer[y][x] = {prob[math.random(1, #prob)], false, false}
end
if layer[y][x][3] then return end
local p = GetMineral(layer[y][x][1]):clone()
p.Parent = workspace.Minespace
p.Size = Vector3.new(blockSize, blockSize, blockSize)
p.CFrame = CFrame.new(Vector3.new(x * blockSize, height - (i * blockSize), y * blockSize))
local props = Instance.new("Vector3Value")
props.Value = Vector3.new(x, y, i)
props.Name = "Layer Data"
props.Parent = p
layer[y][x][3] = true
end
function Load()
game:GetService("StarterGui").ResetPlayerGuiOnSpawn = false
local objects = storage:GetChildren()
for i, v in ipairs(objects) do
if v.Name == "Mineral" and v:IsA("Part") and v:FindFirstChild("Type") ~= nil then
minerals[v.Type.Value] = v
mineral_count = mineral_count + 1
end
end
height = #mineral_probability * blockSize
local spawn = Instance.new("SpawnLocation", workspace)
spawn.CanCollide = false
spawn.Anchored = true
spawn.Transparency = 1
spawn.Position = Vector3.new(size[1] * blockSize / 2, height + 20, size[2] * blockSize / 2)
for i = 1, #mineral_probability do
local layer = GenerateLayer(i, size[1], size[2])
if i == 1 then
for y = 1, #layer do
for x = 1, #layer[y] do
Instantiate(layer, y, x, i)
end
end
end
table.insert(world, layer)
end
print("Loaded")
end
Load()
In ServerStorage you need:
12 Bricks with a Type value in them. Named Mineral
In sound Service you need A bunch of sounds revlant to the script.
For screen GUi there is the model in my models I will have.
And that is the whole thing for a mining game.