Lafayette Posted January 22, 2014 Share Posted January 22, 2014 WillPanel Просмотр файла Аддон показывает заполнение пула воли, перед срабатыванием антистана. Желтая полоска под полоской решимости. Добавил logg Добавлено 22.01.2014 Категория Аддоны Quote Link to comment Share on other sites More sharing options...
Elza Posted January 22, 2014 Share Posted January 22, 2014 пришлось сдвинуть панель изменив координаты по y оси с 115 до 100 слишком низко и вопрос, после смерти показывается состояние пула как во время боя... это баг или пул реально заполнен? Quote Link to comment Share on other sites More sharing options...
logg Posted January 22, 2014 Share Posted January 22, 2014 Настройка цвета: файл WillPanel.lua Фон (вместо серого): wtWillPanel:SetBackgroundColor({ r = 0; g = 0; b = 0; a = 0.7 }) Цвет (вместо желтого): wtBar:SetBackgroundColor({ r = 1.0; g = 1.0; b = 0; a = 1.0 }) Настройка местоположения:Файл WillPanel.(WidgetButton).xdb <X> <Align>WIDGET_ALIGN_LOW</Align> <Size>180</Size> <Pos>135</Pos> </X> Pos 135 пикселей слева <Y> <Align>WIDGET_ALIGN_LOW</Align> <Size>12</Size> <Pos>115</Pos> </Y> Pos 115 пикселей сверху Quote Link to comment Share on other sites More sharing options...
logg Posted January 22, 2014 Share Posted January 22, 2014 Настраивал под себя, у меня поставлена панель сверху AOPanelMod r2.3 После смерти состояние пула не обнуляется в аддоне, можно было конечно запускать проверку по таймеру раз в секунду, для этого можно исправить одну строчку common.RegisterEventHandler( Will_Changed, "EVENT_UNIT_WILL_CHANGED") на common.RegisterEventHandler( Will_Changed({unitId=AvatarID}), "EVENT_SECOND_TIMER") хотя наверно лучше проверять при изменении состояния смерти и просто добавить строчку: common.RegisterEventHandler( Will_Changed, "EVENT_UNIT_DEAD_CHANGED") add: потестировал, смерть не влияет на пул 1 Quote Link to comment Share on other sites More sharing options...
Лютик Posted January 22, 2014 Share Posted January 22, 2014 желательно бы сделать полоску перемещаемой с помощью левой кнопки мыши и закрепление с помошью правой. Quote Link to comment Share on other sites More sharing options...
kompositor74 Posted January 22, 2014 Share Posted January 22, 2014 (edited) Было бы не плохо сделать подобный аддон и для решимости(сложность ран). или добавить в этот. А то не понятно сколько ждать когда упадут капли после боя... Спасибо) Edited January 22, 2014 by kompositor74 Quote Link to comment Share on other sites More sharing options...
Elza Posted January 23, 2014 Share Posted January 23, 2014 add: потестировал, смерть не влияет на пул Так, пул не обнуляется при смерти? правильно? Quote Link to comment Share on other sites More sharing options...
logg Posted January 23, 2014 Share Posted January 23, 2014 При загрузке аддона запрашивается текущее значение пула, если перезагрузить аддон после смерти, значение остается таким, каким и было. Quote Link to comment Share on other sites More sharing options...
Zaam Posted January 23, 2014 Share Posted January 23, 2014 {unitId=AvatarID}А почему не используешь этот фильтр в "EVENT_UNIT_WILL_CHANGED"? Зачем лишние вызовы обработчика? Кстати, положение бара можно вычислять динамически относительна морды персанажа. Кстати-2. В том месте находится бар прогресса прокачки покровителя. Quote Link to comment Share on other sites More sharing options...
bodia3092 Posted January 23, 2014 Share Posted January 23, 2014 (edited) хм... такой воросик, а спилить вместе полоски решимости и воли, нормально их обрисовать и всунуть под ноги персу можно ? оч неудобно коситься постоянно в угол туда... атак было бы все видно и все перед глазами) Edited January 23, 2014 by bodia3092 Quote Link to comment Share on other sites More sharing options...
logg Posted January 23, 2014 Share Posted January 23, 2014 А почему не используешь этот фильтр в "EVENT_UNIT_WILL_CHANGED"? Зачем лишние вызовы обработчика? Кстати, положение бара можно вычислять динамически относительна морды персанажа. Кстати-2. В том месте находится бар прогресса прокачки покровителя. EVENT_UNIT_WILL_CHANGED приходит при изменении пула при загрузке аддона вызываю Will_Changed({unitId=AvatarID}) чтобы получить текущий пул. подсовываю параметры с id аватара, поскольку функция работает с параметром unitId. Это нужно например для того, чтобы при перезагрузке аддона и некотором пуле, отображалось правильное значение, а не ноль. аддон с открытым кодом, каждый может настроить под себя, задача была: меньше букв - проще разобраться, как это работает. Quote Link to comment Share on other sites More sharing options...
Zaam Posted January 23, 2014 Share Posted January 23, 2014 Я имел ввиду: common.RegisterEventHandler(Will_Changed, "EVENT_UNIT_WILL_CHANGED", {unitId=AvatarID}) Quote Link to comment Share on other sites More sharing options...
logg Posted January 23, 2014 Share Posted January 23, 2014 можно и так, я пытался выяснить, можно ли получить пул противника, но так и не получил нормальных результатов Quote Link to comment Share on other sites More sharing options...
Lyushen Posted January 23, 2014 Share Posted January 23, 2014 добавьте пожалуйста функцию днд, для передвижения. Ибо самый простой аддон АОPanel сдвигает эту вашу полоску на решимость Quote Link to comment Share on other sites More sharing options...
logg Posted January 23, 2014 Share Posted January 23, 2014 прикреплял dnd, у меня не работает, я криворукий разраб) Quote Link to comment Share on other sites More sharing options...
blackmore80 Posted January 23, 2014 Share Posted January 23, 2014 можно и так, я пытался выяснить, можно ли получить пул противника, но так и не получил нормальных результатов AvatarTarget = Avatar.GetTarget() function Will_Changed(p) if p.unitId==AvatarTarget then local will = unit.GetWill( p.unitId ) wtText:SetVal("val",common.FormatInt( will, "%d" )) setPlacement(wtBar, {sizeX = 180 * will / 100}) end end Только еще проверять надо на nil цель аватара, иначе заспамит mods.txt Ну и виджет еще одни пририсовать для цели аватара P.S. кстати по пуллу ярости видимо печалька, в АПИ нет функций на это, только уже на саму сложность ран Quote Link to comment Share on other sites More sharing options...
blackmore80 Posted January 23, 2014 Share Posted January 23, 2014 прикреплял dnd, у меня не работает, я криворукий разраб) на фиг оно надо в аддонах такого типа? Quote Link to comment Share on other sites More sharing options...
logg Posted January 23, 2014 Share Posted January 23, 2014 AvatarTarget = Avatar.GetTarget() function Will_Changed(p) if p.unitId==AvatarTarget then local will = unit.GetWill( p.unitId ) wtText:SetVal("val",common.FormatInt( will, "%d" )) setPlacement(wtBar, {sizeX = 180 * will / 100}) end end Только еще проверять надо на nil цель аватара, иначе заспамит mods.txt Ну и виджет еще одни пририсовать для цели аватара P.S. кстати по пуллу ярости видимо печалька, в АПИ нет функций на это, только уже на саму сложность ран там не может быть nil Не AvatarTarget, а AvatarID, и получается после появления аватара, а эвент приходит с параметрами вот если бы там было avatar.GetTarget() тогда да #10: Есть возможность создание панельки решимости Quote Link to comment Share on other sites More sharing options...
blackmore80 Posted January 23, 2014 Share Posted January 23, 2014 Так я ж написал avatar.GetTarget() и поместил в переменную AvatarTarget зачем панелька решимости, она и так есть Quote Link to comment Share on other sites More sharing options...
blackmore80 Posted January 23, 2014 Share Posted January 23, 2014 function Will_Changed(p) if p.unitId==AvatarID then local will = unit.GetWill( p.unitId ) wtText:SetVal("val",common.FormatInt( will, "%d" )) setPlacement(wtBar, {sizeX = 180 * will / 100}) end if p.unitId==AvatarTarget then local will = unit.GetWill( p.unitId ) wtText:SetVal("val",common.FormatInt( will, "%d" )) setPlacement(wtBarT, {sizeX = 180 * will / 100}) end end Как то так, только надо в AvatarTarget поместить цель аватара и посоздавать виджеты для воли цели. Да, и проверку на то, что у аватара выбрана цель Quote Link to comment Share on other sites More sharing options...
Slashuur Posted January 23, 2014 Share Posted January 23, 2014 Нельзя узнать ничью волю, кроме аватара. unit.GetWill возвращает ноль Quote Link to comment Share on other sites More sharing options...
Zaam Posted January 23, 2014 Share Posted January 23, 2014 Да, и проверку на то, что у аватара выбрана цель Зачем так усложнять? if p.unitId==avatar.GetTarget() then будет достаточно. А вот чего там точно не хватает, так это EVENT_AVATAR_PRIMARY_TARGET_CHANGED Quote Link to comment Share on other sites More sharing options...
svalnix Posted January 23, 2014 Share Posted January 23, 2014 почему вместо решимости вставляется ваш бар? объясните, как сделать так, чтоб ваша полоска была ниже решимости? Quote Link to comment Share on other sites More sharing options...
logg Posted January 23, 2014 Share Posted January 23, 2014 код с панелью пула воли противника в таргете local AvatarID, wtBar, wtText, wtTargetBar function setPlacement( widget, place ) local p = widget:GetPlacementPlain() for k, v in place do p[k] = place[k] or v end widget:SetPlacementPlain(p) end function Will_Changed(p) if p.unitId==AvatarID then local will = unit.GetWill( p.unitId ) wtText:SetVal("val",common.FormatInt( will, "%d" )) setPlacement(wtBar, {sizeX = 180 * will / 100}) else Target_Changed() end end function Target_Changed() local target=avatar.GetTarget() if target and object.IsExist(target) and unit.IsPlayer(target) then wtTargetBar:Show(true) local will = unit.GetWill( target ) wtTargetBar:GetChildChecked( "Text", true ):SetVal("val",common.FormatInt( will, "%d" )) setPlacement(wtTargetBar:GetChildChecked( "Bar", true ), {sizeX = 180 * will / 100}) else wtTargetBar:Show(false) end end function Init() AvatarID=avatar.GetId() common.RegisterEventHandler( Will_Changed, "EVENT_UNIT_WILL_CHANGED") common.RegisterEventHandler( Target_Changed, "EVENT_AVATAR_PRIMARY_TARGET_CHANGED") local wtWillPanel=mainForm:GetChildChecked( "WillPanel", true ) wtWillPanel:SetBackgroundColor({ r = 0; g = 0; b = 0; a = 1 }) wtBar=wtWillPanel:GetChildChecked( "Bar", true ) wtBar:SetBackgroundColor({ r = 1.0; g = 1.0; b = 0; a = 1.0 }) wtText=wtWillPanel:GetChildChecked( "Text", true ) Will_Changed({unitId=AvatarID}) wtTargetBar = mainForm:CreateWidgetByDesc(wtWillPanel:GetWidgetDesc()) wtTargetBar:SetBackgroundColor({ r = 0; g = 0; b = 0; a = 1 }) wtTargetBar:GetChildChecked( "Bar", true ):SetBackgroundColor({ r = 1.0; g = 1.0; b = 0; a = 1.0 }) setPlacement(wtTargetBar, {posX = 395}) mainForm:AddChild(wtTargetBar) wtTargetBar:Show(false) end common.RegisterEventHandler(Init, "EVENT_AVATAR_CREATED") if avatar.IsExist() then Init() end правда может залипнуть при смерти аватара, таргет теряется, а виджет не пропадает это для тех, кто хочет проверить работает ли пул у противников, для тех кому лень проверять - не работает. Quote Link to comment Share on other sites More sharing options...
logg Posted January 23, 2014 Share Posted January 23, 2014 почему вместо решимости вставляется ваш бар? объясните, как сделать так, чтоб ваша полоска была ниже решимости? скачайте версию r1 хотя они вроде скрыты, тогда http://alloder.pro/topic/1522-willpanel/#entry29029 вместо 100 поставить 115 по Y Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Обязательна информация из \Personal\Logs\mods.txt для диагностики ошибки.
Иначе вам не помочь.
В игре включите в Меню → Интерфейс → Общие настройки → Запись ошибок пользовательских дополнений. Затем запустите аддон в игре.