• Страница 1 из 1
  • 1
Создаем аддон "блокнот"
Nyll
Здравствуйте. В связи с тем что все мне кричат "Давай сделаем норм аддон" и т.д Я решил написать статью как сделать аддон "Блокнот". Это полноценный блокнот в World of Warcraft в котором вы можете хранить все что хотите smile



Инструкция по созданию 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]
Маме беркута привет!
Сообщение # 1 отредактировано Nyll - Суббота, 05.05.2012, 08:07
Neket007
Core Developer
Скачал, установил на 3.3.5. Не знаю может версия клиента не та, а может и баги.
1) Кнопка Выхода(Esc) Почему то не работает при включении аддона. Нажимать приходится на панели мышкой.
2)Фрейм нельзя передвигать и закрывать, что делает почти невозможным обычную игру(не побегать, т.к. вводится текст)
3) Желательно бы кнопочку возле миникарты, как у всех аддонов, чтоб закрыл, побегал, нужно - открыл.
А сама идея очень понравилась, мне бы аддон такой очень пригодился, записи всякие делать.
Сообщение # 2 написано 05.05.2012 в 08:58
Nyll
Quote (Neket007)
1) Кнопка Выхода(Esc) Почему то не работает при включении аддона. Нажимать приходится на панели мышкой.

Хз там нету нечего чего нету в личе.

Quote (Neket007)
2)Фрейм нельзя передвигать и закрывать, что делает почти невозможным обычную игру(не побегать, т.к. вводится текст)

Это едитбокс... Добавь 1 аргумент и можно будет передвигать.

Quote (Neket007)
3) Желательно бы кнопочку возле миникарты, как у всех аддонов, чтоб закрыл, побегал, нужно - открыл.


Это уже каждый делает по желанию Постараюсь сделать урок как запилить кнопку к миникарте.

Что касается аддона... У кого не работает что-то включите "Ошибки сценария Lua" и дайте сюда лог с ошибкой.

Если аддон понравится многим людям сделаю его полным... добавлю кнопку закрыть/открыть.. сделаю сообщения об ошибках ну и т.д и т.п.

Но чтобы сделать полноценный аддон мне нужно одобрение Juline... Так как если аддон бред зачем тратить силы ^___^

п.с надеюсь что Juline посетит эту тему
Маме беркута привет!
Сообщение # 3 отредактировано Nyll - Суббота, 05.05.2012, 09:05
mvlabat
Сержант
Почему же бред? По-моему, свободу слова и действий еще никто не отменял (помимо ограничений правилами). Игроки ведь хотят увидеть этот аддон? Так сделай! )
Даже я, будь этот аддон чем-то лучше, чем уже куча существующих блокнотов, установлю его себе.
Хорошая идея! Давай реализуем)))
Сообщение # 4 написано 05.05.2012 в 13:01
Ascreed
•°•Very Nice•°•
У меня познаний в програминге вообще 0 но я смог это сделать но вот пара вопросов как сделать чтобы его можно было перемещать,потом записи не сохраняет и вот как это исправить

как по мне аддон полезный бывает надо что-то записать а ничего под рукой нету и сворачивать вов лень,лови +
Сообщение # 5 написано 05.05.2012 в 17:58
Nyll
Ascreed, Поставьте кодировку UTF-8
Маме беркута привет!
Сообщение # 6 написано 05.05.2012 в 18:01
Ascreed
•°•Very Nice•°•
все равно все так-же,ну ладно я хотя бы понял как это делается все)
Сообщение # 7 написано 05.05.2012 в 18:08
Nyll
Ну вот вам...



[download]Notepad - для WoW 3.0+[/download]
Прикрепления: 5468177.jpg (304.2 Kb)
Маме беркута привет!
Сообщение # 8 написано 05.05.2012 в 19:00
Nyll
Quote (Ascreed)
все равно все так-же,ну ладно я хотя бы понял как это делается все)

Этот вопросик означает что у тебя фиг знает какая кодировка. Чтобы было норм нужно сменить на UTF-8
Маме беркута привет!
Сообщение # 9 написано 05.05.2012 в 19:16
Ascreed
•°•Very Nice•°•
менял
ну ладно,я в этом не понимаю может что-то упустил

Добавлено (05.05.2012, 20:36)
---------------------------------------------
переделал теперь у меня все надписи ок только нету кнопки Закрыть

Добавлено (05.05.2012, 20:41)
---------------------------------------------
все,теперь все ок,получилось)
Сообщение # 10 отредактировано Ascreed - Суббота, 05.05.2012, 20:46
Dimasta_d
Сержант
Как обычно уважаемый Nyll удивляешь. Благодарствую за проделанную работу. smile
Качественный сервер
Высокая работоспособность, много особенностей, лучший сервис!
Сообщение # 11 написано 05.05.2012 в 21:17
Nyll
Кстати аддон созданный вами (нууу тот который не полная копия моего) вы можете выложить сюда.
Маме беркута привет!
Сообщение # 12 написано 06.05.2012 в 14:11
Juline
!1
Nyll, отлично. Практический материал.
Сообщение # 13 написано 06.05.2012 в 14:51
Mixek
✓Копатель Однодневок
когда же будет свежий адон манг админ? angry
https://vk.com/mixek
Сообщение # 14 написано 07.05.2012 в 08:48
Yahoo11
Скаут
Mixek,
Не нужен тот аддон. И без него уже куча полезных есть
Сообщение # 15 написано 07.05.2012 в 12:37
Wakir
Скаут
Nyll, нужный аддон
Сообщение # 16 отредактировано Wakir - Понедельник, 07.05.2012, 12:39
PashokRomanow
Скаут
Спс за гайд очень помогло
Сообщение # 17 написано 28.05.2012 в 21:46
0niwone
WoW-Carnge <Dev>
А можно как нибудь запретить им изменять в нем текст? Чтобы текст там был (который я в Lua настрочу) а они его не стереть не изменить не могли? Помогите пожалуйста smile
Пользуюсь гарант услугами pwlvl.ru
Сообщение # 18 написано 25.06.2012 в 06:31
Vladyxxa
Капрал
Quote (0niwone)
А можно как нибудь запретить им изменять в нем текст? Чтобы текст там был (который я в Lua настрочу) а они его не стереть не изменить не могли? Помогите пожалуйста

не проще просто написать текст?-_-
Сообщение # 19 написано 25.06.2012 в 08:14
Nyll
Quote (Vladyxxa)
А можно как нибудь запретить им изменять в нем текст? Чтобы текст там был (который я в Lua настрочу) а они его не стереть не изменить не могли? Помогите пожалуйста

Да можно.
Маме беркута привет!
Сообщение # 20 написано 25.06.2012 в 23:04
  • Страница 1 из 1
  • 1
Поиск: