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

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


Guest FLAM
 Share

Recommended Posts

Добрый день!

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

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

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

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

Спасибо!

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

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" ) )

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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

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

Link to comment
Share on other sites

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

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

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

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

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

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

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

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

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

Link to comment
Share on other sites

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

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

Link to comment
Share on other sites

Возможно ли как-то из 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?

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

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

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

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

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

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

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

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

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

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

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

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

Link to comment
Share on other sites

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

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

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

Link to comment
Share on other sites

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

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

Link to comment
Share on other sites

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

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

Link to comment
Share on other sites

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

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

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

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

Link to comment
Share on other sites

Можно, но:

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

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

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

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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