optimize fivem scripts

Comment optimiser les scripts FiveM (détaillé)

Les scripts FiveM peuvent être extrêmement gratifiants, mais lorsque des problèmes de performances surviennent, ils peuvent rapidement devenir un cauchemar. De nombreux développeurs se retrouvent bloqués par le message "slow resource warning" (avertissement de ressources lentes) et il s'agit d'un piège bien trop courant qui peut enliser votre serveur. Nous allons donc vous expliquer comment l'éviter et optimiser vos scripts pour une expérience de jeu plus fluide.


Découvrez notre nouvel outil d'IA pour optimiser les scripts

Optimisez rapidement vos scripts grâce à notre nouvel outil FiveM AI Tool :


Avant de plonger dans le processus d'optimisation, il est essentiel de comprendre ce que le message d'avertissement nous dit réellement. Il fournit trois points de données critiques, présentés comme suit :

[ressource] prend [temps] ms (ou -[fps] FPS @ 60 Hz)

  • [ressource]Le nom de la ressource qui fonctionne lentement est directement lié au nom du dossier dans le répertoire resource/ de votre serveur.
  • [heure]: le temps en millisecondes qu'il a fallu pour exécuter l'ensemble de la ressource. Ce temps est une mesure continue, dont la moyenne est calculée sur 64 ticks. Si le temps moyen des 64 échantillons dépasse 5 ms, le message d'avertissement apparaît.
  • [fps]: le nombre total d'images par seconde (FPS) déduites par l'exécution de cette ressource. Ce montant est calculé sur une base de 60 images par seconde.

Optimisation de la fréquence

Un problème courant réside dans la fréquence d'exécution du code. Une exécution trop fréquente du code peut entraîner des problèmes de performance. Voici quelques règles générales :

  • N'exécutez le code que lorsqu'il doit être exécuté à chaque tic-tac. Certains natifs contenant "ThisFrame" dans leur nom en sont des exemples typiques.
  • Fixez un intervalle raisonnable pour l'exécution du code. Toutes les fonctions n'ont pas besoin de vérifier les conditions 60 fois par seconde. Envisagez des intervalles plus longs pour les vérifications moins critiques.
  • Séparer tout code qui n'a pas besoin d'être exécuté à chaque image. Utilisez des variables globales pour influencer le code qui s'exécute à chaque tic-tac sans exécuter de code coûteux.

Prenons l'exemple suivant : le code initial s'exécute en 119 ms et la version optimisée en 7 ms :

Code initial 119ms:

Citizen.CreateThread(function()
    while(true) do
        if IsPedDeadOrDying(PlayerPedId()) then
            ShowHudComponentThisFrame(9) -- nom de la rue
        end

        if IsPedInAnyVehicle(PlayerPedId(), true) then
            ShowHudComponentThisFrame(6) -- nom du véhicule
        fin
      Citizen.Wait(0)
    end
end)

Code optimisé 7ms:

local isDead = false
local inVehicle = false

Citizen.CreateThread(function()
    while(true) do
        if isDead then
            ShowHudComponentThisFrame(9) -- nom de la rue
        fin

        if inVehicle then
            ShowHudComponentThisFrame(6) -- nom du véhicule
        fin
        
        Citoyen.attend(0)
    end
end)

Citizen.CreateThread(function()
    while(true) do
        isDead = IsPedDeadOrDying(PlayerPedId())
        inVehicle = IsPedInAnyVehicle(PlayerPedId(), true)
        Citizen.Wait(500)
    end
end)

Optimiser l'utilisation des natifs

Les natifs sont au cœur de tout script, mais leur appel peut être coûteux. Le temps d'exécution peut augmenter de manière significative, en particulier dans le cas d'un chemin de code chaud comportant plusieurs natifs. Gardez ces règles à l'esprit :

  • Limiter l'utilisation des natifs dans les chemins de code chauds et envisager des alternatives.
  • Mettre en cache le résultat d'un natif au lieu de l'appeler plusieurs fois dans le même champ d'application.

Examinez les exemples suivants dans lesquels nous optimisons progressivement le code :

Code initial :

Citizen.CreateThread(function()
  while true do
    local armor = GetPedArmour(PlayerPedId())

    armure = armure + 1
    si armure > 100 alors
    armure = 0
    fin

    SetPedArmour(PlayerPedId(), armor)

    Citizen.Wait(0)
  fin
end)

Code amélioré :

Citizen.CreateThread(function()
  local armor = GetPedArmour(PlayerPedId())

  while true do

    armure = armure + 1
    si armure > 100 alors
        armure = 0
    fin
  
    SetPedArmour(PlayerPedId(), armor)
    Citoyen.attend(0)
  fin
end)

Code optimisé supplémentaire :

Citizen.CreateThread(function()
  local player = PlayerPedId()
  local armor = GetPedArmour(player)

  while true do
    armure = armure + 1
    si armure > 100 alors
    armure = 0
    fin

    SetPedArmour(joueur, armure)

    Citoyen.attend(0)
  fin
fin)

Cependant, demandez-vous si la valeur de l'armure doit vraiment être mise à jour à chaque tic-tac. Envisagez des intervalles plus longs pour ce type d'opérations.

Une meilleure façon de gérer les chutes d'armes

Les scripts qui gèrent les armes déposées par les PNJ posent souvent problème. S'ils sont mal gérés, ils peuvent entraîner une charge de travail inutile pour votre serveur. Considérez l'optimisation suivante :

Code initial :

local pedindex = {}

function SetWeaponDrops()
    local handle, ped = FindFirstPed()
    local finished = false
    repeat
        if not IsEntityDead(ped) then
                pedindex[ped] = {}
        end
        finished, ped = FindNextPed(handle)
    jusqu'à ce que la recherche ne soit pas terminée
    EndFindPed(handle)

    for peds,_ in pairs(pedindex) do
        if peds ~= nil then
            SetPedDropsWeaponsWhenDead(peds, false)
        end
    fin
