2016-05-18 1 views
0

Ok, donc je suis en train de faire une chose GUI de suivi d'amis et j'essaie d'utiliser GetUserIdFromNameAsync d'une chaîne avec un nom dedans. Et im essayant de pcall donc je ne reçois pas d'erreurs mais il retourne nul même quand c'est un nom que je sais fonctionne parce que je l'appelle régulièrement ci-dessus. et il retourne l'ID dans l'impression mais quand j'essaye de pcall alors employez un si il revient nul chaque fois et va à mon autre déclaration.pcall a GetUserIdFromNameAsync()

local TeleportService = game:GetService("TeleportService") 

script.Parent.OnServerEvent:connect(function(player, id) 
    place = player.GuiFolder 
    print(game.Players:GetUserIdFromNameAsync(id)) 
    --ISSUE IN LINE BELOW-- ISSUE IS IN THE LINE BELOW 
    friend, msg = pcall(game.Players:GetUserIdFromNameAsync(id)) 
    if friend then 
    print(player.Name, player, player.PlayerGui.MainMenu.Name) 
    if player:IsFriendsWith(friend) then 
     place.IsFriend.Value = true 
     local success, errorMsg, placeId, instanceId = TeleportService:GetPlayerPlaceInstanceAsync(friend) 
      if success then 
       place.foundplayerbar.Value = "Found player. Would you like to join?" 
       place.Activated.Value = true 
      else enter code here 
       place.errorbar.Value = "ERROR: Player not online!" 
      end 
     else place.errorbar.Value = "ERROR: Not Friends with person!" 
    end 
    else place.errorbar.Value = "ERROR: Player doesn't exist!" 
    end 
end) 

Répondre

1

Selon la « programmation en Lua » ebook: « Supposons que vous voulez exécuter un morceau de code Lua et pour capturer toute erreur soulevée lors de l'exécution de ce code Votre première étape consiste à encapsuler ce morceau de code. une fonction ... La fonction pcall appelle son premier argument en mode protégé, de manière à détecter les erreurs pendant l'exécution de la fonction.S'il n'y a pas d'erreur, pcall renvoie true, plus toutes les valeurs renvoyées par l'appel. false, plus le message d'erreur. "

Au lieu d'appeler pcall la fonction directement, encapsuler tout dans une fonction première:

function func() 
    friend, msg = game.Players:GetUserIdFromNameAsync(id) 
    if friend then 
     ... 
    else 
     ... 
    end 
end 

Ensuite, vous pouvez appeler la fonction avec pcall et attraper toutes les erreurs:

local status, err = pcall(func) 
if not status then print(err) end 
0

De l'Lua documentation:

Supposons que vous voulez exécuter un morceau de code Lua et détecter toute erreur déclenché lors de l'exécution de ce code. Votre première étape consiste à encapsuler ce morceau de code dans une fonction; nous appelons foo ... alors, vous appelez foo avec pcall ...

Votre code utilise pcall avec une fonction, mais il appelle la fonction plutôt que de l'utiliser comme un argument.

Pour résoudre ce problème, vous pouvez mettre game.Players:GetUserIdFromNameAsync(id) en fonction et l'utiliser comme argument, mais un moyen plus facile est d'utiliser une fonction anonyme, comme

friend, msg = pcall(function() 
    game.Players:GetUserIdFromNameAsync(id) 
end) 

qui vous donnera la bonne valeur.