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

Дайджест за июль-сентябрь

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

Сентябрь Август Июль

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

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

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

Бот статистики для Telegram

Удобная аналитика в телефоне.

Подробнее

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

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

Подробнее

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

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

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


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

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

Да всё нравится. Мне и самому не трудно поправить.

 

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

Вот это было-бы не плохо.

 

Я этот разговор и завел к тому чтоб адаптировать новое к старому.

 

Просто со временем эти двоеточия уже вошли в привычку. И мозг автоматом ставит DnD:init а не DnD.init

Когда один аддон у автора то это не вызывает не удобств а вот когда их много то адаптация LibDnD уже вызывает напряг.

 

Лично от меня спс за хорошо проделанную работу.

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

Вот это было-бы не плохо. Я этот разговор и завел к тому чтоб адаптировать новое к старому.

Ок, сегодня вечером сделаю.

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

А я чуть облегчил свои страдания:

function move( move, parent, save )

    DnD:Init( move, parent, save )

end

function enable( widget, state )

    DnD:Enable( widget, state )

end

function isDragging()

    return DnD:IsDragging()

end
move( minimap.canvas, minimap.minimap, true )
resize( minimap.frame_resize, minimap.minimap, true )
Ссылка на комментарий
Поделиться на другие сайты

Залил корректирующий релиз:

  • 2014-10-29:
  • DnD.Init также поддерживает старый список параметров: DnD:Init(ID, wtReacting, wtMovable). Таким образом для перехода на новую версию LibDnD достаточно просто заменить файл LibDnD.lua на новый.
  • 2014-10-28:
  • Функции DnD.Init, DnD.Enable, DnD.IsDragging, DnD.Remove поддерживают вызов через двоеточие. Для этого не надо менять эти вызовы в LibDnD.lua.
Ссылка на комментарий
Поделиться на другие сайты

  • 2 недели спустя...
hall.dll , можешь обновить библиотеки DnD в AddonTools ?

Я пока не стал бы этого делать.

Там есть некоторые фичи, которые еще не добавил в т.н. официальную (возможно и незначительные, но всё-таки...).

Когда добавлю - не знаю, сейчас нет никакого желания заниматься аддонами...

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

  • 1 месяц спустя...

На бразильских серверах вышло обновление до 5.0.2, говорят, что там не работает перетаскивание. Ошибок в логе нет.

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

На бразильских серверах вышло обновление до 5.0.2, говорят, что там не работает перетаскивание. Ошибок в логе нет.

Они аддоны обновляли после обновления до 5.0.2?

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

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

  • 7 лет спустя...

Вот версия с моим фиксом редких/случайных спамов ошибок из shipcontrol.

Чтобы не потерялась, с выходом очередных правок api  нужно будет еще common.GetBitAnd заменить на новый аналог.

 

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

  • 5 месяцев спустя...

Вот версия библиотеки под версию 14,0. Исправлена работа при указании KbFlag

 

 

 

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

  • 1 год спустя...
В 20.09.2024 в 20:56, OLDodin сказал:

Моя версия под ПТС

 

LibDnD.lua 13.23 kB · 0 загрузок

Судя по тому что написано в CategoryDragAndDrop.html, то нельзя использовать widget:GetId() в качестве идентификатора для dnd напрямую, а следует пользоваться формулой

DNDId = id * DND_CONTAINER_STEP + DNDContainer

Так как widget:GetId() - это номер создания виджета, то может произойти наложение

DND_CONTAINER_STEP равен 1000

Встроенная функция DNDRegisterGeneric использует какой-то свой id, каждый раз при вызове прибавляет его на 1, а DNDContainer у нее равен 255.

Прикрепил свою версию, которая использует DNDRegisterGeneric и не совместима с аддонами, которые вызывали "внутренние" функции либы (о чем говорили в дискорде). Если аддон использовал только Init, Remove и Enable, то должно работать

 

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

В 20.09.2024 в 21:52, Slashuur сказал:

Судя по тому что написано в CategoryDragAndDrop.html, то нельзя использовать widget:GetId() в качестве идентификатора для dnd напрямую, а следует пользоваться формулой

DNDId = id * DND_CONTAINER_STEP + DNDContainer

Так как widget:GetId() - это номер создания виджета, то может произойти наложение

DND_CONTAINER_STEP равен 1000

Встроенная функция DNDRegisterGeneric использует какой-то свой id, каждый раз при вызове прибавляет его на 1, а DNDContainer у нее равен 255.

Прикрепил свою версию, которая использует DNDRegisterGeneric и не совместима с аддонами, которые вызывали "внутренние" функции либы (о чем говорили в дискорде). Если аддон использовал только Init, Remove и Enable, то должно работать

LibDnD.lua 11.55 kB · 0 загрузок

Спасибо, поправил. Только если widget:GetId() уникален, зачем их было еще разносить формулой

 

 

 

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

И чуть улучшил GetWidgetID

 

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

Небольшие оптимизации

 

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

  • 3 недели спустя...

