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

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

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

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

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

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

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

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

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

Подробнее

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

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

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

LockIt!


duvo

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

Чо-т не эпрувится аддон. Выложу пока тут.

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

/li -- зафиксировать/отключить_фиксацию.

з.ы. Поделитесь кто-нибудь евро-апи -)

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

Ха-Ха-хА :)

То же самое... ну может по другому сделано

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

http://ui9.ru/forum/panelocker/about

ЗЫ. И это все?? Блин, у тебя код.... чуствуешь себя таким ламером....

ЗЗЫ. Так нечестно :)

DND_CONTAINER_STEP из неопубликованых в "документации" переменных

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

Это мега-лол xD

Код... Я вот думаю, чтоб еще выкинуть, дабы укоротить -)

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

Ребят! Ну вы даёте! :)) Это ж два взаимозаменяемых аддона:

2010-07-16 19:35:56 - LockIt

2010-07-18 17:16:24 - PaneLocker

Что делать-то будем?

В истории сайта это уже второй такой случай. В первый раз, это было AutoLoot и AutoPickupLoot. Но тогда, Wait, автор второго аддона, сказал, что т.к. аддон уже сделан раньше него, то его собственную версию можно удалить (т.к. аддоны были практически идентичные). Но тогда случился ещё один курьёз - Skillcoder проаппрувил оба аддона. Так сложилось, что они оба остались... Ну а что в этот раз будем делать, когда у вас такие идеологические разногласия? =))

Оба аддона работают. Моё личное имхо, PaneLocker лучше, т.к. у него есть иконка, и не нужно запоминать команду /li. Но LockIt появился раньше. Что делать будем?

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

Аддон от Duvodas для истинных аскетов - ничего лишнего ;)

У меня чуть больше функций: есть кнопка вкл\откл и сохраняется в конфиг статус

Хотя, код не такой красивый

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

В игре, разница между аддонами такая:

PaneLocker - при первом старте иконки закреплены, их можно открепить, нажав на специальную кнопку. Статус кнопки сохраняется в конфиг-файл, т.е. запоминается между игровыми сессиями.

LockIt - при старте, каждый раз, иконки НЕ закреплены, но их можно закрепить командой /li.

У нас есть два выхода - удалить один из двух аддонов, или оставить оба. Duvodas, что скажешь?

По-моему, PaneLocker удобнее для рядовых пользователей (каких тут подавляющее большинство), ну а LockIt скорее рассчитан на программистов, программисты любят аскетизм а-ля Линукс, где всё нужно делать в консоли, и их никогда не смущает необходимость знать наизусть всякие консольные команды. А рядовые пользователи... у них другой склад ума и привычки :)

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

Ну, вот и разобрались -) Аддоны для чего делаются? Я так понимаю, для повышения useability. Тыкнуть одну кнопку, разумеется, проще, чем писать какую-то команду. Даж короткую -) Так что, SLA, можешь смело удалять локит xD

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

"Duvodas" wrote:
Так что, SLA, можешь смело удалять локит xD

ОК :) Значит, оставляем PaneLocker.
Блин, Skillcoder недавно ушёл в оффлайн, а проаппрувить аддон может только он. Но я ему написал, и как только он появится, он всё сделает.

"Nikon" wrote:
Хотя, код не такой красивый

У вас у обоих интересный код. Но, раз уж мы удаляем LockIt, то вот копия его кода. Для потомков, так сказать :) Мало ли, кому и зачем может понадобиться в будущем:

Code:
function Init()
Global( "bLock", false )
common.RegisterEventHandler( 
function( event )
if ( math.floor( event.srcId / DND_CONTAINER_STEP ) == 2 ) and bLock then return mission.DNDCancelDrag() end
end, 
"EVENT_DND_PICK_ATTEMPT"
)
common.RegisterEventHandler( 
function( event )
if common.CompareWString( event.text, common.GetAddonRelatedText( "cmd" ) ) == 0 then
if bLock then bLock = false else bLock = true end
end
end, 
"EVENT_UNKNOWN_SLASH_COMMAND"
)
end

Init()


Nikon, только поправь функцию CheckVer(), как обсуждалось здесь, чтобы она не строчила ошибки.

P.S. Чтобы в будущем не было таких казусов, лучше сообщайте мне в личку, сразу, как только создаёте какой-нибудь новый аддон. Дело в том, что я НЕ получаю уведомлений о новых аддонах, их получает Skillcoder, но он может не отвечать на них днями... За то, я получаю уведомления о новых темах и ответах на форуме. Так, я узнал о PaneLocker по появлению темы "Обсуждение PaneLocker", а о LockIt по появлению этой сегодняшней темы... Узнав о новом аддоне, я пишу Skillcoder'у в Жаббер, что нужно срочно проаппрувить новый аддон - так выходит гораздо быстрее xD
Ссылка на комментарий
Поделиться на другие сайты

Поправил.

В версии r3 уже та самая функция

--

...Я тут подумал, попользовавшись аддоном...

