Можете ли вы сравнить «типы» таблиц или метатаблиц в Lua? - PullRequest
2 голосов
/ 12 января 2011

Я вызываю функцию API в функции сценария Beta Lua «Властелин колец» (LOTRO). Метод API возвращает «тип» с именем ClassAttributes, который будет включен в данный «тип» атрибута класса. Я говорю «типы», потому что когда я вызываю type() для возвращаемого значения, он говорит, что это таблица.

Есть ли у меня способ проверить тип или метатабельный тип? e.g.:

local returnedTable = player:GetClassAttributes();

if (returnedTable.Name == "CaptainClassAttributes")
    print("You are playing a captain");
end

UPDATE Следующий код - это то, что я использую:

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

и вот вывод:

игрок: GetClass (): 24
Turbine.Gameplay.Class.Captain: 24
Вы играете в капитана

Ответы [ 2 ]

3 голосов
/ 16 января 2011

Документы API немного сбивают с толку, хотя я полагаю, что нашел то, что вы ищете. Следующий код должен сообщить вам, является ли игрок капитаном:

local player = Turbine.Gameplay.Player
if (player:GetClass() == Turbine.Gameplay.Class.Captain) then
    print("You are playing a captain")
end

Капитан является членом таблицы Gameplay.Class, которая представляет собой целое число, считываемое из документов.

Примечание: вам не нужно заканчивать предложение Lua знаком ";".

Не могу проверить это. Надеюсь, что это работает.

3 голосов
/ 12 января 2011

Если у вас есть список возможных метатаблей для этих значений, вы можете получить их метатаблицы с помощью функции getmetatable (obj) и сравнить их с теми, которые у вас уже есть. Не имея доступа к LOTRO API, я не могу больше рассказать о предмете: где я могу его прочитать?

Это, конечно, при условии, что таблица, возвращаемая функцией GetClassAttributes (), имеет метатаблицу сама по себе, и что можно различить ее метатабельно и таблицы атрибутов других классов.

...