Se puede comparar los “tipos” de tablas o metatablas en Lua?
Pregunta
Estoy llamando a una función de API en el Señor de la característica de scripting (LOTRO) Beta Lua Anillos Online. El método API devuelve un "tipo" llamada ClassAttributes que estará en el atributo de "tipos" clase dada. Digo "tipos", porque cuando llamo type()
en el valor de retorno, se dice que es una mesa.
¿Hay una manera para mí para verificar el tipo o el tipo metatabla? por ejemplo:.
local returnedTable = player:GetClassAttributes();
if (returnedTable.Name == "CaptainClassAttributes")
print("You are playing a captain");
end
Actualizar El código siguiente es lo que yo 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
y aquí está la salida:
jugador: getClass (): 24
Turbine.Gameplay.Class.Captain: 24
Usted está jugando un capitán
Solución
Los documentos de la API son un poco confuso, aunque supongo que encontré lo que estás buscando. El siguiente código debe decirle si el jugador es un capitán:
local player = Turbine.Gameplay.Player
if (player:GetClass() == Turbine.Gameplay.Class.Captain) then
print("You are playing a captain")
end
capitán es un miembro de la mesa Gameplay.Class, que es sólo un número entero como la lectura de los docs.
Nota:. No es necesario para poner fin a una sentencia de Lua con un ";"
No se pudo probarlo. Espero que funcione.
Otros consejos
Si usted tiene una lista de los posibles metatablas para esos valores, se puede tener en sus metatablas con el getmetatable (obj) función y los comparan con las que ya tiene. Sin tener acceso a la API de LOTRO No puedo decir más sobre el tema: ¿dónde puedo leer lo
Eso, por supuesto, es suponiendo que la tabla devuelta por los GetClassAttributes () función tiene un metatabla de sí mismo, y que es posible diferenciar entre su metatabla y las otras clases atribuye tablas.