• Страница 1 из 1
  • 1
Информация о персонаже 2
Nyll
Всем привет. Я решил продолжить тематику статьи "Информация о персонаже". Сегодня я покажу вам, как сделать аддон, показывающий информацию о том или ином персонаже.

Аддон будет состоять из нескольких частей, а именно:
1.Информация по таргету,
2.Текстура,
3.Проверка.
4. Кнопка "Инфо".

Инструкция по созданию toc файла - тык
Ссылка на предыдущие статью - тык
Скачать notepad++ - тык
API функции - тык

Ну что же, начнем. Я считаю, что лучше всего начать сверху, т.е с текстур.

Code
myframess:SetBackdrop({bgFile = "Interface\\DialogFrame\\UI-DialogBox-Gold-Background",  edgeFile = "Interface\\DialogFrame\\UI-DialogBox-Gold-Border",});


Тем самым мы добавили текстуру к нашему фрейму.

Ах да, я немножко изменил размер фрейма, теперь он выглядит так:

Code
myframess:SetWidth(160);                       
myframess:SetHeight(170);


Делаем фрейм мобильным, даем ему право передвигаться.

Code
myframess:SetMovable(true)
myframess:EnableMouse(true)
myframess:SetScript("OnMouseDown", myframess.StartMoving)
myframess:SetScript("OnMouseUp", myframess.StopMovingOrSizing)


Дальше создаем кнопочку, по нажатию на которую, мы будем получать информацию из таргета.

Code
infotarget = CreateFrame("Button",nil,myframess,"OptionsButtonTemplate")         
infotarget:SetWidth(80)         
infotarget:SetHeight(22)         
infotarget:SetText("Info")         
infotarget:SetPoint("CENTER",myframess,0,-60)         
infotarget:SetScript("OnClick",function() playerinfotarget() end)


Даем кнопке любое угодное вам название.

Теперь создаем функцию, которая будет отвечать за информацию из таргета.

Code
function playerinfotarget()


Делаем условие, которое звучит так: Если переменная UnitRace (ЮнитРэйс) не получает информацию, то мы выводим все параметры как "Неизвестно".

Code
if not UnitRace("target") then         
           playerinforace:SetText("|cffFFFFFFРаса:|r Неизвестно")
           playerinfoname:SetText("|cffFFFFFFНик:|r Неизвестно")
           playerinfolevel:SetText("|cffFFFFFFУровень:|r Неизвестно")
           playerinfofaction:SetText("|cffFFFFFFФракцая:|r Неизвестно")
           playerinfoclass:SetText("|cffFFFFFFКласс:|r Неизвестно")
           playerinfohealth:SetText("|cffFFFFFFЖизни:|r Неизвестно")
           playerinfomana:SetText("|cffFFFFFFМана:|r Неизвестно")


Создаем еще одно мини-условие, которое гласит следующие: Если наше 1 условие не включилось, то делаем следующее...

Code
else         
local playersname = UnitName("target");         
playerinfoname:SetText("|cffFFFFFFНик:|r "..playersname)
local playerrace = UnitRace("target")
playerinforace:SetText("|cffFFFFFFРаса:|r "..playerrace)
local playerlevel = UnitLevel("target")
playerinfolevel:SetText("|cffFFFFFFУровень:|r "..playerlevel)
local playerfaction = UnitFactionGroup("target")
playerinfofaction:SetText("|cffFFFFFFФракцая:|r "..playerfaction)
local playerclass = UnitClassBase("target")
playerinfoclass:SetText("|cffFFFFFFКласс:|r "..playerclass)
local playerhealth = UnitHealth("target")
playerinfohealth:SetText("|cffFFFFFFЖизни:|r "..playerhealth)
local playermana = UnitMana("target")
playerinfomana:SetText("|cffFFFFFFМана:|r "..playermana)


Как вы заметили значение переменных у нас не "player", как было раньше, а "target". Это нужно для того, чтобы получать не свою статистику, а статистику персонажа, который находится в таргете.

Закрываем функцию двумя эндами.

