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

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

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

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

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

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

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

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

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

Подробнее

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

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

Подробнее

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

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

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

SLA

Пользователь
  • Постов

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

  • Посещение

Весь контент SLA

  1. Вот тут, пожалуй, кое-что поясню. Если взять любой BIN, экспортировать его в DDS, и сконвертировать это обратно в BIN, то получится АБСОЛЮТНО ИДЕНТИЧНЫЙ ИЗНАЧАЛЬНОМУ BIN-файл, байт в байт. Потому, что оба конвертирования DDS->BIN и BIN->DDS происходят БЕЗ потерь (Lossless). Если взять любой BIN, экспортировать его в TGA/PNG/PSD, и сжать (да да, именно СЖАТЬ, а не сконвертировать) это обратно в BIN (с помощью нивальского конвертера, т.к. мой AoTextureViewer умеет делать BIN'ы только из DDS), то получится СОВЕРШЕННО ДРУГОЙ BIN-файл... И дело тут в том, что в файлах TGA/PNG/PSD изображение хранится сжатым без потерь, но при сжатии всех этих форматов в BIN, происходит СЖАТИЕ С ПОТЕРЯМИ. Потому, что формат BIN - это фактически DDS. А DDS - это lossy сжатие, наподобие JPEG.
  2. SLA

    DarkDPSMeter

    И фраза "Текущий бой" тоже не помещается, хотя, должна была помещаться. Очень странно. Какая это резолюция экрана?
  3. Запоминать ники входящих приватных сообщений - ДА. А вызывать их для написания ответов - НЕТ. Технически невозможно, API не позволяет производить почти никаких действий с чатом. Можно только собирать из него информацию.
  4. Я знаю, кто во всём виноват - WShad =)) Это он откопал весь функционал D&D, и вот как выглядит его функция. Внимание, первоисточник: Code: function OnEventDNDDropAttempt( params ) mission.DNDConfirmDropAttempt() end )))) При правильном коде, какой у нас уже есть (когда ни один аддон не реагирует на чужие события), система D&D работает отлично. Кроме того, это не правда, что в игре D&D используется только для окна чата. Он постоянно используется для перемещения иконок предметов и заклинаний. И проблема была не в самой этой системе, а в растиражированном баге в одной из наших функций. В будущем, проблем с D&D быть не должно, при том условии, что все будут пользоваться исправленным кодом.
  5. +1 ко всему, что сказал Abagor. ТЗ - это "техническое задание" (англ. "design document"). Это документ, который должен написать человек, ХОРОШО РАЗБИРАЮЩИЙСЯ в устройстве ДКП-систем (но не умеющий программировать). Там должно быть ПОДРОБНО написано, какие данные нужно собирать в игре, что и как должно работать, как и что подсчитывать, в каком виде показывать результаты. И всё это нужно написать так, чтобы задание было понятно любому программисту, даже если он вообще не в курсе, что такое ДКП. Вот наличие такого ТЗ увеличит шансы появления ДКП-системы для АО в сотни раз (!), потому, что взяться за реализацию сможет ЛЮБОЙ программист, а те только один из тех программистов, который прекрасно разбираеюся в ДКП, таких очень мало. P.S. У нас уже есть аддон aGAI, который собирает всякие данные о персонажах, и сохраняет их в файл user.cfg. Но к нему требуется написать какой-то веб-интерфейс для сайтов гильдий (лучше всего на PHP и MySQL), чтобы все эти данные можно было заливать на сайты гильдий, и чтобы эти сайты эту информацию обрабатывали, и умели показывать в красивом и удобном для посетителей виде. P.S.2. Кстати, на оф.сайте EQDKP сказано: Quote: Q: Does EQdkp only work with EverQuest? A: No. It has game support for EverQuest, EverQuest 2, World of Warcraft, Vanguard, and Dark Age of Camelot. Its game support is also modular, so new games can be added quickly and easily . Вот так вот. Возможно, проще всего было бы написать модуль для "Аллоды Онлайн" к EQDKP, чем создавать систему с нуля. Я заглянул в дистрибутив, И ОФИГЕЛ. Там, в папке games, каждой игре соответствует ОДИН php-файл со всякими константами. Похоже, это и вправду "быстро и просто". Программисты, кто хочет попробовать?
  6. Вайпнуть? Ни за что! Это же огромный кладезь идей. К тому же, это великолепная возможность постоянно держать руку на пульсе, видеть, какие аддоны нужны самым разным людям (без такой темы, мы бы не знали, какие новые тенденции развиваются в игре, и какие аддоны более востребованы, а какие менее). Форма запроса и ответа - а что она даст? На большинство запросов на создание аддонов, я могу ответить одной и той же фразой "Да, можно. Но сейчас сделать это некому. Если хотите, попробуйте сами, вот здесь написано, с чего начинать разработку аддона."
  7. Это "булева логика", и тут всё очень-очень просто, потому, что тут всего 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.
  8. Кстати, ещё можно заменить: 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.
  9. Тут стоит ещё добавить, для лулзов, что этот запрос уже написан в тысячный раз. Чуть ли не каждый второй пользователь сайта, обычно сразу после регистрации, задаёт такой вопрос )))
  10. С сохранением тоже неплохо, но делай как хочешь. Кстати, "полностью совпадать с 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 строчки. Угадайте, какие ))))))))))
  11. SLA

    PhanTime

    Quote: Пишет в Mods.txt кучу ереси: Vomitus, он писал эту ересь в Mods.txt не сам по себе, а из-за конфликта с другими аддонами. Но, в в последней версии PhanTime это исправлено. Quote: нужно бы сделать, чтобы окно аддона было поверх остальных Это уже не ошибка. Это проблема совсем другого плана. Во всех аддонах, вписан какой-то приоритет главной формы. В ниваловском примере это 1000. И если все создатели аддонов начнут наперегонки увеличивать это число (чтобы их аддон рисовался поверх всех остальных), то однажды это закончится тем, что мы упрёмся в верхний потолок этого числа. Это будет плачевный финал. Что-то захотелось чуть-чуть по-оффтоп-ить: Мне это напоминает историю развития обычных аудио-дисков. С момента их появления в 1982 году, каждый новый альбом делался чуть-чуть громче того уровня громкости, на котором находятся остальные конкуренты, чтобы, "как бы, показать превосходство" нового альбома ) Закончилась эта гонка плачевным финалом -- упёрлись в верхний потолок громкости, и все современные диски выпускаются на таком уровне громкости, который граничит с ухудшением качества записи. Другими словами, музыка могла бы быть КАЧЕСТВЕННЕЕ, если бы не была технически упёрта в этот потолок громкости... Выхода из ситуации для Аудио-CD не существует, поэтому, при разработке новых форматов (SACD a.k.a. Super Audio-CD), учли этот "человеческий фактор", и приняли технические меры, чтобы не допустить такого разгильдяйства на SACD... А от Аудио-CD, всем нам осталась в наследство такая память -- если захочешь послушать дискографию ЛЮБОЙ группы за последние 15-20 лет, в формате MP3, конечно , то совершенно точно заметишь, что каждый следующий альбом громче предыдущего. Первый будет В РАЗЫ тише последнего, что делает неудобным "перемешанное" (Shuffled) воспроизведение такой дискографии. Но в MP3 файлах это можно исправить "через задницу", именно для этого изобретена технология "ReplayGain" для MP3. А если по делу, то: Чтобы PhanTime рисовался поверх Minimap, нужно вписать в PhanTime приоритет главной формы, бОльший, чем в Minimap. То есть, в файле MainForm.(WidgetForm).xdb, в теге <Priority> нужно заменить число. Например, у PhanTime там 800, а у Minimap там 1000. Значит, впиши в аддоне PhanTime, например, число 1001: <Priority>1001</Priority> P.S. Кстати, глядя на твой скриншот, аддоны и Аудио-CD уходят на второй план... Монитор, конечно, шикарный, но я 100% гарантирую, что все размеры шрифтов у тебя должны быть почти в 2 раза крупнее! Они же ДИКО НЕ СООТВЕТСТВУЮТ размерам виджетов, это же баг АО! У меня, например, 1920x1200, и этой проблемы нет (Хотя, во время ЗБТ-1 и ЗБТ-2 были кое-какие проблемы со шрифтами, но я их рапортировал, и они давно исправлены. По-моему, разработчики игры вообще НЕ тестируют её на крупных мониторах. У них даже все текстуры интерфейса заточены под дремучую резолюцию 1280x1024, поэтому, у нас с тобой весь интерфейс игры "размазан", "не в фокусе", кроме содержимого окна аддона Minimap). А у тебя, наверное, 2560x1440, и есть такая вот проблема. Обязательно сообщи об этом в тех.поддержку. Напиши резолюцию своего экрана, и приложи полноэкранный скриншот. Разработчики игры обязаны это исправить.
  12. Сам Minimap не перетаскивается, но этот же код (с некоторыми изменениями) там используется для изменения размера карты. В моей системе, с Minimap иконки не подвисают, но если хоть у одного человека подвисают, значит НУЖНО исправить. Сегодня же исправлю. UPD: Minimap исправлен.
  13. "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
  14. В игре, разница между аддонами такая: PaneLocker - при первом старте иконки закреплены, их можно открепить, нажав на специальную кнопку. Статус кнопки сохраняется в конфиг-файл, т.е. запоминается между игровыми сессиями. LockIt - при старте, каждый раз, иконки НЕ закреплены, но их можно закрепить командой /li. У нас есть два выхода - удалить один из двух аддонов, или оставить оба. Duvodas, что скажешь? По-моему, PaneLocker удобнее для рядовых пользователей (каких тут подавляющее большинство), ну а LockIt скорее рассчитан на программистов, программисты любят аскетизм а-ля Линукс, где всё нужно делать в консоли, и их никогда не смущает необходимость знать наизусть всякие консольные команды. А рядовые пользователи... у них другой склад ума и привычки
  15. Ребят! Ну вы даёте! ) Это ж два взаимозаменяемых аддона: 2010-07-16 19:35:56 - LockIt 2010-07-18 17:16:24 - PaneLocker Что делать-то будем? В истории сайта это уже второй такой случай. В первый раз, это было AutoLoot и AutoPickupLoot. Но тогда, Wait, автор второго аддона, сказал, что т.к. аддон уже сделан раньше него, то его собственную версию можно удалить (т.к. аддоны были практически идентичные). Но тогда случился ещё один курьёз - Skillcoder проаппрувил оба аддона. Так сложилось, что они оба остались... Ну а что в этот раз будем делать, когда у вас такие идеологические разногласия? =)) Оба аддона работают. Моё личное имхо, PaneLocker лучше, т.к. у него есть иконка, и не нужно запоминать команду /li. Но LockIt появился раньше. Что делать будем?
  16. Ага Это из совместного обращения к пользователям от Astrum-Nival и gPotato: Grab bag and a word from our Producer (7/16/2010 6:16:53 PM) Там ещё много всего интересного понаписано, рекомендую заглянуть, если кто не читал
  17. Не нужна - в смысле, она не нужна здесь по логике. Если её выкинуть, та же функция становится в 2 раза проще: Code: function DNDReg(wtWidget, ID) mission.DNDRegister( DragNDrop [ "Form" .. ID ] .wtReacting , DND_WIDGET_MOVE * DND_CONTAINER_STEP + ID, true ) ------------- загрузка позиции local AddonName = common.GetAddonName() local SectionName = AddonName .. "_Widget_" .. tostring(ID) local CFGPlacement = common.GetGlobalConfigSection( SectionName ) or wtWidget:GetPlacementPlain() wtWidget:SetPlacementPlain( CFGPlacement ) ------------- end
  18. Удивительно, но один и тот же код, в разных аддонах, может вызывать, а может и не вызывать зависание иконок. Например, я знаю, что в GuildGui1b и в AnatomySelfDefence абсолютно одинаковые DND_core.lua, однако (по крайней мере, в моей системе) GuildGui1b проблем не вызывает, а AnatomySelfDefence вызывал (до сегодняшнего фикса). Подозреваю, что здесь ещё имеют значение какие-то различия в XDB-файлах. Было подозрение на MainForm (т.к. это особенный виджет - сплошная мистика ), но, вроде, не в нём дело. Можно было бы конечно, потратить несколько часов на поиск такого конкретного различия в XDB-файлах, но не нужно, т.к. уже известно, как именно можно исправить это в LUA. P.S. В верхнем сообщении обновил: "AnatomySelfDefence - уже починили"
  19. OK Я всё собираюсь написать очень развёрнутый пост в форуме GuildGui1b, но... очень увлёкся... игрой в Аллоды ) P.S. Вижу, в DND_core.lua уже исправлен баг, вызывавший зависание иконок при пертаскивании
  20. Да, коряво Структура NewDNDWidgetInfo - это часть библиотеки AoClassLibrary.lua, написанной DarkMaster для аддона DarkDPSMeter, и она здесь совершенно не нужна.
  21. Честно говоря, я в последнее время даже боюсь сюда заглядывать. Идеи стоящих аддонов здесь попадаются регулярно, а делать их сейчас, как бы, некому. Причин несколько. Первая - ЛЕТО , вторая - постоянная течка кадров, разработчики уходят, и приходят новые. Тут сейчас только пара человек активных, и то, времени у них хватает только на доработку собственных аддонов. Моих сил сейчас хватает только на то, чтобы поддержать самые полезные из существующих аддонов в достойном состоянии, и то не успеваю. А сколько бы ещё хотелось доработать существующих, и сделать новых!.. На днях починил DarkDPSMeter, сейчас копаюсь в аддонах Vermin'а, чтобы они заработали в иностранных версиях. Потом, у меня есть свой собственный "застывший в разработке" аддон - моя версия миникарты, очень хочется закончить его, только руки всё не доходят. Попутно пишу статьи, чтобы другим было легче делать аддоны, например, как сделать многоязычный аддон, или как починить баг с "зависанием" иконок, как сделать аддон совместимым с европейскими версиями.
  22. There are several levels of protection. Not only the filesize, but checksum of PAK file (or, maybe, checksum of every file inside it) must remain the same. And I guess, there can be other traps as well.
  23. The only way to bring back all graphical mods - is to find a way to HACK the protection. I have tried to do it, but my knowlodge is too weak, because I'm not a hacker. But it IS possible, we just need to find an experienced hacker.
  24. А его можно перетащить, ухватившись за полоски здоровья/маны.
×
×
  • Создать...

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

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