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

Servers monitoring and the Addons Editor

We present you two legends. All dreams come true.

Servers monitoring The Addons Editor

Digest April

We talk about what was done and updated in the past month. We help keep abreast of events.

Read more

Game tooltips

Tooltips provide a way for 3rd party fansites and extensions to display detailed information on mouseover.

Read more

Вот аддон, показывающий весь урон в мире


ramirez
 Share

Recommended Posts

Привет всем.

Некоторое время назад меня реально достал корявый и назойливый отлетающий урон из стандартной поставки (ContextDamageVisualization), и после продолжительных экспериментов с widget3D, эффектами и Lua у меня получился такой странный аддон, который показывает все дамаги и весь хил на любых юнитах в радиусе видимости, включая себя любимого. И при этом не тормозит.

Фишки:

- Прямо в игровой сцене от юнитов ненавязчиво отлетают циферки. Похоже на Borderlands, если кто играл.

- Аналогично показывает криты, промахи, увороты, блоки, парирования и т.п.

- Все юниты делятся на два типа: друзья и мишени. В соответствии с разделением циферки и буковки красятся в разные цвета.

- Красиво показывает получаемый за что угодно опыт. =)

- Также показывает получаемую репутацию и доблесть.

Алерты:

- Надо отключить самому стандартный аддон ContextDamageVisualization. Например, воспользовавшись аддон-менеджером.

- Хил врагов показывается странным желтым цветом, пока не придумал ничего более путного. Буду рад разумным советам.

- Не локализован. Все надписи на английском. Вроде бы...

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

- Пока что в рейде тормозит как @#%$! =)

Установка:

Берем приложенный пак и кладем его в data/Mods/Addons/. Ничего распаковывать не надо, все работает прямо так.

Велкам хватать и тестировать. =)

P.S.: Да, забыл совсем. Достаточно сильно поднабрался экспертизы в этом деле, но писать учебники обо всем нет ни времени, ни желания. Тем не менее, отвечу на любые вопросы касательно виджетов, API, скриптов и прочего, относящегося непосредственно к разработке аддонов. Про метатаблицы в Lua, тайны использования WidgetLayerAnimatedTexture, координаты юнитов и т.д. Если возникнут, конечно.

Link to comment
Share on other sites

  • Replies 54
  • Created
  • Last Reply

Top Posters In This Topic

dentatar, с АО2.0 аддоны можно паковать. Правда хз, будет ли такой пак работать в нерусской версии.

Файлик кидать прямо в Mods\Addons

Афигенно. Ваще балдею :)

1.Правда не понятно чего и по какому принципу куда отлетает

2. Эти надписи "Crit", "Dodge" и тп не успеваешь связать ни с каким числом(когда удары часто проходят): просто вылетело и все. На боссах, наверно, такой фонтан будет...

А можно некомпилированую версию Script.luac выложить?

Link to comment
Share on other sites

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

Скрипт состоит из ~1400 строчек метатабличных заморочек и вспомогательных библиотек. Готовым тяжелым кодом делиться не хочется. Самое безобидное в нем выглядит примерно так:

Code:

Class( "expNotifier", UIBasicElement() )

function expNotifier:Init()

self.expNotesDispatcher = expNote():Init( self )

self.hash = {}

return UIBasicElement.Init( self )

end

function expNotifier:Get()

local wtNote, fresh = widgetfactory:Get( "Exp" )

if fresh then widgetNote( wtNote ) end

self.hash [ wtNote:GetInstanceId() ]  = wtNote

return wtNote

end

function expNotifier:Store( wtNote )

local instanceId = wtNote:GetInstanceId()

if self.hash [ instanceId ]  then

wtNote:Assign()

widgetfactory:Store( wtNote )

self.hash [ instanceId ]  = nil

end

end

function expNotifier:GetActiveEventHandlers()

return {

 [ "EVENT_AVATAR_EXPERIENCE_GAINED" ]  = function( event )

self.expNotesDispatcher:Dispatch( event )

end,

 [ "SCRIPT_EFFECT_SEQUENCE_FINISHED" ]  = function( event )

if event.effectType == ET_MOVE then

local widget = event.wtOwner

if self.hash [ widget:GetInstanceId() ]  then

self:Store( widgetcore( widget ) )

end

end

end

}

