Перейти к содержанию

Дайджесты за январь-февраль

Обновления гайдов и аддонов

Январь Февраль

Мониторинг серверов и редактор аддонов

Представляем вам две легенды. То, о чем можно было только мечтать, стало реальностью.

Мониторинг серверов Редактор аддонов

Подсказки из игры на вашем сайте

Теперь вы можете отображать сведения о внутриигровых элементах простым наведением курсора мыши.

Подробнее

Апдейтер аддонов

Представляем вам программу для автообновления аддонов и делимся подробностями.

Подробнее Скачать

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


ramirez

Рекомендуемые сообщения

Привет всем.

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

Фишки:

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

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

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

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

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

Алерты:

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

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

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

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

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

Установка:

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

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

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

Ссылка на комментарий
Поделиться на другие сайты

  • Ответов 54
  • Создана
  • Последний ответ

Топ авторов темы

Топ авторов темы

А .pak это разве аддон? Помоему раньше так делались моды.

Ссылка на комментарий
Поделиться на другие сайты

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

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

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

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

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

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

Ссылка на комментарий
Поделиться на другие сайты

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

Скрипт состоит из ~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 )

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

Ссылка на комментарий
Поделиться на другие сайты

Ясно :)

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

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

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

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

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

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

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

Ссылка на комментарий
Поделиться на другие сайты

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

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

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

Ссылка на комментарий
Поделиться на другие сайты

Такая же фигня с ними. Хотелось бы тоже узнать каких правильно аттачить

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

Ссылка на комментарий
Поделиться на другие сайты

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

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

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

Ссылка на комментарий
Поделиться на другие сайты

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

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

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

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

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


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

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

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

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

Да, все 3D.
Ссылка на комментарий
Поделиться на другие сайты

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

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

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


Гм, а AddonManager разве не запоминает выключенных аддонов?
Я пользуюсь своим Addon reloader, там выключил галочку один раз и все.
Ссылка на комментарий
Поделиться на другие сайты

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

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

Ссылка на комментарий
Поделиться на другие сайты

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

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

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>?
Ссылка на комментарий
Поделиться на другие сайты

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, которые тупо не работают.
Ссылка на комментарий
Поделиться на другие сайты

Скрин не доставляет. Проще и быстрее поставить и посмотреть самому.

Allods_110213_223025.jpg
Ссылка на комментарий
Поделиться на другие сайты

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

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

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

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

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

Почти все перечисленные бессмысленны. Что такое и откуда взялся "свой исходящий дамаг/хил"?
Ссылка на комментарий
Поделиться на другие сайты

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

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

С пробелами и извращаюсь, но в начале текста они игнорируются/обрезаются :(

Ссылка на комментарий
Поделиться на другие сайты

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

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

Нет такого способа. Аддон должен помнить, что куда повесил. Из чего следует, что такой аддон может быть только один, либо аддоны должны активно держать друг друга в курсе.
Ссылка на комментарий
Поделиться на другие сайты

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

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

Ссылка на комментарий
Поделиться на другие сайты

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...

Важная информация

Пользуясь сайтом, вы принимаете Условия использования