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

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

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

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

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

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

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

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

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

Подробнее

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

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

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

ramirez

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

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

  • Посещение

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

  1. Текстуры в вариантах кнопки подменять нельзя. Можно подменять только BackLayer и FrontLayer, но зато у любого виджета. Для чего и существуют SetBackgroundTexture и SetForegroundTexture.
  2. Code: local dX = projected.posX - avatarPos.posX local dY = projected.posY - avatarPos.posY Я вот не вкурил чота. projected - это вообще-то координаты отклонения от центра экрана, в удвоенных долях размеров вьюпорта [-1, 1]. Это в документалове есть. Зачем отнимать теплое от мягкого? Тут половину кода можно выкинуть, заодно с комментами. Если это мусор, зачем им делиться на форуме?
  3. Совет: аддон-менеджеры, все что есть, снеси к чертям. Если ты не пишешь аддоны, то они тебе и не нужны, только проблемы создают. Если юзерские аддоны друг друга никак не выгружают, то галки в стандартном показывают правду.
  4. So I was right. Damn, I'm good! © Duke Nukem =) Well, I got question too. Which tool do you use to decompile scripts? I can't find one that actually works. It seems they all need some kind of debug data included in scripts.
  5. Well, obviously you can't set metatable to userdata from script, so your mainForm should be a table. Since it's not, and all the widgets we have from client side are userdata, there should be some script (probably within \Interface\Common\Script\) which makes them tables. So link all other scripts from \Interface\Common\Script\ to your add-on and try again. If it does the trick, remove those scripts one by one and restart client until add-on becomes all broken over again. This will leave you with one or several scripts essential for classes to work. My money's in particular on ScriptWidgetCore.luac, since it has funny name. All other possible candidates are far too old, you can get them among ancient scripts from version 1.0.03.26.2. I've seen 'em somewhere on this forum. Good luck. Here's some similar thread.
  6. 6 цифр - способ поделить текстуру на 9 частей: 3 по горизонтали и 3 по вертикали. Каждая цифра - размер части текстуры по данной оси.
  7. Quote: Вполне возможно что переменная передается через userMods.SendEvent() и приходит в аддон уже в следующий кадр. Все ивенты, включая посланные из скрипта, обрабатываются в том же кадре, покуда стек ивентов не опустеет. Игру можно намертво остановить аддоном, посылая ивент в его же собственном обработчике.
  8. Code: Global( "ADDON_NAME", common.GetAddonName() ) common.RegisterEventHandler( function( event ) local a, b, addonname, text = string.find( userMods.FromWString( event.text ), "/script%s*(%a+) %s*(.+)" ) if addonname == ADDON_NAME then common.LogInfo( ADDON_NAME, text ) assert( loadstring( text, "runtime call" ) )() end end, "EVENT_UNKNOWN_SLASH_COMMAND" ) Usage: type in chat line: "/script *AddonName* *code*" Example: Code: /script MyAddon common.LogInfo( "Hello world!" ) Code: /script MyAddon common.LogInfo( "My name is ", object.GetName( avatar.GetId() ), "." )
  9. А Lua тут ни при чем, WString - это C'шный класс. Локализованная строка. В Lua представлена типом userdata, то есть это не string. С ней ничо нельзя сделать, кроме как в функцию передать. Разрабами подразумевалось, что нужно взять некий текст, набранный юзером с клавиатуры в текстбоксе, и передать его на сервер в качестве сообщения гильдии, в которой состоит персонаж юзера. Мне непонятно желание взять текущее сообщение гильдии и выставить обратно его же. Ведь ничего не изменится.
  10. О проблеме написано в самой ошибке: вместо wchar_t ты передаешь string.
  11. http://www.jucs.org/jucs_11_7/the_implementation_of_lua/jucs_11_7_1159_1176_defigueiredo.html 4 Tables
  12. На каждое добавление там вызывается полный пересчет позиционирования контейнера вместе со всеми его детьми. Больше 40-50 детей лучше не делать. Quote: Есть какая-то возможность ускорить запихивание обьектов в контейнер? Можно добавить одну панель, и дальше пихать все в нее, а в конце перепозиционировать все вручную. Будет немного быстрее. Quote: Или хотя бы есть возможность доступа к обьектам, уже находящимся внутри контейнера без организации своего списка? Нет, этого не дали, нужно отслеживать самому. Quote: Да. А куда деваются обьекты из контейнера после использования функции RemoveItems()? Они деваются в никуда. =) После удаления из контейнера объекты подвисают в состоянии "нет родителя", и если в скрипте потерять на них ссылку, то потом найти их будет невозможно. Quote: Или есть другие способы организовать большие списки? Можно делать постранично. С переключателем страниц, как в сумке с лутом или аукционе.
  13. То же самое и я написал выше. Quote: только зачем тут do..end ? Чтоб к локальной функции constructor за пределами do..end никто не смог обратиться.
  14. И откуда такой код взялся, интересно? Quote: может быть, можно без объявления класса создавать объекты обычным образом? Любая таблица - объект, созданный обычным образом. В чем проблема-то? Если так сильно не хватает такого Class, то вот: Code: local function r( cl, t ) return setmetatable( t or {}, { __index = cl } ) end local function d( t ) return setmetatable( t or {}, { __call = r } ) end function Class( name, t ) Global( name, d( t ) ) end
  15. Quote: Вопрос: 1. Пет бил по трупику моба? 2. Ивенты в АО такие ивенты, что им плевать когда приходить и пет на самом деле ударил до летального удара некроманта? 3. Может, есть еще какое другое объяснение этого феномена? 1. Нет. 2. Тоже не совсем так, но пет все же успел ударить до смерти моба. 3. Есть: В АО работает механизм, задерживающий отправку в скрипт ивента про урон до срабатывания соответствующего триггера в анимации удара. Чтоб урон приходил "точно во время" удара. Как и всякая нашлепка, он глючит и задерживает что попало на сколько хочет. В целом, вроде работает. Но при смерти моба отдает все накопленное разом, так как смерть не подстраивается под анимации ударов, труп моба отлетает до совершения удара. А ивенты в пределах одного клиентского тика приходят в скрипт почти в произвольном порядке. Отсюда и фигня в логе. Quote: Как это дело обрабатывать то?? Финальный удар по мобу в принципе метится в EVENT_UNIT_DAMAGE_RECEIVED специальной булевой меткой lethal. Но по факту лучше собирать удары до тех пор, пока труп моба не отдеспавнится, это EVENT_UNIT_DESPAWNED. Можно еще ловить EVENT_UNIT_DEAD_CHANGED, но по-моему он тоже особо не поможет.
  16. Поддерживаются TGA 24- и 32 бита. Про PSD - а оно надо реально? Вроде бы должен сплющивать RGB-содержимое и использовать первый альфа-канал, если есть. Степень двойки в размерах реально пофигу, можно любые делать, оно само округляет.
  17. Quote: BTW: Do you know the difference between USDEV_CANNON and USDEV_BEAM_CANNON ? Surre, lads! =) USDEV_CANNON - it's a.... voila, cannon! USDEV_BEAM_CANNON - artillery or lightning rod or pew-pew-lazorr! also a.k.a лучемет a.k.a torpedo launcher.
  18. Using localized strings as table indices is very bad idea. Why don't you use this: Code: device.GetUsableDeviceType( deviceId ) returns enum value (uint): USDEV_NOT_USABLE_DEVICE USDEV_USABLE_DEVICE USDEV_REACTOR USDEV_ENGINE_HORIZONTAL USDEV_ENGINE_VERTICAL USDEV_RUDDER USDEV_CANNON USDEV_BEAM_CANNON USDEV_TORPEDO USDEV_SHIELD USDEV_NAVIGATOR USDEV_REPAIR USDEV_TELEPORT USDEV_LAZARETH USDEV_TREASURE USDEV_REMOTE_RUDDER USDEV_REMOTE_ENGINE USDEV_REMOTE_ENGINE_HORIZONTAL USDEV_REMOTE_ENGINE_VERTICAL USDEV_BOARDING USDEV_SCANER USDEV_DECOR_SAILS USDEV_DECOR_NAME USDEV_DECOR_FLAG USDEV_DECOR_STERN USDEV_DECOR_LIGHTHOUSE USDEV_DECOR_STATUE USDEV_DECOR_FIGUREHEAD
  19. Quote: Когда игрок уходит за экран или за препятствие - в его направлении виден синий флажок. На самом деле существует два аддона, ContextOvertip и ContextPOIMarker. ContextOvertip развешивает на все подряд 3D-виджеты с именем, здоровьем и прочим. 3D-виджеты всегда проходят z-check, поэтому если он скрылся за деревом, то скрылся. А ContextPOIMarker вешает на экране маленький значок, указывающий, где спрятался искомый объект в случае, если он за границей экрана или за препятствием. Это не 2D- и не 3D-виджет, это обычный виджет, координаты на экране для которого сообщает специальный кусочек Lua API, а позиция обновляется почти каждый кадр. Так вот, разработчики в припадке бесконечной мудрости решили, что оба аддона будут пользоваться одним и тем же набором иконок, но при этом в один и тот же момент только один из них имеет право показывать эту иконку. Как только объект заходит за препятствие, Overtip свою иконку плавно скрывает, а POIMarker вешает почти на том же месте свой значок. Ну, и наоборот.
  20. Нельзя ее сменить из скрипта. Бери виджет из параметров реакции и ориентируйся по нему. Ему можно имя поменять по крайней мере.
  21. Починил и положил. Но у бургов будет только экспа показываться. Вот подарки взамен: Code: Global( "ADDON_NAME", common.GetAddonName() ) common.RegisterEventHandler( function( event ) local a, b, addonname, text = string.find( userMods.FromWString( event.text ), "/script%s*(%a+) %s*(.+)" ) if addonname == ADDON_NAME then common.LogInfo( ADDON_NAME, text ) assert( loadstring( text, "runtime call" ) )() end end, "EVENT_UNKNOWN_SLASH_COMMAND" ) Это надо добавить в какой-нибудь базовый скрипт, и тогда можно будет командой /script *addon name* *chunk* исполнить любой небольшой кусочек кода в окружении указанного пользовательского аддона, без модификации кода аддона и перезагрузок. Офигенно помогает в отладке ( послать не существующий больше ивент, например ) и вообще познавательно.
  22. Положил новую версию, там опыт показывается. Также добавил репутацию и доблесть, поднял скорость работы раза в два.
  23. Quote: кстати а если у отлетающих цифр убрать постепенное исчезновение до полной прозрачности и просто резко убирать их при достижении границы, это сильно сократит нагрузку? Не, прозрачность никак не влияет. Она в любом случае работает, эффекты там, или нет. Влияет тупо количество виджетов. Чем их меньше, тем быстрее идет. Сижу вот, ахтунг изучаю. В тяжелых местах может наспамиться до ~2500 виджетов. Это дамаг по 25 юнитам с частотой 15 ударов в секунду по каждому. Ваще невесело. Надо будет, похоже, слишком быстро прилетающий дамаг стэкать в одной циферке. Это сократит количество примерно в 5-6 раз.
  24. Привет. Quote: будет ли в будущем развитие сего Я это делал в качестве эксперимента, но думаю, какое-то развитие будет. Впрочем, весьма осторожное, т.к. некоторые товарищи уже сейчас жалуются, что оно тормозит. Quote: но порой сложно разобрать какая цифра за что отвечает Поясню вкратце, что как отображается. - По каждому видимому юниту в игре показывается полученный им урон с его атрибутами ( крит, блок щитом и т.д. ), и полученное им лечение с его атрибутами ( крит, вскользь ... ) - Аддон делит всех на друзей и врагов. - Урон, получаемый друзьями всегда красный. Урон, получаемый врагами - белый. - Лечение, получаемое друзьями - всегда зеленое. Лечение, получаемое врагами - желтое. - Весь урон ( циферки ) всегда летит по дуге вниз ( падает ). Атрибуты урона ( криты ) летят в противоположную сторону по диагонали вниз. - Все лечение всегда летит по дуге вверх ( взлетает ). Соответственно, атрибуты лечения летят в противоположную сторону по диагонали вверх. - Урон и лечение ( циферки ), получаемые друзьями отлетают справа от них. Урон и лечение, получаемые врагами - слева от них. Иногда цифры перемешиваются, и тогда ни черта не понятно. Попробую подкрутить траектории. Насколько я понял, сильно хочется отличать урон/лечение, нанесенные самолично, от всех остальных. Можно сделать чужие цифры и надписи полупрозрачными, а свои - непрозрачными. Отличие будет хорошо заметно, но чужие цифры будут хуже читаться. Можно еще порулить цветами, но тут уже надо пробовать. Еще была задумка менять размер цифр: если урон несерьезный, то циферка маленькая и незаметная; а если критануло конкретно, то цифра большая и красивая.
×
×
  • Создать...

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

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