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

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

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

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

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

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

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

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

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

Подробнее

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

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

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

ValuedText и TextureId


Гость Stealth

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

Скрыто

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

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

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

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

Ссылка на комментарий
Скрыто

Привет,

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

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, " лет, и я анонимный алкоголик." )

Ссылка на комментарий
Скрыто

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

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

Ссылка на комментарий
Скрыто

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

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

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

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

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

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

--}"

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

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

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

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

avatar.GetSpellObjectInfo( spellId ).description

Ссылка на комментарий
Скрыто

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

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

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

Ссылка на комментарий
Гость
Ответить в этой теме...

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

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

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

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

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

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

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

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