Code
end
end


Создаем заключительную функцию, которая будет открывать нам наш фрейм и показывать статистику того или иного персонажа.

Code
function showframe()
myframess:Show()
local playersname = UnitName("player");         
playerinfoname:SetText("|cffFFFFFFНик:|r "..playersname)
local playerrace = UnitRace("player")
playerinforace:SetText("|cffFFFFFFРаса:|r "..playerrace)
local playerlevel = UnitLevel("player")
playerinfolevel:SetText("|cffFFFFFFУровень:|r "..playerlevel)
local playerfaction = UnitFactionGroup("player")
playerinfofaction:SetText("|cffFFFFFFФракцая:|r "..playerfaction)
local playerclass = UnitClassBase("player")
playerinfoclass:SetText("|cffFFFFFFКласс:|r "..playerclass)
local playerhealth = UnitHealth("player")
playerinfohealth:SetText("|cffFFFFFFЖизни:|r "..playerhealth)
local playermana = UnitMana("player")
playerinfomana:SetText("|cffFFFFFFМана:|r "..playermana)
end


Делаем следующую слеш команду:

SlashCmdList["PLAYERSINFO"] = showframe;
SLASH_PLAYERSINFO1 = "/info"

И вот весь код, который у нас получился:

Code
myframess = CreateFrame("FRAME","my_Frame",UIParent);
myframess:SetWidth(160);                       
myframess:SetHeight(170);
myframess:SetMovable(true)
myframess:EnableMouse(true)
myframess:SetClampedToScreen(true)
myframess:SetBackdrop({bgFile = "Interface\\DialogFrame\\UI-DialogBox-Gold-Background",  edgeFile = "Interface\\DialogFrame\\UI-DialogBox-Gold-Border",});
myframess:SetScript("OnMouseDown", myframess.StartMoving)
myframess:SetScript("OnMouseUp", myframess.StopMovingOrSizing)
myframess:SetPoint("CENTER");
myframess:Hide()

playerinfoname = myframess:CreateFontString(nil, "OVERLAY", "GameFontNormal")
playerinfoname:SetPoint("CENTER", myframess, "CENTER", 0, 55)         
playerinfoname:SetWidth(myframess:GetRight() - myframess:GetLeft())         

playerinforace = myframess:CreateFontString(nil, "OVERLAY", "GameFontNormal")
playerinforace:SetPoint("CENTER", myframess, "CENTER", 0, 40)         
playerinforace:SetWidth(myframess:GetRight() - myframess:GetLeft())         

playerinfolevel = myframess:CreateFontString(nil, "OVERLAY", "GameFontNormal")
playerinfolevel:SetPoint("CENTER", myframess, "CENTER", 0, 25)         
playerinfolevel:SetWidth(myframess:GetRight() - myframess:GetLeft())         

playerinfofaction = myframess:CreateFontString(nil, "OVERLAY", "GameFontNormal")
playerinfofaction:SetPoint("CENTER", myframess, "CENTER", 0, 10)         
playerinfofaction:SetWidth(myframess:GetRight() - myframess:GetLeft())         

playerinfoclass = myframess:CreateFontString(nil, "OVERLAY", "GameFontNormal")
playerinfoclass:SetPoint("CENTER", myframess, "CENTER", 0, -5)         
playerinfoclass:SetWidth(myframess:GetRight() - myframess:GetLeft())         

playerinfohealth = myframess:CreateFontString(nil, "OVERLAY", "GameFontNormal")
playerinfohealth:SetPoint("CENTER", myframess, "CENTER", 0, -20)         
playerinfohealth:SetWidth(myframess:GetRight() - myframess:GetLeft())         

playerinfomana = myframess:CreateFontString(nil, "OVERLAY", "GameFontNormal")
playerinfomana:SetPoint("CENTER", myframess, "CENTER", 0, -35)         
playerinfomana:SetWidth(myframess:GetRight() - myframess:GetLeft())

