• Страница 1 из 1
  • 1
Форум » Обсуждение аддонов » Разработка аддонов WoW » Таймер AFK
Таймер AFK
Nyll
Здравствуйте, сегодня будем делать аддон/таймер времени проведенного в афк. Этот аддон я нашел на вовинтерфейсе, и мне показался он интересным и решил написать по нему гайд. Аддон очень простой и много усилий для его создания нам не понадобится.



Инструкция по созданию 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("Я вернулся!")

Текст который пишется на кнопке.


[download]AFK - 3.3
[/download]
Прикрепления: 4596874.png (83.1 Kb)
Маме беркута привет!
Сообщение # 1 отредактировано Nyll - Пятница, 24.02.2012, 12:09
Xaller
Скаут
спс, щас +ну, а может кто готовый аддон скинуть? у меня просто нету времени а навыка в его создании((
Сообщение # 2 написано 08.01.2012 в 19:08
Juline
!1
Quote (Nyll)


Скачать
AFK - 3.3
Прикрепления: 4596874.png(83Kb)

Для кого? В самом низу поста.
Сообщение # 3 написано 08.01.2012 в 19:55
TrinityCore
Нагибатор
Классно лови +
Бесплатная накрутка лайков ВКОНТАКТЕ ,установка любых серверов WoW.
Ищешь стабильный Фан сервер без рисовок ? Тебе сюда

Сообщение # 4 написано 08.01.2012 в 23:16
Adamas06
Скаут
Прикольно) но мне кажется оно того не стоит) зайду с компа плюсану)
рожденный ползать везде пролезет,
рожденный летать всегда в пролете_
Сообщение # 5 написано 10.01.2012 в 15:01
Mercan
Скаут
Nyll,
Ваще класс,лови +

______________________________________________________________


Сообщение # 6 написано 20.01.2012 в 18:32
phrenetic
Скаут
нормальный аддон, иногда интересно узнать сколько ты был афк smile
Сообщение # 7 написано 03.02.2012 в 20:30
Insurgente
Скаут
полезный аддон smile
Сообщение # 8 написано 03.08.2012 в 23:48
TheNexusSRN
☢†WaLaaR†☢
спасибо, ваще искал
Сообщение # 9 написано 01.11.2012 в 17:53
DIN31
Раздатчик плюшек
да полезный аддон, но вот если бы онавтоматом делал какое-то движение персонажем, чтоб не кикало с серва, был бы вообще атас
Сообщение # 10 написано 04.11.2012 в 10:28
Форум » Обсуждение аддонов » Разработка аддонов WoW » Таймер AFK
  • Страница 1 из 1
  • 1
Поиск: