Jump to content
Korean Random
EvilAlex

Создание инсталляторов для модпаков на базе Inno Setup

Recommended Posts

возможность делать бэкап

 

По бэкапу можно использовать такой вариант, он проще:

#define SourceDir "res_mods";
#define BackupDir "old_res_mods";

[Setup]
AppName=Test
AppVersion=1.5
DefaultDirName={pf}\Test
OutputDir=.

[Code]
var
  BackupCheck: TCheckBox;

procedure CopyFiles(FromPlace, ToPlace: String);
var
    ResultCode: Integer;
begin
    Exec('xcopy.exe', '/E /C /H /R /Y /F /I ' + AddQuotes(FromPlace) + ' ' + AddQuotes(ToPlace), ExpandConstant('{app}'), SW_HIDE, ewWaitUntilTerminated, ResultCode);
end;

procedure BackupCheckCreate();
begin
  BackupCheck:=TCheckBox.Create(WizardForm);
    with BackupCheck do
      begin
        Parent:=WizardForm.SelectDirPage;
        SetBounds(ScaleX(WizardForm.DirEdit.Left), ScaleY(WizardForm.DirEdit.Top + 40), ScaleX(WizardForm.DirEdit.Width), ScaleY(15));
        Caption:='Сохранить резервную копию перезаписываемых файлов';
        Checked:=True;
      end;
end;

procedure BackUp(CurStep: TSetupStep);
var
    ThereIsFolders: Boolean;
begin
  if BackupCheck.Checked then
  begin
    ThereIsFolders:=(DirExists(AddBackslash(WizardDirValue()) + '{#SourceDir}') and (not DirExists(AddBackslash(WizardDirValue()) + '{#BackupDir}')) );
    if ThereIsFolders then
    if CurStep=ssInstall then
      begin
        WizardForm.ProgressGauge.Hide;
        WizardForm.StatusLabel.Caption:='Создание резервных копий файлов...';
        CopyFiles(ExpandConstant('{app}') + '\{#SourceDir}\*.*', ExpandConstant('{app}') + '\{#BackupDir}');
        WizardForm.ProgressGauge.Show;
        WizardForm.StatusLabel.Caption:=SetupMessage(msgStatusExtractFiles);
      end;
  end;
end;

procedure InitializeWizard();
begin
  BackupCheckCreate();
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
   BackUp(CurStep);
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
    if CurUninstallStep = usPostUninstall then
      begin
        CopyFiles(ExpandConstant('{app}') + '\{#BackupDir}\*.*', ExpandConstant('{app}') + '\{#SourceDir}');
        DelTree(ExpandConstant('{app}') + '\{#BackupDir}', True, True, True);
      end;
end; 

 


 

добавить кнопу вкл./выкл. музыки

 

Набор скриптов, библиотек с их использованием (Автор: Kotyarko_O):

Набор скриптов, библиот…нием.rar - 31,12 МБ

Edited by night_dragon_on

Share this post


Link to post

Short link
Share on other sites

добавить кнопу вкл./выкл. музыки

Вот с музыкой и кнопкой: script.rar

Про бекап написано комментарием выше.

Share this post


Link to post

Short link
Share on other sites

Ребят, подкиньте идейку как впилить на 6 чуство при выборе одного из компонентов его озвучивание.

В теме вроде был рабочий вариант, но немогу найти.

Edited by Darksoul

Share this post


Link to post

Short link
Share on other sites

Я делал, ищи.
На Озоне ещё недавно вариантик бросал.

Edited by Kotyarko_O

Share this post


Link to post

Short link
Share on other sites

Ребят, подкиньте идейку как впилить на 6 чуство при выборе одного из компонентов его озвучивание.

В теме вроде был рабочий вариант, но немогу найти.

Share this post


Link to post

Short link
Share on other sites


Создал файл BackUpPage.iss скопировал в него код, кроме:

[setup]

AppName=Test

AppVersion=1.5

DefaultDirName={pf}\Test

OutputDir=.

 

подключаю его в основной script.iss как

#include "BackUpPage.iss"

 

компилирую и в итоге:

procedure InitializeWizard1();

