diff --git a/Readme.txt b/Readme.txt index 9772200..d307911 100644 --- a/Readme.txt +++ b/Readme.txt @@ -11,6 +11,23 @@ website at: http://partner.steamgames.com Revision History: +---------------------------------------------------------------- +v1.10 20th July 2010 +---------------------------------------------------------------- + +Friends / Matchmaking +* added function ISteamFriends::GetClanTag(), which returns the abbreviation set for a group +* added "stats" and "achievements" options to ISteamFriends::ActivateGameOverlayToUser() +* added function ISteamFriends::ActivateGameOverlayInviteDialog() to open the invite dialog for a specific lobby +* renamed ISteamMatchmaking::SetGameType() to the more correct SetGameTags() + +Authentication +* added ISteamUtils::CheckFileSignature(), which can be used to verify that a binary has a valid signature + +Other +* added #pragma pack() in several places around structures in headers + + ---------------------------------------------------------------- v1.09 12th May 2010 ---------------------------------------------------------------- diff --git a/SteamworksExample/Lobby.cpp b/SteamworksExample/Lobby.cpp index 7f4b556..d090c9c 100644 --- a/SteamworksExample/Lobby.cpp +++ b/SteamworksExample/Lobby.cpp @@ -45,7 +45,7 @@ public: if ( pchName && *pchName ) { bool bReady = ( 1 == atoi( SteamMatchmaking()->GetLobbyMemberData( steamIDLobby, steamIDLobbyMember, "ready" ) ) ); - LobbyMenuItem_t menuItem = { steamIDLobbyMember }; + LobbyMenuItem_t menuItem = { steamIDLobbyMember, LobbyMenuItem_t::k_ELobbyMenuItemUser }; char rgchMenuText[256]; _snprintf( rgchMenuText, sizeof( rgchMenuText ), "%s %s", pchName, bReady ? "(READY)" : "" ); @@ -57,7 +57,7 @@ public: // ready/not ready toggle { bool bReady = ( 1 == atoi( SteamMatchmaking()->GetLobbyMemberData( steamIDLobby, SteamUser()->GetSteamID(), "ready" ) ) ); - LobbyMenuItem_t menuItem = { CSteamID(), false, true }; + LobbyMenuItem_t menuItem = { CSteamID(), LobbyMenuItem_t::k_ELobbyMenuItemToggleReadState }; if ( bReady ) AddMenuItem( CLobbyMenu::MenuItem_t( "Set myself as Not Ready", menuItem ) ); else @@ -74,13 +74,20 @@ public: // start game if ( bLobbyOwner ) { - LobbyMenuItem_t menuItem = { CSteamID(), true, false }; + LobbyMenuItem_t menuItem = { CSteamID(), LobbyMenuItem_t::k_ELobbyMenuItemStartGame }; AddMenuItem( CLobbyMenu::MenuItem_t( "Start game", menuItem ) ); } + // invite friend + { + LobbyMenuItem_t menuItem = { CSteamID(), LobbyMenuItem_t::k_ELobbyMenuItemInviteToLobby, steamIDLobby }; + AddMenuItem( CLobbyMenu::MenuItem_t( "Invite Friend", menuItem ) ); + } + + // exit lobby { - LobbyMenuItem_t menuItem = { CSteamID(), false, false, true }; + LobbyMenuItem_t menuItem = { CSteamID(), LobbyMenuItem_t::k_ELobbyMenuItemLeaveLobby }; AddMenuItem( CLobbyMenu::MenuItem_t( "Return to main menu", menuItem ) ); } diff --git a/SteamworksExample/SpaceWarClient.cpp b/SteamworksExample/SpaceWarClient.cpp index 1e80278..64418e0 100644 --- a/SteamworksExample/SpaceWarClient.cpp +++ b/SteamworksExample/SpaceWarClient.cpp @@ -721,7 +721,7 @@ void CSpaceWarClient::OnLobbyGameCreated( LobbyGameCreated_t *pCallback ) //----------------------------------------------------------------------------- void CSpaceWarClient::OnMenuSelection( LobbyMenuItem_t selection ) { - if ( selection.m_bLeaveLobby ) + if ( selection.m_eCommand == LobbyMenuItem_t::k_ELobbyMenuItemLeaveLobby ) { // leave the lobby SteamMatchmaking()->LeaveLobby( m_steamIDLobby ); @@ -730,7 +730,7 @@ void CSpaceWarClient::OnMenuSelection( LobbyMenuItem_t selection ) // return to main menu SetGameState( k_EClientGameMenu ); } - else if ( selection.m_bToggleReadyState ) + else if ( selection.m_eCommand == LobbyMenuItem_t::k_ELobbyMenuItemToggleReadState ) { // update our state bool bOldState = ( 1 == atoi( SteamMatchmaking()->GetLobbyMemberData( m_steamIDLobby, SteamUser()->GetSteamID(), "ready" ) ) ); @@ -738,7 +738,7 @@ void CSpaceWarClient::OnMenuSelection( LobbyMenuItem_t selection ) // publish to everyone SteamMatchmaking()->SetLobbyMemberData( m_steamIDLobby, "ready", bNewState ? "1" : "0" ); } - else if ( selection.m_bStartGame ) + else if ( selection.m_eCommand == LobbyMenuItem_t::k_ELobbyMenuItemStartGame ) { // make sure we're not already starting a server if ( m_pServer ) @@ -752,6 +752,10 @@ void CSpaceWarClient::OnMenuSelection( LobbyMenuItem_t selection ) // before telling all the lobby members to join (so that the NAT traversal code has a path to contact the game server) OutputDebugString( "Game server being created; game will start soon.\n" ); } + else if ( selection.m_eCommand == LobbyMenuItem_t::k_ELobbyMenuItemInviteToLobby ) + { + SteamFriends()->ActivateGameOverlayInviteDialog( selection.m_steamIDLobby ); + } } diff --git a/SteamworksExample/SpaceWarClient.h b/SteamworksExample/SpaceWarClient.h index b327bef..2e62289 100644 --- a/SteamworksExample/SpaceWarClient.h +++ b/SteamworksExample/SpaceWarClient.h @@ -62,10 +62,18 @@ struct LobbyBrowserMenuItem_t // a user as shown in the lobby screen struct LobbyMenuItem_t { + enum ELobbyMenuItemCommand + { + k_ELobbyMenuItemUser, + k_ELobbyMenuItemStartGame, + k_ELobbyMenuItemToggleReadState, + k_ELobbyMenuItemLeaveLobby, + k_ELobbyMenuItemInviteToLobby + }; + CSteamID m_steamIDUser; // the user who this is in the lobby - bool m_bStartGame; - bool m_bToggleReadyState; - bool m_bLeaveLobby; + ELobbyMenuItemCommand m_eCommand; + CSteamID m_steamIDLobby; // set if k_ELobbyMenuItemInviteToLobby }; // a leaderboard item diff --git a/client/steam.exe b/client/steam.exe index a4ee6d1..75028c9 100644 Binary files a/client/steam.exe and b/client/steam.exe differ diff --git a/public/steam/isteamfriends.h b/public/steam/isteamfriends.h index 24066a7..2a2d5b2 100644 --- a/public/steam/isteamfriends.h +++ b/public/steam/isteamfriends.h @@ -158,6 +158,7 @@ public: virtual int GetClanCount() = 0; virtual CSteamID GetClanByIndex( int iClan ) = 0; virtual const char *GetClanName( CSteamID steamIDClan ) = 0; + virtual const char *GetClanTag( CSteamID steamIDClan ) = 0; // iterators for getting users in a chat room, lobby, game server or clan // note that large clans that cannot be iterated by the local user @@ -179,6 +180,8 @@ public: // valid options are // "steamid" - opens the overlay web browser to the specified user or groups profile // "chat" - opens a chat window to the specified user, or joins the group chat + // "stats" - opens the overlay web browser to the specified user's stats + // "achievements" - opens the overlay web browser to the specified user's achievements virtual void ActivateGameOverlayToUser( const char *pchDialog, CSteamID steamID ) = 0; // activates game overlay web browser directly to the specified URL @@ -191,9 +194,13 @@ public: // Mark a target user as 'played with'. This is a client-side only feature that requires that the calling user is // in game virtual void SetPlayedWith( CSteamID steamIDUserPlayedWith ) = 0; + + // activates game overlay to open the invite dialog. Invitations will be sent for the provided lobby. + // You can also use ActivateGameOverlay( "LobbyInvite" ) to allow the user to create invitations for their current public lobby. + virtual void ActivateGameOverlayInviteDialog( CSteamID steamIDLobby ) = 0; }; -#define STEAMFRIENDS_INTERFACE_VERSION "SteamFriends005" +#define STEAMFRIENDS_INTERFACE_VERSION "SteamFriends006" // callbacks #pragma pack( push, 8 ) diff --git a/public/steam/isteamutils.h b/public/steam/isteamutils.h index 6467406..1210896 100644 --- a/public/steam/isteamutils.h +++ b/public/steam/isteamutils.h @@ -108,6 +108,9 @@ public: // in that case, and then you can check for this periodically (roughly 33hz is desirable) and make sure you // refresh the screen with Present or SwapBuffers to allow the overlay to do it's work. virtual bool BOverlayNeedsPresent() = 0; + + // Asynchronous call to check if file is signed, result is returned in CheckFileSignature_t + virtual SteamAPICall_t CheckFileSignature( const char *szFileName ) = 0; }; #define STEAMUTILS_INTERFACE_VERSION "SteamUtils005" @@ -153,6 +156,27 @@ struct SteamShutdown_t enum { k_iCallback = k_iSteamUtilsCallbacks + 4 }; }; +//----------------------------------------------------------------------------- +// results for CheckFileSignature +//----------------------------------------------------------------------------- +enum ECheckFileSignature +{ + k_ECheckFileSignatureInvalidSignature = 0, + k_ECheckFileSignatureValidSignature = 1, + k_ECheckFileSignatureFileNotFound = 2, + k_ECheckFileSignatureNoSignaturesFoundForThisApp = 3, + k_ECheckFileSignatureNoSignaturesFoundForThisFile = 4, +}; + +//----------------------------------------------------------------------------- +// callback for CheckFileSignature +//----------------------------------------------------------------------------- +struct CheckFileSignature_t +{ + enum { k_iCallback = k_iSteamUtilsCallbacks + 5 }; + ECheckFileSignature m_eCheckFileSignature; +}; + #pragma pack( pop ) #endif // ISTEAMUTILS_H diff --git a/public/steam/steam_api.h b/public/steam/steam_api.h index 289d39b..389dea0 100644 --- a/public/steam/steam_api.h +++ b/public/steam/steam_api.h @@ -76,7 +76,11 @@ S_API void SteamAPI_SetMiniDumpComment( const char *pchMsg ); // this should be called before the game initialized the steam APIs // pchDate should be of the format "Mmm dd yyyy" (such as from the __DATE__ macro ) // pchTime should be of the format "hh:mm:ss" (such as from the __TIME__ macro ) -S_API void SteamAPI_UseBreakpadCrashHandler( char const *pchVersion, char const *pchDate, char const *pchTime ); +// bFullMemoryDumps (Win32 only) -- writes out a uuid-full.dmp in the client/dumps folder +// pvContext-- can be NULL, will be the void * context passed into m_pfnPreMinidumpCallback +// PFNPreMinidumpCallback m_pfnPreMinidumpCallback -- optional callback which occurs just before a .dmp file is written during a crash. Applications can hook this to allow adding additional information into the .dmp comment stream. +S_API void SteamAPI_UseBreakpadCrashHandler( char const *pchVersion, char const *pchDate, char const *pchTime, bool bFullMemoryDumps, void *pvContext, PFNPreMinidumpCallback m_pfnPreMinidumpCallback ); +S_API void SteamAPI_SetBreakpadAppID( uint32 unAppID ); // interface pointers, configured by SteamAPI_Init() S_API ISteamClient *SteamClient(); diff --git a/public/steam/steamclientpublic.h b/public/steam/steamclientpublic.h index 77cab31..f5e5b3c 100644 --- a/public/steam/steamclientpublic.h +++ b/public/steam/steamclientpublic.h @@ -227,6 +227,7 @@ enum EChatRoomEnterResponse k_EChatRoomEnterResponseFull = 4, // Chat room has reached its maximum size k_EChatRoomEnterResponseError = 5, // Unexpected Error k_EChatRoomEnterResponseBanned = 6, // You are banned from this chat room and may not join + k_EChatRoomEnterResponseLimited = 7, // Joining this chat is not allowed because you are a limited user (no value on account) }; @@ -900,4 +901,17 @@ const int k_cchGameExtraInfoMax = 64; #define QUERY_PORT_NOT_INITIALIZED 0xFFFF // We haven't asked the GS for this query port's actual value yet. #define QUERY_PORT_ERROR 0xFFFE // We were unable to get the query port for this server. + +//----------------------------------------------------------------------------- +// Purpose: Passed as argument to SteamAPI_UseBreakpadCrashHandler to enable optional callback +// just before minidump file is captured after a crash has occurred. (Allows app to append additional comment data to the dump, etc.) +//----------------------------------------------------------------------------- +typedef void (*PFNPreMinidumpCallback)(void *context); + +//----------------------------------------------------------------------------- +// Purpose: Used by ICrashHandler interfaces to reference particular installed crash handlers +//----------------------------------------------------------------------------- +typedef void *BREAKPAD_HANDLE; +#define BREAKPAD_INVALID_HANDLE (BREAKPAD_HANDLE)0 + #endif // STEAMCLIENTPUBLIC_H diff --git a/redistributable_bin/Steam.dll b/redistributable_bin/Steam.dll index 49b8e4f..7e2f2de 100644 Binary files a/redistributable_bin/Steam.dll and b/redistributable_bin/Steam.dll differ diff --git a/redistributable_bin/linux32/libsteam_api.so b/redistributable_bin/linux32/libsteam_api.so index e6f47b1..13730e3 100644 Binary files a/redistributable_bin/linux32/libsteam_api.so and b/redistributable_bin/linux32/libsteam_api.so differ diff --git a/redistributable_bin/linux32/libtier0_s.so b/redistributable_bin/linux32/libtier0_s.so index 5171c28..9009b76 100644 Binary files a/redistributable_bin/linux32/libtier0_s.so and b/redistributable_bin/linux32/libtier0_s.so differ diff --git a/redistributable_bin/linux32/libvstdlib_s.so b/redistributable_bin/linux32/libvstdlib_s.so index 8839bca..8d22396 100644 Binary files a/redistributable_bin/linux32/libvstdlib_s.so and b/redistributable_bin/linux32/libvstdlib_s.so differ diff --git a/redistributable_bin/linux32/steamclient.so b/redistributable_bin/linux32/steamclient.so index c1947d7..f021f2b 100644 Binary files a/redistributable_bin/linux32/steamclient.so and b/redistributable_bin/linux32/steamclient.so differ diff --git a/redistributable_bin/osx32/libSteam.dylib b/redistributable_bin/osx32/libSteam.dylib index 5c73d3d..ab6bf63 100644 Binary files a/redistributable_bin/osx32/libSteam.dylib and b/redistributable_bin/osx32/libSteam.dylib differ diff --git a/redistributable_bin/osx32/libsteam_api.dylib b/redistributable_bin/osx32/libsteam_api.dylib index b3fd2de..37bcd99 100644 Binary files a/redistributable_bin/osx32/libsteam_api.dylib and b/redistributable_bin/osx32/libsteam_api.dylib differ diff --git a/redistributable_bin/osx32/libtier0_s.dylib b/redistributable_bin/osx32/libtier0_s.dylib index 60af273..e36ef4c 100644 Binary files a/redistributable_bin/osx32/libtier0_s.dylib and b/redistributable_bin/osx32/libtier0_s.dylib differ diff --git a/redistributable_bin/osx32/libvstdlib_s.dylib b/redistributable_bin/osx32/libvstdlib_s.dylib index 2233d74..3040e0f 100644 Binary files a/redistributable_bin/osx32/libvstdlib_s.dylib and b/redistributable_bin/osx32/libvstdlib_s.dylib differ diff --git a/redistributable_bin/osx32/steamclient.dylib b/redistributable_bin/osx32/steamclient.dylib index a33256a..4a4955e 100644 Binary files a/redistributable_bin/osx32/steamclient.dylib and b/redistributable_bin/osx32/steamclient.dylib differ diff --git a/redistributable_bin/steam_api.dll b/redistributable_bin/steam_api.dll index 79a5000..f10948d 100644 Binary files a/redistributable_bin/steam_api.dll and b/redistributable_bin/steam_api.dll differ diff --git a/redistributable_bin/steam_api.lib b/redistributable_bin/steam_api.lib index 985b87b..d31b653 100644 Binary files a/redistributable_bin/steam_api.lib and b/redistributable_bin/steam_api.lib differ diff --git a/redistributable_bin/steamclient.dll b/redistributable_bin/steamclient.dll index e0eb677..de64702 100644 Binary files a/redistributable_bin/steamclient.dll and b/redistributable_bin/steamclient.dll differ diff --git a/redistributable_bin/tier0_s.dll b/redistributable_bin/tier0_s.dll index 1aff97a..3ecb74c 100644 Binary files a/redistributable_bin/tier0_s.dll and b/redistributable_bin/tier0_s.dll differ diff --git a/redistributable_bin/vstdlib_s.dll b/redistributable_bin/vstdlib_s.dll index 6e4e080..22280ee 100644 Binary files a/redistributable_bin/vstdlib_s.dll and b/redistributable_bin/vstdlib_s.dll differ diff --git a/tools/ContentPrep.zip b/tools/ContentPrep.zip index 85bb625..c799b8b 100644 Binary files a/tools/ContentPrep.zip and b/tools/ContentPrep.zip differ