|
Форум Обсуждение аддонов Разработка аддонов WoW Создаем аддон "блокнот" |
Создаем аддон "блокнот" |
Здравствуйте. В связи с тем что все мне кричат "Давай сделаем норм аддон" и т.д Я решил написать статью как сделать аддон "Блокнот". Это полноценный блокнот в World of Warcraft в котором вы можете хранить все что хотите
Инструкция по созданию toc файла - тык Ссылка на предыдущие статью - тык Скачать notepad++ - тык API функции - тык Скажу сразу в аддоне будет использоваться база данных, так что не забудьте указать в TOC файле строчку "SavedVariables" с названием вашей базы. Начнем. Создаем ExitBox но не простой (А золотой) а мульти Editbox. Code EditsBox = CreateFrame("EditBox",nil,UIParent) Указываем высоту/ширину. Code EditsBox:SetWidth(300) EditsBox:SetHeight(204) Указываем шрифт и задаем текстуру. Code EditsBox:SetFontObject(GameFontNormal) EditsBox:SetBackdrop(GameTooltip:GetBackdrop()) Далее делаем его "Мульти EdtiBox" Code EditsBox:SetMultiLine(true) EditsBox:SetTextInsets(10, 10, 35, 35) Задаем цвет текстурам. Code EditsBox:SetBackdropColor(0, 0, 0, 0.8) EditsBox:SetBackdropBorderColor(0.6, 0.6, 0.6, 1) Указываем позицию. Code EditsBox:SetPoint("CENTER",UIParent,0,5) И указываем SetScript. Code EditsBox:SetScript( "OnEscapePressed", function( self ) self:ClearFocus() end ) Вот мы и закончили с Editbox вы подумали уже все? Нееет ребята это только начало (фух). Создадим надпись чтобы было понятно что это за "Штука". Создаем фрейму текста. Code editboxtext = EditsBox:CreateFontString(nil, "OVERLAY", "GameFontNormal") Указываем позицию. Code editboxtext:SetPoint("TOP", EditsBox, "TOP", 0, -16) Указываем размер. Code editboxtext:SetWidth(EditsBox:GetRight() - EditsBox:GetLeft()) И пишем что это "Блокнот". Code editboxtext:SetText("|cffFFFFFFБлокнот|r") Теперь делаем копирайт. Логичней поставить щас кнопки но кнопки будем делать в конце. Создаем фрейму. Code editboxtextwowjp = EditsBox:CreateFontString(nil, "OVERLAY", "GameFontNormal") Указываем позицию. Code editboxtextwowjp:SetPoint("BOTTOM", EditsBox, "BOTTOM", 0, 16) Указываем размер. Code editboxtextwowjp:SetWidth(EditsBox:GetRight() - EditsBox:GetLeft()) И пишем копирайт. Code editboxtextwowjp:SetText("|cffFFFFFFBy Nyll для WoWJP.net|r") ВСЕ! Мы закончили с надписями (Ура товарищи) теперь приступим к кнопкам. Создаем первую кнопку которая будет сохранять наш текст в переменную. Делаем фрейму. Code saveboxsave = CreateFrame("Button",nil,EditsBox,"OptionsButtonTemplate") Далее указываем размер кнопки. (Высоту\Ширину) Code saveboxsave:SetWidth(80) saveboxsave:SetHeight(22) Делаем название кнопки. Code saveboxsave:SetText("Save") Указываем позицию кнопки на фрейме. Code saveboxsave:SetPoint("TOPLEFT",EditsBox,10,-10) Теперь делаем событие. Code saveboxsave:SetScript("OnClick",function() saveboxing() end) В событии мы говорим клиенту: Ей ты клиент (Свистнул) пойди ка сюда... выполни запуск функции при нажатии на кнопку. (И отдай мобилу!) Теперь мы делаем функцию которая будет сохранять наш текст в переменную. Code function saveboxing() NyllAdmin["SAVEBOXINGS"] = EditsBox:GetText() end За место "NyllAdmin["SAVEBOXINGS"]" пишем свою базу. Просто я делал блокнотик в своем аддоне так что выбрал эту базу (других нету ^___^) Все! Кнопка сохранения у нас работает! Теперь нужно сделать кнопку очистки! Делаем все также как и в 1 кнопки... Создаем фрейму. Code saveboxclear = CreateFrame("Button",nil,EditsBox,"OptionsButtonTemplate") Указываем размер кнопки. Code saveboxclear:SetWidth(80) saveboxclear:SetHeight(22) Делаем текст для кнопки. Code saveboxclear:SetText("Clear") Указываем позицию кнопки на едитбоксе. Code saveboxclear:SetPoint("TOPRIGHT",EditsBox,-10,-10) Делаем событие. Code saveboxclear:SetScript("OnClick",function() clearboxing() end) Все! Мы сделали вторую кнопку теперь делаем для нее функцию. Code function clearboxing() EditsBox:SetText(" ") NyllAdmin["SAVEBOXINGS"] = " " end EditsBox:SetText(" ") - Мы сказали что в едитбоксе нужно сделать идеальный порядок! (Удалить весь текст) NyllAdmin["SAVEBOXINGS"] = " " - Делаем в переменной пустоту. Самые умные могли бы сказать: Дениска а почему ты не поставил значение переменной "nil". Я бы ответил: Да потому что будет ошибка сценария луа... Можно условиями закрыть эту ошибку, сделать текст ошибки и т.д и т.п, но это дополнительный код... ну грубо говоря "Лень матушка". Теперь делаем функцию которая будет вытягивать весь текст из переменной и сувать его в SetText. Code function grabber() EditsBox:SetText(NyllAdmin["SAVEBOXINGS"]) end п.с На счет ошибки о которой я говорил выше... Она возникала бы из за того что эта функция делает запрос в переменную а если бы стояло значение переменной "nil" то была бы ошибка. Ну и теперь маленький но немения важный элемент аддона это фрейма которая при входе в игру будет запускать нашу функцию "grabber". Code local arm = CreateFrame("Frame") arm:RegisterEvent("ADDON_LOADED") arm:SetScript("OnEvent", grabber) Весь код что используется у нас в аддоне. Code EditsBox = CreateFrame("EditBox",nil,UIParent) EditsBox:SetWidth(300) EditsBox:SetHeight(204) EditsBox:SetFontObject(GameFontNormal) EditsBox:SetBackdrop(GameTooltip:GetBackdrop()) EditsBox:SetMultiLine(true) EditsBox:SetTextInsets(10, 10, 35, 35) EditsBox:SetBackdropColor(0, 0, 0, 0.8) EditsBox:SetBackdropBorderColor(0.6, 0.6, 0.6, 1) EditsBox:SetPoint("CENTER",UIParent,0,5) EditsBox:SetScript( "OnEscapePressed", function( self ) self:ClearFocus() end ) editboxtext = EditsBox:CreateFontString(nil, "OVERLAY", "GameFontNormal") editboxtext:SetPoint("TOP", EditsBox, "TOP", 0, -16) editboxtext:SetWidth(EditsBox:GetRight() - EditsBox:GetLeft()) editboxtext:SetText("|cffFFFFFFБлокнот|r") editboxtextwowjp = EditsBox:CreateFontString(nil, "OVERLAY", "GameFontNormal") editboxtextwowjp:SetPoint("BOTTOM", EditsBox, "BOTTOM", 0, 16) editboxtextwowjp:SetWidth(EditsBox:GetRight() - EditsBox:GetLeft()) editboxtextwowjp:SetText("|cffFFFFFFBy Nyll для WoWJP.net|r") saveboxsave = CreateFrame("Button",nil,EditsBox,"OptionsButtonTemplate") saveboxsave:SetWidth(80) saveboxsave:SetHeight(22) saveboxsave:SetText("Save") saveboxsave:SetPoint("TOPLEFT",EditsBox,10,-10) saveboxsave:SetScript("OnClick",function() saveboxing() end) saveboxclear = CreateFrame("Button",nil,EditsBox,"OptionsButtonTemplate") saveboxclear:SetWidth(80) saveboxclear:SetHeight(22) saveboxclear:SetText("Clear") saveboxclear:SetPoint("TOPRIGHT",EditsBox,-10,-10) saveboxclear:SetScript("OnClick",function() clearboxing() end) function saveboxing() NyllAdmin["SAVEBOXINGS"] = EditsBox:GetText() end function clearboxing() EditsBox:SetText(" ") NyllAdmin["SAVEBOXINGS"] = " " end function grabber() EditsBox:SetText(NyllAdmin["SAVEBOXINGS"]) end local arm = CreateFrame("Frame") arm:RegisterEvent("ADDON_LOADED") arm:SetScript("OnEvent", grabber) Вот и все! Надеюсь что вам понравится аддон. Удачи вам! [download]Notepad - для WoW 4.0[/download]
Маме беркута привет!
|
Скачал, установил на 3.3.5. Не знаю может версия клиента не та, а может и баги.
1) Кнопка Выхода(Esc) Почему то не работает при включении аддона. Нажимать приходится на панели мышкой. 2)Фрейм нельзя передвигать и закрывать, что делает почти невозможным обычную игру(не побегать, т.к. вводится текст) 3) Желательно бы кнопочку возле миникарты, как у всех аддонов, чтоб закрыл, побегал, нужно - открыл. А сама идея очень понравилась, мне бы аддон такой очень пригодился, записи всякие делать.
Сообщение # 2 написано 05.05.2012 в 08:58
|
Quote (Neket007) 1) Кнопка Выхода(Esc) Почему то не работает при включении аддона. Нажимать приходится на панели мышкой. Хз там нету нечего чего нету в личе. Quote (Neket007) 2)Фрейм нельзя передвигать и закрывать, что делает почти невозможным обычную игру(не побегать, т.к. вводится текст) Это едитбокс... Добавь 1 аргумент и можно будет передвигать. Quote (Neket007) 3) Желательно бы кнопочку возле миникарты, как у всех аддонов, чтоб закрыл, побегал, нужно - открыл. Это уже каждый делает по желанию Постараюсь сделать урок как запилить кнопку к миникарте. Что касается аддона... У кого не работает что-то включите "Ошибки сценария Lua" и дайте сюда лог с ошибкой. Если аддон понравится многим людям сделаю его полным... добавлю кнопку закрыть/открыть.. сделаю сообщения об ошибках ну и т.д и т.п. Но чтобы сделать полноценный аддон мне нужно одобрение Juline... Так как если аддон бред зачем тратить силы ^___^ п.с надеюсь что Juline посетит эту тему
Маме беркута привет!
|
Почему же бред? По-моему, свободу слова и действий еще никто не отменял (помимо ограничений правилами). Игроки ведь хотят увидеть этот аддон? Так сделай! )
Даже я, будь этот аддон чем-то лучше, чем уже куча существующих блокнотов, установлю его себе. Хорошая идея! Давай реализуем)))
Сообщение # 4 написано 05.05.2012 в 13:01
|
У меня познаний в програминге вообще 0 но я смог это сделать но вот пара вопросов как сделать чтобы его можно было перемещать,потом записи не сохраняет и вот как это исправить
как по мне аддон полезный бывает надо что-то записать а ничего под рукой нету и сворачивать вов лень,лови +
Сообщение # 5 написано 05.05.2012 в 17:58
|
Ну вот вам...
[download]Notepad - для WoW 3.0+[/download]
Прикрепления:
5468177.jpg
(304.2 Kb)
Маме беркута привет!
Сообщение # 8 написано 05.05.2012 в 19:00
|
менял
ну ладно,я в этом не понимаю может что-то упустил Добавлено (05.05.2012, 20:36) --------------------------------------------- переделал теперь у меня все надписи ок только нету кнопки Закрыть Добавлено (05.05.2012, 20:41) --------------------------------------------- все,теперь все ок,получилось) |
Как обычно уважаемый Nyll удивляешь. Благодарствую за проделанную работу.
Качественный сервер
Высокая работоспособность, много особенностей, лучший сервис!
Сообщение # 11 написано 05.05.2012 в 21:17
|
| |||
| |||