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

Интерфейсные аддоны (Инструкция)


Guest mehael
 Share

Recommended Posts

Вы хотели поменять текстуры стандартного интерфейса? Скрыть ненужные текстовые строки\кнопки стандартного аддона из своего? Или вы хотели переместить какие-либо элементы и добавить своей, более подробной информации?

allods_modding_by_eliskan-d374o4f.png

Что-нибудь такое( дазайн deaderaco )

ao415.jpg

(Ciuine)

Тогда мы идем к вам!

:) Для того чтобы получить ссылку на виджет вам потребуется немного поплясать )

Вся ресурсная иерархия ао - дети детей stateMainForm.. таким образом код:

Code:
getAllChildrensOfWidget("", stateMainForm)

---------------

function getAllChildrensOfWidget(tab,widget)

local childrens = widget:GetNamedChildren()

for _, w in childrens do

local tab1 = tab .. ":" .. w:GetName()

LogInfo (tab1)

getAllChildrensOfWidget(tab1,w)

end

end

(Рекурсия от icreator)

Выведет в mods.txt имена всех MainForm и их детей .. (АО может зависнуть на пару секунд)

Узнав имя нужного виджета и его родителей, можно получить ссылку на виджет в переменную:

Code:
local wtMainForm = stateMainForm:GetChildChecked("LagMeter", false )

local wtMainPanel = wtMainForm:GetChildChecked("Frame", false )

wtMainPanel:Show(false)

вернет нам в переменную wtMainForm главную форму (mainForm) стандартного аддона LagMeter, а в wtMainPanel - главную панель аддона .. с которой мы можем делать все что душе угодно: менять положение, текстуру, получить ссылку на других детей.. проверять - виден тот или иной элемент или нет(!) и юзать все-все функции для widget..

PROFIT?

[add]

Quote:
Duvodas:

"Ответ Коммандора:

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

[add]

Скрытие элементов аддона по Alt-Z/Esc от Ciuine( аддон WhisperWindow) в прикрепленном файле.

[add]

Внимание! К сожалению имена виджетов не совпадают в каждой из локализаций

Link to comment
Share on other sites

  • Replies 66
  • Created
  • Last Reply

Top Posters In This Topic

Guest Kratkiy

в аддонах ни ничего ни понимаю, для меня это непонятные буковки и циферки)

а вопрос такой, вот например есть у меня текстуры, как мне их в игру то вставить?

Link to comment
Share on other sites

mehael красава незря я пост создавал ! и сразу к делу можно ли сделать у шамов чтоб инергия пета перетаскивалась ?

Link to comment
Share on other sites

Это, конечно, здорово, но меня смущает вот это из пользовательского соглашения:

Quote:

Ограничения для Пользователей Игры:

18. Пользователям запрещен взлом/попытка взлома программных компонентов и/или перехват данных, поступающих к серверу или от сервера. Любое модифицирование, изменение, декомпиляция, продажа, распространение модифицированных материалов Игры целиком либо по частям. Использование программных ошибок, изменения программного кода, получение несанкционированного доступа к серверу и базе данных Игры. В отдельных случаях Оператор имеет право немедленно приостановить доступ Пользователя к Игре и обратиться в органы внутренних дел для рассмотрения в действиях нарушителя наличия или отсутствия состава преступлений, предусмотренных Уголовным Кодексом Российской Федерации или иными аналогичными законами стран — мест пребывания нарушителя.

Не уверен, подпадет ли

Quote:
Вы хотели поменять текстуры стандартного интерфейса? Скрыть ненужные текстовые строки\кнопки стандартного аддона из своего? Или вы хотели переместить какие-либо элементы?

под этот пункт.

Link to comment
Share on other sites

I have to agree with Duvodas on this. Where would this lie under the ToS? Because I just ran this code as a test...

Code:
local wtMainForm = stateMainForm:GetChildChecked("MainAddonMainForm", false )

local children = wtMainForm:GetNamedChildren()

for i = 0, GetTableSize( children ) - 1 do

local wtChild = children    

local name = wtChild:GetName()

LogInfo(name )

end

children = wtMainForm:GetChildChecked("WatermarkRight", false )

children:Show(false)

And it turned off something I'm pretty sure they don't want you to turn off.

