2016-05-18 2 views
0

Ok, also mache ich eine Follow-GUI-Sache und ich versuche GetUserIdFromNameAsync aus einer Zeichenfolge mit einem Namen darin zu verwenden. Und ich versuche zu pcall, also erhalte ich keine Fehler, aber es gibt Null zurück, selbst wenn es ein Name ist, den ich weiß, funktioniert, weil ich dafür regelmäßig oben rufe. und es gibt die id im print zurück, aber wenn ich versuche, pcall zu benutzen, dann benutze ein wenn es jedes Mal nil zurückkommt und geht zu meiner else Aussage.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) 

Antwort

1

Nach dem „Programming in Lua“ ebook: „Angenommen, Sie wollen ein Stück von Lua Code auszuführen und jeder Fehler ausgelöst zu fangen, während dieser Code ausgeführt wird Ihr erster Schritt ist das Stück Code zu kapseln in. Eine Funktion ... Die Funktion pcall ruft ihr erstes Argument im geschützten Modus auf, so dass sie während der Ausführung der Funktion alle Fehler abfängt.Wenn keine Fehler auftreten, gibt pcall true sowie alle vom Aufruf zurückgegebenen Werte zurück false, plus die Fehlermeldung. "

Statt pcall auf die Funktion direkt aufzurufen, kapseln alles in einer Funktion zuerst:

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

Dann können Sie die Funktion mit pcall anrufen und fangen Fehler:

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

Vom Lua Dokumentation:

Angenommen, Sie möchten einen Teil des Lua-Codes ausführen und den Fehlerabfangenbeim Ausführen des Codes ausgelöst. Der erste Schritt besteht darin, das Stück Code in eine Funktion zu kapseln; nennen wir es foo ... dann, Sie nennen foo mit pcall ...

Ihr Code verwendet pcall mit einer Funktion, aber es ruft die Funktion, anstatt sie als Argument verwendet wird.

Um dies zu beheben, könnte man game.Players:GetUserIdFromNameAsync(id) in Funktion setzen und es als Argument verwenden, aber ein einfacher Weg ist eine anonyme Funktion zu nutzen, wie

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

, die Ihnen den richtigen Wert geben.

Verwandte Themen