Пережатиe/Pекомпрессия/Oптимизация файлов для лучшего сжатия

Статус
В этой теме нельзя размещать новые ответы.

Begun999

Мимокрокодил
Добрый день! Народ подскажите, как пользоваться фриарком? Сжимаю игру "Resident Evil Operation Raccoon City" на максималке получается более 5 Гб, в остальных репаках до 4 Гб (Пример: Как сжимают Каталисты или Феникс.). Какие ещё можно прописать функции сжатия, кроме тех, которые там уже есть по умолчанию?
Спасибо!
 

Begun999

Мимокрокодил
YURSHAT,
Но насколько мне известно Феникс жмёт арком, а Каталистов я привёл в пример.
 
Последнее редактирование:

LexBell

Борода
Супер модератор
Феникс жмёт арком
Между нами, девочками, как говорится, он не только жмет арком. Перед этим, он вырезает из игры то, что считает ненужным, ужимает невосполнимо все, что можно ужать, и то, что получится - уже жмет арком. по такой схеме - и 35 гиг можно на сд-болванку вкорячить, но лично я просто посмотрев объем раздачи - грубо говоря 700 метров и требуемое место на диске - 35 гектар - просто не буду качать такую раздачу. Репак феникса я качал один раз. Больше его репаков я качать не буду. ПРи заявленных - ничего не вырезано не перекодировано, я не досчитался в объеме процентов 30 в общей сложности, что неприятно поразило - я-то думал, и в правду ничего не вырезано и не перекодировано... Извиняюсь за оффтоп небольшой, просто накипело слегка уже.

Добавлено через 6 минут
Ах, да. Забыл основную-то мысль сказать - не стремитесь к максимальному сжатию, если в жертву приходится приносить качество - это путь в никуда.
 

Булат Зиганшин

Developer
Модератор
Короче, кинул я это дело. 0.1% на 4 часа. Если кто знает как сделать это быстрее, то подскажите)
100 раз уже говорилось, может в шапку записать? precomp создаёт временные файлы в тек. каталоге. если этот каталог будет на ram-диске, то он может работать и в 100 раз быстрей, это вполне реально

Добавлено через 3 минуты
Ах, да. Забыл основную-то мысль сказать - не стремитесь к максимальному сжатию, если в жертву приходится приносить качество - это путь в никуда.
ну уж кому что нужно. может я хочу просто быстро взглянуть на игрушку и снести. если сама игра займёт 100 мег, то не грех сделать и раздачу где всё остальное ужато в похожий объём

кстати, нечто похожее у меня вчера было. надо было закачать кучу музыки на планшет с 8 гигами. ну, музыку я перекодировал в 64 кбит, потом стал копировать и обнаружил, что во многих альбомах отсканированные каверы занимают в 10 раз больше, чем пережатые мной mp3-шки :)
 

Snoopak96

Старожил
работать и в 100 раз быстрей, это вполне реально
Проверял, создал диск в рам памяти и на нём опробовал прекомп - результат тот же что и на обычном харде.
З.Ы.:
"каждый фрагмент данных пытается распаковаться, а потом упаковаться с разными настройками сжатия
вот и посуди сколько на это надо времени
при чем процессорного
все остальное займет сотые %"
 

Devils Night

Ветеран
Надеюсь в тему написал.
Читал, читал я справку, и всё равно нифига не понял.
Написано так:
function ShowChangeDiskWindow
Код:
function ShowChangeDiskWindow (Text, DefPath, SearchFile: string):boolean;
показывает диалог с запросом следующего диска и ожиданием появления в DefaultPath файла, указанного SearchFile. Свой текст запроса можно указать значением Text;
DefaultPath - должен обязательно указывать {src}, иначе работоспособность не гарантируется;
SearchFile - файл, который каждые 0,2 секунды ищется по указанному пути;
Существует возможность в запросе сменить путь на другой, и если там будет найден SearchFile, то все последующие {src} в функциях распаковки будут идентифицироваться как указанный в данном диалоге путь.
Понял всё совсем по другому, думал что в:
Код:
function ShowChangeDiskWindow (Text, [B]DefPath[/B], SearchFile: string):boolean;
нужно DefPath заменить на {src}, компилю ошибка, не понял, начал рыть дальше, не нашёл.
Полез в некоторые проекты, юзал и искал в них, как должно быть, нашёл вот что:
Код:
if not ShowChangeDiskWindow ('Вставьте второй диск и дождитесь инициализации.', ExpandConstant('{src}'),'Имя_файла.Тип') then break;
вставил строку, и опять нифига не понял, второй архив находит, но не распаковывает. Начал рыть дальше, не нашёл ответа

