Что нового?

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
 

Вложения

Сверху