duvo Posted July 19, 2010 Share Posted July 19, 2010 Чо-т не эпрувится аддон. Выложу пока тут. Простейший аддон, позволяющий включить/отключить фиксацию иконок умений/предметов и т.п. на экшнбаре. /li -- зафиксировать/отключить_фиксацию. з.ы. Поделитесь кто-нибудь евро-апи -) File: m8OxZtklEGcBzlc.zip Quote Link to comment Share on other sites More sharing options...
Nikon Posted July 19, 2010 Share Posted July 19, 2010 Ха-Ха-хА То же самое... ну может по другому сделано Выложил вчера, там опять проблемы какие то с закачкой http://ui9.ru/forum/panelocker/about ЗЫ. И это все?? Блин, у тебя код.... чуствуешь себя таким ламером.... ЗЗЫ. Так нечестно DND_CONTAINER_STEP из неопубликованых в "документации" переменных Quote Link to comment Share on other sites More sharing options...
duvo Posted July 19, 2010 Author Share Posted July 19, 2010 Это мега-лол xD Код... Я вот думаю, чтоб еще выкинуть, дабы укоротить -) Quote Link to comment Share on other sites More sharing options...
SLA Posted July 19, 2010 Share Posted July 19, 2010 Ребят! Ну вы даёте! ) Это ж два взаимозаменяемых аддона: 2010-07-16 19:35:56 - LockIt 2010-07-18 17:16:24 - PaneLocker Что делать-то будем? В истории сайта это уже второй такой случай. В первый раз, это было AutoLoot и AutoPickupLoot. Но тогда, Wait, автор второго аддона, сказал, что т.к. аддон уже сделан раньше него, то его собственную версию можно удалить (т.к. аддоны были практически идентичные). Но тогда случился ещё один курьёз - Skillcoder проаппрувил оба аддона. Так сложилось, что они оба остались... Ну а что в этот раз будем делать, когда у вас такие идеологические разногласия? =)) Оба аддона работают. Моё личное имхо, PaneLocker лучше, т.к. у него есть иконка, и не нужно запоминать команду /li. Но LockIt появился раньше. Что делать будем? Quote Link to comment Share on other sites More sharing options...
Nikon Posted July 19, 2010 Share Posted July 19, 2010 Аддон от Duvodas для истинных аскетов - ничего лишнего У меня чуть больше функций: есть кнопка вкл\откл и сохраняется в конфиг статус Хотя, код не такой красивый Quote Link to comment Share on other sites More sharing options...
SLA Posted July 19, 2010 Share Posted July 19, 2010 В игре, разница между аддонами такая: PaneLocker - при первом старте иконки закреплены, их можно открепить, нажав на специальную кнопку. Статус кнопки сохраняется в конфиг-файл, т.е. запоминается между игровыми сессиями. LockIt - при старте, каждый раз, иконки НЕ закреплены, но их можно закрепить командой /li. У нас есть два выхода - удалить один из двух аддонов, или оставить оба. Duvodas, что скажешь? По-моему, PaneLocker удобнее для рядовых пользователей (каких тут подавляющее большинство), ну а LockIt скорее рассчитан на программистов, программисты любят аскетизм а-ля Линукс, где всё нужно делать в консоли, и их никогда не смущает необходимость знать наизусть всякие консольные команды. А рядовые пользователи... у них другой склад ума и привычки Quote Link to comment Share on other sites More sharing options...
duvo Posted July 19, 2010 Author Share Posted July 19, 2010 Ну, вот и разобрались -) Аддоны для чего делаются? Я так понимаю, для повышения useability. Тыкнуть одну кнопку, разумеется, проще, чем писать какую-то команду. Даж короткую -) Так что, SLA, можешь смело удалять локит xD Quote Link to comment Share on other sites More sharing options...
SLA Posted July 19, 2010 Share Posted July 19, 2010 "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" )endInit() Nikon, только поправь функцию CheckVer(), как обсуждалось здесь, чтобы она не строчила ошибки.P.S. Чтобы в будущем не было таких казусов, лучше сообщайте мне в личку, сразу, как только создаёте какой-нибудь новый аддон. Дело в том, что я НЕ получаю уведомлений о новых аддонах, их получает Skillcoder, но он может не отвечать на них днями... За то, я получаю уведомления о новых темах и ответах на форуме. Так, я узнал о PaneLocker по появлению темы "Обсуждение PaneLocker", а о LockIt по появлению этой сегодняшней темы... Узнав о новом аддоне, я пишу Skillcoder'у в Жаббер, что нужно срочно проаппрувить новый аддон - так выходит гораздо быстрее xD Quote Link to comment Share on other sites More sharing options...
Nikon Posted July 19, 2010 Share Posted July 19, 2010 Поправил. В версии r3 уже та самая функция -- ...Я тут подумал, попользовавшись аддоном... Главная функция: закрепление иконок на панели И сохранение состояния блокировки в конфиге не нужно Т.е. по умолчанию иконки заблокированы. Хочешь разблокировать - жми кнопку, перемещай/удаляй, жми обратно или просто выходи из клиента. При следующем входе иконки будут блокированы Если так сделать - PaneLocker будет полностью совпадать с LockIt (если в его коде чуть изменить 2-ю строчку, поиск блокируемых виджетов - это уже частности) Только способы переключения блокировки разные Quote Link to comment Share on other sites More sharing options...
SLA Posted July 20, 2010 Share Posted July 20, 2010 С сохранением тоже неплохо, но делай как хочешь. Кстати, "полностью совпадать с 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 строчки. Угадайте, какие )))))))))) Quote Link to comment Share on other sites More sharing options...
duvo Posted July 20, 2010 Author Share Posted July 20, 2010 Бу-га-га xD Высший пилотаж! Quote Link to comment Share on other sites More sharing options...
SLA Posted July 20, 2010 Share Posted July 20, 2010 Кстати, ещё можно заменить: 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. Quote Link to comment Share on other sites More sharing options...
duvo Posted July 20, 2010 Author Share Posted July 20, 2010 Code: bLock = not bLock Вот за это большое спасибо -)Code: if bLock then bLock = false else bLock = true end Выглядело самым уродливым. Кстати, почему присваивая такCode: bLock = bLock and false or true bLock всегда тру? Т_ТВ общем, знаний у меня пока, мягко говоря, маловато -) "Век живи, век учись" Quote Link to comment Share on other sites More sharing options...
SLA Posted July 20, 2010 Share Posted July 20, 2010 Это "булева логика", и тут всё очень-очень просто, потому, что тут всего 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. Quote Link to comment Share on other sites More sharing options...
duvo Posted July 20, 2010 Author Share Posted July 20, 2010 Хм, спасибо за пояснение. Да, основа основ -) Я почему-то был уверен, что bLock = bLock and false or true аналогично ?: в си. Quote Link to comment Share on other sites More sharing options...
ramirez Posted July 21, 2010 Share Posted July 21, 2010 Потому что это работает так: Code: block = ( block and false ) or true Выражение в скобках всегда разрешается в false. После чего оставшееся выглядит так: Code: block = false or true Что получится? =) Quote Link to comment Share on other sites More sharing options...
duvo Posted July 26, 2010 Author Share Posted July 26, 2010 Да, уже разобрался, вроде. Спасибо =) Надо было внимательнее читать 3.3 - Logical Operators, а не просто выдирать из контекста Quote: Another useful idiom is (a and 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 Quote Link to comment Share on other sites More sharing options...
Recommended Posts