SLA Posted February 15, 2011 Share Posted February 15, 2011 Патч 2.0.03 - День святого Валентина, или чёрный понедельник? Scroll down for English translation Раньше я удивлялся, почему же блоки карт (благодаря которым работает функция определения локализации клиента GetGameLocalization()), доступны ещё до появления аватара в игре? Ведь, состав этих блоков карт зависит от того, доступны ли игроку некоторые территории... В патче АО 2.0.02, разработчики игры "исправили" эту оплошность, и теперь, функция cartographer.GetMapBlocks() возвращает nil, если её вызвать до появления аватара в игре (EVENT_AVATAR_CREATED). Так вышло, что это испортило очень много хороших, сложных аддонов. Те из них, которые используют "старую" функцию GetGameLocalization() (до версии 2011-01-29), теперь прерывают выполнение функции в том месте, где попадается GetGameLocalization(), и пишут фатальную ошибку в лог (попытка индексировать nil). Их всех нужно ремонтировать. Некоторые аддоны, которые используют "новую" функцию GetGameLocalization() (от версии 2011-01-29 и новее), работают БЕЗ фатальных ошибок, но, скорее всего, Русскую локализацию определяют как Английскую. Эти аддоны нужно просто проверить. Список поломавшихся аддонов: AddonManager AnatomySelfDefence AucEDSman AutoDeleteMail ChatBarAO ChatLogByN00b ControlCountdown DarkDPSMeter GuildGui1b InspectStats Minimap PLATES PlayerHUD QuestTracker Все эти 14 аддонов используют "старую" функцию GetGameLocalization(), и помечены как "Временно не работает". Если вы автор одного из этих аддонов, отремонтируйте и обновите аддон, это вернёт ему "рабочий" статус! Как видите, в этом списке очень много ВАЖНЫХ аддонов, которые нужно срочно починить. Те из них, которые я уже ремонтировал раньше, я починю сам (DarkDPSMeter и GuildGui1b - обязательно). Список аддонов, которые нужно проверить: CT_Total MasterLoot MinimapSla RealAgroM RuneCalc SpamProtect WhisperWindow Эти 7 аддонов используют "новую" функцию GetGameLocalization(), они работают, НО с почти 100% вероятностью, в русской версии определяют язык как английский. Всем этим аддонам оставлен "рабочий" статус (т.к. они ФАКТИЧЕСКИ работают), но их нужно проверить. Если вы автор одного из аддонов, проверьте его, и обновите, если нужно. Как исправлять аддоны 1) Во-первых, заменить старую GetGameLocalization() на самую новую (2011-02-10), из темы "HOW-TO: Многоязычный аддон", она работает БЕЗ ошибок в Mods.txt. 2) Во-вторых, вынести всё, что связано с определением локализации, и её использованием, из Init() (и запускаемых из неё функций) в функцию, реагирующую на EVENT_AVATAR_CREATED. Всё, после этого, аддон отремонтирован Но вот ещё три совета: 3) На всякий случай, ещё в Init(), проинициализируйте язык по-умолчанию - "eng" (не оставляйте nil аж до самого EVENT_AVATAR_CREATED!), это поможет избежать возможных проблем, которые могут теоретически возникнуть в будущем. А по событию EVENT_AVATAR_CREATED, вы пере-инициализируете язык, получив настоящую локализацию с помощью GetGameLocalization(). 4) Не забудьте, что в случае перезагрузки аддона в AddonManager, никакого EVENT_AVATAR_CREATED ваш аддон не получит. Поэтому, в самом конце Init(), вам нужно проверить, существует ли аватар, и если он существует, то принудительно запустить реагирующую на его появление функцию, например: Code: if avatar.IsExist() then OnEventAvatarCreated() end 5) Имейте ввиду, что новейшая GetGameLocalization() умеет определять пару новых языков - Японский ("jpn") и Португальский ("br"). Наверняка, в вашем аддоне НЕТ этих локализаций, поэтому, НЕдостаточно просто определить язык, нужно ещё и проверить, есть ли в вашем аддоне такая локализация. И если её нет, то выставить Английскую. Например: Если ваши локализации хранятся в виде набора TXT-файлов: Code: localization = GetGameLocalization()if not common.GetAddonRelatedTextGroup( localization ) then localization = "eng" end Если ваши локализации хранятся в LUA-файле: Code: localization = GetGameLocalization()if not Locales [ localization ] then localization = "eng" end или (другой синтаксис): Code: CurrentLocale = Locales [ GetGameLocalization() ] or Locales [ "eng" ] Quote Link to comment Share on other sites More sharing options...
SLA Posted February 15, 2011 Author Share Posted February 15, 2011 Patch 2.0.03 - Valentine's Day, or Black Monday? English translation I used to wonder why the map blocks (which are used in client localization detection function GetGameLocalization()), are available before the creation of avatar in the game? Indeed, the contents of map blocks depends on whether the player have access to some territories... In AO 2.0.02 patch, game devs "fixed" this issue, and now cartographer.GetMapBlocks() function returns nil, when it's called before the EVENT_AVATAR_CREATED event. It turned out that it broke a lot of good, complex addons. Those which use the "old" GetGameLocalization() function (older than version 2011-01-29), now breaks in the place where GetGameLocalization() is called, and writes a fatal error in the log (attempt to index nil). All those addons must be repaired. Some addons that use the "new" GetGameLocalization() function (version 2011-01-29 or newer), works WITHOUT fatal errors, but are likely to detect the Russian localization as English. These addons just should be checked. List of broken addons: AddonManager AnatomySelfDefence AucEDSman AutoDeleteMail ChatBarAO ChatLogByN00b ControlCountdown DarkDPSMeter GuildGui1b InspectStats Minimap PLATES PlayerHUD QuestTracker All these 14 addons use the "old" GetGameLocalization() function, are marked as "Temporarily broken" (colored gray). If you are the author of one of those addons, please repair and update the addon, and it will automatically return to "working" status! As you can see in this list there are many IMPORTANT addons that need to be urgently repaired. Those of them that I have already repaired before, I'll fix myself (DarkDPSMeter and GuildGui1b - primarily). List of addons that should be checked: CT_Total MasterLoot MinimapSla RealAgroM RuneCalc SpamProtect WhisperWindow These 7 addons use the "new" GetGameLocalization(), they work, but with almost 100% probability, in Russian version, detects language as English. All those addons have "working" status (because those addons ACTUALLY works), but needs to be verified. If you are the author of one of those addons, please check it and update if necessary. How to fix addons 1) First, replace the old GetGameLocalization() with the newest version (2011-02-10), from "HOW-TO: Multilangual addon" topic, because it works WITHOUT any errors in Mods.txt. 2) Second, take out everything related to the detection of localization, and its usage from the Init() function (and functions called in this functions) to a function which responds to EVENT_AVATAR_CREATED. That's all, the addon is repaired But here are three extra advices: 3) For better security, initialize the default language - "eng" in the Init() function, (don't leave it nil until EVENT_AVATAR_CREATED!), This will help to avoid any problems that could theoretically occur in the future. And on the EVENT_AVATAR_CREATED event, re-initialize the real localization using GetGameLocalization(). 4) Don't forget that if you restart addon in AddonManager, your addon will not get the EVENT_AVATAR_CREATED event. Therefore, at the end of Init(), you need to check whether there is an avatar, and if it exists, then call the function which reacts to avatar appearance, for example: Code: if avatar.IsExist() then OnEventAvatarCreated() end 5) Keep in mind that the latest GetGameLocalization() is able to detect a couple of new languages - Japanese ("jpn") and Portuguese ("br"). Most of addons don't have these localizations yet, so it is not enough to determine the language, you must also check whether your addon have such localization. And if not, then use English. For example: If your localizations are stored as a set of TXT-files: Code: localization = GetGameLocalization()if not common.GetAddonRelatedTextGroup( localization ) then localization = "eng" end If your localizations are stored in LUA-file: Code: localization = GetGameLocalization()if not Locales [ localization ] then localization = "eng" end or (another syntax): Code: CurrentLocale = Locales [ GetGameLocalization() ] or Locales [ "eng" ] P.S. Special for EU/US developers: For testing purposes, you can "emulate" AO 2.0.03 behaviour in AO 1.0.04, by slightly altering the GetGameLocalization() function: 1) Temporarily replace local B = cartographer.GetMapBlocks() with local B = avatar.IsExist() and cartographer.GetMapBlocks() 2) Temporarily replace return "eng" with return "rus" Now it works in AO 1.1.04 just like in AO 2.0.03, and returns "rus" in a case of failure (just like it returns "eng" in a case of failure in AO 2.0.03). Quote Link to comment Share on other sites More sharing options...
Guest walery Posted February 15, 2011 Share Posted February 15, 2011 HonorInfo тоже не работает! Почините плз Quote Link to comment Share on other sites More sharing options...
Nikon Posted February 15, 2011 Share Posted February 15, 2011 LightDPS ни разу не сломан. Все в нем работает как и до патча GetGameLocalization().. там есть эта функция, но она не используется Текущий язык задается вручную в настройках А в HonorInfo наверное другая проблема: поменяли некоторые функции/ивенты, связаные с набором опыта/славы MinimapSla работает вроде нормально, ошибок в логе и в работе не видел Quote Link to comment Share on other sites More sharing options...
Guest mehael Posted February 15, 2011 Share Posted February 15, 2011 Починился: Code: RealAgroMControlCountdown Quote Link to comment Share on other sites More sharing options...
Guest walery Posted February 15, 2011 Share Posted February 15, 2011 MinimapSla у меня не работает. Показывается стандартный компас и все Quote Link to comment Share on other sites More sharing options...
Guest Carnifex Posted February 15, 2011 Share Posted February 15, 2011 My addons: Fixed: AOChatExtension no fix needed: TSViewer Broken (update tonight): MasterLoot SpamProtect (is this anymore needed?^^) Quote Link to comment Share on other sites More sharing options...
Guest Nezar Posted February 15, 2011 Share Posted February 15, 2011 мой примитивный плагин который показывал средний получаемый опыт тоже перестал работать( Quote Link to comment Share on other sites More sharing options...
SLA Posted February 15, 2011 Author Share Posted February 15, 2011 Added a test case for EU/US developers, which helps to emulate AO 2.0.03 behaviour in AO 1.1.04. See "P.S. Special for EU/US developers:" in the second post of this thread. Quote Link to comment Share on other sites More sharing options...
SLA Posted February 15, 2011 Author Share Posted February 15, 2011 MinimapSla РАБОТАЕТ. Только, показывает подсказки к Межевым камням и Сокровищам на английском языке. В следующем обновлении, это будет исправлено. Если MinimapSla не работает, значит, видимо, он установлен как-то неправильно. Как устанавливать аддоны (Инструкция) Quote Link to comment Share on other sites More sharing options...
SLA Posted February 15, 2011 Author Share Posted February 15, 2011 If SpamProtect is useless anymore, then it is not necessary to fix it, you can leave it in "not working" status, if you want. Quote Link to comment Share on other sites More sharing options...
Ciuine Posted February 16, 2011 Share Posted February 16, 2011 Oh, I was just using y'all's client for testing. Since I had to repair the buttons as well. All of mine are fixed, hopefully. Edit: Going through my old code disgusted me, so much useless fluff. Quote Link to comment Share on other sites More sharing options...
Guest walery Posted February 16, 2011 Share Posted February 16, 2011 все.сорри. MinimapSla и HonorInfo заработали почему-то после нескольких запусков игры. Quote Link to comment Share on other sites More sharing options...
Guest Nezar Posted February 17, 2011 Share Posted February 17, 2011 подскажите плиз как вернуть возможность отслеживать получаемый опыт? Quote Link to comment Share on other sites More sharing options...
Guest Nezar Posted February 17, 2011 Share Posted February 17, 2011 и есть ли рабочий AddonManager Quote Link to comment Share on other sites More sharing options...
Guest mehael Posted February 17, 2011 Share Posted February 17, 2011 Хотфикс 2.0.03.13 [17.02.2011] Quote: Интерфейс * Исправлена ошибка, приводившая к частичной неработоспособности некоторых пользовательских дополнений. Хмм Quote Link to comment Share on other sites More sharing options...
SLA Posted February 17, 2011 Author Share Posted February 17, 2011 Так ВОТ, что означал этот загадочный пункт в патч-ноуте... А я-то подумал, что это связано с тем, что у некоторых пользователей аддоны не работали, пока пару раз не перезагрузишь игру. Слишком поздно! ) Я только что закончил чинить 8 аддонов. И завтра их всех залью на сайт Как минимум, потому, что "старую" версию GetGameLocalization() нужно было в любом случае менять - в EU/US версиях, с того момента, как игрок попадает на Гипат, "старая" функция перестаёт работать, и все EU/US локализации определяет как "eng". Потому, что блок карт "Gipat", зачем-то, становится на НУЛЕВОЕ место в списке MapBlocks, сдвигая все остальные на одну позицию вниз. Кстати, именно это и было причиной создания "новой" функции, в которой локализованные названия даны целиком. А ещё, пользуясь случаем, я прикрутил ко всем этим аддонам поддержку следующей версии AddonManager (синтаксис его событий будет чуть-чуть отличаться, от того, который сейчас в девелоперской версии, я уже договорился с Duvodas. Кстати, он как бы в командировке, или что-то в этом роде, но завтра, вроде, возвращается.), кое-где добавил пару новых локализаций, и исправил кое-какие баги и недочёты... Так, например, GuildGui1b будет нормально работать даже у Японцев и Португальцев, а DarkDPSMeter будет нормально работать у Паладинов, с их умением "Святой Рассвет". Quote Link to comment Share on other sites More sharing options...
Ciuine Posted February 18, 2011 Share Posted February 18, 2011 So the bug they repaired fixes the need for the changes involving GetGameLocalization()? Just trying to get a clarification. Quote Link to comment Share on other sites More sharing options...
Guest kopek2 Posted February 18, 2011 Share Posted February 18, 2011 Как узнать, что случилось с отслеживанием получаемого опыта (использовал EVENT_AVATAR_EXPERIENCE_GAINED)? Есть смысл писать в саппорт? Quote Link to comment Share on other sites More sharing options...
Nikon Posted February 18, 2011 Share Posted February 18, 2011 EVENT_AVATAR_PROGRESS_GAINED Сейчас все приходит сюда: опыт, хонор, репа Если ты про это Quote Link to comment Share on other sites More sharing options...
SLA Posted February 18, 2011 Author Share Posted February 18, 2011 YES, exactly. Quote Link to comment Share on other sites More sharing options...
Guest kopek2 Posted February 18, 2011 Share Posted February 18, 2011 Да, спасибо. Буду разбираться с EVENT_AVATAR_PROGRESS_GAINED. Quote Link to comment Share on other sites More sharing options...
Ciuine Posted February 18, 2011 Share Posted February 18, 2011 My add-ons use EVENT_AVATAR_EXPERIENCE_CHANGED to track experience. So that could be used as well. Quote Link to comment Share on other sites More sharing options...
Guest Carnifex Posted February 20, 2011 Share Posted February 20, 2011 Is it possible, thy you've changed the priority of the buttons of some addons (DarkDPSMeter, GuildGui1b, ASD), because they overlap now ingamegui and the map? Quote Link to comment Share on other sites More sharing options...
Recommended Posts