https://www.dropbox.com/s/ovtwkvziq0upj6s/Untitled-1.png?dl=0

 

'Мой modpack'

Edited by Hienz

Share this post


Link to post

Short link
Share on other sites

компилирую и в итоге:

 

Похожий ответ давал на предыдущей странице:

 

Два раза использовали в коде процедуру с одним названием.

 

Вам нужно удалить часть кода из примера бекапа:

procedure InitializeWizard();
begin
  BackupCheckCreate();
end;

И добавить параметр BackupCheckCreate(); в уже существующую процедуру InitializeWizard, а не дублировать её (что и приводит к ошибке).

Edited by night_dragon_on

Share this post


Link to post

Short link
Share on other sites


конфликт строчек 

procedure InitializeWizard(); 

 

удаляю эту строчку из кода ля музыки , после компиляции естественно  перестает работать музыка в инсталляторе, но начинает работать BackUP криво отображая изображения в инсталляторе:

https://www.dropbox.com/s/vio75jc8drvsale/Untitled-2.png?dl=0

 

https://www.dropbox.com/s/muiap5xvpe6kyya/Untitled-3.png?dl=0

 

AtotlK написал:

Если не нужны надписи вверху страницы (там где картинка), то оставляйте пустые кавычки в строке:

BackupPage:=CreateCustomPage(wpWelcome, '', '');Тогда нужно будет ещё скрыть белый фон, на котором эти надписи отображаются. В InitializeWizard() добавьте:

WizardForm.PageNameLabel.Hide;

WizardForm.PageDescriptionLabel.Hide;

 

не помогает   8 (

Edited by Hienz

Share this post


Link to post

Short link
Share on other sites
procedure InitializeWizard();    удаляю эту строчку из кода ля музыки , после компиляции естественно  перестает работать музыка в инсталляторе

 

Так я писал о удалении строки от бекапа и добавления нужного параметра в уже существующую процедуру InitializeWizard(); (в вашем случае там находится часть кода отвечающего за проигрывание музыки и отображение фонового изображения). 

 

А вы как раз сделали все наоборот.

Edited by night_dragon_on

Share this post


Link to post

Short link
Share on other sites

Все работает 8 )  Всем большое СПАСИБО!!! 

 

 

Может подскажите как добавить лого по центру экрана при запуске модпака? (как у Amway921 и AtotlK в WOT-FAN)

 

Спасибо!

Edited by Hienz

Share this post


Link to post

Short link
Share on other sites

Может подскажите как добавить лого по центру экрана при запуске модпака?

 

'Код'

 

isgsg.dll

[Files]
Source: "Splash.png"; DestDir: "{tmp}"; Flags: ignoreversion dontcopy;
Source: "isgsg.dll"; DestDir: "{tmp}"; Flags: ignoreversion dontcopy;

[Code]
procedure ShowSplashScreen(p1:HWND;p2:ansistring;p3,p4,p5,p6,p7:integer;p8:boolean;p9:Cardinal;p10:integer); external 'ShowSplashScreen@files:isgsg.dll stdcall delayload';

procedure InitializeWizard;
begin
  ExtractTemporaryFile('Splash.png');
  ExtractTemporaryFile('isgsg.dll');
  ShowSplashScreen(WizardForm.Handle,ExpandConstant('{tmp}')+'\Splash.png',1000,3000,1000,0,255,False,$FFFFFF,10);
end;

Edited by night_dragon_on

Share this post


Link to post

Short link
Share on other sites

конфликт строчек 

procedure InitializeWizard(); 

 

удаляю эту строчку из кода ля музыки , после компиляции естественно  перестает работать музыка в инсталляторе, но начинает работать BackUP криво отображая изображения в инсталляторе:

https://www.dropbox.com/s/vio75jc8drvsale/Untitled-2.png?dl=0

 

https://www.dropbox.com/s/muiap5xvpe6kyya/Untitled-3.png?dl=0

 

AtotlK написал:

Если не нужны надписи вверху страницы (там где картинка), то оставляйте пустые кавычки в строке:

BackupPage:=CreateCustomPage(wpWelcome, '', '');Тогда нужно будет ещё скрыть белый фон, на котором эти надписи отображаются. В InitializeWizard() добавьте:

