SLA Posted August 4, 2010 Share Posted August 4, 2010 HOW-TO: Совместимость аддонов с EU/US версиямиНаверное, никому не нужно объяснять, что хороший аддон должен уметь работать как в русской, так и в иностранных версиях игры. Иначе это не "хороший" аддон Но вот беда, у нас более новая версия, чем у иностранцев. Соответственно, немного другой API, какие-то функции добавлены, какие-то убраны, какие-то изменились. Для тех, кто не в курсе, под "иностранными" версиями подразумеваются все версии "Allods Online", выпускаемые в Европе и Америке (на английском, немецком, французском языках), и все они имеют одинаковый номер версии. Кроме того, в Китае и Японии уже начат ЗБТ, но версия ещё ниже, чем в Европе. Вот текущие версии АО:AO RUS - 2.0.03AO EU/US - 1.1.04AO China/Japan - 1.1.02 (?)Определение номера версии:Главная идея в том, чтобы либо не использовать новые функции вообще, либо окружить их "заглушками", либо выполнять разный код в разных версиях игры. Для этого, аддону было бы неплохо знать, с какой версией игры он имеет дело. А штатной функции определения версии в API нет! Комрады, больше по этому поводу беспокоиться не нужно: Code: -- AO game Version detection by SLA, ver. 2011-02-14.function GetGameVersion()if avatar.GetUnlocks then return 2003elseif astral.GetAllTLs then return 2002elseif mount.SetSkin then return 2001elseif group.IsLeader then return 2000elseif social.GetFriendInfo then return 1104elseif not unit.IsDead then return 1103endreturn 1102end Функция возвращает число, например 1102 для 1.1.02, 1103 для 1.1.03., 1104 для 1.1.04, 2000 для 2.0.00, 2001 для 2.0.01. Её содержание может показаться странным для человека, не знакомого с Lua. Она просто проверяет, существуют ли в API некоторые функции. К счастью, каждая крупная версия игры всегда добавляет какие-нибудь новые функции, так что, мы всегда найдём способ "опознать" версию игры по её API. Эту функцию, как и всю эту статью, я буду оперативно обновлять, по мере выхода новых версий АО. Функция протестирована, и работает правильно в современной русской и иностранных версиях.Различия в версиях API:Чтобы иметь полное представление о том, как ваш аддон поведёт себя в иностранных версиях АО, сверьте вот эти 4 версии API. Посмотрите, существуют ли функции API, используемые в вашем аддоне, в старых версиях API, а также совпадают ли их параметры и возвращаемые значения:http://www.gamefront.com/files/20014147/API-1102-2003.7zКроме того, вам никто не мешает скачать английскую версию игры с http://en.allods.gpotato.eu/, и установить её (всего-то 3 ГБ) параллельно с русской версией, для тестирования своих аддонов. В крайнем случае, обращайтесь ко мне, постараюсь помочь с тестированием, т.к. у меня эта английская версия установлена.По поводу поддержки нескольких языков:Если в вашем аддоне есть локализуемые тексты (в смысле, тексты на русском языке), то загляните ещё и в инструкцию по созданию многоязычного аддона. С переврдом на английский, если нужно, я могу помочь. А когда кроме русского, будет и английский язык, то немецкие и французские игроки с удовольствием помогут с переводом на немецкий и французский языки Quote Link to comment Share on other sites More sharing options...
Nikon Posted August 12, 2010 Share Posted August 12, 2010 На 1.1.03 можно изменить так проверку версии: Code: function CheckVer()if not unit.IsDead then return 1103 elseif not common.SetGlobalConfigSection then return 1102 elseif avatar.GetEmotes then return 1101 end return 1100 end Quote Link to comment Share on other sites More sharing options...
SLA Posted August 25, 2010 Author Share Posted August 25, 2010 Обновил статью для АО 1.1.03. Для кода определения версии подобрал функции покороче, чтобы она стала чуть компактнее Кстати, 4 папки API сжались в архив 7Z размером всего 332 Кб (!), против 7.2 Мб в RAR! Я в шоке, 7-Zip рулит Edit: Упомянул полностью переделанную в патче 1.1.03 библиотеку guild. Quote Link to comment Share on other sites More sharing options...
SLA Posted September 9, 2010 Author Share Posted September 9, 2010 Обновил функцию GetGameVersion() для АО 1.1.04. У нас НЕТ новой документации по API 1.1.04, но я нашёл названия двух новых функций - social.GetFriendInfo() и social.GetIgnoreInfo(). Просто догадался , что они должны были появиться, аналогично тому, как в прошлом патче появилась guild.GetMemberInfo(). Ведь GuildGui1b, в этот раз, сломался в списке друзей, аналогичным образом, как он сломался в прошлый раз в списке гильдии =)) Quote Link to comment Share on other sites More sharing options...
SLA Posted October 5, 2010 Author Share Posted October 5, 2010 Обновил функцию GetGameVersion(), убрав определение версий АО 1.1.00 и АО 1.1.01. Обновил первое сообщение этой темы, перечислил все функции, которыми теперь МОЖНО пользоваться Потому, что сегодня, gPotato выпускает АО 1.1.02. В этой версии, НАКОНЕЦ-ТО, начнут работать userMods.ToWString() и userMods.FromWString(). А также, сильно упрощается определение локализации клиента, и способ хранения нескольких локализаций в аддонах. Подробнее об этом - в теме HOW-TO: Многоязычный аддон / Multilangual addon. Quote Link to comment Share on other sites More sharing options...
SLA Posted October 6, 2010 Author Share Posted October 6, 2010 ВАЖНО: Исправлена функция GetGameVersion() для КОРРЕКТНОГО распознавания современной Европейской АО 1.1.02. Все, кто ею пользуется, обновите её до версии 2010-10-06. Дело в том, что оказалось, их современный API отличается от нашего 1.0.02! То есть, у них в 1.1.02 появилась функция object.IsFar(), которая должна была появиться только в АО 1.1.03... Поэтому, функция GetGameVersion() возвращала 1103. Я исправил её, заменив проверку "object.IsFar" на "not unit.IsDead" - теперь в EU/US версиях возвращает правильный номер - 1102. Quote Link to comment Share on other sites More sharing options...
Nikon Posted October 6, 2010 Share Posted October 6, 2010 Quote: unit.IsDead Хех А документация на АПИ у них есть? На свой Quote Link to comment Share on other sites More sharing options...
SLA Posted October 11, 2010 Author Share Posted October 11, 2010 У них есть документация на НАШ 1.1.02, причём... на русском языке. Здорово, правда? То есть, если они умеют читать по-русски, то как бы ДА, документация у них есть. Казалось бы, почему бы не сделать хотя бы английский перевод документации по API? По-моему, тут работы отсилы на неделю для одного человека. Не очень большие убытки для Мыло.ру. Но, видимо, как всегда - "на данный момент есть более приоритетные задачи" ©. Quote Link to comment Share on other sites More sharing options...
SLA Posted October 15, 2010 Author Share Posted October 15, 2010 Обновил функцию GetGameVersion(), для определения версии АО 2.0.00. Обновил архив с документацией по API (API-1102-2000b.7z) , добавив "утёкшую" бета-документацию из АО 2.0.00.13. Quote Link to comment Share on other sites More sharing options...
SLA Posted November 26, 2010 Author Share Posted November 26, 2010 RU: 2010-11-26 -- Обновил функцию GetGameVersion(), для определения версии АО 2.0.01. -- Обновил архив с документацией по API (API-1102-2001b.7z) , добавив документацию из АО 2.0.01. EN: 2010-11-26 -- Updated GetGameVersion() function, to detect AO 2.0.01. -- Updated API documentation archive (API-1102-2001b.7z) , added docs from AO 2.0.01. Quote Link to comment Share on other sites More sharing options...
duvo Posted November 26, 2010 Share Posted November 26, 2010 По-моему, Code: if family.IsExist then вызовет ошибку "attempt to index global `family' (a nil value)" в предыдущих версиях о_0 Может, следует добавить проверку Code: if family and family.IsExist then Quote Link to comment Share on other sites More sharing options...
SLA Posted November 26, 2010 Author Share Posted November 26, 2010 Ага, точно, только проверка if family then тоже вызовет точно такую же ошибку. Вот так должно работать без ошибки: Code: if mount.SetSkin then Код исправил, и номером версии функции выставил завтрашнее число - 2010-11-27. Quote Link to comment Share on other sites More sharing options...
Guest Carnifex Posted January 3, 2011 Share Posted January 3, 2011 your link to download the moddocs is not working Quote Link to comment Share on other sites More sharing options...
SLA Posted January 3, 2011 Author Share Posted January 3, 2011 Thanks. Re-uploaded, and repaired the download link. UPD 2011-02-17: Updated the GetGameVersion() function and API-1102-2003.7z attachment in the first post. Quote Link to comment Share on other sites More sharing options...
knight_rider Posted April 20, 2011 Share Posted April 20, 2011 Можешь обновить функцию до версии 2005? И кто помнит, в какой версии поменяли размер чата? Вроде начиная с 2004 Quote Link to comment Share on other sites More sharing options...
Recommended Posts