Catálogo/Mini Obby completo
KitsFácil
Mini Obby completo
Crea un obby entero: spawn, plataformas, lava, checkpoints y meta que da monedas. Lo pegas en ServerScriptService, pulsas Play y ya puedes saltar.
Valores
Dónde va
- 01
Abre Roblox Studio
Crea un lugar Baseplate o abre el tuyo.
- 02
ServerScriptService
En Explorer, clic derecho → Insert Object → Script.
- 03
Pega el código
Borra el print('Hello world') y pega el script copiado.
- 04
Play
Pulsa Play. Aparecerá el obby delante del spawn.
Explorer → ServerScriptService → Script “MiniObby”
MiniObby.luaScript
--[[
Mini Obby completo · Taller Lua
Pega este Script en ServerScriptService y pulsa Play.
Es para TU juego en Roblox Studio — no es un exploit.
]]
local Players = game:GetService("Players")
local COINS_ON_FINISH = 50
local PLATFORM_COUNT = 7
local old = workspace:FindFirstChild("TallerObby")
if old then
old:Destroy()
end
local folder = Instance.new("Folder")
folder.Name = "TallerObby"
folder.Parent = workspace
local function makePart(name, size, cframe, color, material)
local p = Instance.new("Part")
p.Name = name
p.Anchored = true
p.Size = size
p.CFrame = cframe
p.Color = color
p.Material = material or Enum.Material.SmoothPlastic
p.TopSurface = Enum.SurfaceType.Smooth
p.BottomSurface = Enum.SurfaceType.Smooth
p.Parent = folder
return p
end
local spawnLoc = Instance.new("SpawnLocation")
spawnLoc.Name = "Spawn"
spawnLoc.Anchored = true
spawnLoc.Duration = 0
spawnLoc.Neutral = true
spawnLoc.Size = Vector3.new(12, 1, 12)
spawnLoc.CFrame = CFrame.new(0, 8, 0)
spawnLoc.Color = Color3.fromRGB(92, 140, 118)
spawnLoc.Material = Enum.Material.Slate
spawnLoc.Parent = folder
local lastCheckpoint = {}
local awarded = {}
local function addCheckpoint(position, index)
local pad = makePart(
"Checkpoint" .. index,
Vector3.new(4, 0.4, 4),
CFrame.new(position + Vector3.new(0, 0.7, 0)),
Color3.fromRGB(88, 168, 108)
)
pad.CanCollide = false
pad.Touched:Connect(function(hit)
local player = Players:GetPlayerFromCharacter(hit.Parent)
if not player then
return
end
lastCheckpoint[player.UserId] = position
pad.Color = Color3.fromRGB(180, 210, 100)
end)
end
for i = 1, PLATFORM_COUNT do
local x = (i % 2 == 0) and 7 or -7
local y = 8 + i * 3
local z = -16 * i
local pos = Vector3.new(x, y, z)
makePart("Plataforma" .. i, Vector3.new(8, 1, 8), CFrame.new(pos), Color3.fromRGB(198, 202, 210))
if i % 2 == 0 then
addCheckpoint(pos, i)
end
end
local lava = makePart(
"Lava",
Vector3.new(90, 2, 16 * PLATFORM_COUNT + 40),
CFrame.new(0, 1, -8 * PLATFORM_COUNT),
Color3.fromRGB(186, 72, 54),
Enum.Material.Neon
)
lava.Touched:Connect(function(hit)
local humanoid = hit.Parent and hit.Parent:FindFirstChildOfClass("Humanoid")
if humanoid and humanoid.Health > 0 then
humanoid.Health = 0
end
end)
local finishPos = Vector3.new(0, 8 + (PLATFORM_COUNT + 1) * 3, -16 * (PLATFORM_COUNT + 1))
local finish = makePart("Meta", Vector3.new(14, 1, 14), CFrame.new(finishPos), Color3.fromRGB(214, 196, 140), Enum.Material.Marble)
local billboard = Instance.new("BillboardGui")
billboard.Size = UDim2.fromOffset(140, 36)
billboard.StudsOffset = Vector3.new(0, 4, 0)
billboard.AlwaysOnTop = true
billboard.Parent = finish
local label = Instance.new("TextLabel")
label.BackgroundTransparency = 1
label.Size = UDim2.fromScale(1, 1)
label.Font = Enum.Font.SourceSansBold
label.Text = "META +" .. COINS_ON_FINISH
label.TextColor3 = Color3.new(1, 1, 1)
label.TextScaled = true
label.Parent = billboard
finish.Touched:Connect(function(hit)
local player = Players:GetPlayerFromCharacter(hit.Parent)
if not player or awarded[player.UserId] then
return
end
awarded[player.UserId] = true
local stats = player:FindFirstChild("leaderstats")
local coins = stats and stats:FindFirstChild("Monedas")
if coins then
coins.Value += COINS_ON_FINISH
end
end)
local function setupPlayer(player)
if not player:FindFirstChild("leaderstats") then
local folderStats = Instance.new("Folder")
folderStats.Name = "leaderstats"
folderStats.Parent = player
local coins = Instance.new("IntValue")
coins.Name = "Monedas"
coins.Value = 0
coins.Parent = folderStats
end
player.CharacterAdded:Connect(function(character)
local hrp = character:WaitForChild("HumanoidRootPart")
local pos = lastCheckpoint[player.UserId]
if pos then
task.wait(0.12)
hrp.CFrame = CFrame.new(pos + Vector3.new(0, 4, 0))
end
end)
end
Players.PlayerAdded:Connect(setupPlayer)
for _, player in ipairs(Players:GetPlayers()) do
setupPlayer(player)
end