De nombreux addons affichent une erreur HTTP failed - ISteamHTTP isn't available! depuis la mise à jour de GMod (Août 2020). Si cette erreur est subitement apparue dans les logs de votre serveur garry's mod, sachez qu'elle était déjà présente mais silencieuse.

HTTP failed - ISteamHTTP isn't available!

Les développeurs du jeu ont modifié le comportement de HTTP, qui affiche désormais des erreurs qui auparavant étaient passées sous silence. Vous pouvez consulter la liste des modifications de cette update ici.

Les changements qui nous concernent sont les suivants:

  • Fixed HTTP() global trying to use invalid ISteamHTTP pointer after changelevel on dedicated servers causing a crash
  • Promoted "HTTP failed - ISteamHTTP isn't available!" to an ErrorNoHalt with stack to help identify what addon is causing the error message

Si vous avez cette erreur, vous devriez voir dans vos logs quelque chose du genre:

Lua Error: [myaddon] HTTP failed - ISteamHTTP isn't available!
1. Fetch - lua/includes/modules/http.lua:42
2. unknown - addons/myaddon/lua/shared/sh_init.lua:8

La bibliothèque HTTP est une fonction interne de STEAM et est initialisée assez tardivement lors du démarrage de votre serveur GMod. Pour être certain que HTTP est prêt pour utilisation, vous devez attendre le premier tick du serveur, c'est à dire que le serveur soit entièrement démarré et prêt à accueillir la connexion des joueurs.

Corriger l'erreur HTTP failed

Voici un exemple, si vous voulez vérifier par exemple si un addon est dans sa dernière version. Pour être certain que le serveur est lancé, on va utiliser le hook de connexion d'un joueur. Il n'y a aucun événement pour dire que le serveur est prêt, il faut donc utiliser ce genre d'astuce:

hook.Add("PlayerConnect", "CheckVersionOfMyAddon", function()
    Msg( "Check version of MyAddon\n" )
    
    http.Fetch("https://site.com",
        function(result)
            Msg(" Connection established\n") 
        end, 
        function(failed)
            Msg(" Connection failed : "..failed.."\n")
        end
    )
    
    hook.Remove("PlayerConnect", "CheckVersionOfMyAddon")
end)

L'erreur est présente dans un addon que vous n'avez pas développé, et vous n'arrivez pas à faire la correction? Contactez son développeur afin qu'il applique les corrections.