>
Tutoriel 2026-02-19

Système de mort et respawn pour FiveM

OntelMonke

OntelMonke

Administrateur et développeur chez Agency Scripts

Détection de la mort d'un joueur

Le système de mort et de réapparition est l'un des mécanismes les plus fondamentaux de tout serveur de jeu de rôle FiveM, régissant ce qui se passe lorsque la santé d'un joueur atteint zéro et comment il revient au jeu. Le comportement de mort par défaut du GTA V implique une réapparition automatique à l'hôpital le plus proche après une brève cinématique, ce qui interrompt complètement l'immersion dans le jeu de rôle. Pour construire un système approprié, tu dois intercepter l'état de mort avant que le gestionnaire par défaut du jeu ne prenne le relais. Surveillez la santé du joueur à chaque image en utilisant GetEntityHealth et détecter quand il descend jusqu'au seuil de mort, qui est 0 pour les pédiatres. Lorsque la mort est détectée, utilisez immédiatement NetworkResurrectLocalPlayer pour empêcher l'écran de mort par défaut d'apparaître, puis placez le joueur dans un état ragdoll en utilisant SetPedToRagdoll pour simuler une incapacité. Désactivez le système de réapparition par défaut en appelant SetPlayerInvincible temporairement pendant que tu passes à ton gestionnaire d'état de mort personnalisé. Cette approche tu donne un contrôle total sur l'expérience de la mort tout en conservant le réalisme visuel.

Le système de minuterie de saignement

Le minuteur de saignement crée une fenêtre critique entre le fait d'être abattu et la mort complète, pendant laquelle les autres joueurs peuvent interagir avec la personne incapable. Lorsqu'un joueur entre dans l'état à terre, démarrez un compte à rebours qui le représente en train de saigner lentement. Affichez cette minuterie bien en évidence à l'écran via une superposition NUI affichant le temps restant et les instructions pertinentes. Pendant la phase de saignement, le joueur doit être dans une animation de ragdoll ou ramper sur le sol, incapable d'utiliser des armes, de conduire des véhicules ou d'interagir avec la plupart des objets du monde. Permettez aux joueurs abattus d'utiliser le chat vocal de proximité afin qu'ils puissent appeler à l'aide ou jouer le rôle de leurs blessures. La durée de la minuterie doit être configurable, généralement entre 5 et 15 minutes, et suffisamment longue pour que l'EMS puisse répondre de manière réaliste. Implémentez un système dans lequel le chronomètre accélère si le joueur subit des dégâts supplémentaires alors qu'il est à terre, et ralentit ou s'arrête si un autre joueur commence à appliquer des articles de premiers secours comme des bandages ou une trousse médicale.

-- Client-side death state management
local isDead = false
local bleedoutTime = Config.BleedoutDuration -- seconds
local bleedoutTimer = 0
local lastStandUsed = false

CreateThread(function()
    while true do
        local ped = PlayerPedId()
        local health = GetEntityHealth(ped)

        if health <= 0 and not isDead then
            isDead = true
            bleedoutTimer = bleedoutTime
            lastStandUsed = false

            -- Prevent default death
            NetworkResurrectLocalPlayer(
                GetEntityCoords(ped), GetEntityHeading(ped),
                true, false
            )
            SetEntityHealth(ped, 1)
            SetEntityInvincible(ped, true)
            SetPedToRagdoll(ped, -1, -1, 0, false, false, false)
            ClearPedTasks(ped)

            -- Notify server
            TriggerServerEvent('death:playerDowned', GetEntityCoords(ped))

            -- Show death UI
            SendNUIMessage({ action = 'showDeathScreen', timer = bleedoutTimer })
        end

        if isDead then
            bleedoutTimer = bleedoutTimer - 1
            SendNUIMessage({ action = 'updateTimer', timer = bleedoutTimer })

            -- Disable controls while downed
            DisableControlAction(0, 22, true)  -- jump
            DisableControlAction(0, 24, true)  -- attack
            DisableControlAction(0, 25, true)  -- aim
            DisableControlAction(0, 75, true)  -- exit vehicle

            if bleedoutTimer <= 0 then
                -- Fully dead - offer respawn options
                SendNUIMessage({ action = 'showRespawnOptions' })
            end
        end

        Wait(isDead and 1000 or 500)
    end
end)

Mécanicien du dernier combat

