Steam-rip. Часть 2. Скрипт на NSIS

Krinkels

Он где то тут
Администратор
Итак, вот и подоспела вторая часть. Для полноценного рипа нам не хватает скрипта. Что ж, начнем. Достаточно простенький скрипт. В качестве архиватора для игры будем использовать FreeArc. Сам скрипт и сопутствующие файлы во вложении

Код:
!addplugindir "plugins"

!include "nsDialogs.nsh"

; Для распаковки архивов
!define ArcExtract "unarc::ArcExtract /NOUNLOAD"

; Имя продукта
!define PRODUCT_NAME "Hotline Miami 2"
!define PRODUCT_PUBLISHER "Krinkels.inc"
!define PRODUCT_WEB_SITE "https://krinkels.org"

; Запуск инсталятора от имени администратора + метод сжатия файлов в инсталяторе
RequestExecutionLevel admin
SetCompressor /SOLID /FINAL lzma
SetCompressorDictSize 128

!include "MUI.nsh"

!define MUI_ABORTWARNING
!define MUI_ICON "HM2.ico"
!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico"

; Страница приветствия
!insertmacro MUI_PAGE_WELCOME

; Наша страница, идущая далее после приветствия
; На ней будет отображен выбор, куда устанавливать игру
Page custom PageSelectVersion PageSelectVersion2

; Выбор папки установки
!insertmacro MUI_PAGE_DIRECTORY
; Страница установки файлов
!insertmacro MUI_PAGE_INSTFILES
; Финиш
!insertmacro MUI_PAGE_FINISH

!insertmacro MUI_UNPAGE_INSTFILES

; Язык инсталятора
!insertmacro MUI_LANGUAGE "Russian"

!insertmacro MUI_RESERVEFILE_INSTALLOPTIONS

BrandingText "Krinkels Inc"

Name "${PRODUCT_NAME}"
OutFile "setup.exe"
InstallDir "$PROGRAMFILES\Hotline Miami 2"
ShowInstDetails show
ShowUnInstDetails show

;**************************************************************
; Наша страничка
Var DialogSH

Var CheckBoxSteam
Var CheckBoxNotSteam
Var RBSteamPath
Var SteamInstall

Function PageSelectVersion
!insertmacro MUI_HEADER_TEXT "Выбор установки" "На этой странице вы можете выбрать тип установки"
nsDialogs::Create 1018
Pop $DialogSH

${NSD_CreateRadioButton} 20 16u 70% 10% "Простая установка"
Pop $CheckBoxSteam

${NSD_CreateRadioButton} 20 32u 70% 10% "Установить в Steam"
Pop $CheckBoxNotSteam
${NSD_SetState} $CheckBoxNotSteam 1

;Путь из реестра 
    ReadRegStr $R3 HKEY_LOCAL_MACHINE "Software\Valve\Steam" "InstallPath"
    IfErrors +1 +2
    StrCmp $R3 "" +1 +2
    ${NSD_CreateLabel} 20 46u 70% 10% "$R3"
    Pop $RBSteamPath

nsDialogs::Show
FunctionEnd

Function PageSelectVersion2
    ; Установка в Steam?
    ${NSD_GetState} $CheckBoxNotSteam $0
    ${If} $0 <> 0
        ; Да
        StrCpy $INSTDIR "$R3"
        StrCpy $SteamInstall "1"
    ${Else}
        StrCpy $INSTDIR "$PROGRAMFILES\${PRODUCT_NAME}"
        StrCpy $SteamInstall "0"
    ${EndIf}
FunctionEnd
;**************************************************************

Section "Part One"

; Если установка в Steam
${If} $SteamInstall == "1"
    SetOutPath "$INSTDIR\steamapps"
    File "C:\Steam\steamapps\appmanifest_274170.acf"

    SetOutPath "$INSTDIR\depotcache"
    File "C:\Steam\depotcache\274172_7199041297203663559.manifest"
    File "C:\Steam\depotcache\274175_4640517193330318629.manifest"
    
    SetOutPath "$INSTDIR\steam\games"
    File "C:\Steam\steam\games\f4081f57b16e88e9aaedeb81bfb767d379cb23d6.ico"
    
    ; Распаковка архива с файлами
    ; Файл должен находиться рядом с инсталятором
    ${ArcExtract} "$EXEDIR\Data.bin" "$INSTDIR\steamapps\common\Hotline Miami 2" ""
    
    ; Создаем ярлыки
    CreateDirectory "$SMPROGRAMS\Hotline Miami 2"
    CreateShortCut "$SMPROGRAMS\Hotline Miami 2\Hotline Miami 2.lnk" "steam://rungameid/274170"
    CreateShortCut "$DESKTOP\Hotline Miami 2.lnk" "steam://rungameid/274170"

${Else}
    ; Если не в Steam то просто распаковываем игру в указанную папку
    ${ArcExtract} "$EXEDIR\Data.bin" "$INSTDIR" ""   

    ; Деинсталятор будет создаваться только если установка не в Steam
    WriteUninstaller "$INSTDIR\uninst.exe"

    ; Создаем ярлыки
    CreateDirectory "$SMPROGRAMS\Hotline Miami 2"
    CreateShortCut "$SMPROGRAMS\Hotline Miami 2\Hotline Miami 2.lnk" "$INSTDIR\HotlineMiami2.exe"
    CreateShortCut "$DESKTOP\Hotline Miami 2.lnk" "$INSTDIR\HotlineMiami2.exe"
${EndIf}

SectionEnd

Function un.onUninstSuccess
  HideWindow
  MessageBox MB_ICONINFORMATION|MB_OK "Удаление программы $(^Name) было успешно завершено."
FunctionEnd

Function un.onInit
  MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "Вы уверены в том, что желаете удалить $(^Name) и все компоненты программы?" IDYES +2
  Abort
FunctionEnd

Section Uninstall
  Delete "$INSTDIR\${PRODUCT_NAME}.url"
  Delete "$INSTDIR\uninst.exe"
  Delete "$INSTDIR\*"

  Delete "$SMPROGRAMS\Hotline Miami 2\Uninstall.lnk"
  Delete "$SMPROGRAMS\Hotline Miami 2\Website.lnk"
  Delete "$DESKTOP\Hotline Miami 2.lnk"
  Delete "$SMPROGRAMS\Hotline Miami 2\Hotline Miami 2.lnk"

  RMDir "$SMPROGRAMS\Hotline Miami 2"
  RMDir "$INSTDIR"

  SetAutoClose true
SectionEnd
 

Вложения

wewewe

Мимокрокодил
Здравствуйте, а как запустить или активировать скрипт?
 

Krinkels

Он где то тут
Администратор
Для начала скачать NSIS, и уже от этого плясать
 

thwwd333

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

ViTeC31

Мимокрокодил
Здравствуйте, сможете помочь сделать репак игры со Стима Wolfenstein the new order? Я просто дуб дубом, хочется сделать.
 

Krinkels

Он где то тут
Администратор
помочь сделать репак игры
Доброго времени суток. Для начала нужно почитать первую часть, далее взять любой понравившейся скрипт и просто упаковать игру, можно даже стандартными средствами inno
 

ViTeC31

Мимокрокодил
Спасибо за ответ, я уже сделал, я просто взял таблетку и положил в игру и она не просит Стима. Закинул в инно сетап и все ок.
 
Сверху