Jump to content
Alloder.pro: about Allods with love
Search In
  • More options...
Find results that contain...
Find results in...

New program for writers

We turn from quantity to quality and tell you how we will supplement the Allods Team program with rewards in rubles.

More

The new Updater

Let us to introduce the new addon updater software and to share the details

Read more

Alloder 2.0

We have started the process of project evolve, and this relates not only, and not even primarily of the site's view

Read more

Менеджер аддонов


duvo
 Share

Recommended Posts

Дальнейшее продолжение AddonDevReloader -- внутриигровая включалка/отключалка аддонов.

imgds.png

Скрыть/показать -- команда /aom. Не перетаскивается, состояния аддонов не сохраняются.

Есть пара некритичных ошибок-недоработок(по-моему, пара о_0), но править пока нет желания -)

Делюсь тем, что есть. Может, кому-то интересно. Можно, например, отключить стандартный аддон драгндроп и не бояться в пылу битвы потерять/переместить элемент с экшнбара. Почему разрабы не запилят эту возможность в настройки -- нипанимаю Т_Т.

Link to comment
Share on other sites

Ого!

Я как раз подумывал о необходимости такого менеджера аддонов. Причём, с возможностью включать/выключать как пользовательские, так и встроенные аддоны. Примерно, как на скриншоте.

У меня есть ещё пара хороших идей, чем такой менеджер аддонов должен заниматься. Потом напишу подробнее.

Ушёл тестировать... :)

UPD: Протестировал.

Ошибки:

Галочки снимаются только со второго нажатия.

Не раскрываются и не сворачиваются списки аддонов. Т.е. список встроенных аддонов так и не удалось посмотреть.

Посмотрел исходники. Порадовало обилие свежих решений! :) Например:

1) Прототипы компонентов интерфейса. (Это есть в примерах нивала, но в аддонах, насколько знаю, ещё никто не использовал.)

2) Реагирование на команду, вводимую в консоли. (Вроде, элементарно, но никто до сих пор, почему-то, не догадывался этого сделать. Ни у кого голова даже не пыталась думать в этом направлении, наверное потому, что разработчики отобрали у нас почти все функции для работы с чатом, и все это знают.)

3) Вроде, первый аддон, в котором использован скроллируемый контейнер. (На форуме уже какое-то время лежит пример того, как это делается. Но до сих пор никто этого не использовал на практике.)

4) Локализуемые строки хранятся прямо в LUA, а не в кипе внешних TXT-файлов. (Это стало возможным с появлением userMods.ToWString(), которую мы СПЕЦИАЛЬНО выпросили у разработчиков, но до сих пор никто ещё не использовал эту функцию в аддонах. У этого способа есть только один большой минус - он пока НЕ работает в иностранных версиях АО.)

Для всего, что реализовано, довольно КОМПАКТНЫЙ исходник, кстати. :)

Link to comment
Share on other sites

Quote:
Галочки снимаются только со второго нажатия.

Угу. Недоработка намба уан -) Когда делал без перерасчета включенных/отключенных аддонов -- все было норм, теперь что-то не получается Т_Т
Quote:
Не раскрываются и не сворачиваются списки аддонов. Т.е. список встроенных аддонов так и не удалось посмотреть.

Недоработка намба ту -) Все разворачивается/сворачивается, но надо тыкать по в верхней половине кнопки о_0
img01n.png
Этого я вообще не понимаю.
Link to comment
Share on other sites

Абалденный менеджер :)

Приделать еще сохранение состояния аддонов для каждого чара...

Намба ван

Так вроде неплохо работает

Code:
T_T [ "btn_lmb" ]  = function( reaction )

...

local parent = reaction.widget:GetParent()

local b = reaction.widget:GetVariant() == 1

if b then common.StateUnloadManagedAddon( parent:GetName() ) else common.StateLoadManagedAddon( parent:GetName() ) end

reaction.widget:SetVariant( b and 0 or 1)

--UpdList()

end

end

Если хочется знать загрузку всех аддонов, может просто по открытию списка обновлять состояние?

Намба ту

GroupContainer перекрывает кнопку и оставляет ей сверху как раз 8 пикселей

Поигрался с Priority.. чето не очень

Так все нормально нажимается

GroupContainer.(WidgetPanel).xdb

Code:
<Y>

<Align>WIDGET_ALIGN_BOTH</Align>

<Pos>30</Pos>

<Size>8</Size>

</Y>

Поигрался с выключением-включением стандартных аддонов... пропала бОльшая часть сумки и панель с полосой варовской БП, зато вместо нее появились панели сталка и мага :) Хотя и включил потом все аддоны обратно

До перезахода чаром

ЗЫ. AddonDevReloader стоит... лень в нем че то переделывать. Так и вписываю вручную аддон, какой планирую часто перезапускать

ЗЫЫ. функция UpdList() по-моему не работает как надо. По крайней мере галки ставит на все аддоны, даже если они не запущены

Link to comment
Share on other sites

Quote:
Приделать еще сохранение состояния аддонов для каждого чара...

А оно надо? -)

>намба ван
Не-не, я не зря ту строчку закомментил. С ней-то, да, все нормально, но смысл вот в чем: например, аддон килкомпас отключает два стандртных. Как ловить их статус при включении килкомпас? Просто пробежать по табличке аддонов и выставить чекбоксы в соответствии с их (аддонов) состоянием, а также поменять значения в заголовке nOn( nOff ). По-моему, самый простой и беспроигрышный вариант. Но, чо-т у меня не ехает о_0

>Намба ту
Эх, здорово =) Я чего-то не додумался проверить эти параметры -(

Quote:
функция UpdList() по-моему не работает как надо.

Да, вполне вероятно. Есть идеи? =)

Я ни разу не программист, поэтому категорически "за!" критику конструктивную и познавательную =)
зы. Не, ну, с кнопкой -- это шок 0_0 xD
Link to comment
Share on other sites

Nikon wrote:
Если хочется знать загрузку всех аддонов, может просто по открытию списка обновлять состояние?

Естественно! Только так, и никак иначе!

Между прочим, причина, по которой AddonDevReloader, при старте игры, всегда показывает кнопку ВКЛЮЧЕНИЯ аддона (хотя, в коде написано, что если аддон включен, то нужно показать кнопку ВЫключения) в том, что игра загружает аддоны в алфавитном порядке. Т.о. "AddonDevReloader" загружается самым первым, и всегда видит, что целевой аддон не загружен (он загрузится через несколько секунд)... Поэтому, при старте игры, вообще нужно дать время игре загрузить аддоны, секунд 20-30, тогда список будет адекватным. Но ещё правильнее, конечно, обновлять при каждом открытии списка.
Link to comment
Share on other sites

Quote:
Только так, и никак иначе!

Как тогда быть с
Quote:
например, аддон килкомпас отключает два стандртных. Как ловить их статус при включении килкомпас?

?
Quote:
вообще нужно дать время игре загрузить аддоны, секунд 20-30, тогда список будет адекватным.

Совсем необязательно. Достаточно запрашивать статус по "EVENT_AVATAR_CREATED", список при этом будет актуальным. Я гарантирую 100%!!!11разраз xD
Например, заменить в AddonDevReloader кусок
Code:

if IsAddonLoaded() then
LoadButton:Show(false)
UnLoadButton:Show(true)
else
LoadButton:Show(true)
UnLoadButton:Show(false)
end

на
Code:

common.RegisterEventHandler(
function()
LoadButton:Show( not IsAddonLoaded() )
UnLoadButton:Show( IsAddonLoaded() )
end,
"EVENT_AVATAR_CREATED"
)

Кнопка отразит состояние целевого аддона.

