Get Steam account name and install path: Difference between revisions

From NSIS Wiki
Jump to navigationJump to search
m (Adding new author and category links.)
m (Reverted edits by 74.36.164.221 to last version by 68.186.162.227)
 
(17 intermediate revisions by 12 users not shown)
Line 12: Line 12:
Pop $R0 ; account name e.g. afrow uk
Pop $R0 ; account name e.g. afrow uk
Pop $R1 ; steam path e.g. C:\Valve\Steam
Pop $R1 ; steam path e.g. C:\Valve\Steam
</highlight-nsis>
If Steam is not installed, then empty strings are returned.
If Steam is installed but no accounts are found, then the account name returned is "[ACCOUNT_NAME]".
== Example ==
Perhaps you want your $INSTDIR to be the full path to the SourceMods folder (for HL2), in which case you'd do it like so:
<highlight-nsis>
LangString SteamNotInstalled ${LANG_ENGLISH} "Valve's Steam is not installed!$\r$\nSetup will now exit."
Function .onInit
  Call GetSteamAccountName
  Pop $R0 ; CaDDy-
  Pop $R1 ; E\Games\Steaaam
  # Check if Steam is installed
  StrCmp $R0 "" 0 +3
    MessageBox MB_OK|MB_ICONSTOP $(SteamNotInstalled)
    Abort
  # It is installed so set INSTDIR
  StrCpy $INSTDIR "$R1\SteamApps\$R0\SourceMods\MyMod"
FunctionEnd
</highlight-nsis>
</highlight-nsis>


Line 48: Line 76:
  loopFile:
  loopFile:
   StrCmp $R2 "SourceMods" nextFile
   StrCmp $R2 "SourceMods" nextFile
  #added this for the newest steam (common/media is other content (like trailers and 3rd party games)
  StrCmp $R2 "common"    nextFile
  StrCmp $R2 "media"      nextFile
   StrCmp $R2 "."          nextFile
   StrCmp $R2 "."          nextFile
   StrCmp $R2 ".."        nextFile
   StrCmp $R2 ".."        nextFile
Line 80: Line 111:


Written for [[User:new NSIS user|new NSIS user]] in [http://forums.winamp.com/showthread.php?postid=1703925 this forum topic] (modified afterwards for Source mod developers).
Written for [[User:new NSIS user|new NSIS user]] in [http://forums.winamp.com/showthread.php?postid=1703925 this forum topic] (modified afterwards for Source mod developers).
Edit (amckern) The VDC has a more complete script found at http://developer.valvesoftware.com/wiki/Source_Mod_Installers


-Stu
-Stu


[[Category:Other Products Handling Functions]]
[[Category:Other Products Handling Functions]]

Latest revision as of 05:14, 22 July 2008

Author: Afrow UK (talk, contrib)


Description

This gets the account name for Valve's Steam (Half-Life 1, 2 etc) It also returns Steam's install path (e.g. C:\Valve\Steam)

Usage

Call GetSteamAccountName
Pop $R0 ; account name e.g. afrow uk
Pop $R1 ; steam path e.g. C:\Valve\Steam

If Steam is not installed, then empty strings are returned.

If Steam is installed but no accounts are found, then the account name returned is "[ACCOUNT_NAME]".

Example

Perhaps you want your $INSTDIR to be the full path to the SourceMods folder (for HL2), in which case you'd do it like so:

LangString SteamNotInstalled ${LANG_ENGLISH} "Valve's Steam is not installed!$\r$\nSetup will now exit."
 
Function .onInit
 
  Call GetSteamAccountName
  Pop $R0 ; CaDDy-
  Pop $R1 ; E\Games\Steaaam
 
  # Check if Steam is installed
  StrCmp $R0 "" 0 +3
    MessageBox MB_OK|MB_ICONSTOP $(SteamNotInstalled)
    Abort
 
  # It is installed so set INSTDIR
  StrCpy $INSTDIR "$R1\SteamApps\$R0\SourceMods\MyMod"
 
FunctionEnd

The Function

Function GetSteamAccountName
Push $R0
Push $R1
Push $R2
Push $R3
 
 ReadRegStr $R0 HKCU "Software\Valve\Steam" "SteamExe"
 StrCmp $R0 "" noSteam
 
 StrCpy $R1 0
  IntOp $R1 $R1 - 1
  StrCpy $R2 $R0 1 $R1
  StrCmp $R2 "" noAccount
  StrCmp $R2 "/" 0 -3
 StrCpy $R0 $R0 $R1
 
 StrCpy $R1 0
  IntOp $R1 $R1 + 1
  StrCpy $R2 $R0 1 -$R1
  StrCmp $R2 "" +8
  StrCmp $R2 "/" 0 -3
 StrCpy $R2 $R0 -$R1
 IntOp $R1 $R1 - 1
 StrCpy $R3 $R0 "" -$R1
 StrCpy $R0 "$R2\$R3"
 IntOp $R1 $R1 + 1
 Goto -9
 
 FindFirst $R1 $R2 "$R0\steamapps\*.*"
 loopFile:
  StrCmp $R2 "SourceMods" nextFile
  #added this for the newest steam (common/media is other content (like trailers and 3rd party games)
  StrCmp $R2 "common"     nextFile
  StrCmp $R2 "media"      nextFile
  StrCmp $R2 "."          nextFile
  StrCmp $R2 ".."         nextFile
 
  IfFileExists "$R0\steamapps\$R2\*.*" done
 
 nextFile:
  ClearErrors
  FindNext $R1 $R2
  IfErrors 0 loopFile
 FindClose $R1
 
 noAccount:
  StrCpy $R2 "[ACCOUNT_NAME]"
 
 done:
  StrCpy $R1 $R0
  StrCpy $R0 $R2
  Goto +3
 
 noSteam:
  StrCpy $R1 ""
  StrCpy $R0 ""
 
Pop $R3
Pop $R2
Exch $R1
Exch
Exch $R0
FunctionEnd

Written for new NSIS user in this forum topic (modified afterwards for Source mod developers).

Edit (amckern) The VDC has a more complete script found at http://developer.valvesoftware.com/wiki/Source_Mod_Installers

-Stu