Вот код:
Код:
#define NeedSize "21141406"
#define NeedMem 512
#define SecondProgressBar

;#define Components

;#define records


;#define unrar
#define PackZIP

[Setup]
AppName=ISDone
AppVerName=ISDone
DefaultDirName={pf}\ISDone
DefaultGroupName=ISDone Example
OutputDir=.
OutputBaseFilename=Setup
VersionInfoCopyright=ProFrager
SolidCompression=yes
#ifdef NeedSize
ExtraDiskSpaceRequired={#NeedSize}
#endif

//#ifdef Components
//[Types]
//Name: full; Description: Full installation; Flags: iscustom
//
//[Components]
//Name: text; Description: Язык субтитров; Types: full; Flags: fixed
//Name: text\rus; Description: Русский; Flags: exclusive; ExtraDiskSpaceRequired: 100000000
//Name: text\eng; Description: Английский; Flags: exclusive; ExtraDiskSpaceRequired: 200000000
//Name: voice; Description: Язык озвучки; Types: full; Flags: fixed
//Name: voice\rus; Description: Русский; Flags: exclusive; ExtraDiskSpaceRequired: 500000000
//Name: voice\eng; Description: Английский; Flags: exclusive; ExtraDiskSpaceRequired: 600000000
//#endif

[Registry]
Root: HKLM; Subkey: Software\ProFrager; ValueName: path; ValueType: String; ValueData: {app}; Flags: uninsdeletekey; Check: CheckError
Root: HKLM; Subkey: Software\ProFrager; ValueName: name; ValueType: String; ValueData: Data; Flags: uninsdeletekey; Check: CheckError

[Icons]
Name: {group}\Удалить пример ISDone; Filename: {app}\unins000.exe; WorkingDir: {app}; Check: CheckError
Name: {commondesktop}\Удалить пример ISDone; Filename: {app}\unins000.exe; WorkingDir: {app}; Check: CheckError

//[Tasks]
//Name: VCCheck; Description: Установить Microsoft Visual C++ 2005 Redist
//Name: PhysXCheck; Description: Установить Nvidia PhysX

//[Run]
//Filename: {src}\Redist\vcredist_x86.exe; Parameters: /q; StatusMsg: Устанавливаем Microsoft Visual C++ 2005 Redist...; Flags: skipifdoesntexist; Tasks: VCCheck; Check: CheckError
//Filename: {src}\Redist\PhysX.exe; Parameters: /qn; StatusMsg: Устанавливаем Nvidia PhysX...; Flags: skipifdoesntexist; Tasks: PhysXCheck; Check: CheckError

[Files]
Source: Include\English.ini; DestDir: {tmp}; Flags: dontcopy
Source: Include\unarc.dll; DestDir: {tmp}; Flags: dontcopy
Source: ISDone.dll; DestDir: {tmp}; Flags: dontcopy
#ifdef records
Source: records.inf; DestDir: {tmp}; Flags: dontcopy
#endif

#ifdef unrar
Source: Include\Unrar.dll; DestDir: {tmp}; Flags: dontcopy
#endif

#ifdef PackZIP
Source: Include\7z.dll; DestDir: {tmp}; Flags: dontcopy
Source: Include\packZIP.exe; DestDir: {tmp}; Flags: dontcopy
#endif

[CustomMessages]
russian.ExtractedFile=Извлекается файл:
russian.Extracted=Распаковка архивов...
russian.CancelButton=Отменить распаковку
russian.Error=Ошибка распаковки!
russian.ElapsedTime=Прошло:
russian.RemainingTime=Осталось времени:
russian.EstimatedTime=Всего:
russian.AllElapsedTime=Время установки:

[Languages]
Name: russian; MessagesFile: compiler:Languages\Russian.isl

[UninstallDelete]
Type: filesandordirs; Name: {app}

[Code]
const
  PCFonFLY=true;
  notPCFonFLY=false;
var
  LabelPct1,LabelCurrFileName,LabelTime1,LabelTime2,LabelTime3: TLabel;
  ISDoneProgressBar1: TNewProgressBar;
#ifdef SecondProgressBar
  LabelPct2: TLabel;
  ISDoneProgressBar2:TNewProgressBar;
#endif
  MyCancelButton: TButton;
  ISDoneCancel:integer;
  ISDoneError:boolean;
  PCFVer:double;

type
  TCallback = function (OveralPct,CurrentPct: integer;CurrentFile,TimeStr1,TimeStr2,TimeStr3:PAnsiChar): longword;

function WrapCallback(callback:TCallback; paramcount:integer):longword;external 'wrapcallback@files:ISDone.dll stdcall delayload';

function IS7ZipExtract(CurComponent:Cardinal; PctOfTotal:double; InName, OutPath: AnsiString; DeleteInFile:boolean; Password: AnsiString):boolean; external 'IS7zipExtract@files:ISDone.dll stdcall delayload';
function ISRarExtract(CurComponent:Cardinal; PctOfTotal:double; InName, OutPath: AnsiString; DeleteInFile:boolean; Password: AnsiString):boolean; external 'ISRarExtract@files:ISDone.dll stdcall delayload';
function ISPackZIP(CurComponent:Cardinal; PctOfTotal:double; InName, OutFile: AnsiString;ComprLvl:integer; DeleteInFile:boolean):boolean; external 'ISPackZIP@files:ISDone.dll stdcall delayload';
function ShowChangeDiskWindow(Text, DefaultPath, SearchFile:AnsiString):boolean; external 'ShowChangeDiskWindow@files:ISDone.dll stdcall delayload';

function Exec2 (FileName, Param: PAnsiChar;Show:boolean):boolean; external 'Exec2@files:ISDone.dll stdcall delayload';
function ISFindFiles(CurComponent:Cardinal; FileMask:AnsiString; var ColFiles:integer):integer; external 'ISFindFiles@files:ISDone.dll stdcall delayload';
function ISPickFilename(FindHandle:integer; OutPath:AnsiString; var CurIndex:integer; DeleteInFile:boolean):boolean; external 'ISPickFilename@files:ISDone.dll stdcall delayload';
function ISGetName(TypeStr:integer):PAnsichar; external 'ISGetName@files:ISDone.dll stdcall delayload';
function ISFindFree(FindHandle:integer):boolean; external 'ISFindFree@files:ISDone.dll stdcall delayload';

function FileSearchInit(RecursiveSubDir:boolean):boolean; external 'FileSearchInit@files:ISDone.dll stdcall delayload';
function ISDoneInit(RecordFileName:AnsiString; TimeType,Comp1,Comp2,Comp3:Cardinal; WinHandle, NeededMem:longint; callback:TCallback):boolean; external 'ISDoneInit@files:ISDone.dll stdcall';
function ISDoneStop:boolean; external 'ISDoneStop@files:ISDone.dll stdcall';
function ChangeLanguage(Language:AnsiString):boolean; external 'ChangeLanguage@files:ISDone.dll stdcall delayload';
function SuspendProc:boolean; external 'SuspendProc@files:ISDone.dll stdcall';
function ResumeProc:boolean; external 'ResumeProc@files:ISDone.dll stdcall';

function ProgressCallback(OveralPct,CurrentPct: integer;CurrentFile,TimeStr1,TimeStr2,TimeStr3:PAnsiChar): longword;
begin
  if OveralPct<=1000 then ISDoneProgressBar1.Position := OveralPct;
  LabelPct1.Caption := IntToStr(OveralPct div 10)+'.'+chr(48 + OveralPct mod 10)+'%';
#ifdef SecondProgressBar
  if CurrentPct<=1000 then ISDoneProgressBar2.Position := CurrentPct;
  LabelPct2.Caption := IntToStr(CurrentPct div 10)+'.'+chr(48 + CurrentPct mod 10)+'%';
#endif
  LabelCurrFileName.Caption:=ExpandConstant('{cm:ExtractedFile} ')+MinimizePathName(CurrentFile, LabelCurrFileName.Font, LabelCurrFileName.Width-ScaleX(100));
  LabelTime1.Caption:=ExpandConstant('{cm:ElapsedTime} ')+TimeStr2;
  LabelTime2.Caption:=ExpandConstant('{cm:RemainingTime} ')+TimeStr1;
  LabelTime3.Caption:=ExpandConstant('{cm:AllElapsedTime}')+TimeStr3;
  Result := ISDoneCancel;
end;

procedure CancelButtonOnClick(Sender: TObject);
begin
  SuspendProc;
  if MsgBox(SetupMessage(msgExitSetupMessage), mbConfirmation, MB_YESNO) = IDYES then ISDoneCancel:=1;
  ResumeProc;
end;

procedure HideControls;
begin
  WizardForm.FileNamelabel.Hide;
  ISDoneProgressBar1.Hide;
  LabelPct1.Hide;
  LabelCurrFileName.Hide;
  LabelTime1.Hide;
  LabelTime2.Hide;
  MyCancelButton.Hide;
#ifdef SecondProgressBar
  ISDoneProgressBar2.Hide;
  LabelPct2.Hide;
#endif
end;

procedure CreateControls;
var PBTop:integer;
begin
  PBTop:=ScaleY(50);
  ISDoneProgressBar1 := TNewProgressBar.Create(WizardForm);
  with ISDoneProgressBar1 do begin
    Parent   := WizardForm.InstallingPage;
    Height   := WizardForm.ProgressGauge.Height;
    Left     := ScaleX(0);
    Top      := PBTop;
    Width    := ScaleX(365);
    Max      := 1000;
  end;
  LabelPct1 := TLabel.Create(WizardForm);
  with LabelPct1 do begin
    Parent    := WizardForm.InstallingPage;
    AutoSize  := False;
    Left      := ISDoneProgressBar1.Width+ScaleX(5);
    Top       := ISDoneProgressBar1.Top + ScaleY(2);
    Width     := ScaleX(80);
  end;
  LabelCurrFileName := TLabel.Create(WizardForm);
  with LabelCurrFileName do begin
    Parent   := WizardForm.InstallingPage;
    AutoSize := False;
    Width    := ISDoneProgressBar1.Width+ScaleX(30);
    Left     := ScaleX(0);
    Top      := ScaleY(30);
  end;
#ifdef SecondProgressBar
  PBTop:=PBTop+ScaleY(25);
  ISDoneProgressBar2 := TNewProgressBar.Create(WizardForm);
  with ISDoneProgressBar2 do begin
    Parent   := WizardForm.InstallingPage;
    Left     := ScaleX(0);
    Top      := PBTop+ScaleY(8);
    Width    := ISDoneProgressBar1.Width;
    Max      := 1000;
    Height   := WizardForm.ProgressGauge.Height;
  end;
  LabelPct2 := TLabel.Create(WizardForm);
  with LabelPct2 do begin
    Parent    := WizardForm.InstallingPage;
    AutoSize  := False;
    Left      := ISDoneProgressBar2.Width+ScaleX(5);
    Top       := ISDoneProgressBar2.Top + ScaleY(2);
    Width     := ScaleX(80);
  end;
#endif
  LabelTime1 := TLabel.Create(WizardForm);
  with LabelTime1 do begin
    Parent   := WizardForm.InstallingPage;
    AutoSize := False;
    Width    := ISDoneProgressBar1.Width div 2;
    Left     := ScaleX(0);
    Top      := PBTop + ScaleY(35);
  end;
  LabelTime2 := TLabel.Create(WizardForm);
  with LabelTime2 do begin
    Parent   := WizardForm.InstallingPage;
    AutoSize := False;
    Width    := LabelTime1.Width+ScaleX(40);
    Left     := ISDoneProgressBar1.Width div 2;
    Top      := LabelTime1.Top;
  end;
  LabelTime3 := TLabel.Create(WizardForm);
  with LabelTime3 do begin
    Parent   := WizardForm.FinishedPage;
    AutoSize := False;
    Width    := 300;
    Left     := 180;
    Top      := 200;
  end;
  MyCancelButton:=TButton.Create(WizardForm);
  with MyCancelButton do begin
    Parent:=WizardForm;
    Width:=ScaleX(135);
    Caption:=ExpandConstant('{cm:CancelButton}');
    Left:=ScaleX(360);
    Top:=WizardForm.cancelbutton.top;
    OnClick:=@CancelButtonOnClick;
  end;
end;

Procedure CurPageChanged(CurPageID: Integer);
Begin
  if (CurPageID = wpFinished) and ISDoneError then
  begin
    LabelTime3.Hide;
    WizardForm.Caption:= ExpandConstant('{cm:Error}');
    WizardForm.FinishedLabel.Font.Color:= clRed;
    WizardForm.FinishedLabel.Caption:= SetupMessage(msgSetupAborted) ;
  end;
end;

function CheckError:boolean;
begin
  result:= not ISDoneError;
end;

procedure CurStepChanged(CurStep: TSetupStep);
var Comps1,Comps2,Comps3, TmpValue:cardinal;
    FindHandle1,ColFiles1,CurIndex1,tmp:integer;
    ExecError:boolean;
    InFilePath,OutFilePath,OutFileName:PAnsiChar;
begin
  if CurStep = ssInstall then begin  //Если необходимо, можно поменять на ssPostInstall
    WizardForm.ProgressGauge.Hide;
    WizardForm.CancelButton.Hide;
    CreateControls;
    WizardForm.StatusLabel.Caption:=ExpandConstant('{cm:Extracted}');
    ISDoneCancel:=0;

// Распаковка всех необходимых файлов в папку {tmp}.

//ExtractTemporaryFile('unarc.dll');

#ifdef records
    ExtractTemporaryFile('records.inf');
#endif

#ifdef unrar
    ExtractTemporaryFile('Unrar.dll');
#endif

#ifdef PackZIP
    ExtractTemporaryFile('7z.dll');
    ExtractTemporaryFile('PackZIP.exe');
#endif

//    ExtractTemporaryFile('English.ini');

// Подготавливаем переменную, содержащую всю информацию о выделенных компонентах для ISDone.dll
// максимум 96 компонентов.
//    Comps1:=0; Comps2:=0; Comps3:=0;
//#ifdef Components
//    TmpValue:=1;
//    if IsComponentSelected('text\rus') then Comps1:=Comps1+TmpValue;     //компонент 1
//    TmpValue:=TmpValue*2;
//    if IsComponentSelected('text\eng') then Comps1:=Comps1+TmpValue;     //компонент 2
//    TmpValue:=TmpValue*2;
//    if IsComponentSelected('voice\rus') then Comps1:=Comps1+TmpValue;    //компонент 3
//    TmpValue:=TmpValue*2;
//    if IsComponentSelected('voice\eng') then Comps1:=Comps1+TmpValue;    //компонент 4
//    .....
// см. справку
//#endif


    ISDoneError:=true;
    if ISDoneInit(ExpandConstant('{src}\records.inf'), $F777, Comps1,Comps2,Comps3, MainForm.Handle, {#NeedMem}, @ProgressCallback) then begin
      repeat
//        ChangeLanguage('English');
        if not FileSearchInit(true) then break;
        if not IS7ZipExtract   ( 0, 0, ExpandConstant('{src}\1.7z'), ExpandConstant('{app}'), false, '') then break;
        if not ShowChangeDiskWindow ('Вставьте второй диск и дождитесь инициализации.', ExpandConstant('{src}'),'2.7z') then break;

//    далее находятся закомментированые примеры различных функций распаковки (чтобы каждый раз не лазить в справку за примерами)
(*
        if not IS7ZipExtract   ( 0, 0, ExpandConstant('{src}\CODMW2.7z'), ExpandConstant('{app}\data1'), false, '') then break;
        if not ISRarExtract    ( 0, 0, ExpandConstant('{src}\data_*.rar'), ExpandConstant('{app}'), false, '') then break;
        if not ISPackZIP       ( 0, 0, ExpandConstant('{app}\1a1\*'), ExpandConstant('{app}\1a1.pak'), 2, false ) then break;
        if not ShowChangeDiskWindow ('Пожалуйста, вставьте второй диск и дождитесь его инициализации.', ExpandConstant('{src}'),'CODMW_2.arc') then break;

//    распаковка группы файлов посредством внешнего приложения

        FindHandle1:=ISFindFiles(0,ExpandConstant('{app}\*.ogg'),ColFiles1);
        ExecError:=false;
        while not ExecError and ISPickFilename(FindHandle1,ExpandConstant('{app}\'),CurIndex1,true) do begin
          InFilePath:=ISGetName(0);
          OutFilePath:=ISGetName(1);
          OutFileName:=ISGetName(2);
          ExecError:=not ISExec(0, 0, 0, ExpandConstant('{tmp}\oggdec.exe'), '"'+InFilePath+'" -w "'+OutFilePath+'"',ExpandConstant('{tmp}'),OutFileName,false);
        end;
        ISFindFree(FindHandle1);
        if ExecError then break;
*)

        ISDoneError:=false;
      until true;
      ISDoneStop;
    end;
    HideControls;
    WizardForm.CancelButton.Visible:=true;
    WizardForm.CancelButton.Enabled:=false;
  end;
  if (CurStep=ssPostInstall) and ISDoneError then begin
    Exec2(ExpandConstant('{uninstallexe}'), '/VERYSILENT', false);
  end;
end;
Мож кто что знает?
 

nik1967

Old Men
Проверенный
Devils Night, после if not ShowChangeDiskWindow пропиши распаковку 2 архива
if not IS7ZipExtract ( 0, 0, ExpandConstant('{src}\2.7z'), ExpandConstant('{app}'), false, '') then break;
 

Devils Night

Ветеран
пропиши распаковку 2 архива
Т.е при каждом архиве который на втором диске, нужно делать
Код:
 if not ShowChangeDiskWindow ('Вставьте второй диск и дождитесь инициализации.', ExpandConstant('{src}'),'2.7z') then break;
        if not IS7ZipExtract ( 0, 0, ExpandConstant('{src}\2.7z'), ExpandConstant('{app}'), false, '') then break;
        if not ShowChangeDiskWindow ('Вставьте второй диск и дождитесь инициализации.', ExpandConstant('{src}'),'3.7z') then break;
        if not IS7ZipExtract ( 0, 0, ExpandConstant('{src}\3.7z'), ExpandConstant('{app}'), false, '') then break;
        if not ShowChangeDiskWindow ('Вставьте второй диск и дождитесь инициализации.', ExpandConstant('{src}'),'4.7z') then break;
        if not IS7ZipExtract ( 0, 0, ExpandConstant('{src}\4.7z'), ExpandConstant('{app}'), false, '') then break;
, или можно как то упростить?
 

PUNISHER

Участник
Devils Night,один раз запрос диска, а потом распаковку нужных архивов
 

Edison007

Ветеран
Модератор
Devils Night
if not ShowChangeDiskWindow ('Вставьте второй диск и дождитесь инициализации.', ExpandConstant('{src}'),'2.7z') then break;
if not IS7ZipExtract ( 0, 0, ExpandConstant('{src}\2.7z'), ExpandConstant('{app}'), false, '') then break;
if not IS7ZipExtract ( 0, 0, ExpandConstant('{src}\3.7z'), ExpandConstant('{app}'), false, '') then break;
if not IS7ZipExtract ( 0, 0, ExpandConstant('{src}\4.7z'), ExpandConstant('{app}'), false, '') then break;
 

Devils Night

Ветеран
Всё, как бы понял, т.е получается так:
Код:
        if not ShowChangeDiskWindow ('Вставьте второй диск и дождитесь инициализации.', ExpandConstant('{src}'),'2.7z') then break;
        if not IS7ZipExtract ( 0, 0, ExpandConstant('{src}\2.7z'), ExpandConstant('{app}'), false, '') then break;
        if not IS7ZipExtract ( 0, 0, ExpandConstant('{src}\3.7z'), ExpandConstant('{app}'), false, '') then break;
        if not IS7ZipExtract ( 0, 0, ExpandConstant('{src}\4.7z'), ExpandConstant('{app}'), false, '') then break;
        if not IS7ZipExtract ( 0, 0, ExpandConstant('{src}\5.7z'), ExpandConstant('{app}'), false, '') then break;
если третий диск, то так:
Код:
        if not ShowChangeDiskWindow ('Вставьте третий диск и дождитесь инициализации.', ExpandConstant('{src}'),'6.7z') then break;
        if not IS7ZipExtract ( 0, 0, ExpandConstant('{src}\6.7z'), ExpandConstant('{app}'), false, '') then break;
        if not IS7ZipExtract ( 0, 0, ExpandConstant('{src}\7.7z'), ExpandConstant('{app}'), false, '') then break;
        if not IS7ZipExtract ( 0, 0, ExpandConstant('{src}\8.7z'), ExpandConstant('{app}'), false, '') then break;
        if not IS7ZipExtract ( 0, 0, ExpandConstant('{src}\9.7z'), ExpandConstant('{app}'), false, '') then break;
        if not IS7ZipExtract ( 0, 0, ExpandConstant('{src}\10.7z'), ExpandConstant('{app}'), false, '') then break;
и.т.д.
Вот только боюсь конфликта одного, что если вдруг так случится что установщик не найдёт необходимого архива, то в таком слёчае он же просто завершит распаковку.
P.S Справку перечитывал всю ночь, и оказывается не всегда справка помогает, вот я например много чего понял но совсем по другому, всё перепутал.
 
Последнее редактирование:

LexBell

Борода
Супер модератор
LinkOFF, неужели так трудно прочитать справку? Причем даже на этот вопрос отвечали неоднократно на всех форумах.
[SOURCE="iss"] TmpValue:=1;
if IsComponentSelected('voice\rus') then Comps1:=Comps1+TmpValue; //компонент 1
TmpValue:=TmpValue*2;
if IsComponentSelected('voice\eng') then Comps1:=Comps1+TmpValue; //компонент 2
TmpValue:=TmpValue*2;
if IsComponentSelected('text\rus') then Comps1:=Comps1+TmpValue; //компонент 3
TmpValue:=TmpValue*2;
if IsComponentSelected('text\eng') then Comps1:=Comps1+TmpValue; //компонент 4
.............................................
if not ISArcExtract ( 1, 0, ExpandConstant('{src}\audio.str'), ExpandConstant('{app}'), '', false, '', '',ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;
if not ISArcExtract ( 2, 0, ExpandConstant('{src}\levels.str'), ExpandConstant('{app}'), '', false, '', '',ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;
if not ISArcExtract ( 3, 0, ExpandConstant('{src}\movies.str'), ExpandConstant('{app}'), '', false, '', '',ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;
if not ISArcExtract ( 4, 0, ExpandConstant('{src}\gamedata.str'), ExpandConstant('{app}'), '', false, '', '',ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;
[/SOURCE] это и все остально изумительно понятно описано в справке к IsDone
 
Последнее редактирование:

v1nt

Мимокрокодил
ребят кто чем и как жмет макса пейна 3?
я по стандарту 7з-прекомп-среп-арк
может знает как лучше?
 

murlakatamenka

Новичок
ребят кто чем и как жмет макса пейна 3?
я по стандарту 7з-прекомп-среп-арк
может знает как лучше?
судя по времени установки (80-90 мин) имеющихся на данных момент репаков (~16,3-16,4 Гб - от Vansik, R.G. Origami), именно так и жали. весь MP3 = ролики (8 Гб .bik-ов) + куча .rpf (20.2 Гб!)
 

v1nt

Мимокрокодил
Gnom, да нет просто не понимаю как норм пожать:(

Добавлено через 33 секунды
хочу норм пожать и чтоб быстро устанавливалось
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху