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

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

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

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

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

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

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

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

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

Подробнее

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

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

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

Помогите с созданием Аддона


worm

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

.И что же делать?(

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

Нет конечно можно овсем извращенно подойти к решению проблемы. Это брать строку смотреть ее длину и поэтапно каждый символ строки перебирать на

local resAccept = string.find (val, "0")
local resAccept = string.find (val, "1")

и если есть хотя бы 1 не nill значение то идти дальше и так по всей строке?

но это же извращение

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

  • Ответов 95
  • Создана
  • Последний ответ

Топ авторов темы

Топ авторов темы

local a, b, number = string.gfind(string, "%s([0-9]*)")

А по-хорошему надо настроить фильтр.

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

Применил

local textEditLine = string.gfind (textEditLine, '%s([0-9]*)')
LogInfo( " textEditLine=", textEditLine )

и выводит

 Info: addon TradeManager: 2013-02-17 14:36:14: textEditLine=function: 401C5FD8

Вопрос возник а как посмотрть что это такое?

function: 401C5FD8

какое это значение?

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

угу нашел в луа

он вывел nil

т.е. это не циферки(

по аналогии

textEditLine = type( textEditLine )

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

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

Применил

local textEditLine = string.gfind (textEditLine, '%s([0-9]*)')
LogInfo( " textEditLine=", textEditLine )

и выводит

 Info: addon TradeManager: 2013-02-17 14:36:14: textEditLine=function: 401C5FD8

Вопрос возник а как посмотрть что это такое?

function: 401C5FD8

какое это значение?

function это функция.

local a, b, number = string.gfind(string, "%s([0-9]*)") и local textEditLine = string.gfind (textEditLine, '%s([0-9]*)')

Это совершенно разные вещи.

Что такое textEditLine ? Откуда ты это взял?

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

Да я и по твоему примеру вводил он писал на "a" тоже самое про функцию а на "b" и "number" что nil

-- Функция получения данных из поля ввода "TextLineInput" и кнопки "MathBtn" аддона
function GetDataItem()
for i = 0, 4 do
-- Смотрим Текстовое поле и данные из него загоняем в массив "wtEdit[ i ]" (точнее тут детей строки ввода смотрим)
wtEdit[ i ] = mainForm:GetChildChecked( "TextLineInput"..tostring( i ), true )
--textTextLineInput[ i ] = userMods.FromWString( wtEdit[ i ]:GetText() )

-- Тут берем текст из виджета "TextLineInput" который находится в массиве "wtEdit[ i ]" и переводим его из локализованного текста в нормальный
local textEditLine = userMods.FromWString( wtEdit[ i ]:GetText() )
--[[
textEditLine = string.match (textEditLine, '%s([0-9])')
LogInfo( " textEditLine=", textEditLine )
]]
--[[
local textEditLine = string.gfind (textEditLine, '%s([0-9]*)')
--textEditLine = tonumber( textEditLine )
LogInfo( " textEditLine=", textEditLine )
]]
-- Задаем логическую операцию. Если текстовое поле пустое то присваеваем "0" если нет то передаем данные. Это нужно чтобы выполнялись матемаческие операции
-- Передаем обработанные данные в массив "textTextLineInput[ i ]"
if textEditLine == "" then
textTextLineInput[ i ] = 0
else
textTextLineInput[ i ] = textEditLine
end

-- Тут смотри состояние кнопки "MathBtn" (0-умножить сумму на стек или 1-сумма равна стеку)
wtMathBtn[ i ] = mainForm:GetChildChecked( "MathBtn"..tostring( i ), true )
stateMathBtn[ i ] = wtMathBtn[ i ]:GetVariant()
end
-- Запускаем функцию обработки данных. Должна будет считать данные с аддона и с торгового фрейма по операции с кнопки "MathBtn"
-- ПОКА тут отключим так как запустим в функции по считке данных с торговой формы
--MathItem()
end

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

Вот я пенек дубовый а ведь точно)

string.find

вернет позицию и если смешанная строка то придется проверять какая именно позиция. Причем если первыми цифры шли а в конце буква то это еще гемор.

а это

textEditLine = tonumber( textEditLine )

вернет или цифру или nil а нил мы отрубим. Причем эта штука еще и пробелы обрезает

Уряя хоть немного успокойлся.

Спасибо вам огромное))))

