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

Servers monitoring and the Addons Editor

We present you two legends. All dreams come true.

Servers monitoring The Addons Editor

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

ValuedText и TextureId


Guest Stealth
 Share

Recommended Posts

Guest Stealth
Hidden

Всем доброго времени суток!

Возникло 2 вопроса:

1. Есть строка типа ValuedText, существуют ли способы сохранить ее в лог?

2. Возможно ли получить наименование текстуры зная ее TextureId, или любую другую информацию позволяющую однозначно определить что это за текстура с целью последующего извлечения

Link to comment
Hidden

Привет,

Начну со второго вопроса, ибо ответ на него будет краток.

2.

Нет. TextureId - это userdata, какая-то временная ссылка на ресурс игры. API не даёт никаких методов для выуживания какого-либо названия, id, или реального адреса текстуры. Разве что до ближайшего логаута, можно пользоваться этой текстурой в своём аддоне. Но не более того.

1.

ValuedText или ValuedObject?

В Аллодах есть три типа "строковых переменных":

1) string - Обычная LUA строка.

2) WString - "Локализованная" строка, в юникоде. В API есть несколько методов для работы с ними.

3) ValuedText - Это уже совсем не строка, а такой хитрый объект, что-то вроде текста в оформлении а ля HTML или RTF.

И пользователь, в основном, работает с WString и string.

Имхо, не бывает ситуаций, где было бы необходимо иметь способ конвертировать ValuedText во что-то ещё. ValuedText - это ресурсы, создаваемые самим пользователем (подстановкой каких-то WString в заранее заготовленный шаблон), чтобы вывести их где-то в GUI аддона. Это конечный продукт пользователя, и, как бы, нет смысла что-то из него вытаскивать.

Ну а если речь идёт о ValuedObject, то да, тут смысл есть. Хотя, обычно можно обойтись без него. Но если нельзя, то у ValuedObject есть куча своих методов, и этого набора, вроде, хватает:

Code:
valuedObject:GetId()

valuedObject:GetImage()

valuedObject:GetText() -- Возвращает WString :)

valuedObject:GetType()

Итак, все эти GetId() и GetText() позволят, в итоге, выудить какой-то WString.

Начиная с версии АО 1.0 или АО 1.1, у нас появились функции для конвертирования WString в string и обратно:

Code:
local strText = userMods.FromWString( wsLocalizedString )

local wsText = userMods.ToWString( "Обычный string" )

А вот так можно писать данные в лог-файл Mods.txt. (Ведь именно это было необходимо?)

Заметь, здесь использованы только WString, string, и int:

Code:
local wsName = object.GetName( avatar.GetId() )

local wsLevel = common.FormatInt( unit.GetLevel( avatar.GetId() ), "%d" )

common.LogInfo( common.GetAddonName(), "Меня зовут ", wsName, ", мне ", wsLevel, " лет, и я анонимный алкоголик." )

Link to comment
Guest Stealth
Hidden

Привет, спасибо за развернутый ответ.

В том то и дело, что нужен именно ValuedText, хочу вытащить описание скилов, а они на сколько я понимаю содержатся как раз в avatar.GetSpellInfo(spellId).description :(

Link to comment
Hidden

avatar.GetSpellInfo(spellId).description - это готовый ТУЛТИП, собранный из всех остальных параметров, возвращаемых функцией GetSpellInfo(). Его собирают на C++, для скорости, а в LUA передают только ссылку на него. Так что нужно копаться именно в них, в этих остальных параметрах, благо их уйма. Так должно быть всё, или почти всё.

Хотя, может, там будет не всё из того, что есть в тултипе, т.к. в хелпе сказано:

"функция имеет основную реализация в логике и расширенную реализацию в UI"

хотя дальше написано:

"--{ часть таблицы, реализованная только для UI

texture: TextureId - идентификатор текстуры для иконки заклинания

--}"

Видимо, это значит, что ВСЁ кроме этой бесполезной TextureId можно собрать из остальных параметров функции :)

avatar.GetSpellInfo(spellId).description:GetText() -- точно не работает?

Если нет, то ничего из ValuedText не вытащишь. Это userdata, и если в API нет никаких средств для вытаскивания оттуда инфы, значит ничего вытащить невозможно.

Кстати, на всякий случай, ещё посмотри, какой тип у ЭТОЙ переменной, вдруг повезёт:

avatar.GetSpellObjectInfo( spellId ).description

Link to comment
Guest Stealth
Hidden

GetText() точно не работает

GetSpellObjectInfo = nil

Цифры то вытащить можно из иных полей, а вот само описание скила по ходу только в дескрипшене и лежит:(

Link to comment
Hidden

А, я понял, нужно именно русское описание скиллов, типа "Шанс нанесения критического урона Расечением, Добивающим ударом, Мельницей, Оглушающей атакой и Мясорубкой увеличивается на ?%". Так вот, аддонами его не достанешь. Да, оно хранится в том ValuedText-тултипе, но оттуда его не возьмёшь.

Есть другой способ. Всё это хранится в файле BaseLocrus.pak/bin/pack.loc

Распаковать этот файл можно древней утилитой из комплекта AO-Tools.

Link to comment
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