Taller Lua

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

  1. 01

    Abre Roblox Studio

    Crea un lugar Baseplate o abre el tuyo.

  2. 02

    ServerScriptService

    En Explorer, clic derecho → Insert Object → Script.

  3. 03

    Pega el código

    Borra el print('Hello world') y pega el script copiado.

  4. 04

    Play

    Pulsa Play. Aparecerá el obby delante del spawn.

Explorer → ServerScriptServiceScriptMiniObby

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