Aller au contenu
Rechercher dans
  • Plus d’options…
Rechercher les résultats qui contiennent…
Rechercher les résultats dans…

Rechercher dans la communauté

Affichage des résultats pour les étiquettes 'intermédiaire'.



Plus d’options de recherche

  • Rechercher par étiquettes

    Saisir les étiquettes en les séparant par une virgule.
  • Rechercher par auteur

Type du contenu


Forums

  • Vie du forum
    • Annonces & informations
    • Suggestions
    • Discussion générale
  • FiveM
    • Annonces
    • Tutoriels
    • Ressources
    • Aide & Support
    • Communautées
    • Documentation FiveM
  • Alt:V Multiplayer
    • Annonces
    • Tutoriels
    • Ressources
    • Aide & Support
    • Communautées
    • Documentation Alt:V
  • RageMP
    • Annonces
    • Tutoriels
    • Ressources
    • Aide & Support
    • Communautées
    • Documentation RageMP
  • Mapping
    • Discussion générales
    • Tutoriels
    • Partages
    • Aide & Support

Blogs

Il n’y a aucun résultat à afficher.

Il n’y a aucun résultat à afficher.


Rechercher les résultats dans…

Rechercher les résultats qui contiennent…


Date de création

  • Début

    Fin


Dernière mise à jour

  • Début

    Fin


Filtrer par nombre de…

