Crear peligros para jugadores

*Este contenido se traduce usando la IA (Beta) y puede contener errores. Para ver esta página en inglés, haz clic en aquí.


Ahora mismo, los jugadores pueden caer de cualquier plataforma sin consecuencias. Esta sección te guiará a crear un gran peligro invisible a la misma altura que el agua en tu juego. Cuando un jugador cae en el peligro, su salud se reduce a cero y reaparece al comienzo del juego.

Crear un peligro básico de agua

Crear un peligro básico de agua

En Workspace > World, crea una nueva carpeta llamada Hazards.
Dentro de la carpeta Hazards, crea una parte de bloque denominada Hazard con Size 825, 1, 576 y CFrame.Position 174, -6.5, 38 para que la parte cubra el agua alrededor de la isla y las plataformas.
Establece Transparency en 1 para que la parte sea invisible y el agua real parezca ser el peligro, desactiva CanCollide para que los jugadores caigan a través de ella en el agua, y habilita Anchored para que la física no lo mueva.

Detectar cuando los jugadores toquen el peligro

El peligro no hace nada hasta que escribas un script que escuche Touched y reduzca la salud del jugador a cero.

Crear HazardService

En ServerScriptService, crea un Script llamado HazardService con el siguiente código:
```lua
local Players = game:GetService("Players")
local Workspace = game:GetService("Workspace")
local hazardsFolder = Workspace.World.Hazards
local hazards = hazardsFolder:GetChildren()
local function onHazardTouched(otherPart)
local character = otherPart.Parent
local player = Players:GetPlayerFromCharacter(character)
if player then
local humanoid = character:FindFirstChildWhichIsA("Humanoid")
if humanoid then
humanoid.Health = 0
end
end
end
for _, hazard in hazards do
hazard.Touched:Connect(onHazardTouched)
end
```

El HazardService tiene muchas similitudes con el CoinService. Sin embargo, en lugar de recoger una moneda, al jugador se le establece la salud en 0 cuando tocan un peligro.

Siéntete libre de modificar, añadir o eliminar objetos de peligro en tu juego para crear obstáculos únicos. Siempre que estén contenidos en la carpeta Hazards, el bucle de código conecta el manejador de eventos a todos tus peligros.

Conectar al ciclo de vida del jugador

El ciclo de vida del jugador representa eventos que ocurren cuando los jugadores interactúan en tu juego, como unirse, salir o reaparecer. Necesitas conectar manejadores a estos eventos para ejecutar lógica para cada evento principal del ciclo de vida.

Añadir manejadores de ciclo de vida a CoinService

En ServerScriptService, agrega el siguiente código al final del Script existente de CoinService (no reemplaces ningún código existente — añade esto después):
```lua
local function onPlayerAdded(player)
-- Reiniciar las monedas del jugador a 0
updatePlayerCoins(player, function(_)
return 0
end)
player.CharacterAdded:Connect(function(character)
-- WaitForChild detendría el bucle del jugador, así que lo siguiente debe hacerse en un hilo separado
task.spawn(function()
-- Cuando un jugador muere
character:WaitForChild("Humanoid").Died:Connect(function()
-- Reiniciar las monedas del jugador a 0
updatePlayerCoins(player, function(_)
return 0
end)
end)
end)
end)
end
-- Inicializa cualquier jugador agregado antes de conectar al evento PlayerAdded
for _, player in Players:GetPlayers() do
onPlayerAdded(player)
end
local function onPlayerRemoved(player)
updatePlayerCoins(player, function(_)
return nil
end)
end
Players.PlayerAdded:Connect(onPlayerAdded)
Players.PlayerRemoving:Connect(onPlayerRemoved)
```

El código define funciones para reiniciar el conteo de monedas durante los eventos de ciclo de vida apropiados:

  • Players.PlayerAdded se activa cuando un jugador se une al juego y establece el conteo de monedas en 0.
  • Player.CharacterAdded se activa cuando se agrega el modelo del personaje de un jugador al mundo. Ocurre después de PlayerAdded y siempre que el jugador reaparezca.
  • Humanoid.Died se activa cuando un jugador muere y establece el conteo de monedas en 0. task.spawn() crea un hilo separado para manejar esto, de modo que otros aspectos del ciclo de vida del jugador puedan ejecutarse.
  • Player.PlayerRemoved se activa cuando un jugador sale del juego para limpiar el estado del jugador.
  • Este código contiene un posible problema donde los jugadores podrían recoger monedas antes de que se ejecute el evento Players.PlayerAdded y luego tener su conteo de monedas restablecido a cero. Para mitigar este problema, considera soluciones como la programación de código o congelar el personaje del jugador hasta que la inicialización termine. Sin embargo, estas soluciones implican conceptos de scripting más complejos que están más allá del alcance de este tutorial.

Probar

Selecciona Test del menú desplegable y haz clic en Play. Recoge algunas monedas, luego salta al agua. Tu personaje debería morir y reaparecer al inicio, con su conteo de monedas restablecido a 0.

©2026 Roblox Corporation. Roblox, el logotipo de Roblox y "Powering Imagination" son algunas de nuestras marcas registradas y no registradas en los Estados Unidos y otros países.