Current time: 10.10.2024, 10:31 Hello There, Guest! (LoginRegister)
Language: english | russian  

Post Reply 
Threaded Mode | Linear Mode
Era II Mod Manager
» Менеджер модов для платформы Эра
Author Message
Berserker Offline
Administrators

Posts: 16631
Post: #256

SyDr, тогда предлагаю следующее.

1) Имя мода — каноническое имя мода = название папки. То, что у тебя в файле настроек зовётся Name — это Заголовок (Caption, Title). Будет правильным, на мой взгляд, изменить это поле в mod_info.
2) Версия мода — строка, при обрезании которой можно вычленить первое дробное число, которое и является ориентиром для сравнения. Дата не нужна.
2) Репозиторий — папка, где хранятся в каком-то порядке моды и находится файл со списком модов. Путь к папке может быть url-адресом (фильтрация по поиску "://") или локально/сетевым путём. В зависимости от типа пути используются соответственно обычные файловые функции или InetDownloadFile и им подобные.

Репозиторий содержит в корне файл mods.ini с простым списком модов.
Список имеет формат (EBNF):
Code:
Список = ПустаяСекция [Моды]
ПустаяСекция = "[]" ПереводСтроки
Моды = Мод [ПереводСтроки Мод]
Мод = ИмяМода "=" ОтносительныйПутьКМоду "|" ОтносительныйПутьКModInfo

Пример:
Code:
[]
WoG = wog/wog.exe | wog/mod_info.ini
HoL 3.1 = hol/hol 3.1.emp | hol/hol3.1.ini

Таким образом репозиторий есть набор имён модов, путей к ним и путей к конфигам. Для сетевых репозиториев необходимо кодировать адреса или хотя бы преобразовывать пробелы в %20.

3) В менеджере модов отображается текущий выбранный репозиторий или ничего. Есть возможность редактировать список репозиториев и выбирать новый активный
4) Поле Link для менеджера модов не имеет смысла, только для пользователя, куда тот сможет перейти в поисках новостей или непрямой ссылки для скачивания обновления.
5) Репозиторий можно просмотреть, можно выбрать мод для установки (в случае наличия такого же обновления или отката). Для сетевого репозитория иконки можно не отображать (серые папки). Вероятно имеет смысл выделять уже установленные моды. Можно выбрать любой мод и нажать «Установить».
6) При обычном просмотре списка модов доступна кнопка «Обновить». При её нажатии происходит загрузка информации с репозитория (обработка возможных ошибок) и попытка скачать/скопировать архив во временную папку.

Quote:Version = Value ; в любом виде, в котором только хочется. Именно это значение и будет показываться пользователю в качестве версии (если будет показываться).
   Version Date = YYYYMMDDhhmmss ; т.е. 20130704154759, при этом конечные цифры можно будет опускать 20130704 = 20130704000000
На всякий случай. Более новая дата не есть новая версия. Порой правишь ошибки в старых или обновляешь старые на минорные значения.


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
04.07.2013 18:55
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16631
Post: #257

7) В mod_info может быть поле Repository с адресом/путём к авторскому репозиторию/ Соответственно при выборе мода с таким полем загорается кнопка «Переключиться на репозиторий мода». Если такого репозитория раньше не было в списке, он добавляется.


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
04.07.2013 19:14
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16631
Post: #258

Для текущей версии можно репозиторий не делать, но с полями у mod_info неплохо бы определиться. А когда заделаешь (если решишь), то можно будет перепаковывать моды. Это процесс долгий, нудный. Особенно в плане загрузки на сервер и ручного редактирования.

Да, автора лучше отображать в другом месте, а в квадратных скобках версию — актуальнее.


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
04.07.2013 19:39
Find all posts by this user Quote this message in a reply
Bes Offline

Posts: 5422
Post: #259

Image: qp02.png
что это?
попробовал установить из самого менеджера sfx-архив grove.exe (офиц.мод ERA от рук Владыки)

P.S. менеджер сегодняшний
(This post was last modified: 04.07.2013 20:05 by Bes.)
04.07.2013 20:05
Visit this user's website Find all posts by this user Quote this message in a reply
SyDr Offline

Posts: 1054
Post: #260

1) Ок. Будет Caption.
2) Что новее, 3.4.12.9 или 3.4.12.14? А 12,79 или 12,100? Другими словами, либо мне надо дополнительное поле для определения того, что новее, либо все будут использовать систему нумерации, которую укажу я (X.X.X.X наверное).
2) Слишком нерасширяемо. Может нужно будет описание добавить? X | X | X тогда? А вдруг ещё что-то? Скорее по разделу .ini файла на мод.
Кодировать адреса можно будет без проблем (наверное).
3) В любом случае, в ближайшее время (неделя-месяц) я не буду заниматься репозиториями. Пока готов только обсуждать, что будет и чего не будет.
4) Это что-то в духе "Перейти на сайт программы". И для менеджера модов оно имеет такой же смысл, как и все остальное (отображаемое имя, описание, иконка).
5) Угу. Буду думать, как это получше в интерфейс запихнуть. Идея уже есть, но надо тестировать.
6) Понял. Вместе с репозиториями.
7) Хм... Не очень. А если таких модов будет много? Пожалуй с репозиториями будет так:
  • Есть репозитории с модами. Понятия активного репозитория нет. Используются все перечисленные.
  • Есть индивидуальные моды с прописанными конкретными репозиториями.

Автора можно в поле с инфой о моде отображать.
Проблему с перепаковкой можно решить, добавив возможность хранить <Mod> и mod_info.ini отдельно друг от друга. С сетевым проблемы отдельных файлов нет.
GUI'шка для редактирования свойств мода будет. Так что пока лучше сильно не спешить.

Формат описания мода:
[Info]
Caption = Отображаемое имя (по умолчанию).
Caption.LngCode = Отображаемое имя на другом языке (переезжаем из отдельных разделов).
Description File = Путь к файлу с описанием (по умолчанию). ММ также пытается использовать файлы Readme.txt и Info.txt, если это поле не задано.
Description File.LngCode = Путь к файлу с локализованным описанием.
Author = Имя автора (нигде не используется)
Homepage = Страничка автора (используется в "Перейти на сайт мода")
Version = X.X.X.X[.additionalData] (можно опускать числа -> 1.52 < 1.52.12. Дополнительная информация игнорируется при определении новизны)
Icon = Файл с иконкой, Индекс иконки в файле. Misc.ico,14
Compatibility Class = Default | None | All (Все остальные значения будут интерпретированы, как Default - сейчас как All). Нужны ли ещё классы совместимости?

[Repository]
Main = http://example.com/
Local = D:\Games\HoMM3\repos\
Local.2 = ..\repos\
/* Это комментарий. Данный раздел здесь сейчас только для меня в качестве напоминалки на будущее*/

[Compatibilty]
Имя мода = Совместимость (сейчас 1 и -1)

ИО Bes-а, это норма! Sm ММ не позволяет устанавливать моды с не прописанным полем Version. Правда надо было сначала моды перепаковать, а потом реализовывать такое поведенее. Ну да ладно. Это ж sfx. Пока позволю устанавливать любые моды при любом раскладе.
(This post was last modified: 04.07.2013 20:58 by SyDr.)
04.07.2013 20:56
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16631
Post: #261

Quote:2) Что новее, 3.4.12.9 или 3.4.12.14? А 12,79 или 12,100? Другими словами, либо мне надо дополнительное поле для определения того, что новее, либо все будут использовать систему нумерации, которую укажу я (X.X.X.X наверное).
Использовать обычное корректное дробное число.
3.041209
3.041214

На деле вряд ли будут такие длинные числа. Я разве что вог 3.58ХХ нумеровать пока собрался.

Quote:2) Слишком нерасширяемо. Может нужно будет описание добавить? X | X | X тогда? А вдруг ещё что-то?
Абсолютно расширяемо. Ведь только два значения и нужно: ссылка на файл и ссылка на конфиг. Всё остальное (имя, автор, версия, описание) в самом конфиге, нет?

Quote:4) Это что-то в духе "Перейти на сайт программы". И для менеджера модов оно имеет такой же смысл, как и все остальное (отображаемое имя, описание, иконка).
Я имел в виду, что поле не осмысливается и не используется для скачивания файлов или чего бы то не было. Только для открытия адреса в браузере.

Quote:7) Хм... Не очень. А если таких модов будет много? Пожалуй с репозиториями будет так:
Есть репозитории с модами. Понятия активного репозитория нет. Используются все перечисленные.
Есть индивидуальные моды с прописанными конкретными репозиториями.
Во-первых, мне не кажется удачной идея привязки мода к репозиторию. Автор может забить на его обновление или выложить на стороннем. Во-вторых, использоваться все сразу репозитории не могут. У них разная доступность, скорость, версии файлов, уровень доверия, наконец.

Идея проста. Ходить по репозиториям — это как ходить по папкам. В каждой папки свои файлы со своими версиями. Чаще всего будет использоваться централизованный + несколько фанатских.

Далее, какой-нибудь Валерий заводит запись на дропбоксе и создаёт там репозиторий на свои 7 модов, которые обновляются чаще. К пользователю попадает один из таких модов. Пользователь хочет глянуть, что там за авторский репозиторий. И легко в него заходит. Скачивает несколько новых модов. Пользуясь тем, что сейчас активен авторский репозиторий, он обновляет первый мод до последней версии.

А ещё у Валерия хранится много старья. Пользователю оно не нужно. Он снова выбирает активным центральный репозиторий и тыкает на обновления.

Надеюсь, изложил идею верно. Готов обсудить минусы.

Quote:Проблему с перепаковкой можно решить, добавив возможность хранить <Mod> и mod_info.ini отдельно друг от друга.
При скачивания через репозиторий можно предпочесть ini из репозитория тому, что в архиве, да. А при ручном скачивании, так не выйдет.

Quote:Нужны ли ещё классы совместимости?
Пока что хватит.

Quote:[Repository]
   Main = http://example.com/
   Local = D:\Games\HoMM3\repos\
   Local.2 = ..\repos\
   /* Это комментарий. Данный раздел здесь сейчас только для меня в качестве напоминалки на будущее*/
Исходя из аргументации выше, я бы оставил только:
Repository = Путь

SyDr, если версия отсутствует, она равна 0.0.


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
04.07.2013 21:31
Find all posts by this user Quote this message in a reply
WWWoWaNuS Offline

Posts: 138
Post: #262

(04.07.2013 09:34)SyDr Wrote:  WWWoWaNuS, немного улучшил загрузку карты совместимости модов (выключенные теперь вообще не участвуют).
Классно!
Теперь оно меньше секунды и торопливый юзер (если он не слишком нервный кликатель или спортсмен 122 ) уже не успевает кликнуть при переключнии -> баг тяжелее словить.

Ещё чуть шероховатостей для полировки (почти не критично, т.к. функциональных проблем нет - только с отображением):
- при изменении списка активных модов помечается *<имя_пресета>, а при смене dat-файла - нет;
- не всегда при загрузке пресета с dat-файлом настроек WoG отображается смена dat-файла (при этом в WoG.ini всё встаёт ок);
- при запуске MM не отображается имя пресета, если он был выбран ранее (не страшно) и не всегда корректно показывается имя dat-файла.. Upd.:А не может ли оно быть связано с тем, что не все dat-файлы лежат в корне игровой папки?
видео тестирования
Да, на видео также видно, что отображение части настроек, похоже, обновляется только при повторном фокусе на окне..
Upd.2:Глянул в modsmann.au3, решил ковырнуть кривыми своими:
Code:
EndIf
SD_GUI_Update() {добавил вызов перерисовки в конец}
EndFunc

Func Preset_Load($sLoadPath)
не помогло..
Зато выявил намёк на зависимость обновления инфо о dat-файле от выделенного в списке мода (или показалось?)..
(This post was last modified: 05.07.2013 01:41 by WWWoWaNuS.)
05.07.2013 00:42
Find all posts by this user Quote this message in a reply
SyDr Offline

Posts: 1054
Post: #263

