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

Обьединение WString.


Guest jkot
 Share

Recommended Posts

Guest Valltron

нет, wstring нельзя так объединять, т.к. это userdata

по моему должна быть специальная команда, которая возвращает объединенную строку... но я не уверен

Link to comment
Share on other sites

Столкнулся с проблемой

Есть перменная типа WString пытаюсь сравнить с ней какоелибо значение - результат всегда отрецательный, кто подскажет что делать ?

Пример

Code:

   SpellInfo.Name -- WString

   name -- Строка заданная "text"

   if SpellInfo.Name == name then 

       .......

   else

       ........

   end

Пробовал конвертировать с помощью debugCommon.ToWString( "text" ) - вообще не работает, видимо отклучена дебаг библиотека. Пробовал tostring( "text" ) тоже самое.

Есть идеи что может быть не так ?

Link to comment
Share on other sites

Guest Valltron

тоже самое. нельзя просто сравнивать wstring. темболее с другими данными.

для сравнения 2х wstring используй common.CompareWString( wstring1, wstring2 )

если строка string у тебя постоянна, то можешь ее записать в текстовом файле и сохраниьт в кодировке UTF-16LE

подключить этот файл к себе: в xdb прописать <TextFileRef href="FILENAME.txt" />

и из скрипта получать уже local text = GetText( "FILENAME" )

и уже text будет иметь тип wstring

и уже сравнивай через CompareWString

примерно так... если что непонятно смотри примеры, смотри апи, мож что накопаешь :) расскажешь.

Как сравнивать разные типы данных я хз :)

Link to comment
Share on other sites

Guest Valltron

кстати, "объединение"wstring тем же способом производится

в txt пишем:

Code:
<header color="0xFFCC1111" alignx="center" shadow="1"><rs class="class"> <r name="key"/><r name="value"/></rs></header>

дальше уже устанавливаем готовой строке нужные значение через виджет:

Code:
valuedText:SetVal( "key", wstring1 )

valuedText:SetVal( "value", wstring2 )

Link to comment
Share on other sites

Блин писец просто работа с текстом и контролами через одно место. Ктонить может полный пример выложить -

1. Вывод сообшения в чат

2. Создать окошко и выводить туда текст в TextView

Ниваловские примеры пестрят вот такими констукциями debugCommon.ToWString( "Hi, all." )

Когда пишеш в коде - это не пашет ! Вот я логики ен вижу нафига это отрубать то ? Зачем! Нада писать нивалу чтоб врубили возможность вот так задавать WString

debugCommon.ToWString( "Hi, all." )

Link to comment
Share on other sites

Guest Valltron
Quote:
Как ее получить нормальным человеческим способом

