|
Форум Обсуждение аддонов Разработка аддонов WoW Таймер AFK |
Таймер AFK |
Здравствуйте, сегодня будем делать аддон/таймер времени проведенного в афк. Этот аддон я нашел на вовинтерфейсе, и мне показался он интересным и решил написать по нему гайд. Аддон очень простой и много усилий для его создания нам не понадобится.
Инструкция по созданию toc файла - тык Ссылка на предыдущие статью - тык Скачать notepad++ - тык API функции - тык Создадим папку для аддона, а в ней lua файл и toc файл. Заполнили ток файл, потом открываем lua файл и пишем там: Code local AFK, hour, minute local total = 0 local afk_minutes = 0 local afk_seconds = 0 local update = 0 local interval = 1.0 local frame = CreateFrame("Frame") -- Создание фреймы frame:Hide(); -- Скрытие фреймы frame:SetHeight(160) -- Высота фреймы frame:SetWidth(350) -- Ширина фреймы frame:SetPoint("CENTER", UIParent) -- Делает нашу фрейму по центру. frame:EnableMouse(true) frame:SetMovable(true) frame:SetUserPlaced(true) frame:SetClampedToScreen(true) frame:SetScript("OnMouseDown", frame.StartMoving) frame:SetScript("OnMouseUp", frame.StopMovingOrSizing) frame:SetBackdrop({ bgFile = "Interface\\DialogFrame\\UI-DialogBox-Background", -- Текстура фона. edgeFile = "Interface\\DialogFrame\\UI-DialogBox-Border", -- Текстура рамки tile = true, tileSize = 32, edgeSize = 32, insets = { left = 11, right = 12, top = 12, bottom = 11 } }); local font = frame:CreateFontString(nil, "ARTWORK", "GameFontNormalHuge") -- Создания фреймы с текстом. font:SetText("Вы ушли в AFK") -- Сообщение "Вы ушли в АФК" font:SetPoint("TOP", frame, "TOP", 0, -20) -- Позиция текста local timer = frame:CreateFontString(nil, "ARTWORK", "GameFontNormalHuge") -- Создания фреймы с текстом. timer:SetText("0:00") -- Счетчик времени. timer:SetPoint("TOP", frame, "TOP", 0, -55) -- Позиция счетчика. function button_OnClick() -- Создание события для кнопки. frame:Hide(); -- Закрытие фреймы при нажатии на кнопку if UnitIsAFK("player") then SendChatMessage("", "AFK"); -- Выход из AFK timer:SetText("0:00") -- Сброс таймера. end end local button = CreateFrame("Button", nil, frame, "UIPanelButtonTemplate") -- Создание кнопки button:SetHeight(40) -- Высота кнопки button:SetWidth(125) -- Ширина кнопки button:SetPoint("BOTTOM", frame, "BOTTOM", 0, 15) -- Расположение. button:SetText("Я вернулся!") -- Текст кнопки button:RegisterForClicks("AnyUp") button:SetScript("OnClick", button_OnClick) -- Выполнение события local close = CreateFrame("Button", nil, frame, "UIPanelCloseButton") close:SetPoint("TOPRIGHT", frame, "TOPRIGHT", -8, -8) -- Расположение. function frame_OnLoad(self) -- Регистрация эвента self:SetScript("OnEvent", frame_OnEvent) self:RegisterEvent("PLAYER_FLAGS_CHANGED"); end function frame_OnEvent(self, event, ...) -- Эвент if (event == "PLAYER_FLAGS_CHANGED") then if UnitIsAFK("player") then frame:Show(); -- Открытие фреймы при входе в AFK AFK = true hour, minute = GetGameTime() frame:SetScript("OnUpdate", frame_OnUpdate) else AFK = false total = 0 frame:SetScript("OnUpdate", nil) end end end function frame_OnUpdate(self, elapsed) if AFK == true then update = update + elapsed if update > interval then total = total + 1 frame_ParseSeconds(total) update = 0 end end end function frame_ParseSeconds(num) -- Из секунды в минуты. local minutes = afk_minutes -- Секунды local seconds = afk_seconds -- Минуты if num >= 60 then minutes = floor(num / 60) seconds = tostring(num - (minutes * 60)) frame_DisplayTime(minutes, seconds) else minutes = 0 seconds = num frame_DisplayTime(minutes, seconds) end afk_minutes = tostring(minutes) afk_seconds = tostring(seconds) end function frame_DisplayTime(minutes, seconds) -- Вывод времени timer:SetText(tostring(minutes)..":"..string.format("%02d", tostring(seconds))) end frame_OnLoad(frame); local frame = CreateFrame("Frame") -- Создание фреймы frame:Hide(); -- Скрытие фреймы frame:SetHeight(160) -- Высота фреймы frame:SetWidth(350) -- Ширина фреймы frame:SetPoint("CENTER", UIParent) -- Делает нашу фрейму по центру. frame:EnableMouse(true) frame:SetMovable(true) frame:SetUserPlaced(true) frame:SetClampedToScreen(true) frame:SetScript("OnMouseDown", frame.StartMoving) frame:SetScript("OnMouseUp", frame.StopMovingOrSizing) frame:SetBackdrop({ bgFile = "Interface\\DialogFrame\\UI-DialogBox-Background", -- Текстура фона. edgeFile = "Interface\\DialogFrame\\UI-DialogBox-Border", -- Текстура рамки tile = true, tileSize = 32, edgeSize = 32, insets = { left = 11, right = 12, top = 12, bottom = 11 } }); Создаем фрейму. Code frame:SetHeight(160) Высота фреймы. Code frame:SetWidth(350) Ширина фреймы. Code frame:SetBackdrop({ bgFile = "Interface\\DialogFrame\\UI-DialogBox-Background", -- Текстура фона. edgeFile = "Interface\\DialogFrame\\UI-DialogBox-Border", -- Текстура рамки tile = true, tileSize = 32, edgeSize = 32, insets = { left = 11, right = 12, top = 12, bottom = 11 } }); Устанавливаем текстуры фреймы. Code local font = frame:CreateFontString(nil, "ARTWORK", "GameFontNormalHuge") -- Создания фреймы с текстом. font:SetText("Вы ушли в AFK") -- Сообщение "Вы ушли в АФК" font:SetPoint("TOP", frame, "TOP", 0, -20) -- Позиция текста local timer = frame:CreateFontString(nil, "ARTWORK", "GameFontNormalHuge") -- Создания фреймы с текстом. timer:SetText("0:00") -- Счетчик времени. timer:SetPoint("TOP", frame, "TOP", 0, -55) -- Позиция счетчика. Фреймы с тектом. Code font:SetText("Вы ушли в AFK") Задаем текст в верху окна. Code font:SetPoint("TOP", frame, "TOP", 0, -20) Позиция текста, по координатам ( в фрейме ) Code timer:SetText("0:00") Стандартное время, оно показывается в начале и при скидывании таймера. Code function button_OnClick() -- Создание события для кнопки. frame:Hide(); -- Закрытие фреймы при нажатии на кнопку if UnitIsAFK("player") then SendChatMessage("", "AFK"); -- Выход из AFK timer:SetText("0:00") -- Сброс таймера. end end Создание события для кнопки. Code frame:Hide(); Нужна нам для скрытия фреймы после нажатии на кнопку. Code SendChatMessage("", "AFK"); Выходит из афк после нажатии на кнопку. Code timer:SetText("0:00") Сбрасывает таймер. Code local button = CreateFrame("Button", nil, frame, "UIPanelButtonTemplate") -- Создание кнопки button:SetHeight(40) -- Высота кнопки button:SetWidth(125) -- Ширина кнопки button:SetPoint("BOTTOM", frame, "BOTTOM", 0, 15) -- Расположение. button:SetText("Я вернулся!") -- Текст кнопки button:RegisterForClicks("AnyUp") button:SetScript("OnClick", button_OnClick) -- Выполнение события local close = CreateFrame("Button", nil, frame, "UIPanelCloseButton") close:SetPoint("TOPRIGHT", frame, "TOPRIGHT", -8, -8) -- Расположение. Наша кнопка. Code button:SetHeight(40) -- Высота кнопки Высота кнопки Code button:SetWidth(125) -- Ширина кнопки Ширина кнопки Code button:SetPoint("BOTTOM", frame, "BOTTOM", 0, 15) Расположение. Code button:SetText("Я вернулся!") Текст который пишется на кнопке. Прикрепления:
4596874.png
(83.1 Kb)
Маме беркута привет!
|
Классно лови +
Бесплатная накрутка лайков ВКОНТАКТЕ ,установка любых серверов WoW.
Ищешь стабильный Фан сервер без рисовок ? Тебе сюда
Сообщение # 4 написано 08.01.2012 в 23:16
|
| |||
| |||