завтра на работке попробую сделать скриншоты на согласие покупки с опцией включения и еще тоже само только логирование в файл.. И минимум функционала готово будет)

Тогда уже подумать можно будет и об панельки с другой стороны торговли)) и о фильтре нормальном

Елки Гениально все))

а Кстати чтобы лог файла в собственный аддон шел ведь можно как то сделать? там в доках сказано следующие

Выводит список строк в консоль/чат с префиксом "script: ". Переданные строки объединяются в одну. В качестве аргументов можно передавать как нелокализованные, так и локализованные строки.

Параметр filter определяет фильтр логирования - если он не включен соответствующими командами (см. DebugGame), команда будет проигнорирована.

Можно использовать глобальную переменную luaLogInfoShowAddonPath (см. DebugGame) для включения/выключения вывода пути до аддона.

где это DebugGame

и также сказано что в чат выводить может. Но на деле это тупо отсылает в mods.txt. Может что то надо настроить7 или это все отрубили?

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

Так и не понял ничего про фильтр( не подключается(

Добавь в TradeManager\Widgets\MainPanel\Frame\TextLineInput\TextLineInput.(WidgetEditLine).xdb

<filterAlias>NUMBERS</filterAlias>

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

NUMBERS

Спасибо)) а я туда и ссылку на файл фильтр пихал и сам код ))

Ребята спасибо за помощь. Правда трудно понять хотя признаюсь иногда очень туплю и довольно глупые вопросы задаю

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

Вот я пенек дубовый а ведь точно)

string.find

вернет позицию и если смешанная строка то придется проверять какая именно позиция. Причем если первыми цифры шли а в конце буква то это еще гемор.

А если использовать мною предложенный вариант, то он вернет число целиком.

Точнее в качестве фильтра надо использовать не "%s([0-9]*)" (Зачем там вообще пробел?) а "([0-9]+)". Это гарантирует то, что функция вернет строку, содержащую число, а если в поле будут другие символы - вернет nil.

Эта функция возвращает: Начало подстроки, Конец подстроки, Captures по порядку.

В данном случае capture это ([0-9]+). Capture это то что заключено в круглые скобки, например в фильтре: (ВЫР(выр)ЙЦ(У)й(ц(у))) Captures по порядку будут:

1) ВЫРвырЙЦУйцу

2) выр

3) У

4) цу

5) у

В моём случае я предложил использовать

local a, b, number = string.find(string, "%s([0-9]*)")

Таким образом в переменных a и b будут записаны начало и конец найденной подстроки (ненужная для нас информация), а в третью переменную - nil или содержимое скобок, т.е. 0 или более символов 0-9, т.е. некое число к которому можно применить tonumber(number).

Также можно использовать "([0-9]+)", т.е. вместо звездочки (0 и более символов) использовать плюс (1 и более символов), что гарантирует нам результат только когда будет хотя бы одна цифра, т.к. под [0-9]* подходит и "пустое место".

а Кстати чтобы лог файла в собственный аддон шел ведь можно как то сделать? там в доках сказано следующие

и также сказано что в чат выводить может. Но на деле это тупо отсылает в mods.txt. Может что то надо настроить7 или это все отрубили?

Нет, ты неправильно понял. Не "выводить лог в другой файл", а "выводить В ЛОГ путь ДО АДДОНА".

Т.е. что-то типа "Error: Addon /data/mods/addons/MyAddon: syntax error".

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

