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

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

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