Пишем инсталлятор аддонов

Пишем инсталлятор аддонов
Автор: AnriRS

Для начала пару слов, для чего это, собственно, нужно. Обычно моды распространяют в архивах, это общепринятый способ, который, к сожалению, не лишен недостатков, основные из которых:

- для распаковки нужно знать, куда распаковывать (если с обычными модами достаточно найти папку 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:

installation01

Теперь отредактируйте значения AR_NAME, AR_INST_NAME и AR_INST_VER.

Внимание! Значение AR_NAME должно быть уникальным и не содержать пробелов – это значение используется как часть имен инсталлятора и ветки в реестре.

5. Теперь откройте в редакторе setup.nsi:

installation02

Как видите он практически пустой за исключением нескольких строк (дальше при ссылках на строку буду указывать ее номер отображаемый слева (там пока 1, 2, 3, …, 9):

Строка 1 – подключаем файл с базовым скриптом;

Строка 3 – вставляем макрос с базовым скриптом;

Строки 7 и 9 – задаем начало и конец описаний секций;

6. Теперь отредактируйте файл setup.nsi:

installation03

Строки 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. Теперь можно испытать, то что получилось, запустите:

installation04

После нажатия на кнопку “Установить”:

- в папке 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 и отредактируйте его:

installation05

14. Скомпилируйте как написано в п.7 и запустите; установщик работает подобно предыдущему примеру, но копирует файл {AR_NAME}_wall.package не в Downloads, а в {Sims 2}\TSData\Res\Catalog\Bins;

15. Убедившись что все работает, удалите пакет.


Вот, в принципе, и все, этого достаточно, чтобы написать инсталлятор для большинства модов. Напоследок несколько замечаний:

- все команды пишутся с новой строки;

- количество секций Section…SectionEnd практически не ограничено; секция MUI_FUNCTION_DECRIPTION_BEGIN…MUI_FUNCTION_DECRIPTION_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.

The Sims 3

The Sims 2

The Sims

MySims

Sims-игры

Даты релизов

the_sims_3_store_saleshymn_bunnersimovod_3simovod2Журнал «Симовод»Prosims - магазин сувениров