Для начала пару слов, для чего это собственно нужно. Обычно моды распространяют в архивах, это общепринятый способ, который, к сожалению, не лишен недостатков, основные из которых:
- для распаковки нужно знать, куда распаковывать (если с обычными модами достаточно найти папку
Downloads и распаковать в нее, то с глобальными модами или хаками такой способ не всегда проходит, к тому же при перекрытии объектов они начинают обозначаться как модифицированные («звездочкой») в игре и бодишопе);
- для распаковки нужен архиватор, конечно, не очень сильный аргумент в стране, где софт делится на лицензионный и весь остальной, но все же;
- архив распаковывается целиком, т.е. как правило, невозможно выбрать, что конкретно устанавливается.
Любой инсталляционный пакет состоит из данных (файлов) которые будут куда-нибудь установлены и установочного скрипта (сценария установки).
Нам понадобится
NSIS и блокнот (или что-нибудь посовременнее, типа
Notepad++. Почему выбран NSIS? Потому, что он гибкий, с широкими скриптовыми возможностями и высокоэффективным архиватором, и наконец, просто мне нравится. Блокнот или любой текстовый редактор нам понадобится, потому что скрипт пишется вручную. К счастью NSIS поддерживает включаемые файлы и, поэтому, весь скрипт нам писать не придется.
Итак начнем:
1. Скачайте и установите NSIS;
2.
Скачайте заголовочные файлы;
3. Создайте папку в которой будет размещаться ваш проект и распакуйте файлы в нее, всего 4 файла и папка с примером:
-
setup.nsi – заготовка для сценария установки, в этом файле мы будем писать скрипт;
-
ar_sims.nsh – заголовочный файл с базовым скриптом инсталлятора, его трогать
не нужно;
-
ar_sims_consts.nsh – заголовочный файл с константами;
-
list.txt – файл со списком аддонов в пакете (типа readme), файл должен называться list, но может иметь любое расширение;
4. Откройте в редакторе файл
ar_sims_consts.nsh:
Теперь отредактируйте значения
AR_NAME,
AR_INST_NAME и
AR_INST_VER.
Внимание! Значение
AR_NAME должно быть уникальным и не содержать пробелов – это значение используется как часть имен инсталлятора и ветки в реестре;
5. Теперь откройте в редакторе
setup.nsi:
Как видите он практически пустой за исключением нескольких строк (дальше при ссылках на строку буду указывать ее номер отображаемый слева (там пока 1, 2, 3, …, 9):
Строка 1 – подключаем файл с базовым скриптом;
Строка 3 – вставляем макрос с базовым скриптом;
Строки 7 и 9 – задаем начало и конец описаний секций;
6. Теперь отредактируйте файл
setup.nsi:
Строки 5 и 8 – задаем начало и конец секции, каждая такая секция при компиляции скрипта преобразуется в одну строчку с чек-боксом на экране выбора устанавливаемых пакетов, у команды Section может быть до один или два параметра: первый – имя секции, второй – ее описание, которое сейчас задается в строке 11;
Строка 6 – указываем, что распаковывать нужно в
{Мои документы}\EAGames\Sims 2\Downloads;
Строка 7 – указываем, что копировать нужно файл
ar_wall.package, лежащий в папке
example. Папку
example мы используем для удобства, чтобы не сваливать файлы проекта в кучу, таких папок можно создать сколько нужно и назвать их как удобно. Главное удобство, при их использовании, что можно не перечислять файлы поименно, а использовать стандартный символ замены
“*”, например
File “example\*.*” скопирует все файлы из папки example;
7. Сохраните результаты;
8. В проводнике Windows, нажмите на файле
setup.nsi правой кнопкой и выберите
Compile NSIS Script;
9. Если все сделано правильно, то в папке проекта будет создан файл с именем
{AR_NAME} Setup.exe, где вместо
{AR_NAME} будет подставлено ее значение
10. Теперь можно испытать, то что получилось, запустите:
После нажатия на кнопку “Установить”:
- в папке
Downloads будет создана подпапка с именем
{AR_NAME}, если папка существует, то все файлы из нее будут удалены (нужно для корректного обновления версий);
- в нее скопированы файлы
list.txt и
ar_wall.package;
- в реестре создана запись в секции “Uninstall” для “Установки и удаления программ” Windows;
- в папке оригиналом игры The Sims создан анинсталлер с именем
Un_{AR_NAME}.exe;
11. Если все заработало, то продолжим. Зайдите в “Установку и удаление программ” Windows, найдите ваш пакет (называться от будет по значению
{AR_INST_NAME} и удалите его;
12. Зайдите теперь в папку
examples и переименуйте файл
ar_wall.package в
{AR_NAME}_wall.package, где
{AR_NAME} то значение которое вы ему дали;
13. Откройте файл
setup.nsi и отредактируйте его:
14. Скомпилируйте как написано в п.8 и запустите; установщик работает подобно предыдущему примеру, но копирует файл
{AR_NAME}_wall.package не в
Downloads, а в
{Sims 2}\TSData\Res\Catalog\Bins;
15. Убедившись что все работает, удалите пакет.
Вот, в принципе, и все, этого достаточно, чтобы написать инсталлятор для большинства модов. Напоследок несколько замечаний:
- все команды пишутся с новой строки;
- количество секций
Section…SectionEnd практически не ограничено; секция
MUI_FUNCTION_DECRIPTION_BEGIN…MUI_FUNCTION_DECRIPT ION_END должна быть одна;
- имена описаний секций (
Sec_Kir в примере) должны быть уникальными для каждой секции;
- если после слова Section перед ее названием поставить
“/o” (без кавычек), то “галка”, в соответствующем чек-боксе будет снята;
- количество команд
!insertmacro и
File внутри секции не ограничено, первой командой в секции должна быть
!insertmacro, чтобы не возникло ситуации когда файлы копируются непонятно куда;
- в команде
!insertmacro для указания пути копирования можно использовать:
-
SavesDl – подпапка папки
Downloads;
-
EP0Bins –
{Sims2}\TSData\Res\Catalog\Bins;
-
EP0Skins –
{Sims2}\TSData\Res\Catalog\Skins;
-
EP0Over –
{Sims2}\TSData\Res\Overrides;
-
LEPBins –
{Последний аддон}\TSData\Res\Catalog\Bins;
-
LEPSkins –
{Последний аддон}\TSData\Res\Catalog\Skins;
-
LEPOver –
{Последний аддон}\TSData\Res\Overrides;
- последний аддон задается в параметре
AR_LEP файла
ar_sims_consts.nsh соответствующей ему веткой реестра;
- поскольку код для автоматического удаления модов генерируется автоматически, существует ограничение на имена файлов, копируемых в подпапки
TSData: файлы должны начинаться с
{AR_NAME} или
z_{AR_NAME}, сделано это потому, что иначе будет невозможно отличить их от файлов игры и файлов других пакетов;
- файлы копируемые в
Downloads могут называться произвольно;
- при копировании файлов папки в которых они лежат (
example в примере) не копируются, для того чтобы скопировать и папки тоже поставьте
“/r” после команды
File перед именем файла;
- пакеты созданные с использованием данного заголовочного файла автоматически создаются в режиме Solid LZMA и по степени сжатия превосходят архивы zip и rar;
- все команды описаны в помощи на NSIS.