Si può confrontare i “tipi” di tabelle o metatables in Lua?
Domanda
che io chiamo una funzione API nel Signore degli Anelli Online funzionalità di script (LOTRO) Beta Lua. Il metodo API restituisce un "tipo" chiamato ClassAttributes che sarà dei data classe di attributo "tipi". Dico "tipi", perché quando chiamo type()
sul valore di ritorno, che dice la sua un tavolo.
C'è un modo per me di verificare il tipo, o il tipo metatabella? per esempio:.
local returnedTable = player:GetClassAttributes();
if (returnedTable.Name == "CaptainClassAttributes")
print("You are playing a captain");
end
Aggiorna Il seguente codice è quello che uso:
player = Turbine.Gameplay.LocalPlayer.GetInstance();
Turbine.Shell.WriteLine("player:GetClass():" .. player:GetClass());
Turbine.Shell.WriteLine("Turbine.Gameplay.Class.Captain:" .. Turbine.Gameplay.Class.Captain);
if (player:GetClass() == Turbine.Gameplay.Class.Captain) then
Turbine.Shell.WriteLine("You are playing a captain");
end
e qui è l'output:
Lettore: getClass (): 24
Turbine.Gameplay.Class.Captain: 24
Stai giocando un capitano
Soluzione
La documentazione API sono un po 'di confusione, anche se suppongo che ho trovato quello che stai cercando. Il seguente codice dovrebbe dirvi se il giocatore è un capitano:
local player = Turbine.Gameplay.Player
if (player:GetClass() == Turbine.Gameplay.Class.Captain) then
print("You are playing a captain")
end
capitano è un membro della tavola Gameplay.Class, che è solo un numero intero come lettura dalla documentazione.
. Nota: Non è necessario terminare una frase Lua con un ";"
Impossibile testarlo. Spero che funziona.
Altri suggerimenti
Se si dispone di un elenco delle possibili metatables per quei valori, è possibile ottenere i loro metatables con il getmetatable (obj) funzione e confrontarle con quelle che hai già. Senza avere accesso alle API di LOTRO non posso dire di più su questo argomento:? Dove posso leggerlo
Questo, naturalmente, presuppone che la tabella restituita dalle GetClassAttributes () funzione ha un metatabella di sé, e che è possibile distinguere è metatabella e le altre classi attributi tabelle.