Edit: By the way the list in the NA version is not as pretty as just saying "LagMeter"... 90% of our MainForm's are named.. MainForm.

Easier code:

Code:
local children = stateMainForm:GetNamedChildren()

for i = 0, GetTableSize( children ) - 1 do

local wtChild = children    

local name = wtChild:GetName()

local children2 = wtChild:GetNamedChildren()

for j = 0, GetTableSize( children2 ) - 1 do

local wtChild = children2 [j] 

local name2 = wtChild:GetName()

LogInfo(i.." " .. name, " "..j..": " .. name2)

end

end

Link to comment
Share on other sites

Если

Quote:
Вы хотели поменять текстуры стандартного интерфейса? Скрыть ненужные текстовые строки\кнопки стандартного аддона из своего? Или вы хотели переместить какие-либо элементы?

возможно противоречит соглашению .. тогда

Quote:
Игра "Аллоды Онлайн" позволяет игрокам создавать и использовать собственные дополнения ("моды", "аддоны") пользовательского интерфейса. Дополнения поддерживаются только для режима "внутри игры". Т.е. нельзя изменить функциональность, например, главного меню игры или экранов создания и выбора персонажа. Пользовательские дополнения будут работать только после выбора персонажа и захода им в игру.

возможно соглашается?

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

Link to comment
Share on other sites

Что я нашел то о_О

Quote:
Пользовательские дополнения совершенно независимы от оригинальных. Они не могут пользоваться никакими ресурсами оригинальной игры (кроме специально оговоренных) и должны содержать полностью все данные и функциональность. Все пользовательские дополнения должны быть созданы либо "с нуля", либо на основе других пользовательских дополнений и/или отдельных элементов (данных и скриптов). Изменять функциональность и внешний вид оригинальных интерфейсов из пользовательских дополнений нельзя.

однако ниже

Quote:
Для предотвращения конфликтов между оригинальными интерфейсами и пользовательскими дополнениями предоставляется возможность выборочного включения/выключения как тех, так и других из пользовательских дополнений (скриптов).

?? ..

.. или это писалось очень давно и не в силе, или где-то есть встроенный AddonManager??

Link to comment
Share on other sites

I don't know, I spoke to a GM about it on my end and like I said, "they" feel if it doesn't cause any malicious harm then it works out.

Immediately after that I installed the mechanics into PLATES for the movement of BuffInfo. :P

Link to comment
Share on other sites

большое спасибо за находку!

но не все так гладко. например виджет аукциона.

например я его нахожу так:

Code:
Global( "wtSysAuction", nil )

...

local childrens = stateMainForm:GetNamedChildren()

for _, w in childrens do

local name = w:GetName()

if name == "ContextAuction" then

wtSysAuction = w

LogInfo(name," enabled:",w:IsEnabled(), " visible:",w:IsVisible() )

---w:Enable(true)

---w:Show(true)

else

LogInfo(name )

end

end

но метод Show не работает пока я ручками не подойду к НПС и не открою аукцион через диалог. После того как аукцион открыт - w:Show(true/false) работает правильно - показывает или скрывает окно. а я хотела бы без общения с НПС открыть окно аукциона автомтически - как только мой персонаж встал рядом с аукционом. как это сделать? и почему окно аукциона не показывается с помощью :Show(true)?

Link to comment
Share on other sites

посмотреть все вложенные можно так:

Code:
function getAllChildrensOfWidget(tab,widget)

local childrens = widget:GetNamedChildren()

for _, w in childrens do

local tab1 = tab .. ":" .. w:GetName()

LogInfo (tab1)

getAllChildrensOfWidget(tab1,w)

end

end

Link to comment
Share on other sites

Quote:
а я хотела бы без общения с НПС открыть окно аукциона автомтически - как только мой персонаж встал рядом с аукционом. как это сделать?

Что-то мне подсказывает - никак.. Быстро просмотрев код аукциона, (насколько понял) могу сказать, что данные о лотах приходят по каким-то закрытым функциям\событиям.. а " открыть окно аукциона автомтически " к сожалению входит в категорию запрещенных автоматизаций.. да?
Quote:
и почему окно аукциона не показывается с помощью :Show(true)?

Код старта аукциона :)..
Code:
--------------------------------------------------------------------------------
function GetWidgets()
wtMain = mainForm:GetChildChecked( "Main", false )
wtMain:Show( false )

local ClosePanel = wtMain:GetChildChecked( "Close", false )
wtClose = ClosePanel:GetChildChecked( "CornerCross", false )

moneyCurrent = money:CreateFrom( wtMain:GetChildChecked( "Money", false ), "moneyCurrent" )

local widget = wtMain:GetChildChecked( "Header", false )
widget = widget:GetChildChecked( "HeaderText", false )
widget:SetVal( "window_header", GetText( "AuctionHeaderLabel" ) )
end
--------------------------------------------------------------------------------
похоже нужно еще wtMain:Show( true ) заюзать.. да и все-все элементики(тысячи их) похоже нужно проявлять ручками.
PS. к сожалению сейчас технические работы и я не могу быть полностью уверенным в выше сказанном ><
Link to comment
Share on other sites

Кстати, состояние видимости какой-нибудь стандартной формы/панели можно использовать в качестве маркера отключения интерфейса/перехода в главное меню. Правда, отслеживать это состояние возможно лишь по EVENT_SECOND_TIMER, я так понимаю. Это не есть хорошо. :(

Link to comment
Share on other sites

Тоже об этом думал..

Вариант - посылать из addonManager-а событие на скрытие... а EVENT_SECOND_TIMER в одном аддоне мы потерпим?

Link to comment
Share on other sites

Вопрос:

Quote:
Вот тема. Хотелось бы получить официальный комментарий. Интересует, разумеется, правомерность модификаций таким образом. Не противоречит ли это пользовательскому соглашению?

Ответ Коммандора:

Quote:
С нашей стороны в этом никакого криминала нет. Хотите работать с позиционированием и текстурами окон - пожалуйста. Но если благие намерения приведут к чему-нибудь зловредному и разрушающему игру, вы вынудите нас отреагировать.
Link to comment
Share on other sites

Да, разумеется, можно и так все организовать. Но в таком случае понадобится, чтобы каждый пользователь, желающий, чтобы аддоны прятались, должен будет устанавливать АМ, который, может быть, ему и не нужен вовсе о_0 Не хотелось бы что-то навязывать.

Кроме того, нужно как-то решить проблему одноименности форм в NA версии. Можно, конечно, перебирать детей каждой формы и искать совпадение, но это как-то "топорно".

Link to comment
Share on other sites

Моды покруче были :)

А если так сильно хочется шкурок на ао.. надо найти художников и работать вместе.. или написать очень простую пошаговую инструкцию.

и надеюсь что SLA покинул нас не надолго...

Link to comment
Share on other sites

Ура! :)))) Наконец-то, добрались до модификации встроенных аддонов! :))

Quote:
и надеюсь что SLA покинул нас не надолго...

Конечно ненадолго ;) Завтра буду читать весь форум, и отвечу на все сообщения в личке.

Link to comment
Share on other sites

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

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

Code:
local wtPlates = stateMainForm:GetChildChecked("Plates", false)

local wtParty = wtPlates:GetChildChecked("Party", false)

wtParty:Show(true)

local shift = 20

local p = wtParty:GetPlacementPlain()

--- изначально там было:

--- exObj("p", p)

---.alignY = 1{number}

---.sizingY = 0{number}

---.highPosY = 35{number}

---.sizeX = 220{number}

---.sizeY = 345{number}

---.alignX = 0{number}

---.posX = 10{number}

---.sizingX = 0{number}

---.posY = 0{number}

---.highPosX = 0{number}

--- делаем выравнивание по вехнему краю и смещаем и делаем шире чтобы влезли все панельки группы

p.sizeY = 325 + 5*shift

p.alignY = 0

p.highPosY = 0

p.posY = 310

wtParty:SetPlacementPlain(p)

--- теперь раздвинем сами панельки согрупников

for i = 1, 5 do

local wtMember = wtParty:GetChildChecked("Member0".. i, false)

---exObj("place"..i, wtMember:GetPlacementPlain() )

local p = wtMember:GetPlacementPlain()

p.alignY = 0

p.highPosY = 0

p.posY = (i-1)*(68+shift) --- изначально сдвиг был 68

wtMember:SetPlacementPlain(p)

wtMember:Show(true)

end

