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

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

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

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

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

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

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

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

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

Подробнее

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

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

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

worm

Разработчик аддонов
  • Постов

    632
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные worm

  1. Завтра проверю на Аренке и выложу

    В принципе сами можете поправить в файле ..\InstanceManager\Scripts\InstanceManager.lua

    строка 167

    было

        if eventName == "Арена смерти" then

    должно быть

        if eventName == "Арена Смерти" then

    Буковка "С" должна быть написана кириллицей (русские буквы)

  2.  -- Берем пареметры окна
    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

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

  3. 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 )

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

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

    string.find

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

    а это

    textEditLine = tonumber( textEditLine )

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

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

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

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

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

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

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

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

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

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

    где это DebugGame

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

  5. Да я и по твоему примеру вводил он писал на "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

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

    он вывел nil

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

    по аналогии

    textEditLine = type( textEditLine )

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

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

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

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

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

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

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

  8. На данный момент вот что имеем

    TradeManager.rar

    И это работает при условии что не будут вводить буквы вместо цифр

    что не принципиально где расположен аддон и что окно торговли на старом месте

    что работает по таймеру а не по событию начала конца торговли(

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

  9. --[[
    local ContextPlayerTradeW = ContextPlayerTrade:GetChildChecked( "GoldEditLine", true )
    local nameA = ContextPlayerTradeW:GetInitialGlobalClass()
    wtTextLineInput:SetGlobalClasses( nameA )
    
    local names = {}
    names[1] = "RedColor"
    names[2] = "Font20"
    wtEditLine:SetGlobalClasses( names )
    ]]

    Хотел применить шаблон и опять ругается((

    function wtChain(w, wBase, dx, dy)

    Использовал это. сответственно тут выходит что при изменение экрана на больше меньше. Виджет как ненормальный прыгает по всемуу игровому пространству(

  10. Поскольку не получается фильтр подсоединить хотел хоть отсеять лишнее и опять таки ругается(

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

    x: (где x - соответствует сам себе. (Он не может быть равен ни одному из волшебных символов ^$()%.[]*+-?).

    .: (точка) соответствует любому символу.

    %a: соответствует любой букве.

    %c: соответствует любому управляющему символу.

    %d: соответствует любой цифре.

    %l: соответствует любой букве в нижнем регистре.

    %p: соответствует любому символу пунктуации.

    %s: соответствует любому пробельному символу.

    %u: соответствует любой букве в верхнем регистре.

    %w: соответствует любому алфавитно-цифровые символу.

    %x: соответствует любой шестнадцатеричной цифре.

    %z: соответствует символу с представлением 0.

    %x: (где x - любой не алфавитно-цифровой символ), соответствует сам себе. Это - стандартный способ экранировки волшебных символов. Лучше следить за тем, чтобы любому символу пунктуации (даже не "волшебному") предшествовал '%', когда этот символ применен в шаблоне.

    [set]: соответствует любому символу из набора, заданного в set. Диапазон символов может быть определен, с помощью символа '-' отделяющего начало и конец диапазона. Все символьные классы %x описанные выше, могут использоваться как компоненты в наборе. Все другие символы в наборе представляются как есть. Например, [%w_] (или [_%w]) соответствует любому алфавитно-цифровому символу или символу подчеркивания, [0-9] соответствует любой десятичной цифре, и [0-9%l%-] соответствует любой десятичной цифре или любой букве в нижнем регистре или символу дефиса '-'.

    Взаимодействие между диапазонами и классами не определено. Поэтому, наборы подобные [%a-z] или [a-%%] не имеют никакого значения.

    [^set]: Отрицательный набор символов. Соответствует любому символу, кроме тех, что заданы в наборе set. Содержимое набора интерпретируется аналогично описанному выше [set].

    Для всех классов, представляемых одиночными символами (%a, %c, и т.п.), соответствующая прописная буква представляет отрицание класса. Например, %S представляет все НЕ пробельные символы.

    Представления символа, пробела и других символьных групп зависят от текущих региональных установок. В частности, класс [a-z] не эквивалентен %l.

    Элемент шаблона:

    Элементом шаблона может быть

    Одиночный символьный класс, который соответствует любому одиночному символу из заданного класса;

    Одиночный символьный класс, сопровождаемый '*', что соответствует 0 или большему количеству повторений символов из заданного класса. Эти элементы повторения будут всегда соответствовать самой длинной возможной последовательности.

    Одиночный символьный класс, сопровождаемый '+', что соответствует 1 или большему количеству повторений символов из заданного класса. Эти элементы повторения будут всегда соответствовать самой длинной возможной последовательности.

    Одиночный символьный класс, сопровождаемый '-', что также соответствует 0 или большему количеству повторений символов из заданного класса. В отличие от *, элементы повторения будут всегда соответствовать самой короткой возможной последовательности;

    Одиночный символьный класс, сопровождаемый '?', что соответствует 0 или единственному вхождению символа из заданного класса;

    %n, при n от 1 до 9; такой элемент равняется n-й зафиксированной подстроке (см. ниже);

    %bxy, здесь x и y - два различных символа. Такой элемент соответствует строкам, которые начинаются с x, заканчиваются на y, и в них сбалансированы x и y. Это означает, что, если читать строку слева направо, подсчитывая +1 для x и -1 для y, то последний y является первым y, для которого счетчик равен 0. Например, элемент %b() соответствует выражениям со сбалансированными круглыми скобками.

    Шаблон:

    Шаблон представляет собой последовательность описанных выше элементов. Символ '^' в начале шаблона, говорит о том, что заданная последовательность начинается с начала строки. Символ '$' в конце шаблона, говорит о том, что заданной последовательностью строка заканчивается. Символы '^' и '$', размещенные в других местах шаблона, не имеют никакого специального значения и представляются как есть.

    И нефига

    пишет

    Error: addon TradeManager: Error while running the chunk

    Error: addon TradeManager: [string "Mods/Addons/TradeManager/Scripts/TradeManager.lua"]:158: attempt to call field `match' (a nil value)

    Error: addon TradeManager: func: match, field, line: -1, defined: C, line: -1, [C]

    Error: addon TradeManager: func: GetDataItem, global, line: 158, defined: Lua, line: 149, [string "Mods/Addons/TradeManager/Scripts/TradeManager.lua"]

  11. а еще вопрос. Как можно приклеить свой аддон с стандартному окну в игре? делаю чтото на подобие этого. Т.е. получить координаты окна. и приплюсовал чтото передать в свой аддон

    -- Получили координаты расположения объекта
    local placeBuyTrade = ContextPlayerTrade:GetPlacementPlain()
    -- Считаем новые кординаты для последующего виджета
    --placeBuyTrade.posX = 40
    --placeBuyTrade.posY = 40
    
    -- Получили координаты расположения объекта
    local place = ContextPlayerTrade:GetPlacementPlain()
    -- Считаем новые кординаты для последующего виджета
    place.posX = placeBuyTrade.posX + 40
    place.posY = placeBuyTrade.posY + 40
    -- Задаем полученные координаты новым виджетам
    MainPanel:SetPlacementPlain(place)

    Но изначально окно торговли находится по центру и координаты Х и У у него равны 0

    и еще ругается что передаю какие то пустые значения((

    Конечно можно статически подогнать к нужному месту но при изменение разрешения или еще по каким либо причинам все съедит наверное(

  12. Ребят помогите с подключением DnD библиотеки . Ведь она отвечает за перемещение по экрану?

    Есть код подключения в 2х вариациях

    DnD:Init( 527, mainForm:GetChildChecked( "ListButton", true ), mainForm:GetChildChecked( "ListControl", true ), true )

    или

    MainPanel:DragNDrop( true, 680, nil, true, false )

    где

    function TWidget:DragNDrop( bDraggable, ID, wtMovable, bUseCfg, bLockedToScreenArea, Padding )
    if self.Widget then
    self.bDraggable = bDraggable
    if ID then
    DnD:Init( ID, self.Widget, wtMovable, bUseCfg, bLockedToScreenArea, Padding )
    else
    DnD:Enable( self.Widget, bDraggable )
    end
    end

    Собственно

    это необходимые данные для передачи

    function DnD:Init( ID, wtReacting, wtMovable, fUseCfg, fLockedToScreenArea, Padding )

    где

    ID, - произвольный инд номер аддона

    wtReacting - реакция в виджите на клик мыши

    wtMovable, - тот виджет что та форма что будет перемещатся и все то что в ней соответственно тоже

    fUseCfg - просто непонятная херня. все пишут true

    И я не могу понять в чем проблема

    если делаю так например привязавшись к кнопки закрытия то работает

    DnD:Init( 527, mainForm:GetChildChecked( "ButtonCornerCross", true ), mainForm:GetChildChecked( "MainPanel", true ), true )

    и это не лучший вариант

    но если делаю так

    MainPanel:DragNDrop( true, 680, nil, true, false )

    то скорее всего выходит гдето не реагирую на реакцию мышки

    Вопрос. я не прописал гдето в файле реакцию. или гдето был создан виджет с реакцией или что.?

    Мне бы хорошо перемещать всю панель зажав мышку на ней а не конкретно в области кнопки.

    Или гдето была создана прозрачная кнопка под панелью и щелкая по панели срабатывает с нее реакция на мышь?

  13. Ммм сейчас гляну... Но если честно не уверен что пойму. Розочка у тебя немного сложноваты аддоны в игре и в коде запутаться легко(

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

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

    Вообще столько интересных знаний появилось)) сейчас добью этот аддончик и перелопачу те 2)

  14. Ребят надо фильтр присобачить к строке ввода

    Вот нашел в доках

    <?xml version="1.0" encoding="UTF-8" ?>
    <UITextFilter>
    <ranges>
    <Item>
    <minChar>0</minChar>
    <maxChar>9</maxChar>
    </Item>
    </ranges>
    <isAllowObject>false</isAllowObject>
    </UITextFilter>

    Файл создал с названием EditLineTextFilter.(UITextFilter)

    Как его присоединить? или вообще как навести фильтр?

  15. Понять бы самому что конкретно там не пашет( Ладно это можно и под конец отложить. Теперь главное с текстовой формой разобраться

    Еще с деланна кнопочка при наведение не загорается( Видимо что-то с прозрачностью надо делать. Но это все украшательства. Сначала хочу понять саму механику работы форм

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

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

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