end

Global( "expDispatcher", expNotifier() )

expDispatcher:Init():Activate( true )

Не думаю, что будет много пользы, если выложу.

Link to comment
Share on other sites

Ясно :)

Проверить бы его в тяжелых условиях типа Арены или ГД

Стандартный вроде не весь дамаг показывает, а только аватара + пета. А тут такая куча циферок будет летать

Постоял у новоградской арены. Бывает - числа/надписи только вылетают и сразу в землю уходят

А если чар стоит на противоположном краю арены - у него практически все надписи в земле

И наоборот: если чар слишком близко к камере, не видно всех чисел - частично летают за пределами экрана

А можно разный урон/хил разным цветом показывать? Ну там, половинный, криты, парирования. Показвать/нет чужой урон-хил, манарасход (получил-отобрали)

И вообще было бы здорово с настройками всего этого

Link to comment
Share on other sites

Звучит очень и очень впечатляюще.

Завтра вероятно проверю лагучесть.

Из вопросов - ты пробовал аттачить виджеты в 2Д? У меня какая-то проблема - аттачу виджеты, а при смене таргета или при аттаче к тому же самому объекту другого вижета предыдущий виджет отваливается. Поэтому я на смену таргета даже проверку вставил...

Link to comment
Share on other sites

Поимел немного наглости, чуть модифицировал аддон (надеюсь Ramirez не сильно обидится):

1. Русифицировал надписи (а зачем а текстовиках перед текстом по пробелу стоит?)

2. При загрузке выгружается стандартный "ContextDamageVisualization" (неудобно каждый раз его искать и отключать руками)

Link to comment
Share on other sites

Quote:
Постоял у новоградской арены.

Да, бывает. У разных юнитов точка привязки 3D виджета на разной высоте висит. И у 3D виджета есть ближний и дальний предел, за которыми он перестает слушаться законов перспективы и сохраняет свой размер постоянным относительно диагонали экрана монитора. все это регулируется, но я подбирал настройки для средней и близкой дистанции. У всяких там клещей и прочей мелюзги это видно сильнее.

Quote:
А можно разный урон/хил разным цветом показывать?

Да, я и сам хочу настройки сделать с галочками. И добавить всякие штуки, типаа полученной доблести/репы, абсорбов/резистов и прочих барьеров. Но ведь эти настройки надо откуда-то звать, а еще одну кнопку вешать на экран на постоянную прописку что-то не хочется.
Link to comment
Share on other sites

Quote:
ты пробовал аттачить виджеты в 2Д?


Пробовал. Все нормально работает, но некрасиво. С 2D виджетами надо просто учитывать, что больше одного повесить на объект нельзя. Поэтому надо скриптом помнить, что и на кого повесил, чтоб аккуратно убирать/заменять когда надо.

Quote:
Хотелось бы тоже узнать каких правильно аттачить

А чего, там же проще намного, чем с 3D. object.AttachWidget2D прицепляет, object.DetachWidget2D отцепляет. Второй вызов object.AttachWidget2D скидывает предыдущий прицепленный.

Quote:
Но в этом аддоне, по моему, все виджеты 3D

Да, все 3D.
Link to comment
Share on other sites

Quote:
1. Русифицировал надписи (а зачем а текстовиках перед текстом по пробелу стоит?)

Эти тексты могут цепочкой идти, тогда между ними нужны пробелы.

Quote:
2. При загрузке выгружается стандартный "ContextDamageVisualization" (неудобно каждый раз его искать и отключать руками)


Гм, а AddonManager разве не запоминает выключенных аддонов?
Я пользуюсь своим Addon reloader, там выключил галочку один раз и все.
Link to comment
Share on other sites

Менеджер не у всех стоит. Хотя, у кого не стоит менеджер, наверно и этот аддон не поставят

PS. По поводу пробелов: Есть какой-нибудь способ табуляции выводимого текста? хтмл-подобный тэг или чего другое

Link to comment
Share on other sites