а вот в панельках бафов бардак ((

Code:
local w = stateMainForm:GetChildChecked("BuffInfoParty", false)

---w:Show(true)

local p = w:GetPlacementPlain()

---exObj("buff place", p )

---Info: addon TargetManager(EDS): buff place.alignY = 0{number}

---Info: addon TargetManager(EDS): buff place.sizingY = 0{number}

---Info: addon TargetManager(EDS): buff place.highPosY = 0{number}

---Info: addon TargetManager(EDS): buff place.sizeX = 200{number}

---Info: addon TargetManager(EDS): buff place.sizeY = 360{number}

---Info: addon TargetManager(EDS): buff place.alignX = 0{number}

---Info: addon TargetManager(EDS): buff place.posX = 232{number}

---Info: addon TargetManager(EDS): buff place.sizingX = 0{number}

---Info: addon TargetManager(EDS): buff place.posY = 320{number}

---Info: addon TargetManager(EDS): buff place.highPosX = 0{number}

p.sizeY = 310 + 5*shift

p.posY = 300

p.alignY = 0

p.highPosY = 0

w:SetPlacementPlain(p)

---exObj("buff party names", w:GetNamedChildren() )

for i=0,4 do

local wtMember = w:GetNamedChildren()  

local p = wtMember:GetPlacementPlain()

exObj("buff ["..i.."] p", p)

--- тут у них каждый элемент по своему сдинут и не по списку номеров

p.posY = (i-1)*(68+shift)

wtMember:SetPlacementPlain(p)

wtMember:Show(true)

end

на самом деле каждая панелька каждый раз меняет свои align например так:

Code:
Info: addon TargetManager(EDS): change buff [1] p.alignY = 2{number}

Info: addon TargetManager(EDS): change buff [1] p.sizingY = 0{number}

Info: addon TargetManager(EDS): change buff [1] p.highPosY = 0{number}

Info: addon TargetManager(EDS): change buff [1] p.sizeX = 200{number}

Info: addon TargetManager(EDS): change buff [1] p.sizeY = 55.599987030029{number}

Info: addon TargetManager(EDS): change buff [1] p.alignX = 3{number}

Info: addon TargetManager(EDS): change buff [1] p.posX = 0{number}

Info: addon TargetManager(EDS): change buff [1] p.sizingX = 0{number}

Info: addon TargetManager(EDS): change buff [1] p.posY = -69{number}

Info: addon TargetManager(EDS): change buff [1] p.highPosX = 0{number}

при изменении группы ее положение тут же меняется и она уже отображет бафы другого согрупника:

Code:
Info: addon TargetManager(EDS): change buff [1] p.alignY = 2{number}

Info: addon TargetManager(EDS): change buff [1] p.sizingY = 0{number}

Info: addon TargetManager(EDS): change buff [1] p.highPosY = 0{number}

Info: addon TargetManager(EDS): change buff [1] p.sizeX = 200{number}

Info: addon TargetManager(EDS): change buff [1] p.sizeY = 55.599987030029{number}

Info: addon TargetManager(EDS): change buff [1] p.alignX = 3{number}

Info: addon TargetManager(EDS): change buff [1] p.posX = 0{number}

Info: addon TargetManager(EDS): change buff [1] p.sizingX = 0{number}

Info: addon TargetManager(EDS): change buff [1] p.posY = -138{number}

Info: addon TargetManager(EDS): change buff [1] p.highPosX = 0{number}

как быть не знаю

Link to comment
Share on other sites

Старый код.. однако подозреваю что он может быть слишком старым :(

Code:
-- Set Placement

for n = 1, 5 do -- согрупники

for i = 1, 6 do -- количество бафов

local strBuffNumber = string.format ( "%02d", i )

local wtPanel = mainForm:GetChildChecked( "BuffMember" .. n, false )

local wtBuff = wtPanel:GetChildChecked( "Buff" .. strBuffNumber , false )

wtBuff:SetName( "Buff" .. strBuffNumber .. n )

local placement = wtBuff:GetPlacementPlain()

        

placement.posX = math.mod( i - 1, BUFFS_SLOTSWIDE ) * 35

placement.posY = math.floor( (i - 1) / BUFFS_SLOTSWIDE ) * 35

wtBuff:SetPlacementPlain( placement )

end

end

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

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