Criar perigos para jogadores

*Este conteúdo é traduzido por IA (Beta) e pode conter erros. Para ver a página em inglês, clique aqui.


Neste momento, os jogadores podem cair de qualquer plataforma sem consequências. Esta seção orienta você na criação de um grande perigo invisível na mesma altura que a água do seu jogo. Quando um jogador cai no perigo, sua saúde é reduzida a zero e ele renasce no início do jogo.

Criar um perigo básico de água

Criar um perigo básico de água

Em Workspace > World, crie uma nova pasta chamada Hazards.
Dentro da pasta Hazards, crie um bloco Part chamado Hazard com o tamanho 825, 1, 576 e CFrame.Position 174, -6.5, 38 para que a parte cubra a água ao redor da ilha e das plataformas.
Defina a Transparência como 1 para que a parte seja invisível e a água real apareça como o perigo, desative CanCollide para que os jogadores possam cair através dela na água e ative Anchored para que a física não a mova.

Detectar quando jogadores tocam o perigo

O perigo não faz nada até que você escreva um script que ouça Touched e reduza a saúde do jogador a zero.

Criar HazardService

Em ServerScriptService, crie um Script chamado HazardService com o seguinte 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
```

O HazardService tem muitas semelhanças com o CoinService. No entanto, em vez de coletar uma moeda, a saúde do jogador é definida como 0 quando tocam em um perigo.

Sinta-se à vontade para modificar, adicionar ou remover objetos de perigo em seu jogo para criar obstáculos exclusivos. Desde que estejam contidos na pasta Hazards, o loop do código conecta o manipulador de eventos a todos os seus perigos.

Conectar ao ciclo de vida do jogador

O ciclo de vida do jogador representa eventos que ocorrem quando os jogadores interagem em seu jogo, como entrar, sair ou renascer. Você precisa conectar manipuladores a esses eventos para executar a lógica para cada evento principal do ciclo de vida.

Adicionar manipuladores de ciclo de vida ao CoinService

Em ServerScriptService, anexe o seguinte código ao final do Script CoinService existente (não substitua nenhum dos códigos existentes — adicione isso depois):
```lua
local function onPlayerAdded(player)
-- Redefinir moedas do jogador para 0
updatePlayerCoins(player, function(_)
return 0
end)
player.CharacterAdded:Connect(function(character)
-- WaitForChild pararia o loop do jogador, então o abaixo deve ser feito em uma thread separada
task.spawn(function()
-- Quando um jogador morre
character:WaitForChild("Humanoid").Died:Connect(function()
-- Redefinir moedas do jogador para 0
updatePlayerCoins(player, function(_)
return 0
end)
end)
end)
end)
end
-- Inicializa quaisquer jogadores adicionados antes de conectar ao 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)
```

O código define funções para redefinir contagens de moedas durante os eventos de ciclo de vida apropriados:

  • Players.PlayerAdded é acionado quando um jogador entra no jogo e define a contagem de moedas como 0.
  • Player.CharacterAdded é acionado quando o modelo de personagem de um jogador é adicionado ao mundo. Isso ocorre após PlayerAdded e sempre que o jogador renasce.
  • Humanoid.Died é acionado quando um jogador morre e define a contagem de moedas como 0. task.spawn() cria uma thread separada para lidar com isso, para que outros aspectos do ciclo de vida do jogador possam ser executados.
  • Player.PlayerRemoved é acionado quando um jogador sai do jogo para limpar o estado do jogador.
  • Este código contém um problema potencial em que os jogadores poderiam coletar moedas antes que o evento Players.PlayerAdded seja executado e, em seguida, ter suas contagens de moedas redefinidas para zero. Para mitigar esse problema, considere soluções como agendamento de código ou congelar o personagem do jogador até que a inicialização termine. No entanto, essas soluções envolvem conceitos de script mais complexos que estão além do escopo deste tutorial.

Testar

Selecione Testar no menu suspenso e clique em Jogar. Colete algumas moedas e depois pule na água. Seu personagem deve morrer e renascer no início, com a contagem de moedas redefinida para 0.

©2026 Roblox Corporation, Roblox, o logotipo Roblox e Powering Imagination estão entre nossas marcas registradas e não registradas nos EUA e em outros países.