fin

Citizen.CreateThread(function()
    while true do
        Citizen.Wait(0)
        SetWeaponDrops()
    fin
end)

Code optimisé :

fonction SetWeaponDrops()
    local handle, ped = FindFirstPed()
    local finished = false

    repeat
        if not IsEntityDead(ped) then
            SetPedDropsWeaponsWhenDead(ped, false)
        end
        terminé, ped = FindNextPed(handle)
    jusqu'à ce que ce ne soit pas terminé

    EndFindPed(handle)
fin

Citizen.CreateThread(function()
    while true do
        SetWeaponDrops()
        Citizen.Wait(500)
    end
end)

Dans la version optimisée, la fonction SetWeaponDrops() n'est appelé que toutes les 500 millisecondes au lieu de chaque tic-tac, ce qui améliore considérablement les performances.

FAQ

1. Q : Qu'est-ce que l'optimisation des scripts FiveM ?

R : L'optimisation des scripts de FiveM consiste à affiner vos scripts afin d'améliorer leur efficacité et leurs performances. Elle permet de s'assurer que vos ressources consomment moins d'énergie sur le serveur, ce qui peut conduire à un gameplay plus fluide et à la prise en charge d'un plus grand nombre de joueurs sans problèmes de performance significatifs.

2. Q : Pourquoi est-il important d'optimiser mes Scénarios FiveM?

R : L'optimisation de vos scripts FiveM est essentielle pour maintenir des performances élevées sur le serveur, réduire le décalage, prévenir les pannes de serveur et améliorer l'expérience de jeu dans son ensemble. Les scripts optimisés utilisent moins de ressources, ce qui est crucial lorsqu'on gère un serveur avec de nombreux joueurs actifs ou des scripts complexes.

3. Q : J'ai optimisé mes scripts, mais je rencontre toujours des problèmes de performance. Quelle est l'origine du problème ?

R : Il peut y avoir plusieurs raisons à cela. Il est possible que tous les scripts ne soient pas entièrement optimisés ou qu'il y ait des conflits entre différents scripts. Le matériel de votre serveur peut également être un facteur limitant. Veuillez me faire part de votre problème exact afin d'obtenir un diagnostic plus précis.

4. Q : Quelle est la fonction de Citizen.CreateThread dans mon script ?

A : Citizen.CreateThread est une fonction utilisée pour créer un nouveau fil continu dans un script. Cela signifie que tout code placé dans cette fonction s'exécutera dans une boucle infinie, ce qui est idéal pour exécuter de manière répétée des blocs de code spécifiques.

5. Q : Quel est le rôle de la Citoyen.attendez fonction ?

A : Citoyen.attendez est une fonction qui interrompt l'exécution du thread en cours pendant une durée déterminée. Cette fonction est utile pour gérer les performances du serveur en empêchant l'exécution immédiate d'opérations gourmandes en ressources.

6. Q : J'ai vu des scripts qui utilisent Citoyen.attend(0). Est-ce mauvais pour la performance ?

R : En utilisant Citoyen.attend(0) signifie que le script se met en pause pendant la durée la plus courte possible, c'est-à-dire qu'il n'y a pas de pause réelle. Cela peut entraîner des problèmes de performance si le code à l'intérieur du thread est lourd ou complexe, car il est exécuté à chaque frame du serveur. Il est généralement préférable d'utiliser un temps d'attente plus élevé si possible.

7. Q : Pourquoi le premier exemple du tutoriel est-il moins efficace que le second ?

R : Le premier exemple itère deux fois de manière inefficace sur tous les peds - d'abord pour les stocker dans un tableau, puis pour appliquer la fonction SetPedDropsWeaponsWhenDead fonction. Le deuxième exemple est plus efficace car il applique SetPedDropsWeaponsWhenDead dès qu'une pédale est trouvée, ce qui élimine la nécessité de stocker les pédales et d'itérer sur elles deux fois.

8. Q : Que dois-je faire si je ne suis pas sûr de pouvoir optimiser mes scripts ?

R : Il est toujours préférable de demander l'aide d'un professionnel en cas de doute. Des scripts mal optimisés peuvent être à l'origine de nombreux problèmes, qu'il s'agisse de mauvaises performances du serveur ou de plantages. De nombreuses ressources sont disponibles en ligne, telles que des forums et des tutoriels, et de nombreux professionnels peuvent vous aider.

Conclusion

L'optimisation de vos scripts FiveM implique une bonne compréhension de votre code, la connaissance de sa fréquence d'exécution et une utilisation intelligente des ressources disponibles. Mettez en œuvre ces stratégies et vous constaterez certainement une amélioration considérable des performances de votre serveur.

N'oubliez pas qu'il s'agit d'un processus continu et qu'il se peut que vous ne réussissiez pas du premier coup. Si vous continuez à rencontrer des problèmes de performance, n'hésitez pas à demander de l'aide. Bonne optimisation !

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

100% Qualité supérieure

Découvrez le summum du jeu avec notre code de qualité supérieure. Authentifié et sans fuite pour une expérience de jeu inégalée.

Sans risque

Achetez en toute confiance - nos scripts FiveM sont assortis d'une garantie de satisfaction et d'une politique de remboursement sans souci.

Accès instantané

Améliorez votre jeu immédiatement avec nos mods FiveM disponibles instantanément. Pas de retard, juste des ajouts qui changent le jeu.

Certifié sûr

Boostez votre jeu avec les ressources 100% qui sont sûres d'être utilisées. Rigoureusement testées et vérifiées pour votre tranquillité d'esprit.

FR