function wtChain(w, wBase, dx, dy)
--LogToChat(dx..":".. dy)
local p, r = w:GetPlacementPlain(), wBase:GetRealRect()
local xx, yy = getScreenSizeCenter()
p.alignX = WIDGET_ALIGN_LOW_ABS
p.alignY = WIDGET_ALIGN_LOW_ABS
local x, y = (r.x1 + r.x2)*0.5, 0.5*(r.y1 + r.y2) --- центр берем у базы
---LogInfo(x,":",y, " xx:y",xx, ":", yy)
if xx > x then
--p.posX = x+dx
--p.posX = x-r.x1
p.posX = r.x1-p.sizeX
--p.posX = p.sizeX+r.x1
else
p.posX = x - dx - p.sizeX
--p.posX = x1 - p.sizeX
end
if yy > y then
--p.posY = y+dy
p.posY = r.y1 - p.sizeY
else
--p.posY = y - dy - p.sizeY
p.posY = r.y1
end
w:SetPlacementPlain(p)
end

А вот такой вопрос. Замучился уже(. Код у розочки взял. Поправил строки некоторые. и по Y при изменение разрешения длины окна все нормально стало Но по Х при изменение экрана зверски всеже прыгает аддон(

уж незнаю что делать(

Причем если не отрицательное то есть сдвиг вправо то норм работает(

Хотя нет тоже глючит. Наверное недостаточно просто брать 1 координату и вычитать другую( Надо еще перемножать на коэф Масшатбирования. Но где его взять. или можно самому как получить математически? я Бы по логике вычислил но при изменение мастаба ширина в цифиркахлюбого элемента остается прежней. соотв нельзя взять что было что стало и поделить(

Пробовал обойтись без этого добавить

как ребенка свой аддон в системный

ContextPlayerTrade:AddChild( MainPanel )

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

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

По моему я опять ошибся в string.find. Если там будет мусор в начале/конце строки, то функция все равно отработает и вернет некое число в виде строки текста если оно там будет.

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

при изменении разрешения нужно ловить это событие и перерисовывать все виджеты с align=4

как это примерно работает см. в LibDnD

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

А что значит align=4

я просто запускаю функцию снова и он поидеи ловит снова центр экрана ширину координату и тд и все пересчитывает. Хех завтра на работе поковыряю ДнД

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

-- widget alignment

WIDGET_ALIGN_LOW = 0

WIDGET_ALIGN_HIGH

WIDGET_ALIGN_CENTER

WIDGET_ALIGN_BOTH

WIDGET_ALIGN_LOW_ABS = 4

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

Спасибо. Только вроде в функции они перезаписываются именно с таким выравниваем.( Завтра на работе на свежую голову гляну + начну писать скриншотирование и вывод в файл. там вроде простенько

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

Нашел ошибку в кнопочках. теперь они светятся) так здорово)) завтра уже буду тестить доп функции) жалко времени совсем мало(

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

 -- Берем пареметры окна
local posConverter = widgetsSystem:GetPosConverterParams()

-- Делаем масштабирующий коэф для на шаших координат
local ScaleX = posConverter.realSizeX/posConverter.fullVirtualSizeX
local ScaleY = posConverter.realSizeY/posConverter.fullVirtualSizeY


if xx > x then
--p.posX = x+dx
--p.posX = x-r.x1
p.posX = r.x1-p.sizeX*ScaleX
--p.posX = p.sizeX+r.x1
else
p.posX = x - dx - p.sizeX
--p.posX = x1 - p.sizeX
end
if yy > y then
--p.posY = y+dy
p.posY = r.y1 - p.sizeY*ScaleY
else
--p.posY = y - dy - p.sizeY
p.posY = r.y2 - p.sizeY*ScaleY
end
w:SetPlacementPlain(p)
end

Нашел решение проблемы. Всетаки можно сделать корректирующие коэффициенты при изменение масштаба)

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

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

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

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

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

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

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


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

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

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