Guest Stealth Posted June 30, 2010 Share Posted June 30, 2010 · Hidden Hidden Всем доброго времени суток! Возникло 2 вопроса: 1. Есть строка типа ValuedText, существуют ли способы сохранить ее в лог? 2. Возможно ли получить наименование текстуры зная ее TextureId, или любую другую информацию позволяющую однозначно определить что это за текстура с целью последующего извлечения Link to comment
SLA Posted June 30, 2010 Share Posted June 30, 2010 · Hidden 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 Posted July 1, 2010 Share Posted July 1, 2010 · Hidden Hidden Привет, спасибо за развернутый ответ. В том то и дело, что нужен именно ValuedText, хочу вытащить описание скилов, а они на сколько я понимаю содержатся как раз в avatar.GetSpellInfo(spellId).description Link to comment
SLA Posted July 1, 2010 Share Posted July 1, 2010 · Hidden 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 Posted July 1, 2010 Share Posted July 1, 2010 · Hidden Hidden GetText() точно не работает GetSpellObjectInfo = nil Цифры то вытащить можно из иных полей, а вот само описание скила по ходу только в дескрипшене и лежит Link to comment
SLA Posted July 2, 2010 Share Posted July 2, 2010 · Hidden Hidden А, я понял, нужно именно русское описание скиллов, типа "Шанс нанесения критического урона Расечением, Добивающим ударом, Мельницей, Оглушающей атакой и Мясорубкой увеличивается на ?%". Так вот, аддонами его не достанешь. Да, оно хранится в том ValuedText-тултипе, но оттуда его не возьмёшь. Есть другой способ. Всё это хранится в файле BaseLocrus.pak/bin/pack.loc Распаковать этот файл можно древней утилитой из комплекта AO-Tools. Link to comment
Recommended Posts