Главная функция: закрепление иконок на панели

И сохранение состояния блокировки в конфиге не нужно

Т.е. по умолчанию иконки заблокированы. Хочешь разблокировать - жми кнопку, перемещай/удаляй, жми обратно или просто выходи из клиента. При следующем входе иконки будут блокированы

Если так сделать - PaneLocker будет полностью совпадать с LockIt (если в его коде чуть изменить 2-ю строчку, поиск блокируемых виджетов - это уже частности)

Только способы переключения блокировки разные

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

С сохранением тоже неплохо, но делай как хочешь. Кстати, "полностью совпадать с LockIt" аддон не будет, потому, что главное преимущество PaneLocker -- наличие кнопки. А сам LUA-файл, как бы, да, может приблизительно совпадать. И кое-что можно ещё оптимизировать.

Кстати, продолжая тему оптимизации кода, я подумал, что можно было ещё кое-что выкинуть из LockIt xD Следите за руками:

Code:
Global( "bLock", false )

common.RegisterEventHandler(

function( event )

if ( math.floor( event.srcId / DND_CONTAINER_STEP ) == 2 ) and bLock then return mission.DNDCancelDrag() end

end,

"EVENT_DND_PICK_ATTEMPT"

)

common.RegisterEventHandler(

function( event )

if common.CompareWString( event.text, common.GetAddonRelatedText( "cmd" ) ) == 0 then

if bLock then bLock = false else bLock = true end

end

end,

"EVENT_UNKNOWN_SLASH_COMMAND"

)

Ничего не поменялось, просто, убраны 3 строчки. Угадайте, какие :)))))))))))

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

Кстати, ещё можно заменить:

Code:
if bLock then bLock = false else bLock = true end

на это:

Code:
bLock = not bLock

Этот трюк из Си работает и в LUA, я только что проверил :)

А в строке

Code:
if ( math.floor( event.srcId / DND_CONTAINER_STEP ) == 2 ) and bLock then ... 

можно поменять условия местами, это ускорит работу скрипта:

Code:
if bLock and ( math.floor( event.srcId / DND_CONTAINER_STEP ) == 2 ) then ... 

Просто, все условия выполняются слева направо, и как только какая-нибудь часть (отделённая "and") получается false, дальнейшая проверка условий на этом прерывается, т.к. программе уже понятно, что в любом случае выйдет false.

То есть, здесь, в случаях, когда блокирование иконок выключено, программе будет гораздо проще посмотреть, что bLock равна false, и даже не выполнять подсчёт math.floor( event.srcId / DND_CONTAINER_STEP ), в котором, кстати, используется не самая быстрая математическая функция math.floor().

По крайней мере, так было в языке Си, хотя, думаю, компилятор мог бы и сам догадаться такое место оптимизировать, чтобы не выполнять проверки в указанном порядке, а поставить на первое место то, что полегче - проверку переменной bLock.

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

Code:
bLock = not bLock

Вот за это большое спасибо -)
Code:
if bLock then bLock = false else bLock = true end

Выглядело самым уродливым. Кстати, почему присваивая так
Code:
bLock = bLock and false or true

bLock всегда тру? Т_Т
В общем, знаний у меня пока, мягко говоря, маловато -) "Век живи, век учись"
Ссылка на комментарий
Поделиться на другие сайты

Это "булева логика", и тут всё очень-очень просто, потому, что тут всего 3 оператора - AND, OR, NOT. Нужно только понимать, как они между собой взаимодействуют. Об этом кратко и ясно рассказано, например, здесь.

Интерпретатор, в правой (от '=') части выражения, подставляет вместо переменных их значения, затем, вычисляет всё это, пользуясь булевой логикой.

Поэтому, это выражение:

bLock = not bLock

превращается либо (при bLock равном false) в:

bLock = NOT false = true,

либо (при bLock равном true) в:

bLock = NOT true = false.

А это выражение:

bLock = bLock and false or true

превращается либо (при bLock равном false) в:

bLock = false AND false OR true

= false OR true

= true

либо (при bLock равном true) в:

bLock = true AND false OR true

= false OR true

= true

Тут беда в том, что если ЛЮБАЯ из частей выражения, отделённая OR выйдет true, то всё выражение считается TRUE. То есть, в этом выражении "OR TRUE" всегда делает результат TRUE.

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

Хм, спасибо за пояснение. Да, основа основ -)

Я почему-то был уверен, что bLock = bLock and false or true аналогично ?: в си.

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

Потому что это работает так:

Code:
block = ( block and false ) or true

Выражение в скобках всегда разрешается в false. После чего оставшееся выглядит так:

Code:
block = false or true

Что получится? =)

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

Да, уже разобрался, вроде. Спасибо =)

Надо было внимательнее читать 3.3 - Logical Operators, а не просто выдирать из контекста

Quote:
Another useful idiom is (a and B) or c (or simply a and b or c, because and has a higher precedence than or), which is equivalent to the C expression

a ? b : c

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

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

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

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

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

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

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

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

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

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