WWWoWaNuS, работа с dat-файлами находится в зачаточном состоянии (и не является самой приоритетной на текущий момент). ММ ищет файлы только в корневом каталоге (а должен во всех активных модах, да).
1) Пометку пресета звёздочкой добавлю.
2) Такого быть не должно. Проверю, почему происходит.
3) См. выше (только корневой каталог с игрой пока).

Berserker, если здесь что-то всплывает в первый раз, значит это задел на будущее, а не призыв всё делать так сразу Sm

Формат файла с инфой о моде (всё будет редактироваться через интерфейс ММ):
[Info]
MM Version = X.X[.X[.X]] - версия ММ, под которой в последний раз редактировался файл.
Era Version = эмм, какой там формат? - последняя версия, под которой проверялась работоспособность. Возможно, это поле и не надо. Вряд ли оно где-то будет использоваться.
Caption = Отображаемое имя (по умолчанию).
Caption.LngCode = Отображаемое имя на другом языке (переезжаем из отдельных разделов).
Description File = Путь к файлу с описанием (по умолчанию). ММ также пытается использовать файлы Readme.txt и Info.txt, если это поле не задано.
Description File.LngCode = Путь к файлу с локализованным описанием.
Short Description = Краткое описание. В пределах 100-200 символов.
Short Description.LngCode = Тоже самое, локализованное.
Author = Имя автора (нигде не используется)
Homepage = Страничка автора (используется в "Перейти на сайт мода")
Version = X.X[.X[.X[.additionalData]]] (можно опускать числа -> 1.52 < 1.52.12. Дополнительная информация игнорируется). Если поле не определено или имеет неверный формат -> 0.0
Icon File = Файл с иконкой
Icon Index = 0 (пока не поддерживается)
Compatibility Class = Default | None | All (Все остальные значения будут интерпретированы, как Default - сейчас как All). Нужны ли ещё классы совместимости?
Repository = http://example.com/ (example2.com -> http://example2.com/). Возможно, в качестве репозитория будет выступать путь к файлу, а не к каталогу.

[Compatibility]
Имя мода = Совместимость (1 - совместимо и -1 - нет)

Формат файла репозитория (возможно, будет сделано так, что репозиторий может хранить много версий одного мода):
[Info]
ММ Version = X.X[.X[.X]]
Last Updated = YYYYMMDDhhmmss - время последнего обновления. Если не изменилось - считается, что файле не произошло никаких изменений.

[Mod Name]
Last Version = X.X[.X[.X]] - проверка кучи модов на наличие обновлений при таком подходе это скачка одного файла, а не двух десятков
Package = относительный/путь/к/файлу.emp
Info File = относительный/путь/к/файлу.ini
Changelog = путь/к/файлу/с/изменениями Sm
Changelog.LngCode = путь/..


Ну и идея с репозиториями вроде как дошла до меня.
(This post was last modified: 05.07.2013 21:36 by SyDr.)
05.07.2013 21:35
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16631
Post: #264

Quote:Package = относительный/путь/к/файлу.emp
Имхо, любому, а не только emp. Новое расширение нужно только для ассоциации. В тех же файловых менеджерах rar будет поприятнее. Тем более, для репозитория разницы никакой, а при скачивании вручную новичках может быть проще.

В остальном более-менее логично. При обновлении мода обновить файл, конфиг и файл репозитория. Мутновато, но можно написать софтину.


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
05.07.2013 23:04
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16631
Post: #265

SyDr, тут такое дело. Мне, наверное, завтра придётся заливать сборку и пока переключаться на другие занятия. Модеры постепенно создадут конфиги для своих модов. Нежелательно позже менять формат этих конфигов. Это медленный процесс, к тому же не поддающийся контролю. Так что лучше оставь уже стабилизированный безопасный набор полей, которые я тоже использую.


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
06.07.2013 14:02
Find all posts by this user Quote this message in a reply
SyDr Offline

Posts: 1054
Post: #266

<Mod Name>\mod_info.ini
В случае, если файл конфига лежит за пределами пакета, он должен называться также и иметь расширение .ini. При установке он заменит собой конфиг внутри пакета.