WizardForm.PageNameLabel.Hide;

WizardForm.PageDescriptionLabel.Hide;

 

не помогает   8 (

Наберите скайп kozyrny2 часиков в 8 по мск, помогу, трабл то мелкий:)

Есть у кого нибудь пример кода бекапа, если он отображает функции на странице wpSelectDirPage, которая отрисована с нуля с помощью ботвы?

Я даже знаю, какя сво... минуснула пост;)

Edited by Darksoul
  • Upvote 1
  • Downvote 2

Share this post


Link to post

Short link
Share on other sites
Есть у кого нибудь пример кода бекапа, если он отображает функции на странице wpSelectDirPage, которая отрисована с нуля с помощью ботвы?

 

Ну взять пример бекапа который предложил @AtotIK, там параметр Parent как раз и отвечает за расположение элементов на нужной вам странице.

 

 

Например у вас есть страница (форма) созданная с нуля и имеет название к примеру DirForm:

DirForm:=CreateCustomForm(); 
with DirForm do 
begin 
  ClientWidth:=ScaleX(500); 
  ClientHeight:=ScaleY(500); 
  Caption:='Выбор директории';  
end;

То задав параметр Parent:=DirForm; мы расположим элемент как раз на нужной нам форме:

procedure BackupCheckCreate();
begin
  BackupCheck:=TCheckBox.Create(WizardForm);
    with BackupCheck do
      begin
        Parent:=DirForm;
        SetBounds(ScaleX(WizardForm.DirEdit.Left), ScaleY(WizardForm.DirEdit.Top + 40), ScaleX(WizardForm.DirEdit.Width), ScaleY(15));
        Caption:='Сохранить резервную копию перезаписываемых файлов';
        Checked:=True;
      end;
end;

Edited by night_dragon_on

Share this post


Link to post

Short link
Share on other sites

Так я писал о удалении строки от бекапа и добавления нужного параметра в уже существующую процедуру InitializeWizard(); (в вашем случае там находится часть кода отвечающего за проигрывание музыки и отображение фонового изображения). 

 

А вы как раз сделали все наоборот.

 

Код и Splesh.png добавил, компиляция выполняется, модпак запускается. Время запуска увеличилось типа показывает Splesh, но на самом деле Splesh.png не отображается

 

Спасибо!

 

'script'

Share this post


Link to post

Short link
Share on other sites
но на самом деле Splesh.png не отображается

 

UPD: Похоже с Unicode версией компилятора загвоздка вышла, вот решение:

 

isgsg.dll работает и в анси и в юникоде. Просто в ее вызове нужно сменить единственный параметр string на ansistring и все. и никаких доработок не требуется

 

Код

Edited by night_dragon_on

Share this post


Link to post

Short link
Share on other sites

Добрый день, ребята может кто подсказать и поделится скриптом !?

Первый вариант удаляет содержимое папки рес_мод без всяких предупреждений

Второй тоже самое как и в первом но оставляет папку согласно патча 0.9.4 например 

Share this post


Link to post

Short link
Share on other sites

 

 

Первый вариант удаляет содержимое папки рес_мод без всяких предупреждений
[InstallDelete]
Type: filesandordirs; Name: "{app}\res_mods\*";

 

 

Второй тоже самое как и в первом но оставляет папку согласно патча 0.9.4 например
[InstallDelete]
Type: filesandordirs; Name: "{app}\res_mods\0.9.4\*";
Type: filesandordirs; Name: "{app}\res_mods\xvm";
  • Upvote 1

Share this post


Link to post

Short link
Share on other sites
[InstallDelete]
Type: filesandordirs; Name: "{app}\res_mods\*";
[InstallDelete]
Type: filesandordirs; Name: "{app}\res_mods\0.9.4\*";
Type: filesandordirs; Name: "{app}\res_mods\xvm";

Огромное Вам спасибо ! ! !!  :bo:  В тором варианте оставит папку xvm?

#define Patch "0.9.4"
Type: filesandordirs; Name: "{app}\res_mods\{#Patch}\*";
Type: filesandordirs; Name: "{app}\res_mods\xvm";

Так но верно получше?

Share this post


Link to post

Short link
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...