infotarget = CreateFrame("Button",nil,myframess,"OptionsButtonTemplate")         
infotarget:SetWidth(80)         
infotarget:SetHeight(22)         
infotarget:SetText("Info")         
infotarget:SetPoint("CENTER",myframess,0,-60)         
infotarget:SetScript("OnClick",function() playerinfotarget() end)         

function playerinfotarget()
if not UnitRace("target") then         
           playerinforace:SetText("|cffFFFFFFРаса:|r Неизвестно")
           playerinfoname:SetText("|cffFFFFFFНик:|r Неизвестно")
           playerinfolevel:SetText("|cffFFFFFFУровень:|r Неизвестно")
           playerinfofaction:SetText("|cffFFFFFFФракцая:|r Неизвестно")
           playerinfoclass:SetText("|cffFFFFFFКласс:|r Неизвестно")
           playerinfohealth:SetText("|cffFFFFFFЖизни:|r Неизвестно")
           playerinfomana:SetText("|cffFFFFFFМана:|r Неизвестно")
else         
local playersname = UnitName("target");         
playerinfoname:SetText("|cffFFFFFFНик:|r "..playersname)
local playerrace = UnitRace("target")
playerinforace:SetText("|cffFFFFFFРаса:|r "..playerrace)
local playerlevel = UnitLevel("target")
playerinfolevel:SetText("|cffFFFFFFУровень:|r "..playerlevel)
local playerfaction = UnitFactionGroup("target")
playerinfofaction:SetText("|cffFFFFFFФракцая:|r "..playerfaction)
local playerclass = UnitClassBase("target")
playerinfoclass:SetText("|cffFFFFFFКласс:|r "..playerclass)
local playerhealth = UnitHealth("target")
playerinfohealth:SetText("|cffFFFFFFЖизни:|r "..playerhealth)
local playermana = UnitMana("target")
playerinfomana:SetText("|cffFFFFFFМана:|r "..playermana)
end
end

function showframe()
myframess:Show()
local playersname = UnitName("player");         
playerinfoname:SetText("|cffFFFFFFНик:|r "..playersname)
local playerrace = UnitRace("player")
playerinforace:SetText("|cffFFFFFFРаса:|r "..playerrace)
local playerlevel = UnitLevel("player")
playerinfolevel:SetText("|cffFFFFFFУровень:|r "..playerlevel)
local playerfaction = UnitFactionGroup("player")
playerinfofaction:SetText("|cffFFFFFFФракцая:|r "..playerfaction)
local playerclass = UnitClassBase("player")
playerinfoclass:SetText("|cffFFFFFFКласс:|r "..playerclass)
local playerhealth = UnitHealth("player")
playerinfohealth:SetText("|cffFFFFFFЖизни:|r "..playerhealth)
local playermana = UnitMana("player")
playerinfomana:SetText("|cffFFFFFFМана:|r "..playermana)
end

SlashCmdList["PLAYERSINFO"] = showframe;
SLASH_PLAYERSINFO1 = "/info"


На этом, думаю, все. Удачи вам в создании аддона.


[download]Info - для WoW 3.0+[/download]
Маме беркута привет!
Сообщение # 1 отредактировано Pr - Суббота, 19.05.2012, 11:38
Ascreed
•°•Very Nice•°•
Все отлично работает и на 3.3.5,только пришлось изменить названия Имя Расса и т.д,т.к кодировку UTF-8 русский не читал)
если не правильно написал по англ. не судите строго плохо очень знаю его

Добавлено (19.05.2012, 11:27)
---------------------------------------------
пожелание к этому аддону есть)Сделай кнопку "Закрыть"

Сообщение # 2 отредактировано Ascreed - Суббота, 19.05.2012, 11:23
Nyll
Quote (Ascreed)
пожелание к этому аддону есть)Сделай кнопку "Закрыть"

Вы уже сами в состоянии сделать эту кнопку smile
Code
название_фреймы:Hide()
Маме беркута привет!
Сообщение # 3 написано 19.05.2012 в 12:45
  • Страница 1 из 1
  • 1
Поиск: