ForgottenLight Опубликовано 16 ноября, 2017 Поделиться Опубликовано 16 ноября, 2017 (изменено) В php функция var_dump($arg); вернет примерно такое значение для таблицы (массива):array(3) {[name]=>string("Название")[qwer]=>int(2)[default]=>array(3) {[0]=>string(1) "a" [1]=>string(1) "b" [2]=>string(1) "c" }} указывает тип и что есть в переменной $arg в данном случае внутри массива лежит строка, численное значение и вложенный массив с 3мя значениями... думал может в LUA есть что-то похожее... через перебор таблицы есть некоторые сложности, если есть вложенные таблицы их тоже нужно смотреть отдельно, а если переменная ссылается на функцию, то вообще не понятно, что там может быть :-)Если функцию не сделали ЗОСы, то можно написать и самому, юзай на здоровье. local function var_dump(...) local function pairs_table(a, i) local s = "(" .. tostring(#a) .. "){" for n, v in pairs(a) do local t = type(v) s = s .. "[" .. n .. "]=>" .. t if t == "number" then s = s .. "(" .. v .. ")" elseif t == "string" then s = s .. "(\"" .. v .. "\")" elseif t == "boolean" then if v then s = s .. "(True)" else s = s .. "(False)" end elseif t == "table" then if i < 5 then -- Ограничиваем рекурсию вложенностью в 5 раз s = s .. pairs_table(v, i + 1) -- Рекурсивный вызов функции else s = s .. "{???}" -- Если превышена вложенность выдастся это end -- Не обрабатываются типы "nil", "function", "userdata" и "thread" -- Для них выведется только название типа end s = s .. " " -- Разделитель пробел, можно указать другой end return s .. "}" end return "arg" .. pairs_table(arg, 0) end local function test(...) local s = var_dump(...) d(s) end Тем более для того, что я хочу сделать (галочку напротив рецептов и мотивов) как я понял нужно будет еще GUI разбирать.Да, в работе ГУИ придется разбираться, без этого никак. Можно поковырять аддоны которые делают подобные вещи. Например:ShowMotifs - Выводит в окне инвентаря рядом со шмоткой иконку соответствующую стилю шмотки.DIKIFA - Выводит во всплывающем описании мотива или рецепта список персов которые его знают (зеленым) и которые не знают (красным).SousChef - Выводит в окне инвентаря рядом с рецептом яркую галочку если этот рецепт не известен основному повару и тусклую если не известен текущему персу. Аддон устарел и может глючить под текущим релизом игры. Изменено 16 ноября, 2017 пользователем ForgottenLight Ссылка на комментарий Поделиться на другие сайты Поделиться
Yamenko Опубликовано 18 ноября, 2017 Автор Поделиться Опубликовано 18 ноября, 2017 (изменено) Пробую функцию но что-то опять не так :-)вобщем при использовании функции ошибка user:/AddOns/DNSE/DNSE.lua:44: operator # is not supported for # nil Приходит пустой запросвот что отправляю: local DNSE = { name = "DNSE", version = "0.0.1", textError = {}, default = { showFrame = false, showText = true, showGreeting = true } } тут часть кода и функции... d(var_dump(DNSE)) Пробовал и локальную и глобальную переменную туда отправлять, пробовал одно значение отправлять одно и тоже приходит "nil"если в начале функции написать d(arg) то он пишет nil... Немного переделал твою функцию, но проблема таже: local function var_dump(...) local function S(a) local s = tostring(a) return s end local function pairs_table(ar) for key, val in pairs(ar) do local typeArg = type(val) if typeArg == "table" then pairs_table(val) else msg = msg.."["..S(key).."]=>"..typeArg.."("..S(val)..")" end msg = msg.." " end msg = msg.."\n" return msg end return "Сообщение:\n"..pairs_table(arg) end вобщем бьюсь с функцией второй день... :-)Заранее спасибо :-) Изменено 18 ноября, 2017 пользователем Yamenko Ссылка на комментарий Поделиться на другие сайты Поделиться
ForgottenLight Опубликовано 19 ноября, 2017 Поделиться Опубликовано 19 ноября, 2017 (изменено) Надо будет глянуть, я написал функцию по теории на работе , на практике ее не испытывал. Добавлено:Сейчас глянул поиском по аддонам, похоже ЗОСы не сделали поддержку ключевого слова arg в своей версии LUA, но нашлось интересное решение, там первой строкой функции вписано:local arg = {...}Попробуй тоже так сделать. Изменено 19 ноября, 2017 пользователем ForgottenLight Ссылка на комментарий Поделиться на другие сайты Поделиться
Yamenko Опубликовано 20 ноября, 2017 Автор Поделиться Опубликовано 20 ноября, 2017 @ForgottenLight, Да тоже поразбирал аддоны, все логично :-) надо же обратиться к переменным.Можно сразу напрямую обращаться в (...) , без дополнительно переменной"return "Сообщение: "..pairs_table(...)"попробовал - работает... надо будет немного вывод настроить и обработку вложенных таблиц.Спасибо Ссылка на комментарий Поделиться на другие сайты Поделиться
ForgottenLight Опубликовано 20 ноября, 2017 Поделиться Опубликовано 20 ноября, 2017 @ForgottenLight, Да тоже поразбирал аддоны, все логично :-) надо же обратиться к переменным.Можно сразу напрямую обращаться в (...) , без дополнительно переменной"return "Сообщение: "..pairs_table(...)"попробовал - работает... надо будет немного вывод настроить и обработку вложенных таблиц.СпасибоТогда скорее:"return "Сообщение: "..pairs_table({...})"Если подать просто три точки, то туда передастся несколько переменных (если конечно у процедуры несколько параметров) и в результате процедура pairs_table обработает только первую в списке. А если заключить три точки в фигурные скобки, то из этих переменных будет сформирована таблица, и в процедуру подастся таблица. Ссылка на комментарий Поделиться на другие сайты Поделиться
Yamenko Опубликовано 7 декабря, 2017 Автор Поделиться Опубликовано 7 декабря, 2017 (изменено) Так с этим вроде разобрался немного.но появилось еще парочка вопросов:Вопрос в том где вы смотрите как пользоваться такими функциями как CHAT_SYSTEM и похожими... на wiki не нашел... PS еще вопрос: Если есть ошибки в аддонах выскакивает окошко с ошибками. Я использую вот такую сборку: local function AddErrorInChat(_, text) if text ~= nil then if saveVars.showFrame then ZO_UIErrors_HideCurrent() end -- Скрывает окно ошибок if saveVars.showText then d("Text: "..text) end -- Вывод в чат ошибки если активно в настройках end end EVENT_MANAGER:RegisterForEvent(DNSE.name.."_AddErrorInChat", EVENT_LUA_ERROR, AddErrorInChat) Если эти ошибки в середине игры когда персонаж уже активен, тогда очень хорошо работает... а вот сразу после загрузки не выводит сообщений и не закрывает окошко..."ZO_UIErrors_HideCurrent()" пробовал пихать и в "EVENT_ADD_ON_LOADED" и в "EVENT_PLAYER_ACTIVATED", но результата нет... Заранее премного благодарен. Изменено 8 декабря, 2017 пользователем Yamenko Ссылка на комментарий Поделиться на другие сайты Поделиться
ForgottenLight Опубликовано 12 декабря, 2017 Поделиться Опубликовано 12 декабря, 2017 Так с этим вроде разобрался немного.но появилось еще парочка вопросов:Вопрос в том где вы смотрите как пользоваться такими функциями как CHAT_SYSTEM и похожими... на wiki не нашел... На данный момент у меня стоит около 60 аддонов. Вот у коллег по цеху многие функции и подсматриваю. Еще на ЕСОУИ выкладывают исходники интерфейса от ЗОСов, там тоже можно поковыряться. PS еще вопрос: Если есть ошибки в аддонах выскакивает окошко с ошибками. Я использую вот такую сборку: local function AddErrorInChat(_, text) if text ~= nil then if saveVars.showFrame then ZO_UIErrors_HideCurrent() end -- Скрывает окно ошибок if saveVars.showText then d("Text: "..text) end -- Вывод в чат ошибки если активно в настройках end end EVENT_MANAGER:RegisterForEvent(DNSE.name.."_AddErrorInChat", EVENT_LUA_ERROR, AddErrorInChat) Если эти ошибки в середине игры когда персонаж уже активен, тогда очень хорошо работает... а вот сразу после загрузки не выводит сообщений и не закрывает окошко..."ZO_UIErrors_HideCurrent()" пробовал пихать и в "EVENT_ADD_ON_LOADED" и в "EVENT_PLAYER_ACTIVATED", но результата нет... Есть подозрение, что эти ошибки случаются до как запускается этот аддон, они накапливаются где то, а после захода чара уже показываются. Заранее премного благодарен.Извиняй, что ответил не сразу - на работе меня малость пригрузили под конец года. А по приходу домой голова думать совсем отказывается. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Пожалуйста, войдите, чтобы комментировать
Вы сможете оставить комментарий после входа в
Войти