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

Results of the competition "Allods and Life"

Stories, that warm souls.

Read More

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

WillPanel


Lafayette
 Share

Recommended Posts

пришлось сдвинуть панель изменив координаты по y оси с 115 до 100

слишком низко

и вопрос, после смерти показывается состояние пула как во время боя... это баг или пул реально заполнен?

Link to comment
Share on other sites

Настройка цвета:

файл 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 пикселей сверху
Link to comment
Share on other sites

Настраивал под себя, у меня поставлена панель сверху 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: потестировал, смерть не влияет на пул

  • Upvote 1
Link to comment
Share on other sites

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

 

Спасибо)

Edited by kompositor74
Link to comment
Share on other sites

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

Link to comment
Share on other sites

{unitId=AvatarID}
А почему не используешь этот фильтр в "EVENT_UNIT_WILL_CHANGED"? Зачем лишние вызовы обработчика?

Кстати, положение бара можно вычислять динамически относительна морды персанажа.

Кстати-2. В том месте находится бар прогресса прокачки покровителя.

Link to comment
Share on other sites

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

Edited by bodia3092
Link to comment
Share on other sites

А почему не используешь этот фильтр в "EVENT_UNIT_WILL_CHANGED"? Зачем лишние вызовы обработчика?

Кстати, положение бара можно вычислять динамически относительна морды персанажа.

Кстати-2. В том месте находится бар прогресса прокачки покровителя.

EVENT_UNIT_WILL_CHANGED приходит при изменении пула

при загрузке аддона вызываю Will_Changed({unitId=AvatarID}) чтобы получить текущий пул.

подсовываю параметры с id аватара, поскольку функция работает с параметром unitId.

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

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

Link to comment
Share on other sites

можно и так, я пытался выяснить, можно ли получить пул противника, но так и не получил нормальных результатов

Link to comment
Share on other sites

можно и так, я пытался выяснить, можно ли получить пул противника, но так и не получил нормальных результатов

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. кстати по пуллу ярости видимо печалька, в АПИ нет функций на это, только уже на саму сложность ран

 

Link to comment
Share on other sites

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: Есть возможность создание панельки решимости

Link to comment
Share on other sites



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 поместить цель аватара и посоздавать виджеты для воли цели. Да, и проверку на то, что у аватара выбрана цель

Link to comment
Share on other sites

Да, и проверку на то, что у аватара выбрана цель

Зачем так усложнять?

 

if p.unitId==avatar.GetTarget() then

будет достаточно. А вот чего там точно не хватает, так это EVENT_AVATAR_PRIMARY_TARGET_CHANGED

Link to comment
Share on other sites

код с панелью пула воли противника в таргете
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

 

правда может залипнуть при смерти аватара, таргет теряется, а виджет не пропадает

это для тех, кто хочет проверить работает ли пул у противников, для тех кому лень проверять - не работает.

Link to comment
Share on other sites

почему вместо решимости вставляется ваш бар? объясните, как сделать так, чтоб ваша полоска была ниже решимости?

скачайте версию r1 хотя они вроде скрыты, тогда 

http://alloder.pro/topic/1522-willpanel/#entry29029

вместо 100 поставить 115 по Y

Link to comment
Share on other sites

ВНИМАНИЕ!
Обязательна информация из \Personal\Logs\mods.txt для диагностики ошибки.
Иначе вам не помочь.
В игре включите в Меню → Интерфейс → Общие настройки → Запись ошибок пользовательских дополнений. Затем запустите аддон в игре.
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