Я работаю над списком Addon rewrite, в основном превращая старый аддон Wtacher для WildStar в более новую версию, которую проще поддерживать благодаря новой модульной структуре. Оригинальный автор дал мне разрешение на это, но сказал мне переписать аддон, чтобы понять его лучше, поскольку я совершенно новичок в этом.Инициировать не устанавливать поля
Так оригинальный аддон можно найти здесь: http://www.curse.com/ws-addons/wildstar/221782-watcher
Мой исходный код можно найти здесь: https://github.com/NekoNova/WatcherEx
Сообщение об ошибке я получаю в игре заключается в следующем:
.. .aming \ NCSOFT \ WildStar \ Addons \ WatcherEx \ WatcherEx.lua: 1433: плохой аргумент # 1 в 'ipairs' (таблица ожидаемая, полученная нуль) трассировка стека: [C]: в функции 'ipairs' ... Aming \ NCSOFT \ WildStar \ Addons \ WatcherEx \ WatcherEx.lua: 1433: in Функция 'FillFiltersList' ... aming \ NCSOFT \ WildStar \ Addons \ WatcherEx \ WatcherEx.lua: 886: в функция < ... aming \ NCSOFT \ WildStar \ Addons \ WatcherEx \ WatcherEx.lua: 867>
Так что я посмотрел на мой исходный код на указанных линиях, и в основном этот кусок кода вызывает проблемы:
-- Fills the list of Filters available to be used in the Addon.
function WatcherEx:FillFiltersList()
if self.wndMain == nil then
return
end
local filtersList = self.wndMain:FindChild("filters_list")
filtersList:DestroyChildren()
for i, filterClass in ipairs(self.tFilters) do
local filterItem = Apollo.LoadForm(self.xmlDoc, "filter_item", filtersList, self)
filterItem:SetData({ filter = filterClass })
filterItem:FindChild("name"):SetText(filterClass.name)
end
return filtersList:ArrangeChildrenVert()
end
Поэтому в основном я пытаюсь использовать свою внутреннюю tFilters, но она равна нулю и должна быть вкладкой ле. Как я уже сказал, я совершенно новичок в программировании Lua для игр, но, насколько я понимаю, у меня, вероятно, есть что-то неправильно настроенное в моем метаданном __init, поскольку я скопировал это из оригинала и попытался немного почистить его. Этот код может меняться кодом:
function WatcherEx:new(tObject)
tObject = tObject or {}
setmetatable(tObject, self)
self.__index = self
-- Initialization
self.tSettings = {}
self.tDefaults = {}
self.tAbilities = {}
self.tInnates = {}
self.tEngineerSpells = {}
self.tActiveRules = {}
local tClass = setmetatable({
__init = function(self)
self.tActiveRules = { }
self.bUnlockAll = false
self.eventsHidden = nil
self.tFilters = {
AvailabilityFilter,
TimeFilter,
CombatFilter,
ActionSetFilter,
SpecialFilter,
HPFilter,
MPFilter,
ShieldFilter,
ChargeFilter,
ResourcesFilter,
BuffFilter,
LuaFilter}
end,
__base = self,
__name = "WatcherEx"
}, {
__index = self,
__call = function(cls, ...)
local tTable = setmetatable({}, self)
cls.__init(tTable, ...)
return tTable
end})
self.__class = tClass
return tObject
end
Может кто-нибудь сказать мне, что я сделал не так, и объяснить проблему? Я пытаюсь узнать больше о Lua, но эта часть о наследовании и метаклассах немного запутанна.
EDIT: Когда я смотрю на это сейчас, я на самом деле думаю, что я могу вырезать метатаблицы структуру и просто установить переменные непосредственно в качестве членов моей WatcherEx таблицы ....
Моя догадка '__init' никогда не был призван и так 'tFilter' никогда не устанавливается. Прикрепите 'print', чтобы посмотреть, так ли это. Вторая догадка заключается в том, что внешний «самость» отличается от внутреннего «я». – greatwolf
Я попробую функцию печати и посмотрю, не делает ли она что-либо –