Jump to content
Korean Random
EvilAlex

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

Recommended Posts

Спасибо! Как-то пропустил, все изи там , а я туплю) Только привязать к моему скрипту будет пот)

Блин, фиг его под мой скрипт переделаешь!

а через Tasks не вариант? )))

Share this post


Link to post

Short link
Share on other sites

Вот валялся старый скрипт с этого сайта уже и не помню кто и когда его мне давал... Хотя у КотяркО там настолько все просто и понятно, что просто ужас и уж если ты не смог с его пака выдернуть, то учи все заново и читай справку, и этот скрипт тебе не поможет, т.к. его то же надо знать как и куда сунуть...

#define GameName "Sacred"
#define modpack_versionInfo "101"

[Setup]
AppName={#GameName}
AppVerName={#GameName}
DefaultDirName={pf}\{#GameName}
AppPublisher=troyan

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



[CustomMessages]
russian.Modpack=Модпак
russian.SupportForum=Тема на koreanrandom.com
russian.ForumLink=http://www.koreanrandom.com
russian.UpdatedLabel=Обновлено:
russian.WOT_version=Версия WOT:
russian.modpack_version=Версия модпака:
russian.installer_version=wotunion installer
russian.CheckingActualModpackVersionLabel=Проверка обновлений модпака...
russian.CannotCheckUpdate=Ошибка при проверке обновлений. Далее - для установки
russian.NoUpdates=Обновлений не найдено. Далее - для установки
russian.ErrorWhileOpeningUpdatePage=Ошибка при переходе на страницу загрузки
russian.AllIsReadyForInstall=Все готово для установки. Нажмите Далее для продолжения
russian.UpdateFound=найдено    
russian.httpVersion=http://proreduceri.tk/version.txt
russian.httpMsg=http://proreduceri.tk/msg.txt
russian.WOT_NotFound=Клиент World of Tanks не обнаружен. Установка будет прервана.
russian.for=для
russian.CheckAccess=Установка невозможна. Проверьте наличие прав доступа к файлам и папкам установленного клиента World of Tanks, закройте программы, которые используют папки и/или файли клиента World of Tanks, или запустите инсталлятор модпака с правами администратора.
russian.MustUninstallBefore=Установка невозможна. Воспользуйтесь деинсталлятором модпака для удаления предыдущей установки модпака (Пуск - Программы - wotunion modpack - Удалить wotunion modpack).
russian.NewVersionFound=Доступна новая версия модпака:
russian.GoToLink=Перейти по ссылке в браузере для загрузки ?
russian.CheckAccessUninstall=Деинсталляция невозможна. Проверьте наличие прав доступа к файлам и папкам установленного клиента World of Tanks закройте программы, которые используют папки и/или файлы клиента World of Tanks,  или запустите деинсталлятор модпака с правами администратора.



[Code]
 var
 CheckingActualModpackVersionLabel: TLabel;
 WelcomePageID: Integer;
 ActualVersion: String;
 ActualVersionLongint: Longint;
 InstallVersionLongint: Longint;
 ActualVersionMsg: String;
 ReadyToInstall: Boolean;
 TerminateInstall: Boolean;

function DownloadFile(const AURL: string; var AResponse: string): Boolean;
 var
  WinHttpRequest: Variant;
   begin
    Result := False;
     try
      WinHttpRequest := CreateOleObject('WinHttp.WinHttpRequest.5.1');
      WinHttpRequest.Open('GET', AURL, False);
      WinHttpRequest.Send;
      AResponse := WinHttpRequest.ResponseText;
     Case WinHttpRequest.Status of
      '200':
       begin
        Result := True;
       end;
     end;
     except
      ReadyToInstall:=True;
      AResponse := GetExceptionMessage;
      CheckingActualModpackVersionLabel.Caption:=ExpandConstant('{cm:CannotCheckUpdate}');
      Result := False;
     end;
   end;

procedure CurPageChanged(CurPageID: Integer);
 begin
  if CurPageID = wpSelectDir then
   begin

   end;
    WizardForm.InnerNotebook.Visible := CurPageID <> WelcomePageID;
 end;

function Form_CreatePage(PreviousPageId: Integer): Integer;
 var
  Page: TWizardPage;
   begin
    Page := CreateCustomPage(PreviousPageId, '', '');
    WelcomePageID := Page.ID;
    CheckingActualModpackVersionLabel := TLabel.Create(WizardForm);
     with CheckingActualModpackVersionLabel  do
      begin
       Parent := WizardForm.InnerPage;
       Visible:=True;
       Left := ScaleX(5);
       Top := ScaleY(292);
       Font.Color:= clBlack;
      end;
     Result := Page.ID;
   end;
  Procedure ForumLinkOnClick (Sender: TObject);
 var
  ErrorCode: Integer;
   Begin
    ShellExec ('open', ExpandConstant('{cm:ForumLink}'),'','', SW_SHOWNORMAL, ewNoWait, ErrorCode);
   end;

procedure InitializeWizard();
   begin
   Form_CreatePage(wpWelcome);

    with WizardForm.PageDescriptionLabel do
     begin
      Visible := False;
     end;
    with WizardForm.PageNameLabel do
     begin
      Visible := False;
     end;
  end;

function CheckUpdates():Boolean;
 var ErrorCode: Integer;
  begin
   if ReadyToInstall=False then
    begin
     CheckingActualModpackVersionLabel.Visible:=True;
     CheckingActualModpackVersionLabel.Caption := ExpandConstant('{cm:CheckingActualModpackVersionLabel}');
      if ((DownloadFile(ExpandConstant('{cm:httpVersion}'), ActualVersion)=True) and  (DownloadFile(ExpandConstant('{cm:httpMsg}'), ActualVersionMsg)=True)) then
       begin
        if (StrToIntDef(ActualVersion, ActualVersionLongint)) > (StrToIntDef('{#modpack_versionInfo}', InstallVersionLongint)) then
         begin
          CheckingActualModpackVersionLabel.Caption := CheckingActualModpackVersionLabel.Caption + ExpandConstant('{cm:UpdateFound}');
           if MsgBox(ExpandConstant('{cm:NewVersionFound}') + ActualVersionMsg + ExpandConstant('{cm:GoToLink}'), mbConfirmation, MB_YESNO) = IDYES then
            begin
             If not ShellExec('', ExpandConstant('{cm:ForumLink}'), '', '', SW_SHOW, ewNoWait, ErrorCode) then
              begin
               CheckingActualModpackVersionLabel.Caption:=ExpandConstant('{cm:ErrorWhileOpeningUpdatePage}');
               ReadyToInstall:=True;
               Result:=False;
              end
              else
               begin
                Result:=False;
                TerminateInstall:=True;
                WizardForm.Close;
              end;
            end
            else
             begin
              CheckingActualModpackVersionLabel.Caption:=ExpandConstant('{cm:AllIsReadyForInstall}');
              ReadyToInstall:=True;
              Result:=False;
            end;
         end
         else
          begin
           CheckingActualModpackVersionLabel.Caption:=ExpandConstant('{cm:NoUpdates}');
           ReadyToInstall:=True;
           Result:=False;
         end;
       end
       else
        begin
         CheckingActualModpackVersionLabel.Caption:=ExpandConstant('{cm:CannotCheckUpdate}');
         ReadyToInstall:=True;
         Result:=False;
       end;
    end
    else
     begin
      Result:=True;
    end;
  end;

function NextButtonClick(CurPageID: Integer): Boolean;
 begin
  if CurPageID <> WelcomePageID then
   begin
    Result:=True;
   end
   else
    begin
     Result:=CheckUpdates;
   end;
 end;

procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
 begin
  if ((CurPageID=WelcomePageID) and (TerminateInstall=True)) then  Confirm := False;
 end; 

Скачай не модпак его, а исходники, я же выше ссылку  дал на исходники и модпак, так не модпак, а исходники скачай, там все скрипты лежат, только без модов вот и все!!!

Это хичкок какой-то!!! (шутка). Менять надо прямо в инно?

Share this post


Link to post

Short link
Share on other sites

всем привет. вопрос на счет хвм а точнее вопрос про подмены конфигов. можно как то сделать чтобы на лету конфиг править а не просто с заменой файлов?  а то с заменой если делать,  ваще какая то лажа получается (

Share this post


Link to post

Short link
Share on other sites

Менять картинку в зависимости от %.

умел бы я вот и хочу от вас научится

Edited by sergy2010

Share this post


Link to post

Short link
Share on other sites

всем привет. вопрос на счет хвм а точнее вопрос про подмены конфигов. можно как то сделать чтобы на лету конфиг править а не просто с заменой файлов?  а то с заменой если делать,  ваще какая то лажа получается (

 

Можно конечно, даже нужно.

 

Что-то типа того:

function XVMConfigEdit(XCName, OldXCValue, NewXCValue: String): Boolean;
var
  XVMConfig: TStringList;
  XVMSetStr: TArrayOfString;
  XVMConfigDir, FileName, Tmp: String;
begin
  XVMConfigDir:=ExpandConstant('{app}\res_mods\configs\xvm\default\');
  FileName:=XVMConfigDir + XCName;
  If FileExists(FileName) then
  begin
    XVMConfig:=TStringList.Create;
    try
      XVMConfig.LoadFromFile(XVMConfigDir + XCName);
      Tmp:=XVMConfig.Text;
      StringChange(Tmp, OldXCValue, NewXCValue);
      XVMConfig.Text:=Tmp;
      XVMConfig.SaveToFile(XVMConfigDir + XCName);
      LoadStringsFromFile(XVMConfigDir + XCName, XVMSetStr);
      SaveStringsToUTF8File(XVMConfigDir + XCName, XVMSetStr, False);
    finally
      XVMConfig.Free;
    end;
  end;
end;

procedure XVMConfigCheck();
begin
  If IsComponentSelected('XVM\Spotted') then
  begin
    XVMConfigEdit('battle.xc', '"allowSpottedStatus": false,', '"allowSpottedStatus": true,');
  end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
  If CurStep = ssPostInstall then
  begin
    XVMConfigCheck();
  end;
end;

 

умел бы я вот и хочу от вас научится

Нет времени разбираться, что-то похожее нужно будет делать, только привязать это к % установки. Вообще примеры в "ентых самых ентернетах" точно есть.

///// ----- SlideShow - Begin ----- /////

type
  TimerProc = procedure(Sender: TObject);

var
  SlidePanel: TPanel;
  CurrentImage: Integer;
  AImg: array of Longint;

function CallbackAddr(Callback: TimerProc; ParamCount: Integer): LongWord; external 'wrapcallback@files:innocallback.dll stdcall';
function SetTimer(hWnd, nIDEvent, uElapse, lpTimerFunc: LongWord): LongWord; external '[email protected] stdcall';
function KillTimer(hWnd, nIDEvent: LongWord): LongWord; external '[email protected] stdcall';

procedure SlideOnTimer(Sender: TObject);
begin
  ImgSetVisibility(AImg[CurrentImage],False);
  CurrentImage:=CurrentImage + 1;
  If CurrentImage > GetArrayLength(AImg) - 1 then CurrentImage:=0;
  ImgSetVisibility(AImg[CurrentImage], True);
  ImgApplyChanges(SlidePanel.Handle);
end;

procedure SlideCreate();
begin
  SlidePanel:=TPanel.Create(WizardForm);
  with SlidePanel do
  begin
    Parent:=WizardForm;
    SetBounds(ScaleX(6), ScaleY(6), ScaleX(688), ScaleY(312));
    BevelInner:=bvNone;
    BevelOuter:=bvNone;
  end;

  CurrentImage:=0;
  SetArrayLength(AImg, 20);
  AImg[0]:=ImgLoad(SlidePanel.Handle, ExpandConstant('{tmp}\SlideShowImage_0.jpg'), ScaleX(0), ScaleY(0), ScaleX(0), ScaleY(0), False, True);
  AImg[1]:=ImgLoad(SlidePanel.Handle, ExpandConstant('{tmp}\SlideShowImage_1.jpg'), ScaleX(0), ScaleY(0), ScaleX(0), ScaleY(0), False, True);
  AImg[2]:=ImgLoad(SlidePanel.Handle, ExpandConstant('{tmp}\SlideShowImage_2.jpg'), ScaleX(0), ScaleY(0), ScaleX(0), ScaleY(0), False, True);
  AImg[3]:=ImgLoad(SlidePanel.Handle, ExpandConstant('{tmp}\SlideShowImage_3.jpg'), ScaleX(0), ScaleY(0), ScaleX(0), ScaleY(0), False, True);
  AImg[4]:=ImgLoad(SlidePanel.Handle, ExpandConstant('{tmp}\SlideShowImage_4.jpg'), ScaleX(0), ScaleY(0), ScaleX(0), ScaleY(0), False, True);
  AImg[5]:=ImgLoad(SlidePanel.Handle, ExpandConstant('{tmp}\SlideShowImage_5.jpg'), ScaleX(0), ScaleY(0), ScaleX(0), ScaleY(0), False, True);
  AImg[6]:=ImgLoad(SlidePanel.Handle, ExpandConstant('{tmp}\SlideShowImage_6.jpg'), ScaleX(0), ScaleY(0), ScaleX(0), ScaleY(0), False, True);
  AImg[7]:=ImgLoad(SlidePanel.Handle, ExpandConstant('{tmp}\SlideShowImage_7.jpg'), ScaleX(0), ScaleY(0), ScaleX(0), ScaleY(0), False, True);
  AImg[8]:=ImgLoad(SlidePanel.Handle, ExpandConstant('{tmp}\SlideShowImage_8.jpg'), ScaleX(0), ScaleY(0), ScaleX(0), ScaleY(0), False, True);
  AImg[9]:=ImgLoad(SlidePanel.Handle, ExpandConstant('{tmp}\SlideShowImage_9.jpg'), ScaleX(0), ScaleY(0), ScaleX(0), ScaleY(0), False, True);
  AImg[10]:=ImgLoad(SlidePanel.Handle, ExpandConstant('{tmp}\SlideShowImage_10.jpg'), ScaleX(0), ScaleY(0), ScaleX(0), ScaleY(0), False, True);
  AImg[11]:=ImgLoad(SlidePanel.Handle, ExpandConstant('{tmp}\SlideShowImage_11.jpg'), ScaleX(0), ScaleY(0), ScaleX(0), ScaleY(0), False, True);
  AImg[12]:=ImgLoad(SlidePanel.Handle, ExpandConstant('{tmp}\SlideShowImage_12.jpg'), ScaleX(0), ScaleY(0), ScaleX(0), ScaleY(0), False, True);
  AImg[13]:=ImgLoad(SlidePanel.Handle, ExpandConstant('{tmp}\SlideShowImage_13.jpg'), ScaleX(0), ScaleY(0), ScaleX(0), ScaleY(0), False, True);
  AImg[14]:=ImgLoad(SlidePanel.Handle, ExpandConstant('{tmp}\SlideShowImage_14.jpg'), ScaleX(0), ScaleY(0), ScaleX(0), ScaleY(0), False, True);
  AImg[15]:=ImgLoad(SlidePanel.Handle, ExpandConstant('{tmp}\SlideShowImage_15.jpg'), ScaleX(0), ScaleY(0), ScaleX(0), ScaleY(0), False, True);
  AImg[16]:=ImgLoad(SlidePanel.Handle, ExpandConstant('{tmp}\SlideShowImage_16.jpg'), ScaleX(0), ScaleY(0), ScaleX(0), ScaleY(0), False, True);
  AImg[17]:=ImgLoad(SlidePanel.Handle, ExpandConstant('{tmp}\SlideShowImage_17.jpg'), ScaleX(0), ScaleY(0), ScaleX(0), ScaleY(0), False, True);
  AImg[18]:=ImgLoad(SlidePanel.Handle, ExpandConstant('{tmp}\SlideShowImage_18.jpg'), ScaleX(0), ScaleY(0), ScaleX(0), ScaleY(0), False, True);
  AImg[19]:=ImgLoad(SlidePanel.Handle, ExpandConstant('{tmp}\SlideShowImage_19.jpg'), ScaleX(0), ScaleY(0), ScaleX(0), ScaleY(0), False, True);
  ImgSetVisibility(AImg[1], False);
  ImgSetVisibility(AImg[2], False);
  ImgSetVisibility(AImg[3], False);
  ImgSetVisibility(AImg[4], False);
  ImgSetVisibility(AImg[5], False);
  ImgSetVisibility(AImg[6], False);
  ImgSetVisibility(AImg[7], False);
  ImgSetVisibility(AImg[8], False);
  ImgSetVisibility(AImg[9], False);
  ImgSetVisibility(AImg[10], False);
  ImgSetVisibility(AImg[11], False);
  ImgSetVisibility(AImg[12], False);
  ImgSetVisibility(AImg[13], False);
  ImgSetVisibility(AImg[14], False);
  ImgSetVisibility(AImg[15], False);
  ImgSetVisibility(AImg[16], False);
  ImgSetVisibility(AImg[17], False);
  ImgSetVisibility(AImg[18], False);
  ImgSetVisibility(AImg[19], False);
  ImgApplyChanges(SlidePanel.Handle);
end;

procedure SlideChange(CurPageID: Integer);
begin
if CurPageID = wpInstalling then
begin
  SetTimer(WizardForm.Handle, 1, 10000, CallbackAddr(@SlideOnTimer, 0));
end;
end;

///// ----- SlideShow - End ----- /////

procedure CurPageChanged(CurPageID: Integer);
begin
  SlideChange(CurPageID);
end;

Edited by AtotIK
  • Upvote 1

Share this post


Link to post

Short link
Share on other sites
Можно конечно, даже нужно.   Что-то типа того:

 А в секции компонент что нужно писать исходя  из данного примера?

Edited by ЛОМ

Share this post


Link to post

Short link
Share on other sites

 А в секции компонент что нужно писать исходя  из данного примера?

Указать название компонента в XVMConfigCheck().

 

post-12922-0-83650500-1503491030_thumb.png

  • Upvote 2

Share this post


Link to post

Short link
Share on other sites
Указать название компонента в XVMConfigCheck().

 

я так и подумал и так сделал но что то он не заводится...

 

P/S... завелась. XVMConfigCheck(). просто нужно было в самый конец процедуры вписать ))  AtotIK спасибо большое!

Edited by ЛОМ

Share this post


Link to post

Short link
Share on other sites

еще вопрос. а в таком варианте как нужно вписать?

 
 "camera": {
// false - disable camera settings.
// false - отключить настройки камеры.
"enabled": true,
// true - disable red flash when enemy hit your tank.
// true - отключить красную вспышку когда враг попадает по вам.
"noFlashBang": false,
// true - hide the tips about switching to siege mode and aiming mode changing in strategic mode.
// true - скрыть подсказки перехода в осадный режим и смены режима прицеливания в стратегическом режиме.
"hideHint": false,
// Arcade mode
// Аркадный режим
"arcade": {
// Camera distance range: [min, max], default - [2, 25]
// Отдаление камеры: [мин, макс], по умолчанию - [2, 25]
"distRange": [2, 150],
// Start distance (null for default behavior - saved state from the last battle)
// Начальная дистанция (null для поведения по умолчанию - сохраненная позиция из последнего боя)
"startDist": null,
// Чувствительность прокрутки (default = 5)
// Scroll sensitivity (по умолчанию = 5)
"scrollSensitivity": 5,
// false - disable the shot recoil effect (for the enabled dynamic camera option)
// false - выключить эффект отдачи от выстрела (для включенной опции динамической камеры)
"shotRecoilEffect": true
},
// Postmortem mode
// Режим после смерти
"postmortem": {
// Camera distance range: [min, max], default - [2, 25]
// Отдаление камеры: [мин, макс], по умолчанию - [2, 25]
"distRange": [2, 55],
// Start distance (null for default behavior - maximum distance)
// Начальная дистанция (null для поведения по умолчанию - максимальная дистанция)
"startDist": null,
// Чувствительность прокрутки (default = 5)
// Scroll sensitivity (по умолчанию = 5)
"scrollSensitivity": 5,
// false - disable the shot recoil effect (for the enabled dynamic camera option)
// false - выключить эффект отдачи от выстрела (для включенной опции динамической камеры)
"shotRecoilEffect": true

тут в одном файле два одинаковых как бы пункта. как в скрипте прописать именно к аркаде к примеру? 

procedure XVMConfigCheck();
begin
  If IsComponentSelected('XVM\camera') then
  begin
    XVMConfigEdit('camera.xc', '"shotRecoilEffect": false,', '"shotRecoilEffect": true,');
  end;
end;

если так то он меняет в обоих пунктах 

Edited by ЛОМ

Share this post


Link to post

Short link
Share on other sites

 

 

Привязать еще и к верхней строке.
 

 

это понятно, но как?  )) разжуй пожалуйста )))   

Share this post


Link to post

Short link
Share on other sites

это понятно, но как?  )) разжуй пожалуйста )))  

    FileName_34a:=ExpandConstant('{app}\{#ConfigDir}\playersPanel.xc');
    OldText_34a:='//${"def.TanksHPAlly_Short_Bg"},' #13#10 '        //${"def.TanksHPAlly_Short"},';
    NewText_34a:='${"def.TanksHPAlly_Short_Bg"},' #13#10 '        ${"def.TanksHPAlly_Short"},';
    XVMConfigEdit(FileName_34a, OldText_34a, NewText_34a);
  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

Приветствую всех! Мог-бы кто-нибудь за определенную плату собрать модпак из этих исходников https://bitbucket.org/Kotyarko_O/kmp/downloads/

О цене и остальных деталях писать в личку. (могу дать жабу , если надо)

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...