2Vomitus, SLA
Да, выложить и переименовать не проблема. Проблема -- отсутствие решения глюка с галочками/кол-вом отключенных аддонов. Пока не могу найти такое, которое меня устраивает Т_Т.
Link to comment
Share on other sites

  • 1 month later...
  • 2 months later...

Несколько видоизменил.

3iBJWygZz6.jpg

Команда /am -- скрыть/показать.

"Загр. выбр"/"Выгр. выбр" -- загружает/выгружает помеченные аддоны.

"Загр. все"/"Выгр. все" -- загружает/выгружает все пользовательские аддоны (исключение: сам менеджер)

Каждые 5сек, если окно менеджера открыто, отправляет событие "U_EVENT_ADDON_MEM_USAGE_REQUEST", ответом на которого должно быть

Code:
userMods.SendEvent( "U_EVENT_ADDON_MEM_USAGE_RESPONSE", { sender = common.GetAddonName(), memUsage = gcinfo() } )

Нажатие по замочку отправляет событие "U_EVENT_TOGGLE_DND" -- таблицу с полями( target: string -- аддон-адресат, state: boolean)

"Сохранить" -- сохраняет состояния аддонов( вкл/выкл).

"Сброс" и ввод комментариев пока не доделал :(.

Баг-репорты / предложения по оптимизации (или куда копать) крайне приветствуются.

Link to comment
Share on other sites

Абаденно :)

1. Забыл написать как его вызывать. Я на автомате уже /aom набираю

2. Панель с чатом перекрывает акно аддона

3. Выкладывал бы уже в аддоны...

4. Счетчик addon.counter начинает тикать уже с загрузки аддона => если не успел открыть окно за 5 первых секунд - евент "U_EVENT_ADDON_MEM_USAGE_REQUEST" посылаться не будет :))

Децельная правка

Code:
if W( "MainPanel" ):IsVisible() and addon.counter >= addon.MEM_USAGE_REQUEST_DELAY then
NwhvvIqx3b97TT6.jpg
Link to comment
Share on other sites

1. Да, точно :( Вызывать /am. Поправил пред. пост.

2. Поднял форму до 8192. Теперь выше только горы xD

3. Рано :) У SLA были какие-то предложения о_0 Плюс сброс/комменты/что-то_еще надо доделать.

4. Угу, в последний момент скрыл панель по дефолту и ничего не проверил :( Засунул условие в самое начало ф-ии, чтоб ничо не считало вообще.

Link to comment
Share on other sites

ААААААААААААААА!!!!!!!!!!! Я чуть не описался, когда скриншот увидел!!!!!!! х))))))))))))))))))

На главную его, НА ГЛАВНУЮ !!!!!!!!одинодин =)

Правильно, что переименовал в "AddonManager", он именно так и должен называться. И на главной, такой аддон ОЧЕНЬ нужен. Особенно сейчас, когда заграница получила АО 1.1.02, и у них уже работают функции FromWString(), ToWString() и SendEvent(). Время AddonManager пришло!! :)

В течение какого часа напишу, какие были идеи. Но можно выкладывать и без них, всё можно будет доделать когда угодно.

Link to comment
Share on other sites

Guest Hommit

вместо чекбокса "показывать стандартные" мб сделать тоггл? чтоб показывать только стандартные или только юзерские, но не вместе

Link to comment
Share on other sites

А лучше, две закладки внизу окна, как в стандартных окнах АО.

P.S. Замочки должны быть все *разомкнуты*, по умолчанию. То есть, ни один аддон не "пристёгнут", на самом деле, пока пользователь не пристегнул какие-то из них вручную.

Возможно, с этим связана и вот эта ошибка (мне настрочило её раз тридцать. То ли по числу установленных аддонов, то ли по числу нажатий на "замочек" GuildGui1b):

Error: addon AddonManager: Error while running the chunk

