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
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.
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.
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.