Le mécanisme du dernier combat donne aux joueurs abattus une brève opportunité de riposter ou de ramper vers un lieu sûr, ajoutant ainsi une couche tactique aux combats. Lorsqu'un joueur tombe pour la première fois, proposez-lui une activation unique qui le met dans une position couchée où il peut tirer avec une arme de poing avec une précision et une vitesse de déplacement considérablement réduites pendant 15 à 30 secondes avant de s'effondrer complètement. Implémentez cela en plaçant le joueur dans une animation d'exploration en utilisant TaskPlayAnim avec un dictionnaire d'animation au sol, puis réactivant temporairement l'utilisation des armes mais en la limitant aux pistolets uniquement. Appliquez un effet de balancement d'arme lourde en utilisant la manipulation de la caméra pour simuler la difficulté de viser en étant mortellement blessé. Le dernier stand devrait vider le minuteur de saignement plus rapidement car l'effort accélère la perte de sang. Affichez des indicateurs visuels tels que la désaturation de l'écran, des effets de vignette et un son de battement de cœur qui ralentit avec le temps pour créer de la tension. Ce mécanisme ne devrait être disponible qu'une seule fois par cycle de mort pour éviter les abus, et il devrait être entièrement désactivé si le joueur a été tué par une balle dans la tête, ce qui représente une blessure instantanément invalidante.

Interaction et renaissance du EMS

Le système de réanimation EMS est l'endroit où le mécanisme de la mort crée des interactions de jeu de rôle significatives entre le joueur abattu et les services médicaux d'urgence. Lorsqu'un joueur EMS s'approche d'un joueur à terre, il devrait voir une invite d'interaction qui lance une séquence de traitement. Le processus de traitement doit prendre un temps réaliste, généralement 10 à 20 secondes, pendant lequel le joueur EMS effectue une animation médicale et ne peut pas bouger ou se défendre, créant ainsi une vulnérabilité qui ajoute des enjeux aux interventions d'urgence dans les zones dangereuses. Implémentez plusieurs niveaux de traitement : stabilisation de base qui empêche la progression du minuteur de saignement, traitement avancé qui commence à restaurer lentement la santé et réanimation complète qui ramène le joueur à un état debout avec une santé partielle. Chaque niveau devrait nécessiter des articles médicaux spécifiques de l'inventaire du joueur EMS, tels que des bandages pour la stabilisation, un kit médical pour le traitement et de l'adrénaline pour la réanimation. Après la résurrection, appliquez un débuff temporaire où le joueur a réduit sa santé et son endurance maximales pendant plusieurs minutes, ce qui représente une récupération après des blessures imminentes qui découragent de retourner immédiatement au combat.

-- Server-side EMS revival handler
RegisterNetEvent('death:attemptRevive')
AddEventHandler('death:attemptRevive', function(targetId, treatmentType)
    local src = source
    local emsPed = GetPlayerPed(src)
    local targetPed = GetPlayerPed(targetId)

    if not emsPed or not targetPed then return end

    -- Check distance
    local emsCoords = GetEntityCoords(emsPed)
    local targetCoords = GetEntityCoords(targetPed)
    if #(emsCoords - targetCoords) > 3.0 then return end

    -- Check if EMS has required items
    local requiredItems = Config.TreatmentItems[treatmentType]
    for _, item in ipairs(requiredItems) do
        if exports.ox_inventory:Search(src, 'count', item.name) < item.count then
            TriggerClientEvent('ox_lib:notify', src, {
                title = 'Missing supplies',
                description = 'You need: ' .. item.label,
                type = 'error'
            })
            return
        end
    end

    -- Remove items and start treatment
    for _, item in ipairs(requiredItems) do
        exports.ox_inventory:RemoveItem(src, item.name, item.count)
    end

    -- Trigger animations on both players
    TriggerClientEvent('death:startTreatmentAnim', src, targetId)
    TriggerClientEvent('death:receivingTreatment', targetId, src, treatmentType)

    -- After treatment duration, revive
    SetTimeout(Config.TreatmentDurations[treatmentType], function()
        TriggerClientEvent('death:revived', targetId, treatmentType)
        TriggerClientEvent('death:treatmentComplete', src)
    end)
end)

Système de réapparition de l'hôpital

Lorsque le minuteur de purge expire sans intervention EMS ou que le joueur choisit d'abandonner, le système de réapparition de l'hôpital gère son retour au jeu. Présentez au joueur un écran de mort NUI qui affiche deux options : attendre les services médicaux d'urgence avec un indicateur visuel des médecins de garde à proximité, ou réapparaître à l'hôpital le plus proche moyennant des frais. La réapparition de l’hôpital ne devrait pas être instantanée. Appliquez une animation de chargement ou une transition de fondu au noir, puis téléportez le joueur à l'intérieur de l'hôpital avec une animation de réveil dans son lit en utilisant un intérieur de chambre d'hôpital et un accessoire de lit appropriés. Facturez une facture médicale qui évolue en fonction de la situation financière actuelle du joueur, en prenant un pourcentage de son argent plutôt qu'un montant forfaitaire, ce qui évite que le coût soit insignifiant pour les joueurs fortunés et dévastateur pour les nouveaux arrivants. Après la réapparition de l'hôpital, appliquez une période de recharge pour blessure pendant laquelle le joueur a des statistiques réduites et porte visuellement une blouse d'hôpital avant de pouvoir changer de vêtements. Suivez la fréquence des décès pour mettre en œuvre une pénalité légère selon laquelle les joueurs qui meurent très fréquemment dans un court laps de temps sont confrontés à des coûts de réapparition croissants et à des périodes de récupération plus longues, décourageant les comportements imprudents sans que la mort ne soit trop punitive pour des incidents occasionnels.

