Advertisement
putintsev

Starfield Deimog Vehicle install code for InnoSetup

Nov 23rd, 2024 (edited)
437
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Inno Script 13.20 KB | Source Code | 0 0
  1. #define MyAppName "Deimog"
  2. #define MyVersionInfo="0.1.0.4"
  3. #define MyAppVersion "v1.0.69 11/13/2024"
  4. #define MyAppPublisher "BethesdaGameStudios"
  5. #define MyAppURL "https://creations.bethesda.net/en/starfield/details/e3295393-57db-47ba-91e4-2ba74133856a/Deimog"
  6. #define MyAppExeName "DeimogVehicle.exe"
  7.  
  8.  
  9. [Setup]
  10. AppId={{D954578E-053C-4D28-A5E2-111D12D6C704}
  11. AppName={#MyAppName}
  12. AppVersion={#MyAppVersion}
  13. AppPublisher={#MyAppPublisher}
  14. AppPublisherURL={#MyAppURL}
  15. AppSupportURL={#MyAppURL}
  16. AppUpdatesURL={#MyAppURL}
  17. ArchitecturesAllowed=x64compatible
  18. ArchitecturesInstallIn64BitMode=x64compatible
  19. DefaultGroupName={#MyAppName}
  20. DisableProgramGroupPage=yes
  21. PrivilegesRequiredOverridesAllowed=dialog
  22. OutputBaseFilename=DeimogVehicle
  23. Compression=lzma2
  24. SolidCompression=yes
  25. WizardStyle=modern
  26. LanguageDetectionMethod=UILanguage
  27. DefaultDirName=C:\Games\Starfield.Digital.Premium.Edition-InsaneRamZes
  28. OutputDir=D:\media\!Downloads\Starfield_mods\Deimog
  29. SetupIconFile=D:\media\!Downloads\Starfield_mods\favicon.ico
  30. InfoBeforeFile=D:\media\!Downloads\Starfield_mods\Deimog\Description_eng.txt
  31. LicenseFile=D:\media\!Downloads\Starfield_mods\!License\mit_eng.txt
  32. VersionInfoVersion={#MyVersionInfo}
  33. AppendDefaultDirName=No
  34.  
  35. [Languages]
  36. Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"
  37. Name: "english"; MessagesFile: "compiler:Default.isl"
  38.  
  39. [Files]
  40. Source: "Deimog v1.0.69\sfbgs019.esm"; DestDir: "{app}\data"; Flags: ignoreversion
  41. Source: "Deimog v1.0.69\sfbgs019 - main.ba2"; DestDir: "{app}\data"; Flags: ignoreversion
  42. Source: "Deimog v1.0.69\sfbgs019 - textures.ba2"; DestDir: "{app}\data"; Flags: ignoreversion
  43.  
  44. [Icons]
  45. Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
  46. Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"
  47.  
  48. [CustomMessages]
  49. russian.StarfieldIniMissing=Файл "Starfield.ini" не найден в выбранном каталоге. Пожалуйста, выберите корректный каталог.
  50. russian.CreateFolderError=Ошибка. Не удалось создать каталог:
  51. english.DescriptionFile=Description in English.
  52. english.LicenseFile=License in English.
  53. english.StarfieldIniMissing=The file "Starfield.ini" was not found in the selected folder. Please choose the correct folder.
  54. english.CreateFolderError=Error. Failed to create the directory:
  55.  
  56. [Code]
  57. var
  58.   TargetFolder, TargetFile, PluginEntry: string;
  59.  // DescriptionPath, LicensePath: string;
  60.  
  61. //Пропишем основные пути и файлы
  62. procedure InitializeGlobals;
  63. begin  
  64.   TargetFolder := ExpandConstant('{localappdata}\starfield\');
  65.   TargetFile := TargetFolder + 'plugins.txt';
  66.   PluginEntry := '*sfbgs019.esm';
  67.   //DescriptionPath := 'D:\media\!Downloads\Starfield_mods\Deimog\';
  68.   //LicensePath := 'D:\media\!Downloads\Starfield_mods\!License\';
  69. end;
  70.  
  71. //Проверяем наличие Starfield.ini, чтобы убедиться, что пользователь выбрал корректный каталог с игрой
  72. function CheckStarfieldIni(): Boolean;
  73. var
  74.   IniPath: string;
  75. begin
  76.   IniPath := AddBackslash(WizardForm.DirEdit.Text) + 'Starfield.ini';
  77.   Result := FileExists(IniPath);
  78.   if not Result then
  79.     MsgBox(ExpandConstant('{cm:StarfieldIniMissing}'), mbError, MB_OK);
  80. end;
  81.  
  82. //Если каталог выбран невереный, то не пускаем дальше
  83. function NextButtonClick(CurPageID: Integer): Boolean;
  84. begin
  85.   Result := True;
  86.   if CurPageID = wpSelectDir then
  87.   begin
  88.     if not CheckStarfieldIni() then
  89.       Result := False;
  90.   end;
  91. end;
  92.  
  93. //Проверяем наличие каталога и создаём если его нет
  94. procedure EnsureDirectoryExists(Dir: string);
  95. begin
  96.   if not DirExists(Dir) then
  97.   begin
  98.     if not CreateDir(Dir) then
  99.         MsgBox(ExpandConstant('{cm:CreateFolderError}' + Dir), mbError, MB_OK);      
  100.   end;
  101. end;
  102.  
  103. //Создаём пустой файл, если он отсутствует
  104. procedure EnsureFileExists(FileName: string);
  105. begin
  106.   if not FileExists(FileName) then
  107.     TStringList.Create.SaveToFile(FileName);
  108. end;
  109.  
  110. //Запускаем проверку и создание каталогов/файлов, добавляем строку в файл.
  111. procedure AddPluginEntry;
  112. var
  113.   FileList: TStringList;
  114. begin
  115.   EnsureDirectoryExists(TargetFolder);
  116.   EnsureFileExists(TargetFile);
  117.   FileList := TStringList.Create;
  118.   try
  119.     FileList.LoadFromFile(TargetFile);
  120.     FileList.Duplicates := dupIgnore;
  121.     if FileList.IndexOf(PluginEntry) = -1 then
  122.       FileList.Add(PluginEntry);
  123.     FileList.SaveToFile(TargetFile);
  124.   finally
  125.     FileList.Free;
  126.   end;
  127. end;
  128.  
  129. //При удалении мода удаляем добавленную строку из файла
  130. procedure RemovePluginEntry;
  131. var
  132.   FileList: TStringList;
  133.   i: Integer;
  134. begin
  135.   if not FileExists(TargetFile) then
  136.     Exit;
  137.  
  138.   FileList := TStringList.Create;
  139.   try
  140.     FileList.LoadFromFile(TargetFile);
  141.     for i := FileList.Count - 1 downto 0 do
  142.     begin
  143.       if CompareText(FileList[i], PluginEntry) = 0 then
  144.         FileList.Delete(i);
  145.     end;
  146.     FileList.SaveToFile(TargetFile);
  147.   finally
  148.     FileList.Free;
  149.   end;
  150. end;
  151.  
  152. //При удалении запускаем удаление строки из файла
  153. procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
  154. begin
  155.   if CurUninstallStep = usPostUninstall then
  156.   begin
  157.     InitializeGlobals;
  158.     RemovePluginEntry;
  159.   end;
  160. end;
  161.  
  162. //Встроим описание и лицензию
  163. procedure InitializeWizard;
  164. begin
  165.   if ActiveLanguage = 'russian' then
  166.   begin
  167.     WizardForm.LicenseMemo.Lines.Text := 'Copyright (c) 2024 3-50' + #13#10 +
  168. 'Данная лицензия разрешает лицам, получившим копию данного программного обеспечения и сопутствующей документации (далее — Программное обеспечение), безвозмездно использовать Программное обеспечение без ограничений, включая неограниченное право на использование, копирование, изменение, слияние, публикацию, распространение, сублицензирование и/или продажу копий Программного обеспечения, а также лицам, которым предоставляется данное Программное обеспечение, при соблюдении следующих условий:' + #13#10 +
  169. 'Указанное выше уведомление об авторском праве и данные условия должны быть включены во все копии или значимые части данного Программного обеспечения.' + #13#10 +
  170. 'ДАННОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНО ВЫРАЖЕННЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ ГАРАНТИИ ТОВАРНОЙ ПРИГОДНОСТИ, СООТВЕТСТВИЯ ПО ЕГО КОНКРЕТНОМУ НАЗНАЧЕНИЮ И ОТСУТСТВИЯ НАРУШЕНИЙ, НО НЕ ОГРАНИЧИВАЯСЬ ИМИ. НИ В КАКОМ СЛУЧАЕ АВТОРЫ ИЛИ ПРАВООБЛАДАТЕЛИ НЕ НЕСУТ ОТВЕТСТВЕННОСТИ ПО КАКИМ-ЛИБО ИСКАМ, ЗА УЩЕРБ ИЛИ ПО ИНЫМ ТРЕБОВАНИЯМ, В ТОМ ЧИСЛЕ, ПРИ ДЕЙСТВИИ КОНТРАКТА, ДЕЛИКТЕ ИЛИ ИНОЙ СИТУАЦИИ, ВОЗНИКШИМ ИЗ-ЗА ИСПОЛЬЗОВАНИЯ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ИЛИ ИНЫХ ДЕЙСТВИЙ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ.';
  171.     WizardForm.InfoBeforeMemo.Lines.Text := 'Деймог v1.0.69' + #13#10 +
  172. 'https://creations.bethesda.net/en/starfield/details/e3295393-57db-47ba-91e4-2ba74133856a/Deimog' + #13#10 +
  173. 'После покупки транспортного средства у продавца кораблей, Деймог автоматически появится в вашем ангаре.' + #13#10 +
  174. 'Установленная на нём ракетная установка может быть улучшена с помощью навыков разрушение, владением тяжёлым оружием, стрельба от бедра и точная стрельба.' + #13#10 +
  175.  + #13#10 +
  176. 'Cпасибо Wolverines за предоставленные файлы.' + #13#10 +
  177.  + #13#10 +
  178. 'Инсталлятор v1.04 делает следующее:' + #13#10 +
  179. '1. В каталог DATA игры копируются файлы: sfbgs019.esm, sfbgs019 - textures.ba2, sfbgs019 - main.ba2;' + #13#10 +
  180. '2. По умолчанию используется путь: C:\Games\Starfield.Digital.Premium.Edition-InsaneRamZes' + #13#10 +
  181. 'ВАЖНО: Если у вас в другом, то укажите (указывать надо каталог с игрой, корректность каталога проверяется по наличию файла starfield.ini);' + #13#10 +
  182. '3. Для активации мода в файл plugins.txt, который находится здесь %localappdata%\starfield, добавляется строка *sfbgs019.esm. Если файл или каталог отсутствуют, то они создаются;' + #13#10 +
  183. '4. Запускать от администратора требуется, если игра находится в каталогах типа program files;' + #13#10 +
  184. '5. При удалении мода внесённые изменения откатываются;' + #13#10 +
  185. '6. ВАЖНО: при игре с модами достижения отключаются, для их включения нужно установить Baka Achievement Enabler (SFSE) (https://www.nexusmods.com/starfield/mods/658).' + #13#10 +
  186.  + #13#10 +
  187. 'Исходный код для InnoSetup 6.*' + #13#10 +
  188. 'https://pastebin.com/1jRGYi3x'
  189.   end
  190.   else
  191.   begin
  192.     WizardForm.LicenseMemo.Lines.Text := 'Copyright (c) 2024 3-50' + #13#10 +
  193.     'Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:' + #13#10 +
  194.     'The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.' + #13#10 +
  195.     'THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.';
  196.     WizardForm.InfoBeforeMemo.Lines.Text := 'Deimog v1.0.69' + #13#10 +
  197. 'https://creations.bethesda.net/en/starfield/details/e3295393-57db-47ba-91e4-2ba74133856a/Deimog' + #13#10 +
  198. 'Once you`ve purchased vehicle access at a Ship Vendor, the Deimog will automatically appear in your vehicle hangar.' + #13#10 +
  199. 'The mounted rocket launcher can be upgraded through Demolitions, Heavy Weapon Certification, Targeting, and Sharpshooting skills.' + #13#10 +
  200.  + #13#10 +
  201. 'Thanks to Wolverines for the provided files.' + #13#10 +
  202.  + #13#10 +
  203. 'The installer v1.04 performs the following actions:' + #13#10 +
  204. '1. Copies the files sfbgs019.esm, sfbgs019 - textures.ba2, and sfbgs019 - main.ba2 to the game`s DATA directory;' + #13#10 +
  205. '2. By default, the path is set to C:\Games\Starfield.Digital.Premium.Edition-InsaneRamZes.' + #13#10 +
  206. 'IMPORTANT: If your game is located elsewhere, you must specify the correct directory (the exact folder containing the game).' + #13#10 +
  207. '3. To activate the mod, it adds the line *sfbgs019.esm to the plugins.txt file located at %localappdata%\starfield. If the file or directory is missing, they will be created.' + #13#10 +
  208. '4. Administrator rights are required if the game is installed in system directories like Program Files.' + #13#10 +
  209. '5. When uninstalling the mod, all changes made by the installer are reverted.' + #13#10 +
  210. '6. IMPORTANT: Playing with mods disables achievements. To re-enable them, you must install Baka Achievement Enabler (SFSE) (https://www.nexusmods.com/starfield/mods/658).' + #13#10 +
  211.  + #13#10 +
  212. 'Source Code for InnoSetup 6.*' + #13#10 +
  213. 'https://pastebin.com/1jRGYi3x'
  214.  
  215.   end;
  216. end;
  217.  
  218. //При установке запускаем проверку и создание каталогов/файлов, добавляем строку в файл.
  219. function InitializeSetup: Boolean;
  220. begin
  221.   InitializeGlobals;
  222.   AddPluginEntry;
  223.   Result := True;
  224. end;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement