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

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

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

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

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

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

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

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

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

Подробнее

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

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

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

Проблема с аддонами на не-русских ОС


Гость FLAM

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

Добрый день!

Может кто знает как довести иформацию до разработчиков? Проблема в том, что функции FromWString и ToWString некорректно работают на не русских ОС (при игре в русские АО).

У меня на немецкой ОС FromWString возвращает одни вопросительные знаки, а ToWString "крякозябли". Я полагаю что разработчики используют для перевода WString <-> String стандартную кодировку систему. Это работает нормально если стандартная кодировка выставленна как русская.

Если подумать, то кодировка должна не зависить от систему, а зависить от языка игры. При русской локализации - это должна быть кодировка 1251. При немецкой - 1252.

Возможно ли поправить функции или дать возможнось передавать кодировку как параметр?

Спасибо!

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

Я пообщался с администрацией и мне сказали, что эти функции исчключительно для тестовых нужд. Если вы хотите чтобы ваши аддоны работали не только на русской ОС, то от этих фунций придётся отказаться. Это конечно сложно, если не дадут возможности напрямую работать с WString'ами, т.к. в данный момент их например даже нельзя объединить (или я не знаю такого метода).

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

Функция для работы с WString'ами не будет. Я к сожалению не могу понять как тогда делать аддоны если не использовать toWString и FromWString. Если я например хочу вывести где-нить в интерфейсе имя персонажа и в скобках его левел - как мне это сделать?

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

Видимо, остается только играться форматами. Например,

Code:

local format = userMods.ToWString( "<body><r name='name'/>  [<r name='level'/>] </body>" )

wtTextView:SetFormat( format )

wtTextView:SetVal( "name", object.GetName( avatar.GetId() ) )

wtTextView:SetVal( "level", common.FormatInt( unit.GetLevel( avatar.GetId() ), "%d" ) )

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

Character names in the game are passed as WStrings, not strings. This means they do not need to be converted to WStrings via ToWString commands.

object.GetName(id) is a WString.

"Blah, useless string." is a string.

Look for the labeling of types in the ModdingDocuments.

Google Translate:

Имена персонажей в игре передаются как WStrings, а не strings. Это означает, что они не должны быть преобразованы в WStrings через ToWString команды.

object.GetName(id) является WString.

"Бла, бесполезные строки". является string.

Посмотрите на маркировку типа в ModdingDocuments.

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

Во, это уже что-то! Хоть тут и используется ToWString, но она тут работать будет, т.к. кириллицы в строке нету.

Можно ли такой же фокус прокрутить если у нас нету TextView? Если я например хочу просто закинуть в переменную?

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

Quote:
вывести где-нить в интерфейсе имя персонажа и в скобках его левел

Это делается элементарно, без всяких ВСтрингов. И даже без извращений с форматами. Примеров в аддонах полно
Бывают закавыки и поинтереснее. Типа тех же локализацЫй
Ссылка на комментарий
Поделиться на другие сайты

Текст "где-нить в интерфейсе" выводится обычно в TextView(чаще, удобнее и понятнее) или на кнопачку(реже, для эстетов)

Ну и берем, к примеру, всем известный DarkDPSMeter и смотрим там работу с TextView. Там дофига конкретных примеров

Если не понятно и хочется чепопроще - смотрим DDStat или DDView

Если ваще влом чето левое качать - идем по адресу МаяЛюбимаяИгруха\data\Mods\SampleAddons\SampleZoneAnnounce

И смотрим там работу с TextView

Quote:
Я пообщался с администрацией и мне сказали, что эти функции исчключительно для тестовых нужд.

У них весь клиент создан исключительно для тестовых нужд, причем результаты тестов никого не волнуют (ну, кроме денежных тестов)

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

Всё, я вроде разобрался. Надо всё делать через ValuedText. Сейчас буду пробовать!

Всем спасибо!

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

Возможно ли как-то из ValuedText получить WString без добавления этого куда-то в TextView?

Code:

local valuedText = common.CreateValuedText();

valuedText:SetFormat(userMods.ToWString("<body><r name='zone'/> :: <r name='name'/>  [<r name='level'/>] </body>"));

valuedText:SetVal("zone",cartographer.GetCurrentZone().zoneName);

valuedText:SetVal("name",object.GetName(uid));

valuedText:SetVal("unit",common.FormatInt(unit.GetLevel(uid),"%02d"));

Вот как мне теперь результат запихать в WString?

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

Вроде, нет, получить никак. Зачем запихивать результат в WString? Для чего это нужно? Может, возможно как-то иначе все реализовать.

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

Ога. У разрабов оригинальное чуство юмора

В версии АО 2.01 добавилась замечательная функция TextViewSafe:GetValuedText()

И получать текст, в примере к функци, они предлагают через неработающий в пользовательских аддонах debugCommon.FromValuedText()

ЗЫ. А на самом деле, тебе зачем это все преобразовывать в WString?

Чтобы что? Где то хранить? С чем то сравнивать? Куда то выводить?

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

Ну всё началось с аддона aospider, там собирается информация и сохраняется в .cfg файл. При этом все значения надо как бы сохранить в переменные. У меня этот аддон некорректно работает. Я понимаю что это очень специфическая задача и функции для этого не предназначенны, но если подумать то нехватает совсем чуть чуть.

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

Текст WString, наверное, должен использоваться только для отображения локализованой информации в игровом интерфейсе

Как aospider (сам им не пользовался, пока нет нормального инета) некорректно работает?

1. Сохраненяем в .cfg текст в формате WString, ничем не преобразованый до этого (или он как-то зачем-то преобразуется? )

2. Считываем этот же текст из .cfg - пытаемся отобразить в игровом интерфейсе, получаем нечитаемый набор символов?

2. Или смотрим .cfg и "видим фигу"? (чем смотрим? Режим отображения UTF8 в ANSI кодировке? )

Нет в пользовательском АПИ никаких функций для преобразования WString в String кроме "тестовой" FromWString (по крайней мере я что то про них не слышал)

В общем ИМХО пока не поправят FromWString и ToWString рыпаться бесполезно.

Как вариант, попробовать составить таблицу соответствия преобразованиых символов после WString -> BuggedString <=> String и состряпать функцию, которая по этой таблице будет восстанавливать текст

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

Посмотрел код по диагонали: проблема с aospider решается, во-первых, отказом от преобразований to-/fromWString; во-вторых, заменой кириллических имен полей латинскими или вовсе использованием массива. Это потребует, видимо, несколько изменить структуру данных, чтобы аддон продолжал выполнять свою функцию, но иного пути достижения совместимости "малой кровью" не вижу. Разумеется, имхо.

Если же говорить о локализации в общем, от relatedtext никуда не деться. Все-таки, хранить строки в скрипте и преобразовывать -- это не вариант, как бы удобно ни было.

p.s. В аддонах ВоВ строки хранятся прямо в скрипте. Хм...

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

В моем аддоне, а именно "aospider" часто происходит работа со строками(например: склеивание текста, не работает без преобразования).

По поводу преобразования такая же проблема. Все функции работают только со String форматом. Пробовали уже.

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

при попытки склеивания без преобразования выдает:

Error: addon aospider code: [string "mods/addons/aoscode/main.lua"]:5: attempt to concatenate local `name' (a userdata value)

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

проблема в не использовании кириллице в аддоне. А в том что например имя НИПов хранятся в кириллице. И по этому у него при сохранении в файле пишется "???????"

А аддон будет переписан. Присутствие кириллицы обусловлено тем, что бы проще было обрабатывать данные. В ближайшее время кириллица будет убрана, точнее все лишние символы. Это снизит размер сохраняемых данных.

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

Полагаю, если имя НИПа сохранять непосредственно (без перевода в string для конкатенации), в .cfg будет вполне корректная запись L"Имя_НИПа".

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

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

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

Я вот тут подумал ... ты делаешь строку "Unit_zone_name_lvl" и под этим ключом закидываешь в массив. А нельзя просто сделать многомерный массив?

data["unit"][zone][name][lvl]

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

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

Можно, но:

1. Увеличивает размер сохраняемого файла. Я стараюсь наоборот уменьшить.

2. Нельзя применить фикс, который убирает в тексте лишние переносы строк. если это не делать то некоторые НИП, Задания, Объекты и Предметы не сохранятся.

3. Придется усложнять массив потому, что у меня например лут сохраняются "название" = "количество", где название проходит через еще один фикс который убирает в нем пробелы и заменяет их "_". Это опять увеличение размера сохраняемого файла.

FLAM, у тебя какая ОС стоит?

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

У меня стоит немецкая Windows 7. Как ANSI кодировка для не UNICODE программ используется кодировка Windows-1252.

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

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

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

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

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

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

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

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

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

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