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

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

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

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

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

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

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

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

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

Подробнее

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

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

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

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


Гость mehael

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

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

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]

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

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

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

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

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

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

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

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

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

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

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

Quote:

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

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

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

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

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

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

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

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

Если

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

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

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

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

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

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

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

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

однако ниже

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

?? ..

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

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

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

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

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

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

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

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)?

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

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

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

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

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

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

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

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

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

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

Вопрос:

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

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

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

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

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

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

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

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

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

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

пиши простую инструкцию ) есть очень много умельцев кисти и мыши)

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

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

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

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

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

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

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

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}

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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