Conception de l'interface utilisateur de l'écran de la mort

L'écran de la mort est la principale interface que les joueurs voient pendant leur moment de jeu le plus vulnérable, il doit donc être propre, informatif et atmosphérique. Construisez-le comme une superposition NUI qui prend le contrôle de l'écran lorsque le joueur entre dans l'état abattu. Appliquez un filtre de désaturation progressif qui supprime la couleur du monde du jeu, une subtile vignette rouge autour des bords de l'écran qui palpite au rythme d'un battement de cœur et un léger effet de flou qui s'intensifie à mesure que le minuteur de saignement diminue. Affichez le temps de saignement restant sous la forme d'un compte à rebours bien visible au centre ou en haut de l'écran, ainsi que des invites d'action : appuyez sur E pour appeler à l'aide via le téléphone du jeu, maintenez G pour activer le dernier combat si disponible, ou maintenez X pour abandonner et réapparaître à l'hôpital. Affichez une notification lorsque EMS est en route avec une heure d'arrivée estimée, et affichez les noms et les distances des joueurs à proximité qui pourraient potentiellement aider. Gardez l’interface utilisateur minimale et évitez d’encombrer l’écran avec des informations inutiles pendant ce qui devrait être un moment tendu et immersif. Utilisez des animations GSAP subtiles pour les éléments de l'interface utilisateur qui s'affichent en fondu et le compte à rebours afin de conserver l'aspect visuel.

Système de blessure et de récupération

Étendez le système de mort avec une couche de blessures qui persiste après la résurrection pour ajouter de la profondeur et des conséquences. Lorsqu'un joueur est réanimé par EMS ou réapparaît à l'hôpital, attribuez des effets de blessure en fonction de la cause du décès. Les blessures par balle provoquent une animation de boiterie qui réduit la vitesse de déplacement de 20 % pendant 15 minutes. Les accidents de véhicule appliquent un effet étourdi avec un tremblement d'écran périodique pendant 10 minutes. Les chutes de hauteur provoquent une blessure à la jambe qui empêche le sprint. La noyade provoque une animation de toux et une endurance réduite. Stockez les blessures actives dans le sac d'état du joueur afin qu'elles persistent lors des redémarrages du script et soient visibles par les autres joueurs. Créez un parcours de traitement des blessures où les joueurs peuvent consulter un PNJ médecin ou un pharmacien pour recevoir des médicaments qui réduisent la durée des effets des blessures. Mettez en œuvre un système de douleur dans lequel les blessures graves provoquent des sursauts occasionnels de l'écran et des gémissements supprimés que les joueurs à proximité peuvent entendre, créant ainsi des opportunités pour les citoyens concernés ou les criminels prédateurs d'identifier et d'interagir avec les joueurs récemment blessés. Le système de blessures comble le fossé entre la mort et la guérison complète, faisant de chaque décès une expérience en plusieurs phases qui prolonge le jeu de rôle plutôt que d'être un inconvénient momentané.

Contrôles de configuration et d'administration

Un système de décès flexible nécessite des options de configuration complètes et des outils d'administration. Fournissez aux propriétaires de serveurs un fichier de configuration qui contrôle tous les aspects du timing : durée de saignement, durée et disponibilité du dernier combat, formule de coût de réapparition à l'hôpital, durées de traitement EMS par niveau, durées des effets de blessure par type et temps de recharge entre les décès avant que des pénalités croissantes ne s'appliquent. Ajoutez des commandes d'administration qui permettent aux membres du personnel de réanimer instantanément un joueur, de tuer un joueur à des fins administratives, d'ajuster le minuteur de saignement d'un joueur spécifique, d'effacer toutes les blessures actives et de basculer en mode Dieu pour des événements ou des situations administratives. Créez un journal des décès qui enregistre la mort de chaque joueur avec l'horodatage, les coordonnées de localisation, la cause du décès, l'identifiant du tueur le cas échéant, le temps de réponse de l'EMS et si le joueur a été réanimé ou réapparu. Exposez ce journal via ton panneau d'administration afin que le personnel puisse enquêter sur des schémas suspects tels que des décès répétés au même endroit indiquant un camp de réapparition, ou des résurrections inhabituellement rapides suggérant un abus d'EMS. Le système de mort doit émettre des événements auxquels d'autres scripts peuvent se connecter, permettant à ton système de travail d'informer les services médicaux d'urgence en service des joueurs abattus à proximité et à ton système de police de signaler les endroits où des morts violentes sont fréquentes.

Partager cet article

Prêt à améliorer votre serveur ?

Découvrez nos scripts FiveM premium dans la boutique Agency Scripts ou rejoignez notre communauté Discord pour le support et les mises à jour.