8 résultats trouvés

  1. Niveau requis : Intermédiaire Informations : Avec ce tutoriel, vous serez en mesure de définir le poids de chaque véhicule séparément par modèle et non plus par type de véhicule dans le script suivant : I. Modification du fichier config.lua II. Modification du client.lua Conclusions : Vous pouvez désormais configurer le poids de chaque véhicule indépendamment, sachez que cela risque d'être long, puisque je n'ai pas de liste pré-faire à vous fournir. Cependant je peut vous conseiller d'utiliser ce bout de code pour connaître le modèle du véhicule. /!\ Attention toute fois, les noms doivent exactement correspondre à ce qui vous sera affiché en jeu (donc en majuscule, prioritairement) /!\
  2. les factures devraient partir du compte en banque comme IRL pour plus de RP permet de payé sans argent et sa se décompte de la banque comme une vrai facture et non sur l'argent liquide que tu à sur toi dans esx-billing remplace votre code par celui-ci ESX.RegisterServerCallback('esx_billing:payBill', function(source, cb, id) local _source = source local xPlayer = ESX.GetPlayerFromId(_source) MySQL.Async.fetchAll( 'SELECT * FROM billing WHERE id = @id', { ['@id'] = id }, function(result) local sender = result[1].sender local targetType = result[1].target_type local target = result[1].target local amount = result[1].amount local xPlayers = ESX.GetPlayers() local foundPlayer = nil for i=1, #xPlayers, 1 do local xPlayer2 = ESX.GetPlayerFromId(xPlayers[i]) if xPlayer2.identifier == sender then foundPlayer = xPlayer2 break end end if targetType == 'player' then if foundPlayer ~= nil then --if xPlayer.get('money') >= amount then MySQL.Async.execute( 'DELETE from billing WHERE id = @id', { ['@id'] = id }, function(rowsChanged) xPlayer.removeAccountMoney('bank', amount) foundPlayer.addMoney(amount) TriggerClientEvent('esx:showNotification', xPlayer.source, _U('paid_invoice') .. amount) TriggerClientEvent('esx:showNotification', foundPlayer.source, _U('received_payment') .. amount) cb() end ) --else --TriggerClientEvent('esx:showNotification', _source, _U('player_not_logged')) --cb() --end end else TriggerEvent('esx_addonaccount:getSharedAccount', target, function(account) --if xPlayer.get('money') >= amount then MySQL.Async.execute( 'DELETE from billing WHERE id = @id', { ['@id'] = id }, function(rowsChanged) xPlayer.removeAccountMoney('bank', amount) account.addMoney(amount) TriggerClientEvent('esx:showNotification', xPlayer.source, _U('paid_invoice') .. amount) if foundPlayer ~= nil then TriggerClientEvent('esx:showNotification', foundPlayer.source, _U('received_payment') .. amount) end cb() end) --else --TriggerClientEvent('esx:showNotification', xPlayer.source, _U('no_money')) --if foundPlayer ~= nil then -- TriggerClientEvent('esx:showNotification', foundPlayer.source, _U('target_no_money')) --end --end end) end end ) end)
  3. Sarah

    intermédiaire Un optimisé nonpcdrop

    Citizen.CreateThread(function() while true do Citizen.Wait(1) -- List of pickup hashes (https://pastebin.com/8EuSv2r1) RemoveAllPickupsOfType(0xDF711959) -- carbine rifle RemoveAllPickupsOfType(0xF9AFB48F) -- pistol RemoveAllPickupsOfType(0xA9355DCD) -- pumpshotgun end end) anciens code, le plus répandue a jeté a la poubelle local pedindex = {} function SetWeaponDrops() -- This function will set the closest entity to you as the variable entity. local handle, ped = FindFirstPed() local finished = false -- FindNextPed will turn the first variable to false when it fails to find another ped in the index repeat if not IsEntityDead(ped) then pedindex[ped] = {} end finished, ped = FindNextPed(handle) -- first param returns true while entities are found until not finished EndFindPed(handle) for peds,_ in pairs(pedindex) do if peds ~= nil then -- set all peds to not drop weapons on death. SetPedDropsWeaponsWhenDead(peds, false) end end end Citizen.CreateThread(function() while true do Citizen.Wait(500) SetWeaponDrops() end end)
  4. Optimiser ses ressources FiveM Une mise a jour de FiveM a ajouté un moyen de détecter les pertes de performances des scripts grâce à un encadré qui s'affiche pour tous les joueurs sur le serveur, et qui précise la ressource et le nombre de FPS perdus à cause de la mauvaise performance du script. Ce guide est destiné aux personnes courageuses, notamment les développeurs, mais aussi les administrateurs des serveur afin d'apprendre à optimiser ses ressources. Théorie! Avant de corriger les problèmes de performances, il serait utile de savoir quoi, quand et comment la pop-up apparaît. Pour les personnes qui n'auraient pas encore aperçu cette pop-up : Le message est détaillé en 3 parties critique qui vous seront nécessaire afin de découvrir les problèmes que vous avez. Le message est formaté de cette façon : [resource] is taking [time] ms (or -[fps] FPS @ 60 Hz) [resource] est le nom de votre ressource qui provoque ce problème de performance, il correspond au nom de votre ressource dans le dossier resource/ de votre serveur. [time] est le temps (en milisecondes) que prends votre ressource entière à s’exécuter. Il est important de noter que c'est une moyenne du temps d’exécution sur 64 ticks. La moyenne est calculée en permanence et si celle-ci dépasse 5ms, le message s'affiche. [fps] est le nombre total de fps qui perdu en utilisant la ressource. Ce nombre est défini sur une base de 64 FPS. Améliorer la performance La fréquence L'un des plus évident, mais pourtant toujours autant de script le font, est la fréquence à la quelle le code est exécuter. Il y a souvent dans les scripts ceci Citizen.Wait(0), ça signifie que le code à l'intérieur s'exécute à chaque tick, ce qui est problématique en terme de performances. Ceci est la première raison pour laquelle la pop-up apparaît. Voici donc quelques règles bêtes : N'exécutez que du code qui a besoin d'être exécuter chaque frame, par exemple les natives qui contiennent "ThisFrame" dans leur nom.(Il y a bien évidemment d'autre natives sans le nom qui ont besoin d'être exécuter chaque frame). Réfléchissez à un interval d'exécution raisonnable pour votre code, par exemple vous n'avez pas besoin de vérifier 60 fois par seconde si un joueur est mort, préférez plutôt à vérifier une à deux fois par seconde pour ce genre de choses. Séparez les morceaux de code qui n'ont pas besoin d'être exécuter à chaque frame, vous pouvez à la place utiliser une variable globale pour influencer le code qui est exécuter à chaque frame sans exécuter du code gourmand. Example: Code initial -> S’exécute en 119ms Citizen.CreateThread(function() while(true) do if IsPedDeadOrDying(PlayerPedId()) then ShowHudComponentThisFrame(9) -- street name end if IsPedInAnyVehicle(PlayerPedId(), true) then ShowHudComponentThisFrame(6) --vehicle name end Citizen.Wait(0) end end) Code amélioré -> S'exécute en 7ms local isDead = false local inVehicle = false Citizen.CreateThread(function() while(true) do if isDead then ShowHudComponentThisFrame(9) -- street name end if inVehicle then ShowHudComponentThisFrame(6) --vehicle name end Citizen.Wait(0) end end) Citizen.CreateThread(function() while(true) do isDead = IsPedDeadOrDying(PlayerPedId()) inVehicle = IsPedInAnyVehicle(PlayerPedId(), true) Citizen.Wait(500) end end) les exemples sont multipliés par 100 par rapport à la normal Les natives Les natives sont la base de tout script, mais n'oubliez pas que les natives sont plus gourmandes que le pure code en LUA, surtout lorsque vous avez beaucoup de natives à exécuter, cela va augmenter le temps d'exécution des natives, et augmenter le temps de chaque frame. Donc voici quelques règles à nouveau : Réfléchissez avant d'ajouter de multiples natives dans du code déjà gourmand, car cela va ralentir votre code, utilisez des alternatives si possible. Pensez bien à mettre en cache votre native si vous comptez l'utiliser plusieurs fois dans un code assez gourmand. Example Code initial -> S'exécute en 346ms Citizen.CreateThread(function() while true do local armor = GetPedArmour(PlayerPedId()) armor = armor + 1 if armor > 100 then armor = 0 end SetPedArmour(PlayerPedId(), armor) Citizen.Wait(0) end end) Une meilleur solution -> S'exécute en 255ms Citizen.CreateThread(function() local armor = GetPedArmour(PlayerPedId()) while true do armor = armor + 1 if armor > 100 then armor = 0 end SetPedArmour(PlayerPedId(), armor) Citizen.Wait(0) end end) Une bien meilleure solution-> S'exécute en 216 ms Citizen.CreateThread(function() local player = PlayerPedId() local armor = GetPedArmour(player) while true do armor = armor + 1 if armor > 100 then armor = 0 end SetPedArmour(player, armor) Citizen.Wait(0) end end) les exemples sont multipliés par 50 par rapport à la normal Mais la question ici est : Voulons nous vraiment mettre l'armure au personnage à chaque tick ? Un plus grand délais serait largement suffisant. Essayez de garder ça dans le coin de votre tête! Gardez tout ça bien au chaud, c'est une bonne leçon de programmation, et cela vous permet pour sûr de gagner en performances sur votre serveur. C'est du bon sens, mais il y a toujours des ressources qui semblent avoir des problèmes avec ça. Example local pedindex = {} function SetWeaponDrops() local handle, ped = FindFirstPed() local finished = false repeat if not IsEntityDead(ped) then pedindex[ped] = {} end finished, ped = FindNextPed(handle) until not finished EndFindPed(handle) for peds,_ in pairs(pedindex) do if peds ~= nil then SetPedDropsWeaponsWhenDead(peds, false) end end end Citizen.CreateThread(function() while true do Citizen.Wait(0) SetWeaponDrops() end end) Un meilleur moyen de réaliser ce code: function SetWeaponDrops() local handle, ped = FindFirstPed() local finished = false repeat if not IsEntityDead(ped) then SetPedDropsWeaponsWhenDead(ped, false) end finished, ped = FindNextPed(handle) until not finished EndFindPed(handle) end Citizen.CreateThread(function() while true do SetWeaponDrops() Citizen.Wait(500) end end) Conclusion Evidemment, ce guide va vous donner quelques astuces et réponses à pourquoi vos ressources ont des problèmes de performances. N'hésitez pas à faire part de vos ressentis, et si vous avez toujours des problèmes de performances, n'hésitez pas à demander de l'aide dans la section appropriée. Bon courage à vous ! Lien original du tutoriel
  5. jNous partons du principe que pour s’occuper d’un serveur, vous savez déjà vous connecter en SSH avec putty ou autre possibilité disponible sous windows 10. Nous partons d’un vps avec une nouvelle installation en debian 8. Sommaire: Mise à jour de debian 8 Installation du serveur MySQL Installation de phpMyAdmin Création d'un utilisateur L'installation d'FXserver Changer le propriétaire des fichiers/dossiers Déconnexion du root et connexion avec l'utilisateur Démarrage d'FXserver Garder le serveur actif lors de la fermeture du terminal Sécuriser la base de son serveur sous Linux. 1.Mise à jour de debian 8: Commençons par la mise à jour de Debian 8. Pour ce faire, nous utilisons les commandes suivantes: apt install sudo apt update apt upgrade 2.Installation du serveur MySQL: Une fois les mises à jour terminées, nous installons notre serveur de base de données. apt install mysql-client mysql-server Vous acceptez la continuité de l’installation, lors de l’installation, l’installateur vous proposera de choisir un nouveau mot de passe, et de le confirmer une deuxième fois. A vous de choisir… 3.Installation de phpMyAdmin: Après l'installation du serveur MySQL, nous installons phpMyAdmin. apt install phpmyadmin Vous acceptez la continuité de l'installation Faites ESPACE pour valider apache2, puis ENTRER Lorsqu'il vous demande s'il faut configurer le dbconfig-common, choisissez non. A ce stade, vous devriez pouvoir vous connecter à votre phpMyAdmin depuis votre navigateur: http://#VOTRE_IP_SERVEUR#/phpmyadmin/ Si phpMyAdmin ne s’affiche pas, utilisez la commande suivante pour créer le lien symbolique (équivalent d’un raccourci), il se peut qu’il ne soit pas créé lors de l’installation : ln -s /usr/share/phpmyadmin/ /var/www/html/phpmyadmin Si vous avez une erreur lors de la connexion avec l'utilisateur root, faites ça: sudo mysql -u root use mysql; update user set plugin='' where User='root'; flush privileges; \q 4.Création d'un utilisateur Maintenant que nous avons le serveur MySQL fonctionnel, ainsi que phpMyAdmin, nous allons créer un utilisateur. Utilisez la commande : (nous utiliserons le nom “tutogta5” pendant tout le tutoriel) adduser tutogta5 Dans l’exemple ci-dessous, tutogta5, vous devez choisir un mot de passe pour l’utilisateur (ce que vous écrivez n’est pas visible, c’est normal). Il n’est pas nécessaire de remplir les autres informations. Vous acceptez la continuité de l’installation. 5.Installation d'FXserver À présent, passons à l’installation d’FXserver. Dirigeons-nous dans le dossier de l’utilisateur que vous venez de créer. Nous utiliserons pour se faire, la commande suivante : cd /home/NomDutilisateur Par rapport à l’utilisateur précédemment créé dans le tutoriel, nous utiliserons donc la commande : cd /home/tutogta5 Afin d’utiliser la dernière version d’FXserver, rendez-vous sur le site de fivem, et choisissez le dernier artifacts : https://runtime.fivem.net/artifacts/fivem/build_proot_linux/master/ Nous utiliserons la commande suivante pour télécharger l’artifacts choisit : wget https://runtime.fivem.net/artifacts/fivem/build_proot_linux/master/357-72e36554dbb95ad313b2f6a884fdd064e4173997/fx.tar.xz N’utilisez pas le lien fourni dans la commande, il n’est déjà plus à jour lors de la publication. A la fin du téléchargement, vous devriez voir le fichier fx.tar.xz sur votre SFTP. Afin de décompresser l'archive de l'artifacts, il faut préalablement installer le programme de décompression, utilisez la commande: apt install xz-utils Puis utilisez la commande suivante pour la décompression: tar xvfJ fx.tar.xz Faites ensuite un git clone (en cas de problème, regarder sous la capture d'écran ci-dessous) du répertoire github suivant): git clone https://github.com/citizenfx/cfx-server-data.git server-data server-data est le dossier qui sera créé lors du clonage du répertoire. Si git n'est pas installé, ce qui est probablement le cas si vous avez une nouvelle installation, vous pouvez l'installer avec la commande suivante, et ensuite réaliser le clonage du répetoire de l'étape précédente: apt install git A ce stade, vous devriez avoir sur votre FTP: Une fois extrait, vous pouvez supprimer le fichier fx.tar.xz. Pour ce faire, vous pouvez utiliser cette commande: rm fx.tar.xz Le server.cfg doit être placé dans le dossier server-data (vous pouvez l'importer via ftp, mais si vous souhaitez le faire en ligne de commande dans putty), voici les commandes: Vous utilisez ensuite de la commande suivante afin d'aller dans le répertoire server-data: cd /home/tutogta5/server-data Pour créer le server.cfg: touch server.cfg Pour éditer le server.cfg: nano server.cfg Pour sauvegarder le fichier, faites CTRL + X, il faudra valider les changements, puis ENTRER. Voici un exemple de server.cfg, que vous pouvez utiliser (attention ce n'est qu'un exemple, certaines lignes sont inutiles): https://pastebin.com/k72JQbeE Pour le server.cfg d'origine, c'est ici: https://docs.fivem.net/server-manual/setting-up-a-server/ 6.Changement de propriétaire des dossiers/fichiers. Utilisez cette ligne de commande afin de mettre votre utilisateur comme propriétaire: chown -R tutogta5:tutogta5 /home/tutogta5/ Explication: chown : commande système -R : le changement doit s’appliquer aux sous-dossiers et fichiers tutogta5 : nom de l’utilisateur :tutogta5 : nom du groupe de l’utilisateur /home/tutogta5/ : dossier qu’on va modifier (c’est le dossier général de l’utilisateur créé) Attention, cette commande ne fonctionne qu'avec l'utilisateur root ! Avant: Après: 7.Avant de démarrer votre FXserver, il y a une dernière étape à faire, Avant de démarrer votre FXserver, il y a une dernière étape à faire, rendez-vous préalablement dans le dosser server-data de votre utilisateur. Pour cette étape, il faut se connecter avec le compte utilisateur que vous avez créé. L’utilisateur « tutogta5 ». Se connecté à votre utilisateur (vous vous connecter à votre utilisateur, depuis le root): su tutogta5 Vous utilisez ensuite la commande suivante afin d'aller dans le répertoire server-data: cd /home/totugta5/server-data 8.Voici donc venu le moment de démarrer votre server Utilisez la commande suivante pour démarrer votre server: bash /home/tutogta5/run.sh +exec server.cfg Si tout a été fait correctement, vous devriez avoir ceci: Note importante : Les erreurs concernant les « libs 1 2 3 » et « resource 1 2 3 » sont normales, ce sont des libs et resource fictives données à titre d’exemple du server.cfg. 9.Pour garder votre serveur actif malgré le fermeture de votre terminal, vous aurez besoin de « Screen », Screen vous permet de multiplier les terminaux, il y a plusieurs avantages à cela, les 2 qui nous intéressent sont de pouvoir justement garder le serveur actif sans avoir besoin d’être toujours connecté au terminal, et de visualiser à plusieurs le même terminal. Encore une fois, rien de compliquer, pour installer screen il vous suffit de taper la commande suivante: apt install screen Voici quelques commandes basiques: Créer un screen nommé "team": screen -S team Lister les screen disponible: screen -ls Se connecter au screen avec l'id 9079.team screen -x 9079.team Se connecter automatiquement à un screen (si un seul disponible) screen -x Voici une liste de raccourcis rapide: Maintenez CTRL et appuyez sur « A » une fois (mais garder CTRL enfoncé) puis « a » : Revenir au terminal précédent « chiffre 0 à 9 » : Aller au terminal n°x « P » : Aller au terminal précédent « N » : Aller au terminal suivant « ” » : Afficher la liste des terminaux disponibles et on peut choisir avec le numéro ou les flèches « A » : Renommer le terminal courant « d » : Détacher le terminal. Il reste accessible ! « S » : Spliter le terminal en 2 « TAB » : Basculer sur le split suivant « X » : Fermer le split courant « x » : Verrouiller le screen avec le mot de passe de l’utilisateur courant « CTRL+ A » est la combinaison de touche qui permet « d’activer » la fonction raccourci. Source : gta5.cool
  6. si vous voulez rajouter le stress du a la faim copiez les lignes sur votre basicneeds. Vous pouvez définir le niveau et l'intensité du stress dans les lignes comprises entre 99 et 110. Entre les codes de la transaction que vous souhaitez augmenter Ajoutez simplement TriggerClientEvent ('esx_status: add', source, 'stress', 100000). Vous pouvez spécifier "100000" comme vous le souhaitez. https://forum.fivem.net/t/release-esx-food-water-drunk-status-bars-under-mini-map-esx-only/271338 voici un exemple. ESX = nil local IsDead = false local IsAnimated = false Citizen.CreateThread(function() while ESX == nil do TriggerEvent('esx:getSharedObject', function(obj) ESX = obj end) Citizen.Wait(0) end end) AddEventHandler('esx_basicneeds:resetStatus', function() TriggerEvent('esx_status:set', 'hunger', 500000) TriggerEvent('esx_status:set', 'thirst', 500000) TriggerEvent('esx_status:set', 'stress', 100000) end) RegisterNetEvent('esx_basicneeds:healPlayer') AddEventHandler('esx_basicneeds:healPlayer', function() -- restore hunger & thirst TriggerEvent('esx_status:set', 'hunger', 1000000) TriggerEvent('esx_status:set', 'thirst', 1000000) TriggerEvent('esx_status:set', 'stress', 200000) -- restore hp local playerPed = PlayerPedId() SetEntityHealth(playerPed, GetEntityMaxHealth(playerPed)) end) AddEventHandler('esx:onPlayerDeath', function() IsDead = true end) AddEventHandler('playerSpawned', function(spawn) if IsDead then TriggerEvent('esx_basicneeds:resetStatus') end IsDead = false end) AddEventHandler('esx_status:loaded', function(status) TriggerEvent('esx_status:registerStatus', 'hunger', 1000000, '#CFAD0F', function(status) return true end, function(status) status.remove(100) end) TriggerEvent('esx_status:registerStatus', 'thirst', 1000000, '#0C98F1', function(status) return true end, function(status) status.remove(75) end) TriggerEvent('esx_status:registerStatus', 'stress', 100000, '#cadfff', function(status) return false end, function(status) status.add(20) end) Citizen.CreateThread(function() while true do Citizen.Wait(1000) local playerPed = PlayerPedId() local prevHealth = GetEntityHealth(playerPed) local health = prevHealth local stressVal = 0 TriggerEvent('esx_status:getStatus', 'hunger', function(status) if status.val == 0 then if prevHealth <= 150 then health = health - 5 else health = health - 1 end end end) TriggerEvent('esx_status:getStatus', 'thirst', function(status) if status.val == 0 then if prevHealth <= 150 then health = health - 5 else health = health - 1 end end end) TriggerEvent('esx_status:getStatus', 'stress', function(status) stressVal = status.val end) if health ~= prevHealth then SetEntityHealth(playerPed, health) end if stressVal >= 750000 then Citizen.Wait(3000) ShakeGameplayCam('LARGE_EXPLOSION_SHAKE', 0.35) elseif stressVal >= 700000 then Citizen.Wait(4000) ShakeGameplayCam('LARGE_EXPLOSION_SHAKE', 0.27) elseif stressVal >= 600000 then Citizen.Wait(5000) ShakeGameplayCam('LARGE_EXPLOSION_SHAKE', 0.20) elseif stressVal >= 350000 then Citizen.Wait(6000) ShakeGameplayCam('LARGE_EXPLOSION_SHAKE', 0.07) end end end) end)
  7. Niveau requis : Intermédiaire Description: Ce tutoriel vous permettra de définir des variables de configuration (donc convar) pour votre serveur, et/ou vos scripts. Certaines variables pourront être récupérées dans vos scripts, et d'autre vous permettront d'afficher des informations supplémentaires sur le panel de votre serveur. Les convars sont un moyen efficace pour définir des valeurs sur votre serveur, autant dans des scripts qu'ailleurs. I. Convars standard Nous allons dans un premier temps, voir les convars dites "standards" parmis les 3 types de convar disponibles. Vous pouvez les définirs via la console serveur, ou dans vos ressources. II. Server replicated convars Ce sont le deuxième type de convar que vous pouvez utilisés, et elles vous permettent de synchronisés vos convars entre le serveur et le client. La valeur sera récupérable côté client, mais sera uniquement modifiable côté serveur. III. Convars d'information serveur Ces convars fonctionnent de la même manière que les convars standard, cependant, elles permettent d'afficher des informations supplémentaires sur la page de votre serveur. Exemple : Conclusions : Les convars peuvent être utilisées dans de nombreuses situations, et sont très utiles pour facilité la configuration de scripts que vous seriez par exemple amenés à être partagés. Elles permettent une configuration simple et facilement compréhensible sans avoir à toucher le code du script. N'hésitez donc pas à les utilisés souvent, et officieusement. Crédits: https://docs.fivem.net/scripting-reference/convars/ pour l'image de l'exemple
  8. Anthony

    intermédiaire Logs Discord

    Il peut être intéressant d'ajouter une fonctionnalité permettant d'enregistré toutes sortes d'informations depuis votre serveur de jeu sur discord. Dans ce tutoriel, je vais vous expliquer comment fonctionne les webhook discord. Rédaction de la fonction Cette fonction sera utilisé évidemment côté serveur. local WebhookKey = "" function sendWebhookToDiscord() end Voilà, la fonction est déclarée, mais avant tous, nous allons avoir besoin de l'URL du webhook. Pour ce faire, rendez-vous sur Discord puis suivez les étapes: 1 - Accéder aux Paramètres du serveur 2 - Accéder à l'onglet Webhook 3 - Procéder a la création du webhook Le nom du webhook Le salon dans lequel il vous communiquera les informations Éventuellement une image Il est possible de créer plusieurs webhooks pour différentes communications d'informations ! Avant d’enregistrer le webhook penser a copier l'URL et a le coller dans le fichier serveur de votre script ! local WebhookKey = "https://discordapp.com/api/webhooks/565336419350872064/SzBXtGmhUhu4py0w5qB3IWluFXWuBN8BcCdlkUvJrUghbsG5RHODv3RoL0fhLQUTnJjr" function sendWebhookToDiscord() end Il est maintenant temps d'entrer dans le vif du sujet. Nous allons utiliser une native permettant d'envoyer une information en externe depuis votre script. Pour plus d'informations, rendez-vous ici . local WebhookKey = "https://discordapp.com/api/webhooks/565336419350872064/SzBXtGmhUhu4py0w5qB3IWluFXWuBN8BcCdlkUvJrUghbsG5RHODv3RoL0fhLQUTnJjr" function sendWebhookToDiscord() PerformHttpRequest(WebhookKey, function(errorCode, resultData, resultHeaders) end, 'POST', json.encode({}), { ['Content-Type'] = 'application/json' }) end Cette native nécessite deux arguments obligatoires. Un URL pour effectuer la requête HTTP. Dans notre cas, ce sera la variable WebhookKey. Un callback (fonction de rappel à appeler une fois la demande terminée. Il n'est pas nécessaire de mettre quelque chose dans le callback, mais je vais vous montrer les informations que les trois arguments du callback peuvent me retourner. Hors nous allons ajouter trois arguments supplémentaires. La méthode REST que nous allons utiliser. Il existe plusieurs méthodes comme GET, POST, BUT, PATCH, DELETE.. mais celle qui va nous intéressé sera POST Les données que nous allons envoyer a notre webhook. Tous simplement les informations que nous souhaitons transmettre sur discord L'en-têtes qui indique le type MIME de la ressource. Plus technique et sans réel importance dans votre cas, le plus important et de ne pas l'oublier ! Nous allons maintenant encoder les informations que nous souhaitons envoyer en JSON pour faire la requête. Exemple tous bête, voilà comment je veux appeler ma fonction avec les informations que je veux faire passer. sendWebhookToDiscord("Mon serveur", "Le serveur vient de ce lancer !", 16711680) Nous allons devoir réceptionner les différents données, voici comment procéder: local WebhookKey = "https://discordapp.com/api/webhooks/565336419350872064/SzBXtGmhUhu4py0w5qB3IWluFXWuBN8BcCdlkUvJrUghbsG5RHODv3RoL0fhLQUTnJjr" function sendWebhookToDiscord(name, message, color) PerformHttpRequest(WebhookKey, function(errorCode, resultData, resultHeaders) end, 'POST', json.encode({}), { ['Content-Type'] = 'application/json' }) end Dans notre fonction: name = "Mon serveur" message = "Le serveur vient de ce lancer !" color = 16711680 Pour la couleur, rendez-vous sur le site https://convertingcolors.com, choisissez votre couleur, puis récupérer la valeur décimal ! Les données sont passé dans la fonction, maintenant nous allons devoir les mettre en formes afin de les envoyer, nous allons créer une variable qui regroupera les données. local WebhookKey = "https://discordapp.com/api/webhooks/565336419350872064/SzBXtGmhUhu4py0w5qB3IWluFXWuBN8BcCdlkUvJrUghbsG5RHODv3RoL0fhLQUTnJjr" function sendWebhookToDiscord(name, message, color) local myEmbed = { { title = message, color = color, type = "rich", footer = { text = "mon Webhook discord", } } } PerformHttpRequest(WebhookKey, function(errorCode, resultData, resultHeaders) end, 'POST', json.encode({}), { ['Content-Type'] = 'application/json' }) end Vous allez me dire comment je sais la mise en forme qui faut, tous simplement de la documentation, ce site vous permettra de voir la mise en forme de votre variable , La mise en forme sur le site est en JSON, vous devez la faire en LUA, prenez exemple sur la variable myEmbed ! Lien vers le site Il est maintenant temps mettre tous ça dans l'encodage en JSON: local WebhookKey = "https://discordapp.com/api/webhooks/565336419350872064/SzBXtGmhUhu4py0w5qB3IWluFXWuBN8BcCdlkUvJrUghbsG5RHODv3RoL0fhLQUTnJjr" function sendWebhookToDiscord(name, message, color) local myEmbed = { { title = message, color = color, type = "rich", footer = { text = "mon Webhook discord", } } } PerformHttpRequest(WebhookKey, function(errorCode, resultData, resultHeaders) end, 'POST', json.encode({ username = name,embeds = myEmbed}), { ['Content-Type'] = 'application/json' }) end Si vous avez bien observer, j'ai mis username / embeds dans le json.encode(), pour en savoir plus, rendez vous sur La documentation de Discord pour les webhooks. Nous allons maintenant tester tous ça, voici un aperçu global du code: local WebhookKey = "https://discordapp.com/api/webhooks/565336419350872064/SzBXtGmhUhu4py0w5qB3IWluFXWuBN8BcCdlkUvJrUghbsG5RHODv3RoL0fhLQUTnJjr" function sendWebhookToDiscord(name, message, color) local myEmbed = { { title = message, color = color, type = "rich", footer = { text = "mon Webhook discord", } } } PerformHttpRequest(WebhookKey, function(errorCode, resultData, resultHeaders) end, 'POST', json.encode({ username = name,embeds = myEmbed}), { ['Content-Type'] = 'application/json' }) end sendWebhookToDiscord("Mon serveur", "Le serveur vient de ce lancer !", 16711680) Voici le resultat sur discord lors du démarrage du serveur: Vous pouvez également ajouter les trois print, simple cas de prévention ! local WebhookKey = "https://discordapp.com/api/webhooks/565336419350872064/SzBXtGmhUhu4py0w5qB3IWluFXWuBN8BcCdlkUvJrUghbsG5RHODv3RoL0fhLQUTnJjr" function sendWebhookToDiscord(name, message, color) local myEmbed = { { title = message, color = color, type = "rich", footer = { text = "mon Webhook discord", } } } PerformHttpRequest(WebhookKey, function(errorCode, resultData, resultHeaders) print("Returned error code:" .. tostring(errorCode)) print("Returned data:" .. tostring(resultData)) print("Returned result Headers:" .. tostring(json.encode(resultHeaders))) end, 'POST', json.encode({ username = name,embeds = myEmbed}), { ['Content-Type'] = 'application/json' }) end sendWebhookToDiscord("Mon serveur", "Le serveur vient de ce lancer !", 16711680) Pour pouvoir faire une requête depuis un autre script, nous allons utiliser un Event. Ajouter l'event dans votre script côté serveur a la suite du code que nous avons rédigé. RegisterServerEvent("notifyDiscord") AddEventHandler("notifyDiscord", function(info1, info2, info3) sendToDiscord(info1, info2, info3) end) Pour sollicité cet Event, rien de plus simple, dans un script différent, faite une requête : TriggerServerEvent("notifyDiscord", "Mon serveur", "Ma description", 16711680) En espérant vous avoir éclairci sur les webhook. Libre de votre imagination a présent ! Courage a vous !
×
×
  • Créer...

Information importante

En utilisant ce site, vous acceptez les présents règlements Conditions d’utilisation, Politique de confidentialité,Règles.