Error: addon AddonManager: [string "mods/addons/addonmanager/scripts/scriptaddonmanager.lua"] :33: attempt to index field `?' (a nil value)

Error: addon AddonManager: func: ?, ?, line: -1, defined: C, line: -1, [c]

Error: addon AddonManager: func: ?, ?, line: 33, defined: Lua, line: 28, [string "mods/addons/addonmanager/scripts/scriptaddonmanager.lua"]

А может, это потому, что я попробовал перезагрузить AddonManager твоим предыдущим менеджером аддонов :) С первого раза не вышло, пришлось дописать в конце Init() такой код:

Code:
if avatar.IsExist() then

addon._R [ "EVENT_AVATAR_CREATED" ] ()

end

Кстати, нужно обязательно добавить английскую локализацию. Например, так:

Code:
en = {

 [ "Addon Manager" ]  = "Addon Manager",

 [ "Cancel" ]  = "Cancel",

 [ "Comment" ]  = "Comment",

 [ "Load All" ]  = "Load All",

 [ "Load Selected" ]  = "Load Selected",

 [ "Lock" ]  = "Lock",

 [ "Memory Usage" ]  = "Memory",

 [ "Name" ]  = "Name",

 [ "Reset" ]  = "Reset",

 [ "Save" ]  = "Save",

 [ "Show Default" ]  = "Show Built-In Addons",

 [ "Status" ]  = "State",

 [ "Unload All" ]  = "Unload All",

 [ "Unload Selected" ]  = "Unload Selected"

},

Только 4 кнопки в нижнем-левом углу нужно сделать длиннее, а то английский перевод чуть-чуть не влазит, а сокращать его как-то не получается. Кстати, в немецком переводе надписи будут тоже длинные, почти как в русском, наверное.

И ОБЯЗАТЕЛЬНО сделать проверку на наличие локализации. Иначе, у немцев и французов будет ПУСТО на всех кнопках и колонках :)) Вместо этого, пока нет немецкой и французсвой локализаций, немцам и французам нужно показывать *английскую* локализацию.

P.S. Блин, НЕ МОГУ НАИГРАТЬСЯ! xD

Link to comment
Share on other sites

Однозначно, Duvodas - МУЖИК! Аддон по дизайну и функциональности весьма и весьма впечатляет.

Блин, опять всю ночь спать не буду... Увидел что сделал ты и понял что мне над моим работать и работать. И работать, и еще раз работать )))

Link to comment
Share on other sites

+100500 :)

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

Link to comment
Share on other sites

Мои идеи насчёт этого аддона были такие:

1) Сделать "стандартный" внешний вид окна. -- Это уже сделано, в лучшем виде :)

2) Сделать чтобы приоритет MainForm был бы эдак 25000, чтобы окно всегда отображалось поверх любого поломавшегося аддона. -- Сейчас приоритет 8192, в принципе, хватает.

3) Использовать userMods.SendEvent() для общения с аддонами. -- Это уже отчасти реализовано. Насчёт остальных идей ивентов, напишу подробно:

Ивент "сообщить параметры" -- по этому специальному запросу, отправляемому менеджером аддонов один раз за сессию (где-то по "EVENT_AVATAR_CREATED" - когда все аддоны загружены), каждый аддон отправляет аддон-менеджеру свои характеристики. Это:

1) Описание аддона. Короткое, примерно как на стартовой странице UI9, для показа там, где у тебя сейчас "комментарий" :), а лучше, во всплывающем тултипе.

2) Список событий аддон-менеджера, на которые он умеет реагировать. Это очень важно. Это сразу подскажет, какие опции, и каким аддонам нужно показывать (например, сейчас "замеочек" показан для всех аддонов. А поддерживает его пока один только GuildGui1b R43 :), другим аддонам он не полагается - они его пока не поддерживают. То же самое с сокрытием/показом аддонов. И в будущем, этот список можно будет дополнять -- но обратная совместимость, при этом, будет сохраняться.

3) ?? Если потребуется, в будущем можно будет добавить новые параметры, не нарушив обратной совместимости.

Статус-Ивент "показать/скрыть конкретный аддон" -- Для сокрытия всех окон/кнопок аддона, чтобы он не мозолил глаза. В следующем ивенте напишу, зачем это нужно.

Кнопка-Ивент "показать главное окно" -- Аддон показывает своё главное окно (или окно настроек, если ему так надо, или просто выполнять какой-то код, если так нужно) - это хорошо не только для аддонов, у которых нет ни кнопки, ни окна. Самое главное, это нужно большим навороченным аддонам, все кнопки/окна которых СКРЫТЫ событием "показать/скрыть конкретный аддон". Дело в том, что это сейчас у нас всего 3 (?) кнопки, постоянно висящих на экране (GuildGui1b, DarkDPSMeter, LightDPS). А каждый уважающий себя аддон, по идее, должен рано или поздно, обзавестись такой кнопкой. Так вот, чтобы у нас в будущем таких кнопок не стало 30 штук, нужно уже сейчас придумать единый стандарт, и сделать ОДИН ЦЕНТР УПРАВЛЕНИЯ ПОЛЁТОВ, где можно было бы показывать/скрывать окна любых аддонов, не пользуясь кучей мелких кнопочек. Таким "центром управления", естественно, должен стать именно менеджер аддонов... В последнее время я уже подумывал сам взяться за написание такого "центра управления", так как тут нужно сделать не тяп-ляп, а всё серъёзно продумать. Нужен единый стандарт, качественный и расширяемый. Пока не увидел сегодня твой менеджер аддонов =) По-моему, тебе можно это доверить, думаю, ты отлично справишься =)

И ещё, отдельная кнопка "показать/скрыть все аддоны" -- посылает ивент "SCRIPT_TOGGLE_UI" с params.visible = true/false :) Понятно, зачем. С тех пор, как у нас отняли SCRIPT_TOGGLE_UI, очень не хватает способа делать "чистые" скриншоты без окон и кнопок аддонов. Кстати, это именно тот вариант, где лучше не изобретать новый "U_EVENT...", а отправлять старый-добрый "SCRIPT_TOGGLE_UI" -- во многих аддонах, почти всех, ещё остался код реакции на это событие. Ну а ниваловские аддоны, к счастью, не реагируют на события от userMods.SendEvent(), так что за них беспокоиться не приходится :)

Что ещё? Это не горит, но можно будет сделать сохранение настроек аддонов. То есть, сохранять в User.cfg все статусы -- включен/выключен, показан/скрыт, пристёгнут/отстёгнут. И при старте игры, рассылать эти сохранённые статусы аддонам (это все те же UI_TOGGLE_..., и т.д.), чтобы какие-то аддоны выключить, какие-то скрыть, и т.д.

Link to comment
Share on other sites

Guest mehael

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

SLA все достаточно хорошо описал.. единственное решить каким событием переменные\флаги будут посылаться в аддон, и как реализовать изменение настроек графически, получив их из конфига ..

ЗЫ: Спасибо за аддон :)

Link to comment
Share on other sites

Есть всего один баг - "Замочки" не работают. Совсем. В смысле, они не нажимаются.

В остальном - СУПЕР :) Замочки, по умолчанию, разомкнуты. Внизу добавились две закладки, и теперь аддоны не смешаны в одну кучу. Локализации приведены в порядок, кнопочки стали шире. Появилась кнопка Скрыть все аддоны. Появилось сохранение настроек. Всё просто супер! :)

Всё остальное можно будет доделать уже после релиза.

Почини "замочки", и.... НА ГЛАВНУЮ ЕГО, НА ГЛАВНУЮ!!! :)

AddonMamagerRelese.jpg
Link to comment
Share on other sites

Guest Pampuchka

что добавить хотелось бы, так это ручное переключение языка в аддоне. Все-таки хочется даже в EU версии видеть великий и могучий русский язык :)

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

By using our site you agree to the Terms of Use