Если при вызове метода DnD.Init( выдает ошибку "LibDnD.lua:36: Widget already registered for DnD" - то значит Init вызывается не первый раз для этого виджета. Раньше клиент это никак не проверял и в ошибку не падал. Регистрировать 2 раза подряд уже зарегистрированный виджет - неправильно.

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

5 минут назад, Lafayette сказал:

Если при вызове метода DnD.Init( выдает ошибку "LibDnD.lua:36: Widget already registered for DnD" - то значит Init вызывается не первый раз для этого виджета. Раньше клиент это никак не проверял и в ошибку не падал. Регистрировать 2 раза подряд уже зарегистрированный виджет - неправильно.

В моей версии это корректно обрабатывается...

Как и множественная DNDUnregister

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

Подскажите пожалуйста, а куда и как устанавливать это?

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

  • 1 год спустя...

Дано:
AddonDesc.(UIAddon).xdb:

<?xml version="1.0" encoding="UTF-8"?>
<UIAddon>
	...
	<userAddonInfo>
		...
		<useCommonScripts>false</useCommonScripts> <!-- ВНИМАНИЕ: false - не используем Common скрипты -->
	</userAddonInfo>
	...
	<ScriptFileRefs>
		...
	</ScriptFileRefs>
	...
</UIAddon>

Code:

function OnAvatarCreated()
    
    local test = _G.mainForm:GetChildChecked( "Panel" )
    
    log(
        common.IsWidget( _G.mainForm ), 
        common.IsWidget( mainForm ), 
        common.IsWidget( test ),
        --[[ IsTWidget( _G.mainForm ), -- ДОСТУПНЕН IsTWidget если useCommonScripts = true ИЛИ вручную прописали в список(ScriptFileRefs) WidgetBaseClasses.lua, WidgetCoreUserMods.lua
        IsTWidget( mainForm ),
        IsTWidget( test ), ]]
        type( _G.mainForm ),
        type( mainForm ),
        type( test )
    )
    
    
    _G.DnD.Init( test, nil, true )
end

common.RegisterEventHandler( OnAvatarCreated, "EVENT_AVATAR_CREATED" )

if avatar.IsExist() then
    OnAvatarCreated()
end


Log:

  ["var_dump"] => table(6) {
    [1] => boolean(true)
    [2] => boolean(true)
    [3] => boolean(true)
    [4] => string(8) "userdata"
    [5] => string(8) "userdata"
    [6] => string(8) "userdata"
  }


Внимание на виджеты с типом "userdata"

=====================================================
Теперь...
=====================================================

Включаем использование скриптов, AddonDesc.(UIAddon).xdb:

<useCommonScripts>true</useCommonScripts>


Убираем комментирование участка в коде:

 

 

 log(
        common.IsWidget( _G.mainForm ), 
        common.IsWidget( mainForm ), 
        common.IsWidget( test ),
        IsTWidget( _G.mainForm ),
        IsTWidget( mainForm ),
        IsTWidget( test ), ]]
        type( _G.mainForm ),
        type( mainForm ),
        type( test )
    )


Log:

 

 

  ["var_dump"] => table(9) {
    [1] => boolean(false)
    [2] => boolean(false)
    [3] => boolean(false)
    [4] => boolean(true)
    [5] => boolean(true)
    [6] => boolean(true)
    [7] => string(5) "table"
    [8] => string(5) "table"
    [9] => string(5) "table"
  }

Внимание на виджеты с типом "table"

=====================================================
LibDnD.lua
=====================================================

if type(wtMovable) ~= "userdata" then return end -- Да... да, да, да



Заменить на:

if not ( common.IsWidget( wtMovable ) or rawget( _G, "IsTWidget" ) and IsTWidget( wtMovable ) ) then
	error( "FATAL: Widget expected, got " .. apitype( wtMovable ) )
end

Иначе DnD не будет инициализирован для Widget( table ).


Суть в чем... Виджеты могут быть как userdata, так и table. 
 

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

К чему это? К тому что нужна поддержка классов из CoreScripts ?

Виджеты есть виджеты. А есть обертка TWidget из CoreScripts с переопределением методов виджета и его имитирующая.

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

37 минут назад, OLDodin сказал:

К чему это? К тому что нужна поддержка классов из CoreScripts ?

Виджеты есть виджеты. А есть обертка TWidget из CoreScripts с переопределением методов виджета и его имитирующая.

К тому что, если подключаешь для своего аддона эти скрипты, то виджеты будут с типом TABLE.
Сейчас это диктуется так:
Не используй скрипты от разработчика (см. выше какие), или Библиотека не будет работать (Хардкод).

Зачем писать кучу <Item href="..." />, если можно одним атрибутом подключить.

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

12 минут назад, Metamorfius сказал:

К тому что, если подключаешь для своего аддона эти скрипты, то виджеты будут с типом TABLE.
Сейчас это диктуется так:
Не используй скрипты от разработчика (см. выше какие), или Библиотека не будет работать (Хардкод).

Зачем писать кучу <Item href="..." />, если можно одним атрибутом подключить.

Претензия не к сути (суть - вот исправления для поддержки CoreScripts, представленных неделю назад). А к тому что вы зачем-то написали огромное сообщение для того чтобы показать что классы в lua имеют тип TABLE.

 

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

1 минуту назад, OLDodin сказал:

Претензия не к сути (суть - вот исправления для поддержки CoreScripts, представленных неделю назад). А к тому что вы зачем-то написали огромное сообщение для того чтобы показать что классы в lua имеют тип TABLE.

 

Ты серьёзно ? Крч пост оставил тем кто столкнётся. Я понял тут одно, какой борщ тут варится на форуме.

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

1 минуту назад, Metamorfius сказал:

Ты серьёзно ? Крч пост оставил тем кто столкнётся. Я понял тут одно, какой борщ тут варится на форуме.

Ну вот ты и дорос до того почему  у каждого тут свои "версии" со своими правками даже общих библиотек. 🙃

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

Присоединяйтесь к обсуждению

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

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

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

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

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

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

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

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

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

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