[Setup]
;В строке ниже пишется название загаловка инсталятора Мода или Той или иной программы. Которое пишется так Вас привествует мастер установки Имя
AppName=Имя
;Тут пишется ТОже что и в верхней строке только Чуть ниже в инсталлере
AppVerName=Имя
;Компания разработтчик мода/програмы
AppPublisher=Название
;Сайт разроботчика Мода будет в свойствах инсталлера по правому клику
AppPublisherURL=http://Templete.ru/
;Сайт поддержки програмы/мода
AppSupportURL=http://Templete.ru/
;Сайт обновлений Мода/програмы
AppUpdatesURL=http://Templete.ru/
;Стандартная директория установки в нашем случае D:\Games\Gothic II
DefaultDirName=D:\Games\Gothic
;Название папки в меню "Пуск"DefaultGroupName=Имя
;Имя файла установки полученого после компиляции
OutputBaseFilename=setup
;Метод сжатия пишется так: Метод/Плотность сжатия
;есть несколько типов сжатия LZMA самый сильный метод сжатия,Ниже его настройки:
;fast - самое слаое сжатие быстро распаковывается
;normal - нормальное чуть медленне
;max - стандартное сжатие
;ultra - Сильное сжатие при этом распаковка займет много времени как и упаковка впрочем
;ultra64 - Сильнейшее ВНИМАНИЕ! Может повередить файлы желательно не использовать
Compression=lzma/ultra
;Уплотние для более сильно сжатия по идеи лучше не юзать
SolidCompression=yes
;Фоновое окно в нашем случае я его отрубил
WindowVisible=no
;Версия файла инсталлятора
VersionInfoVersion=1.8.0.0
;хз зачем применения не нашел по этому в комент ее!))
;AppendDefaultDirName=no
[Languages]
;Языки инсталятора лежать в папке \Languages\ в корне установки
Name: "russian"; MessagesFile:"compiler:Languages\Russian.isl"
[Files]
;Файлы включаемые в установку с извлечением во временую папку(для разных фичь)
;записываются так Source: "Имя файла"; DestDir:"{tmp}"; Flags: dontcopy
;Сплеш заставка при входу в инсталлятор
Source:"splash.bmp"; DestDir:"{tmp}"; Flags: dontcopy
;Фоновое изображжение, скрин мода
Source:"Back.bmp"; DestDir:"{tmp}"; Flags: dontcopy
;библеотека для использования сплеш заставки при входе
Source:"callnsis.dll"; DestDir: {tmp}; Flags: dontcopy
Source:"AdvSplash.dll"; DestDir: {tmp}; Flags: dontcopy
;Библеотека для проигрывания музыки во время установки
Source:"BASS.dll"; DestDir:"{tmp}"; Flags: dontcopy
;Имя файла композиции для проигрывания во время установки взял из г3 =)
Source:"trelis_explore_night_01.ogg"; DestDir:"{tmp}"; Flags: dontcopy
;Загрузка скина и билиотеки для его обработки
Source:"ISSkin.dll"; DestDir:"{tmp}"; Flags: dontcopy
;Сам скин
Source:"Skin.MMT"; DestDir:"{tmp}"; Flags: dontcopy
;Дельше идут файлы Самого мода/Проги допустим это буит Work\MyMod\
;Source:"D:\Work\MyMod\*"; DestDir:"{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
;все файлы лежащие в данной папке будут включены в инсталлер
[Icons]
;Значки Рабочего стола, меню Пуск и тд
;Шаблоны писать небуду ибо их много только подпишу какая строка к какому значку
; если в файле нету значков то используем свой файл IconFilename: "{app}\1.ico";И еще для Exe айлов ОБАЗЯТЕЛЬНО писать WorkingDir:"{app}"для г2 и г1 это папки WorkingDir: "{app}\system";Значек в меню пуск в папке указанной в секции [Setup] DefaultGroupName=Имя
Name: "{group}\GothicStarter.EXE"; Filename:"{app}"; WorkingDir:"{app}\system";Значек на рабочем столе
Name: "{commondesktop}\GothicStarter.EXE"; Filename:"{app}"; WorkingDir:"{app}\system";Значек унинсталлера
Name: "{group}\Удалить Имя мода"; Filename:"{uninstallexe}"; WorkingDir:"{app}\system"
;Тут начинается самая Интересная и непонятная многим секция
;В ней можно сделать чтобы инсталятор при установке делал
;Бэкапы заменяемых файлов и тд
;Также проверка версии файла в папке установки для модов
;г2 используетя и г1 конечноже
;Много описать не смогу ибо сам все по шаблонам делал,
;но опишу какаой кусок кода за что отвечает
[code]
//Константы для проигрывания музыки
const
BASS_SAMPLE_LOOP = 4; //Число повторений -1 цклически
type
HSTREAM = DWORD; //Тип звуового потока(Зачем незнаю)
//роцедура замены стандартного сообщения при нажатии клавиши "Отмена"procedure CancelButtonClick(CurPage: Integer; var Cancel, Confirm: Boolean);
begin
Cancel:=False;
Confirm:=False;
if MsgBox('Вы действительно хотите отменить установку?', mbError, MB_YESNO) = idYes
then
Cancel:=true;
end;
//Процедура проверяющая версию exe файла в папке установки
//используется в модах готики
function NextButtonClick(CurPage: Integer): Boolean;
var
CurrentAppVersion,k:string;
begin
Result:=True;
If CurPage=6 then
begin
//Путь к проверяемумо файлу
GetVersionNumbersString(ExpandConstant('{app}') + '\system\gothic.exe', CurrentAppVersion);
//Условие при котором выполнится установка Мода в нашем случае условием является версия файла gothic2.exe
//if CurrentAppVersion < '2.6.0.0' then тут пишется какая должна быть версия файла
if CurrentAppVersion < '2.6.0.0' then
begin
//Если версия не там какая нада то выводим сообщение об ошибке
k:='Версия Gothic.exe не соответствует.' #13#13 'Для установки Мода требуются версия файла gothic2.exe 2.6.0.0 ';
MsgBox(k, mbCriticalError, mb_Ok);
Result:= False;
end;
end;
end;
//Тут производится объявление внутренних функций из внешних билиотек DLL для реализации чегонить нового =)
function BASS_Init(device: Integer; freq, flags: DWORD; win: hwnd; CLSID: Integer): Boolean;
external 'BASS_Init@files:BASS.dll stdcall delayload';
function BASS_StreamCreateFile(mem: BOOL; f: PChar; offset: DWORD; length: DWORD; flags: DWORD): HSTREAM;
external 'BASS_StreamCreateFile@files:BASS.dll stdcall delayload';
function BASS_Start(): Boolean;
external 'BASS_Start@files:BASS.dll stdcall delayload';
function BASS_ChannelPlay(handle: DWORD; restart: BOOL): Boolean;
external 'BASS_ChannelPlay@files:BASS.dll stdcall delayload';
function BASS_Stop(): Boolean;
external 'BASS_Stop@files:BASS.dll stdcall delayload';
function BASS_Free(): Boolean;
external 'BASS_Free@files:BASS.dll stdcall delayload';
{Loading DLL's}
function GetSystemMetrics(nIndex:Integer):Integer;
external 'GetSystemMetrics@user32.dll stdcall';
procedure callplug(parentwnd: Integer; pluginname,funcname,param1,param2,param3,param4,param5,param6,param7,param8,param9,param10: PChar);
external 'callplug@files:callnsis.dll stdcall';
// Importing LoadSkin API from ISSkin.DLL
procedure LoadSkin(lpszPath: String; lpszIniFileName: String);
external 'LoadSkin@files:isskin.dll stdcall';
// Importing UnloadSkin API from ISSkin.DLL
procedure UnloadSkin();
external 'UnloadSkin@files:isskin.dll stdcall';
// Importing ShowWindow Windows API from User32.DLL
function ShowWindow(hWnd: Integer; uType: Integer): Integer;
external 'ShowWindow@user32.dll stdcall';
{On klick URL Lebel}
//URL ссылка на сайт разраба в левом нижнем углу в нашем случае [url=http://worldofgothic.ru/]http://worldofgothic.ru/[/url]
procedure URLLabelOnClick(Sender: TObject);
var
ErrorCode: Integer;
begin
ShellExec('open', '[url=http://worldofgothic.ru/',]http://worldofgothic.ru/',[/url] '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);
end;
procedure CreateAboutButtonAndURLLabel(ParentForm: TSetupForm; CancelButton: TNewButton);
var
URLLabel: TNewStaticText;
begin
//Стиль и прочая {не ругайся} ссылки
URLLabel := TNewStaticText.Create(ParentForm);
URLLabel.Caption := 'MMT Studio';
URLLabel.Cursor := crHand;
URLLabel.OnClick := @URLLabelOnClick;
URLLabel.Parent := ParentForm;
URLLabel.Font.Style := URLLabel.Font.Style + [fsUnderline];
URLLabel.Font.Color := clBlue;
URLLabel.Top := CancelButton.Top;
URLLabel.Left := ParentForm.ClientWidth - CancelButton.Left - CancelButton.Width
end;
//Загруззка скина инсталлятора тут можно ставить ЛЮБУЮ тему от винды в качестве темы инсталлятора
function InitializeSetup(): Boolean;
begin
ExtractTemporaryFile('Skin.MMT'); //Имя файла темы(Расширение ЛЮБОЕ)
LoadSkin(ExpandConstant('{tmp}\Skin.MMT'), ''); //Тут тоже пишется имя файла темы
Result := True;
end;
//Удобный вид обзора папок в виде древа на странице выбора папки установки
var
DirTreeView: TFolderTreeView;
procedure DirFolderChange(Sender: TObject);
Begin
WizardForm.DirEdit.Text:=AddBackslash(DirTreeView.Directory) + ''
end;
//Инициализация местера установки
procedure InitializeWizard();
var
//Список переменных
width,height: Integer;
Page: TWizardPage;
BackgroundBitmapImage: TBitmapImage;
BitmapImage: TBitmapImage;
d: string;
s: string;
Name1: string;
i: Integer;
{BackGround Image}
//Фоновый рисунок Скрин из мода или чета вроде этого
begin
ExtractTemporaryFile('Back.bmp'); //Тут пишется имя файла указанное в секции [Files]
s:=ExpandConstant('{tmp}')+'\Back.bmp'; //Тоже
WizardForm.Position:=poScreenCenter;
MainForm.BORDERSTYLE:=bsNone;
width:=GetSystemMetrics(0);
height:=GetSystemMetrics(1);
MainForm.Width:=width;
MainForm.Height:=height;
width:=MainForm.ClientWidth;
height:=MainForm.ClientHeight;
MainForm.Left := 0;
MainForm.Top := 0;
BackgroundBitmapImage := TBitmapImage.Create(MainForm);
BackgroundBitmapImage.Bitmap.LoadFromFile(s);
BackgroundBitmapImage.Align := alClient;
BackgroundBitmapImage.Parent := MainForm;
BackgroundBitmapImage.Stretch:=True;
MainForm.Visible:=True;
{Splash screen}
//Сплеш заставка
ExtractTemporaryFile('splash.bmp')
ExtractTemporaryFile('AdvSplash.dll')
callplug(0,ExpandConstant('{tmp}\AdvSplash.dll'),'show','1000','3000','1500','-1',ExpandConstant('{tmp}\splash'),'','','','','')
//Цифрами 1000 3000 1500 задаются пареметры показа изображения: Время появления(Плавного) время показа и время затухания соответственно
//Пареметры просмотра древа папок на странице выбора папки установки
DirTreeView:=TFolderTreeView.Create(WizardForm)
DirTreeView.SetBounds(0,100,417,110)
DirTreeView.OnChange:=@DirFolderChange
DirTreeView.Parent:=WizardForm.SelectDirPage
//DirTreeView.ChangeDirectory(ExpandConstant('{pf}'), True) //Если папка установки Program Files то разкоментируйте
//Процедура воспроизведения музыки
ExtractTemporaryFile('BASS.dll');
ExtractTemporaryFile('trelis_explore_night_01.ogg'); //наш файл из г3
if BASS_Init(-1, 44100, 0, 0, 0) then
begin
BASS_Start();
Name1:=ExpandConstant('{tmp}\trelis_explore_night_01.ogg');
i:=BASS_StreamCreateFile(FALSE, PChar(Name1), 0, 0, 4);
if i <>0 then
begin
BASS_ChannelPlay(i, True);
end;
end;
end;
//Выгрузка темы музыки и тд
procedure DeInitializeSetup();
begin
ShowWindow(StrToInt(ExpandConstant('{wizardhwnd}')), 0);
UnloadSkin();
BASS_Stop();
BASS_Free();
end;