Здесь я раскажу основные принципы как добавлять новые приоритеты в этот аддон.
Как простые так и сложные.
Аддон Shock&Awe был создан в октябре 2008года автором Pericles. Для постоянных читателей ресурса elitistjerks он известен как- Levva. Данный человек стоял у истоков создания EnhSim (симулятор энх. шамана) и вообще вёл очень глубокую проработку механики нашего класса. К сожалению, с недавнего времени он, насколько я понял, прекратил свою деятельность в этом направлении, но его творчество успешно используется до сих пор, и думаю, будет продолжать использоваться и далее.
От себя лично я выражаю благодарность этому человеку за всё что он сделал для энханс сообщества.
К сожалению я не смог связаться с ним лично, поэтому надеюсь что он не будет против всего того что я напишу ниже.
Thank you Levva!
Скачать аддон а так же прочитать описание основного функционала можно например тут.
Если коротко- то мы получаем набор баров(полосок) отслеживающих кулдауны абилок, фрейм приоритетов, окно статистики.
Большинство пунктов общих настроек аддона, так же как и общих настроек самого фрейма- локализованы на русский и трудности в понимани- не представляют.
По моему мнению, самая главная и полезная часть S&A это фрейм приоритетов а всё остальное- приятное дополнение. Вот именно его я и буду рассматривать в этом материале.
Фрейм приоритетов- Говоря простым языком, это свободно редактирующееся окошко (можно менять расположение, величину), в котором показываются иконки абилок в предопределённом пользователем порядке.
Настройки фрейма приоритетов.
Если вспомнить а том о чём я говорил в "Ротации" до этого. То вы получаете в игре фрейм в котором в зависимости от состояния показываются иконки абилок из вашей ротации.Предопределение того что и когда показывать(приоритетов) происходит в меню настроек:
Собственно все интуитивно понятно-
Priority Group- Это набор группы приоритетов. Очень полезная вещь. Вы можете создать несколько групп заданных вами приоритетов (AOE, Single) и переключаться между ними во время боя. Для переключения между группами просто забинтите нужные клавиши в меню общих настроек биндов WoW.
Казалось бы все просто и счастье уже где то рядом. Остается только вбить свежие приоритеты из хорошего гайда и научится прожимать глядя на меняющиеся иконки.
Однако, ньюанс заключается в том, что в связи с редким обновлением самого аддона, вы не сможете найти тех или иных приоритетов в выпадающих списках выбора. новые приоритеты просто не реализованы разработчиком.
Попытки долбить автора, по этому поводу- к сожалению результатов не приносили, поэтому пришлось немного по разбираться в LUA и принципе написания аддонов WoW. На самом деле все оказалось довольно просто.
Итак вот свежий набор приоритетов для текущего патча:
Searing Totem if not present | ||
Stormstrike | ||
Lava Lash | ||
Maelstrom Weapon x5 Lightning Bolt | ||
Maelstrom Weapon x4 Lightning Bolt with Spirit Wolves | ||
Flame Shock with Unleash Flame buff | ||
Unleash Elements | ||
Earth Shock | ||
Feral Spirit | ||
Searing Totem if <5 ticks left | ||
Maelstrom Weapon x1 Lightning Bolt (стырено отсюда) В текущей версии аддона мы не найдем следующих приоритетов из списка выше: Maelstrom Weapon x4 Lightning Bolt with Spirit Wolves Searing Totem if <5 ticks left Maelstrom Weapon x1 Lightning Bolt Далее, я расскажу как добавить эти приоритеты в текущую версию аддона. Кастомизация В составе файлов аддона нас, в первую очередь будет интересовать файлы: ShockAndAwe.lua и Priority.lua по сути- это текстовые файлы. Редактировать и сохранять их можно в любом текстовом редакторе. Я пользуюсь Notepad++ (рекомендую). Для навигации по этим файлам в своем рассказе я буду использовать номера строк. ShockAndAwe.lua. Со строки №834 начинается определение констант. Это набор используемых аддоном заклинаний которые в том или ином виде будут использоваться при работе. Принцип описания константы прост: ShockAndAwe.constants["Название абилки(англ.)"], _, ShockAndAwe.constants["Название абилки(англ.) Icon"] = GetSpellInfo(SpellId) Всю информацию можно взять с wowhead. В таком виде сюда добавляются отсутствующие в списке абилки которые мы планируем использовать в аддоне. Яркий пример был в предыдущем патче когда в цикл включалась Lava Burst. Для реализации нужных нам приоритетов этот файл можно не трогать, но на будущее полезно знать. Priority.lua Описание самих приоритетов начинается со строки №102 Итак, у нас три приоритета, поддержку которых необходимо реализовать в аддоне. Если разобрать их по сложности, то у нас два легких Searing Totem if <5 ticks left Maelstrom Weapon x1 Lightning Bolt и один "тяжелый" Maelstrom Weapon x4 Lightning Bolt with Spirit Wolves Первые два приоритета реализуются довольно легко. Просто надо добавить новые на основе существующих: Для "Searing Totem if <5 ticks left" будем использовать ненужный в текущих реалиях приоритет "Lava lash 5 searing flames". В файле Priority.lu он выглядит так: ShockAndAwe.priorityTable.name["ll_sf5"] = L["Lava lash 5 searing flames"] ShockAndAwe.priorityTable.icon["ll_sf5"] = ShockAndAwe.constants["Lava Lash Icon"] ShockAndAwe.priorityTable.test["ll_sf5"] = function () local _, _, sfstacks = ShockAndAwe:GetDebuffInfo(ShockAndAwe.constants["Searing Flames"]) return ShockAndAwe:SpellAvailable(ShockAndAwe.constants["Lava Lash"]) and sfstacks == 5 end "ll_sf5"-аббревиатура приоритета. Можно задавать в любой свободной форме придерживаясь формата. Для нашего нового приоритета пишем например- "st_sf5". L["Lava lash 5 searing flames"]-название приоритета которое будет отображаться в аддоне. Так же можно придумать любое название, главное потом не забыть что оно означает. Новый приоритет называем например- "ST if less 5" Буква "L" в начале означает, что это название будет использовать параметры локализации аддона которые определены в отдельном файле \Interface\AddOns\ShockAndAwe\Locales\Locale-ruRU.lua Короче говоря, если вы хотите что бы название вашего нового приоритета в аддоне отображалось на русском языке, надо добавить в Locale-ruRU.lua: L["ST if less 5"] = "Опаляющий тотем если меньше 5" Если не заморачиваться таким правильным оформлением то просто убираем L и квадратные скобки (кавычки оставляем) и используем английское название. У нас получается: ShockAndAwe.priorityTable.name["st_sf5"] = "ST if less 5" Что менять в следующих двух строках я думаю должно быть интуитивно понятно. Получаем: ShockAndAwe.priorityTable.icon["st_sf5"] = ShockAndAwe.constants["Searing Totem Icon"] ShockAndAwe.priorityTable.test["st_sf5"] = Модификация функции приоритета так же не должно составить труда. Итак, новый приоритет: ShockAndAwe.priorityTable.name["st_sf5"] = "ST if less 5" ShockAndAwe.priorityTable.icon["st_sf5"] = ShockAndAwe.constants["Searing Totem Icon"] ShockAndAwe.priorityTable.test["st_sf5"] = function () local _, _, sfstacks = ShockAndAwe:GetDebuffInfo(ShockAndAwe.constants["Searing Flames"]) return ShockAndAwe:SpellAvailable(ShockAndAwe.constants["Searing Totem Icon"]) and sfstacks < 5 end Все это дело вставляем в любое место в файл Priority.lua после строки №102. Maelstrom Weapon x1 Lightning Bolt - ещё проще. Можно просто заменить пару знаков в существующем Maelstrom Weapon x2 Lightning Bolt: ShockAndAwe.priorityTable.name["mw1_lb"] = L["MW1 Lightning Bolt"] ShockAndAwe.priorityTable.icon["mw1_lb"] = ShockAndAwe.constants["Lightning Bolt Icon"] ShockAndAwe.priorityTable.test["mw1_lb"] = function () return ShockAndAwe.db.char.msstacks >= 1 end Сложнее с Maelstrom Weapon x4 Lightning Bolt with Spirit Wolves. Аналогов в текущей версии-нет, и собрать из кусков- не получится. Волки не дают никакого баффа и отследить момент из вызова и исчезновения довольно- не тривиальная задача. Выручит нас WoW API GetSpellCooldown. Логика простая. Так как общий кулдаун волков и время когда они активны-фиксированные значения и не меняются, можно без особого труда идентифицировать момент их вызова и моент когда их уже нет. Приоритет будет выглядеть вот так: ShockAndAwe.priorityTable.name["mw_if_fs"] = "MW4 + Feral Spirit" ShockAndAwe.priorityTable.icon["mw_if_fs"] = ShockAndAwe.constants["Lightning Bolt Icon"] ShockAndAwe.priorityTable.test["mw_if_fs"] = function () local start, duration, _ = GetSpellCooldown(51533) local mwX = 4 if start> 0 and duration > 0 then local FeralSpiritActive = start + duration - GetTime() if FeralSpiritActive > 90 then -- волки активные return ShockAndAwe.db.char.msstacks >= mwX else -- волки закончились return false end else -- волки не на кд return false end end Заранее извиняюсь за отсутствие терминов из программирования и скорее всегнубский рассказ получился, но я совсем не программист и написал как понял. Надеюсь изложил доступно и добавить новые приоритеты в текущую версию аддона вам не составит труда. Отвечу на все вопросы в комментариях. (Выражаю благодарность моему другу Грелкину за большую помощь в освноении кастомизации аддона) |