Перейти к содержанию

Дайджесты за январь-февраль

Обновления гайдов и аддонов

Январь Февраль

Мониторинг серверов и редактор аддонов

Представляем вам две легенды. То, о чем можно было только мечтать, стало реальностью.

Мониторинг серверов Редактор аддонов

Подсказки из игры на вашем сайте

Теперь вы можете отображать сведения о внутриигровых элементах простым наведением курсора мыши.

Подробнее

Апдейтер аддонов

Представляем вам программу для автообновления аддонов и делимся подробностями.

Подробнее Скачать

Инициализация объектов в lua


Anfet

Рекомендуемые сообщения

Добрый день.

Задался вопросом написать хоть какой-то аддончик.

И конечно же сразу же наткнулся на проблему инициализации объектов.

Взял исходный код icreator для надписи сообщения в свой чат.

--------------------------------------------------------------------------------------

Global( "Chat", {} )

local wtChat = nil

local chatRows = 0 --- for clear buffer after show messages

function Chat:LogToChat(message, color, fontSize)

if not wtChat and not errMess.Chat then

---- если окно еще не искали и ошибки при этом не было. а если уже ошибка была то не искать

--- найдем окно чата

--- Chat..Chat

local w

w = stateMainForm:GetChildUnchecked("Chat", false)

if not w then

--- главня форма не найдена - найден по ребенку

w = stateMainForm:GetChildUnchecked("Chat", true)

else

w = w:GetChildUnchecked("Chat", true)

end

wtChat = w

end

if not wtChat or not wtChat.PushFrontValuedText then

if not errMess.Chat then

errMess.Chat = "can't find Chat window"

LogError(errMess.Chat)

end

return

end

local valuedText = common.CreateValuedText()

--- fontname=\"AllodsWest\"

local format = "<body alignx='left' fontname='AllodsSystem' fontsize='"..(fontSize or 14)

format = format.."' shadow='1' ><rs class='color'><r name='text'/></rs></body>"

valuedText:SetFormat(userMods.ToWString(format))

if color then

valuedText:SetClassVal( "color", color )

else

valuedText:SetClassVal( "color", "LogColorYellow" )

end

if not common.IsWString( message ) then message = userMods.ToWString(message) end

---message = ToWS(chatRows.. ":".. FromWS(message))

valuedText:SetVal( "text", message )

---wtChat:PopBack() --- ++

chatRows = chatRows + 1

wtChat:PushFrontValuedText( valuedText )

---wtChat:PushFrontRawText( message ) --- текст не видно ((

end

--- call by "EVENT_SECOND_TIMER" - for clear messages from chat

function Chat:ClearChat( size )

for i=1, size or math.ceil( chatRows / 30 ) + 1 do

if chatRows < 1 then break end

chatRows = chatRows - 1

wtChat:PopBack()

end

end

------------------------------------------------------------------------------------

Вроде как тут всё понятно.

Теперь сам test.lua

--------------------------------------------------------------------------------

-- INITIALIZATION

--------------------------------------------------------------------------------

function Init()

LogInfo( "Initialization sample" )

Chat:LogToChat({ text = "Привки ВСЕМ!", color = "LogColorGreen" })

end

--------------------------------------------------------------------------------

Init()

--------------------------------------------------------------------------------

Тоже всё ясно.

В AddonDesc следующие подключения:

<Item href="Chat.lua" />

<Item href="Test.lua" />

Однако в логах выводится ошибка что Chat nil.

Я честно пытался искать как его заинициализировать, но тщетно. Тот же LibDND тоже используется одну глобу и после легко к ней обращается. Без какой-либо инициализации.

Если просто подключить функиции, то в логе идёт ошибка декларации LogToChat

Error: addon Test: Attempt to read from undeclared global variable: LogToChat

Подскажите что я не догоняю? Как правильно подключать внешние Lua файлы чтобы исходник видел внутренние функции.

Ссылка на комментарий
Поделиться на другие сайты

Верхний код в файле Chat.lua находится?

В логе еще какие ошибки появляются?

С самого начала

ЗЫ. Розочин код в качестве примера использовать не советовал бы никогда и никому

Ссылка на комментарий
Поделиться на другие сайты

Да.

Info: addon Test: Initialization sample

Error: addon Test:

Error: addon Test:

Error: addon Test: func: ?, ?, line: -1, defined: C, line: -1, [C]

Error: addon Test: func: Init, global, line: 6, defined: Lua, line: 4, [string "Mods/Addons/Test/Test.lua"]

Error: addon Test: func: ?, ?, line: 9, defined: main, line: 0, [string "Mods/Addons/Test/Test.lua"]

Error: addon Test: Attempt to read from undeclared global variable: LogToChat

Error: addon Test: Error while running the chunk

Error: addon Test: [string "Mods/Addons/Test/Test.lua"]:6: attempt to call global `LogToChat' (a nil value)

Error: addon Test: func: LogToChat, global, line: -1, defined: C, line: -1, [C]

Error: addon Test: func: Init, global, line: 6, defined: Lua, line: 4, [string "Mods/Addons/Test/Test.lua"]

Error: addon Test: func: ?, ?, line: 9, defined: main, line: 0, [string "Mods/Addons/Test/Test.lua"]

Error: addon Test: Can't execute script for addon: Mods/Addons/Test/AddonDesc.(UIAddon).xdb

Если выставить просто функцию - то выходит такие ошибки.

Ссылка на комментарий
Поделиться на другие сайты

Вот эта хрень "LogInfo" находится в стандартных сэмплах

В AddonDesc.(UIAddon).xdb вписываешь еще и <Item href="/Mods/SampleCommon/SampleAddonBase.lua" /> если нужна

Нафига ее(и вообще их) используют - яхз

Вот эта хрень "errMess" - Розочкина хрень

И вообще-то в логах на нее должна быть ругань поначалу, раз ее у тебя нет

Добавляешь 3-й строчкой в Chat.lua:

local errMess = {Chat="OK"}

А дальше... ошибок нет и текста нет

Чо там куда выводиться должно - яхз

...

А если сделать так:

local errMess = {Chat=nil}

То выводится сообщение в лог "can't find Chat window"

Может и здесь собака порылась

Изменено пользователем Nikon
Ссылка на комментарий
Поделиться на другие сайты

По-моему, это какой-то старый вариант ее скрипта. Сейчас у виджетов чата другие имена же.

Ссылка на комментарий
Поделиться на другие сайты

Вот у кого надо брать примеры кода :)

...

По поводу "Привки ВСЕМ!" - не дождесся. Весь этот текст кроме тебя не увидит никто

Ссылка на комментарий
Поделиться на другие сайты

старый вариант

Да, новый можно найти в ScriptLIB.lua ( AddonsTools ), если интересно.

Чтобы заработал вариант из 1-го сообщения:

1. В Chat.lua добавить строку в начале:

local errMess = {}

И заменить в строках:

w = stateMainForm:GetChildUnchecked("Chat", false)

w = w:GetChildUnchecked("Chat", true)

"Chat" и "Chat" на "ChatLog" и "Container" соответственно.

2. В Test.lua заменить

Chat:LogToChat({ text = "Привки ВСЕМ!", color = "LogColorGreen" })

на

Chat:LogToChat( "Привки ВСЕМ!", "LogColorGreen" )

В данном примере ошибка

Attempt to read from undeclared global variable: LogToChat

будет возникать, если Chat.lua не загружен совсем либо загружен после Test.lua.

Следует проверить пути, имена файлов и порядок загрузки.

Рабочий вариант прикрепил.

Вот у кого надо брать примеры кода :)

Не, лучше что-нибудь отсюда. Хотя бы. :)

Test.zip

Ссылка на комментарий
Поделиться на другие сайты

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...

Важная информация

Пользуясь сайтом, вы принимаете Условия использования