|
Форум Обсуждение аддонов Разработка аддонов WoW Информация о персонаже 2 |
Информация о персонаже 2 |
Всем привет. Я решил продолжить тематику статьи "Информация о персонаже". Сегодня я покажу вам, как сделать аддон, показывающий информацию о том или ином персонаже.
Аддон будет состоять из нескольких частей, а именно: 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]
Маме беркута привет!
|
Все отлично работает и на 3.3.5,только пришлось изменить названия Имя Расса и т.д,т.к кодировку UTF-8 русский не читал)
если не правильно написал по англ. не судите строго плохо очень знаю его Добавлено (19.05.2012, 11:27) |
| |||
| |||