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
Retour en haut