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

Для початку кілька слів, для чого це, власне, потрібне. Зазвичай моди розповсюджують в архівах, це загальноприйнятий спосіб, який, на жаль, не позбавлений недоліків, основні з яких:
- для розпакування потрібно знати, куди розпаковувати (якщо зі звичайними модами достатньо знайти папку Downloads і розпакувати в неї, то з глобальними модами чи хаками такий спосіб не завжди проходить, до того ж при перекритті об'єктів вони починають позначатися як модифіковані («зірочкою») у грі та бодішопі);
- для розпакування потрібен архіватор, звичайно, не дуже сильний аргумент у країні, де софт ділиться на ліцензійний і решту, але все-таки;
- архів розпаковується цілком, тобто. як правило, неможливо вибрати, що конкретно встановлюється.
Нам знадобиться NSIS і блокнот (або щось сучасніше, типу Notepad++. Чому обраний NSIS? Тому, що він гнучкий, з широкими скриптовими можливостями та високоефективним архіватором, і нарешті просто мені подобається.
1. Завантажте та встановіть NSIS;
2. Скачайте заголовні файли;
3. Створіть папку в якій буде розміщуватися ваш проект і розпакуйте файли в неї, всього 4 файли та папка з прикладом:
- setup.nsi – заготівля для сценарію установки, у цьому файлі ми писатимемо скрипт;
- ar_sims.nsh - заголовний файл з базовим скриптом інсталятора, його чіпатине потрібно ;
- ar_sims_consts.nsh – заголовний файл із константами;
- list.txt – файл зі списком аддонів у пакеті (типу readme), файл має називатися list, але може мати розширення;

Тепер відредагуйте значення AR_NAME, AR_INST_NAME та AR_INST_VER.
Увага! Значення AR_NAME має бути унікальним і не містити пробілів – це значеннявикористовується як частина імен інсталятора та гілки у реєстрі.

Рядок 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. Якщо все зроблено правильно, то в папці проекту буде створено файл з ім'ям Setup.exe, де замість цього буде підставлено її значення;
10. Тепер можна випробувати те, що вийшло, запустіть:

Після натискання на кнопку "Встановити":
- у папці Downloads буде створено підпапку з ім'ям, якщо папка існує, то всі файли з неї будуть видалені (потрібно для коректного оновлення версій);
- у неї скопійовані файли list.txt та ar_wall.package;
- у реєстрі створено запис усекції “Uninstall” для “Установки та видалення програм” Windows;
- у папці оригіналом гри The Sims створений аніссталлер з ім'ям Un_.exe;
11. Якщо все запрацювало, то продовжимо. Зайдіть в "Встановлення та видалення програм" Windows, знайдіть ваш пакет (називатися від буде за значенням і видаліть його;
12. Зайдіть тепер у папку examples і перейменуйте файл ar_wall.package в _wall.package, де значення, яке ви йому дали;
13. Відкрийте файл setup.nsi та відредагуйте його:

14. Скомпілюйте як написано в п.7 і запустіть; установник працює подібно до попереднього прикладу, але копіює файл _wall.package не в Downloads, а в TSDataResCatalogBins;
15. Переконавшись, що все працює, видаліть пакет.
От, в принципі, і все, цього достатньо, щоб написати інсталятор для більшості модів. Насамкінець кілька зауважень:
- всі команди пишуться з нового рядка;
- кількість секцій Section ... SectionEnd практично не обмежена; секція MUI_FUNCTION_DECRIPTION_BEGIN…MUI_FUNCTION_DECRIPTION_END має бути одна;
- імена описів секцій (Sec_Kir у прикладі) мають бути унікальними для кожної секції;
- якщо після слова Section перед її назвою поставити “/o” (без лапок), то “галка” у відповідному чек-боксі буде знята;
- кількість команд !insertmacro і File всередині секції не обмежена, першою командою в секції має бути !insertmacro, щоб не виникло ситуації коли файли копіюються незрозуміло куди;
- у команді !insertmacro для вказівки шляху копіювання можна використовувати:
- SavesDl - підпапка папки Downloads;
- останній аддон задається у параметрі AR_LEP файлу ar_sims_consts.nsh
відповідною йому гілкою реєстру;
- оскільки код дляавтоматичного видалення модів генерується автоматично, існує обмеження на імена файлів, що копіюються в підпапки TSData: файли повинні починатися з або z_, зроблено це тому, що інакше буде неможливо відрізнити їх від файлів гри та файлів інших пакетів;
- файли, що копіюються в Downloads, можуть називатися довільно;
- при копіюванні файлів папки у яких вони лежать (example у прикладі) не копіюються, щоб скопіювати і папки теж поставте “/r” після команди File
перед ім'ям файлу;
- пакети створені з використанням даного файлу заголовка автоматично створюються в режимі Solid LZMA і за ступенем стиснення перевершують архіви zip і rar;