Checkpoint
Sur cette page tu trouveras comment faire:
- Les 2 morceaux d’un checkpoint:
- Le script de respawn sur le checkpoint
- le script de ramassage du checkpoint
Bien sur il te faudra aussi un objet que tu touchera, qui sera ton checkpoint, et qui aura le Tag approprié.
Script Local Joueur
Le script joueur est très court, il sert juste à dire: si le joueur à un checkpoint, respawn dessus
local player = game.Players:GetPlayerFromCharacter(script.Parent) -- récupère le joueur dans la liste des joueurs pour gerer les scores
-- partie pour respawn au bon endroit
if player.checkpointValue.Value ~= nil then
script.Parent:MoveTo(player.checkpointValue.Value.Position + Vector3.new(math.random(-4, 4), 4, math.random(-4, 4))) --tp avec un peu d'aléatoire
end
Serveur Script
Le script serveur s’occupe de la collision avec le checkpoint, et de l’enregistrement de la position quand on le touche
local function playerSpawned(player) --création des variables
local checkpointValue = Instance.new("ObjectValue", player) -- on créer notre variable pour que chaque joueur gère son checkpoint
checkpointValue.Name = "checkpointValue"
end
game.Players.PlayerAdded:Connect(playerSpawned) --donne aux nouveaux joueurs leurs variables
local CollectionService = game:GetService("CollectionService") -- liste des objets du jeu
local players = game:GetService("Players") -- liste des joueurs du jeu
local function Touchee(object,otherPart)
local player = players:GetPlayerFromCharacter(otherPart.Parent) -- on récupère le joueur qui à touché le checkpoint
if player then -- si c'est bien un joueur qui a touché
player.checkpointValue.Value = object -- changer son checkpoint
object:Destroy() -- optionel, détruit le checkpoint
wait(0.1) -- waits(secondes) Paramètre = temps en secondes. considéré mauvaise pratique de ne pas utiliser de paramètres
end
end
-- constament en train de tourner, verifie les objets du jeu pour savoir si on en a raté un qui aurait le bon tag
for _, object in pairs(CollectionService:GetTagged("checkpoint")) do
if object:IsA("BasePart") then -- si on touche un objet de base (et pas un sous-morceau)
object.Touched:Connect(function(otherPart)Touchee(object,otherPart) -- on lance le code necessaire
end)end
end