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

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

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

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

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

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

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

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

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

Подробнее

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

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

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

HOW-TO: Совместимость аддонов с EU/US версиями


SLA

Рекомендуемые сообщения

HOW-TO: Совместимость аддонов с EU/US версиями

Наверное, никому не нужно объяснять, что хороший аддон должен уметь работать как в русской, так и в иностранных версиях игры. Иначе это не "хороший" аддон :) Но вот беда, у нас более новая версия, чем у иностранцев. Соответственно, немного другой API, какие-то функции добавлены, какие-то убраны, какие-то изменились. Для тех, кто не в курсе, под "иностранными" версиями подразумеваются все версии "Allods Online", выпускаемые в Европе и Америке (на английском, немецком, французском языках), и все они имеют одинаковый номер версии. Кроме того, в Китае и Японии уже начат ЗБТ, но версия ещё ниже, чем в Европе. Вот текущие версии АО:

AO RUS - 2.0.03
AO EU/US - 1.1.04
AO China/Japan - 1.1.02 (?)

Определение номера версии:

Главная идея в том, чтобы либо не использовать новые функции вообще, либо окружить их "заглушками", либо выполнять разный код в разных версиях игры. Для этого, аддону было бы неплохо знать, с какой версией игры он имеет дело. А штатной функции определения версии в API нет! Комрады, больше по этому поводу беспокоиться не нужно:



Code:
-- AO game Version detection by SLA, ver. 2011-02-14.
function GetGameVersion()
if avatar.GetUnlocks then return 2003
elseif astral.GetAllTLs then return 2002
elseif mount.SetSkin then return 2001
elseif group.IsLeader then return 2000
elseif social.GetFriendInfo then return 1104
elseif not unit.IsDead then return 1103
end
return 1102
end

Функция возвращает число, например 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 ГБ) параллельно с русской версией, для тестирования своих аддонов. В крайнем случае, обращайтесь ко мне, постараюсь помочь с тестированием, т.к. у меня эта английская версия установлена.

По поводу поддержки нескольких языков:

Если в вашем аддоне есть локализуемые тексты (в смысле, тексты на русском языке), то загляните ещё и в инструкцию по созданию многоязычного аддона. С переврдом на английский, если нужно, я могу помочь. А когда кроме русского, будет и английский язык, то немецкие и французские игроки с удовольствием помогут с переводом на немецкий и французский языки :)
 

Ссылка на комментарий
Поделиться на другие сайты

На 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

Ссылка на комментарий
Поделиться на другие сайты

  • 2 недели спустя...

Обновил статью для АО 1.1.03. Для кода определения версии подобрал функции покороче, чтобы она стала чуть компактнее :)

Кстати, 4 папки API сжались в архив 7Z размером всего 332 Кб (!), против 7.2 Мб в RAR! Я в шоке, 7-Zip рулит :)

Edit: Упомянул полностью переделанную в патче 1.1.03 библиотеку guild.

Ссылка на комментарий
Поделиться на другие сайты

  • 3 недели спустя...

Обновил функцию GetGameVersion() для АО 1.1.04.

У нас НЕТ новой документации по API 1.1.04, но я нашёл названия двух новых функций - social.GetFriendInfo() и social.GetIgnoreInfo(). Просто догадался :), что они должны были появиться, аналогично тому, как в прошлом патче появилась guild.GetMemberInfo(). Ведь GuildGui1b, в этот раз, сломался в списке друзей, аналогичным образом, как он сломался в прошлый раз в списке гильдии =))

Ссылка на комментарий
Поделиться на другие сайты

  • 4 недели спустя...

Обновил функцию GetGameVersion(), убрав определение версий АО 1.1.00 и АО 1.1.01.

Обновил первое сообщение этой темы, перечислил все функции, которыми теперь МОЖНО пользоваться :)

Потому, что сегодня, gPotato выпускает АО 1.1.02. В этой версии, НАКОНЕЦ-ТО, начнут работать userMods.ToWString() и userMods.FromWString(). А также, сильно упрощается определение локализации клиента, и способ хранения нескольких локализаций в аддонах. Подробнее об этом - в теме HOW-TO: Многоязычный аддон / Multilangual addon.

Ссылка на комментарий
Поделиться на другие сайты

ВАЖНО: Исправлена функция 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.

Ссылка на комментарий
Поделиться на другие сайты

У них есть документация на НАШ 1.1.02, причём... на русском языке. Здорово, правда? То есть, если они умеют читать по-русски, то как бы ДА, документация у них есть.

Казалось бы, почему бы не сделать хотя бы английский перевод документации по API? По-моему, тут работы отсилы на неделю для одного человека. Не очень большие убытки для Мыло.ру. Но, видимо, как всегда - "на данный момент есть более приоритетные задачи" ©.

Ссылка на комментарий
Поделиться на другие сайты

Обновил функцию GetGameVersion(), для определения версии АО 2.0.00.

Обновил архив с документацией по API (API-1102-2000b.7z) , добавив "утёкшую" бета-документацию из АО 2.0.00.13.

Ссылка на комментарий
Поделиться на другие сайты

  • 1 месяц спустя...

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.

Ссылка на комментарий
Поделиться на другие сайты

По-моему,

Code:
if family.IsExist then

вызовет ошибку "attempt to index global `family' (a nil value)" в предыдущих версиях о_0

Может, следует добавить проверку

Code:
if family and family.IsExist then
Ссылка на комментарий
Поделиться на другие сайты

Ага, точно, только проверка if family then тоже вызовет точно такую же ошибку. Вот так должно работать без ошибки:

Code:
if mount.SetSkin then

Код исправил, и номером версии функции выставил завтрашнее число - 2010-11-27.

Ссылка на комментарий
Поделиться на другие сайты

  • 1 месяц спустя...

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.

Ссылка на комментарий
Поделиться на другие сайты

  • 3 месяца спустя...

Можешь обновить функцию до версии 2005?

И кто помнит, в какой версии поменяли размер чата? Вроде начиная с 2004

Ссылка на комментарий
Поделиться на другие сайты

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...

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

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