никак. как они их обзывают - это "локализованная строка" пишешь набор необходимых строк в txt файлах. строк, заготофок форматов строк...
DebugCommon, я уже говорил, отключено с начала ОБТ (или почти с самого начала. Почему в API все примеры даны с этой конструкцией - я не знаю. видать на столько заняты что сами используют старый API... А нам дали именно свой рабочий, немного лишь урезав и дополнив аддон-функциями.
Link to comment
Share on other sites

Valltron

Чуть более подробно можно? Как потом "загрузить" этот txt , что-бы с ним потом работать как с valuedText??

ЗЫ: цитата из API: "Правила подстановки одного ValuedText в другой см. в http://intra/wiki/engine/ValuedText"

Link to comment
Share on other sites

Guest Valltron

я говорил про wstring, ValuedText это другое.

насчет Valued...

можно создать новый экземпляр, установить ему формат из виджета (или, например из <texts href="" />, через gettext), установить класс, это то что у тебя в тэге <rs class=...> определено, и задать значения параметрам, то что в <r name=...>:

Code:
local valuedText = common.CreateValuedText()

valuedText:SetFormat( mywidget:gettext( "textname" ) )

valuedText:SetClassVal( "color_code", "log_yellow" )

valuedText:SetVal( "value", params.name )

и дальше им пользоваться как тебе нужно.

ах, да, это все теоретически выше писал. код не проверял в работе. сам подправишь что не так

Link to comment
Share on other sites

Quote:
если строка string у тебя постоянна, то можешь ее записать в текстовом файле и сохраниьт в кодировке UTF-16LE
подключить этот файл к себе: в xdb прописать
и из скрипта получать уже local text = GetText( "FILENAME" )

а можно по-подробнее о подключении текстового файла и получении строки типа WString из него?
в каком xdb надо прописать и как именно? и что собой представляет "FILENAME" ?

я пробовал делать так:
в файле AddonDesc.(UIAddon).xdb прописал среди прочего следующее:
Code:

<texts href="Texts.(UIRelatedTexts).xdb#xpointer(/UIRelatedTexts)" />

создал файл Texts.(UIRelatedTexts).xdb с таким содержимым:
Code:

<?xml version="1.0" encoding="UTF-8" ?>
<UIRelatedTexts>
<items>
<Item>
<name>message1</name>
<resource href="message1.txt" />
</Item>
<Item>
<name>message2</name>
<resource href="message2.txt" />
</Item>
</items>
</UIRelatedTexts>

соответственно, сделал 2 текстовых файла в юникод-кодировке (message1.txt и message2.txt)
в lua-скрипте следующая конструкция:
Code:

local msg1 = GetText( "message1" )
local msg2 = GetText( "message2" )
LogInfo( "parameters: ", msg1, " *** ", msg2 )
        group.ChatWhisper( object.GetName( avatar.GetId() ), msg1 )

то есть по идее, я должен получить 2 строки из файлов, записать их в лог, а также первую строку отправить себе в ПМ. но ничего этого не происходит :(
в чем я ошибся? ( все созданные файлы находятся в одном каталоге - корне аддона )
Link to comment
Share on other sites

Code:
<header color="0xFFCC1111" alignx="center" shadow="1"><rs class="class"> <r name="key"/><r name="value"/></rs></header>


Скажи, а там где ты добыл этот текст, еще такие есть? И если есть, тогда расскажи уж, как и где добыл. Это ключевая информация для правильной работы с текстами, в выданной документации об этом только пол-намека.

Upd. А, в примерах кое-что есть, хотя и не такое.
Link to comment
Share on other sites

Имхо, вместо этого:

Code:
local msg1 = GetText( "message1" )

нужно так:

Code:
local msg1 = common.GetAddonRelatedText( "message1" )

Так должно работать.

Link to comment
Share on other sites

local msg1 = common.GetAddonRelatedText(что тут должно быть?)

А конкретней - Как в msg1 получить строчку : "Hello"

Да так , чтобы эта строчка давала true на common.IsWString(msg1).

Выложите пример пожалуста аддона. Где писалось бы в лог msg1 = "Hello"

И Group.ChatSay(msg1) тоже бы чтобы писал>))

Извините , возможно все было уже написано, но нифига не получается.

Link to comment
Share on other sites

Не GetText() надо, а common.GetAddonRelatedText(). GetText'а не существует.

В Texts.(UIRelatedTexts).xdb поле "name" - любая строка, не обязательно имя файла. По этой строке и добываешь этот текст.

Link to comment
Share on other sites

Quote:
local msg1 = common.GetAddonRelatedText(что тут должно быть?)

Здесь должен быть идентификатор текстового ресурса, т.е. некое имя, присвоенное текстовому файлу (в кодировке Юникод) с нужной строкой. Это имя, а также путь к файлу задаются в файле .xdb (описателе текстовых ресурсов), ссылка на этот .xdb файл находится в файле-описателе аддона, в теге "texts".
Quote:
Выложите пример пожалуста аддона. Где писалось бы в лог msg1 = "Hello"
И Group.ChatSay(msg1) тоже бы чтобы писал>))

Прикладываю пример такого аддона :)
Link to comment
Share on other sites

а никак :)

"объединять" объекты типа WString можно только на этапе вывода, т.е. в том месте где их надо отображать (лог-файл, виджет TextView и т.п.)

msg1, msg2, ..., msgN - это как набор кубиков из которых можно путем перестановки складывать разные фразы, но при этом разломать кубик или скрепить между собой 2 кубика нельзя, не предусмотрено у них креплений :)

Link to comment
Share on other sites

Первое что приходить на ум - сделать ValuedText - сложить в него WString-i и потом взять скомпоновоннаую строку GetText -ом. Шас попробую сам на практике .... отпишу что вышло

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