*[Info]
*MM Version = X.X[.X[.X]] - версия ММ, под которой в последний раз редактировался файл.
*Era Version = эмм, какой там формат? - последняя версия, под которой проверялась работоспособность. Возможно, это поле и не надо. Вряд ли оно где-то будет использоваться.
*Caption = Отображаемое имя (по умолчанию).
*Caption.LngCode = Отображаемое имя на другом языке (переезжаем из отдельных разделов).
*Description File = Путь к файлу с описанием (по умолчанию). ММ также пытается использовать файлы Readme.txt и Info.txt, если это поле не задано.
*Description File.LngCode = Путь к файлу с локализованным описанием.
*Short Description = Краткое описание. В пределах 100-200 символов.
*Short Description.LngCode = Тоже самое, локализованное.
*Author = Имя автора (нигде не используется)
*Homepage = Страничка автора (используется в "Перейти на сайт мода")
*Version = X.X[.X[.X[.additionalData]]] Если поле не определено или имеет неверный формат -> 0.0
*Icon File = Файл с иконкой
*Icon Index = 0 (пока не поддерживается)
*Compatibility Class = Default | None | All (Все остальные значения будут интерпретированы, как Default).
Image: 0_a9528_12a4cf56_orig
*Repository = http://example.com/mods.ini. Путь к файлу в качестве репозитория. ММ предложит добавить его в список репозиториев. Репозитории первичны - моды вторичны. Другими словами, это поле нафиг не надо Sm

*[Compatibility]
*Имя мода = Совместимость (1 - совместимо и -1 - нет)

Звёздочкой помечены необзательные поля. Всё это можно будет настроить через интерфейс ММ.
Минимально необходимый файл - это его отсутствие Sm. Всё можно будет добавить потом.
06.07.2013 15:12
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16631
Post: #267

Quote:*Era Version = эмм, какой там формат? - последняя версия, под которой проверялась работоспособность. Возможно, это поле и не надо. Вряд ли оно где-то будет использоваться.
Число с плавающей запятой. 2.46 будет последняя пока.

Quote:Repository = http://example.com/mods.ini
А базовый путь «http://example.com/» будешь вычленять сам?

Quote:В случае, если файл конфига лежит за пределами пакета, он должен называться также и иметь расширение .ini. При установке он заменит собой конфиг внутри пакета.
Проще тебе его будет на лету переименовать. Суди сам:

hol/hol 3.1.ini
hol/hol 3.2.ini
hol/hol 3.3 ini
В одной папке два mod_info.ini не уживутся.


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
06.07.2013 16:05
Find all posts by this user Quote this message in a reply
SyDr Offline

Posts: 1054
Post: #268

1) Так. Версия под формат X.X[.X[.X]] подходит. Дополнительных функций для сравнения не понадобится.
2) Базовый путь могу и сам получить (всё до последнего /), а можно и в самом репозитории прописывать.
3) hol/hol 3.1.ini
hol/hol 3.1.exe
hol/hol 3.2.ini
hol/hol 3.2.rar
hol/hol 3.3 ini
hol/hol 3.3.emp
не?

Сейчас нарисую, что я думаю по поводу репозитория.
Image: 0_a952f_9e2cf696_orig
(This post was last modified: 06.07.2013 17:18 by SyDr.)
06.07.2013 16:57
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16631
Post: #269

Quote:hol/hol 3.1.exe
   hol/hol 3.2.ini
   hol/hol 3.2.rar
   hol/hol 3.3 ini
   hol/hol 3.3.emp
   не?
Понял, вопрос не снимается.

По репозиториям позже отпишусь. Пока что кажется чересчур громоздким. Будет неудобно простым пользователям. А удобство и простота поддержка на самом деле имеют весьма серьёзный фактор внимания. Требуется напильник )


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
06.07.2013 18:02
Find all posts by this user Quote this message in a reply
SyDr Offline

Posts: 1054
Post: #270

Image: 0_a9530_453379d9_orig

Проще уже только разрешить хранить в репозитории только одну версию мода и всё.
06.07.2013 18:25
Find all posts by this user Quote this message in a reply
« Next Oldest | Next Newest »
Post Reply 


Forum Jump:

Powered by MyBB Copyright © 2002-2024 MyBB Group