Quote:
, что больше одного повесить на объект нельзя

Вот в этом и вся гадость. Какой то из стандартных (а может и не 1 из них) тоже вешает 2D виджеты. Никакой проверки есть/нет виджет на обьекте не существует. Приходится извращаться с постоянным перевешиванием - при смене таргета они могут сваливаться "самопроизвольно", после смерти висеть над невидимой тушкой обьекта или нормально исчезать
Может есть какой то способ определить висит виджет на обьекте или нет?
Link to comment
Share on other sites

Quote:
...отвечу на любые вопросы касательно виджетов...

Имеется WidgetTextView с <Sizing>WIDGET_SIZING_INTERNAL</Sizing> и <maxWidth>256</maxWidth>. Вставляю строку, состоящую из 100500 символов. Как ограничить высоту виджета, например, 5 линиями-строками? Т.е., чтобы его размер был:
256 X { ( 2 + 4 ) * lineSpacing + 5 * fontsize }.
Значение тэга <size> в Placement'е не будет этим самым ограничителем, или при Sizing = WIDGET_SIZING_INTERNAL игнорируется <size>?
Link to comment
Share on other sites

Quote:
Имеется WidgetTextView с <Sizing>WIDGET_SIZING_INTERNAL</Sizing> и <maxWidth>256</maxWidth>.


Ограничение можно задать только для ширины WidgetTextView. Для высоты разрабы не стали себя утруждать. Так что надо стараться не выводить 100500 текста. Либо всегда выводить 5 строчек без переносов. Да, при WIDGET_SIZING_INTERNAL и WIDGET_SIZING_CHILDREN <size> соответствующей оси игнорируется, можно его в .xdb выставить в 0, или вообще стереть.

Можно поизголяться в скрипте, выставить через SetPlacementPlain WIDGET_SIZING_INTERNAL, зарядить текст, потом получить размер виджета через GetRealRect и widgetsSystem:GetPosConverterParams(), ограничить его math.min( widgetSize, maxSize ) и выставить насильно опять через SetPlacementPlain с WIDGET_SIZING_DEFAULT. Но оно может глючить и ругаться, так как я нарывался на некоторые сочетания параметров placement, которые тупо не работают.
Link to comment
Share on other sites

Quote:
Но ведь эти настройки надо откуда-то звать, а еще одну кнопку вешать на экран на постоянную прописку что-то не хочется.

не вижу никакой проблемы в маленькой аккуратной (круглой или квадратной) кнопке
в интерфейсе достаточно дырок, куда можно напихать свободно 100500 кнопок

имхо должны быть настройки:
свой входящий/исходящий дамаг/хил (4 галки), тоже отдельно для согрупников (4 галки), для рейда(4), для всех своей фракции(4) - последовательно включают в себя друг друга, для всех вражеской фракци(4), вообще для всех(4)
(о_О)

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

Quote:
хотя, некоторые галки наверно бессмысленны

Почти все перечисленные бессмысленны. Что такое и откуда взялся "свой исходящий дамаг/хил"?
Link to comment
Share on other sites

Quote:
PS. По поводу пробелов: Есть какой-нибудь способ табуляции выводимого текста?

Пряморукого способа нет. Разрабы игнорируют все спец-символы, а свойства для табуляции не предоставили. Только для выделения абзацев. Можно извращаться с предзаготовленными ValuedText'ами, в которых пробивать необходимое количество пробелов, но это неэффективно.
Link to comment
Share on other sites

Quote:
Какой то из стандартных (а может и не 1 из них) тоже вешает 2D виджеты.

Это ContextDamageVisualization. Выключить, и все заработает.
Quote:
Может есть какой то способ определить висит виджет на обьекте или нет?

Нет такого способа. Аддон должен помнить, что куда повесил. Из чего следует, что такой аддон может быть только один, либо аддоны должны активно держать друг друга в курсе.
Link to comment
Share on other sites

ну, иногда может быть интересно, сколько и кому нахили/надамажил конкретно ты...

хотя, наверное, весь исходящий не имеет смысла так как поглощается входящим. чот я потупил.

Link to comment
Share on other sites

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  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