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

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

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

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

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

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

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

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

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

Подробнее

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

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

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

DarkMaster

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

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

  • Посещение

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

  1. Комрад kosh - сделай ингейм настройки. Вкл\Выкл, регулирования степени прозрачности, в идеале выбор цветов.
  2. 2 wait мммм в чего не понятного ? Я хз каким редактором ты открываешь луа, я пользуюсь стандартными правилами табирования, использую длинные - "говорящие" именя для функци и переменных. Возможно твой редактор не правльно отображает табы, открой блокнотом - там все норм *) Или ты не понимаешь то что написаано ? Спроси я рзьясню
  3. Не только твои. Мы посути маленькое комьюнити. Активных кодеров по пальцам сосчитать, аддон - opensource. И ессно все друг у друга "тырят" ( в хорошем смысле слова ) идеи по реализации. Это гут - ибо это наиболее быстрый способ - обмена опытом. Просто хорошии идеи нужно - обизательно нужно собрать в 1ой библиотеки. Это поможет нам всем и новым кодерам кторые будут приходить писать аддоны для АО.
  4. Шас заканчиваю обновление. Прикрутил там работу с Childs. Но еше не все оттестил. Рабоатет пока что примерно так - по мимо методов относящихся к виджету не посредственно ( SetWidht, SetPosition, и т.д. ), добавли набор методов- Get\SetChild...( WidgetName, ChildName ). На практике очень удобно получаеться. Например: У меня есть панелька - на ней еше одна панелька( прогресс бар), кнопка, 3 текствью. Вот иреархия: Code: PlayerInfoPanel PlayerInfoBar PlayerInfoButton PlayerInfoTextViewName PlayerInfoTextViewDamage PlayerInfoTextViewPercentage Классическим способом я должен завести 6 переменных в глобальной области и пригрузить туда все это, а если таких панелек N то N*6 *))))) Ну или массив, но подгрузка все равно напрягает. А через класс все просто и красиво и минимум кода : Code: PrototypeWidgetsContainer = CreateWidgetsContainer() PrototypeWidgetsContainer:Init() PrototypeWidgetsContainer:AddWidgetByName( mainForm, "PlayerInfoPanel", "PlayerInfoPanel" ) PrototypeWidgetsContainer:HideAllWidgets() PlayerDPSInfoList = CreateWidgetsContainer() PlayerDPSInfoList:Init() for i = 0, 5 do local wtName = "PlayerInfoPanel" .. i PlayerDPSInfoList:AddWidgetByDesc( wtMainPanel, PrototypeWidgetsContainer.Widgets [ "PlayerInfoPanel" ] , wtName ) PlayerDPSInfoList:SetPosition( 20, 47+ i * 24, wtName ) local newW = 242 * ( (100 - i*10) / 100 ) PlayerDPSInfoList:SetChildWidth( newW, wtName, "PlayerInfoBar" ) PlayerDPSInfoList:SetChildColor( ClassColors [ "MAGE" ] , wtName, "PlayerInfoBar" ) local wtNameTextView = PlayerDPSInfoList:GetWidgetChildByName( wtName, "PlayerInfoTextViewName" ) wtNameTextView:SetVal( "Index", common.FormatFloat( i+1 , "%d" ) ) end Обратите внимание на PlayerDPSInfoList:SetChildWidth( newW, wtName, "PlayerInfoBar" ), я не где его не подгружаю *))) Я просто обращаюсь к нему через родительский Виджет - и меняю его *)))) Или вот еше PlayerDPSInfoList:GetWidgetChildByName( wtName, "PlayerInfoTextViewName" ), тут я беру дочерний виджет, моего виджета по его имени и дальше работаю с ним. Но пока что мой класс поддерживает вложенность 2 порядка, то есть "дети" виджета доступны через методы Get\SetChild...(...), и это не решате проблеммы когда у меня сложная структура виджетов с 3йным или Nым уровнем вложенности. Но я уже придумал как это решить - осталось тока сделать и протетстить. Я буду каждый виджет в WidgetsContainerClass описывать собствено переменой виджета и переменой WidgetsContainer, которая изначально убдет пуста - при создании виджета и наличии у него детей, я буду создавать "под контейнер" для этого виджета, который в свою очередь будет делать тоже самое, таким образом, при создании главного виджета - создадуться все виджеты-дети, при чем если у них тоже есть дети, то создадуться и они. Вот такая идея. А практичность.... по начало может показаться - сложно, но когда вникаешь в структуру класса - становиться удобно. Да вообще активнее участвуем, а то 1 голова хорошо, а гидра рулит *))))
  5. Чем я шас занимаюсь: 1. Переделываю полноситью дизайн. Делаю его боее АО френдли. Изначально было в планах сделать меняющийся скин - типа скин аддона под рассу игрока. НО увы пока это сильно муторно делать *))) Проэтому просто делаю дизайн на игровых текстурах - чтоб аддон не выбивался из визуального ряда игры. 2. Полностью пределываю код. Разабрался с классами в ЛУА. ООП рулит - это аксиома. Переделываю всь аддон по нововой. Прощайте куча файлов с панельками и т.д., привет динамическое создание обьектов. Саму структуру папок аддона поччишу, будет понятно и наглядно, что где куда. Оптимизирую код. Исправлю ряд известных багов. 3. Добавление стастистики по спеллам ( крит, мисс и т.д.) - в виде тултипа. 4. Реализовать рейд. Вот по этому и пришел к первым 2м пунктам - лучше шас сделать редизайн правку кода, а то погрязну в куче файликов. 5. Хранение информации по 5 последним боям и хранения "Полного отчета" ( инфа от ручного сброса до ручного сброса, тоесть собирает инфу все время не обнуля при смене боя ) 6. Прикрутить Хил\ХПС. Вот такие планы на будушее...
  6. Ок спс за баг репорт. Буду разбираться
  7. Еше момент : DragNDrop.Screen = widgetsSystem:GetPosConverterParams() Ты берешь данные об экране 1 раз при инициализации..... это не верно, так как пользователь может изменить разрешение экрана в ходе работы. Мне кажеться правелнее всеже брать инфц о скрине каждый раз когда пытаешься потащить.....
  8. SLA давай оберенм в класс, да запихнем в AOClassLibrary.lua - можно в тотже класс WidgetContainerClass - и там сделать методы типа - SetMobvable( true\false, WidgetName ), и он кстати сам будет DNDReg()\DNDUnreg() делать при скрытие и показе фрейма. Как думаешь ?
  9. Оффтоп : Почти 8к закачек за 20 дней *))) и всего 6 "спасибо" ...... Россия ..... *)))))))))))))
  10. хмммм, то есть сначало был хил, потом вов ремя этого же боя ты начал ДПСить...... возможно это обясняет причину бага. Если есть возможность четко проерь еше раз - сначало хил , потом ДПС за 1 бой. Если баг повториться тоя скорее всего знаю иорткуда ноги растут *)
  11. Привествую комрады.... Я думаю сделать билбиотеку классов. Это упростит разработку и повысит читабильность кода. Суть в том чтобы создать набор классов для работы с компонентами, удобную и понятную обертку над Ниваловским АПИ, а так же обизательно реализовать там систему проверок и логирования ошибок, что значительно упростит дебаг. Эту библиотеку каждый сможет скачать и использовать. Планирую обновлять тему и при вашем содействии расширять функционал данной библиотеки. Что сделано: 1. WidgetsContainerClass - это класс для управления виджетами. Включает в себя - создание, виджетов 2мя способами и общие для всех виджетов фукции управления. Описание: 1.1 CreateWidgetsContainer() - создает экземпляр класса. 1.2 Init() - инициализирует переменные класса 1.3 AddWidgetByName( wtFrom, Name, WidgetName ) - добавляет в контейнер виджет по имени, используеться для создания "статически" виджетов. Где: wtFrom - носитель виджета, Name - имя в .xdb файле, WidgetName - имя в контейнере. 1.4 AddWidgetByDesc( wtFrom, wtFromPrototype, WidgetName ) - добавляет в контейнер виджет по "образу" существуюшего виджета. Где: wtFrom - носитель виджета, wtFromPrototype - виджет по образу которого требуеться создать виджет, WidgetName - имя в контейнере. 1.4 Далее в библиотеки функции работы с виджетами. Изменения размеро, установка позиции, перемешение и т.д. Пример использования: Code: Global( "WidgetsContainer1", {} ) Global( "WidgetsContainer2", {} ) . . . WidgetsContainer1 = CreateWidgetsContainer() WidgetsContainer1:Init() WidgetsContainer1:AddWidgetByName( mainForm, "TestBtn1", "FirstTestBtn" ) WidgetsContainer1:SetPosition( 500, 200, "FirstTestBtn" ) WidgetsContainer1:SetWidth( 100, "FirstTestBtn" ) for i = 1, 5 do local wtName = "TestBtn" .. i WidgetsContainer1:AddWidgetByDesc( mainForm, WidgetsContainer1.Widgets [ "FirstTestBtn" ] , wtName ) WidgetsContainer1:SetPosition( 500, 200 + i * 32, wtName ) end WidgetsContainer1:AddWidgetByName( mainForm, "TestBtn2", "SeccondTestBtn" ) WidgetsContainer1:SetPosition( 500, 400, "SeccondTestBtn" ) WidgetsContainer1:SetWidth( 100, "SeccondTestBtn" ) WidgetsContainer1:AddWidgetByName( mainForm, "TestBtn1", "FirstTestBtn" ) -- попытка добавить уже обьект с уже сушествующим имененм - в Лог выведеться сообшение, Добавление не будет сделлано. WidgetsContainer1:AddWidgetByName( wtBBB, "GGGG", "GGGG" ) -- попытка добавить обьект от несушествующего виджета wtBBB = nil, выведет ошибку в Лог. WidgetsContainer2 = CreateWidgetsContainer() WidgetsContainer2:Init() WidgetsContainer2:AddWidgetByName( mainForm, "SuperBtn", "SuperBtn1" ) WidgetsContainer2:MoveWidget( 10, 30, "SuperBtn1" ) WidgetsContainer2:SetWidth( 100, "SuperBtn1" ) Просто, читабельно, безопасно ( проверки внутри функций, вывод в лог ошибок ), удобно. Как видно из премера можно создавать кучу кантейнеров - напрмиер для разных типов виджетов или создать 1 контейнер. 2 я привел для примера. Ктому же это пример как делать "классы" в LUA - для тех кто этого еше не умеет. Можно придумать много таких полезных классов оберток. Это вопрос времени и фантазии. *)))) Вот сам файл: AOClassLibrary.lua
  12. Вот пример. Code: <?xml version="1.0" encoding="UTF-8" ?><WidgetPanel> <Priority>100</Priority> <Name>SpellInfo1Bar</Name> <Children> </Children> <BackLayer href="Bar1.(WidgetLayerTiledTexture).xdb#xpointer(/WidgetLayerTiledTexture)" /> <Placement> <X> <Align>WIDGET_ALIGN_LOW</Align> <Size>242</Size> <Pos>7</Pos> </X> <Y> <Align>WIDGET_ALIGN_LOW</Align> <Size>18</Size> <Pos>7</Pos> </Y> </Placement> <reactionOnPointing>GGG1</reactionOnPointing> </WidgetPanel> Далее все так же регестрация, common.RegisterReactionHandler( OnDarkDPSMeter_GGG1, "GGG1" ), ну и все тоже самое с вызовом тултипа.
  13. хехех а я пишу простов блокноте *)))) спртанские условя - тренеруют внимательность *)))
  14. Увы, <reactionOnPointing>tooltip</reactionOnPointing> работает только для WidgetPanel, или я что то не так делаю *)))) Но получилось только к панельке прикрутить
  15. Все выше сказанное мной лишь ответная реакция на твою упретость *))) Реально это бесконечный процесс. Спорить будем долго. Суть в том что - нормальные игры предоставляют нормальное АПИ и только наша "Игра-Кактус" предоставила нам "Кактус-АПИ". Я вообше не понимаю чего тут спорить то - факт: то что Нивал не предоставил нам адекватного способа работы со строками говорит лишь об одном - об их халатном отношенни к работе, и к нам - модмейкерам. И искать тут какието оправдания - типа : "...а вот у себя вскриптах они использует метод - через ж...". Клиента мало волнует что и как использует разбр для себя, клиент хочет получить качественную услугу, а модмейкеры такиеже клиенты - как и рядовые игроки. Это и отличат нас от буржуев - бурги заботяьться о комфорте своих клинтов, наши - нет. Это давно доказанный факт. Все началось если ты не забыл с того что ты спросил: " ... А зачем вам это нада ?...", я ответил, но видимо тебя мой ответ не удовлетворил. Просто прими как факт - нужна нормальная работа с стороками, с возможностью вывода в чат, от этого выиграют все: мы, разбры, рядовые игроки. Я думаю стоит закрыть флуд *) Если ты остался убежденным в своей позиции, я просто ужэе и не знаю как иммено тебе донести мысль *) Заранее приношу извенения если задел чем либо.
  16. Хммм - разабратсья будет сложно, так как увы у меня нет не то что конст пати для тестирования, но и даже 40 лвл перса. В идеале бы иметь парачку персов 40 лвл было бы не плохо для теста, а лучше конст пати - но это мечты..... А что такое Жестекие Удары ? С вылетанием пока никак не решить проблему - это косяк механики игры. Суть в том что когда игрок вылетает попытки сбора инфы для данного игрока - крашат данные, я постараюсь это обработать более коректно проверками и заглушками.
  17. Quote: выводилась в какой-либо канал чата, и даже не слышал о таком. А я с этим встречался милеон раз как в виде отладочной инфы так и ввиде полезных аддонов. Вот примеры DeadlyBossMods, BigWigs, BattleGrounds .... - выводят разлисные предупрежденяи в чат по боссам событиям, пвп и т.д., может писать как видимые только игроку так м выдимые пати\рейду. В практически всех аддонах имеющих внутриигровую синхронизацию. ВОВ это не АО там все намного глубже и продуманнее ( кроме графики, по которой АО беспороно впереди, да и только ). Так вот там есть возможность создавать чат каналы - публичные и скрытые - то есть я моугу создать канал с любым Именем, с паролем или без. Любой игрок сможет присоедениться к данному каналу и обшатсья со мной и теми кто в этот канал подключенн. Например - у нас есть каналы ИмяГилдииПристы, ИмяГилдииОхотники .... и т.д. Там конкретные классы обсуждаю свои конкретные темы - по игре, механике, тактике на боссов и т.д. Конечно, кто то использует это, а кто то нет - на свое усмотрение. Но даже не это самое важное - синхронизация аддонов вот что дествительно важно. Как скажите 2 аддона установленных у разных людей должны синхронизироваться в АО ? Ответ - никак, пока нет возмжности нормальной работы с чат мессагами. В ВОВ я могу создать для своего аддона специальный чат для синхронизации - поставить ему тип - скрытый, и слать\чиать туда инфу для синхронизации данных между аддонами у разных игроков. Предупреждая очередной глупый вопрос - "Зачем?", приведу яркие примеры: AltoHolik и аддоны категории InfoParsers - хранит информацию об альтах( в частности и о чем угодно в случае парсеров ). Игроки установившие аддон и разрешившие ему публиковать данные о себе - позваляют другим игрокам с аддоном, видеть все о своих персонажах - сколько бы их не было. Профы, шмот, статы ... все все все. МЕГА удобная вещь для управления гилдией - говорю по опыту, так как я сам ГМ. ДБМ, БигВигс - куча обемена инфой, предупреждает весь рейд о том на кого легли вредноносные дебаффы, кого нада спасать, о спец способностях босов и т.д. всего связанного с энкаунтерами. ДПС меетр и прочии метры - синхронизируються для повышения точности отображаемого результат. Аддоны управления рейдовой валутой, DKP, KP, EGP - аддоны которые позваляют автоматизировать процесс раздачи условных рейдовых очков. ( кто не знает что это такое - гуглите: DKP описание ). Автоматизация распределения лута РейдЛидером и т.д. И это только то что первое приходит на ум..... А теперь комрад kst еше раз скажи мне что не нужно выводить в чат... *)))) Quote: АПИ, очевидно, далек от совершенства, но тем не менее это тот же самый АПИ, которым пользуются сами разработчики, и на котором написана вся или почти вся интерфейсная часть игры. Другое дело, что часть этого АПИ не документирована... Дали бы комеенты и документацию - все делают по похеру лишь бы отвязаться. Я не знаю как они там у себя это все делают, понять сложно, если ты уверен что делают - покажи премер, если не влом. Скорее всего влом, и мне влом долго копаться, потому что я предпологаю должен быть адекватный, человеческий способ - что то делать со строками, а не гадать что и как они там сделали. Quote: Второй же тип, это не просто "замах на универсализацию", это вполне реализованная концепция минимума затрат при локализациях. Да для себя, для команды разбров - это круто. Но нам то это все нахрена в аддонах ? Близзы сделаи проше - локализаци оставлии на усмотрения авторов аддонов. Дали им спец структуру данных, в котрой описываеться локализация и все - и никаких проблем ! А тут намудрили.... вернее подумали только о себе.... Quote: люди упорно пытаются проломить стену (капитальную!), вместо того чтобы поискать дверь. ;-) Помоему тут как раз и пытаються найти дверь, иммено дверь а не восмиугольный проем в потолке в который нада пролазить предворительно трансформировав себя в 5-мерное пространсво *)))) ( это я по поводу файликов, и VauledText )
  18. alpha 0.0.7 1. Поправленны баги с перетаскиванием, и Alt + Z 2. Запоминает позицию - при повторном заходе в игру загружает в последней позиции. 3. Переработтана система инициации боя. Теперь не теряте первый выстрел. Требуеться детальное тестирование в группе
  19. хммммм ... чудненько *)))) Послушайте уважаемый комрад kst. 1. Вывод статистики - это вопрос решаемый самим игроком - куда выводить. Решаейт игрок. У меня стаж ММО 9 лет. 2 года - Ultima, 2 года Everquest, 5 лет WOW. Поверьте моему опыту - вывод статистики нужная и важная функция в ДПС метрах. Причин много - от "попантоваться", до анализа данных. И аддон должен предоставлять такую возможность - в виде вариантов выбора при экспорте. Темболее это отроботана годами.... но если вы сомневаетесь в моей ( да и не всего прогрессивного ММО собощества ) позиции - можно конечно спорить, но лучше согласиться ... ибо в конце полемики все равно согласитесь, если конечно не упретесь рогом. 2. Я пишу аддон для многих игр, WoW, AoK, WAR, Ragnarok, список могу длинный привести и не только аддонов. Но такого жуткова, сырово, и не удобного АПИ я давно не встречал. 3. Манипуляция со строкой - это один из базовый пунктов который должен быть доступен в среде разработке, особено игровых аддонов. Нивал хотел как лучше а получилось как всегда - их "локализованная строка" - это замах на униварсализацию, под разные клиенты, но почему обрезали доступ к ней разработчикам аддоно ??? Это глупо. 4. В многих проектах есть доступны выводы как в чаты, так и в фреймы чатов. Разница в том что при выводим в чат - это видять окружающие, при выводи в фрейм чата - только игрок. Это удобно и нужно для отладки обьявлений и т.д Аддонов где это нужно, очень очень очень много. Примеров масса. Адекватных причин не дать мод мейкернам НОРМАЛЬНУЮ работу со строками и выводом я вообще не вижу, вернее догадываюсь об одной, но она опятьже выставляет нивал не в лущем свете. Quote: о таким образом и сами разрабы ей пользоваться не могут в конечных вариантах своих модулей, т.е. нет таких мест где они сами бы конвертировали string <--> WString, а нам бы при этом не давали :-) Простите комрад я уж хз что они там сами делаю в своих модулях не копался, если вы вкурсе просветите нас. Quote: "-Вася, а почему ты все время ищещ инфу на буржуйских ресурсах ? Ведь можно найти на русс, и понятно и быстрее !""- Хехе Петя, зеленый ты еше. Только на русских форумах - на четко поставленный вопрос, в 90% случаях пишут - А зачем тебе это нада ?, в место ответа..." Разговор в курилке, прогрммисткой конторы *) Вообщем комрад, пишет болше по сабжу, а то за флудим тему. Я надеюсь б ольше не будет вопросов - "зачем" *)))))
  20. ООО комрад я обьясню .... 1. Есть переменая FightTime 2. Есть переменая FigthFirstPulledMobName 3. Есть переменая FightDamageDone 4. Есть список переменных PlayerName[ i ] 5. Есть список переменных DamageDone[ i ] Я хочу вывести в чат следующее: Бой с "СуперМоб-ом" занял 123 секунды, за бой было нанесено 12345 урона 1. Вася - 2314 ( 1231 ) 57% 2. Петя - 1242 ( 345 ) 36% 3. Маша - 245 ( 122 ) 18% В АО Апи для этого мне нужно использовать - group.ChatSay( text ), где text - обизательно должен быть WString. Так вот я не могу написать вот так: Code: text = common.FormatInt( i, "%d" ) + "." + PlayerName [ i ] + DamageDone [ i ] + " ( " + DPS + ")" + Percentage + "%" так как нету конконтинации для WString. group.ChatSay( text ) - кушал обычные строки, или была бы возможность конверировать строку в WString, которая кстати есть ToWS( string_text ) , но закрыта разбрами в АПИ. Этого бы "вайна" не было бы, если бы
  21. По пунктам. 1. Баги с перетаскиванием ( как и вообще любые баги ) - описывать максимально подробно. Ребят - очень сложно тестировать, так как мало кто помогает, к тому же восаздать баг сложно если вы просто пишите "гличит при перетаскивании", старайтесь более развернуто дать описание бага, что куда как воспоизвели. По сабжу - багами перетаскивания займусь. 2. Насчет неправльной сортировки - опять же отловить очень сложно так как нету конст игроков для тестирования. Я уже не один ответ писал по этому поводу. Либо ждите когда поченю - при наличии пати и выскакивании бага, либо точно в деталях опишите как иммено произошел баг, или помогите - конкретно протестировать. Для этого - заведите перса на Сервере : Горн Войны - Империя, качните его в пределах 8-12 лвл. Отпишите как с вами связаться - Skype, сотовый - можно в приват мне. Чтоб когда я захожу тестировать я мог набрать вам - и мы бы залогонились и потестировали. 3. Setras - сортировать, что по "Х процентам" что по "Урону" - это одно и тоже. Смысл сортировки в том чтобы видеть визуально кто на сколько друг от друга отстает. Ситуация когда игроки "дышат в затылок" неизбежна. Я думаю из за того что пару чел постояно прыгают на первых строчках - отрубать эту полезную фичу не стоит. Но в будушем можно вынести это опцией в настройки аддона. 4. TalisMAN - хммм я подумаю над сменой цвета для Приста, мб предложищь свой вариант ?
  22. А не фига не вышло ! *))) GetText - это метод ValuedObject - а его как я понял реально получить только из обектов: Спелл Абилка Игрок Юнит..... Кароче жопа. Поднял на офф форуме тему - посмритим ра реакцию.....
  23. Если у комрадов модмейкеров есть вопросы по аддону - что и как я реализовал, с удовольст отвечу, спрашивайте.
  24. 2 LYNX - пожалуйста конекретнее. А лучше предложи свой дизайн. Сделай в фотошопе дизайн панелек так как ты это видишь и выложи тут скриншот. Я пока не сильно уделя время дизайну - много другой работы по аддону. В идеале хотелось бы сделать разные скины - в зависимости от рассы 8) Зем дизайн, орк дизайн, хадаган, кания, эльфы, гиберлинги. Ну и чтобы для начало подключался то или иной правкой 1 переменой в коде аддона, а позже вообще - авто определения рассы игрока и загрузки того или иного дизайна. Но это в далеком будущем *) Ну или если кто то поможет с дизайном.
  25. Первое что приходить на ум - сделать ValuedText - сложить в него WString-i и потом взять скомпоновоннаую строку GetText -ом. Шас попробую сам на практике .... отпишу что вышло
×
×
  • Создать...

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

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