Advertisement
putintsev

Starfield The Perfect Recipe install code for InnoSetup

Nov 30th, 2024 (edited)
24
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Inno Script 7.44 KB | Source Code | 0 0
  1. ; Script generated by the Inno Setup Script Wizard.
  2. ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
  3.  
  4. #define MyAppName "The Perfect Recipe"
  5. #define MyVersionInfo="0.1.0.3"
  6. #define MyAppVersion "v21 11/8/2024"
  7. #define MyAppPublisher "BethesdaGameStudios"
  8. #define MyAppURL "https://creations.bethesda.net/en/starfield/details/daa65855-1e97-495d-aa7d-fd675e40024c/The_Perfect_Recipe"
  9. #define MyAppExeName "PerfectRecipe.exe"
  10.  
  11. [Setup]
  12. AppId={{B642ECAD-1F90-4E03-BABB-F7FAD0AE4322}
  13. AppName={#MyAppName}
  14. AppVersion={#MyAppVersion}
  15. AppPublisher={#MyAppPublisher}
  16. AppPublisherURL={#MyAppURL}
  17. AppSupportURL={#MyAppURL}
  18. AppUpdatesURL={#MyAppURL}
  19. ArchitecturesAllowed=x64compatible
  20. ArchitecturesInstallIn64BitMode=x64compatible
  21. DefaultGroupName={#MyAppName}
  22. DisableProgramGroupPage=yes
  23. PrivilegesRequiredOverridesAllowed=dialog
  24. OutputBaseFilename=PerfectRecipeV21I103
  25. Compression=lzma2
  26. SolidCompression=yes
  27. WizardStyle=modern
  28. LanguageDetectionMethod=UILanguage
  29. DefaultDirName=C:\Games\Starfield.Digital.Premium.Edition-InsaneRamZes\Data
  30. OutputDir=D:\media\!Downloads\Starfield_mods\PerfectRecipe\
  31. SetupIconFile=D:\media\!Downloads\Starfield_mods\favicon.ico
  32. InfoBeforeFile=D:\media\!Downloads\Starfield_mods\Deimog\Description_eng.txt
  33. LicenseFile=D:\media\!Downloads\Starfield_mods\!License\mit_eng.txt
  34. VersionInfoVersion={#MyVersionInfo}
  35.  
  36.  
  37. [Languages]
  38. Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"
  39. Name: "english"; MessagesFile: "compiler:Default.isl"
  40.  
  41.  
  42. [CustomMessages]
  43. russian.DescriptionFile=Описание на русском.
  44. russian.LicenseFile=Лицензия на русском.
  45. russian.StarfieldIniMissing=Файл "Starfield.ini" не найден в выбранном каталоге. Пожалуйста, выберите корректный каталог.
  46. russian.CreateFolderError=Ошибка. Не удалось создать каталог:
  47. english.DescriptionFile=Description in English.
  48. english.LicenseFile=License in English.
  49. english.StarfieldIniMissing=The file "Starfield.ini" was not found in the selected folder. Please choose the correct folder.
  50. english.CreateFolderError=Error. Failed to create the directory:
  51.  
  52. [Files]
  53. Source: "D:\media\!Downloads\Starfield_mods\PerfectRecipe\The Perfect Recipe v21\sfbgs00c.esm"; DestDir: "{app}"; Flags: ignoreversion
  54. Source: "D:\media\!Downloads\Starfield_mods\PerfectRecipe\The Perfect Recipe v21\sfbgs00c - main.ba2"; DestDir: "{app}"; Flags: ignoreversion
  55. Source: "D:\media\!Downloads\Starfield_mods\PerfectRecipe\The Perfect Recipe v21\sfbgs00c - textures.ba2"; DestDir: "{app}"; Flags: ignoreversion
  56. Source: "D:\media\!Downloads\Starfield_mods\PerfectRecipe\The Perfect Recipe v21\sfbgs00c - voices_de.ba2"; DestDir: "{app}"; Flags: ignoreversion
  57. Source: "D:\media\!Downloads\Starfield_mods\PerfectRecipe\The Perfect Recipe v21\sfbgs00c - voices_en.ba2"; DestDir: "{app}"; Flags: ignoreversion
  58. Source: "D:\media\!Downloads\Starfield_mods\PerfectRecipe\The Perfect Recipe v21\sfbgs00c - voices_es.ba2"; DestDir: "{app}"; Flags: ignoreversion
  59. Source: "D:\media\!Downloads\Starfield_mods\PerfectRecipe\The Perfect Recipe v21\sfbgs00c - voices_fr.ba2"; DestDir: "{app}"; Flags: ignoreversion
  60. Source: "D:\media\!Downloads\Starfield_mods\PerfectRecipe\The Perfect Recipe v21\sfbgs00c - voices_ja.ba2"; DestDir: "{app}"; Flags: ignoreversion
  61.  
  62. [Icons]
  63. Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
  64. Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"
  65.  
  66. [Code]
  67. var
  68.   TargetFolder, TargetFile, PluginEntry: string;
  69.   DescriptionPath, LicensePath: string;
  70.  
  71. //Пропишем основные пути и файлы  
  72. procedure InitializeGlobals;
  73. begin
  74.   TargetFolder := ExpandConstant('{localappdata}\starfield\');
  75.   TargetFile := TargetFolder + 'plugins.txt';
  76.   PluginEntry := '*sfbgs00c.esm';
  77.   DescriptionPath := 'D:\media\!Downloads\Starfield_mods\PerfectRecipe\';
  78.   LicensePath := 'D:\media\!Downloads\Starfield_mods\!License\';
  79. end;
  80.  
  81. //Проверяем наличие Starfield.ini, чтобы убедиться, что пользователь выбрал корректный каталог с игрой
  82. function CheckStarfieldIni(): Boolean;
  83. var
  84.   IniPath: string;
  85. begin
  86.   IniPath := ExpandConstant('{app}\..\Starfield.ini');
  87.   Result := FileExists(IniPath);
  88.   if not Result then
  89.     MsgBox(ExpandConstant('{cm:StarfieldIniMissing}'), mbError, MB_OK);
  90. end;
  91.  
  92. //Если каталог выбран невереный, то не пускаем дальше
  93. function NextButtonClick(CurPageID: Integer): Boolean;
  94. begin
  95.   Result := True;
  96.   if CurPageID = wpSelectDir then
  97.   begin
  98.     if not CheckStarfieldIni() then
  99.       Result := False;
  100.   end;
  101. end;
  102.  
  103. //Проверяем наличие каталога и создаём если его нет
  104. procedure EnsureDirectoryExists(Dir: string);
  105. begin
  106.   if not DirExists(Dir) then
  107.   begin
  108.     if not CreateDir(Dir) then
  109.         MsgBox(ExpandConstant('{cm:CreateFolderError}' + Dir), mbError, MB_OK);      
  110.   end;
  111. end;
  112.  
  113. //Создаём пустой файл, если он отсутствует
  114. procedure EnsureFileExists(FileName: string);
  115. begin
  116.   if not FileExists(FileName) then
  117.     TStringList.Create.SaveToFile(FileName);
  118. end;
  119.  
  120. //Запускаем проверку и создание каталогов/файлов, добавляем строку в файл.
  121. procedure AddPluginEntry;
  122. var
  123.   FileList: TStringList;
  124. begin
  125.   EnsureDirectoryExists(TargetFolder);
  126.   EnsureFileExists(TargetFile);
  127.  
  128.   FileList := TStringList.Create;
  129.   try
  130.     FileList.LoadFromFile(TargetFile);
  131.     FileList.Duplicates := dupIgnore;
  132.     if FileList.IndexOf(PluginEntry) = -1 then
  133.       FileList.Add(PluginEntry);
  134.     FileList.SaveToFile(TargetFile);
  135.   finally
  136.     FileList.Free;
  137.   end;
  138. end;
  139.  
  140. //При удалении мода удаляем добавленную строку из файла
  141. procedure RemovePluginEntry;
  142. var
  143.   FileList: TStringList;
  144.   i: Integer;
  145. begin
  146.   if not FileExists(TargetFile) then
  147.     Exit;
  148.  
  149.   FileList := TStringList.Create;
  150.   try
  151.     FileList.LoadFromFile(TargetFile);
  152.     for i := FileList.Count - 1 downto 0 do
  153.     begin
  154.       if CompareText(FileList[i], PluginEntry) = 0 then
  155.         FileList.Delete(i);
  156.     end;
  157.     FileList.SaveToFile(TargetFile);
  158.   finally
  159.     FileList.Free;
  160.   end;
  161. end;
  162.  
  163. //При удалении запускаем удаление строки из файла
  164. procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
  165. begin
  166.   if CurUninstallStep = usPostUninstall then
  167.   begin
  168.     InitializeGlobals;
  169.     RemovePluginEntry;
  170.   end;
  171. end;
  172.  
  173. //При установке определяем на каком языке будет лицензия и описание
  174. procedure InitializeWizard;
  175. begin  
  176.   if ActiveLanguage = 'russian' then
  177.   begin
  178.     WizardForm.LicenseMemo.Lines.LoadFromFile(LicensePath + 'mit_rus.txt');
  179.     WizardForm.InfoBeforeMemo.Lines.LoadFromFile(DescriptionPath + 'Description_rus.txt');
  180.   end
  181.   else
  182.   begin
  183.     WizardForm.LicenseMemo.Lines.LoadFromFile(LicensePath + 'mit_eng.txt');
  184.     WizardForm.InfoBeforeMemo.Lines.LoadFromFile(DescriptionPath + 'Description_eng.txt');
  185.   end;
  186. end;
  187.  
  188. //При установке запускаем проверку и создание каталогов/файлов, добавляем строку в файл.
  189. function InitializeSetup: Boolean;
  190. begin
  191.   InitializeGlobals;
  192.   AddPluginEntry;
  193.   Result := True;
  194. end;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement